aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_parser/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_parser/src/lib.rs')
-rw-r--r--crates/ra_parser/src/lib.rs86
1 files changed, 33 insertions, 53 deletions
diff --git a/crates/ra_parser/src/lib.rs b/crates/ra_parser/src/lib.rs
index 3d88be642..45241e566 100644
--- a/crates/ra_parser/src/lib.rs
+++ b/crates/ra_parser/src/lib.rs
@@ -83,62 +83,42 @@ pub fn parse(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) {
83 parse_from_tokens(token_source, tree_sink, grammar::root); 83 parse_from_tokens(token_source, tree_sink, grammar::root);
84} 84}
85 85
86/// Parse given tokens into the given sink as a path 86pub enum FragmentKind {
87pub fn parse_path(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 87 Path,
88 parse_from_tokens(token_source, tree_sink, grammar::path); 88 Expr,
89} 89 Statement,
90 90 Type,
91/// Parse given tokens into the given sink as a expression 91 Pattern,
92pub fn parse_expr(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 92 Item,
93 parse_from_tokens(token_source, tree_sink, grammar::expr); 93 Block,
94} 94 Visibility,
95 95 MetaItem,
96/// Parse given tokens into the given sink as a ty 96
97pub fn parse_ty(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 97 // These kinds are used when parsing the result of expansion
98 parse_from_tokens(token_source, tree_sink, grammar::type_); 98 // FIXME: use separate fragment kinds for macro inputs and outputs?
99} 99 Items,
100 100 Statements,
101/// Parse given tokens into the given sink as a pattern 101}
102pub fn parse_pat(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 102
103 parse_from_tokens(token_source, tree_sink, grammar::pattern); 103pub fn parse_fragment(
104}
105
106/// Parse given tokens into the given sink as a statement
107pub fn parse_stmt(
108 token_source: &mut dyn TokenSource, 104 token_source: &mut dyn TokenSource,
109 tree_sink: &mut dyn TreeSink, 105 tree_sink: &mut dyn TreeSink,
110 with_semi: bool, 106 fragment_kind: FragmentKind,
111) { 107) {
112 parse_from_tokens(token_source, tree_sink, |p| grammar::stmt(p, with_semi)); 108 let parser: fn(&'_ mut parser::Parser) = match fragment_kind {
113} 109 FragmentKind::Path => grammar::fragments::path,
114 110 FragmentKind::Expr => grammar::fragments::expr,
115/// Parse given tokens into the given sink as a block 111 FragmentKind::Type => grammar::fragments::type_,
116pub fn parse_block(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 112 FragmentKind::Pattern => grammar::fragments::pattern,
117 parse_from_tokens(token_source, tree_sink, grammar::block); 113 FragmentKind::Item => grammar::fragments::item,
118} 114 FragmentKind::Block => grammar::fragments::block,
119 115 FragmentKind::Visibility => grammar::fragments::opt_visibility,
120pub fn parse_meta(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 116 FragmentKind::MetaItem => grammar::fragments::meta_item,
121 parse_from_tokens(token_source, tree_sink, grammar::meta_item); 117 FragmentKind::Statement => grammar::fragments::stmt,
122} 118 FragmentKind::Items => grammar::fragments::macro_items,
123 119 FragmentKind::Statements => grammar::fragments::macro_stmts,
124/// Parse given tokens into the given sink as an item 120 };
125pub fn parse_item(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) { 121 parse_from_tokens(token_source, tree_sink, parser)
126 parse_from_tokens(token_source, tree_sink, grammar::item);
127}
128
129/// Parse given tokens into the given sink as an visibility qualifier
130pub fn parse_vis(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) {
131 parse_from_tokens(token_source, tree_sink, |p| {
132 grammar::opt_visibility(p);
133 });
134}
135
136pub fn parse_macro_items(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) {
137 parse_from_tokens(token_source, tree_sink, grammar::macro_items);
138}
139
140pub fn parse_macro_stmts(token_source: &mut dyn TokenSource, tree_sink: &mut dyn TreeSink) {
141 parse_from_tokens(token_source, tree_sink, grammar::macro_stmts);
142} 122}
143 123
144/// A parsing function for a specific braced-block. 124/// A parsing function for a specific braced-block.