Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/syntax_editor.rs')
| -rw-r--r-- | crates/syntax/src/syntax_editor.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/crates/syntax/src/syntax_editor.rs b/crates/syntax/src/syntax_editor.rs index 7f499a241b..c536f8ce14 100644 --- a/crates/syntax/src/syntax_editor.rs +++ b/crates/syntax/src/syntax_editor.rs @@ -133,7 +133,19 @@ impl SyntaxEditor { !matches!(&element, SyntaxElement::Node(node) if node == &self.root), "should not delete root node" ); - self.changes.borrow_mut().push(Change::Replace(element.syntax_element(), None)); + let mut changes = self.changes.borrow_mut(); + for change in changes.iter_mut() { + if let Change::Replace(existing, replacement) = change + && *existing == element + { + if replacement.is_none() { + return; + } + *replacement = None; + return; + } + } + changes.push(Change::Replace(element, None)); } pub fn delete_all(&self, range: RangeInclusive<SyntaxElement>) { |