Skip to content

Commit

Permalink
Avoid suggesting self in visibility spec
Browse files Browse the repository at this point in the history
Co-authored-by: Esteban Kuber <estebank@users.noreply.github.com>
  • Loading branch information
bugadani and estebank committed Dec 12, 2021
1 parent b9a37ad commit f3a08fd
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 1 deletion.
7 changes: 6 additions & 1 deletion compiler/rustc_resolve/src/late/diagnostics.rs
Expand Up @@ -298,11 +298,16 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
.get(0)
.map(|p| (p.span.shrink_to_lo(), "&self, "))
.unwrap_or_else(|| {
// Try to look for the "(" after the function name, if possible.
// This avoids placing the suggestion into the visibility specifier.
let span = fn_kind
.ident()
.map_or(*span, |ident| span.with_lo(ident.span.hi()));
(
self.r
.session
.source_map()
.span_through_char(*span, '(')
.span_through_char(span, '(')
.shrink_to_hi(),
"&self",
)
Expand Down
15 changes: 15 additions & 0 deletions src/test/ui/suggestions/suggest-add-self.rs
@@ -0,0 +1,15 @@
struct X(i32);

impl X {
pub(crate) fn f() {
self.0
//~^ ERROR expected value, found module `self`
}

pub fn g() {
self.0
//~^ ERROR expected value, found module `self`
}
}

fn main() {}
29 changes: 29 additions & 0 deletions src/test/ui/suggestions/suggest-add-self.stderr
@@ -0,0 +1,29 @@
error[E0424]: expected value, found module `self`
--> $DIR/suggest-add-self.rs:5:9
|
LL | pub(crate) fn f() {
| - this function doesn't have a `self` parameter
LL | self.0
| ^^^^ `self` value is a keyword only available in methods with a `self` parameter
|
help: add a `self` receiver parameter to make the associated `fn` a method
|
LL | pub(crate) fn f(&self) {
| +++++

error[E0424]: expected value, found module `self`
--> $DIR/suggest-add-self.rs:10:9
|
LL | pub fn g() {
| - this function doesn't have a `self` parameter
LL | self.0
| ^^^^ `self` value is a keyword only available in methods with a `self` parameter
|
help: add a `self` receiver parameter to make the associated `fn` a method
|
LL | pub fn g(&self) {
| +++++

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0424`.

0 comments on commit f3a08fd

Please sign in to comment.