Minor refactoring
This commit is contained in:
parent
09e9568c26
commit
3a65e4e75a
1 changed files with 22 additions and 27 deletions
|
|
@ -2172,42 +2172,37 @@ fn lint_flat_map_identity<'a, 'tcx>(
|
|||
expr: &'tcx hir::Expr,
|
||||
flat_map_args: &'tcx [hir::Expr],
|
||||
) {
|
||||
if_chain! {
|
||||
if match_trait_method(cx, expr, &paths::ITERATOR);
|
||||
if match_trait_method(cx, expr, &paths::ITERATOR) {
|
||||
let arg_node = &flat_map_args[1].node;
|
||||
|
||||
if flat_map_args.len() == 2;
|
||||
let apply_lint = |message: &str| {
|
||||
span_lint(cx, FLAT_MAP_IDENTITY, expr.span, message);
|
||||
};
|
||||
|
||||
then {
|
||||
if_chain! {
|
||||
if let hir::ExprKind::Closure(_, _, body_id, _, _) = flat_map_args[1].node;
|
||||
let body = cx.tcx.hir().body(body_id);
|
||||
if_chain! {
|
||||
if let hir::ExprKind::Closure(_, _, body_id, _, _) = arg_node;
|
||||
let body = cx.tcx.hir().body(*body_id);
|
||||
|
||||
if body.arguments.len() == 1;
|
||||
if let hir::PatKind::Binding(_, _, binding_ident, _) = body.arguments[0].pat.node;
|
||||
if let hir::ExprKind::Path(hir::QPath::Resolved(_, ref path)) = body.value.node;
|
||||
if let hir::PatKind::Binding(_, _, binding_ident, _) = body.arguments[0].pat.node;
|
||||
if let hir::ExprKind::Path(hir::QPath::Resolved(_, ref path)) = body.value.node;
|
||||
|
||||
if path.segments.len() == 1;
|
||||
if path.segments[0].ident.as_str() == binding_ident.as_str();
|
||||
if path.segments.len() == 1;
|
||||
if path.segments[0].ident.as_str() == binding_ident.as_str();
|
||||
|
||||
then {
|
||||
let msg = "called `flat_map(|x| x)` on an `Iterator`. \
|
||||
This can be simplified by calling `flatten().`";
|
||||
span_lint(cx, FLAT_MAP_IDENTITY, expr.span, msg);
|
||||
}
|
||||
then {
|
||||
apply_lint("called `flat_map(|x| x)` on an `Iterator`. \
|
||||
This can be simplified by calling `flatten().`");
|
||||
}
|
||||
}
|
||||
|
||||
if_chain! {
|
||||
let expr = &flat_map_args[1];
|
||||
if_chain! {
|
||||
if let hir::ExprKind::Path(ref qpath) = arg_node;
|
||||
|
||||
if let hir::ExprKind::Path(ref qpath) = expr.node;
|
||||
if match_qpath(qpath, &paths::STD_CONVERT_IDENTITY);
|
||||
|
||||
if match_qpath(qpath, &paths::STD_CONVERT_IDENTITY);
|
||||
|
||||
then {
|
||||
let msg = "called `flat_map(std::convert::identity)` on an `Iterator`. \
|
||||
This can be simplified by calling `flatten().`";
|
||||
span_lint(cx, FLAT_MAP_IDENTITY, expr.span, msg);
|
||||
}
|
||||
then {
|
||||
apply_lint("called `flat_map(std::convert::identity)` on an `Iterator`. \
|
||||
This can be simplified by calling `flatten().`");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue