Rollup merge of #102323 - Stoozy:master, r=cjgillot
Trying to suggest additional lifetime parameter ``@cjgillot`` This is what I have so far for #100615
This commit is contained in:
commit
0db05f16c8
2 changed files with 41 additions and 4 deletions
|
@ -1333,12 +1333,41 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||||
&& let hir::IsAsync::NotAsync = self.tcx.asyncness(lifetime_ref.hir_id.owner.def_id)
|
&& let hir::IsAsync::NotAsync = self.tcx.asyncness(lifetime_ref.hir_id.owner.def_id)
|
||||||
&& !self.tcx.features().anonymous_lifetime_in_impl_trait
|
&& !self.tcx.features().anonymous_lifetime_in_impl_trait
|
||||||
{
|
{
|
||||||
rustc_session::parse::feature_err(
|
let mut diag = rustc_session::parse::feature_err(
|
||||||
&self.tcx.sess.parse_sess,
|
&self.tcx.sess.parse_sess,
|
||||||
sym::anonymous_lifetime_in_impl_trait,
|
sym::anonymous_lifetime_in_impl_trait,
|
||||||
lifetime_ref.span,
|
lifetime_ref.span,
|
||||||
"anonymous lifetimes in `impl Trait` are unstable",
|
"anonymous lifetimes in `impl Trait` are unstable",
|
||||||
).emit();
|
);
|
||||||
|
|
||||||
|
match self.tcx.hir().get_generics(lifetime_ref.hir_id.owner.def_id) {
|
||||||
|
Some(generics) => {
|
||||||
|
|
||||||
|
let new_param_sugg_tuple;
|
||||||
|
|
||||||
|
new_param_sugg_tuple = match generics.span_for_param_suggestion() {
|
||||||
|
Some(_) => {
|
||||||
|
Some((self.tcx.sess.source_map().span_through_char(generics.span, '<').shrink_to_hi(), "'a, ".to_owned()))
|
||||||
|
},
|
||||||
|
None => Some((generics.span, "<'a>".to_owned()))
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut multi_sugg_vec = vec![(lifetime_ref.span.shrink_to_hi(), "'a ".to_owned())];
|
||||||
|
|
||||||
|
if let Some(new_tuple) = new_param_sugg_tuple{
|
||||||
|
multi_sugg_vec.push(new_tuple);
|
||||||
|
}
|
||||||
|
|
||||||
|
diag.span_label(lifetime_ref.span, "expected named lifetime parameter");
|
||||||
|
diag.multipart_suggestion("consider introducing a named lifetime parameter",
|
||||||
|
multi_sugg_vec,
|
||||||
|
rustc_errors::Applicability::MaybeIncorrect);
|
||||||
|
|
||||||
|
},
|
||||||
|
None => { }
|
||||||
|
}
|
||||||
|
|
||||||
|
diag.emit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
scope = s;
|
scope = s;
|
||||||
|
|
|
@ -26,17 +26,25 @@ error[E0658]: anonymous lifetimes in `impl Trait` are unstable
|
||||||
--> $DIR/impl-trait-missing-lifetime-gated.rs:5:31
|
--> $DIR/impl-trait-missing-lifetime-gated.rs:5:31
|
||||||
|
|
|
|
||||||
LL | fn f(_: impl Iterator<Item = &'_ ()>) {}
|
LL | fn f(_: impl Iterator<Item = &'_ ()>) {}
|
||||||
| ^^
|
| ^^ expected named lifetime parameter
|
||||||
|
|
|
|
||||||
= help: add `#![feature(anonymous_lifetime_in_impl_trait)]` to the crate attributes to enable
|
= help: add `#![feature(anonymous_lifetime_in_impl_trait)]` to the crate attributes to enable
|
||||||
|
help: consider introducing a named lifetime parameter
|
||||||
|
|
|
||||||
|
LL | fn f<'a>(_: impl Iterator<Item = &'_'a ()>) {}
|
||||||
|
| ++++ ++
|
||||||
|
|
||||||
error[E0658]: anonymous lifetimes in `impl Trait` are unstable
|
error[E0658]: anonymous lifetimes in `impl Trait` are unstable
|
||||||
--> $DIR/impl-trait-missing-lifetime-gated.rs:8:31
|
--> $DIR/impl-trait-missing-lifetime-gated.rs:8:31
|
||||||
|
|
|
|
||||||
LL | fn g(x: impl Iterator<Item = &'_ ()>) -> Option<&'_ ()> { x.next() }
|
LL | fn g(x: impl Iterator<Item = &'_ ()>) -> Option<&'_ ()> { x.next() }
|
||||||
| ^^
|
| ^^ expected named lifetime parameter
|
||||||
|
|
|
|
||||||
= help: add `#![feature(anonymous_lifetime_in_impl_trait)]` to the crate attributes to enable
|
= help: add `#![feature(anonymous_lifetime_in_impl_trait)]` to the crate attributes to enable
|
||||||
|
help: consider introducing a named lifetime parameter
|
||||||
|
|
|
||||||
|
LL | fn g<'a>(x: impl Iterator<Item = &'_'a ()>) -> Option<&'_ ()> { x.next() }
|
||||||
|
| ++++ ++
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue