move reparsers to grammar

This commit is contained in:
Aleksey Kladov 2019-02-20 16:02:06 +03:00
parent 5a6eda528c
commit 9f6883fbf1
2 changed files with 27 additions and 33 deletions

View file

@ -81,31 +81,7 @@ fn is_contextual_kw(text: &str) -> bool {
type ParseFn = fn(&mut Parser);
fn find_reparsable_node(node: &SyntaxNode, range: TextRange) -> Option<(&SyntaxNode, ParseFn)> {
let node = algo::find_covering_node(node, range);
return node.ancestors().filter_map(|node| reparser(node).map(|r| (node, r))).next();
fn reparser(node: &SyntaxNode) -> Option<ParseFn> {
let res = match node.kind() {
BLOCK => grammar::block,
NAMED_FIELD_DEF_LIST => grammar::named_field_def_list,
NAMED_FIELD_LIST => grammar::named_field_list,
ENUM_VARIANT_LIST => grammar::enum_variant_list,
MATCH_ARM_LIST => grammar::match_arm_list,
USE_TREE_LIST => grammar::use_tree_list,
EXTERN_ITEM_LIST => grammar::extern_item_list,
TOKEN_TREE if node.first_child().unwrap().kind() == L_CURLY => grammar::token_tree,
ITEM_LIST => {
let parent = node.parent().unwrap();
match parent.kind() {
IMPL_BLOCK => grammar::impl_item_list,
TRAIT_DEF => grammar::trait_item_list,
MODULE => grammar::mod_item_list,
_ => return None,
}
}
_ => return None,
};
Some(res)
}
node.ancestors().find_map(grammar::reparser).map(|r| (node, r))
}
fn is_balanced(tokens: &[Token]) -> bool {