When suggesting assoc function with type params, include turbofish
This commit is contained in:
parent
f2023ac599
commit
5497ba1690
@ -462,15 +462,18 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
if static_sources.len() == 1 {
|
if static_sources.len() == 1 {
|
||||||
if let SelfSource::MethodCall(expr) = source {
|
if let SelfSource::MethodCall(expr) = source {
|
||||||
err.span_suggestion(expr.span.to(span),
|
err.span_suggestion(
|
||||||
"use associated function syntax instead",
|
expr.span.to(span),
|
||||||
format!("{}::{}",
|
"use associated function syntax instead",
|
||||||
self.ty_to_string(actual),
|
format!("{}::{}", self.ty_to_value_string(actual), item_name),
|
||||||
item_name),
|
Applicability::MachineApplicable,
|
||||||
Applicability::MachineApplicable);
|
);
|
||||||
} else {
|
} else {
|
||||||
err.help(&format!("try with `{}::{}`",
|
err.help(&format!(
|
||||||
self.ty_to_string(actual), item_name));
|
"try with `{}::{}`",
|
||||||
|
self.ty_to_value_string(actual),
|
||||||
|
item_name,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
report_candidates(span, &mut err, static_sources);
|
report_candidates(span, &mut err, static_sources);
|
||||||
@ -579,6 +582,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
None
|
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,
|
fn suggest_use_candidates(&self,
|
||||||
err: &mut DiagnosticBuilder<'_>,
|
err: &mut DiagnosticBuilder<'_>,
|
||||||
mut msg: String,
|
mut msg: String,
|
||||||
|
@ -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>`
|
||||||
|
}
|
@ -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`.
|
Loading…
x
Reference in New Issue
Block a user