Clippy lints / Pedantic
Clippy lint · Pedantic · checked with Clippy 0.1.99
clippy::ignored_unit_patterns: matching over `()` is more explicit
What it meansChecks for usage of _ in patterns of type (). It is in the pedantic group and off by default.
What you see
warning: matching over `()` is more explicit --> main.rs:4:8 | 4 | Ok(_) => println!("Working directory created"), | ^ help: use `()` instead of `_`: `()` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#ignored_unit_patterns = note: `-W clippy::ignored-unit-patterns` implied by `-W clippy::pedantic`
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?
Matching with () explicitly instead of _ outlines the fact that the pattern contains no data. Also it would detect a type change that _ would ignore.
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 std::fs::create_dir("tmp-work-dir") {
Ok(_) => println!("Working directory created"),
Err(s) => eprintln!("Could not create directory: {s}"),
}
Write this instead
match std::fs::create_dir("tmp-work-dir") {
Ok(()) => println!("Working directory created"),
Err(s) => eprintln!("Could not create directory: {s}"),
}
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]
ignored_unit_patterns = "warn"In code
#![warn(clippy::ignored_unit_patterns)]One run
cargo clippy -- -W clippy::ignored-unit-patternsThe [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 usage of _ in patterns of type ().
Why is this bad?
Matching with () explicitly instead of _ outlines
the fact that the pattern contains no data. Also it
would detect a type change that _ would ignore.
Example
match std::fs::create_dir("tmp-work-dir") {
Ok(_) => println!("Working directory created"),
Err(s) => eprintln!("Could not create directory: {s}"),
}
Use instead:
match std::fs::create_dir("tmp-work-dir") {
Ok(()) => println!("Working directory created"),
Err(s) => eprintln!("Could not create directory: {s}"),
}
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
- format_push_string`format!(..)` appended to existing `String`
- if_not_elseChecks for usage of ! or != in an if condition with an else branch
- ignore_without_reasonChecks for ignored tests without messages
- implicit_cloneimplicitly cloning a `Vec` by calling `to_vec` on its dereferenced type
- implicit_hasherChecks for public impl or fn missing generalization over different hashers and implicitly defaulting to the default hashing algorithm (SipHash)
- inconsistent_struct_constructorstruct constructor field order is inconsistent with struct definition field order
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?