}
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");
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 });
}