mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 01:34:21 +00:00
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 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,
|
||||
|
@ -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…
Reference in New Issue
Block a user