diff options
| author | Ralf Jung <post@ralfj.de> | 2020-05-14 10:22:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-14 10:22:40 +0200 |
| commit | 32ea6a154f49e64abe21729d48e798ce7a68fa63 (patch) | |
| tree | 0bb091343b50cd2e2c4a939d0988c96609bbb72f | |
| parent | 23ffeea307c31f0c20ebb5a15d5171e0c414629d (diff) | |
| parent | 079817d62481ca8d84ca87dde9a276a1d5d663cf (diff) | |
| download | rust-32ea6a154f49e64abe21729d48e798ce7a68fa63.tar.gz rust-32ea6a154f49e64abe21729d48e798ce7a68fa63.zip | |
Rollup merge of #71525 - ldm0:intosug, r=Mark-Simulacrum
`prefix` should not be mutable. Change the process from for loop to find, which makes the `prefix` able to be immutable.
| -rw-r--r-- | src/librustc_typeck/check/demand.rs | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index 8ae5ee4c3f9..6831a995df5 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -708,24 +708,24 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // For now, don't suggest casting with `as`. let can_cast = false; - let mut prefix = String::new(); - if let Some(hir::Node::Expr(hir::Expr { - kind: hir::ExprKind::Struct(_, fields, _), .. + let prefix = if let Some(hir::Node::Expr(hir::Expr { + kind: hir::ExprKind::Struct(_, fields, _), + .. })) = self.tcx.hir().find(self.tcx.hir().get_parent_node(expr.hir_id)) { // `expr` is a literal field for a struct, only suggest if appropriate - for field in *fields { - if field.expr.hir_id == expr.hir_id && field.is_shorthand { - // This is a field literal - prefix = format!("{}: ", field.ident); - break; - } - } - if &prefix == "" { + match (*fields) + .iter() + .find(|field| field.expr.hir_id == expr.hir_id && field.is_shorthand) + { + // This is a field literal + Some(field) => format!("{}: ", field.ident), // Likely a field was meant, but this field wasn't found. Do not suggest anything. - return false; + None => return false, } - } + } else { + String::new() + }; if let hir::ExprKind::Call(path, args) = &expr.kind { if let (hir::ExprKind::Path(hir::QPath::TypeRelative(base_ty, path_segment)), 1) = (&path.kind, args.len()) @@ -817,7 +817,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let suggest_to_change_suffix_or_into = |err: &mut DiagnosticBuilder<'_>, is_fallible: bool| { - let into_sugg = into_suggestion.clone(); err.span_suggestion( expr.span, if literal_is_ty_suffixed(expr) { @@ -832,7 +831,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { } else if is_fallible { try_into_suggestion } else { - into_sugg + into_suggestion.clone() }, Applicability::MachineApplicable, ); |
