Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::single_option_map: `fn` that only maps over argument
What it meansChecks for functions with method calls to .map(_) on an arg of type Option as the outermost expression. It is in the nursery group and off by default.
What you see
warning: `fn` that only maps over argument --> main.rs:3:1 | 3 | / fn double(param: Option<u32>) -> Option<u32> { 4 | | param.map(|x| x * 2) 5 | | } | |_^ | = help: move the `.map` to the caller or to an `_opt` function = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#single_option_map = note: `-W clippy::single-option-map` implied by `-W clippy::nursery`
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
Taking and returning an Option<T> may require additional Some(_) and unwrap if all you have is a T.
New lints still being finished. Off by default and may have false positives.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
fn double(param: Option<u32>) -> Option<u32> {
param.map(|x| x * 2)
}
Write this instead
fn double(param: u32) -> u32 {
param * 2
}
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
single_option_map = "warn"In code
#![warn(clippy::single_option_map)]One run
cargo clippy -- -W clippy::single-option-mapThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Checks for functions with method calls to .map(_) on an arg
of type Option as the outermost expression.
Why is this bad?
Taking and returning an Option<T> may require additional
Some(_) and unwrap if all you have is a T.
Example
fn double(param: Option<u32>) -> Option<u32> {
param.map(|x| x * 2)
}
Use instead:
fn double(param: u32) -> u32 {
param * 2
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further use
- set_contains_or_insertusage of `HashSet::insert` after `HashSet::contains`
- significant_drop_in_scrutineeChecks for temporaries returned from function calls in a match scrutinee that have the clippy::has_significant_drop attribute
- significant_drop_tighteningSearches for elements marked with #[clippy::has_significant_drop] that could be early dropped but are in fact dropped at the end of their scopes
- string_lit_as_bytesChecks for the as_bytes method called on string literals that contain only ASCII characters
- suboptimal_flopsexponent for bases 2 and e can be computed more accurately
- suspicious_operation_groupingsthis sequence of operators looks suspiciously like a bug
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further useRead it next →Did this answer your question?