]> git.lizzy.rs Git - rust.git/commitdiff
Check that we're calling Iterator::fold
authorPhil Ellison <phil.j.ellison@gmail.com>
Sun, 14 Jan 2018 20:04:34 +0000 (20:04 +0000)
committerPhil Ellison <phil.j.ellison@gmail.com>
Sun, 14 Jan 2018 20:04:34 +0000 (20:04 +0000)
clippy_lints/src/methods.rs
tests/ui/methods.rs

index 9661a6011bd86f849fe89caf6d7f918661597f90..98dfb3ad98031847ded174700f7621adc4f2daba 100644 (file)
@@ -1126,7 +1126,11 @@ fn lint_iter_cloned_collect(cx: &LateContext, expr: &hir::Expr, iter_args: &[hir
 }
 
 fn lint_fold_any(cx: &LateContext, expr: &hir::Expr, fold_args: &[hir::Expr]) {
-    // DONOTMERGE: What if this is just some other method called fold?
+    // Check that this is a call to Iterator::fold rather than just some function called fold
+    if !match_trait_method(cx, expr, &paths::ITERATOR) {
+        return;
+    }
+
     assert!(fold_args.len() == 3,
         "Expected fold_args to have three entries - the receiver, the initial value and the closure");
 
index 8cffbf76924fab2f2a5af662dee4e0494151f142..ae347269430ccd66f906cdd9b8d4ef59be4e647e 100644 (file)
@@ -385,17 +385,17 @@ fn iter_skip_next() {
     let _ = foo.filter().skip(42).next();
 }
 
-/// Checks implementation of the `FOLD_ANY` lint
+/// Should trigger the `FOLD_ANY` lint
 fn fold_any() {
     let _ = (0..3).fold(false, |acc, x| acc || x > 2);
 }
 
-/// Checks implementation of the `FOLD_ANY` lint
+/// Should not trigger the `FOLD_ANY` lint as the initial value is not the literal `false`
 fn fold_any_ignores_initial_value_of_true() {
     let _ = (0..3).fold(true, |acc, x| acc || x > 2);
 }
 
-/// Checks implementation of the `FOLD_ANY` lint
+/// Should not trigger the `FOLD_ANY` lint as the accumulator is not integer valued
 fn fold_any_ignores_non_boolean_accumalator() {
     let _ = (0..3).fold(0, |acc, x| acc + if x > 2 { 1 } else { 0 });
 }