Skip to content

Error output for mismatched types with a 1-ary tuple could hint to add a missing comma #86100

Closed
@asquared31415

Description

@asquared31415

Type mismatch errors with a 1-tuple and a single value wrapped in parentheses could be improved.

let _t: (u8,) = (1);

Playground link with a few other examples

The current output is:

warning: unnecessary parentheses around assigned value
 --> src/main.rs:2:21
  |
2 |     let _t: (u8,) = (1);
  |                     ^^^ help: remove these parentheses
  |
  = note: `#[warn(unused_parens)]` on by default

error[E0308]: mismatched types
 --> src/main.rs:2:21
  |
2 |     let _t: (u8,) = (1);
  |             -----   ^^^ expected tuple, found integer
  |             |
  |             expected due to this
  |
  = note: expected tuple `(u8,)`
              found type `{integer}`

Ideally the E0308 mismatched types error could have a hint when the type of the value and the type of the element in the 1-tuple match that is something along the lines of

help: a tuple with one element needs a comma
    let _t: (u8,) = (1,);
                      ^

I believe that this could improve newcomers' experience by highlighting the difference in the types, especially when the type is inferred like in some of the other playground examples, and explaining the syntax to create a tuple.

Inspired by #86019

@rustbot label +D-papercut +D-newcomer-roadblock

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsD-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.D-papercutDiagnostics: An error or lint that needs small tweaks.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