about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-11-13 17:37:37 +0100
committerGitHub <noreply@github.com>2022-11-13 17:37:37 +0100
commit5c764da9b05cd78d0b89d5b4f7b6b401fc773571 (patch)
tree1efd02c8512a81cbd42f67eb3fd491de3224aa32
parenta1b0702ea5efd2f1bacc2bb5cfac7b82abc58bc5 (diff)
parentc7b28913151927e8fdda3878d0188ab02b767eae (diff)
downloadrust-5c764da9b05cd78d0b89d5b4f7b6b401fc773571.tar.gz
rust-5c764da9b05cd78d0b89d5b4f7b6b401fc773571.zip
Rollup merge of #104315 - SparkyPotato:fix-104276, r=cjgillot
Improve spans with `use crate::{self}`

Fixes #104276.

The error becomes:
```
error: crate root imports need to be explicitly named: `use crate as name;`
 --> src/lib.rs.rs:1:13
  |
1 | use crate::{self};
  |             ^^^^

warning: unused import: `self`
 --> src/lib.rs:1:13
  |
1 | use crate::{self};
  |             ^^^^
  |
  = note: `#[warn(unused_imports)]` on by default
```
-rw-r--r--compiler/rustc_resolve/src/build_reduced_graph.rs4
-rw-r--r--src/test/ui/use/use-crate-self.rs4
-rw-r--r--src/test/ui/use/use-crate-self.stderr8
3 files changed, 15 insertions, 1 deletions
diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs
index 423c5727533..e7e419c9b42 100644
--- a/compiler/rustc_resolve/src/build_reduced_graph.rs
+++ b/compiler/rustc_resolve/src/build_reduced_graph.rs
@@ -469,9 +469,11 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
                         }
 
                         // Replace `use foo::{ self };` with `use foo;`
+                        let self_span = source.ident.span;
                         source = module_path.pop().unwrap();
                         if rename.is_none() {
-                            ident = source.ident;
+                            // Keep the span of `self`, but the name of `foo`
+                            ident = Ident { name: source.ident.name, span: self_span };
                         }
                     }
                 } else {
diff --git a/src/test/ui/use/use-crate-self.rs b/src/test/ui/use/use-crate-self.rs
new file mode 100644
index 00000000000..65ab948147c
--- /dev/null
+++ b/src/test/ui/use/use-crate-self.rs
@@ -0,0 +1,4 @@
+use crate::{self};
+        //~^ ERROR crate root imports need to be explicitly named: `use crate as name;`
+
+fn main() {}
diff --git a/src/test/ui/use/use-crate-self.stderr b/src/test/ui/use/use-crate-self.stderr
new file mode 100644
index 00000000000..dd4036bfff4
--- /dev/null
+++ b/src/test/ui/use/use-crate-self.stderr
@@ -0,0 +1,8 @@
+error: crate root imports need to be explicitly named: `use crate as name;`
+  --> $DIR/use-crate-self.rs:1:13
+   |
+LL | use crate::{self};
+   |             ^^^^
+
+error: aborting due to previous error
+