Clippy lints / Pedantic
Clippy lint · Pedantic · checked with Clippy 0.1.99
clippy::implicit_hasher: Checks for public impl or fn missing generalization over different hashers and implicitly defaulting to the default hashing algorithm (SipHash)
What it meansChecks for public impl or fn missing generalization over different hashers and implicitly defaulting to the default hashing algorithm (SipHash). It is in the pedantic group and off by default.
Does it matter?
HashMap or HashSet with custom hashers cannot be used with them.
Stricter lints with some false positives. Off by default; opt in with clippy::pedantic.
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
impl<K: Hash + Eq, V> Serialize for HashMap<K, V> { }
pub fn foo(map: &mut HashMap<i32, i32>) { }
Write this instead
impl<K: Hash + Eq, V, S: BuildHasher> Serialize for HashMap<K, V, S> { }
pub fn foo<S: BuildHasher>(map: &mut HashMap<i32, i32, 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]
implicit_hasher = "warn"In code
#![warn(clippy::implicit_hasher)]One run
cargo clippy -- -W clippy::implicit-hasherThe [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 public impl or fn missing generalization
over different hashers and implicitly defaulting to the default hashing
algorithm (SipHash).
Why is this bad?
HashMap or HashSet with custom hashers cannot be
used with them.
Known problems
Suggestions for replacing constructors can contain false-positives. Also applying suggestions can require modification of other pieces of code, possibly including external crates.
Example
impl<K: Hash + Eq, V> Serialize for HashMap<K, V> { }
pub fn foo(map: &mut HashMap<i32, i32>) { }
could be rewritten as
impl<K: Hash + Eq, V, S: BuildHasher> Serialize for HashMap<K, V, S> { }
pub fn foo<S: BuildHasher>(map: &mut HashMap<i32, i32, 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
- ignore_without_reasonChecks for ignored tests without messages
- ignored_unit_patternsmatching over `()` is more explicit
- implicit_cloneimplicitly cloning a `Vec` by calling `to_vec` on its dereferenced type
- inconsistent_struct_constructorstruct constructor field order is inconsistent with struct definition field order
- index_refutable_slicethis binding can be a slice pattern to avoid indexing
- inefficient_to_stringChecks for usage of .to_string() on an &&T where T implements ToString directly (like &&str or &&String)
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?