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 ++++----- crates/libsyntax2/tests/test/main.rs | 6 ++++-- 3 files changed, 19 insertions(+), 17 deletions(-) (limited to 'crates/libsyntax2') 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) } } diff --git a/crates/libsyntax2/tests/test/main.rs b/crates/libsyntax2/tests/test/main.rs index 7e5dc32d9..18c711aee 100644 --- a/crates/libsyntax2/tests/test/main.rs +++ b/crates/libsyntax2/tests/test/main.rs @@ -9,6 +9,8 @@ use std::{ fmt::Write, }; +use libsyntax2::File; + #[test] fn lexer_tests() { dir_tests(&["lexer"], |text| { @@ -20,8 +22,8 @@ fn lexer_tests() { #[test] fn parser_tests() { dir_tests(&["parser/inline", "parser/ok", "parser/err"], |text| { - let file = libsyntax2::parse(text); - libsyntax2::utils::dump_tree(file.borrowed()) + let file = File::parse(text); + libsyntax2::utils::dump_tree(file.syntax()) }) } -- cgit v1.2.3