summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2022-02-03 11:31:53 +0100
committerMartin Haug <mhaug@live.de>2022-02-03 11:31:53 +0100
commite32e9faa53e6c89a4555306a6c40186e58e01b6c (patch)
treedfa685a1cb4396037d909b5055318bb98800890b /src
parent6a6753cb69f7c29e857fd465eecf66a02ff76aa3 (diff)
Fix incremental group bug
Diffstat (limited to 'src')
-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.