rust-lang / rust-lang/rust-clippy
lint on `OR | PATTERN if call()`
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
Lint if an or-pattern may match twice, which causes possible repeat calls to the guard fn. Observe: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=dcafa97df6e7e8b4f6e4b84709f0fb6f
Advantage
Prevents a possible mistake due to overlapping patterns + an if-guard.
Drawbacks
Uhhh... people might, very hypothetically, have meant to do this?
Example
pub fn act(something: Option<u32>) -> bool {
match something {
None | Some(0) | Some(0..) if some_fn() => unreachable!(),
None | Some(0) => false,
Some(1..) => true,
}
}
Could be written as, if actually intentional:
pub fn act(something: Option<u32>) -> bool {
match something {
None if some_fn() => todo!()
Some(0) if some_fn() => todo!(),
Some(0..) if some_fn() => todo!(),
None | Some(0) => false,
Some(1..) => true,
}
}
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 by reproducing the Rust Playground example and compare its behavior with the proposed lint and the intentionally separated guards. The change is done when overlapping or-patterns with an if guard are diagnosed while the explicit separate-guard form remains valid; the issue does not name an implementation file or test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100