- Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
C-enhancementCategory: Enhancement of lints, like adding more cases or adding help messagesCategory: Enhancement of lints, like adding more cases or adding help messages
Description
Consider the code below.
pub fn f(x: Option<u32>) -> Option<u32> { if let Some(x) = x { dbg!(x); Some(x * 2) } else { None } }
Standard Clippy produces no warning. More exhaustive options suggest code that is no significantly better:
$ cargo clippy --all -- -W clippy::all -W clippy::nursery error: use Option::map_or instead of an if let/else --> src/lib.rs:2:5 | 2 | / if let Some(x) = x { 3 | | dbg!(x); 4 | | Some(x * 2) 5 | | } else { 6 | | None 7 | | } | |_____^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_if_let_else = note: `-D clippy::option-if-let-else` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(clippy::option_if_let_else)]` help: try | 2 ~ x.map_or(None, |x| { 3 + dbg!(x); 4 + Some(x * 2) 5 + }) |
However, the code can be written with less nesting, using the question mark operator:
pub fn f(x: Option<u32>) -> Option<u32> { let x = x?; dbg!(x); Some(x * 2) }
Note that Clippy does suggest that for the code below:
pub fn f(x: Option<u32>) -> Option<u32> { let Some(x) = x else { return None; }; dbg!(x); Some(x * 2) }
error: this `let...else` may be rewritten with the `?` operator --> src/lib.rs:2:5 | 2 | / let Some(x) = x else { 3 | | return None; 4 | | }; | |______^ help: replace it with: `let x = x?;` | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark = note: `-D clippy::question-mark` implied by `-D warnings` = help: to override `-D warnings` add `#[allow(clippy::question_mark)]`
This pattern is particularly frequent when implementing iterators.
ViincentLim and ronnodas
Metadata
Metadata
Assignees
Labels
C-enhancementCategory: Enhancement of lints, like adding more cases or adding help messagesCategory: Enhancement of lints, like adding more cases or adding help messages