mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #104347 - notriddle:notriddle/import-macro-from-self-fixup, r=TaKO8Ki
diagnostics: suggest changing `s@self::{macro}@::macro` for exported Fixes #99695
This commit is contained in:
commit
bf75f8177b
@ -2125,9 +2125,15 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
|
||||
|
||||
let source_map = self.r.session.source_map();
|
||||
|
||||
// Make sure this is actually crate-relative.
|
||||
let is_definitely_crate = import
|
||||
.module_path
|
||||
.first()
|
||||
.map_or(false, |f| f.ident.name != kw::SelfLower && f.ident.name != kw::Super);
|
||||
|
||||
// Add the import to the start, with a `{` if required.
|
||||
let start_point = source_map.start_point(after_crate_name);
|
||||
if let Ok(start_snippet) = source_map.span_to_snippet(start_point) {
|
||||
if is_definitely_crate && let Ok(start_snippet) = source_map.span_to_snippet(start_point) {
|
||||
corrections.push((
|
||||
start_point,
|
||||
if has_nested {
|
||||
@ -2139,11 +2145,17 @@ impl<'a, 'b> ImportResolver<'a, 'b> {
|
||||
format!("{{{}, {}", import_snippet, start_snippet)
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
// Add a `};` to the end if nested, matching the `{` added at the start.
|
||||
if !has_nested {
|
||||
corrections.push((source_map.end_point(after_crate_name), "};".to_string()));
|
||||
// Add a `};` to the end if nested, matching the `{` added at the start.
|
||||
if !has_nested {
|
||||
corrections.push((source_map.end_point(after_crate_name), "};".to_string()));
|
||||
}
|
||||
} else {
|
||||
// If the root import is module-relative, add the import separately
|
||||
corrections.push((
|
||||
import.use_span.shrink_to_lo(),
|
||||
format!("use {module_name}::{import_snippet};\n"),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
20
tests/ui/imports/issue-99695-b.fixed
Normal file
20
tests/ui/imports/issue-99695-b.fixed
Normal file
@ -0,0 +1,20 @@
|
||||
// run-rustfix
|
||||
#![allow(unused, nonstandard_style)]
|
||||
mod m {
|
||||
|
||||
mod p {
|
||||
#[macro_export]
|
||||
macro_rules! nu {
|
||||
{} => {};
|
||||
}
|
||||
|
||||
pub struct other_item;
|
||||
}
|
||||
|
||||
use ::nu;
|
||||
pub use self::p::{other_item as _};
|
||||
//~^ ERROR unresolved import `self::p::nu` [E0432]
|
||||
//~| HELP a macro with this name exists at the root of the crate
|
||||
}
|
||||
|
||||
fn main() {}
|
19
tests/ui/imports/issue-99695-b.rs
Normal file
19
tests/ui/imports/issue-99695-b.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// run-rustfix
|
||||
#![allow(unused, nonstandard_style)]
|
||||
mod m {
|
||||
|
||||
mod p {
|
||||
#[macro_export]
|
||||
macro_rules! nu {
|
||||
{} => {};
|
||||
}
|
||||
|
||||
pub struct other_item;
|
||||
}
|
||||
|
||||
pub use self::p::{nu, other_item as _};
|
||||
//~^ ERROR unresolved import `self::p::nu` [E0432]
|
||||
//~| HELP a macro with this name exists at the root of the crate
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/ui/imports/issue-99695-b.stderr
Normal file
16
tests/ui/imports/issue-99695-b.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0432]: unresolved import `self::p::nu`
|
||||
--> $DIR/issue-99695-b.rs:14:23
|
||||
|
|
||||
LL | pub use self::p::{nu, other_item as _};
|
||||
| ^^ no `nu` in `m::p`
|
||||
|
|
||||
= note: this could be because a macro annotated with `#[macro_export]` will be exported at the root of the crate instead of the module where it is defined
|
||||
help: a macro with this name exists at the root of the crate
|
||||
|
|
||||
LL ~ use ::nu;
|
||||
LL ~ pub use self::p::{other_item as _};
|
||||
|
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0432`.
|
17
tests/ui/imports/issue-99695.fixed
Normal file
17
tests/ui/imports/issue-99695.fixed
Normal file
@ -0,0 +1,17 @@
|
||||
// run-rustfix
|
||||
#![allow(unused, nonstandard_style)]
|
||||
mod m {
|
||||
#[macro_export]
|
||||
macro_rules! nu {
|
||||
{} => {};
|
||||
}
|
||||
|
||||
pub struct other_item;
|
||||
|
||||
use ::nu;
|
||||
pub use self::{other_item as _};
|
||||
//~^ ERROR unresolved import `self::nu` [E0432]
|
||||
//~| HELP a macro with this name exists at the root of the crate
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/ui/imports/issue-99695.rs
Normal file
16
tests/ui/imports/issue-99695.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// run-rustfix
|
||||
#![allow(unused, nonstandard_style)]
|
||||
mod m {
|
||||
#[macro_export]
|
||||
macro_rules! nu {
|
||||
{} => {};
|
||||
}
|
||||
|
||||
pub struct other_item;
|
||||
|
||||
pub use self::{nu, other_item as _};
|
||||
//~^ ERROR unresolved import `self::nu` [E0432]
|
||||
//~| HELP a macro with this name exists at the root of the crate
|
||||
}
|
||||
|
||||
fn main() {}
|
16
tests/ui/imports/issue-99695.stderr
Normal file
16
tests/ui/imports/issue-99695.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0432]: unresolved import `self::nu`
|
||||
--> $DIR/issue-99695.rs:11:20
|
||||
|
|
||||
LL | pub use self::{nu, other_item as _};
|
||||
| ^^ no `nu` in `m`
|
||||
|
|
||||
= note: this could be because a macro annotated with `#[macro_export]` will be exported at the root of the crate instead of the module where it is defined
|
||||
help: a macro with this name exists at the root of the crate
|
||||
|
|
||||
LL ~ use ::nu;
|
||||
LL ~ pub use self::{other_item as _};
|
||||
|
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0432`.
|
Loading…
Reference in New Issue
Block a user