diff options
| author | Michael Goulet <michael@errs.io> | 2025-06-26 17:53:39 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2025-06-26 18:11:14 +0000 |
| commit | e63921262ccd2ece7e0861d634f111136da1f7da (patch) | |
| tree | 7fc59636ab2dc9acdaa6013afee3411b268ef8ba | |
| parent | 94e9973b92c481d20e5fe1466bbc47f818101d5f (diff) | |
| download | rust-e63921262ccd2ece7e0861d634f111136da1f7da.tar.gz rust-e63921262ccd2ece7e0861d634f111136da1f7da.zip | |
Make recovery for enum with struct field a bit more accurate
| -rw-r--r-- | compiler/rustc_parse/src/parser/item.rs | 3 | ||||
| -rw-r--r-- | tests/ui/structs-enums/recover-enum-with-bad-where.rs | 6 | ||||
| -rw-r--r-- | tests/ui/structs-enums/recover-enum-with-bad-where.stderr | 10 |
3 files changed, 18 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index 5088caa80f8..9ed7124a11c 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -1552,7 +1552,8 @@ impl<'a> Parser<'a> { }) .map_err(|mut err| { err.span_label(ident.span, "while parsing this enum"); - if self.token == token::Colon { + // Try to recover `enum Foo { ident : Ty }`. + if self.prev_token.is_non_reserved_ident() && self.token == token::Colon { let snapshot = self.create_snapshot_for_diagnostic(); self.bump(); match self.parse_ty() { diff --git a/tests/ui/structs-enums/recover-enum-with-bad-where.rs b/tests/ui/structs-enums/recover-enum-with-bad-where.rs new file mode 100644 index 00000000000..850ee6caa1a --- /dev/null +++ b/tests/ui/structs-enums/recover-enum-with-bad-where.rs @@ -0,0 +1,6 @@ +pub enum Foo<T> +where: +//~^ ERROR expected one of `#`, `{`, lifetime, or type, found `:` + T: Missing, {} + +fn main() {} diff --git a/tests/ui/structs-enums/recover-enum-with-bad-where.stderr b/tests/ui/structs-enums/recover-enum-with-bad-where.stderr new file mode 100644 index 00000000000..6f28ff56bab --- /dev/null +++ b/tests/ui/structs-enums/recover-enum-with-bad-where.stderr @@ -0,0 +1,10 @@ +error: expected one of `#`, `{`, lifetime, or type, found `:` + --> $DIR/recover-enum-with-bad-where.rs:2:6 + | +LL | pub enum Foo<T> + | --- while parsing this enum +LL | where: + | ^ expected one of `#`, `{`, lifetime, or type + +error: aborting due to 1 previous error + |
