diff --git a/src/runtime/language.c b/src/runtime/language.c index 662dbbeb..02d3c5ab 100644 --- a/src/runtime/language.c +++ b/src/runtime/language.c @@ -29,3 +29,17 @@ size_t ts_language_symbol_count(const TSLanguage *language) { const char *ts_language_symbol_name(const TSLanguage *language, TSSymbol symbol) { return language->symbol_names[symbol]; } + +bool ts_language_symbol_is_in_progress(const TSLanguage *self, TSStateId state, + TSSymbol symbol) { + if (state == ts_parse_state_error) + return false; + unsigned index = self->in_progress_symbol_table[state]; + size_t count = self->in_progress_symbols[index].count; + const TSSymbol *symbols = (TSSymbol *)(self->in_progress_symbols + index + 1); + for (size_t i = 0; i < count; i++) { + if (symbols[i] == symbol) + return true; + } + return false; +} diff --git a/src/runtime/language.h b/src/runtime/language.h index 33f3835c..014e6780 100644 --- a/src/runtime/language.h +++ b/src/runtime/language.h @@ -7,6 +7,8 @@ extern "C" { #include "tree_sitter/parser.h" +bool ts_language_symbol_is_in_progress(const TSLanguage *, TSStateId, TSSymbol); + const TSParseAction *ts_language_actions(const TSLanguage *, TSStateId, TSSymbol, size_t *); TSParseAction ts_language_last_action(const TSLanguage *, TSStateId, TSSymbol);