Skip to content

Commit bcb830a

Browse files
committed
Always emit help when failing to parse enum variant
1 parent 2fa7a9a commit bcb830a

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

compiler/rustc_parse/src/parser/item.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -1450,6 +1450,8 @@ impl<'a> Parser<'a> {
14501450
self.recover_diff_marker();
14511451
let variant_attrs = self.parse_outer_attributes()?;
14521452
self.recover_diff_marker();
1453+
let help = "enum variants can be `Variant`, `Variant = <integer>`, \
1454+
`Variant(Type, ..., TypeN)` or `Variant { fields: Types }`";
14531455
self.collect_tokens_trailing_token(
14541456
variant_attrs,
14551457
ForceCollect::No,
@@ -1486,6 +1488,7 @@ impl<'a> Parser<'a> {
14861488
this.eat_to_tokens(&[&token::CloseDelim(Delimiter::Brace)]);
14871489
this.bump(); // }
14881490
err.span_label(span, "while parsing this enum");
1491+
err.help(help);
14891492
err.emit();
14901493
(thin_vec![], true)
14911494
}
@@ -1502,6 +1505,7 @@ impl<'a> Parser<'a> {
15021505
this.eat_to_tokens(&[&token::CloseDelim(Delimiter::Parenthesis)]);
15031506
this.bump(); // )
15041507
err.span_label(span, "while parsing this enum");
1508+
err.help(help);
15051509
err.emit();
15061510
thin_vec![]
15071511
}
@@ -1527,8 +1531,9 @@ impl<'a> Parser<'a> {
15271531

15281532
Ok((Some(vr), TrailingToken::MaybeComma))
15291533
},
1530-
).map_err(|mut err| {
1531-
err.help("enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`");
1534+
)
1535+
.map_err(|mut err| {
1536+
err.help(help);
15321537
err
15331538
})
15341539
}

tests/ui/parser/issues/issue-68890.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ LL | enum e{A((?'a a+?+l))}
1111
| - ^ expected one of `)`, `+`, or `,`
1212
| |
1313
| while parsing this enum
14+
|
15+
= help: enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`
1416

1517
error: expected item, found `)`
1618
--> $DIR/issue-68890.rs:1:21

tests/ui/parser/recover/recover-enum2.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ LL | enum Test4 {
1313
| ----- while parsing this enum
1414
LL | Nope(i32 {})
1515
| ^ expected one of 7 possible tokens
16+
|
17+
= help: enum variants can be `Variant`, `Variant = <integer>`, `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`
1618

1719
error[E0308]: mismatched types
1820
--> $DIR/recover-enum2.rs:11:9

0 commit comments

Comments
 (0)