diff options
| author | Michael Goulet <michael@errs.io> | 2022-06-19 19:24:28 -0700 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-06-19 19:43:40 -0700 |
| commit | 018c319b211eb7e42f1c8afabdcce5b5272c0614 (patch) | |
| tree | eda145581c90a88210f6de94829a49582fb55442 /compiler/rustc_resolve | |
| parent | 611e7b9cea2b982b63de7f6697b2a9079b0bf188 (diff) | |
| download | rust-018c319b211eb7e42f1c8afabdcce5b5272c0614.tar.gz rust-018c319b211eb7e42f1c8afabdcce5b5272c0614.zip | |
Mention what item is using an invalid `Self` type
Diffstat (limited to 'compiler/rustc_resolve')
| -rw-r--r-- | compiler/rustc_resolve/src/diagnostics.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_resolve/src/late/diagnostics.rs | 19 |
2 files changed, 21 insertions, 0 deletions
diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index e7c8886f054..86dbcba6c0d 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -1914,6 +1914,8 @@ impl<'a> Resolver<'a> { }; } (msg, None) + } else if ident.name == kw::SelfUpper { + ("`Self` is only available in impls, traits, and type definitions".to_string(), None) } else if ident.name.as_str().chars().next().map_or(false, |c| c.is_ascii_uppercase()) { // Check whether the name refers to an item in the value namespace. let binding = if let Some(ribs) = ribs { diff --git a/compiler/rustc_resolve/src/late/diagnostics.rs b/compiler/rustc_resolve/src/late/diagnostics.rs index 1a99bff610a..6b0b83d2cb5 100644 --- a/compiler/rustc_resolve/src/late/diagnostics.rs +++ b/compiler/rustc_resolve/src/late/diagnostics.rs @@ -332,6 +332,16 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> { span, "`Self` is only available in impls, traits, and type definitions".to_string(), ); + if let Some(item_kind) = self.diagnostic_metadata.current_item { + err.span_label( + item_kind.ident.span, + format!( + "`Self` not allowed in {} {}", + item_kind.kind.article(), + item_kind.kind.descr() + ), + ); + } return (err, Vec::new()); } if is_self_value(path, ns) { @@ -389,6 +399,15 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> { ); } } + } else if let Some(item_kind) = self.diagnostic_metadata.current_item { + err.span_label( + item_kind.ident.span, + format!( + "`self` not allowed in {} {}", + item_kind.kind.article(), + item_kind.kind.descr() + ), + ); } return (err, Vec::new()); } |
