diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2023-05-20 12:21:00 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-20 12:21:00 +0530 |
| commit | 13f3585dc6ad4332a171b3ff9a6a3c933241dbb0 (patch) | |
| tree | 87b88231a3477ea4d78ade4d8059ab7a6a668a02 | |
| parent | 1397827f25b28fb2842e5d708c075a66ba60fde7 (diff) | |
| parent | eaf47a30cb67bf1e802ee29bb8021b19a4df6095 (diff) | |
| download | rust-13f3585dc6ad4332a171b3ff9a6a3c933241dbb0.tar.gz rust-13f3585dc6ad4332a171b3ff9a6a3c933241dbb0.zip | |
Rollup merge of #111652 - clubby789:self-import-improvement, r=compiler-errors
Better diagnostic for `use Self::..` Fixes #111627 cc `@petrochenkov,` you might have thoughts on a better way to handle this (https://github.com/rust-lang/rust/issues/63720#issuecomment-591597466)
| -rw-r--r-- | compiler/rustc_resolve/src/diagnostics.rs | 12 | ||||
| -rw-r--r-- | tests/ui/use/use-self-type.stderr | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 3ed7580af05..ed0a792d387 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -1832,7 +1832,17 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { } (msg, None) } else if ident.name == kw::SelfUpper { - ("`Self` is only available in impls, traits, and type definitions".to_string(), None) + // As mentioned above, `opt_ns` being `None` indicates a module path in import. + // We can use this to improve a confusing error for, e.g. `use Self::Variant` in an + // impl + if opt_ns.is_none() { + ("`Self` cannot be used in imports".to_string(), None) + } else { + ( + "`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/tests/ui/use/use-self-type.stderr b/tests/ui/use/use-self-type.stderr index e6153941151..3da04a851f6 100644 --- a/tests/ui/use/use-self-type.stderr +++ b/tests/ui/use/use-self-type.stderr @@ -8,7 +8,7 @@ error[E0432]: unresolved import `Self` --> $DIR/use-self-type.rs:6:13 | LL | use Self::f; - | ^^^^ `Self` is only available in impls, traits, and type definitions + | ^^^^ `Self` cannot be used in imports error: aborting due to 2 previous errors |
