Fix query analysis with top-level non-terminal extras

Fixes https://github.com/tree-sitter/tree-sitter/issues/968#issuecomment-792314281
This commit is contained in:
Max Brunsfeld 2021-03-08 09:33:26 -08:00
parent 5a2534ac4a
commit 6ba11d7778
2 changed files with 18 additions and 2 deletions

View file

@ -3132,6 +3132,20 @@ fn test_query_step_is_definite() {
"#,
results_by_substring: &[("name:", true)],
},
Row {
description: "top-level non-terminal extra nodes",
language: get_language("ruby"),
pattern: r#"
(heredoc_body
(interpolation)
(heredoc_end) @end)
"#,
results_by_substring: &[
("(heredoc_body", false),
("(interpolation)", false),
("(heredoc_end)", true),
],
},
];
allocations::record(|| {

View file

@ -784,8 +784,10 @@ static bool ts_query__analyze_patterns(TSQuery *self, unsigned *error_offset) {
state_predecessor_map_add(&predecessor_map, next_state, state);
}
}
} else if (lookahead_iterator.next_state != 0 && lookahead_iterator.next_state != state) {
state_predecessor_map_add(&predecessor_map, lookahead_iterator.next_state, state);
} else if (lookahead_iterator.next_state != 0) {
if (lookahead_iterator.next_state != state) {
state_predecessor_map_add(&predecessor_map, lookahead_iterator.next_state, state);
}
const TSSymbol *aliases, *aliases_end;
ts_language_aliases_for_symbol(
self->language,