When suggesting associated fn with type parameters, include in the structured suggestion
This commit is contained in:
parent
5b0caef54a
commit
319dd6f139
6 changed files with 195 additions and 3 deletions
|
|
@ -0,0 +1,21 @@
|
|||
// run-rustfix
|
||||
trait TraitB {
|
||||
type Item;
|
||||
}
|
||||
|
||||
trait TraitA<A> {
|
||||
type Type;
|
||||
fn bar<T>(_: T) -> Self;
|
||||
fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: Copy;
|
||||
}
|
||||
|
||||
struct S;
|
||||
struct Type;
|
||||
|
||||
impl TraitA<()> for S { //~ ERROR not all trait items implemented
|
||||
fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: std::marker::Copy { unimplemented!() }
|
||||
fn bar<T>(_: T) -> Self { unimplemented!() }
|
||||
type Type = Type;
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// run-rustfix
|
||||
trait TraitB {
|
||||
type Item;
|
||||
}
|
||||
|
||||
trait TraitA<A> {
|
||||
type Type;
|
||||
fn bar<T>(_: T) -> Self;
|
||||
fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: Copy;
|
||||
}
|
||||
|
||||
struct S;
|
||||
struct Type;
|
||||
|
||||
impl TraitA<()> for S { //~ ERROR not all trait items implemented
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
error[E0046]: not all trait items implemented, missing: `Type`, `bar`, `baz`
|
||||
--> $DIR/missing-assoc-fn-applicable-suggestions.rs:15:1
|
||||
|
|
||||
LL | type Type;
|
||||
| ---------- `Type` from trait
|
||||
LL | fn bar<T>(_: T) -> Self;
|
||||
| ------------------------ `bar` from trait
|
||||
LL | fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: Copy;
|
||||
| ------------------------------------------------------------------- `baz` from trait
|
||||
...
|
||||
LL | impl TraitA<()> for S {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ missing `Type`, `bar`, `baz` in implementation
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0046`.
|
||||
22
src/test/ui/suggestions/missing-assoc-fn.rs
Normal file
22
src/test/ui/suggestions/missing-assoc-fn.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
trait TraitB {
|
||||
type Item;
|
||||
}
|
||||
|
||||
trait TraitA<A> {
|
||||
fn foo<T: TraitB<Item = A>>(_: T) -> Self;
|
||||
fn bar<T>(_: T) -> Self;
|
||||
fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: Copy;
|
||||
fn bat<T: TraitB<Item: Copy>>(_: T) -> Self; //~ ERROR associated type bounds are unstable
|
||||
}
|
||||
|
||||
struct S;
|
||||
|
||||
impl TraitA<()> for S { //~ ERROR not all trait items implemented
|
||||
}
|
||||
|
||||
use std::iter::FromIterator;
|
||||
struct X;
|
||||
impl FromIterator<()> for X { //~ ERROR not all trait items implemented
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
36
src/test/ui/suggestions/missing-assoc-fn.stderr
Normal file
36
src/test/ui/suggestions/missing-assoc-fn.stderr
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
error[E0658]: associated type bounds are unstable
|
||||
--> $DIR/missing-assoc-fn.rs:9:22
|
||||
|
|
||||
LL | fn bat<T: TraitB<Item: Copy>>(_: T) -> Self;
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: for more information, see https://github.com/rust-lang/rust/issues/52662
|
||||
= help: add `#![feature(associated_type_bounds)]` to the crate attributes to enable
|
||||
|
||||
error[E0046]: not all trait items implemented, missing: `foo`, `bar`, `baz`, `bat`
|
||||
--> $DIR/missing-assoc-fn.rs:14:1
|
||||
|
|
||||
LL | fn foo<T: TraitB<Item = A>>(_: T) -> Self;
|
||||
| ------------------------------------------ `foo` from trait
|
||||
LL | fn bar<T>(_: T) -> Self;
|
||||
| ------------------------ `bar` from trait
|
||||
LL | fn baz<T>(_: T) -> Self where T: TraitB, <T as TraitB>::Item: Copy;
|
||||
| ------------------------------------------------------------------- `baz` from trait
|
||||
LL | fn bat<T: TraitB<Item: Copy>>(_: T) -> Self;
|
||||
| -------------------------------------------- `bat` from trait
|
||||
...
|
||||
LL | impl TraitA<()> for S {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ missing `foo`, `bar`, `baz`, `bat` in implementation
|
||||
|
||||
error[E0046]: not all trait items implemented, missing: `from_iter`
|
||||
--> $DIR/missing-assoc-fn.rs:19:1
|
||||
|
|
||||
LL | impl FromIterator<()> for X {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `from_iter` in implementation
|
||||
|
|
||||
= help: implement the missing item: `fn from_iter<T>(_: T) -> Self where T: std::iter::IntoIterator, std::iter::IntoIterator::Item = A { unimplemented!() }`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0046, E0658.
|
||||
For more information about an error, try `rustc --explain E0046`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue