diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2022-11-03 13:51:44 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2022-11-23 12:17:47 -0800 |
| commit | d687d46f68295c5e8aa318492500d22450d89b20 (patch) | |
| tree | 4f8f9285dd4a4659986724f258f50873cd95bf2f /compiler/rustc_borrowck | |
| parent | c0e481731ba72eb120a74da454bb806397ca165c (diff) | |
| download | rust-d687d46f68295c5e8aa318492500d22450d89b20.tar.gz rust-d687d46f68295c5e8aa318492500d22450d89b20.zip | |
Tweak output in for loops
Do not suggest `.clone()` as we already suggest borrowing the iterated value.
Diffstat (limited to 'compiler/rustc_borrowck')
| -rw-r--r-- | compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs index 18d8bbf9047..e917d527eb3 100644 --- a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs +++ b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs @@ -397,8 +397,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> { && let Some(node) = hir.find(hir.local_def_id_to_hir_id(def_id)) && let Some(fn_sig) = node.fn_sig() && let Some(ident) = node.ident() - && let Some(pos) = args.iter() - .position(|arg| arg.hir_id == expr.hir_id) + && let Some(pos) = args.iter().position(|arg| arg.hir_id == expr.hir_id) && let Some(arg) = fn_sig.decl.inputs.get(pos + offset) { let mut span: MultiSpan = arg.span.into(); @@ -425,7 +424,16 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> { } let place = &self.move_data.move_paths[mpi].place; let ty = place.ty(self.body, self.infcx.tcx).ty; - self.suggest_cloning(err, ty, move_span); + if let hir::Node::Expr(parent_expr) = parent + && let hir::ExprKind::Call(call_expr, _) = parent_expr.kind + && let hir::ExprKind::Path( + hir::QPath::LangItem(LangItem::IntoIterIntoIter, _, _) + ) = call_expr.kind + { + // Do not suggest `.clone()` in a `for` loop, we already suggest borrowing. + } else { + self.suggest_cloning(err, ty, move_span); + } } } if let Some(pat) = finder.pat && !seen_spans.contains(&pat.span) { |
