diff options
Diffstat (limited to 'crates/ra_syntax')
| -rw-r--r-- | crates/ra_syntax/src/parsing.rs | 9 | ||||
| -rw-r--r-- | crates/ra_syntax/src/parsing/builder.rs | 19 | ||||
| -rw-r--r-- | crates/ra_syntax/src/parsing/event.rs | 11 | ||||
| -rw-r--r-- | crates/ra_syntax/src/parsing/parser.rs | 3 | ||||
| -rw-r--r-- | crates/ra_syntax/src/parsing/reparsing.rs | 2 | ||||
| -rw-r--r-- | crates/ra_syntax/src/syntax_error.rs | 5 |
6 files changed, 24 insertions, 25 deletions
diff --git a/crates/ra_syntax/src/parsing.rs b/crates/ra_syntax/src/parsing.rs index 941ec501e..138d1394a 100644 --- a/crates/ra_syntax/src/parsing.rs +++ b/crates/ra_syntax/src/parsing.rs | |||
| @@ -9,7 +9,7 @@ mod grammar; | |||
| 9 | mod reparsing; | 9 | mod reparsing; |
| 10 | 10 | ||
| 11 | use crate::{ | 11 | use crate::{ |
| 12 | SyntaxError, SyntaxKind, SmolStr, | 12 | SyntaxKind, SmolStr, SyntaxError, |
| 13 | parsing::{ | 13 | parsing::{ |
| 14 | builder::GreenBuilder, | 14 | builder::GreenBuilder, |
| 15 | input::ParserInput, | 15 | input::ParserInput, |
| @@ -21,11 +21,14 @@ use crate::{ | |||
| 21 | 21 | ||
| 22 | pub use self::lexer::{tokenize, Token}; | 22 | pub use self::lexer::{tokenize, Token}; |
| 23 | 23 | ||
| 24 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
| 25 | pub struct ParseError(pub String); | ||
| 26 | |||
| 24 | pub(crate) use self::reparsing::incremental_reparse; | 27 | pub(crate) use self::reparsing::incremental_reparse; |
| 25 | 28 | ||
| 26 | pub(crate) fn parse_text(text: &str) -> (GreenNode, Vec<SyntaxError>) { | 29 | pub(crate) fn parse_text(text: &str) -> (GreenNode, Vec<SyntaxError>) { |
| 27 | let tokens = tokenize(&text); | 30 | let tokens = tokenize(&text); |
| 28 | parse_with(GreenBuilder::new(), text, &tokens, grammar::root) | 31 | parse_with(GreenBuilder::default(), text, &tokens, grammar::root) |
| 29 | } | 32 | } |
| 30 | 33 | ||
| 31 | fn parse_with<S: TreeSink>( | 34 | fn parse_with<S: TreeSink>( |
| @@ -57,7 +60,7 @@ trait TreeSink { | |||
| 57 | /// branch as current. | 60 | /// branch as current. |
| 58 | fn finish_branch(&mut self); | 61 | fn finish_branch(&mut self); |
| 59 | 62 | ||
| 60 | fn error(&mut self, error: SyntaxError); | 63 | fn error(&mut self, error: ParseError); |
| 61 | 64 | ||
| 62 | /// Complete tree building. Make sure that | 65 | /// Complete tree building. Make sure that |
| 63 | /// `start_branch` and `finish_branch` calls | 66 | /// `start_branch` and `finish_branch` calls |
diff --git a/crates/ra_syntax/src/parsing/builder.rs b/crates/ra_syntax/src/parsing/builder.rs index a05e7f84b..ee0e2cce7 100644 --- a/crates/ra_syntax/src/parsing/builder.rs +++ b/crates/ra_syntax/src/parsing/builder.rs | |||
| @@ -1,19 +1,24 @@ | |||
| 1 | use crate::{ | 1 | use crate::{ |
| 2 | parsing::TreeSink, | 2 | SmolStr, SyntaxKind, SyntaxError, SyntaxErrorKind, TextUnit, |
| 3 | parsing::{TreeSink, ParseError}, | ||
| 3 | syntax_node::{GreenNode, RaTypes}, | 4 | syntax_node::{GreenNode, RaTypes}, |
| 4 | SmolStr, SyntaxKind, SyntaxError, | ||
| 5 | }; | 5 | }; |
| 6 | 6 | ||
| 7 | use rowan::GreenNodeBuilder; | 7 | use rowan::GreenNodeBuilder; |
| 8 | 8 | ||
| 9 | pub(crate) struct GreenBuilder { | 9 | pub(crate) struct GreenBuilder { |
| 10 | text_pos: TextUnit, | ||
| 10 | errors: Vec<SyntaxError>, | 11 | errors: Vec<SyntaxError>, |
| 11 | inner: GreenNodeBuilder<RaTypes>, | 12 | inner: GreenNodeBuilder<RaTypes>, |
| 12 | } | 13 | } |
| 13 | 14 | ||
| 14 | impl GreenBuilder { | 15 | impl Default for GreenBuilder { |
| 15 | pub(crate) fn new() -> GreenBuilder { | 16 | fn default() -> GreenBuilder { |
| 16 | GreenBuilder { errors: Vec::new(), inner: GreenNodeBuilder::new() } | 17 | GreenBuilder { |
| 18 | text_pos: TextUnit::default(), | ||
| 19 | errors: Vec::new(), | ||
| 20 | inner: GreenNodeBuilder::new(), | ||
| 21 | } | ||
| 17 | } | 22 | } |
| 18 | } | 23 | } |
| 19 | 24 | ||
| @@ -21,6 +26,7 @@ impl TreeSink for GreenBuilder { | |||
| 21 | type Tree = (GreenNode, Vec<SyntaxError>); | 26 | type Tree = (GreenNode, Vec<SyntaxError>); |
| 22 | 27 | ||
| 23 | fn leaf(&mut self, kind: SyntaxKind, text: SmolStr) { | 28 | fn leaf(&mut self, kind: SyntaxKind, text: SmolStr) { |
| 29 | self.text_pos += TextUnit::of_str(text.as_str()); | ||
| 24 | self.inner.leaf(kind, text); | 30 | self.inner.leaf(kind, text); |
| 25 | } | 31 | } |
| 26 | 32 | ||
| @@ -32,7 +38,8 @@ impl TreeSink for GreenBuilder { | |||
| 32 | self.inner.finish_internal(); | 38 | self.inner.finish_internal(); |
| 33 | } | 39 | } |
| 34 | 40 | ||
| 35 | fn error(&mut self, error: SyntaxError) { | 41 | fn error(&mut self, error: ParseError) { |
| 42 | let error = SyntaxError::new(SyntaxErrorKind::ParseError(error), self.text_pos); | ||
| 36 | self.errors.push(error) | 43 | self.errors.push(error) |
| 37 | } | 44 | } |
| 38 | 45 | ||
diff --git a/crates/ra_syntax/src/parsing/event.rs b/crates/ra_syntax/src/parsing/event.rs index 893a42e9a..f6f020eab 100644 --- a/crates/ra_syntax/src/parsing/event.rs +++ b/crates/ra_syntax/src/parsing/event.rs | |||
| @@ -13,14 +13,9 @@ use crate::{ | |||
| 13 | SmolStr, | 13 | SmolStr, |
| 14 | SyntaxKind::{self, *}, | 14 | SyntaxKind::{self, *}, |
| 15 | TextRange, TextUnit, | 15 | TextRange, TextUnit, |
| 16 | syntax_error::{ | ||
| 17 | ParseError, | ||
| 18 | SyntaxError, | ||
| 19 | SyntaxErrorKind, | ||
| 20 | }, | ||
| 21 | parsing::{ | 16 | parsing::{ |
| 17 | ParseError, TreeSink, | ||
| 22 | lexer::Token, | 18 | lexer::Token, |
| 23 | TreeSink, | ||
| 24 | }, | 19 | }, |
| 25 | }; | 20 | }; |
| 26 | 21 | ||
| @@ -159,9 +154,7 @@ impl<'a, S: TreeSink> EventProcessor<'a, S> { | |||
| 159 | .sum::<TextUnit>(); | 154 | .sum::<TextUnit>(); |
| 160 | self.leaf(kind, len, n_raw_tokens); | 155 | self.leaf(kind, len, n_raw_tokens); |
| 161 | } | 156 | } |
| 162 | Event::Error { msg } => self | 157 | Event::Error { msg } => self.sink.error(msg), |
| 163 | .sink | ||
| 164 | .error(SyntaxError::new(SyntaxErrorKind::ParseError(msg), self.text_pos)), | ||
| 165 | } | 158 | } |
| 166 | } | 159 | } |
| 167 | self.sink | 160 | self.sink |
diff --git a/crates/ra_syntax/src/parsing/parser.rs b/crates/ra_syntax/src/parsing/parser.rs index 988fcb518..923b0f2b2 100644 --- a/crates/ra_syntax/src/parsing/parser.rs +++ b/crates/ra_syntax/src/parsing/parser.rs | |||
| @@ -3,10 +3,9 @@ use std::cell::Cell; | |||
| 3 | use drop_bomb::DropBomb; | 3 | use drop_bomb::DropBomb; |
| 4 | 4 | ||
| 5 | use crate::{ | 5 | use crate::{ |
| 6 | syntax_error::ParseError, | ||
| 7 | SyntaxKind::{self, ERROR, EOF, TOMBSTONE}, | 6 | SyntaxKind::{self, ERROR, EOF, TOMBSTONE}, |
| 8 | parsing::{ | 7 | parsing::{ |
| 9 | TokenSource, | 8 | TokenSource, ParseError, |
| 10 | token_set::TokenSet, | 9 | token_set::TokenSet, |
| 11 | event::Event, | 10 | event::Event, |
| 12 | }, | 11 | }, |
diff --git a/crates/ra_syntax/src/parsing/reparsing.rs b/crates/ra_syntax/src/parsing/reparsing.rs index 674b15f9a..f2d218ab9 100644 --- a/crates/ra_syntax/src/parsing/reparsing.rs +++ b/crates/ra_syntax/src/parsing/reparsing.rs | |||
| @@ -61,7 +61,7 @@ fn reparse_block<'node>( | |||
| 61 | if !is_balanced(&tokens) { | 61 | if !is_balanced(&tokens) { |
| 62 | return None; | 62 | return None; |
| 63 | } | 63 | } |
| 64 | let (green, new_errors) = parse_with(GreenBuilder::new(), &text, &tokens, reparser); | 64 | let (green, new_errors) = parse_with(GreenBuilder::default(), &text, &tokens, reparser); |
| 65 | Some((node, green, new_errors)) | 65 | Some((node, green, new_errors)) |
| 66 | } | 66 | } |
| 67 | 67 | ||
diff --git a/crates/ra_syntax/src/syntax_error.rs b/crates/ra_syntax/src/syntax_error.rs index 4ff998090..1a00fcc27 100644 --- a/crates/ra_syntax/src/syntax_error.rs +++ b/crates/ra_syntax/src/syntax_error.rs | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | use std::fmt; | 1 | use std::fmt; |
| 2 | 2 | ||
| 3 | use crate::{TextRange, TextUnit}; | 3 | use crate::{TextRange, TextUnit, parsing::ParseError}; |
| 4 | 4 | ||
| 5 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 5 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
| 6 | pub struct SyntaxError { | 6 | pub struct SyntaxError { |
| @@ -95,9 +95,6 @@ pub enum SyntaxErrorKind { | |||
| 95 | InvalidMatchInnerAttr, | 95 | InvalidMatchInnerAttr, |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | ||
| 99 | pub struct ParseError(pub String); | ||
| 100 | |||
| 101 | impl fmt::Display for SyntaxErrorKind { | 98 | impl fmt::Display for SyntaxErrorKind { |
| 102 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | 99 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
| 103 | use self::SyntaxErrorKind::*; | 100 | use self::SyntaxErrorKind::*; |
