aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax/src/parsing
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-02-21 10:37:32 +0000
committerAleksey Kladov <[email protected]>2019-02-21 10:37:32 +0000
commitc47f9e2d37d4797550638e2a7a4fd3538e9edae9 (patch)
treeffa9276d91e6bdfc3926322f66e6700e6ebbe3b2 /crates/ra_syntax/src/parsing
parentd334b5a1db9ec6a57f54077d422a3f4b3c8c1178 (diff)
fix compilation
Diffstat (limited to 'crates/ra_syntax/src/parsing')
-rw-r--r--crates/ra_syntax/src/parsing/builder.rs15
-rw-r--r--crates/ra_syntax/src/parsing/input.rs7
-rw-r--r--crates/ra_syntax/src/parsing/reparsing.rs21
3 files changed, 21 insertions, 22 deletions
diff --git a/crates/ra_syntax/src/parsing/builder.rs b/crates/ra_syntax/src/parsing/builder.rs
index 1041c6a7b..0775b0900 100644
--- a/crates/ra_syntax/src/parsing/builder.rs
+++ b/crates/ra_syntax/src/parsing/builder.rs
@@ -1,7 +1,9 @@
1use ra_parser::{TreeSink, ParseError};
2
1use crate::{ 3use crate::{
2 SmolStr, SyntaxError, SyntaxErrorKind, TextUnit, TextRange, 4 SmolStr, SyntaxError, SyntaxErrorKind, TextUnit, TextRange,
3 SyntaxKind::{self, *}, 5 SyntaxKind::{self, *},
4 parsing::{TreeSink, ParseError, Token}, 6 parsing::Token,
5 syntax_node::{GreenNode, RaTypes}, 7 syntax_node::{GreenNode, RaTypes},
6}; 8};
7 9
@@ -17,8 +19,6 @@ pub(crate) struct TreeBuilder<'a> {
17} 19}
18 20
19impl<'a> TreeSink for TreeBuilder<'a> { 21impl<'a> TreeSink for TreeBuilder<'a> {
20 type Tree = (GreenNode, Vec<SyntaxError>);
21
22 fn leaf(&mut self, kind: SyntaxKind, n_tokens: u8) { 22 fn leaf(&mut self, kind: SyntaxKind, n_tokens: u8) {
23 self.eat_trivias(); 23 self.eat_trivias();
24 let n_tokens = n_tokens as usize; 24 let n_tokens = n_tokens as usize;
@@ -65,10 +65,6 @@ impl<'a> TreeSink for TreeBuilder<'a> {
65 let error = SyntaxError::new(SyntaxErrorKind::ParseError(error), self.text_pos); 65 let error = SyntaxError::new(SyntaxErrorKind::ParseError(error), self.text_pos);
66 self.errors.push(error) 66 self.errors.push(error)
67 } 67 }
68
69 fn finish(self) -> (GreenNode, Vec<SyntaxError>) {
70 (self.inner.finish(), self.errors)
71 }
72} 68}
73 69
74impl<'a> TreeBuilder<'a> { 70impl<'a> TreeBuilder<'a> {
@@ -82,6 +78,11 @@ impl<'a> TreeBuilder<'a> {
82 inner: GreenNodeBuilder::new(), 78 inner: GreenNodeBuilder::new(),
83 } 79 }
84 } 80 }
81
82 pub(super) fn finish(self) -> (GreenNode, Vec<SyntaxError>) {
83 (self.inner.finish(), self.errors)
84 }
85
85 fn eat_trivias(&mut self) { 86 fn eat_trivias(&mut self) {
86 while let Some(&token) = self.tokens.get(self.token_pos) { 87 while let Some(&token) = self.tokens.get(self.token_pos) {
87 if !token.kind.is_trivia() { 88 if !token.kind.is_trivia() {
diff --git a/crates/ra_syntax/src/parsing/input.rs b/crates/ra_syntax/src/parsing/input.rs
index 96c03bb11..58be795bc 100644
--- a/crates/ra_syntax/src/parsing/input.rs
+++ b/crates/ra_syntax/src/parsing/input.rs
@@ -1,9 +1,8 @@
1use ra_parser::TokenSource;
2
1use crate::{ 3use crate::{
2 SyntaxKind, SyntaxKind::EOF, TextRange, TextUnit, 4 SyntaxKind, SyntaxKind::EOF, TextRange, TextUnit,
3 parsing::{ 5 parsing::lexer::Token,
4 TokenSource,
5 lexer::Token,
6 },
7}; 6};
8 7
9impl<'t> TokenSource for ParserInput<'t> { 8impl<'t> TokenSource for ParserInput<'t> {
diff --git a/crates/ra_syntax/src/parsing/reparsing.rs b/crates/ra_syntax/src/parsing/reparsing.rs
index 2c860b3df..ffcb512ad 100644
--- a/crates/ra_syntax/src/parsing/reparsing.rs
+++ b/crates/ra_syntax/src/parsing/reparsing.rs
@@ -1,18 +1,18 @@
1use ra_text_edit::AtomTextEdit;
2use ra_parser::Reparser;
3
1use crate::{ 4use crate::{
2 SyntaxKind::*, TextRange, TextUnit, 5 SyntaxKind::*, TextRange, TextUnit,
3 algo, 6 algo,
4 syntax_node::{GreenNode, SyntaxNode}, 7 syntax_node::{GreenNode, SyntaxNode},
5 syntax_error::SyntaxError, 8 syntax_error::SyntaxError,
6 parsing::{ 9 parsing::{
7 grammar, parse_with, 10 input::ParserInput,
8 builder::TreeBuilder, 11 builder::TreeBuilder,
9 parser::Parser,
10 lexer::{tokenize, Token}, 12 lexer::{tokenize, Token},
11 } 13 }
12}; 14};
13 15
14use ra_text_edit::AtomTextEdit;
15
16pub(crate) fn incremental_reparse( 16pub(crate) fn incremental_reparse(
17 node: &SyntaxNode, 17 node: &SyntaxNode,
18 edit: &AtomTextEdit, 18 edit: &AtomTextEdit,
@@ -61,8 +61,10 @@ fn reparse_block<'node>(
61 if !is_balanced(&tokens) { 61 if !is_balanced(&tokens) {
62 return None; 62 return None;
63 } 63 }
64 let tree_sink = TreeBuilder::new(&text, &tokens); 64 let token_source = ParserInput::new(&text, &tokens);
65 let (green, new_errors) = parse_with(tree_sink, &text, &tokens, reparser); 65 let mut tree_sink = TreeBuilder::new(&text, &tokens);
66 reparser.parse(&token_source, &mut tree_sink);
67 let (green, new_errors) = tree_sink.finish();
66 Some((node, green, new_errors)) 68 Some((node, green, new_errors))
67} 69}
68 70
@@ -78,15 +80,12 @@ fn is_contextual_kw(text: &str) -> bool {
78 } 80 }
79} 81}
80 82
81fn find_reparsable_node( 83fn find_reparsable_node(node: &SyntaxNode, range: TextRange) -> Option<(&SyntaxNode, Reparser)> {
82 node: &SyntaxNode,
83 range: TextRange,
84) -> Option<(&SyntaxNode, fn(&mut Parser))> {
85 let node = algo::find_covering_node(node, range); 84 let node = algo::find_covering_node(node, range);
86 node.ancestors().find_map(|node| { 85 node.ancestors().find_map(|node| {
87 let first_child = node.first_child().map(|it| it.kind()); 86 let first_child = node.first_child().map(|it| it.kind());
88 let parent = node.parent().map(|it| it.kind()); 87 let parent = node.parent().map(|it| it.kind());
89 grammar::reparser(node.kind(), first_child, parent).map(|r| (node, r)) 88 Reparser::for_node(node.kind(), first_child, parent).map(|r| (node, r))
90 }) 89 })
91} 90}
92 91