Skip to content

Provide suggestion for error when if let used with enum variant whose values are not initialized #101208

Closed
@Rageking8

Description

@Rageking8

Given the following code: link

enum E {
    One(i32, i32)
}

fn main() {
    let var = E::One;
    if let E::One(var1, var2) = var {
        println!("{var1} {var2}");
    }
}

The current output is:

Compiling playground v0.0.1 (/playground)
error[[E0308]](https://doc.rust-lang.org/nightly/error-index.html#E0308): mismatched types
 --> src/main.rs:7:12
  |
7 |     if let E::One(var1, var2) = var {
  |            ^^^^^^^^^^^^^^^^^^   --- this expression has type `fn(i32, i32) -> E {E::One}`
  |            |
  |            expected fn item, found enum `E`
  |
  = note: expected fn item `fn(i32, i32) -> E {E::One}`
                found enum `E`

For more information about this error, try `rustc --explain E0308`.
error: could not compile `playground` due to previous error

Ideally the output should suggest to the user that they need to initialize the enum variant's value in order to use the if let.

Metadata

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsD-papercutDiagnostics: An error or lint that needs small tweaks.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions