Skip to content

Commit cf5702e

Browse files
committed
Detect when a lifetime is being reused in suggestion
1 parent 1775e7b commit cf5702e

10 files changed

+13
-9
lines changed

compiler/rustc_infer/messages.ftl

+4-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,10 @@ infer_label_bad = {$bad_kind ->
164164
infer_lf_bound_not_satisfied = lifetime bound not satisfied
165165
infer_lifetime_mismatch = lifetime mismatch
166166
167-
infer_lifetime_param_suggestion = consider introducing a named lifetime parameter{$is_impl ->
167+
infer_lifetime_param_suggestion = consider {$is_reuse ->
168+
[true] reusing
169+
*[false] introducing
170+
} a named lifetime parameter{$is_impl ->
168171
[true] {" "}and update trait if needed
169172
*[false] {""}
170173
}

compiler/rustc_infer/src/errors/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ impl Subdiagnostic for AddLifetimeParamsSuggestion<'_> {
517517
Applicability::MaybeIncorrect,
518518
);
519519
diag.arg("is_impl", is_impl);
520+
diag.arg("is_reuse", !introduce_new);
520521

521522
true
522523
};

tests/ui/lifetimes/issue-90170-elision-mismatch.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ LL | pub fn foo3<'a>(_other: &'a [u8], x: &mut Vec<&u8>, y: &u8) { x.push(y); }
3535
| | let's call the lifetime of this reference `'1`
3636
| let's call the lifetime of this reference `'2`
3737
|
38-
help: consider introducing a named lifetime parameter
38+
help: consider reusing a named lifetime parameter
3939
|
4040
LL | pub fn foo3<'a>(_other: &'a [u8], x: &mut Vec<&'a u8>, y: &'a u8) { x.push(y); }
4141
| ++ ++

tests/ui/lifetimes/lifetime-errors/ex1-return-one-existing-name-if-else-using-impl.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ LL |
99
LL | if x > y { x } else { y }
1010
| ^ associated function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
1111
|
12-
help: consider introducing a named lifetime parameter and update trait if needed
12+
help: consider reusing a named lifetime parameter and update trait if needed
1313
|
1414
LL | fn foo<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {
1515
| ++

tests/ui/lifetimes/lifetime-errors/ex1-return-one-existing-name-return-type-is-anon.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LL | fn foo<'a>(&self, x: &'a i32) -> &i32 {
88
LL | x
99
| ^ method was supposed to return data with lifetime `'1` but it is returning data with lifetime `'a`
1010
|
11-
help: consider introducing a named lifetime parameter and update trait if needed
11+
help: consider reusing a named lifetime parameter and update trait if needed
1212
|
1313
LL | fn foo<'a>(&self, x: &'a i32) -> &'a i32 {
1414
| ++

tests/ui/lifetimes/lifetime-errors/ex1-return-one-existing-name-self-is-anon.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ LL |
99
LL | if true { x } else { self }
1010
| ^^^^ method was supposed to return data with lifetime `'a` but it is returning data with lifetime `'1`
1111
|
12-
help: consider introducing a named lifetime parameter and update trait if needed
12+
help: consider reusing a named lifetime parameter and update trait if needed
1313
|
1414
LL | fn foo<'a>(&'a self, x: &'a Foo) -> &'a Foo {
1515
| ++

tests/ui/lifetimes/lifetime-errors/ex3-both-anon-regions-return-type-is-anon.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LL | fn foo<'a>(&self, x: &i32) -> &i32 {
88
LL | x
99
| ^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
1010
|
11-
help: consider introducing a named lifetime parameter and update trait if needed
11+
help: consider reusing a named lifetime parameter and update trait if needed
1212
|
1313
LL | fn foo<'a>(&self, x: &'a i32) -> &'a i32 {
1414
| ++ ++

tests/ui/lifetimes/lifetime-errors/ex3-both-anon-regions-self-is-anon.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ LL | fn foo<'a>(&self, x: &Foo) -> &Foo {
88
LL | if true { x } else { self }
99
| ^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
1010
|
11-
help: consider introducing a named lifetime parameter and update trait if needed
11+
help: consider reusing a named lifetime parameter and update trait if needed
1212
|
1313
LL | fn foo<'a>(&self, x: &'a Foo) -> &'a Foo {
1414
| ++ ++

tests/ui/self/arbitrary_self_types_pin_lifetime_mismatch-async.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ LL | async fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() { arg }
3535
| | let's call the lifetime of this reference `'1`
3636
| lifetime `'a` defined here
3737
|
38-
help: consider introducing a named lifetime parameter and update trait if needed
38+
help: consider reusing a named lifetime parameter and update trait if needed
3939
|
4040
LL | async fn bar<'a>(self: Alias<&'a Self>, arg: &'a ()) -> &() { arg }
4141
| ++

tests/ui/self/arbitrary_self_types_pin_lifetime_mismatch.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ LL | fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &() {
3838
LL | arg
3939
| ^^^ method was supposed to return data with lifetime `'1` but it is returning data with lifetime `'a`
4040
|
41-
help: consider introducing a named lifetime parameter and update trait if needed
41+
help: consider reusing a named lifetime parameter and update trait if needed
4242
|
4343
LL | fn bar<'a>(self: Alias<&Self>, arg: &'a ()) -> &'a () {
4444
| ++

0 commit comments

Comments
 (0)