Recover from missing comma between enum variants

This commit is contained in:
Esteban Küber
2019-03-08 14:35:38 -08:00
parent 7cf074a1e6
commit 532dd4475b
5 changed files with 63 additions and 22 deletions

View File

@@ -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",
);