about summary refs log tree commit diff
path: root/src/libsyntax/parse/parser.rs
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-03-08 14:35:38 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-03-16 17:47:00 -0700
commit532dd4475b553212a65a52df6ff511e4822b149a (patch)
tree74f9ccdc75041c99bbd6c86fdff745b7fa0b5b07 /src/libsyntax/parse/parser.rs
parent7cf074a1e655ac07d04d045667278fa1a9970b93 (diff)
downloadrust-532dd4475b553212a65a52df6ff511e4822b149a.tar.gz
rust-532dd4475b553212a65a52df6ff511e4822b149a.zip
Recover from missing comma between enum variants
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
-rw-r--r--src/libsyntax/parse/parser.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index aa70c54a1ef..8ce29c9f298 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -7711,11 +7711,29 @@ impl<'a> Parser<'a> {
             };
             variants.push(respan(vlo.to(self.prev_span), vr));
 
-            if !self.eat(&token::Comma) { break; }
+            if !self.eat(&token::Comma) {
+                if self.token.is_ident() &&
+                    !self.token.is_special_ident() &&
+                    !self.token.is_used_keyword() &&
+                    !self.token.is_unused_keyword()
+                {
+                    let sp = self.sess.source_map().next_point(self.prev_span);
+                    let mut err = self.struct_span_err(sp, "missing comma");
+                    err.span_suggestion_short(
+                        sp,
+                        "missing comma",
+                        ",".to_owned(),
+                        Applicability::MaybeIncorrect,
+                    );
+                    err.emit();
+                } else {
+                    break;
+                }
+            }
         }
         self.expect(&token::CloseDelim(token::Brace))?;
         if !any_disr.is_empty() && !all_nullary {
-            let mut err =self.struct_span_err(
+            let mut err = self.struct_span_err(
                 any_disr.clone(),
                 "discriminator values can only be used with a field-less enum",
             );