From 87cd57d56aeafa1117a6163249d210f39efe8f28 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 25 Aug 2018 12:10:35 +0300 Subject: Refactor --- crates/libsyntax2/src/lib.rs | 21 +++++++++++---------- crates/libsyntax2/src/yellow/builder.rs | 9 ++++----- 2 files changed, 15 insertions(+), 15 deletions(-) (limited to 'crates/libsyntax2/src') diff --git a/crates/libsyntax2/src/lib.rs b/crates/libsyntax2/src/lib.rs index ab4a40435..01e155855 100644 --- a/crates/libsyntax2/src/lib.rs +++ b/crates/libsyntax2/src/lib.rs @@ -50,16 +50,25 @@ pub use { yellow::{SyntaxNode, SyntaxNodeRef, OwnedRoot, RefRoot, TreeRoot, SyntaxError}, }; +use yellow::{GreenNode, SyntaxRoot}; + #[derive(Clone, Debug)] pub struct File { root: SyntaxNode } impl File { - pub fn parse(text: &str) -> Self { - let root = ::parse(text); + fn new(root: GreenNode, errors: Vec) -> File { + let root = SyntaxRoot::new(root, errors); + let root = SyntaxNode::new_owned(root); + validate_block_structure(root.borrowed()); File { root } } + pub fn parse(text: &str) -> Self { + let tokens = tokenize(&text); + let (root, errors) = parser_impl::parse::(text, &tokens); + File::new(root, errors) + } pub fn ast(&self) -> ast::Root { ast::Root::cast(self.syntax()).unwrap() } @@ -69,14 +78,6 @@ impl File { pub fn errors(&self) -> Vec { self.syntax().root.syntax_root().errors.clone() } - -} - -pub fn parse(text: &str) -> SyntaxNode { - let tokens = tokenize(&text); - let res = parser_impl::parse::(text, &tokens); - validate_block_structure(res.borrowed()); - res } #[cfg(not(debug_assertions))] diff --git a/crates/libsyntax2/src/yellow/builder.rs b/crates/libsyntax2/src/yellow/builder.rs index 5e94e5055..e4ab37899 100644 --- a/crates/libsyntax2/src/yellow/builder.rs +++ b/crates/libsyntax2/src/yellow/builder.rs @@ -1,6 +1,6 @@ use { parser_impl::Sink, - yellow::{GreenNode, SyntaxError, SyntaxNode, SyntaxRoot}, + yellow::{GreenNode, SyntaxError}, SyntaxKind, TextRange, TextUnit, }; @@ -13,7 +13,7 @@ pub(crate) struct GreenBuilder<'a> { } impl<'a> Sink<'a> for GreenBuilder<'a> { - type Tree = SyntaxNode; + type Tree = (GreenNode, Vec); fn new(text: &'a str) -> Self { GreenBuilder { @@ -56,10 +56,9 @@ impl<'a> Sink<'a> for GreenBuilder<'a> { }) } - fn finish(mut self) -> SyntaxNode { + fn finish(mut self) -> (GreenNode, Vec) { assert_eq!(self.children.len(), 1); let root = self.children.pop().unwrap(); - let root = SyntaxRoot::new(root, self.errors); - SyntaxNode::new_owned(root) + (root, self.errors) } } -- cgit v1.2.3