fix: dedup static_candidates before report

This commit is contained in:
bohan 2023-05-23 22:00:07 +08:00
parent 1221e43bdf
commit f78369b3af
3 changed files with 38 additions and 0 deletions

View File

@ -473,6 +473,12 @@ pub fn report_no_match_method_error(
let mut custom_span_label = false;
let static_candidates = &mut no_match_data.static_candidates;
// `static_candidates` may have same candidates appended by
// inherent and extension, which may result in incorrect
// diagnostic.
static_candidates.dedup();
if !static_candidates.is_empty() {
err.note(
"found the following associated functions; to be used as methods, \

View File

@ -0,0 +1,11 @@
trait Cat {
fn nya() {}
}
fn uwu<T: Cat>(c: T) {
c.nya();
//~^ ERROR no method named `nya` found for type parameter `T` in the current scope
//~| Suggestion T::nya()
}
fn main() {}

View File

@ -0,0 +1,21 @@
error[E0599]: no method named `nya` found for type parameter `T` in the current scope
--> $DIR/issue-103646.rs:6:7
|
LL | fn uwu<T: Cat>(c: T) {
| - method `nya` not found for this type parameter
LL | c.nya();
| --^^^--
| | |
| | this is an associated function, not a method
| help: use associated function syntax instead: `T::nya()`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
note: the candidate is defined in the trait `Cat`
--> $DIR/issue-103646.rs:2:5
|
LL | fn nya() {}
| ^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0599`.