if !self.diagnostic_metadata.currently_processing_generics && !single_uppercase_char {
return None;
}
- match (self.diagnostic_metadata.current_item, single_uppercase_char) {
- (Some(Item { kind: ItemKind::Fn(..), ident, .. }), _) if ident.name == sym::main => {
+ match (self.diagnostic_metadata.current_item, single_uppercase_char, self.diagnostic_metadata.currently_processing_generics) {
+ (Some(Item { kind: ItemKind::Fn(..), ident, .. }), _, _) if ident.name == sym::main => {
// Ignore `fn main()` as we don't want to suggest `fn main<T>()`
}
(
| kind @ ItemKind::Union(..),
..
}),
- true,
+ true, _
)
- | (Some(Item { kind, .. }), false) => {
+ // Without the 2nd `true`, we'd suggest `impl <T>` for `impl T` when a type `T` isn't found
+ | (Some(Item { kind: kind @ ItemKind::Impl(..), .. }), true, true)
+ | (Some(Item { kind, .. }), false, _) => {
// Likely missing type parameter.
if let Some(generics) = kind.generics() {
if span.overlaps(generics.span) {
| ---------------------- similarly named struct `A` defined here
LL | trait Foo {}
LL | impl Foo for A<N> {}
- | ^ help: a struct with a similar name exists: `A`
+ | ^
+ |
+help: a struct with a similar name exists
+ |
+LL | impl Foo for A<A> {}
+ | ^
+help: you might be missing a type parameter
+ |
+LL | impl<N> Foo for A<N> {}
+ | ^^^
error[E0412]: cannot find type `T` in this scope
--> $DIR/diagnostics.rs:16:32
| ---------------------- similarly named struct `A` defined here
...
LL | impl<const N: u8> Foo for C<N, T> {}
- | ^ help: a struct with a similar name exists: `A`
+ | ^
+ |
+help: a struct with a similar name exists
+ |
+LL | impl<const N: u8> Foo for C<N, A> {}
+ | ^
+help: you might be missing a type parameter
+ |
+LL | impl<const N, T: u8> Foo for C<N, T> {}
+ | ^^^
error[E0747]: unresolved item provided when a constant was expected
--> $DIR/diagnostics.rs:7:16
--> $DIR/issue-75627.rs:3:26
|
LL | unsafe impl Send for Foo<T> {}
- | ^ not found in this scope
+ | - ^ not found in this scope
+ | |
+ | help: you might be missing a type parameter: `<T>`
error: aborting due to previous error
--> $DIR/issue-78372.rs:3:31
|
LL | impl<T> DispatchFromDyn<Smaht<U, MISC>> for T {}
- | - ^ help: a type parameter with a similar name exists: `T`
+ | - ^
| |
| similarly named type parameter `T` defined here
+ |
+help: a type parameter with a similar name exists
+ |
+LL | impl<T> DispatchFromDyn<Smaht<T, MISC>> for T {}
+ | ^
+help: you might be missing a type parameter
+ |
+LL | impl<T, U> DispatchFromDyn<Smaht<U, MISC>> for T {}
+ | ^^^
error[E0412]: cannot find type `MISC` in this scope
--> $DIR/issue-78372.rs:3:34