Use suggestion for assoc fn called like method

When encountering an unexisting method for a given trait where an
associated function has the same name, suggest using the appropriate
syntax, instead of using `help` text.

When only one candidate is found, do not call it "candidate #1", just
call it "the candidate".
This commit is contained in:
Esteban Küber 2018-05-27 13:30:16 -07:00
parent dcb405667c
commit 447d894edf
4 changed files with 51 additions and 24 deletions

View file

@ -22,7 +22,7 @@ LL | ().clone() //~ ERROR no method named `clone` found
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a `use` for it:
candidate #1: `use std::clone::Clone;`
`use std::clone::Clone;`
error: aborting due to 3 previous errors

View file

@ -9,7 +9,7 @@ LL | pub macro m() { ().f() } //~ ERROR no method named `f` found for type `
|
= help: items from traits can only be used if the trait is in scope
= note: the following trait is implemented but not in scope, perhaps add a `use` for it:
candidate #1: `use foo::T;`
`use foo::T;`
error: aborting due to previous error

View file

@ -2,10 +2,11 @@ error[E0599]: no method named `f9` found for type `usize` in the current scope
--> $DIR/issue-7575.rs:74:18
|
LL | u.f8(42) + u.f9(342) + m.fff(42)
| ^^
| --^^
| |
| help: use associated function syntax intead: `usize::f9`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
= help: try with `usize::f9`
note: candidate #1 is defined in the trait `CtxtFn`
--> $DIR/issue-7575.rs:16:5
|
@ -37,11 +38,12 @@ LL | struct Myisize(isize);
| ---------------------- method `fff` not found for this
...
LL | u.f8(42) + u.f9(342) + m.fff(42)
| ^^^
| --^^^
| |
| help: use associated function syntax intead: `Myisize::fff`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
= help: try with `Myisize::fff`
note: candidate #1 is defined in an impl for the type `Myisize`
note: the candidate is defined in an impl for the type `Myisize`
--> $DIR/issue-7575.rs:51:5
|
LL | fn fff(i: isize) -> isize {
@ -51,11 +53,12 @@ error[E0599]: no method named `is_str` found for type `T` in the current scope
--> $DIR/issue-7575.rs:82:7
|
LL | t.is_str()
| ^^^^^^
| --^^^^^^
| |
| help: use associated function syntax intead: `T::is_str`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
= help: try with `T::is_str`
note: candidate #1 is defined in the trait `ManyImplTrait`
note: the candidate is defined in the trait `ManyImplTrait`
--> $DIR/issue-7575.rs:57:5
|
LL | fn is_str() -> bool {