From c6f79c7ba0dcefaae7e96912a066ecbf4f63e8ca Mon Sep 17 00:00:00 2001 From: Josh Mcguigan Date: Sat, 13 Oct 2018 06:57:52 -0700 Subject: [PATCH] explicit_counter_loop fix #3308 false positive --- clippy_lints/src/loops.rs | 5 +---- tests/ui/for_loop.rs | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/clippy_lints/src/loops.rs b/clippy_lints/src/loops.rs index b807e4fb9e1c..064a8d5229d8 100644 --- a/clippy_lints/src/loops.rs +++ b/clippy_lints/src/loops.rs @@ -1952,10 +1952,7 @@ impl<'a, 'tcx> Visitor<'tcx> for IncrementVisitor<'a, 'tcx> { _ => (), } } - } else if is_loop(expr) { - walk_expr(self, expr); - return; - } else if is_conditional(expr) { + } else if is_loop(expr) || is_conditional(expr) { self.depth += 1; walk_expr(self, expr); self.depth -= 1; diff --git a/tests/ui/for_loop.rs b/tests/ui/for_loop.rs index bdb6b56e0bb3..89c452f44df0 100644 --- a/tests/ui/for_loop.rs +++ b/tests/ui/for_loop.rs @@ -646,3 +646,38 @@ mod issue_1219 { } } } + +mod issue_3308 { + #[warn(clippy::explicit_counter_loop)] + pub fn test() { + // should not trigger the lint because the count is incremented multiple times + let mut skips = 0; + let erasures = vec![]; + for i in 0..10 { + while erasures.contains(&(i + skips)) { + skips += 1; + } + println!("{}", skips); + } + + // should not trigger the lint because the count is incremented multiple times + let mut skips = 0; + for i in 0..10 { + let mut j = 0; + while j < 5 { + skips += 1; + j += 1; + } + println!("{}", skips); + } + + // should not trigger the lint because the count is incremented multiple times + let mut skips = 0; + for i in 0..10 { + for j in 0..5 { + skips += 1; + } + println!("{}", skips); + } + } +}