3 #![feature(box_patterns, stmt_expr_attributes)]
7 ellipsis_inclusive_range_patterns
,
8 irrefutable_let_patterns
,
13 #![deny(unused_parens)]
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
25 let _x
= #[allow(dead_code)] (1 + 2);
28 // Don't lint in these cases (#64106).
29 fn or_patterns_no_lint() {
31 box (0 | 1) => {}
// Should not lint as `box 0 | 1` binds as `(box 0) | 1`.
36 x @
(0 | 1) => {}
// Should not lint as `x @ 0 | 1` binds as `(x @ 0) | 1`.
40 if let &(0 | 1) = &0 {}
// Should also not lint.
41 if let &mut (0 | 1) = &mut 0 {}
// Same.
43 fn foo((Ok(a
) | Err(a
)): Result
<u8, u8>) {}
// Doesn't parse if we remove parens for now.
45 let _
= |(Ok(a
) | Err(a
)): Result
<u8, u8>| 1; // `|Ok(a) | Err(a)| 1` parses as bit-or.
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
54 if let TS((0 | 1)) = TS(0) {}
//~ ERROR unnecessary parentheses around pattern
56 if let NS { f: (0 | 1) }
= (NS { f: 0 }
) {}
//~ ERROR unnecessary parentheses around pattern
59 // Don't lint on `&(mut x)` because `&mut x` means something else (#55342).
60 fn deref_mut_binding_no_lint() {
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
71 e @
(3...4) => {}
// Non ambiguous range pattern should not warn
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
82 e @
&(1...2) | e @
&(3...4) => {}
// Complex ambiguous pattern should not warn
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
92 e @
(3..=4) => {}
// Non ambiguous range pattern should not warn
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
103 e @
&(1..=2) | e @
&(3..=4) => {}
// Complex ambiguous pattern should not warn