mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
move syntax error to parser
This commit is contained in:
parent
61992dc1cd
commit
882c47f187
6 changed files with 24 additions and 25 deletions
|
@ -1,19 +1,24 @@
|
|||
use crate::{
|
||||
parsing::TreeSink,
|
||||
SmolStr, SyntaxKind, SyntaxError, SyntaxErrorKind, TextUnit,
|
||||
parsing::{TreeSink, ParseError},
|
||||
syntax_node::{GreenNode, RaTypes},
|
||||
SmolStr, SyntaxKind, SyntaxError,
|
||||
};
|
||||
|
||||
use rowan::GreenNodeBuilder;
|
||||
|
||||
pub(crate) struct GreenBuilder {
|
||||
text_pos: TextUnit,
|
||||
errors: Vec<SyntaxError>,
|
||||
inner: GreenNodeBuilder<RaTypes>,
|
||||
}
|
||||
|
||||
impl GreenBuilder {
|
||||
pub(crate) fn new() -> GreenBuilder {
|
||||
GreenBuilder { errors: Vec::new(), inner: GreenNodeBuilder::new() }
|
||||
impl Default for GreenBuilder {
|
||||
fn default() -> GreenBuilder {
|
||||
GreenBuilder {
|
||||
text_pos: TextUnit::default(),
|
||||
errors: Vec::new(),
|
||||
inner: GreenNodeBuilder::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,6 +26,7 @@ impl TreeSink for GreenBuilder {
|
|||
type Tree = (GreenNode, Vec<SyntaxError>);
|
||||
|
||||
fn leaf(&mut self, kind: SyntaxKind, text: SmolStr) {
|
||||
self.text_pos += TextUnit::of_str(text.as_str());
|
||||
self.inner.leaf(kind, text);
|
||||
}
|
||||
|
||||
|
@ -32,7 +38,8 @@ impl TreeSink for GreenBuilder {
|
|||
self.inner.finish_internal();
|
||||
}
|
||||
|
||||
fn error(&mut self, error: SyntaxError) {
|
||||
fn error(&mut self, error: ParseError) {
|
||||
let error = SyntaxError::new(SyntaxErrorKind::ParseError(error), self.text_pos);
|
||||
self.errors.push(error)
|
||||
}
|
||||
|
||||
|
|
|
@ -13,14 +13,9 @@ use crate::{
|
|||
SmolStr,
|
||||
SyntaxKind::{self, *},
|
||||
TextRange, TextUnit,
|
||||
syntax_error::{
|
||||
ParseError,
|
||||
SyntaxError,
|
||||
SyntaxErrorKind,
|
||||
},
|
||||
parsing::{
|
||||
ParseError, TreeSink,
|
||||
lexer::Token,
|
||||
TreeSink,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -159,9 +154,7 @@ impl<'a, S: TreeSink> EventProcessor<'a, S> {
|
|||
.sum::<TextUnit>();
|
||||
self.leaf(kind, len, n_raw_tokens);
|
||||
}
|
||||
Event::Error { msg } => self
|
||||
.sink
|
||||
.error(SyntaxError::new(SyntaxErrorKind::ParseError(msg), self.text_pos)),
|
||||
Event::Error { msg } => self.sink.error(msg),
|
||||
}
|
||||
}
|
||||
self.sink
|
||||
|
|
|
@ -3,10 +3,9 @@ use std::cell::Cell;
|
|||
use drop_bomb::DropBomb;
|
||||
|
||||
use crate::{
|
||||
syntax_error::ParseError,
|
||||
SyntaxKind::{self, ERROR, EOF, TOMBSTONE},
|
||||
parsing::{
|
||||
TokenSource,
|
||||
TokenSource, ParseError,
|
||||
token_set::TokenSet,
|
||||
event::Event,
|
||||
},
|
||||
|
|
|
@ -61,7 +61,7 @@ fn reparse_block<'node>(
|
|||
if !is_balanced(&tokens) {
|
||||
return None;
|
||||
}
|
||||
let (green, new_errors) = parse_with(GreenBuilder::new(), &text, &tokens, reparser);
|
||||
let (green, new_errors) = parse_with(GreenBuilder::default(), &text, &tokens, reparser);
|
||||
Some((node, green, new_errors))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue