diff options
author | Aleksey Kladov <[email protected]> | 2019-02-21 10:37:32 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-02-21 10:37:32 +0000 |
commit | c47f9e2d37d4797550638e2a7a4fd3538e9edae9 (patch) | |
tree | ffa9276d91e6bdfc3926322f66e6700e6ebbe3b2 /crates/ra_syntax/src/parsing | |
parent | d334b5a1db9ec6a57f54077d422a3f4b3c8c1178 (diff) |
fix compilation
Diffstat (limited to 'crates/ra_syntax/src/parsing')
-rw-r--r-- | crates/ra_syntax/src/parsing/builder.rs | 15 | ||||
-rw-r--r-- | crates/ra_syntax/src/parsing/input.rs | 7 | ||||
-rw-r--r-- | crates/ra_syntax/src/parsing/reparsing.rs | 21 |
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 @@ | |||
1 | use ra_parser::{TreeSink, ParseError}; | ||
2 | |||
1 | use crate::{ | 3 | use 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 | ||
19 | impl<'a> TreeSink for TreeBuilder<'a> { | 21 | impl<'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 | ||
74 | impl<'a> TreeBuilder<'a> { | 70 | impl<'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 @@ | |||
1 | use ra_parser::TokenSource; | ||
2 | |||
1 | use crate::{ | 3 | use 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 | ||
9 | impl<'t> TokenSource for ParserInput<'t> { | 8 | impl<'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 @@ | |||
1 | use ra_text_edit::AtomTextEdit; | ||
2 | use ra_parser::Reparser; | ||
3 | |||
1 | use crate::{ | 4 | use 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 | ||
14 | use ra_text_edit::AtomTextEdit; | ||
15 | |||
16 | pub(crate) fn incremental_reparse( | 16 | pub(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 | ||
81 | fn find_reparsable_node( | 83 | fn 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 | ||