Fix error in changed ranges calculation
There was an error in the way that we calculate the reference scope sequences that are used as the basis for assertions about changed ranges in randomized tests. The error caused some characters' scopes to not be checked. This corrects the reference implementation and fixes a previously uncaught bug in the implementation of `tree_path_get_changed_ranges`. Previously, when iterating over the old and new trees, we would only perform comparisons of visible nodes. This resulted in a failure to do any comparison for portions of the text in which there were trailing invisible child nodes (e.g. trailing `_line_break` nodes inside `statement` nodes in the JavaScript grammar). Now, we additionally perform comparisons at invisible leaf nodes, based on their lowest visible ancestor.
This commit is contained in:
parent
0a286d41f3
commit
896254eea5
4 changed files with 86 additions and 74 deletions
|
|
@ -23,20 +23,21 @@ static void append_to_scope_sequence(ScopeSequence *sequence,
|
|||
ScopeStack *current_scopes,
|
||||
TSNode node, TSDocument *document,
|
||||
const std::string &text) {
|
||||
append_text_to_scope_sequence(sequence, current_scopes, text, ts_node_start_byte(node) - sequence->size());
|
||||
append_text_to_scope_sequence(
|
||||
sequence, current_scopes, text, ts_node_start_byte(node) - sequence->size()
|
||||
);
|
||||
|
||||
string scope = ts_node_type(node, document);
|
||||
current_scopes->push_back(scope);
|
||||
size_t child_count = ts_node_child_count(node);
|
||||
if (child_count > 0) {
|
||||
for (size_t i = 0; i < child_count; i++) {
|
||||
TSNode child = ts_node_child(node, i);
|
||||
append_to_scope_sequence(sequence, current_scopes, child, document, text);
|
||||
}
|
||||
} else {
|
||||
size_t length = ts_node_end_byte(node) - ts_node_start_byte(node);
|
||||
append_text_to_scope_sequence(sequence, current_scopes, text, length);
|
||||
current_scopes->push_back(ts_node_type(node, document));
|
||||
|
||||
for (size_t i = 0, n = ts_node_child_count(node); i < n; i++) {
|
||||
TSNode child = ts_node_child(node, i);
|
||||
append_to_scope_sequence(sequence, current_scopes, child, document, text);
|
||||
}
|
||||
|
||||
append_text_to_scope_sequence(
|
||||
sequence, current_scopes, text, ts_node_end_byte(node) - sequence->size()
|
||||
);
|
||||
|
||||
current_scopes->pop_back();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue