fix: handle more cases of editing subtrees that depend on column values
(cherry picked from commit a83b893016)
This commit is contained in:
parent
77794c558f
commit
d10308528d
5 changed files with 137 additions and 3 deletions
|
|
@ -677,7 +677,8 @@ Subtree ts_subtree_edit(Subtree self, const TSInputEdit *input_edit, SubtreePool
|
|||
Edit edit = entry.edit;
|
||||
bool is_noop = edit.old_end.bytes == edit.start.bytes && edit.new_end.bytes == edit.start.bytes;
|
||||
bool is_pure_insertion = edit.old_end.bytes == edit.start.bytes;
|
||||
bool invalidate_first_row = ts_subtree_depends_on_column(*entry.tree);
|
||||
bool parent_depends_on_column = ts_subtree_depends_on_column(*entry.tree);
|
||||
bool column_shifted = edit.new_end.extent.column != edit.old_end.extent.column;
|
||||
|
||||
Length size = ts_subtree_size(*entry.tree);
|
||||
Length padding = ts_subtree_padding(*entry.tree);
|
||||
|
|
@ -771,8 +772,12 @@ Subtree ts_subtree_edit(Subtree self, const TSInputEdit *input_edit, SubtreePool
|
|||
(child_left.bytes > edit.old_end.bytes) ||
|
||||
(child_left.bytes == edit.old_end.bytes && child_size.bytes > 0 && i > 0)
|
||||
) && (
|
||||
!invalidate_first_row ||
|
||||
child_left.extent.row > entry.tree->ptr->padding.extent.row
|
||||
!parent_depends_on_column ||
|
||||
child_left.extent.row > padding.extent.row
|
||||
) && (
|
||||
!ts_subtree_depends_on_column(*child) ||
|
||||
!column_shifted ||
|
||||
child_left.extent.row > edit.old_end.extent.row
|
||||
)) {
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue