1
Fork 0

emit unused_parens for break if it is not immediately followed by a block

This commit is contained in:
Lukas Markeffsky 2023-04-12 23:53:18 +02:00
parent 8df1f41b9c
commit 0d0949d87f
4 changed files with 69 additions and 29 deletions

View file

@ -599,10 +599,12 @@ trait UnusedDelimLint {
ExprKind::AssignOp(_op, _lhs, rhs) => rhs, ExprKind::AssignOp(_op, _lhs, rhs) => rhs,
ExprKind::Assign(_lhs, rhs, _span) => rhs, ExprKind::Assign(_lhs, rhs, _span) => rhs,
ExprKind::Ret(_) ExprKind::Ret(_) | ExprKind::Yield(..) | ExprKind::Yeet(..) => return true,
| ExprKind::Break(..)
| ExprKind::Yield(..) ExprKind::Break(_label, None) => return false,
| ExprKind::Yeet(..) => return true, ExprKind::Break(_label, Some(break_expr)) => {
return matches!(break_expr.kind, ExprKind::Block(..));
}
ExprKind::Range(_lhs, Some(rhs), _limits) => { ExprKind::Range(_lhs, Some(rhs), _limits) => {
return matches!(rhs.kind, ExprKind::Block(..)); return matches!(rhs.kind, ExprKind::Block(..));

View file

@ -21,18 +21,18 @@ fn lint_on_top_level() {
let _ = |a: u8| 0; //~ ERROR unnecessary parentheses around pattern let _ = |a: u8| 0; //~ ERROR unnecessary parentheses around pattern
} }
fn _no_lint_attr() { fn no_lint_attr() {
let _x = #[allow(dead_code)] (1 + 2); let _x = #[allow(dead_code)] (1 + 2);
} }
fn _no_lint_yeet() -> Result<(), ()> { fn no_lint_yeet() -> Result<(), ()> {
#[allow(unreachable_code)] #[allow(unreachable_code)]
if (do yeet) {} if (do yeet) {}
Ok(()) Ok(())
} }
fn _no_lint_ops() { fn no_lint_ops() {
#![allow(unreachable_code, irrefutable_let_patterns)] #![allow(unreachable_code, irrefutable_let_patterns)]
if ((..{}) == ..{}) {} if ((..{}) == ..{}) {}
if (!return) {} if (!return) {}
@ -40,6 +40,13 @@ fn _no_lint_ops() {
while let () = (*&mut false |= true && return) {} while let () = (*&mut false |= true && return) {}
} }
fn lint_break_if_not_followed_by_block() {
#![allow(unreachable_code)]
loop { if break {} } //~ ERROR unnecessary parentheses
loop { if break ({ println!("hello") }) {} } //~ ERROR unnecessary parentheses
loop { if (break { println!("hello") }) {} }
}
// Don't lint in these cases (#64106). // Don't lint in these cases (#64106).
fn or_patterns_no_lint() { fn or_patterns_no_lint() {
match Box::new(0) { match Box::new(0) {

View file

@ -21,18 +21,18 @@ fn lint_on_top_level() {
let _ = |(a): u8| 0; //~ ERROR unnecessary parentheses around pattern let _ = |(a): u8| 0; //~ ERROR unnecessary parentheses around pattern
} }
fn _no_lint_attr() { fn no_lint_attr() {
let _x = #[allow(dead_code)] (1 + 2); let _x = #[allow(dead_code)] (1 + 2);
} }
fn _no_lint_yeet() -> Result<(), ()> { fn no_lint_yeet() -> Result<(), ()> {
#[allow(unreachable_code)] #[allow(unreachable_code)]
if (do yeet) {} if (do yeet) {}
Ok(()) Ok(())
} }
fn _no_lint_ops() { fn no_lint_ops() {
#![allow(unreachable_code, irrefutable_let_patterns)] #![allow(unreachable_code, irrefutable_let_patterns)]
if ((..{}) == ..{}) {} if ((..{}) == ..{}) {}
if (!return) {} if (!return) {}
@ -40,6 +40,13 @@ fn _no_lint_ops() {
while let () = (*&mut false |= true && return) {} while let () = (*&mut false |= true && return) {}
} }
fn lint_break_if_not_followed_by_block() {
#![allow(unreachable_code)]
loop { if (break) {} } //~ ERROR unnecessary parentheses
loop { if (break ({ println!("hello") })) {} } //~ ERROR unnecessary parentheses
loop { if (break { println!("hello") }) {} }
}
// Don't lint in these cases (#64106). // Don't lint in these cases (#64106).
fn or_patterns_no_lint() { fn or_patterns_no_lint() {
match Box::new(0) { match Box::new(0) {

View file

@ -75,8 +75,32 @@ LL - let _ = |(a): u8| 0;
LL + let _ = |a: u8| 0; LL + let _ = |a: u8| 0;
| |
error: unnecessary parentheses around `if` condition
--> $DIR/issue-54538-unused-parens-lint.rs:45:15
|
LL | loop { if (break) {} }
| ^ ^
|
help: remove these parentheses
|
LL - loop { if (break) {} }
LL + loop { if break {} }
|
error: unnecessary parentheses around `if` condition
--> $DIR/issue-54538-unused-parens-lint.rs:46:15
|
LL | loop { if (break ({ println!("hello") })) {} }
| ^ ^
|
help: remove these parentheses
|
LL - loop { if (break ({ println!("hello") })) {} }
LL + loop { if break ({ println!("hello") }) {} }
|
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:64:12 --> $DIR/issue-54538-unused-parens-lint.rs:71:12
| |
LL | if let (0 | 1) = 0 {} LL | if let (0 | 1) = 0 {}
| ^ ^ | ^ ^
@ -88,7 +112,7 @@ LL + if let 0 | 1 = 0 {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:65:13 --> $DIR/issue-54538-unused-parens-lint.rs:72:13
| |
LL | if let ((0 | 1),) = (0,) {} LL | if let ((0 | 1),) = (0,) {}
| ^ ^ | ^ ^
@ -100,7 +124,7 @@ LL + if let (0 | 1,) = (0,) {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:66:13 --> $DIR/issue-54538-unused-parens-lint.rs:73:13
| |
LL | if let [(0 | 1)] = [0] {} LL | if let [(0 | 1)] = [0] {}
| ^ ^ | ^ ^
@ -112,7 +136,7 @@ LL + if let [0 | 1] = [0] {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:67:16 --> $DIR/issue-54538-unused-parens-lint.rs:74:16
| |
LL | if let 0 | (1 | 2) = 0 {} LL | if let 0 | (1 | 2) = 0 {}
| ^ ^ | ^ ^
@ -124,7 +148,7 @@ LL + if let 0 | 1 | 2 = 0 {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:69:15 --> $DIR/issue-54538-unused-parens-lint.rs:76:15
| |
LL | if let TS((0 | 1)) = TS(0) {} LL | if let TS((0 | 1)) = TS(0) {}
| ^ ^ | ^ ^
@ -136,7 +160,7 @@ LL + if let TS(0 | 1) = TS(0) {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:71:20 --> $DIR/issue-54538-unused-parens-lint.rs:78:20
| |
LL | if let NS { f: (0 | 1) } = (NS { f: 0 }) {} LL | if let NS { f: (0 | 1) } = (NS { f: 0 }) {}
| ^ ^ | ^ ^
@ -148,7 +172,7 @@ LL + if let NS { f: 0 | 1 } = (NS { f: 0 }) {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:81:9 --> $DIR/issue-54538-unused-parens-lint.rs:88:9
| |
LL | (_) => {} LL | (_) => {}
| ^ ^ | ^ ^
@ -160,7 +184,7 @@ LL + _ => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:82:9 --> $DIR/issue-54538-unused-parens-lint.rs:89:9
| |
LL | (y) => {} LL | (y) => {}
| ^ ^ | ^ ^
@ -172,7 +196,7 @@ LL + y => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:83:9 --> $DIR/issue-54538-unused-parens-lint.rs:90:9
| |
LL | (ref r) => {} LL | (ref r) => {}
| ^ ^ | ^ ^
@ -184,7 +208,7 @@ LL + ref r => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:84:9 --> $DIR/issue-54538-unused-parens-lint.rs:91:9
| |
LL | (e @ 1...2) => {} LL | (e @ 1...2) => {}
| ^ ^ | ^ ^
@ -196,7 +220,7 @@ LL + e @ 1...2 => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:90:9 --> $DIR/issue-54538-unused-parens-lint.rs:97:9
| |
LL | (e @ &(1...2)) => {} LL | (e @ &(1...2)) => {}
| ^ ^ | ^ ^
@ -208,7 +232,7 @@ LL + e @ &(1...2) => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:91:10 --> $DIR/issue-54538-unused-parens-lint.rs:98:10
| |
LL | &(_) => {} LL | &(_) => {}
| ^ ^ | ^ ^
@ -220,7 +244,7 @@ LL + &_ => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:102:9 --> $DIR/issue-54538-unused-parens-lint.rs:109:9
| |
LL | (_) => {} LL | (_) => {}
| ^ ^ | ^ ^
@ -232,7 +256,7 @@ LL + _ => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:103:9 --> $DIR/issue-54538-unused-parens-lint.rs:110:9
| |
LL | (y) => {} LL | (y) => {}
| ^ ^ | ^ ^
@ -244,7 +268,7 @@ LL + y => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:104:9 --> $DIR/issue-54538-unused-parens-lint.rs:111:9
| |
LL | (ref r) => {} LL | (ref r) => {}
| ^ ^ | ^ ^
@ -256,7 +280,7 @@ LL + ref r => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:105:9 --> $DIR/issue-54538-unused-parens-lint.rs:112:9
| |
LL | (e @ 1..=2) => {} LL | (e @ 1..=2) => {}
| ^ ^ | ^ ^
@ -268,7 +292,7 @@ LL + e @ 1..=2 => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:111:9 --> $DIR/issue-54538-unused-parens-lint.rs:118:9
| |
LL | (e @ &(1..=2)) => {} LL | (e @ &(1..=2)) => {}
| ^ ^ | ^ ^
@ -280,7 +304,7 @@ LL + e @ &(1..=2) => {}
| |
error: unnecessary parentheses around pattern error: unnecessary parentheses around pattern
--> $DIR/issue-54538-unused-parens-lint.rs:112:10 --> $DIR/issue-54538-unused-parens-lint.rs:119:10
| |
LL | &(_) => {} LL | &(_) => {}
| ^ ^ | ^ ^
@ -291,5 +315,5 @@ LL - &(_) => {}
LL + &_ => {} LL + &_ => {}
| |
error: aborting due to 24 previous errors error: aborting due to 26 previous errors