Closed
Description
Given the following code: [playground]
mod m {
#[macro_export]
macro_rules! nu {
{} => {};
}
#[allow(nonstandard_style)]
pub struct other_item;
pub use self::{nu, other_item as _};
}
The current output is:
error[[E0432]](https://doc.rust-lang.org/nightly/error-index.html#E0432): unresolved import `self::nu`
--> src/lib.rs:10:20
|
10 | 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
|
10 - pub use self::{nu, other_item as _};
10 + pub use self::{nu, other_item as _};
|
If the starting order is reversed, the suggestion puts the macro first in the tree
error[[E0432]](https://doc.rust-lang.org/nightly/error-index.html#E0432): unresolved import `self::nu`
--> src/lib.rs:10:37
|
10 | pub use self::{other_item as _, nu};
| ^^ 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
|
10 - pub use self::{other_item as _, nu};
10 + pub use self::{nu, other_item as _};
|
This is suggesting to change the code to itself 🙃 It needs to move the import into a use crate::
tree; the easy way is to make a new use
statement (and let rustfmt clean that up); the medium way is to find an existing use crate::
context; the hard way is when a use crate::
tree root doesn't already exist (or isn't immediately a tree at that point) determine what import granularity the code is using and match that.
Related: #99694
@rustbot label +D-confusing +D-incorrect
Metadata
Metadata
Assignees
Labels
Area: Messages for errors, warnings, and lintsDiagnostics: Confusing error or lint that should be reworked.Diagnostics: A diagnostic that is giving misleading or incorrect information.Diagnostics: A structured suggestion resulting in incorrect code.Relevant to the compiler team, which will review and decide on the PR/issue.