Closed
Conversation
1. Don't warn about anything not used in the prelude which is autmoatically injected, accomplished with a test that the span is equal to a dummy span. 2. Don't warn about unused imports from the injected intrinsic module, accomplished by testing against the name of the imported module 3. If anything is used from a glob import, don't warn about the glob import. 4. If an import imports more than one thing, and none of them are used, only issue a warning once Also updated the unused-imports-warn test to have stricter requirements on error messages.
bors
added a commit
that referenced
this pull request
Feb 7, 2013
The first commit message has most of the comments, but this pull request basically fixes a lot of issues surrounding the `unused_imports` warning/deny attribute. Before this patch there were these problems: 1. Unused imports from `prelude.rs` were warned about with dummy spans, leading to a large number of confusing warnings. 2. Unused imports from `intrinsic.rs` were warned about with the file `<intrinsic>` which couldn't be forced to go away 3. Methods used from imported traites (like `io::WriterUtil`) resulted in an unused warning of the import even though it was used. 4. If one `use` statement imported N modules, M of which weren't used, M warning statements were issued. 5. If a glob import statement was used, each public export of the target module which wasn't used had a warning issued. This patch deals with all these cases by doing: 1. Ignore unused imports from `prelude.rs` (indicated by a dummy span of 0) 2. Ignore unused imports from `intrinsic.rs` (test on the imported module name, is there a better way?) 3. Track when imported modules are used as candidates for methods, and just assume they're used. This may not end up being the actual case, but in theory not warning about an unused thing is worse than warning about a used thing. 4. Only issue one warning statement 5. Only issue one warning statement. This is the first time I've edited the compiler itself, and I tried to keep up with the style around, but I may have missed something here or there...
RalfJung
added a commit
to RalfJung/rust
that referenced
this pull request
Jan 4, 2026
add check_only feature for faster check builds
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The first commit message has most of the comments, but this pull request basically fixes a lot of issues surrounding the
unused_importswarning/deny attribute.Before this patch there were these problems:
prelude.rswere warned about with dummy spans, leading to a large number of confusing warnings.intrinsic.rswere warned about with the file<intrinsic>which couldn't be forced to go awayio::WriterUtil) resulted in an unused warning of the import even though it was used.usestatement imported N modules, M of which weren't used, M warning statements were issued.This patch deals with all these cases by doing:
prelude.rs(indicated by a dummy span of 0)intrinsic.rs(test on the imported module name, is there a better way?)This is the first time I've edited the compiler itself, and I tried to keep up with the style around, but I may have missed something here or there...