about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser
diff options
context:
space:
mode:
authoryukang <moorekang@gmail.com>2023-05-06 02:27:32 +0800
committeryukang <moorekang@gmail.com>2023-05-08 15:07:36 +0800
commit0e8703da3e33a76d12186e36a23c87870bc5d7bb (patch)
tree27e3555b8ce6508fa96b151fe9a2db16162593b3 /compiler/rustc_parse/src/parser
parent6b76588222eb1a69f681c00f9d073edb43401ba7 (diff)
downloadrust-0e8703da3e33a76d12186e36a23c87870bc5d7bb.tar.gz
rust-0e8703da3e33a76d12186e36a23c87870bc5d7bb.zip
make it more accurate by parsing ty
Diffstat (limited to 'compiler/rustc_parse/src/parser')
-rw-r--r--compiler/rustc_parse/src/parser/item.rs28
1 files changed, 19 insertions, 9 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs
index 2a47711a8d3..49e05efd39d 100644
--- a/compiler/rustc_parse/src/parser/item.rs
+++ b/compiler/rustc_parse/src/parser/item.rs
@@ -1274,18 +1274,28 @@ impl<'a> Parser<'a> {
             (thin_vec![], false)
         } else {
             self.parse_delim_comma_seq(Delimiter::Brace, |p| p.parse_enum_variant()).map_err(
-                |mut e| {
-                    e.span_label(id.span, "while parsing this enum");
+                |mut err| {
+                    err.span_label(id.span, "while parsing this enum");
                     if self.token == token::Colon {
-                        e.span_suggestion_verbose(
-                            prev_span,
-                            "perhaps you meant to use `struct` here",
-                            "struct".to_string(),
-                            Applicability::MaybeIncorrect,
-                        );
+                        let snapshot = self.create_snapshot_for_diagnostic();
+                        self.bump();
+                        match self.parse_ty() {
+                            Ok(_) => {
+                                err.span_suggestion_verbose(
+                                    prev_span,
+                                    "perhaps you meant to use `struct` here",
+                                    "struct".to_string(),
+                                    Applicability::MaybeIncorrect,
+                                );
+                            }
+                            Err(e) => {
+                                e.cancel();
+                            }
+                        }
+                        self.restore_snapshot(snapshot);
                     }
                     self.recover_stmt();
-                    e
+                    err
                 },
             )?
         };