parent
0fd7ce99b0
commit
c4a4926083
3 changed files with 60 additions and 11 deletions
|
@ -224,14 +224,21 @@ impl<'a: 'ast, 'ast, 'tcx> LateResolutionVisitor<'a, '_, 'ast, 'tcx> {
|
||||||
&& let FnKind::Fn(_, _, sig, ..) = fn_kind
|
&& let FnKind::Fn(_, _, sig, ..) = fn_kind
|
||||||
&& let Some(items) = self.diagnostic_metadata.current_impl_items
|
&& let Some(items) = self.diagnostic_metadata.current_impl_items
|
||||||
&& let Some(item) = items.iter().find(|i| {
|
&& let Some(item) = items.iter().find(|i| {
|
||||||
if let AssocItemKind::Fn(..) | AssocItemKind::Const(..) = &i.kind
|
if i.ident.name == item_str.name
|
||||||
&& i.ident.name == item_str.name
|
// Don't suggest if the item is in Fn signature arguments (#112590).
|
||||||
// don't suggest if the item is in Fn signature arguments
|
|
||||||
// issue #112590
|
|
||||||
&& !sig.span.contains(item_span)
|
&& !sig.span.contains(item_span)
|
||||||
{
|
{
|
||||||
debug!(?item_str.name);
|
debug!(?item_str.name);
|
||||||
return true
|
return match &i.kind {
|
||||||
|
AssocItemKind::Fn(fn_)
|
||||||
|
if !sig.decl.has_self() && fn_.sig.decl.has_self() => {
|
||||||
|
// Ensure that we only suggest `self.` if `self` is available,
|
||||||
|
// you can't call `fn foo(&self)` from `fn bar()` (#115992).
|
||||||
|
false
|
||||||
|
}
|
||||||
|
AssocItemKind::Fn(_) | AssocItemKind::Const(..) => true,
|
||||||
|
_ => false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
})
|
})
|
||||||
|
|
|
@ -17,4 +17,12 @@ impl S {
|
||||||
bar(); //~ ERROR cannot find function `bar` in this scope
|
bar(); //~ ERROR cannot find function `bar` in this scope
|
||||||
baz(2, 3); //~ ERROR cannot find function `baz` in this scope
|
baz(2, 3); //~ ERROR cannot find function `baz` in this scope
|
||||||
}
|
}
|
||||||
|
fn d(&self) {
|
||||||
|
fn c() {
|
||||||
|
foo(); //~ ERROR cannot find function `foo` in this scope
|
||||||
|
}
|
||||||
|
foo(); //~ ERROR cannot find function `foo` in this scope
|
||||||
|
bar(); //~ ERROR cannot find function `bar` in this scope
|
||||||
|
baz(2, 3); //~ ERROR cannot find function `baz` in this scope
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,6 @@ error[E0425]: cannot find function `bar` in this scope
|
||||||
|
|
|
|
||||||
LL | bar();
|
LL | bar();
|
||||||
| ^^^ not found in this scope
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
help: consider using the associated function
|
|
||||||
|
|
|
||||||
LL | self.bar();
|
|
||||||
| +++++
|
|
||||||
|
|
||||||
error[E0425]: cannot find function `baz` in this scope
|
error[E0425]: cannot find function `baz` in this scope
|
||||||
--> $DIR/assoc_fn_without_self.rs:18:9
|
--> $DIR/assoc_fn_without_self.rs:18:9
|
||||||
|
@ -37,6 +32,45 @@ error[E0425]: cannot find function `foo` in this scope
|
||||||
LL | foo();
|
LL | foo();
|
||||||
| ^^^ not found in this scope
|
| ^^^ not found in this scope
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error[E0425]: cannot find function `foo` in this scope
|
||||||
|
--> $DIR/assoc_fn_without_self.rs:24:9
|
||||||
|
|
|
||||||
|
LL | foo();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider using the associated function
|
||||||
|
|
|
||||||
|
LL | Self::foo();
|
||||||
|
| ++++++
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `bar` in this scope
|
||||||
|
--> $DIR/assoc_fn_without_self.rs:25:9
|
||||||
|
|
|
||||||
|
LL | bar();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider using the associated function
|
||||||
|
|
|
||||||
|
LL | self.bar();
|
||||||
|
| +++++
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `baz` in this scope
|
||||||
|
--> $DIR/assoc_fn_without_self.rs:26:9
|
||||||
|
|
|
||||||
|
LL | baz(2, 3);
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
|
||||||
|
help: consider using the associated function
|
||||||
|
|
|
||||||
|
LL | Self::baz(2, 3);
|
||||||
|
| ++++++
|
||||||
|
|
||||||
|
error[E0425]: cannot find function `foo` in this scope
|
||||||
|
--> $DIR/assoc_fn_without_self.rs:22:13
|
||||||
|
|
|
||||||
|
LL | foo();
|
||||||
|
| ^^^ not found in this scope
|
||||||
|
|
||||||
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0425`.
|
For more information about this error, try `rustc --explain E0425`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue