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.rs33
1 files changed, 26 insertions, 7 deletions
diff --git a/crates/ra_parser/src/lib.rs b/crates/ra_parser/src/lib.rs
index 3ceeeebd7..56755c394 100644
--- a/crates/ra_parser/src/lib.rs
+++ b/crates/ra_parser/src/lib.rs
@@ -53,20 +53,39 @@ pub trait TreeSink {
53 fn error(&mut self, error: ParseError); 53 fn error(&mut self, error: ParseError);
54} 54}
55 55
56/// Parse given tokens into the given sink as a rust file. 56fn parse_from_tokens<F>(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink, f: F)
57pub fn parse(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) { 57where
58 F: FnOnce(&mut parser::Parser),
59{
58 let mut p = parser::Parser::new(token_source); 60 let mut p = parser::Parser::new(token_source);
59 grammar::root(&mut p); 61 f(&mut p);
60 let events = p.finish(); 62 let events = p.finish();
61 event::process(tree_sink, events); 63 event::process(tree_sink, events);
62} 64}
63 65
66/// Parse given tokens into the given sink as a rust file.
67pub fn parse(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) {
68 parse_from_tokens(token_source, tree_sink, grammar::root);
69}
70
64/// Parse given tokens into the given sink as a path 71/// Parse given tokens into the given sink as a path
65pub fn parse_path(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) { 72pub fn parse_path(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) {
66 let mut p = parser::Parser::new(token_source); 73 parse_from_tokens(token_source, tree_sink, grammar::path);
67 grammar::path(&mut p); 74}
68 let events = p.finish(); 75
69 event::process(tree_sink, events); 76/// Parse given tokens into the given sink as a expression
77pub fn parse_expr(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) {
78 parse_from_tokens(token_source, tree_sink, grammar::expr);
79}
80
81/// Parse given tokens into the given sink as a ty
82pub fn parse_ty(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) {
83 parse_from_tokens(token_source, tree_sink, grammar::type_);
84}
85
86/// Parse given tokens into the given sink as a pattern
87pub fn parse_pat(token_source: &dyn TokenSource, tree_sink: &mut dyn TreeSink) {
88 parse_from_tokens(token_source, tree_sink, grammar::pattern);
70} 89}
71 90
72/// A parsing function for a specific braced-block. 91/// A parsing function for a specific braced-block.