about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-12-27 20:09:33 -0800
committerEsteban Küber <esteban@kuber.com.ar>2020-01-06 13:36:06 -0800
commit2905f14b67def26ef003bf224886453cd20bf49a (patch)
tree1b5ca90553d24b4149977f9cc5e8804bef11ad51
parentbc1571cc3cfef07251f7df52b95525aa16797ca2 (diff)
downloadrust-2905f14b67def26ef003bf224886453cd20bf49a.tar.gz
rust-2905f14b67def26ef003bf224886453cd20bf49a.zip
Account for `type X = impl Trait;` in lifetime suggestion
-rw-r--r--src/librustc_mir/borrow_check/diagnostics/region_errors.rs11
-rw-r--r--src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr2
2 files changed, 9 insertions, 4 deletions
diff --git a/src/librustc_mir/borrow_check/diagnostics/region_errors.rs b/src/librustc_mir/borrow_check/diagnostics/region_errors.rs
index 8d534b6ec8e..1a1cf578f60 100644
--- a/src/librustc_mir/borrow_check/diagnostics/region_errors.rs
+++ b/src/librustc_mir/borrow_check/diagnostics/region_errors.rs
@@ -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,
                         );
                     }
diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr
index 4c38f0a8a91..5957ecbdc5f 100644
--- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr
+++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr
@@ -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