⬆️ rowan

It now stores text inline with tokens
This commit is contained in:
Aleksey Kladov 2021-01-20 14:04:53 +03:00
parent 46b4f89c92
commit 3429b32ad1
7 changed files with 12 additions and 17 deletions

View file

@ -56,9 +56,9 @@ pub use crate::{
};
pub use parser::{SyntaxKind, T};
pub use rowan::{
Direction, GreenNode, NodeOrToken, SmolStr, SyntaxText, TextRange, TextSize, TokenAtOffset,
WalkEvent,
Direction, GreenNode, NodeOrToken, SyntaxText, TextRange, TextSize, TokenAtOffset, WalkEvent,
};
pub use smol_str::SmolStr;
/// `Parse` is the result of the parsing: a syntax tree and a collection of
/// errors.

View file

@ -73,8 +73,7 @@ fn reparse_token<'node>(
new_text.pop();
}
let new_token =
GreenToken::new(rowan::SyntaxKind(prev_token_kind.into()), new_text.into());
let new_token = GreenToken::new(rowan::SyntaxKind(prev_token_kind.into()), &new_text);
Some((
prev_token.replace_with(new_token),
new_err.into_iter().collect(),

View file

@ -8,7 +8,7 @@ use crate::{
ast,
parsing::Token,
syntax_node::GreenNode,
SmolStr, SyntaxError,
SyntaxError,
SyntaxKind::{self, *},
SyntaxTreeBuilder, TextRange, TextSize,
};
@ -135,7 +135,7 @@ impl<'a> TextTreeSink<'a> {
fn do_token(&mut self, kind: SyntaxKind, len: TextSize, n_tokens: usize) {
let range = TextRange::at(self.text_pos, len);
let text: SmolStr = self.text[range].into();
let text = &self.text[range];
self.text_pos += len;
self.token_pos += n_tokens;
self.inner.token(kind, text);

View file

@ -8,7 +8,7 @@
use rowan::{GreenNodeBuilder, Language};
use crate::{Parse, SmolStr, SyntaxError, SyntaxKind, TextSize};
use crate::{Parse, SyntaxError, SyntaxKind, TextSize};
pub(crate) use rowan::{GreenNode, GreenToken, NodeOrToken};
@ -53,7 +53,7 @@ impl SyntaxTreeBuilder {
Parse::new(green, errors)
}
pub fn token(&mut self, kind: SyntaxKind, text: SmolStr) {
pub fn token(&mut self, kind: SyntaxKind, text: &str) {
let kind = RustLanguage::kind_to_raw(kind);
self.inner.token(kind, text)
}