diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs index 2904fd4c98dc..15feca4ce460 100644 --- a/clippy_lints/src/methods/mod.rs +++ b/clippy_lints/src/methods/mod.rs @@ -1965,18 +1965,14 @@ fn lint_filter_map_next<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, expr: &'tcx hir::E let msg = "called `filter_map(p).next()` on an `Iterator`. This is more succinctly expressed by calling \ `.find_map(p)` instead."; let filter_snippet = snippet(cx, filter_args[1].span, ".."); - if filter_snippet.lines().count() <= 1 { - span_note_and_lint( - cx, - FILTER_MAP_NEXT, - expr.span, - msg, - expr.span, - &format!("replace `filter_map({0}).next()` with `find_map({0})`", filter_snippet), - ); - } else { - span_lint(cx, FILTER_MAP_NEXT, expr.span, msg); - } + span_note_and_lint( + cx, + FILTER_MAP_NEXT, + expr.span, + msg, + expr.span, + &format!("replace `filter_map({0}).next()` with `find_map({0})`", filter_snippet), + ); } } diff --git a/tests/ui/filter_map_next.rs b/tests/ui/filter_map_next.rs index cce526060f61..7dad92706c6f 100644 --- a/tests/ui/filter_map_next.rs +++ b/tests/ui/filter_map_next.rs @@ -5,4 +5,9 @@ fn main() { let element: Option = a.iter().filter_map(|s| s.parse().ok()).next(); assert_eq!(element, Some(1)); + + let _: Option = vec![1, 2, 3, 4, 5, 6] + .into_iter() + .filter_map(|x| if x == 2 { Some(x * 2) } else { None }) + .next(); } diff --git a/tests/ui/filter_map_next.stderr b/tests/ui/filter_map_next.stderr index 6c0ea8985dcc..a1715ab3f6c3 100644 --- a/tests/ui/filter_map_next.stderr +++ b/tests/ui/filter_map_next.stderr @@ -7,5 +7,17 @@ LL | let element: Option = a.iter().filter_map(|s| s.parse().ok()).next = note: `-D clippy::filter-map-next` implied by `-D warnings` = note: replace `filter_map(|s| s.parse().ok()).next()` with `find_map(|s| s.parse().ok())` -error: aborting due to previous error +error: called `filter_map(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find_map(p)` instead. + --> $DIR/filter_map_next.rs:9:26 + | +LL | let _: Option = vec![1, 2, 3, 4, 5, 6] + | __________________________^ +LL | | .into_iter() +LL | | .filter_map(|x| if x == 2 { Some(x * 2) } else { None }) +LL | | .next(); + | |_______________^ + | + = note: replace `filter_map(|x| if x == 2 { Some(x * 2) } else { None }).next()` with `find_map(|x| if x == 2 { Some(x * 2) } else { None })` + +error: aborting due to 2 previous errors