Minor refactoring

This commit is contained in:
Jeremy Stucki 2019-08-12 20:35:50 +02:00
parent 09e9568c26
commit 3a65e4e75a
No known key found for this signature in database
GPG key ID: EEFCA93148042655

View file

@ -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().`");
}
}
}