]> git.proxmox.com Git - rustc.git/blob - src/test/ui/lint/issue-54538-unused-parens-lint.fixed
New upstream version 1.46.0~beta.2+dfsg1
[rustc.git] / src / test / ui / lint / issue-54538-unused-parens-lint.fixed
1 // run-rustfix
2
3 #![feature(box_patterns, stmt_expr_attributes)]
4 #![feature(or_patterns)]
5
6 #![allow(
7 dead_code,
8 ellipsis_inclusive_range_patterns,
9 irrefutable_let_patterns,
10 unreachable_patterns,
11 unused_mut,
12 unused_variables
13 )]
14 #![deny(unused_parens)]
15
16 fn lint_on_top_level() {
17 let a = 0; //~ ERROR unnecessary parentheses around pattern
18 for a in 0..1 {} //~ ERROR unnecessary parentheses around pattern
19 if let a = 0 {} //~ ERROR unnecessary parentheses around pattern
20 while let a = 0 {} //~ ERROR unnecessary parentheses around pattern
21 fn foo(a: u8) {} //~ ERROR unnecessary parentheses around pattern
22 let _ = |a: u8| 0; //~ ERROR unnecessary parentheses around pattern
23 }
24
25 fn _no_lint_attr() {
26 let _x = #[allow(dead_code)] (1 + 2);
27 }
28
29 // Don't lint in these cases (#64106).
30 fn or_patterns_no_lint() {
31 match Box::new(0) {
32 box (0 | 1) => {} // Should not lint as `box 0 | 1` binds as `(box 0) | 1`.
33 _ => {}
34 }
35
36 match 0 {
37 x @ (0 | 1) => {} // Should not lint as `x @ 0 | 1` binds as `(x @ 0) | 1`.
38 _ => {}
39 }
40
41 if let &(0 | 1) = &0 {} // Should also not lint.
42 if let &mut (0 | 1) = &mut 0 {} // Same.
43
44 fn foo((Ok(a) | Err(a)): Result<u8, u8>) {} // Doesn't parse if we remove parens for now.
45
46 let _ = |(Ok(a) | Err(a)): Result<u8, u8>| 1; // `|Ok(a) | Err(a)| 1` parses as bit-or.
47 }
48
49 fn or_patterns_will_lint() {
50 if let 0 | 1 = 0 {} //~ ERROR unnecessary parentheses around pattern
51 if let (0 | 1,) = (0,) {} //~ ERROR unnecessary parentheses around pattern
52 if let [0 | 1] = [0] {} //~ ERROR unnecessary parentheses around pattern
53 if let 0 | 1 | 2 = 0 {} //~ ERROR unnecessary parentheses around pattern
54 struct TS(u8);
55 if let TS(0 | 1) = TS(0) {} //~ ERROR unnecessary parentheses around pattern
56 struct NS { f: u8 }
57 if let NS { f: 0 | 1 } = (NS { f: 0 }) {} //~ ERROR unnecessary parentheses around pattern
58 }
59
60 // Don't lint on `&(mut x)` because `&mut x` means something else (#55342).
61 fn deref_mut_binding_no_lint() {
62 let &(mut x) = &0;
63 }
64
65 fn main() {
66 match 1 {
67 _ => {} //~ ERROR unnecessary parentheses around pattern
68 y => {} //~ ERROR unnecessary parentheses around pattern
69 ref r => {} //~ ERROR unnecessary parentheses around pattern
70 e @ 1...2 => {} //~ ERROR unnecessary parentheses around pattern
71 (1...2) => {} // Non ambiguous range pattern should not warn
72 e @ (3...4) => {} // Non ambiguous range pattern should not warn
73 }
74
75 match &1 {
76 e @ &(1...2) => {} //~ ERROR unnecessary parentheses around pattern
77 &_ => {} //~ ERROR unnecessary parentheses around pattern
78 e @ &(1...2) => {} // Ambiguous range pattern should not warn
79 &(1...2) => {} // Ambiguous range pattern should not warn
80 }
81
82 match &1 {
83 e @ &(1...2) | e @ &(3...4) => {} // Complex ambiguous pattern should not warn
84 &_ => {}
85 }
86
87 match 1 {
88 _ => {} //~ ERROR unnecessary parentheses around pattern
89 y => {} //~ ERROR unnecessary parentheses around pattern
90 ref r => {} //~ ERROR unnecessary parentheses around pattern
91 e @ 1..=2 => {} //~ ERROR unnecessary parentheses around pattern
92 (1..=2) => {} // Non ambiguous range pattern should not warn
93 e @ (3..=4) => {} // Non ambiguous range pattern should not warn
94 }
95
96 match &1 {
97 e @ &(1..=2) => {} //~ ERROR unnecessary parentheses around pattern
98 &_ => {} //~ ERROR unnecessary parentheses around pattern
99 e @ &(1..=2) => {} // Ambiguous range pattern should not warn
100 &(1..=2) => {} // Ambiguous range pattern should not warn
101 }
102
103 match &1 {
104 e @ &(1..=2) | e @ &(3..=4) => {} // Complex ambiguous pattern should not warn
105 &_ => {}
106 }
107 }