summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0170.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0170.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0170.md67
1 files changed, 67 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0170.md b/compiler/rustc_error_codes/src/error_codes/E0170.md
new file mode 100644
index 000000000..9678cd173
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0170.md
@@ -0,0 +1,67 @@
+A pattern binding is using the same name as one of the variants of a type.
+
+Erroneous code example:
+
+```compile_fail,E0170
+# #![deny(warnings)]
+enum Method {
+ GET,
+ POST,
+}
+
+fn is_empty(s: Method) -> bool {
+ match s {
+ GET => true,
+ _ => false
+ }
+}
+
+fn main() {}
+```
+
+Enum variants are qualified by default. For example, given this type:
+
+```
+enum Method {
+ GET,
+ POST,
+}
+```
+
+You would match it using:
+
+```
+enum Method {
+ GET,
+ POST,
+}
+
+let m = Method::GET;
+
+match m {
+ Method::GET => {},
+ Method::POST => {},
+}
+```
+
+If you don't qualify the names, the code will bind new variables named "GET" and
+"POST" instead. This behavior is likely not what you want, so `rustc` warns when
+that happens.
+
+Qualified names are good practice, and most code works well with them. But if
+you prefer them unqualified, you can import the variants into scope:
+
+```
+use Method::*;
+enum Method { GET, POST }
+# fn main() {}
+```
+
+If you want others to be able to import variants from your module directly, use
+`pub use`:
+
+```
+pub use Method::*;
+pub enum Method { GET, POST }
+# fn main() {}
+```