Rollup merge of #91956 - notriddle:notriddle/unused-parens-range, r=nagisa

fix(rustc_lint): better detect when parens are necessary

Fixes #90807
This commit is contained in:
Matthias Krüger 2021-12-19 00:38:41 +01:00 committed by GitHub
commit 48915315d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 52 additions and 1 deletions

View file

@ -478,8 +478,11 @@ trait UnusedDelimLint {
lhs_needs_parens
|| (followed_by_block
&& match inner.kind {
&& match &inner.kind {
ExprKind::Ret(_) | ExprKind::Break(..) | ExprKind::Yield(..) => true,
ExprKind::Range(_lhs, Some(rhs), _limits) => {
matches!(rhs.kind, ExprKind::Block(..))
}
_ => parser::contains_exterior_struct_lit(&inner),
})
}

View file

@ -0,0 +1,9 @@
// Make sure unused parens lint emit is emitted for loop and match.
// See https://github.com/rust-lang/rust/issues/90807
// and https://github.com/rust-lang/rust/pull/91956#discussion_r771647953
#![deny(unused_parens)]
fn main() {
for _ in (1..loop { break 2 }) {} //~ERROR
for _ in (1..match () { () => 2 }) {} //~ERROR
}

View file

@ -0,0 +1,31 @@
error: unnecessary parentheses around `for` iterator expression
--> $DIR/issue-90807-unused-paren-error.rs:7:14
|
LL | for _ in (1..loop { break 2 }) {}
| ^ ^
|
note: the lint level is defined here
--> $DIR/issue-90807-unused-paren-error.rs:4:9
|
LL | #![deny(unused_parens)]
| ^^^^^^^^^^^^^
help: remove these parentheses
|
LL - for _ in (1..loop { break 2 }) {}
LL + for _ in 1..loop { break 2 } {}
|
error: unnecessary parentheses around `for` iterator expression
--> $DIR/issue-90807-unused-paren-error.rs:8:14
|
LL | for _ in (1..match () { () => 2 }) {}
| ^ ^
|
help: remove these parentheses
|
LL - for _ in (1..match () { () => 2 }) {}
LL + for _ in 1..match () { () => 2 } {}
|
error: aborting due to 2 previous errors

View file

@ -0,0 +1,8 @@
// check-pass
// Make sure unused parens lint doesn't emit a false positive.
// See https://github.com/rust-lang/rust/issues/90807
#![deny(unused_parens)]
fn main() {
for _ in (1..{ 2 }) {}
}