@@ -66,10 +66,6 @@ impl_lint_pass!(AssigningClones => [ASSIGNING_CLONES]);
66
66
67
67
impl < ' tcx > LateLintPass < ' tcx > for AssigningClones {
68
68
fn check_expr ( & mut self , cx : & LateContext < ' tcx > , assign_expr : & ' tcx hir:: Expr < ' _ > ) {
69
- if !self . msrv . meets ( msrvs:: ASSIGNING_CLONES ) {
70
- return ;
71
- }
72
-
73
69
// Do not fire the lint in macros
74
70
let expn_data = assign_expr. span ( ) . ctxt ( ) . outer_expn_data ( ) ;
75
71
match expn_data. kind {
@@ -85,7 +81,7 @@ impl<'tcx> LateLintPass<'tcx> for AssigningClones {
85
81
return ;
86
82
} ;
87
83
88
- if is_ok_to_suggest ( cx, lhs, & call) {
84
+ if is_ok_to_suggest ( cx, lhs, & call, & self . msrv ) {
89
85
suggest ( cx, assign_expr, lhs, & call) ;
90
86
}
91
87
}
@@ -154,7 +150,13 @@ fn extract_call<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) -> Option<
154
150
155
151
// Return true if we find that the called method has a custom implementation and isn't derived or
156
152
// provided by default by the corresponding trait.
157
- fn is_ok_to_suggest < ' tcx > ( cx : & LateContext < ' tcx > , lhs : & Expr < ' tcx > , call : & CallCandidate < ' tcx > ) -> bool {
153
+ fn is_ok_to_suggest < ' tcx > ( cx : & LateContext < ' tcx > , lhs : & Expr < ' tcx > , call : & CallCandidate < ' tcx > , msrv : & Msrv ) -> bool {
154
+ // For calls to .to_owned we suggest using .clone_into(), which was only stablilized in 1.63.
155
+ // If the current MSRV is below that, don't suggest the lint.
156
+ if !msrv. meets ( msrvs:: ASSIGNING_CLONES ) && matches ! ( call. target, TargetTrait :: ToOwned ) {
157
+ return false ;
158
+ }
159
+
158
160
// If the left-hand side is a local variable, it might be uninitialized at this point.
159
161
// In that case we do not want to suggest the lint.
160
162
if let Some ( local) = path_to_local ( lhs) {
0 commit comments