From 32bebfaf0e24651316c4d70d1e23ef170224bd7c Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 2 Sep 2019 17:37:48 +0300 Subject: cleanup --- crates/ra_parser/src/lib.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'crates/ra_parser/src/lib.rs') diff --git a/crates/ra_parser/src/lib.rs b/crates/ra_parser/src/lib.rs index 3d88be642..e494fc480 100644 --- a/crates/ra_parser/src/lib.rs +++ b/crates/ra_parser/src/lib.rs @@ -85,22 +85,22 @@ pub fn parse(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { /// Parse given tokens into the given sink as a path pub fn parse_path(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::path); + parse_from_tokens(token_source, tree_sink, grammar::fragments::path); } /// Parse given tokens into the given sink as a expression pub fn parse_expr(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::expr); + parse_from_tokens(token_source, tree_sink, grammar::fragments::expr); } /// Parse given tokens into the given sink as a ty pub fn parse_ty(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::type_); + parse_from_tokens(token_source, tree_sink, grammar::fragments::type_); } /// Parse given tokens into the given sink as a pattern pub fn parse_pat(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::pattern); + parse_from_tokens(token_source, tree_sink, grammar::fragments::pattern); } /// Parse given tokens into the given sink as a statement @@ -109,36 +109,34 @@ pub fn parse_stmt( tree_sink: &mut dyn TreeSink, with_semi: bool, ) { - parse_from_tokens(token_source, tree_sink, |p| grammar::stmt(p, with_semi)); + parse_from_tokens(token_source, tree_sink, |p| grammar::fragments::stmt(p, with_semi)); } /// Parse given tokens into the given sink as a block pub fn parse_block(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::block); + parse_from_tokens(token_source, tree_sink, grammar::fragments::block); } pub fn parse_meta(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::meta_item); + parse_from_tokens(token_source, tree_sink, grammar::fragments::meta_item); } /// Parse given tokens into the given sink as an item pub fn parse_item(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::item); + parse_from_tokens(token_source, tree_sink, grammar::fragments::item); } /// Parse given tokens into the given sink as an visibility qualifier pub fn parse_vis(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, |p| { - grammar::opt_visibility(p); - }); + parse_from_tokens(token_source, tree_sink, grammar::fragments::opt_visibility); } pub fn parse_macro_items(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::macro_items); + parse_from_tokens(token_source, tree_sink, grammar::fragments::macro_items); } pub fn parse_macro_stmts(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::macro_stmts); + parse_from_tokens(token_source, tree_sink, grammar::fragments::macro_stmts); } /// A parsing function for a specific braced-block. -- cgit v1.2.3 From c89abd42621daff2d652566be4e9e4789599268c Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 2 Sep 2019 18:51:03 +0300 Subject: simplify --- crates/ra_parser/src/lib.rs | 84 ++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 51 deletions(-) (limited to 'crates/ra_parser/src/lib.rs') diff --git a/crates/ra_parser/src/lib.rs b/crates/ra_parser/src/lib.rs index e494fc480..45241e566 100644 --- a/crates/ra_parser/src/lib.rs +++ b/crates/ra_parser/src/lib.rs @@ -83,60 +83,42 @@ pub fn parse(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { parse_from_tokens(token_source, tree_sink, grammar::root); } -/// Parse given tokens into the given sink as a path -pub fn parse_path(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::path); -} - -/// Parse given tokens into the given sink as a expression -pub fn parse_expr(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::expr); -} - -/// Parse given tokens into the given sink as a ty -pub fn parse_ty(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::type_); -} - -/// Parse given tokens into the given sink as a pattern -pub fn parse_pat(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::pattern); -} - -/// Parse given tokens into the given sink as a statement -pub fn parse_stmt( +pub enum FragmentKind { + Path, + Expr, + Statement, + Type, + Pattern, + Item, + Block, + Visibility, + MetaItem, + + // These kinds are used when parsing the result of expansion + // FIXME: use separate fragment kinds for macro inputs and outputs? + Items, + Statements, +} + +pub fn parse_fragment( token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink, - with_semi: bool, + fragment_kind: FragmentKind, ) { - parse_from_tokens(token_source, tree_sink, |p| grammar::fragments::stmt(p, with_semi)); -} - -/// Parse given tokens into the given sink as a block -pub fn parse_block(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::block); -} - -pub fn parse_meta(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::meta_item); -} - -/// Parse given tokens into the given sink as an item -pub fn parse_item(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::item); -} - -/// Parse given tokens into the given sink as an visibility qualifier -pub fn parse_vis(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::opt_visibility); -} - -pub fn parse_macro_items(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::macro_items); -} - -pub fn parse_macro_stmts(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { - parse_from_tokens(token_source, tree_sink, grammar::fragments::macro_stmts); + let parser: fn(&'_ mut parser::Parser) = match fragment_kind { + FragmentKind::Path => grammar::fragments::path, + FragmentKind::Expr => grammar::fragments::expr, + FragmentKind::Type => grammar::fragments::type_, + FragmentKind::Pattern => grammar::fragments::pattern, + FragmentKind::Item => grammar::fragments::item, + FragmentKind::Block => grammar::fragments::block, + FragmentKind::Visibility => grammar::fragments::opt_visibility, + FragmentKind::MetaItem => grammar::fragments::meta_item, + FragmentKind::Statement => grammar::fragments::stmt, + FragmentKind::Items => grammar::fragments::macro_items, + FragmentKind::Statements => grammar::fragments::macro_stmts, + }; + parse_from_tokens(token_source, tree_sink, parser) } /// A parsing function for a specific braced-block. -- cgit v1.2.3