When suggesting assoc function with type params, include turbofish

This commit is contained in:
Esteban Küber 2019-10-05 16:11:36 -07:00
parent f2023ac599
commit 5497ba1690
3 changed files with 52 additions and 8 deletions

View File

@ -462,15 +462,18 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
}
if static_sources.len() == 1 {
if let SelfSource::MethodCall(expr) = source {
err.span_suggestion(expr.span.to(span),
"use associated function syntax instead",
format!("{}::{}",
self.ty_to_string(actual),
item_name),
Applicability::MachineApplicable);
err.span_suggestion(
expr.span.to(span),
"use associated function syntax instead",
format!("{}::{}", self.ty_to_value_string(actual), item_name),
Applicability::MachineApplicable,
);
} else {
err.help(&format!("try with `{}::{}`",
self.ty_to_string(actual), item_name));
err.help(&format!(
"try with `{}::{}`",
self.ty_to_value_string(actual),
item_name,
));
}
report_candidates(span, &mut err, static_sources);
@ -579,6 +582,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
None
}
/// Print out the type for use in value namespace.
fn ty_to_value_string(&self, ty: Ty<'tcx>) -> String {
match ty.kind {
ty::Adt(def, substs) => format!("{}", ty::Instance::new(def.did, substs)),
_ => self.ty_to_string(ty),
}
}
fn suggest_use_candidates(&self,
err: &mut DiagnosticBuilder<'_>,
mut msg: String,

View File

@ -0,0 +1,11 @@
struct GenericAssocMethod<T>(T);
impl<T> GenericAssocMethod<T> {
fn default_hello() {}
}
fn main() {
let x = GenericAssocMethod(33i32);
x.default_hello();
//~^ ERROR no method named `default_hello` found for type `GenericAssocMethod<i32>`
}

View File

@ -0,0 +1,22 @@
error[E0599]: no method named `default_hello` found for type `GenericAssocMethod<i32>` in the current scope
--> $DIR/suggest-assoc-fn-call-with-turbofish.rs:9:7
|
LL | struct GenericAssocMethod<T>(T);
| -------------------------------- method `default_hello` not found for this
...
LL | x.default_hello();
| --^^^^^^^^^^^^^
| | |
| | this is an associated function, not a method
| help: use associated function syntax instead: `GenericAssocMethod::<i32>::default_hello`
|
= note: found the following associated functions; to be used as methods, functions must have a `self` parameter
note: the candidate is defined in an impl for the type `GenericAssocMethod<_>`
--> $DIR/suggest-assoc-fn-call-with-turbofish.rs:4:5
|
LL | fn default_hello() {}
| ^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0599`.