]> git.lizzy.rs Git - rust.git/blob - src/test/ui/lint/issue-54538-unused-parens-lint.fixed
Rollup merge of #87180 - notriddle:notriddle/sidebar-keyboard-mobile, r=GuillaumeGomez
[rust.git] / src / test / ui / lint / issue-54538-unused-parens-lint.fixed
1 // run-rustfix
2
3 #![feature(box_patterns, stmt_expr_attributes)]
4
5 #![allow(
6     dead_code,
7     ellipsis_inclusive_range_patterns,
8     irrefutable_let_patterns,
9     unreachable_patterns,
10     unused_mut,
11     unused_variables
12 )]
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 }
63
64 fn main() {
65     match 1 {
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
72     }
73
74     match &1 {
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
79     }
80
81     match &1 {
82         e @ &(1...2) | e @ &(3...4) => {} // Complex ambiguous pattern should not warn
83         &_ => {}
84     }
85
86     match 1 {
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
93     }
94
95     match &1 {
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
100     }
101
102     match &1 {
103         e @ &(1..=2) | e @ &(3..=4) => {} // Complex ambiguous pattern should not warn
104         &_ => {}
105     }
106 }