Account for `type X = impl Trait;` in lifetime suggestion

This commit is contained in:
Esteban Küber 2019-12-27 20:09:33 -08:00
parent bc1571cc3c
commit 2905f14b67
2 changed files with 9 additions and 4 deletions

View File

@ -800,7 +800,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
// If there is a static predicate, then the only sensible suggestion is to replace
// fr with `'static`.
if has_static_predicate {
diag.help(&format!("consider replacing `{}` with `{}`", fr_name, static_str,));
diag.help(&format!("consider replacing `{}` with `{}`", fr_name, static_str));
} else {
// Otherwise, we should suggest adding a constraint on the return type.
let span = infcx.tcx.def_span(*did);
@ -810,7 +810,12 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} else {
"'_".to_string()
};
let suggestion = if snippet.ends_with(";") {
// `type X = impl Trait;`
format!("{} + {};", &snippet[..snippet.len() - 1], suggestable_fr_name)
} else {
format!("{} + {}", snippet, suggestable_fr_name)
};
diag.span_suggestion(
span,
&format!(
@ -818,7 +823,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
`{}`, add `{}` as a bound",
fr_name, suggestable_fr_name,
),
format!("{} + {}", snippet, suggestable_fr_name),
suggestion,
Applicability::MachineApplicable,
);
}

View File

@ -7,7 +7,7 @@ LL | fn foo<'a, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> {
= help: consider replacing `'a` with `'static`
help: to allow this `impl Trait` to capture borrowed data with lifetime `'a`, add `'a` as a bound
|
LL | type E<'a, 'b> = impl Sized; + 'a
LL | type E<'a, 'b> = impl Sized + 'a;
|
error: aborting due to previous error