Skip to content

Commit

Permalink
Fix needless_match false positive for if-let
Browse files Browse the repository at this point in the history
when the else block doesn't match to given expr
  • Loading branch information
youknowone committed Apr 17, 2022
1 parent e5ebece commit b3ef94b
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
2 changes: 1 addition & 1 deletion clippy_lints/src/matches/needless_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ fn check_if_let(cx: &LateContext<'_>, if_let: &higher::IfLet<'_>) -> bool {
if let ExprKind::Path(ref qpath) = ret.kind {
return is_lang_ctor(cx, qpath, OptionNone) || eq_expr_value(cx, if_let.let_expr, ret);
}
return true;
return false;
}
return eq_expr_value(cx, if_let.let_expr, ret);
}
Expand Down
16 changes: 16 additions & 0 deletions tests/ui/needless_match.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,22 @@ fn if_let_option() {
} else {
None
};

// Don't trigger
let _ = if let Some(a) = Some(1) {
Some(a)
} else {
Some(2)
};
}

fn if_let_option_result() -> Result<(), ()> {
fn f(x: i32) -> Result<Option<i32>, ()> {
Ok(Some(x))
}
// Don't trigger
let _ = if let Some(v) = f(1)? { Some(v) } else { f(2)? };
Ok(())
}

fn if_let_result() {
Expand Down
16 changes: 16 additions & 0 deletions tests/ui/needless_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,22 @@ fn if_let_option() {
} else {
None
};

// Don't trigger
let _ = if let Some(a) = Some(1) {
Some(a)
} else {
Some(2)
};
}

fn if_let_option_result() -> Result<(), ()> {
fn f(x: i32) -> Result<Option<i32>, ()> {
Ok(Some(x))
}
// Don't trigger
let _ = if let Some(v) = f(1)? { Some(v) } else { f(2)? };
Ok(())
}

fn if_let_result() {
Expand Down
8 changes: 4 additions & 4 deletions tests/ui/needless_match.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -72,19 +72,19 @@ LL | let _ = if let Some(a) = Some(1) { Some(a) } else { None };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `Some(1)`

error: this if-let expression is unnecessary
--> $DIR/needless_match.rs:110:31
--> $DIR/needless_match.rs:126:31
|
LL | let _: Result<i32, i32> = if let Err(e) = x { Err(e) } else { x };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `x`

error: this if-let expression is unnecessary
--> $DIR/needless_match.rs:111:31
--> $DIR/needless_match.rs:127:31
|
LL | let _: Result<i32, i32> = if let Ok(val) = x { Ok(val) } else { x };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `x`

error: this if-let expression is unnecessary
--> $DIR/needless_match.rs:117:21
--> $DIR/needless_match.rs:133:21
|
LL | let _: Simple = if let Simple::A = x {
| _____________________^
Expand All @@ -97,7 +97,7 @@ LL | | };
| |_____^ help: replace it with: `x`

error: this match expression is unnecessary
--> $DIR/needless_match.rs:156:26
--> $DIR/needless_match.rs:172:26
|
LL | let _: Complex = match ce {
| __________________________^
Expand Down

0 comments on commit b3ef94b

Please sign in to comment.