]> git.proxmox.com Git - rustc.git/blame - src/test/ui/lint/unused/issue-54538-unused-parens-lint.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / src / test / ui / lint / unused / issue-54538-unused-parens-lint.rs
CommitLineData
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
15fn 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
24fn _no_lint_attr() {
25 let _x = #[allow(dead_code)] (1 + 2);
26}
27
28// Don't lint in these cases (#64106).
29fn 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
48fn 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).
60fn deref_mut_binding_no_lint() {
61 let &(mut x) = &0;
62}
0bf4aa26
XL
63
64fn 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}