Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::obfuscated_if_else: this method chain can be written more clearly with `if .. else ..`
What it meansChecks for unnecessary method chains that can be simplified into if .. else ... It is in the style group and warns by default.
What you see
warning: this method chain can be written more clearly with `if .. else ..` --> main.rs:4:1 | 4 | x.then_some("a").unwrap_or("b"); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `if x { "a" } else { "b" }` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#obfuscated_if_else = note: `#[warn(clippy::obfuscated_if_else)]` on by default
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?
This can be written more clearly with if .. else ..
Code that works but is not idiomatic Rust. Warns by default.
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 x = true;
x.then_some("a").unwrap_or("b");
Write this instead
let x = true;
if x { "a" } else { "b" };
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::obfuscated_if_else)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
obfuscated_if_else = "allow"One run
cargo clippy -- -A clippy::obfuscated-if-elseThe [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 unnecessary method chains that can be simplified into if .. else ...
Why is this bad?
This can be written more clearly with if .. else ..
Limitations
This lint currently only looks for usages of
.{then, then_some}(..).{unwrap_or, unwrap_or_else, unwrap_or_default}(..), but will be expanded
to account for similar patterns.
Example
let x = true;
x.then_some("a").unwrap_or("b");
Use instead:
let x = true;
if x { "a" } else { "b" };
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- needless_returnunneeded `return` statement
- new_without_defaultChecks for public types with a pub fn new() -> Self method and no implementation of Default
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- non_minimal_cfgunneeded sub `cfg` when there is only one condition
- nonstandard_macro_bracesuse of irregular braces for `vec!` macro
- ok_expectChecks for usage of ok().expect(..). Note: This lint only triggers for code marked compatible with versions of the compiler older than Rust 1.82.0
- op_refChecks for arguments to == which have their address taken to satisfy a bound and suggests to dereference the other argument instead
- option_map_or_noneChecks for usage of _.map_or(None, _)
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::needless_returnunneeded `return` statementRead it next →Did this answer your question?