Clippy lints / Restriction
Clippy lint · Restriction · checked with Clippy 0.1.99
clippy::if_then_some_else_none: Checks for if-else that could be written using either bool::then or bool::then_some
What it meansChecks for if-else that could be written using either bool::then or bool::then_some. It is in the restriction group and off by default.
Does it matter?
Looks a little redundant. Using bool::then is more concise and incurs no loss of clarity. For simple calculations and known values, use bool::then_some, which is eagerly evaluated in comparison to bool::then.
Lints that forbid language features for specific codebases (no unwrap, no indexing...). Off by default; pick them one by one, never the whole group.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let a = if v.is_empty() {
println!("true!");
Some(42)
} else {
None
};
Write this instead
let a = v.is_empty().then(|| {
println!("true!");
42
});
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]
if_then_some_else_none = "warn"In code
#![warn(clippy::if_then_some_else_none)]One run
cargo clippy -- -W clippy::if-then-some-else-noneThe [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.
Settings in clippy.toml
msrv: The minimum rust version that the project supports. Defaults to the rust-version field in Cargo.toml
Clippy's own documentation
What it does
Checks for if-else that could be written using either bool::then or bool::then_some.
Why restrict this?
Looks a little redundant. Using bool::then is more concise and incurs no loss of clarity.
For simple calculations and known values, use bool::then_some, which is eagerly evaluated
in comparison to bool::then.
Example
let a = if v.is_empty() {
println!("true!");
Some(42)
} else {
None
};
Could be written:
let a = v.is_empty().then(|| {
println!("true!");
42
});
Configuration
-
msrv: The minimum rust version that the project supports. Defaults to therust-versionfield inCargo.toml(default:
current version)
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- unwrap_usedChecks for .unwrap() or .unwrap_err() calls on Results and .unwrap() call on Options
- module_name_repetitionsDetects public item names that are prefixed or suffixed by the containing public module’s name
- expect_usedChecks for .expect() or .expect_err() calls on Results and .expect() call on Options
- fn_to_numeric_cast_anycasting function pointer `fn1` to `usize`
- get_unwrapcalled `.get().unwrap()` on a Vec
- host_endian_bytesuse of `to_ne_bytes`
- impl_trait_in_paramsLints when impl Trait is being used in a function’s parameters
- implicit_returnmissing `return` statement
- indexing_slicingindexing may panic
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::unwrap_usedChecks for .unwrap() or .unwrap_err() calls on Results and .unwrap() call on OptionsRead it next →Did this answer your question?