]> git.lizzy.rs Git - rust.git/blob - src/test/ui/lint/issue-54538-unused-parens-lint.fixed
Merge commit 'dbee13661efa269cb4cd57bb4c6b99a19732b484' into sync_cg_clif-2020-12-27
[rust.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 }