rust-lang / rust-lang/rust-clippy
A lint suggesting `.get(n)` instead of `if n < slice.len() { slice[n] } ...`
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
When recently reviewing new Rust dev code, I saw this pattern, which is a clear dup of the Slice::get. It would be great to catch it. Note that in an ideal case, we shouldn't catch this specific case, but instead catch any kind of stdlib function patterns (ASTs), and suggest replacements (this might generate some false positives though)
Advantage
- shorter, more readable code
- clearer intent
Drawbacks
No response
Example
pub static GLOBAL_ARRAY: [&str; ...] = [...];
fn get_item(index: usize) -> Option<&'static str> {
if index < GLOBAL_ARRAY.len() {
Some(GLOBAL_ARRAY[index])
} else {
None
}
}
Could be written as:
fn get_item(index: usize) -> Option<&'static str> {
GLOBAL_ARRAY.get(index)
}
Comparison with existing lints
No response
Additional Context
No response
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
The issue names no files, tests, or entry points. Start by reviewing Clippy's existing lint architecture and the proposed Slice::get pattern, then narrow the broader standard-library pattern goal and its false-positive boundaries. Done means the supported scope is agreed and the lint behavior can be validated with focused examples.
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
- Needs clarification
- Newbie friendliness
- 35/100