Skip to content

Commit

Permalink
Rollup merge of rust-lang#113679 - chenyukang:yukang-fix-lint-113459,…
Browse files Browse the repository at this point in the history
… r=cjgillot

Match scrutinee need necessary parentheses for structs

Fixes rust-lang#113459
  • Loading branch information
matthiaskrgr authored Aug 3, 2023
2 parents bf7ef1b + fa9d5e7 commit c23347a
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
18 changes: 18 additions & 0 deletions compiler/rustc_lint/src/unused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -666,6 +666,24 @@ trait UnusedDelimLint {
if !followed_by_block {
return false;
}

// Check if we need parens for `match &( Struct { feild: }) {}`.
{
let mut innermost = inner;
loop {
innermost = match &innermost.kind {
ExprKind::AddrOf(_, _, expr) => expr,
_ => {
if parser::contains_exterior_struct_lit(&innermost) {
return true;
} else {
break;
}
}
}
}
}

let mut innermost = inner;
loop {
innermost = match &innermost.kind {
Expand Down
31 changes: 31 additions & 0 deletions tests/ui/lint/lint-struct-necessary.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#![allow(dead_code)]
#![deny(unused_parens)]

enum State {
Waiting { start_at: u64 }
}
struct Foo {}

fn main() {
let e = &mut State::Waiting { start_at: 0u64 };
match (&mut State::Waiting { start_at: 0u64 }) {
_ => {}
}

match (e) {
//~^ ERROR unnecessary parentheses around `match` scrutinee expression
_ => {}
}

match &(State::Waiting { start_at: 0u64 }) {
_ => {}
}

match (State::Waiting { start_at: 0u64 }) {
_ => {}
}

match (&&Foo {}) {
_ => {}
}
}
19 changes: 19 additions & 0 deletions tests/ui/lint/lint-struct-necessary.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
error: unnecessary parentheses around `match` scrutinee expression
--> $DIR/lint-struct-necessary.rs:15:11
|
LL | match (e) {
| ^ ^
|
note: the lint level is defined here
--> $DIR/lint-struct-necessary.rs:2:9
|
LL | #![deny(unused_parens)]
| ^^^^^^^^^^^^^
help: remove these parentheses
|
LL - match (e) {
LL + match e {
|

error: aborting due to previous error

0 comments on commit c23347a

Please sign in to comment.