Format missing GATs correctly

This commit is contained in:
Michael Goulet 2023-04-19 17:47:33 +00:00
parent 73038d3a64
commit f362f6e9e6
5 changed files with 35 additions and 2 deletions

View File

@ -466,7 +466,13 @@ fn suggestion_signature<'tcx>(
assoc,
)
}
ty::AssocKind::Type => format!("type {} = /* Type */;", assoc.name),
ty::AssocKind::Type => {
let (generics, where_clauses) = bounds_from_generic_predicates(
tcx,
tcx.predicates_of(assoc.def_id).instantiate_own(tcx, substs),
);
format!("type {}{generics} = /* Type */{where_clauses};", assoc.name)
}
ty::AssocKind::Const => {
let ty = tcx.type_of(assoc.def_id).subst_identity();
let val = ty_kind_suggestion(ty).unwrap_or("todo!()");

View File

@ -0,0 +1,5 @@
pub trait Foo {
type Gat<T>
where
T: std::fmt::Display;
}

View File

@ -0,0 +1,11 @@
// aux-build:missing-item-sugg.rs
extern crate missing_item_sugg;
struct Local;
impl missing_item_sugg::Foo for Local {
//~^ ERROR not all trait items implemented, missing: `Gat`
}
//~^ HELP implement the missing item: `type Gat<T> = /* Type */ where T: std::fmt::Display;`
fn main() {}

View File

@ -0,0 +1,11 @@
error[E0046]: not all trait items implemented, missing: `Gat`
--> $DIR/missing-item-sugg.rs:6:1
|
LL | impl missing_item_sugg::Foo for Local {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `Gat` in implementation
|
= help: implement the missing item: `type Gat<T> = /* Type */ where T: std::fmt::Display;`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0046`.

View File

@ -1,7 +1,7 @@
error[E0046]: not all trait items implemented, missing: `Type`, `bar`, `baz`, `A`
--> $DIR/missing-assoc-fn-applicable-suggestions.rs:7:1
|
LL | impl TraitA<()> for S {
LL | impl TraitA<()> for S {
| ^^^^^^^^^^^^^^^^^^^^^ missing `Type`, `bar`, `baz`, `A` in implementation
|
= help: implement the missing item: `type Type = /* Type */;`