Clippy lints / Pedantic
Clippy lint · Pedantic · checked with Clippy 0.1.99
clippy::single_match_else: Checks for matches with two arms where an if let else will usually suffice
What it meansChecks for matches with two arms where an if let else will usually suffice. It is in the pedantic group and off by default.
Does it matter?
Just readability - if let nests less than a match.
Stricter lints with some false positives. Off by default; opt in with clippy::pedantic.
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
match x {
Some(ref foo) => bar(foo),
_ => bar(&other_ref),
}
Write this instead
if let Some(ref foo) = x {
bar(foo);
} else {
bar(&other_ref);
}
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_match_else = "warn"In code
#![warn(clippy::single_match_else)]One run
cargo clippy -- -W clippy::single-match-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 matches with two arms where an if let else will
usually suffice.
Why is this bad?
Just readability - if let nests less than a match.
Known problems
Personal style preferences may differ.
Example
Using match:
match x {
Some(ref foo) => bar(foo),
_ => bar(&other_ref),
}
Using if let with else:
if let Some(ref foo) = x {
bar(foo);
} else {
bar(&other_ref);
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_linesChecks for functions with a large amount of lines
- missing_errors_docChecks the doc comments of publicly visible functions that return a Result type and warns if there is no # Errors section
- must_use_candidateChecks for public functions that have no #[must_use] attribute, but return something not already marked must-use, have no mutable arg and mutate no statics
- should_panic_without_expectChecks for #[should_panic] attributes without specifying the expected panic message
- similar_namesbinding's name is too similar to existing binding
- single_char_patternChecks for string methods that receive a single-character str as an argument, e.g., _.split("x")
- stable_sort_primitiveused `sort` on primitive type `i32`
- str_split_at_newlineChecks for usages of str.trim().split("\n") and str.trim().split("\r\n")
- string_add_assignyou assigned the result of adding something to this string. Consider using `String::push_str()` instead
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_linesChecks for functions with a large amount of linesRead it next →Did this answer your question?