summaryrefslogtreecommitdiffstats
path: root/tests/ui/lint/unused/issue-54538-unused-parens-lint.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/lint/unused/issue-54538-unused-parens-lint.rs
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/lint/unused/issue-54538-unused-parens-lint.rs')
-rw-r--r--tests/ui/lint/unused/issue-54538-unused-parens-lint.rs113
1 files changed, 113 insertions, 0 deletions
diff --git a/tests/ui/lint/unused/issue-54538-unused-parens-lint.rs b/tests/ui/lint/unused/issue-54538-unused-parens-lint.rs
new file mode 100644
index 000000000..28b662dd0
--- /dev/null
+++ b/tests/ui/lint/unused/issue-54538-unused-parens-lint.rs
@@ -0,0 +1,113 @@
+// run-rustfix
+
+#![feature(box_patterns, stmt_expr_attributes, yeet_expr)]
+
+#![allow(
+ dead_code,
+ ellipsis_inclusive_range_patterns,
+ irrefutable_let_patterns,
+ unreachable_patterns,
+ unused_mut,
+ unused_variables
+)]
+#![deny(unused_parens)]
+
+fn lint_on_top_level() {
+ let (a) = 0; //~ ERROR unnecessary parentheses around pattern
+ for (a) in 0..1 {} //~ ERROR unnecessary parentheses around pattern
+ if let (a) = 0 {} //~ ERROR unnecessary parentheses around pattern
+ while let (a) = 0 {} //~ ERROR unnecessary parentheses around pattern
+ fn foo((a): u8) {} //~ ERROR unnecessary parentheses around pattern
+ let _ = |(a): u8| 0; //~ ERROR unnecessary parentheses around pattern
+}
+
+fn _no_lint_attr() {
+ let _x = #[allow(dead_code)] (1 + 2);
+}
+
+fn _no_lint_yeet() -> Result<(), ()> {
+ #[allow(unreachable_code)]
+ if (do yeet) {}
+
+ Ok(())
+}
+
+// Don't lint in these cases (#64106).
+fn or_patterns_no_lint() {
+ match Box::new(0) {
+ box (0 | 1) => {} // Should not lint as `box 0 | 1` binds as `(box 0) | 1`.
+ _ => {}
+ }
+
+ match 0 {
+ x @ (0 | 1) => {} // Should not lint as `x @ 0 | 1` binds as `(x @ 0) | 1`.
+ _ => {}
+ }
+
+ if let &(0 | 1) = &0 {} // Should also not lint.
+ if let &mut (0 | 1) = &mut 0 {} // Same.
+
+ fn foo((Ok(a) | Err(a)): Result<u8, u8>) {} // Doesn't parse if we remove parens for now.
+
+ let _ = |(Ok(a) | Err(a)): Result<u8, u8>| 1; // `|Ok(a) | Err(a)| 1` parses as bit-or.
+}
+
+fn or_patterns_will_lint() {
+ if let (0 | 1) = 0 {} //~ ERROR unnecessary parentheses around pattern
+ if let ((0 | 1),) = (0,) {} //~ ERROR unnecessary parentheses around pattern
+ if let [(0 | 1)] = [0] {} //~ ERROR unnecessary parentheses around pattern
+ if let 0 | (1 | 2) = 0 {} //~ ERROR unnecessary parentheses around pattern
+ struct TS(u8);
+ if let TS((0 | 1)) = TS(0) {} //~ ERROR unnecessary parentheses around pattern
+ struct NS { f: u8 }
+ if let NS { f: (0 | 1) } = (NS { f: 0 }) {} //~ ERROR unnecessary parentheses around pattern
+}
+
+// Don't lint on `&(mut x)` because `&mut x` means something else (#55342).
+fn deref_mut_binding_no_lint() {
+ let &(mut x) = &0;
+}
+
+fn main() {
+ match 1 {
+ (_) => {} //~ ERROR unnecessary parentheses around pattern
+ (y) => {} //~ ERROR unnecessary parentheses around pattern
+ (ref r) => {} //~ ERROR unnecessary parentheses around pattern
+ (e @ 1...2) => {} //~ ERROR unnecessary parentheses around pattern
+ (1...2) => {} // Non ambiguous range pattern should not warn
+ e @ (3...4) => {} // Non ambiguous range pattern should not warn
+ }
+
+ match &1 {
+ (e @ &(1...2)) => {} //~ ERROR unnecessary parentheses around pattern
+ &(_) => {} //~ ERROR unnecessary parentheses around pattern
+ e @ &(1...2) => {} // Ambiguous range pattern should not warn
+ &(1...2) => {} // Ambiguous range pattern should not warn
+ }
+
+ match &1 {
+ e @ &(1...2) | e @ &(3...4) => {} // Complex ambiguous pattern should not warn
+ &_ => {}
+ }
+
+ match 1 {
+ (_) => {} //~ ERROR unnecessary parentheses around pattern
+ (y) => {} //~ ERROR unnecessary parentheses around pattern
+ (ref r) => {} //~ ERROR unnecessary parentheses around pattern
+ (e @ 1..=2) => {} //~ ERROR unnecessary parentheses around pattern
+ (1..=2) => {} // Non ambiguous range pattern should not warn
+ e @ (3..=4) => {} // Non ambiguous range pattern should not warn
+ }
+
+ match &1 {
+ (e @ &(1..=2)) => {} //~ ERROR unnecessary parentheses around pattern
+ &(_) => {} //~ ERROR unnecessary parentheses around pattern
+ e @ &(1..=2) => {} // Ambiguous range pattern should not warn
+ &(1..=2) => {} // Ambiguous range pattern should not warn
+ }
+
+ match &1 {
+ e @ &(1..=2) | e @ &(3..=4) => {} // Complex ambiguous pattern should not warn
+ &_ => {}
+ }
+}