about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2021-09-30 18:05:25 -0700
committerGitHub <noreply@github.com>2021-09-30 18:05:25 -0700
commitfbc67b59a12adc84642989e6f736cdfd2737a47c (patch)
tree714f2ebc20b55283eaefbf5ca1213fa64306fe94 /src/test
parentfccfc981d612816e256868eb7485210da43f5e03 (diff)
parent6e973f08508fddc095c1cef20e07110c918e72e8 (diff)
downloadrust-fbc67b59a12adc84642989e6f736cdfd2737a47c.tar.gz
rust-fbc67b59a12adc84642989e6f736cdfd2737a47c.zip
Rollup merge of #89314 - notriddle:notriddle/lint-fix-enum-variant-match, r=davidtwco
fix(lint): don't suggest refutable patterns to "fix" irrefutable bind

In function arguments and let bindings, do not suggest changing `C` to `Foo::C` unless `C` is the only variant of `Foo`, because it won't work.

The general warning is still kept, because code like this is confusing.

Fixes #88730

p.s. `src/test/ui/lint/lint-uppercase-variables.rs` already tests the one-variant case.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/suggestions/issue-88730.rs16
-rw-r--r--src/test/ui/suggestions/issue-88730.stderr21
2 files changed, 37 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/issue-88730.rs b/src/test/ui/suggestions/issue-88730.rs
new file mode 100644
index 00000000000..e63210a3e98
--- /dev/null
+++ b/src/test/ui/suggestions/issue-88730.rs
@@ -0,0 +1,16 @@
+#![allow(unused, nonstandard_style)]
+#![deny(bindings_with_variant_name)]
+
+// If an enum has two different variants,
+// then it cannot be matched upon in a function argument.
+// It still gets a warning, but no suggestions.
+enum Foo {
+    C,
+    D,
+}
+
+fn foo(C: Foo) {} //~ERROR
+
+fn main() {
+    let C = Foo::D; //~ERROR
+}
diff --git a/src/test/ui/suggestions/issue-88730.stderr b/src/test/ui/suggestions/issue-88730.stderr
new file mode 100644
index 00000000000..eb22b0ea5c8
--- /dev/null
+++ b/src/test/ui/suggestions/issue-88730.stderr
@@ -0,0 +1,21 @@
+error[E0170]: pattern binding `C` is named the same as one of the variants of the type `Foo`
+  --> $DIR/issue-88730.rs:12:8
+   |
+LL | fn foo(C: Foo) {}
+   |        ^
+   |
+note: the lint level is defined here
+  --> $DIR/issue-88730.rs:2:9
+   |
+LL | #![deny(bindings_with_variant_name)]
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0170]: pattern binding `C` is named the same as one of the variants of the type `Foo`
+  --> $DIR/issue-88730.rs:15:9
+   |
+LL |     let C = Foo::D;
+   |         ^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0170`.