Skip to content

Commit

Permalink
Auto merge of rust-lang#6069 - alex-700:redundant-pattern-matching-in…
Browse files Browse the repository at this point in the history
…-macro, r=Manishearth

Forbid redundant_pattern_matching triggering in macros

fixes rust-lang#6065

changelog: forbid redundant_pattern_matching triggering in macros
  • Loading branch information
bors committed Sep 22, 2020
2 parents 78fbb04 + d4f158f commit 29b12f2
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 52 deletions.
2 changes: 1 addition & 1 deletion clippy_lints/src/matches.rs
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ impl_lint_pass!(Matches => [

impl<'tcx> LateLintPass<'tcx> for Matches {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
if in_external_macro(cx.sess(), expr.span) {
if in_external_macro(cx.sess(), expr.span) || in_macro(expr.span) {
return;
}

Expand Down
22 changes: 0 additions & 22 deletions tests/ui/crashes/ice-2636.rs

This file was deleted.

17 changes: 0 additions & 17 deletions tests/ui/crashes/ice-2636.stderr

This file was deleted.

12 changes: 12 additions & 0 deletions tests/ui/redundant_pattern_matching.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ fn main() {

issue5504();
issue6067();
issue6065();

let _ = if gen_res().is_ok() {
1
Expand Down Expand Up @@ -79,6 +80,17 @@ fn issue5504() {
while m!().is_some() {}
}

fn issue6065() {
macro_rules! if_let_in_macro {
($pat:pat, $x:expr) => {
if let Some($pat) = $x {}
};
}

// shouldn't be linted
if_let_in_macro!(_, Some(42));
}

// Methods that are unstable const should not be suggested within a const context, see issue #5697.
// However, in Rust 1.48.0 the methods `is_ok` and `is_err` of `Result` were stabilized as const,
// so the following should be linted.
Expand Down
12 changes: 12 additions & 0 deletions tests/ui/redundant_pattern_matching.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ fn main() {

issue5504();
issue6067();
issue6065();

let _ = if let Ok(_) = gen_res() {
1
Expand Down Expand Up @@ -91,6 +92,17 @@ fn issue5504() {
while let Some(_) = m!() {}
}

fn issue6065() {
macro_rules! if_let_in_macro {
($pat:pat, $x:expr) => {
if let Some($pat) = $x {}
};
}

// shouldn't be linted
if_let_in_macro!(_, Some(42));
}

// Methods that are unstable const should not be suggested within a const context, see issue #5697.
// However, in Rust 1.48.0 the methods `is_ok` and `is_err` of `Result` were stabilized as const,
// so the following should be linted.
Expand Down
24 changes: 12 additions & 12 deletions tests/ui/redundant_pattern_matching.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -73,67 +73,67 @@ LL | let _ = if let Ok(_) = Ok::<usize, ()>(4) { true } else { false };
| -------^^^^^--------------------- help: try this: `if Ok::<usize, ()>(4).is_ok()`

error: redundant pattern matching, consider using `is_ok()`
--> $DIR/redundant_pattern_matching.rs:58:20
--> $DIR/redundant_pattern_matching.rs:59:20
|
LL | let _ = if let Ok(_) = gen_res() {
| -------^^^^^------------ help: try this: `if gen_res().is_ok()`

error: redundant pattern matching, consider using `is_err()`
--> $DIR/redundant_pattern_matching.rs:60:19
--> $DIR/redundant_pattern_matching.rs:61:19
|
LL | } else if let Err(_) = gen_res() {
| -------^^^^^^------------ help: try this: `if gen_res().is_err()`

error: redundant pattern matching, consider using `is_some()`
--> $DIR/redundant_pattern_matching.rs:83:19
--> $DIR/redundant_pattern_matching.rs:84:19
|
LL | while let Some(_) = r#try!(result_opt()) {}
| ----------^^^^^^^----------------------- help: try this: `while r#try!(result_opt()).is_some()`

error: redundant pattern matching, consider using `is_some()`
--> $DIR/redundant_pattern_matching.rs:84:16
--> $DIR/redundant_pattern_matching.rs:85:16
|
LL | if let Some(_) = r#try!(result_opt()) {}
| -------^^^^^^^----------------------- help: try this: `if r#try!(result_opt()).is_some()`

error: redundant pattern matching, consider using `is_some()`
--> $DIR/redundant_pattern_matching.rs:90:12
--> $DIR/redundant_pattern_matching.rs:91:12
|
LL | if let Some(_) = m!() {}
| -------^^^^^^^------- help: try this: `if m!().is_some()`

error: redundant pattern matching, consider using `is_some()`
--> $DIR/redundant_pattern_matching.rs:91:15
--> $DIR/redundant_pattern_matching.rs:92:15
|
LL | while let Some(_) = m!() {}
| ----------^^^^^^^------- help: try this: `while m!().is_some()`

error: redundant pattern matching, consider using `is_ok()`
--> $DIR/redundant_pattern_matching.rs:98:12
--> $DIR/redundant_pattern_matching.rs:110:12
|
LL | if let Ok(_) = Ok::<i32, i32>(42) {}
| -------^^^^^--------------------- help: try this: `if Ok::<i32, i32>(42).is_ok()`

error: redundant pattern matching, consider using `is_err()`
--> $DIR/redundant_pattern_matching.rs:100:12
--> $DIR/redundant_pattern_matching.rs:112:12
|
LL | if let Err(_) = Err::<i32, i32>(42) {}
| -------^^^^^^---------------------- help: try this: `if Err::<i32, i32>(42).is_err()`

error: redundant pattern matching, consider using `is_ok()`
--> $DIR/redundant_pattern_matching.rs:102:15
--> $DIR/redundant_pattern_matching.rs:114:15
|
LL | while let Ok(_) = Ok::<i32, i32>(10) {}
| ----------^^^^^--------------------- help: try this: `while Ok::<i32, i32>(10).is_ok()`

error: redundant pattern matching, consider using `is_err()`
--> $DIR/redundant_pattern_matching.rs:104:15
--> $DIR/redundant_pattern_matching.rs:116:15
|
LL | while let Err(_) = Ok::<i32, i32>(10) {}
| ----------^^^^^^--------------------- help: try this: `while Ok::<i32, i32>(10).is_err()`

error: redundant pattern matching, consider using `is_ok()`
--> $DIR/redundant_pattern_matching.rs:106:5
--> $DIR/redundant_pattern_matching.rs:118:5
|
LL | / match Ok::<i32, i32>(42) {
LL | | Ok(_) => true,
Expand All @@ -142,7 +142,7 @@ LL | | };
| |_____^ help: try this: `Ok::<i32, i32>(42).is_ok()`

error: redundant pattern matching, consider using `is_err()`
--> $DIR/redundant_pattern_matching.rs:111:5
--> $DIR/redundant_pattern_matching.rs:123:5
|
LL | / match Err::<i32, i32>(42) {
LL | | Ok(_) => false,
Expand Down

0 comments on commit 29b12f2

Please sign in to comment.