diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2023-08-23 05:35:18 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-23 05:35:18 +0000 |
| commit | 867a12d994b6838c55672f35f1b522c8d0d93f50 (patch) | |
| tree | a3214a86b5121760ce13f7b3cc3b34cd804406f7 | |
| parent | 0a78123b55df43449c37a468904c9102f69c0dd8 (diff) | |
| parent | 91cf04d2072a463759173f0173da2a44faadeb20 (diff) | |
| download | rust-867a12d994b6838c55672f35f1b522c8d0d93f50.tar.gz rust-867a12d994b6838c55672f35f1b522c8d0d93f50.zip | |
Rollup merge of #115122 - estebank:fix-clippy, r=Manishearth
Fix clippy lint for identical `if`/`else` contraining `?` expressions Follow up to #114819.
| -rw-r--r-- | src/tools/clippy/clippy_utils/src/hir_utils.rs | 3 | ||||
| -rw-r--r-- | src/tools/clippy/tests/ui/if_same_then_else2.rs | 2 | ||||
| -rw-r--r-- | src/tools/clippy/tests/ui/if_same_then_else2.stderr | 21 |
3 files changed, 23 insertions, 3 deletions
diff --git a/src/tools/clippy/clippy_utils/src/hir_utils.rs b/src/tools/clippy/clippy_utils/src/hir_utils.rs index fdc35cd4ddf..98441e83eb4 100644 --- a/src/tools/clippy/clippy_utils/src/hir_utils.rs +++ b/src/tools/clippy/clippy_utils/src/hir_utils.rs @@ -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; @@ -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) diff --git a/src/tools/clippy/tests/ui/if_same_then_else2.rs b/src/tools/clippy/tests/ui/if_same_then_else2.rs index c545434efe5..0b171f21d0c 100644 --- a/src/tools/clippy/tests/ui/if_same_then_else2.rs +++ b/src/tools/clippy/tests/ui/if_same_then_else2.rs @@ -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")?; diff --git a/src/tools/clippy/tests/ui/if_same_then_else2.stderr b/src/tools/clippy/tests/ui/if_same_then_else2.stderr index 37fe787d1de..56e5f3e45b2 100644 --- a/src/tools/clippy/tests/ui/if_same_then_else2.stderr +++ b/src/tools/clippy/tests/ui/if_same_then_else2.stderr @@ -83,6 +83,25 @@ 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 | LL | } else if true { @@ -103,5 +122,5 @@ LL | | return Ok(&foo[0..]); LL | | } | |_____^ -error: aborting due to 5 previous errors +error: aborting due to 6 previous errors |
