Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/syntax_editor/edit_algo.rs')
-rw-r--r--crates/syntax/src/syntax_editor/edit_algo.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/crates/syntax/src/syntax_editor/edit_algo.rs b/crates/syntax/src/syntax_editor/edit_algo.rs
index 71b69dbec1..57ecbe5701 100644
--- a/crates/syntax/src/syntax_editor/edit_algo.rs
+++ b/crates/syntax/src/syntax_editor/edit_algo.rs
@@ -155,6 +155,12 @@ pub(super) fn apply_edits(editor: SyntaxEditor) -> SyntaxEdit {
}
};
}
+ Change::Replace(SyntaxElement::Node(target), Some(SyntaxElement::Node(new_target))) => {
+ *target = tree_mutator.make_syntax_mut(target);
+ if new_target.ancestors().any(|node| node == tree_mutator.immutable) {
+ *new_target = new_target.clone_for_update();
+ }
+ }
Change::Replace(target, _) | Change::ReplaceWithMany(target, _) => {
*target = tree_mutator.make_element_mut(target);
}