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.rs29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 3814837e1..26fbb6e3d 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -1,7 +1,3 @@
1use {File, SyntaxKind, Token};
2
3use syntax_kinds::*;
4
5#[macro_use] 1#[macro_use]
6mod token_set; 2mod token_set;
7mod parser; 3mod parser;
@@ -9,6 +5,16 @@ mod input;
9mod event; 5mod event;
10mod grammar; 6mod grammar;
11 7
8use std::sync::Arc;
9use {
10 File, SyntaxKind, Token,
11 yellow::SyntaxNode,
12 syntax_kinds::*
13};
14use GreenBuilder;
15use parser::event::process;
16
17
12/// Parse a sequence of tokens into the representative node tree 18/// Parse a sequence of tokens into the representative node tree
13pub fn parse(text: String, tokens: &[Token]) -> File { 19pub fn parse(text: String, tokens: &[Token]) -> File {
14 let events = { 20 let events = {
@@ -21,6 +27,21 @@ pub fn parse(text: String, tokens: &[Token]) -> File {
21 event::to_file(text, tokens, events) 27 event::to_file(text, tokens, events)
22} 28}
23 29
30/// Parse a sequence of tokens into the representative node tree
31pub fn parse_green(text: String, tokens: &[Token]) -> SyntaxNode {
32 let events = {
33 let input = input::ParserInput::new(&text, tokens);
34 let parser_impl = parser::imp::ParserImpl::new(&input);
35 let mut parser = parser::Parser(parser_impl);
36 grammar::file(&mut parser);
37 parser.0.into_events()
38 };
39 let mut builder = GreenBuilder::new(text);
40 process(&mut builder, tokens, events);
41 let (green, errors) = builder.finish();
42 SyntaxNode::new(Arc::new(green), errors)
43}
44
24fn is_insignificant(kind: SyntaxKind) -> bool { 45fn is_insignificant(kind: SyntaxKind) -> bool {
25 match kind { 46 match kind {
26 WHITESPACE | COMMENT => true, 47 WHITESPACE | COMMENT => true,