Rollup merge of #111872 - bvanjoi:fix-103646, r=cjgillot

fix: dedup `static_candidates` before report

Fixes https://github.com/rust-lang/rust/issues/103646

`record_static_candidate` had been executed twice, resulting in the presence of two identical `CandidateSource::Trait(Cat)`  in static_candidates. This PR aims to deduplication the `static_candidates` list, allowing it to execute `suggest_associated_call_syntax` properly.
This commit is contained in:
Nilstrieb 2023-05-30 12:57:39 +02:00 committed by GitHub
commit 0c9f87c986
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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`.