Suggest similarly named assoc items in trait impls
Previously, the compiler didn't suggest similarly named associated items unlike we do in many situations. This patch adds such diagnostics for associated functions, types and constants.
This commit is contained in:
parent
60fe8b3a65
commit
cef736f8a0
8 changed files with 216 additions and 18 deletions
|
|
@ -2,7 +2,10 @@ error[E0407]: method `b` is not a member of trait `Foo`
|
|||
--> $DIR/E0407.rs:9:5
|
||||
|
|
||||
LL | fn b() {}
|
||||
| ^^^^^^^^^ not a member of trait `Foo`
|
||||
| ^^^-^^^^^
|
||||
| | |
|
||||
| | help: there is an associated function with a similar name: `a`
|
||||
| not a member of trait `Foo`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@ error[E0407]: method `method` is not a member of trait `Tr`
|
|||
--> $DIR/assoc_item_ctxt.rs:35:13
|
||||
|
|
||||
LL | fn method() {}
|
||||
| ^^^^^^^^^^^^^^ not a member of trait `Tr`
|
||||
| ^^^------^^^^^
|
||||
| | |
|
||||
| | help: there is an associated function with a similar name: `method`
|
||||
| not a member of trait `Tr`
|
||||
...
|
||||
LL | mac_trait_impl!();
|
||||
| ------------------ in this macro invocation
|
||||
|
|
|
|||
48
src/test/ui/suggestions/suggest-trait-items.rs
Normal file
48
src/test/ui/suggestions/suggest-trait-items.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
trait Foo {
|
||||
type Type;
|
||||
|
||||
fn foo();
|
||||
fn bar();
|
||||
fn qux();
|
||||
}
|
||||
|
||||
struct A;
|
||||
|
||||
impl Foo for A {
|
||||
//~^ ERROR not all trait items implemented
|
||||
type Typ = ();
|
||||
//~^ ERROR type `Typ` is not a member of trait
|
||||
//~| HELP there is an associated type with a similar name
|
||||
|
||||
fn fooo() {}
|
||||
//~^ ERROR method `fooo` is not a member of trait
|
||||
//~| HELP there is an associated function with a similar name
|
||||
|
||||
fn barr() {}
|
||||
//~^ ERROR method `barr` is not a member of trait
|
||||
//~| HELP there is an associated function with a similar name
|
||||
|
||||
fn quux() {}
|
||||
//~^ ERROR method `quux` is not a member of trait
|
||||
//~| HELP there is an associated function with a similar name
|
||||
}
|
||||
//~^ HELP implement the missing item
|
||||
//~| HELP implement the missing item
|
||||
//~| HELP implement the missing item
|
||||
//~| HELP implement the missing item
|
||||
|
||||
trait Bar {
|
||||
const Const: i32;
|
||||
}
|
||||
|
||||
struct B;
|
||||
|
||||
impl Bar for B {
|
||||
//~^ ERROR not all trait items implemented
|
||||
const Cnst: i32 = 0;
|
||||
//~^ ERROR const `Cnst` is not a member of trait
|
||||
//~| HELP there is an associated constant with a similar name
|
||||
}
|
||||
//~^ HELP implement the missing item
|
||||
|
||||
fn main() {}
|
||||
74
src/test/ui/suggestions/suggest-trait-items.stderr
Normal file
74
src/test/ui/suggestions/suggest-trait-items.stderr
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
error[E0437]: type `Typ` is not a member of trait `Foo`
|
||||
--> $DIR/suggest-trait-items.rs:13:5
|
||||
|
|
||||
LL | type Typ = ();
|
||||
| ^^^^^---^^^^^^
|
||||
| | |
|
||||
| | help: there is an associated type with a similar name: `Type`
|
||||
| not a member of trait `Foo`
|
||||
|
||||
error[E0407]: method `fooo` is not a member of trait `Foo`
|
||||
--> $DIR/suggest-trait-items.rs:17:5
|
||||
|
|
||||
LL | fn fooo() {}
|
||||
| ^^^----^^^^^
|
||||
| | |
|
||||
| | help: there is an associated function with a similar name: `foo`
|
||||
| not a member of trait `Foo`
|
||||
|
||||
error[E0407]: method `barr` is not a member of trait `Foo`
|
||||
--> $DIR/suggest-trait-items.rs:21:5
|
||||
|
|
||||
LL | fn barr() {}
|
||||
| ^^^----^^^^^
|
||||
| | |
|
||||
| | help: there is an associated function with a similar name: `bar`
|
||||
| not a member of trait `Foo`
|
||||
|
||||
error[E0407]: method `quux` is not a member of trait `Foo`
|
||||
--> $DIR/suggest-trait-items.rs:25:5
|
||||
|
|
||||
LL | fn quux() {}
|
||||
| ^^^----^^^^^
|
||||
| | |
|
||||
| | help: there is an associated function with a similar name: `qux`
|
||||
| not a member of trait `Foo`
|
||||
|
||||
error[E0438]: const `Cnst` is not a member of trait `Bar`
|
||||
--> $DIR/suggest-trait-items.rs:42:5
|
||||
|
|
||||
LL | const Cnst: i32 = 0;
|
||||
| ^^^^^^----^^^^^^^^^^
|
||||
| | |
|
||||
| | help: there is an associated constant with a similar name: `Const`
|
||||
| not a member of trait `Bar`
|
||||
|
||||
error[E0046]: not all trait items implemented, missing: `Type`, `foo`, `bar`, `qux`
|
||||
--> $DIR/suggest-trait-items.rs:11:1
|
||||
|
|
||||
LL | type Type;
|
||||
| ---------- `Type` from trait
|
||||
LL |
|
||||
LL | fn foo();
|
||||
| --------- `foo` from trait
|
||||
LL | fn bar();
|
||||
| --------- `bar` from trait
|
||||
LL | fn qux();
|
||||
| --------- `qux` from trait
|
||||
...
|
||||
LL | impl Foo for A {
|
||||
| ^^^^^^^^^^^^^^ missing `Type`, `foo`, `bar`, `qux` in implementation
|
||||
|
||||
error[E0046]: not all trait items implemented, missing: `Const`
|
||||
--> $DIR/suggest-trait-items.rs:40:1
|
||||
|
|
||||
LL | const Const: i32;
|
||||
| ----------------- `Const` from trait
|
||||
...
|
||||
LL | impl Bar for B {
|
||||
| ^^^^^^^^^^^^^^ missing `Const` in implementation
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0046, E0407, E0437, E0438.
|
||||
For more information about an error, try `rustc --explain E0046`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue