From 0ae26c344aa7477a18c2019cfa0062a9a745d70d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 9 Feb 2018 22:44:50 +0300 Subject: Drop ErrorBuilder nonsense --- src/tree/file_builder.rs | 45 +++++++++++++-------------------------------- src/tree/mod.rs | 2 +- 2 files changed, 14 insertions(+), 33 deletions(-) (limited to 'src/tree') diff --git a/src/tree/file_builder.rs b/src/tree/file_builder.rs index 47038496d..81702b83e 100644 --- a/src/tree/file_builder.rs +++ b/src/tree/file_builder.rs @@ -14,7 +14,7 @@ pub(crate) trait Sink { fn leaf(&mut self, kind: SyntaxKind, len: TextUnit); fn start_internal(&mut self, kind: SyntaxKind); fn finish_internal(&mut self); - fn error(&mut self) -> ErrorBuilder; + fn error(&mut self, err: ErrorMsg); } #[derive(Debug)] @@ -22,7 +22,8 @@ pub(crate) struct FileBuilder { text: String, nodes: Vec, errors: Vec, - in_progress: Vec<(NodeIdx, Option)>, // (parent, last_child) + in_progress: Vec<(NodeIdx, Option)>, + // (parent, last_child) pos: TextUnit, } @@ -65,8 +66,13 @@ impl Sink for FileBuilder { } } - fn error(&mut self) -> ErrorBuilder { - ErrorBuilder::new(self) + fn error(&mut self, err: ErrorMsg) { + let &(node, after_child) = self.in_progress.last().unwrap(); + self.errors.push(SyntaxErrorData { + node, + message: err.message, + after_child, + }) } } @@ -149,32 +155,7 @@ fn grow(left: &mut TextRange, right: TextRange) { *left = TextRange::from_to(left.start(), right.end()) } -#[derive(Debug)] -pub struct ErrorBuilder<'f> { - message: Option, - builder: &'f mut FileBuilder, -} - -impl<'f> ErrorBuilder<'f> { - fn new(builder: &'f mut FileBuilder) -> Self { - ErrorBuilder { - message: None, - builder, - } - } - - pub fn message>(mut self, m: M) -> Self { - self.message = Some(m.into()); - self - } - - pub fn emit(self) { - let message = self.message.expect("Error message not set"); - let &(node, after_child) = self.builder.in_progress.last().unwrap(); - self.builder.errors.push(SyntaxErrorData { - node, - message, - after_child, - }) - } +#[derive(Default)] +pub(crate) struct ErrorMsg { + pub(crate) message: String } diff --git a/src/tree/mod.rs b/src/tree/mod.rs index 9ed0504c7..b7ed59793 100644 --- a/src/tree/mod.rs +++ b/src/tree/mod.rs @@ -4,7 +4,7 @@ use std::fmt; use std::cmp; mod file_builder; -pub(crate) use self::file_builder::{FileBuilder, Sink}; +pub(crate) use self::file_builder::{FileBuilder, Sink, ErrorMsg}; pub use syntax_kinds::SyntaxKind; -- cgit v1.2.3