From bc9363376e0ae3dff683b67c035812ae274008af Mon Sep 17 00:00:00 2001 From: Max Taldykin Date: Thu, 27 Dec 2018 20:11:25 +0300 Subject: [PATCH] Check pattern equality while checking declaration equality --- clippy_lints/src/utils/hir_utils.rs | 4 +++- tests/ui/copies.rs | 11 +++++++++++ tests/ui/copies.stderr | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/clippy_lints/src/utils/hir_utils.rs b/clippy_lints/src/utils/hir_utils.rs index 73169414a028..77f9dc6e5f1c 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 00e1d726207a..43671c336fea 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..]); } + + // 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 e41fac0f6869..e69f2879aab4 100644 --- a/tests/ui/copies.stderr +++ b/tests/ui/copies.stderr @@ -352,40 +352,40 @@ note: same as this | |_____^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:347:15 + --> $DIR/copies.rs:358:15 | -347 | } else if b { +358 | } 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 | -346 | if b { +357 | if b { | ^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:352:15 + --> $DIR/copies.rs:363:15 | -352 | } else if a == 1 { +363 | } else if a == 1 { | ^^^^^^ | note: same as this - --> $DIR/copies.rs:351:8 + --> $DIR/copies.rs:362:8 | -351 | if a == 1 { +362 | if a == 1 { | ^^^^^^ error: this `if` has the same condition as a previous if - --> $DIR/copies.rs:358:15 + --> $DIR/copies.rs:369:15 | -358 | } else if 2 * a == 1 { +369 | } else if 2 * a == 1 { | ^^^^^^^^^^ | note: same as this - --> $DIR/copies.rs:356:8 + --> $DIR/copies.rs:367:8 | -356 | if 2 * a == 1 { +367 | if 2 * a == 1 { | ^^^^^^^^^^ error: aborting due to 20 previous errors