diff --git a/clippy_lints/src/utils/hir_utils.rs b/clippy_lints/src/utils/hir_utils.rs index 79c9de13571..377e56ddcac 100644 --- a/clippy_lints/src/utils/hir_utils.rs +++ b/clippy_lints/src/utils/hir_utils.rs @@ -54,7 +54,9 @@ impl<'a, 'tcx: 'a> SpanlessEq<'a, 'tcx> { match (&left.node, &right.node) { (&StmtKind::Decl(ref l, _), &StmtKind::Decl(ref r, _)) => { if let (&DeclKind::Local(ref l), &DeclKind::Local(ref r)) = (&l.node, &r.node) { - both(&l.ty, &r.ty, |l, r| self.eq_ty(l, r)) && both(&l.init, &r.init, |l, r| self.eq_expr(l, r)) + self.eq_pat(&l.pat, &r.pat) + && both(&l.ty, &r.ty, |l, r| self.eq_ty(l, r)) + && both(&l.init, &r.init, |l, r| self.eq_expr(l, r)) } else { false } diff --git a/tests/ui/copies.rs b/tests/ui/copies.rs index 00e1d726207..8147edb98eb 100644 --- a/tests/ui/copies.rs +++ b/tests/ui/copies.rs @@ -335,6 +335,17 @@ fn if_same_then_else() -> Result<&'static str, ()> { let foo = ""; return Ok(&foo[0..]); } + + // false positive if_same_then_else, let(x,y) vs let(y,x), see #3559 + if true { + let foo = ""; + let (x, y) = (1, 2); + return Ok(&foo[x..y]); + } else { + let foo = ""; + let (y, x) = (1, 2); + return Ok(&foo[x..y]); + } } #[warn(clippy::ifs_same_cond)] diff --git a/tests/ui/copies.stderr b/tests/ui/copies.stderr index 659abf6fa7e..4c0bc4b0173 100644 --- a/tests/ui/copies.stderr +++ b/tests/ui/copies.stderr @@ -352,38 +352,38 @@ LL | | } else { | |_____^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:347:15 + --> $DIR/copies.rs:358:15 | LL | } else if b { | ^ | = note: `-D clippy::ifs-same-cond` implied by `-D warnings` note: same as this - --> $DIR/copies.rs:346:8 + --> $DIR/copies.rs:357:8 | LL | if b { | ^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:352:15 + --> $DIR/copies.rs:363:15 | LL | } else if a == 1 { | ^^^^^^ | note: same as this - --> $DIR/copies.rs:351:8 + --> $DIR/copies.rs:362:8 | LL | if a == 1 { | ^^^^^^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:358:15 + --> $DIR/copies.rs:369:15 | LL | } else if 2 * a == 1 { | ^^^^^^^^^^ | note: same as this - --> $DIR/copies.rs:356:8 + --> $DIR/copies.rs:367:8 | LL | if 2 * a == 1 { | ^^^^^^^^^^