better pattern recovery
This commit is contained in:
@@ -893,6 +893,8 @@ pub enum ModuleItem<'a> {
|
||||
ImplItem(ImplItem<'a>),
|
||||
UseItem(UseItem<'a>),
|
||||
ExternCrateItem(ExternCrateItem<'a>),
|
||||
ConstDef(ConstDef<'a>),
|
||||
StaticDef(StaticDef<'a>),
|
||||
}
|
||||
|
||||
impl<'a> AstNode<'a> for ModuleItem<'a> {
|
||||
@@ -905,6 +907,8 @@ impl<'a> AstNode<'a> for ModuleItem<'a> {
|
||||
IMPL_ITEM => Some(ModuleItem::ImplItem(ImplItem { syntax })),
|
||||
USE_ITEM => Some(ModuleItem::UseItem(UseItem { syntax })),
|
||||
EXTERN_CRATE_ITEM => Some(ModuleItem::ExternCrateItem(ExternCrateItem { syntax })),
|
||||
CONST_DEF => Some(ModuleItem::ConstDef(ConstDef { syntax })),
|
||||
STATIC_DEF => Some(ModuleItem::StaticDef(StaticDef { syntax })),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -917,6 +921,8 @@ impl<'a> AstNode<'a> for ModuleItem<'a> {
|
||||
ModuleItem::ImplItem(inner) => inner.syntax(),
|
||||
ModuleItem::UseItem(inner) => inner.syntax(),
|
||||
ModuleItem::ExternCrateItem(inner) => inner.syntax(),
|
||||
ModuleItem::ConstDef(inner) => inner.syntax(),
|
||||
ModuleItem::StaticDef(inner) => inner.syntax(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,7 +334,7 @@ Grammar(
|
||||
),
|
||||
"ModuleItem": (
|
||||
enum: ["StructDef", "EnumDef", "FnDef", "TraitDef", "ImplItem",
|
||||
"UseItem", "ExternCrateItem" ]
|
||||
"UseItem", "ExternCrateItem", "ConstDef", "StaticDef" ]
|
||||
),
|
||||
|
||||
"TupleExpr": (),
|
||||
|
||||
@@ -22,6 +22,10 @@ pub(super) fn pattern(p: &mut Parser) {
|
||||
}
|
||||
}
|
||||
|
||||
const PAT_RECOVERY_SET: TokenSet =
|
||||
token_set![LET_KW, IF_KW, WHILE_KW, LOOP_KW, MATCH_KW];
|
||||
|
||||
|
||||
fn atom_pat(p: &mut Parser) -> Option<CompletedMarker> {
|
||||
let la0 = p.nth(0);
|
||||
let la1 = p.nth(1);
|
||||
@@ -52,7 +56,7 @@ fn atom_pat(p: &mut Parser) -> Option<CompletedMarker> {
|
||||
L_PAREN => tuple_pat(p),
|
||||
L_BRACK => slice_pat(p),
|
||||
_ => {
|
||||
p.err_and_bump("expected pattern");
|
||||
p.err_recover("expected pattern", PAT_RECOVERY_SET);
|
||||
return None;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user