Skip to content

clippy::implicit_hasher shouldn't warn on From<Thing> for HashMap<K, V> #3899

Open
@thomcc

Description

@thomcc

And probably others too. AFAICT fixing this is impossible.

For example, if I have

struct MyThing(Vec<(String, String)>);
impl From<MyThing> for HashMap<String, String> {
    fn from(t: MyThing) -> HashMap<String, String> {
        t.0.into_iter().collect()
    }
}

then I get clippy::implicit hasher with the suggestion

  |
5 | impl From<MyThing> for HashMap<String, String> {
  |                        ^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(clippy::implicit_hasher)] on by default
  = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher
help: consider adding a type parameter
  |
5 | impl<S: ::std::hash::BuildHasher> From<MyThing> for HashMap<String, String, S> {
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                   ^^^^^^^^^^^^^^^^^^^^^^^^^^

But I can't use that suggestion, I get E210.

error[E0210]: type parameter `S` must be used as the type parameter for some local type (e.g., `MyStruct<S>`)
  --> src/main.rs:12:1
   |
12 | impl<S: std::hash::BuildHasher> From<MyThing> for HashMap<String, String, S> {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `S` must be used as the type parameter for some local type
   |
   = note: only traits defined in the current crate can be implemented for a type parameter

Link to repro in playground: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=eeb25dc899a8ac4d201740279be2744b

> cargo clippy -V
clippy 0.0.212 (1b89724b 2019-01-15)

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: Clippy is not doing the correct thingI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedL-suggestionLint: Improving, adding or fixing lint suggestions

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions