Invalidate tree's parent cache after an edit

This commit is contained in:
Max Brunsfeld 2018-07-10 14:00:31 -07:00
parent 83f88164aa
commit df3969e9d9
2 changed files with 15 additions and 0 deletions

View file

@ -41,6 +41,8 @@ const TSLanguage *ts_tree_language(const TSTree *self) {
void ts_tree_edit(TSTree *self, const TSInputEdit *edit) {
SubtreePool pool = ts_subtree_pool_new(0);
self->root = ts_subtree_edit(self->root, edit, &pool);
self->parent_cache_start = 0;
self->parent_cache_size = 0;
ts_subtree_pool_delete(&pool);
}

View file

@ -1,3 +1,4 @@
#include "test_helper.h"
#include "runtime/alloc.h"
#include "helpers/tree_helpers.h"
@ -543,6 +544,18 @@ describe("Node", [&]() {
AssertThat(ts_node_parent(node1), Equals(node2));
});
});
describe("parent()", [&]() {
it("works after the tree has been edited (regression)", [&]() {
TSNode false_node = ts_node_named_child(root_node, 1);
TSInputEdit edit = {0, 0, 5, {0, 0}, {0, 0}, {5, 0}};
ts_tree_edit(tree, &edit);
TSNode array_node = ts_node_parent(false_node);
AssertThat(ts_node_start_point(array_node), Equals<TSPoint>({7, 0}));
});
});
});
describe("TreeCursor", [&]() {