Skip to content

Commit 6d94161

Browse files
committed
move filter_flat_map to its own module
1 parent 2baf043 commit 6d94161

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use crate::utils::{match_trait_method, paths, span_lint_and_help};
2+
use rustc_hir as hir;
3+
use rustc_lint::LateContext;
4+
5+
use super::FILTER_MAP;
6+
7+
/// lint use of `filter().flat_map()` for `Iterators`
8+
pub(super) fn check<'tcx>(
9+
cx: &LateContext<'tcx>,
10+
expr: &'tcx hir::Expr<'_>,
11+
_filter_args: &'tcx [hir::Expr<'_>],
12+
_map_args: &'tcx [hir::Expr<'_>],
13+
) {
14+
// lint if caller of `.filter().flat_map()` is an Iterator
15+
if match_trait_method(cx, expr, &paths::ITERATOR) {
16+
let msg = "called `filter(..).flat_map(..)` on an `Iterator`";
17+
let hint = "this is more succinctly expressed by calling `.flat_map(..)` \
18+
and filtering by returning `iter::empty()`";
19+
span_lint_and_help(cx, FILTER_MAP, expr.span, msg, None, hint);
20+
}
21+
}

clippy_lints/src/methods/mod.rs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod bytes_nth;
33
mod clone_on_ref_ptr;
44
mod expect_used;
55
mod filetype_is_file;
6+
mod filter_flat_map;
67
mod filter_map;
78
mod filter_map_identity;
89
mod filter_map_map;
@@ -1705,7 +1706,7 @@ impl<'tcx> LateLintPass<'tcx> for Methods {
17051706
["map", "filter_map"] => filter_map_map::check(cx, expr, arg_lists[1], arg_lists[0]),
17061707
["next", "filter_map"] => filter_map_next::check(cx, expr, arg_lists[1], self.msrv.as_ref()),
17071708
["map", "find"] => filter_map::check(cx, expr, true),
1708-
["flat_map", "filter"] => lint_filter_flat_map(cx, expr, arg_lists[1], arg_lists[0]),
1709+
["flat_map", "filter"] => filter_flat_map::check(cx, expr, arg_lists[1], arg_lists[0]),
17091710
["flat_map", "filter_map"] => lint_filter_map_flat_map(cx, expr, arg_lists[1], arg_lists[0]),
17101711
["flat_map", ..] => lint_flat_map_identity(cx, expr, arg_lists[0], method_spans[0]),
17111712
["flatten", "map"] => lint_map_flatten(cx, expr, arg_lists[1]),
@@ -2753,22 +2754,6 @@ fn lint_map_or_none<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx hir::Expr<'_>, map
27532754
);
27542755
}
27552756

2756-
/// lint use of `filter().flat_map()` for `Iterators`
2757-
fn lint_filter_flat_map<'tcx>(
2758-
cx: &LateContext<'tcx>,
2759-
expr: &'tcx hir::Expr<'_>,
2760-
_filter_args: &'tcx [hir::Expr<'_>],
2761-
_map_args: &'tcx [hir::Expr<'_>],
2762-
) {
2763-
// lint if caller of `.filter().flat_map()` is an Iterator
2764-
if match_trait_method(cx, expr, &paths::ITERATOR) {
2765-
let msg = "called `filter(..).flat_map(..)` on an `Iterator`";
2766-
let hint = "this is more succinctly expressed by calling `.flat_map(..)` \
2767-
and filtering by returning `iter::empty()`";
2768-
span_lint_and_help(cx, FILTER_MAP, expr.span, msg, None, hint);
2769-
}
2770-
}
2771-
27722757
/// lint use of `filter_map().flat_map()` for `Iterators`
27732758
fn lint_filter_map_flat_map<'tcx>(
27742759
cx: &LateContext<'tcx>,

0 commit comments

Comments
 (0)