Add Document parse_count() method, for tracking if trees are still valid

This commit is contained in:
Max Brunsfeld 2015-09-10 14:23:42 -07:00
parent 2869458ce9
commit 66ad271c82
4 changed files with 17 additions and 0 deletions

View file

@ -74,6 +74,7 @@ void ts_document_edit(TSDocument *, TSInputEdit);
TSDebugger ts_document_debugger(const TSDocument *);
void ts_document_set_debugger(TSDocument *, TSDebugger);
TSNode ts_document_root_node(const TSDocument *);
size_t ts_document_parse_count(const TSDocument *);
#define ts_builtin_sym_error 0
#define ts_builtin_sym_end 1

View file

@ -394,6 +394,16 @@ describe("Parser", [&]() {
"(identifier) (member_access (identifier) (identifier))))))"));
});
});
it("updates the document's parse-count", [&]() {
AssertThat(ts_document_parse_count(doc), Equals<size_t>(0));
set_text("{ x: (b.c) };");
AssertThat(ts_document_parse_count(doc), Equals<size_t>(1));
insert_text(strlen("{ x"), "yz");
AssertThat(ts_document_parse_count(doc), Equals<size_t>(2));
});
});
describe("lexing", [&]() {

View file

@ -26,6 +26,7 @@ static void ts_document__reparse(TSDocument *document, TSInputEdit *edit) {
ts_tree_release(document->tree);
document->tree = tree;
ts_tree_retain(tree);
document->parse_count++;
}
}
@ -74,3 +75,7 @@ TSNode ts_document_root_node(const TSDocument *document) {
result = ts_node_named_child(result, 0);
return result;
}
size_t ts_document_parse_count(const TSDocument *document) {
return document->parse_count;
}

View file

@ -9,6 +9,7 @@ struct TSDocument {
TSParser parser;
TSInput input;
TSTree *tree;
size_t parse_count;
};
#endif