Clippy lints / Complexity
Clippy lint · Complexity · checked with Clippy 0.1.99
clippy::redundant_guards: Checks for unnecessary guards in match expressions
What it meansChecks for unnecessary guards in match expressions. It is in the complexity group and warns by default.
Does it matter?
It’s more complex and much less readable. Making it part of the pattern can improve exhaustiveness checking as well.
Code that does something simple in a complicated way. Warns by default.
How to fix it
Clippy does not fix this one automatically (its suggestion may change behaviour, so it only shows it). Change the code by hand:
Flagged
match x {
Some(x) if matches!(x, Some(1)) => ..,
Some(x) if x == Some(2) => ..,
_ => todo!(),
}
Write this instead
match x {
Some(Some(1)) => ..,
Some(Some(2)) => ..,
_ => todo!(),
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::redundant_guards)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
redundant_guards = "allow"One run
cargo clippy -- -A clippy::redundant-guardsThe [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 guards in match expressions.
Why is this bad?
It’s more complex and much less readable. Making it part of the pattern can improve exhaustiveness checking as well.
Example
match x {
Some(x) if matches!(x, Some(1)) => ..,
Some(x) if x == Some(2) => ..,
_ => todo!(),
}
Use instead:
match x {
Some(Some(1)) => ..,
Some(Some(2)) => ..,
_ => todo!(),
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_argumentsChecks for functions with too many parameters
- clone_on_copyusing `clone` on type `u64` which implements the `Copy` trait
- type_complexityChecks for types used in structs, parameters and let declarations above a certain complexity threshold
- redundant_async_blockthis async expression only awaits a single future
- redundant_at_rest_patternusing a rest pattern to bind an entire slice to a local
- redundant_closure_calltry not to call a closure in the expression where it is declared
- redundant_slicingredundant slicing of the whole range
- repeat_oncecalling `repeat(1)` on a string literal
- reserve_after_initializationcall to `reserve` immediately after creation
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_argumentsChecks for functions with too many parametersRead it next →Did this answer your question?