Skip to content

Commit

Permalink
Fix clippy lint for identical if/else contraining ? expressions
Browse files Browse the repository at this point in the history
Follow up to rust-lang#114819.
  • Loading branch information
estebank committed Aug 23, 2023
1 parent 50f7f8e commit 32eecd4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
3 changes: 2 additions & 1 deletion clippy_utils/src/hir_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use rustc_hir::{
GenericArgs, Guard, HirId, HirIdMap, InlineAsmOperand, Let, Lifetime, LifetimeName, Pat, PatField, PatKind, Path,
PathSegment, PrimTy, QPath, Stmt, StmtKind, Ty, TyKind, TypeBinding,
};
use rustc_hir::MatchSource::TryDesugar;
use rustc_lexer::{tokenize, TokenKind};
use rustc_lint::LateContext;
use rustc_middle::ty::TypeckResults;
Expand Down Expand Up @@ -311,7 +312,7 @@ impl HirEqInterExpr<'_, '_, '_> {
lls == rls && self.eq_block(lb, rb) && both(ll, rl, |l, r| l.ident.name == r.ident.name)
},
(&ExprKind::Match(le, la, ref ls), &ExprKind::Match(re, ra, ref rs)) => {
ls == rs
(ls == rs || (matches!((ls, rs), (TryDesugar(_), TryDesugar(_)))))
&& self.eq_expr(le, re)
&& over(la, ra, |l, r| {
self.eq_pat(l.pat, r.pat)
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/if_same_then_else2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ fn if_same_then_else2() -> Result<&'static str, ()> {
};

if true {
// FIXME: should emit "this `if` has identical blocks"
//~^ ERROR: this `if` has identical blocks
Ok("foo")?;
} else {
Ok("foo")?;
Expand Down
21 changes: 20 additions & 1 deletion tests/ui/if_same_then_else2.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,25 @@ LL | | f32::NAN
LL | | };
| |_____^

error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:100:13
|
LL | if true {
| _____________^
LL | |
LL | | Ok("foo")?;
LL | | } else {
| |_____^
|
note: same as this
--> $DIR/if_same_then_else2.rs:103:12
|
LL | } else {
| ____________^
LL | | Ok("foo")?;
LL | | }
| |_____^

error: this `if` has identical blocks
--> $DIR/if_same_then_else2.rs:124:20
|
Expand All @@ -103,5 +122,5 @@ LL | | return Ok(&foo[0..]);
LL | | }
| |_____^

error: aborting due to 5 previous errors
error: aborting due to 6 previous errors

0 comments on commit 32eecd4

Please sign in to comment.