1775e7b93d
Do not suggest constraining the `&self` param, but rather the return type. If that is wrong (because it is not sufficient), a follow up error will tell the user to fix it. This way we lower the chances of *over* constraining, but still get the cake of "correctly" contrained in two steps. This is a correct suggestion: ``` error: lifetime may not live long enough --> $DIR/ex3-both-anon-regions-return-type-is-anon.rs:9:9 | LL | fn foo<'a>(&self, x: &i32) -> &i32 { | - - let's call the lifetime of this reference `'1` | | | let's call the lifetime of this reference `'2` LL | x | ^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` | help: consider introducing a named lifetime parameter and update trait if needed | LL | fn foo<'a>(&self, x: &'a i32) -> &'a i32 { | ++ ++ ``` While this is incomplete because it should suggestino `&'a self` ``` error: lifetime may not live long enough --> $DIR/ex3-both-anon-regions-self-is-anon.rs:7:19 | LL | fn foo<'a>(&self, x: &Foo) -> &Foo { | - - let's call the lifetime of this reference `'1` | | | let's call the lifetime of this reference `'2` LL | if true { x } else { self } | ^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` | help: consider introducing a named lifetime parameter and update trait if needed | LL | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo { | ++ ++ ``` but the follow up error is ``` error: lifetime may not live long enough --> tests/ui/lifetimes/lifetime-errors/ex3-both-anon-regions-self-is-anon.rs:7:30 | 6 | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo { | -- - let's call the lifetime of this reference `'1` | | | lifetime `'a` defined here 7 | if true { x } else { self } | ^^^^ method was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1` | help: consider introducing a named lifetime parameter and update trait if needed | 6 | fn foo<'a>(&'a self, x: &'a Foo) -> &'a Foo { | ++ ``` |
||
---|---|---|
.. | ||
auxiliary | ||
elision | ||
arbitrary-self-from-method-substs.default.stderr | ||
arbitrary-self-from-method-substs.feature.stderr | ||
arbitrary-self-from-method-substs.rs | ||
arbitrary-self-opaque.rs | ||
arbitrary-self-opaque.stderr | ||
arbitrary-self-types-not-object-safe.curr.stderr | ||
arbitrary-self-types-not-object-safe.object_safe_for_dispatch.stderr | ||
arbitrary-self-types-not-object-safe.rs | ||
arbitrary_self_type_mut_difference.rs | ||
arbitrary_self_type_mut_difference.stderr | ||
arbitrary_self_types_needing_box_or_arc_wrapping.fixed | ||
arbitrary_self_types_needing_box_or_arc_wrapping.rs | ||
arbitrary_self_types_needing_box_or_arc_wrapping.stderr | ||
arbitrary_self_types_needing_mut_pin.fixed | ||
arbitrary_self_types_needing_mut_pin.rs | ||
arbitrary_self_types_needing_mut_pin.stderr | ||
arbitrary_self_types_nested.rs | ||
arbitrary_self_types_pin_lifetime-async.rs | ||
arbitrary_self_types_pin_lifetime.rs | ||
arbitrary_self_types_pin_lifetime_impl_trait-async.rs | ||
arbitrary_self_types_pin_lifetime_impl_trait-async.stderr | ||
arbitrary_self_types_pin_lifetime_impl_trait.rs | ||
arbitrary_self_types_pin_lifetime_impl_trait.stderr | ||
arbitrary_self_types_pin_lifetime_mismatch-async.rs | ||
arbitrary_self_types_pin_lifetime_mismatch-async.stderr | ||
arbitrary_self_types_pin_lifetime_mismatch.rs | ||
arbitrary_self_types_pin_lifetime_mismatch.stderr | ||
arbitrary_self_types_pin_needing_borrow.rs | ||
arbitrary_self_types_pin_needing_borrow.stderr | ||
arbitrary_self_types_pointers_and_wrappers.rs | ||
arbitrary_self_types_raw_pointer_struct.rs | ||
arbitrary_self_types_raw_pointer_trait.rs | ||
arbitrary_self_types_silly.rs | ||
arbitrary_self_types_stdlib_pointers.rs | ||
arbitrary_self_types_struct.rs | ||
arbitrary_self_types_trait.rs | ||
arbitrary_self_types_unsized_struct.rs | ||
builtin-superkinds-self-type.rs | ||
by-value-self-in-mut-slot.rs | ||
class-missing-self.rs | ||
class-missing-self.stderr | ||
explicit-self-closures.rs | ||
explicit-self-generic.rs | ||
explicit-self-objects-uniq.rs | ||
explicit-self.rs | ||
explicit_self_xcrate_exe.rs | ||
issue-61882-2.rs | ||
issue-61882-2.stderr | ||
issue-61882.rs | ||
issue-61882.stderr | ||
move-self.rs | ||
object-safety-sized-self-by-value-self.rs | ||
object-safety-sized-self-generic-method.rs | ||
object-safety-sized-self-return-Self.rs | ||
objects-owned-object-owned-method.rs | ||
point-at-arbitrary-self-type-method.rs | ||
point-at-arbitrary-self-type-method.stderr | ||
point-at-arbitrary-self-type-trait-method.rs | ||
point-at-arbitrary-self-type-trait-method.stderr | ||
self-ctor-nongeneric.rs | ||
self-impl-2.rs | ||
self-impl.rs | ||
self-impl.stderr | ||
self-in-mut-slot-default-method.rs | ||
self-in-mut-slot-immediate-value.rs | ||
self-in-typedefs.rs | ||
self-infer.rs | ||
self-infer.stderr | ||
self-re-assign.rs | ||
self-shadowing-import.rs | ||
self-type-param.rs | ||
self-vs-path-ambiguity.rs | ||
self-vs-path-ambiguity.stderr | ||
self_lifetime-async.rs | ||
self_lifetime.rs | ||
self_type_keyword-2.rs | ||
self_type_keyword-2.stderr | ||
self_type_keyword.rs | ||
self_type_keyword.stderr | ||
string-self-append.rs | ||
suggest-self-2.rs | ||
suggest-self-2.stderr | ||
suggest-self.rs | ||
suggest-self.stderr | ||
ufcs-explicit-self.rs | ||
uniq-self-in-mut-slot.rs | ||
where-for-self.rs |