summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse/incremental.rs2
-rw-r--r--src/parse/parser.rs10
2 files changed, 7 insertions, 5 deletions
diff --git a/src/parse/incremental.rs b/src/parse/incremental.rs
index a347f6ca..5a366664 100644
--- a/src/parse/incremental.rs
+++ b/src/parse/incremental.rs
@@ -690,5 +690,7 @@ mod tests {
test("[hello]", 2 .. 3, "]", 0 .. 7);
test("{a}", 1 .. 2, "b", 1 .. 2);
test("{ a; b; c }", 5 .. 6, "[}]", 0 .. 13);
+ test("#a()\n~", 3..4, "{}", 0..7);
+ test("[]\n~", 1..2, "#if i==0 {true}", 0..18);
}
}
diff --git a/src/parse/parser.rs b/src/parse/parser.rs
index 6c73d7dd..e495dbd0 100644
--- a/src/parse/parser.rs
+++ b/src/parse/parser.rs
@@ -267,11 +267,6 @@ impl<'s> Parser<'s> {
/// This panics if no group was started.
#[track_caller]
pub fn end_group(&mut self) {
- // If another group closes after a group with the missing terminator,
- // its scope of influence ends here and no longer taints the rest of the
- // reparse.
- self.unterminated_group = false;
-
let group_mode = self.tokens.mode();
let group = self.groups.pop().expect("no started group");
self.tokens.set_mode(group.prev_mode);
@@ -289,6 +284,11 @@ impl<'s> Parser<'s> {
Group::Imports => None,
} {
if self.current.as_ref() == Some(&end) {
+ // If another group closes after a group with the missing terminator,
+ // its scope of influence ends here and no longer taints the rest of the
+ // reparse.
+ self.unterminated_group = false;
+
// Bump the delimeter and return. No need to rescan in this
// case. Also, we know that the delimiter is not stray even
// though we already removed the group.