mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-24 05:33:27 +00:00
Handle "calls" inside the closure as well in map_clone
lint
This commit is contained in:
parent
af35d37749
commit
78aa2e29e2
1 changed files with 22 additions and 9 deletions
|
@ -61,26 +61,39 @@ pub(super) fn check(cx: &LateContext<'_>, e: &hir::Expr<'_>, recv: &hir::Expr<'_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
hir::ExprKind::Call(call, [_]) => {
|
||||||
|
if let hir::ExprKind::Path(qpath) = call.kind {
|
||||||
|
handle_path(cx, call, &qpath, e, recv);
|
||||||
|
}
|
||||||
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
hir::ExprKind::Path(qpath) => {
|
hir::ExprKind::Path(qpath) => handle_path(cx, arg, &qpath, e, recv),
|
||||||
if let Some(path_def_id) = cx.qpath_res(&qpath, arg.hir_id).opt_def_id()
|
|
||||||
&& match_def_path(cx, path_def_id, &paths::CLONE_TRAIT_METHOD)
|
|
||||||
{
|
|
||||||
// FIXME: It would be better to infer the type to check if it's copyable or not
|
|
||||||
// to suggest to use `.copied()` instead of `.cloned()` where applicable.
|
|
||||||
lint_path(cx, e.span, recv.span);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn handle_path(
|
||||||
|
cx: &LateContext<'_>,
|
||||||
|
arg: &hir::Expr<'_>,
|
||||||
|
qpath: &hir::QPath<'_>,
|
||||||
|
e: &hir::Expr<'_>,
|
||||||
|
recv: &hir::Expr<'_>,
|
||||||
|
) {
|
||||||
|
if let Some(path_def_id) = cx.qpath_res(qpath, arg.hir_id).opt_def_id()
|
||||||
|
&& match_def_path(cx, path_def_id, &paths::CLONE_TRAIT_METHOD)
|
||||||
|
{
|
||||||
|
// FIXME: It would be better to infer the type to check if it's copyable or not
|
||||||
|
// to suggest to use `.copied()` instead of `.cloned()` where applicable.
|
||||||
|
lint_path(cx, e.span, recv.span);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn ident_eq(name: Ident, path: &hir::Expr<'_>) -> bool {
|
fn ident_eq(name: Ident, path: &hir::Expr<'_>) -> bool {
|
||||||
if let hir::ExprKind::Path(hir::QPath::Resolved(None, path)) = path.kind {
|
if let hir::ExprKind::Path(hir::QPath::Resolved(None, path)) = path.kind {
|
||||||
path.segments.len() == 1 && path.segments[0].ident == name
|
path.segments.len() == 1 && path.segments[0].ident == name
|
||||||
|
|
Loading…
Reference in a new issue