aboutsummaryrefslogtreecommitdiff
path: root/src/parser/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/mod.rs')
-rw-r--r--src/parser/mod.rs26
1 files changed, 8 insertions, 18 deletions
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index b7d5e5832..e72ab05af 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -5,18 +5,16 @@ mod input;
5mod event; 5mod event;
6mod grammar; 6mod grammar;
7 7
8use std::sync::Arc;
9use { 8use {
10 Token, 9 lexer::Token,
11 yellow::SyntaxNode, 10 parser::event::{process}
12 syntax_kinds::*
13}; 11};
14use GreenBuilder; 12
15use parser::event::process; 13pub(crate) use self::event::Sink;
16 14
17 15
18/// Parse a sequence of tokens into the representative node tree 16/// Parse a sequence of tokens into the representative node tree
19pub fn parse_green(text: String, tokens: &[Token]) -> SyntaxNode { 17pub(crate) fn parse<S: Sink>(text: String, tokens: &[Token]) -> S::Tree {
20 let events = { 18 let events = {
21 let input = input::ParserInput::new(&text, tokens); 19 let input = input::ParserInput::new(&text, tokens);
22 let parser_impl = parser::imp::ParserImpl::new(&input); 20 let parser_impl = parser::imp::ParserImpl::new(&input);
@@ -24,15 +22,7 @@ pub fn parse_green(text: String, tokens: &[Token]) -> SyntaxNode {
24 grammar::file(&mut parser); 22 grammar::file(&mut parser);
25 parser.0.into_events() 23 parser.0.into_events()
26 }; 24 };
27 let mut builder = GreenBuilder::new(text); 25 let mut sink = S::new(text);
28 process(&mut builder, tokens, events); 26 process(&mut sink, tokens, events);
29 let (green, errors) = builder.finish(); 27 sink.finish()
30 SyntaxNode::new(Arc::new(green), errors)
31}
32
33fn is_insignificant(kind: SyntaxKind) -> bool {
34 match kind {
35 WHITESPACE | COMMENT => true,
36 _ => false,
37 }
38} 28}