Skip to content

Commit 973ab7d

Browse files
committed
Make "add param to inner item" suggestion verbose
``` error[E0401]: can't use generic parameters from outer item --> $DIR/enum-definition-with-outer-generic-parameter-5997.rs:3:16 | LL | fn f<Z>() -> bool { | - type parameter from outer item LL | enum E { V(Z) } | ^ use of generic parameter from outer item | help: try introducing a local generic parameter here | LL | enum E<Z> { V(Z) } | +++ ```
1 parent 51f5892 commit 973ab7d

13 files changed

+126
-60
lines changed

compiler/rustc_resolve/src/errors.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ pub(crate) enum GenericParamsFromOuterItemLabel {
4747
}
4848

4949
#[derive(Subdiagnostic)]
50-
#[suggestion(resolve_suggestion, code = "{snippet}", applicability = "maybe-incorrect")]
50+
#[suggestion(
51+
resolve_suggestion,
52+
code = "{snippet}",
53+
applicability = "maybe-incorrect",
54+
style = "verbose"
55+
)]
5156
pub(crate) struct GenericParamsFromOuterItemSugg {
5257
#[primary_span]
5358
pub(crate) span: Span,

tests/ui/const-generics/early/const-param-from-outer-fn.stderr

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn foo<const X: u32>() {
55
| - const parameter from outer item
66
LL | fn bar() -> u32 {
7-
| - help: try introducing a local generic parameter here: `<X>`
87
LL | X
98
| ^ use of generic parameter from outer item
9+
|
10+
help: try introducing a local generic parameter here
11+
|
12+
LL | fn bar<X>() -> u32 {
13+
| +++
1014

1115
error: aborting due to 1 previous error
1216

tests/ui/delegation/target-expr.stderr

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ error[E0401]: can't use generic parameters from outer item
33
|
44
LL | fn bar<T: Default>(_: T) {
55
| - type parameter from outer item
6-
LL | reuse Trait::static_method {
7-
| - help: try introducing a local generic parameter here: `T,`
8-
LL |
6+
...
97
LL | let _ = T::Default();
108
| ^^^^^^^^^^ use of generic parameter from outer item
9+
|
10+
help: try introducing a local generic parameter here
11+
|
12+
LL | reuse Trait::static_methodT, {
13+
| ++
1114

1215
error[E0434]: can't capture dynamic environment in a fn item
1316
--> $DIR/target-expr.rs:26:17

tests/ui/error-codes/E0401.stderr

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,26 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn foo<T>(x: T) {
55
| - type parameter from outer item
66
LL | fn bfnr<U, V: Baz<U>, W: Fn()>(y: T) {
7-
| - ^ use of generic parameter from outer item
8-
| |
9-
| help: try introducing a local generic parameter here: `T,`
7+
| ^ use of generic parameter from outer item
8+
|
9+
help: try introducing a local generic parameter here
10+
|
11+
LL | fn bfnr<T, U, V: Baz<U>, W: Fn()>(y: T) {
12+
| ++
1013

1114
error[E0401]: can't use generic parameters from outer item
1215
--> $DIR/E0401.rs:9:16
1316
|
1417
LL | fn foo<T>(x: T) {
1518
| - type parameter from outer item
1619
...
17-
LL | fn baz<U,
18-
| - help: try introducing a local generic parameter here: `T,`
19-
...
2020
LL | (y: T) {
2121
| ^ use of generic parameter from outer item
22+
|
23+
help: try introducing a local generic parameter here
24+
|
25+
LL | fn baz<T, U,
26+
| ++
2227

2328
error[E0401]: can't use `Self` from outer item
2429
--> $DIR/E0401.rs:22:25

tests/ui/generics/enum-definition-with-outer-generic-parameter-5997.stderr

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn f<Z>() -> bool {
55
| - type parameter from outer item
66
LL | enum E { V(Z) }
7-
| - ^ use of generic parameter from outer item
8-
| |
9-
| help: try introducing a local generic parameter here: `<Z>`
7+
| ^ use of generic parameter from outer item
8+
|
9+
help: try introducing a local generic parameter here
10+
|
11+
LL | enum E<Z> { V(Z) }
12+
| +++
1013

1114
error: aborting due to 1 previous error
1215

tests/ui/generics/generic-params-nested-fn-scope-error.stderr

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,25 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn foo<U>(v: Vec<U>) -> U {
55
| - type parameter from outer item
66
LL | fn bar(w: [U]) -> U {
7-
| - ^ use of generic parameter from outer item
8-
| |
9-
| help: try introducing a local generic parameter here: `<U>`
7+
| ^ use of generic parameter from outer item
8+
|
9+
help: try introducing a local generic parameter here
10+
|
11+
LL | fn bar<U>(w: [U]) -> U {
12+
| +++
1013

1114
error[E0401]: can't use generic parameters from outer item
1215
--> $DIR/generic-params-nested-fn-scope-error.rs:5:23
1316
|
1417
LL | fn foo<U>(v: Vec<U>) -> U {
1518
| - type parameter from outer item
1619
LL | fn bar(w: [U]) -> U {
17-
| - ^ use of generic parameter from outer item
18-
| |
19-
| help: try introducing a local generic parameter here: `<U>`
20+
| ^ use of generic parameter from outer item
21+
|
22+
help: try introducing a local generic parameter here
23+
|
24+
LL | fn bar<U>(w: [U]) -> U {
25+
| +++
2026

2127
error: aborting due to 2 previous errors
2228

tests/ui/generics/issue-98432.stderr

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ LL | impl<T> Struct<T> {
55
| - type parameter from outer item
66
LL | const CONST: fn() = || {
77
LL | struct _Obligation where T:;
8-
| - ^ use of generic parameter from outer item
9-
| |
10-
| help: try introducing a local generic parameter here: `<T>`
8+
| ^ use of generic parameter from outer item
9+
|
10+
help: try introducing a local generic parameter here
11+
|
12+
LL | struct _Obligation<T> where T:;
13+
| +++
1114

1215
error: aborting due to 1 previous error
1316

tests/ui/resolve/bad-type-env-capture.stderr

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn foo<T>() {
55
| - type parameter from outer item
66
LL | fn bar(b: T) { }
7-
| - ^ use of generic parameter from outer item
8-
| |
9-
| help: try introducing a local generic parameter here: `<T>`
7+
| ^ use of generic parameter from outer item
8+
|
9+
help: try introducing a local generic parameter here
10+
|
11+
LL | fn bar<T>(b: T) { }
12+
| +++
1013

1114
error: aborting due to 1 previous error
1215

tests/ui/resolve/generic-params-from-outer-item-in-const-item.generic_const_items.stderr

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ error[E0401]: can't use generic parameters from outer item
44
LL | fn outer<T: Tr>() { // outer function
55
| - type parameter from outer item
66
LL | const K: u32 = T::C;
7-
| - ^^^^ use of generic parameter from outer item
8-
| |
9-
| help: try introducing a local generic parameter here: `<T>`
7+
| ^^^^ use of generic parameter from outer item
108
|
119
= note: a `const` is a separate item from the item that contains it
10+
help: try introducing a local generic parameter here
11+
|
12+
LL | const K<T>: u32 = T::C;
13+
| +++
1214

1315
error[E0401]: can't use generic parameters from outer item
1416
--> $DIR/generic-params-from-outer-item-in-const-item.rs:19:24
@@ -17,23 +19,27 @@ LL | impl<T> Tr for T { // outer impl block
1719
| - type parameter from outer item
1820
LL | const C: u32 = {
1921
LL | const I: u32 = T::C;
20-
| - ^^^^ use of generic parameter from outer item
21-
| |
22-
| help: try introducing a local generic parameter here: `<T>`
22+
| ^^^^ use of generic parameter from outer item
2323
|
2424
= note: a `const` is a separate item from the item that contains it
25+
help: try introducing a local generic parameter here
26+
|
27+
LL | const I<T>: u32 = T::C;
28+
| +++
2529

2630
error[E0401]: can't use generic parameters from outer item
2731
--> $DIR/generic-params-from-outer-item-in-const-item.rs:27:20
2832
|
2933
LL | struct S<T: Tr>(U32<{ // outer struct
3034
| - type parameter from outer item
3135
LL | const _: u32 = T::C;
32-
| - ^^^^ use of generic parameter from outer item
33-
| |
34-
| help: try introducing a local generic parameter here: `<T>`
36+
| ^^^^ use of generic parameter from outer item
3537
|
3638
= note: a `const` is a separate item from the item that contains it
39+
help: try introducing a local generic parameter here
40+
|
41+
LL | const _<T>: u32 = T::C;
42+
| +++
3743

3844
error: aborting due to 3 previous errors
3945

tests/ui/resolve/issue-3021-c.stderr

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,28 @@ error[E0401]: can't use generic parameters from outer item
33
|
44
LL | fn siphash<T>() {
55
| - type parameter from outer item
6-
LL |
7-
LL | trait U {
8-
| - help: try introducing a local generic parameter here: `<T>`
6+
...
97
LL | fn g(&self, x: T) -> T;
108
| ^ use of generic parameter from outer item
9+
|
10+
help: try introducing a local generic parameter here
11+
|
12+
LL | trait U<T> {
13+
| +++
1114

1215
error[E0401]: can't use generic parameters from outer item
1316
--> $DIR/issue-3021-c.rs:4:30
1417
|
1518
LL | fn siphash<T>() {
1619
| - type parameter from outer item
17-
LL |
18-
LL | trait U {
19-
| - help: try introducing a local generic parameter here: `<T>`
20+
...
2021
LL | fn g(&self, x: T) -> T;
2122
| ^ use of generic parameter from outer item
23+
|
24+
help: try introducing a local generic parameter here
25+
|
26+
LL | trait U<T> {
27+
| +++
2228

2329
error: aborting due to 2 previous errors
2430

0 commit comments

Comments
 (0)