mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-18 03:25:55 +00:00
Only enforce MSRV check on .clone_into() suggestions
This commit is contained in:
parent
7c0b2dd352
commit
5f7b3c5eea
@ -66,10 +66,6 @@ impl_lint_pass!(AssigningClones => [ASSIGNING_CLONES]);
|
|||||||
|
|
||||||
impl<'tcx> LateLintPass<'tcx> for AssigningClones {
|
impl<'tcx> LateLintPass<'tcx> for AssigningClones {
|
||||||
fn check_expr(&mut self, cx: &LateContext<'tcx>, assign_expr: &'tcx hir::Expr<'_>) {
|
fn check_expr(&mut self, cx: &LateContext<'tcx>, assign_expr: &'tcx hir::Expr<'_>) {
|
||||||
if !self.msrv.meets(msrvs::ASSIGNING_CLONES) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not fire the lint in macros
|
// Do not fire the lint in macros
|
||||||
let expn_data = assign_expr.span().ctxt().outer_expn_data();
|
let expn_data = assign_expr.span().ctxt().outer_expn_data();
|
||||||
match expn_data.kind {
|
match expn_data.kind {
|
||||||
@ -85,7 +81,7 @@ impl<'tcx> LateLintPass<'tcx> for AssigningClones {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
if is_ok_to_suggest(cx, lhs, &call) {
|
if is_ok_to_suggest(cx, lhs, &call, &self.msrv) {
|
||||||
suggest(cx, assign_expr, lhs, &call);
|
suggest(cx, assign_expr, lhs, &call);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +150,13 @@ fn extract_call<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> Option<
|
|||||||
|
|
||||||
// Return true if we find that the called method has a custom implementation and isn't derived or
|
// Return true if we find that the called method has a custom implementation and isn't derived or
|
||||||
// provided by default by the corresponding trait.
|
// provided by default by the corresponding trait.
|
||||||
fn is_ok_to_suggest<'tcx>(cx: &LateContext<'tcx>, lhs: &Expr<'tcx>, call: &CallCandidate<'tcx>) -> bool {
|
fn is_ok_to_suggest<'tcx>(cx: &LateContext<'tcx>, lhs: &Expr<'tcx>, call: &CallCandidate<'tcx>, msrv: &Msrv) -> bool {
|
||||||
|
// For calls to .to_owned we suggest using .clone_into(), which was only stablilized in 1.63.
|
||||||
|
// If the current MSRV is below that, don't suggest the lint.
|
||||||
|
if !msrv.meets(msrvs::ASSIGNING_CLONES) && matches!(call.target, TargetTrait::ToOwned) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// If the left-hand side is a local variable, it might be uninitialized at this point.
|
// If the left-hand side is a local variable, it might be uninitialized at this point.
|
||||||
// In that case we do not want to suggest the lint.
|
// In that case we do not want to suggest the lint.
|
||||||
if let Some(local) = path_to_local(lhs) {
|
if let Some(local) = path_to_local(lhs) {
|
||||||
|
Loading…
Reference in New Issue
Block a user