Skip to content

Commit

Permalink
test: add test case for disambiguate the associated function diagno…
Browse files Browse the repository at this point in the history
…stic
  • Loading branch information
Young-Flash committed Dec 13, 2023
1 parent 11a0308 commit 57eed05
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
28 changes: 28 additions & 0 deletions tests/ui/methods/disambiguate-associated-function-first-arg.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
struct A {}

fn main() {
let _a = A {};
_a.new(1);
//~^ ERROR no method named `new` found for struct `A` in the current scope
}

trait M {
fn new(_a: i32);
}
impl M for A {
fn new(_a: i32) {}
}

trait N {
fn new(_a: Self, _b: i32);
}
impl N for A {
fn new(_a: Self, _b: i32) {}
}

trait O {
fn new(_a: Self, _b: i32);
}
impl O for A {
fn new(_a: A, _b: i32) {}
}
41 changes: 41 additions & 0 deletions tests/ui/methods/disambiguate-associated-function-first-arg.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
error[E0599]: no method named `new` found for struct `A` in the current scope
--> $DIR/disambiguate-associated-function-first-arg.rs:5:8
|
LL | struct A {}
| -------- method `new` not found for this struct
...
LL | _a.new(1);
| ^^^ this is an associated function, not a method
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
note: candidate #1 is defined in the trait `M`
--> $DIR/disambiguate-associated-function-first-arg.rs:10:5
|
LL | fn new(_a: i32);
| ^^^^^^^^^^^^^^^^
note: candidate #2 is defined in the trait `N`
--> $DIR/disambiguate-associated-function-first-arg.rs:17:5
|
LL | fn new(_a: Self, _b: i32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
note: candidate #3 is defined in the trait `O`
--> $DIR/disambiguate-associated-function-first-arg.rs:24:5
|
LL | fn new(_a: Self, _b: i32);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
help: disambiguate the associated function for candidate #1
|
LL | <A as M>::new(1);
| ~~~~~~~~~~~~~~~~
help: disambiguate the associated function for candidate #2
|
LL | <A as N>::new(_a, 1);
| ~~~~~~~~~~~~~~~~~~~~
help: disambiguate the associated function for candidate #3
|
LL | <A as O>::new(_a, 1);
| ~~~~~~~~~~~~~~~~~~~~

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0599`.

0 comments on commit 57eed05

Please sign in to comment.