未验证 提交 48b5d110 编写于 作者: G Guillaume Gomez 提交者: GitHub

Rollup merge of #89255 - FabianWolff:issue-88806, r=cjgillot

Fix incorrect disambiguation suggestion for associated items

Fixes #88806. I have not added a new test case, because the erroneous behavior is already present in existing test cases.
...@@ -176,6 +176,7 @@ pub fn report_method_error( ...@@ -176,6 +176,7 @@ pub fn report_method_error(
sugg_span, sugg_span,
idx, idx,
self.tcx.sess.source_map(), self.tcx.sess.source_map(),
item.fn_has_self_parameter,
); );
} }
} }
...@@ -218,6 +219,7 @@ pub fn report_method_error( ...@@ -218,6 +219,7 @@ pub fn report_method_error(
sugg_span, sugg_span,
idx, idx,
self.tcx.sess.source_map(), self.tcx.sess.source_map(),
item.fn_has_self_parameter,
); );
} }
} }
...@@ -1736,6 +1738,7 @@ fn print_disambiguation_help( ...@@ -1736,6 +1738,7 @@ fn print_disambiguation_help(
span: Span, span: Span,
candidate: Option<usize>, candidate: Option<usize>,
source_map: &source_map::SourceMap, source_map: &source_map::SourceMap,
fn_has_self_parameter: bool,
) { ) {
let mut applicability = Applicability::MachineApplicable; let mut applicability = Applicability::MachineApplicable;
let (span, sugg) = if let (ty::AssocKind::Fn, Some(args)) = (kind, args) { let (span, sugg) = if let (ty::AssocKind::Fn, Some(args)) = (kind, args) {
...@@ -1754,9 +1757,14 @@ fn print_disambiguation_help( ...@@ -1754,9 +1757,14 @@ fn print_disambiguation_help(
.collect::<Vec<_>>() .collect::<Vec<_>>()
.join(", "), .join(", "),
); );
let trait_name = if !fn_has_self_parameter {
format!("<{} as {}>", rcvr_ty, trait_name)
} else {
trait_name
};
(span, format!("{}::{}{}", trait_name, item_name, args)) (span, format!("{}::{}{}", trait_name, item_name, args))
} else { } else {
(span.with_hi(item_name.span.lo()), format!("{}::", trait_name)) (span.with_hi(item_name.span.lo()), format!("<{} as {}>::", rcvr_ty, trait_name))
}; };
err.span_suggestion_verbose( err.span_suggestion_verbose(
span, span,
......
...@@ -16,12 +16,12 @@ LL | const ID: i32 = 3; ...@@ -16,12 +16,12 @@ LL | const ID: i32 = 3;
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
help: disambiguate the associated constant for candidate #1 help: disambiguate the associated constant for candidate #1
| |
LL | const X: i32 = Foo::ID; LL | const X: i32 = <i32 as Foo>::ID;
| ~~~~~ | ~~~~~~~~~~~~~~
help: disambiguate the associated constant for candidate #2 help: disambiguate the associated constant for candidate #2
| |
LL | const X: i32 = Bar::ID; LL | const X: i32 = <i32 as Bar>::ID;
| ~~~~~ | ~~~~~~~~~~~~~~
error: aborting due to previous error error: aborting due to previous error
......
...@@ -16,12 +16,12 @@ LL | fn foo() {} ...@@ -16,12 +16,12 @@ LL | fn foo() {}
| ^^^^^^^^ | ^^^^^^^^
help: disambiguate the associated function for candidate #1 help: disambiguate the associated function for candidate #1
| |
LL | Trait1::foo() LL | <Test as Trait1>::foo()
| ~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
help: disambiguate the associated function for candidate #2 help: disambiguate the associated function for candidate #2
| |
LL | Trait2::foo() LL | <Test as Trait2>::foo()
| ~~~~~~~~ | ~~~~~~~~~~~~~~~~~~
error: aborting due to previous error error: aborting due to previous error
......
...@@ -16,12 +16,12 @@ LL | fn foo() {} ...@@ -16,12 +16,12 @@ LL | fn foo() {}
| ^^^^^^^^ | ^^^^^^^^
help: disambiguate the associated function for candidate #1 help: disambiguate the associated function for candidate #1
| |
LL | A::foo(); LL | <AB as A>::foo();
| ~~~ | ~~~~~~~~~~~
help: disambiguate the associated function for candidate #2 help: disambiguate the associated function for candidate #2
| |
LL | B::foo(); LL | <AB as B>::foo();
| ~~~ | ~~~~~~~~~~~
error: aborting due to previous error error: aborting due to previous error
......
...@@ -27,16 +27,16 @@ LL | fn f9(_: usize) -> usize; ...@@ -27,16 +27,16 @@ LL | fn f9(_: usize) -> usize;
candidate #3: `UnusedTrait` candidate #3: `UnusedTrait`
help: disambiguate the associated function for candidate #1 help: disambiguate the associated function for candidate #1
| |
LL | u.f8(42) + CtxtFn::f9(u, 342) + m.fff(42) LL | u.f8(42) + <usize as CtxtFn>::f9(u, 342) + m.fff(42)
| ~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
help: disambiguate the associated function for candidate #2 help: disambiguate the associated function for candidate #2
| |
LL | u.f8(42) + OtherTrait::f9(u, 342) + m.fff(42) LL | u.f8(42) + <usize as OtherTrait>::f9(u, 342) + m.fff(42)
| ~~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
help: disambiguate the associated function for candidate #3 help: disambiguate the associated function for candidate #3
| |
LL | u.f8(42) + UnusedTrait::f9(u, 342) + m.fff(42) LL | u.f8(42) + <usize as UnusedTrait>::f9(u, 342) + m.fff(42)
| ~~~~~~~~~~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error[E0599]: no method named `fff` found for struct `Myisize` in the current scope error[E0599]: no method named `fff` found for struct `Myisize` in the current scope
--> $DIR/issue-7575.rs:62:30 --> $DIR/issue-7575.rs:62:30
...@@ -72,7 +72,7 @@ LL | fn is_str() -> bool { ...@@ -72,7 +72,7 @@ LL | fn is_str() -> bool {
= help: items from traits can only be used if the type parameter is bounded by the trait = help: items from traits can only be used if the type parameter is bounded by the trait
help: disambiguate the associated function for the candidate help: disambiguate the associated function for the candidate
| |
LL | ManyImplTrait::is_str(t) LL | <T as ManyImplTrait>::is_str(t)
| |
error: aborting due to 3 previous errors error: aborting due to 3 previous errors
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册