-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of #89248 - hkmatsumoto:suggest-similarly-named-assoc-it…
…ems, r=estebank Suggest similarly named associated items in trait impls Fix #85942 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.
- Loading branch information
Showing
8 changed files
with
216 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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`. |