rust-lang / rust-lang/rust-clippy
Lint against shadowing the prelude
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
What it does
Lints cases where a use, item declaration, or local binding shadows an item in the Rust prelude.
In the case of a use, it suggests instead using the containing module, i.e. replacing use std::io::Result; with use std::io;
Lint Name
shadow_prelude
Category
style, pedantic, restriction
Advantage
-
Code which redefines well-known names can be confusing to read, especially for beginners, or people who are trying to help a beginner but have only a code excerpt rather than a complete file with
uses visible. (“This return type needs to beResult<(), MyError>.” “I did that, but it says thatResultonly takes 1 generic argument.” “Oh, you must have imported another Result; you need to remove that and change all your usages.”) -
If an author intends to avoid shadowing, they may benefit from the lint catching when e.g. their IDE helpfully inserts an unwanted
use. -
It would also catch when a library author accidentally chooses a name for an item that conflicts with the standard prelude, allowing them to decide whether to reuse the name or choose a new one.
Drawbacks
-
It increases the verbosity of code obeying the restriction.
-
Shadowing
ResultandErrornames is common enough practice that it might be objectionable to enable this lint by default, which limits its utility in the primary use case of helping beginners.
Example
use std::fs::read_to_string;
use std::io::Result;
fn load_config() -> Result<String> {
read_to_string("config.toml")
}
Could be written as:
use std::fs::read_to_string;
use std::io;
fn load_config() -> io::Result<String> {
read_to_string("config.toml")
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the proposed shadow_prelude lint and the supplied examples for use, item declarations, and local bindings. Determine the prelude-shadowing cases and the expected diagnostic or suggestion for each; done means the stated cases are covered and the lint behavior matches the proposal.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100