From b177813f3bef708636ec4be271e376b111c36a59 Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Mon, 22 Apr 2019 15:33:55 +0800 Subject: Add mbe expand limit and poision macro set --- crates/ra_mbe/src/subtree_parser.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'crates/ra_mbe') diff --git a/crates/ra_mbe/src/subtree_parser.rs b/crates/ra_mbe/src/subtree_parser.rs index 528aa0f8a..f07107414 100644 --- a/crates/ra_mbe/src/subtree_parser.rs +++ b/crates/ra_mbe/src/subtree_parser.rs @@ -5,6 +5,7 @@ use ra_syntax::{SyntaxKind}; struct OffsetTokenSink { token_pos: usize, + error: bool, } impl TreeSink for OffsetTokenSink { @@ -13,7 +14,9 @@ impl TreeSink for OffsetTokenSink { } fn start_node(&mut self, _kind: SyntaxKind) {} fn finish_node(&mut self) {} - fn error(&mut self, _error: ra_parser::ParseError) {} + fn error(&mut self, _error: ra_parser::ParseError) { + self.error = true; + } } pub(crate) struct Parser<'a> { @@ -67,11 +70,15 @@ impl<'a> Parser<'a> { F: FnOnce(&dyn TokenSource, &mut dyn TreeSink), { let mut src = SubtreeTokenSource::new(&self.subtree.token_trees[*self.cur_pos..]); - let mut sink = OffsetTokenSink { token_pos: 0 }; + let mut sink = OffsetTokenSink { token_pos: 0, error: false }; f(&src, &mut sink); - self.finish(sink.token_pos, &mut src) + let r = self.finish(sink.token_pos, &mut src); + if sink.error { + return None; + } + r } fn finish(self, parsed_token: usize, src: &mut SubtreeTokenSource) -> Option { -- cgit v1.2.3