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