Repository: rust
Issue: Suggest use Enum::* when it is likely users intent.
Labels: A-diagnostics,T-compiler

### Code

```Rust
// use Color::*;

#[allow(dead_code)]
enum Color {
  Red,
  Green,
  Blue
}

impl Color {
  fn name(self) -> &'static str {
    match self {
      Red => "red color",
      Green => "green color",
      Blue => "blue color"
    }
  }
}

fn main() {
  let color = Color::Red;
  println!("You have {}.", color.name());
}
```


### Current output

```Shell
➜  test git:(main) ✗ rustc test.rs 
error[E0170]: pattern binding `Red` is named the same as one of the variants of the type `Color`
  --> test.rs:13:7
   |
13 |       Red => "red color",
   |       ^^^ help: to match on the variant, qualify the path: `Color::Red`
   |
   = note: `#[deny(bindings_with_variant_name)]` on by default

error[E0170]: pattern binding `Green` is named the same as one of the variants of the type `Color`
  --> test.rs:14:7
   |
14 |       Green => "green color",
   |       ^^^^^ help: to match on the variant, qualify the path: `Color::Green`

error[E0170]: pattern binding `Blue` is named the same as one of the variants of the type `Color`
  --> test.rs:15:7
   |
15 |       Blue => "blue color"
   |       ^^^^ help: to match on the variant, qualify the path: `Color::Blue`

warning: unreachable pattern
  --> test.rs:14:7
   |
13 |       Red => "red color",
   |       --- matches any value
14 |       Green => "green color",
   |       ^^^^^ unreachable pattern
   |
   = note: `#[warn(unreachable_patterns)]` on by default

warning: unreachable pattern
  --> test.rs:15:7
   |
13 |       Red => "red color",
   |       --- matches any value
14 |       Green => "green color",
15 |       Blue => "blue color"
   |       ^^^^ unreachable pattern

warning: unused variable: `Red`
  --> test.rs:13:7
   |
13 |       Red => "red color",
   |       ^^^ help: if this is intentional, prefix it with an underscore: `_Red`
   |
   = note: `#[warn(unused_variables)]` on by default

warning: unused variable: `Green`
  --> test.rs:14:7
   |
14 |       Green => "green color",
   |       ^^^^^ help: if this is intentional, prefix it with an underscore: `_Green`

warning: unused variable: `Blue`
  --> test.rs:15:7
   |
15 |       Blue => "blue color"
   |       ^^^^ help: if this is intentional, prefix it with an underscore: `_Blue`

warning: variable `Red` should have a snake case name
  --> test.rs:13:7
   |
13 |       Red => "red color",
   |       ^^^ help: convert the identifier to snake case: `red`
   |
   = note: `#[warn(non_snake_case)]` on by default

warning: variable `Green` should have a snake case name
  --> test.rs:14:7
   |
14 |       Green => "green color",
   |       ^^^^^ help: convert the identifier to snake case: `green`

warning: variable `Blue` should have a snake case name
  --> test.rs:15:7
   |
15 |       Blue => "blue color"
   |       ^^^^ help: convert the identifier to snake case: `blue`

error: aborting due to 3 previous errors; 8 warnings emitted

For more information about this error, try `rustc --explain E0170`.
```


### Desired output

```Shell
error[E0170]: pattern binding `Red` is named the same as one of the variants of the type `Color`
  --> test.rs:13:7
   |
13 |       Red => "red color",
   |       ^^^ help: to match on the variant, add `use Color::*` to the file
   |
   = note: `#[deny(bindings_with_variant_name)]` on by default
   = note: Alternatively a recommended solution is to qualify each variant as `Color::Red`.
```


### Rationale and extra context

There are multiple ways to resolve the issue. In my case the code was copy-pasted and I wanted to add the `use Color::*` but I forgot about it. The enum was much bigger and I was flooded with warnings. The solution I wanted to do was not in the warnings.

My suggestion is to 
 - Compress those warnings to a single one and have a note that this problem is repeated for other cases.
 - When all of the cases are used as unqualified I probably did not mean to do `Color::Red` but `use Color::*` instead.

The `use Color::*` solution is not recommended but this snippet suggests that it is actually something that the user wanted to do so it might be a good idea to lean into it and give a helping hand instead.

### Other cases

_No response_

### Anything else?

rustc 1.71.0-nightly (74c482104 2023-05-04)