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