Clippy lints / Correctness
Clippy lint · Correctness · checked with Clippy 0.1.99
clippy::unit_hash: Detects ().hash(_)
What it meansDetects ().hash(_). It is in the correctness group and denied by default (the build fails).
Does it matter?
Hashing a unit value doesn’t do anything as the implementation of Hash for () is a no-op.
Code that is almost certainly wrong. Denied by default: the build fails until you fix it or allow it.
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 my_enum {
Empty => ().hash(&mut state),
WithValue(x) => x.hash(&mut state),
}
Write this instead
match my_enum {
Empty => 0_u8.hash(&mut state),
WithValue(x) => x.hash(&mut state),
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::unit_hash)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
unit_hash = "allow"One run
cargo clippy -- -A clippy::unit-hashThe [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
Detects ().hash(_).
Why is this bad?
Hashing a unit value doesn’t do anything as the implementation of Hash for () is a no-op.
Example
match my_enum {
Empty => ().hash(&mut state),
WithValue(x) => x.hash(&mut state),
}
Use instead:
match my_enum {
Empty => 0_u8.hash(&mut state),
WithValue(x) => x.hash(&mut state),
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- uninit_assumed_initthis call for this type may be undefined behavior
- uninit_vecChecks for set_len() call that creates Vec with uninitialized elements. This is commonly caused by calling set_len() right after allocating or reserving a buffer with new(), default(), with_capacity(), or reserve()
- unit_cmpChecks for comparisons to unit
- unit_return_expecting_ordthis closure returns the unit type which also implements Ord
- unsound_collection_transmutetransmute from `std::vec::Vec<u16>` to `std::vec::Vec<u32>` with mismatched layout is unsound
- unused_io_amountwritten amount is not handled
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::uninit_assumed_initthis call for this type may be undefined behaviorRead it next →Did this answer your question?