diff options
author | Riley Bruins <ribru17@hotmail.com> | 2025-02-02 03:46:26 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-02 03:46:26 -0800 |
commit | 77be44563acb64a481d48f45c8dbbfca2d7db415 (patch) | |
tree | 95f5729fad30ec478c9a1738bbb52c08c1f22cc3 | |
parent | 02ea0e77a19b116006dc04848703aaeed3f50ded (diff) | |
download | rneovim-77be44563acb64a481d48f45c8dbbfca2d7db415.tar.gz rneovim-77be44563acb64a481d48f45c8dbbfca2d7db415.tar.bz2 rneovim-77be44563acb64a481d48f45c8dbbfca2d7db415.zip |
refactor(treesitter): always return valid range from parse() #32273
Problem:
When running an initial parse, parse() returns an empty table rather
than an actual range. In `languagetree.lua`, we manually check if
a parse was incremental to determine the changed parse region.
Solution:
- Always return a range (in the C side) from parse().
- Simplify the language tree code a bit.
- Logger no longer shows empty ranges on the initial parse.
-rw-r--r-- | runtime/lua/vim/treesitter/languagetree.lua | 5 | ||||
-rw-r--r-- | src/nvim/lua/treesitter.c | 3 |
2 files changed, 3 insertions, 5 deletions
diff --git a/runtime/lua/vim/treesitter/languagetree.lua b/runtime/lua/vim/treesitter/languagetree.lua index 9571a117b8..725e95dfc9 100644 --- a/runtime/lua/vim/treesitter/languagetree.lua +++ b/runtime/lua/vim/treesitter/languagetree.lua @@ -378,10 +378,7 @@ function LanguageTree:_parse_regions(range, timeout) return changes, no_regions_parsed, total_parse_time, false end - -- Pass ranges if this is an initial parse - local cb_changes = self._trees[i] and tree_changes or tree:included_ranges(true) - - self:_do_callback('changedtree', cb_changes, tree) + self:_do_callback('changedtree', tree_changes, tree) self._trees[i] = tree vim.list_extend(changes, tree_changes) diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c index c7999ac077..3e33fcd142 100644 --- a/src/nvim/lua/treesitter.c +++ b/src/nvim/lua/treesitter.c @@ -500,7 +500,8 @@ static int parser_parse(lua_State *L) // The new tree will be pushed to the stack, without copy, ownership is now to the lua GC. // Old tree is owned by lua GC since before uint32_t n_ranges = 0; - TSRange *changed = old_tree ? ts_tree_get_changed_ranges(old_tree, new_tree, &n_ranges) : NULL; + TSRange *changed = old_tree ? ts_tree_get_changed_ranges(old_tree, new_tree, &n_ranges) + : ts_tree_included_ranges(new_tree, &n_ranges); push_tree(L, new_tree); // [tree] |