diff options
author | Lewis Russell <lewis6991@gmail.com> | 2023-04-06 15:16:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-06 15:16:44 +0100 |
commit | e29bc03c046b3a137c2e36b4d34c119b277d62b2 (patch) | |
tree | a801f810952066ff96b4cd2bff3cd76bbcadecd5 /test | |
parent | fbee2e4d9c627889abd597f2383cf77f96c3d825 (diff) | |
download | rneovim-e29bc03c046b3a137c2e36b4d34c119b277d62b2.tar.gz rneovim-e29bc03c046b3a137c2e36b4d34c119b277d62b2.tar.bz2 rneovim-e29bc03c046b3a137c2e36b4d34c119b277d62b2.zip |
fix(treesitter): do not track ranges of the root tree (#22912)
Fixes #22911
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/treesitter/parser_spec.lua | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/functional/treesitter/parser_spec.lua b/test/functional/treesitter/parser_spec.lua index ea9958b12a..9afce0b3a0 100644 --- a/test/functional/treesitter/parser_spec.lua +++ b/test/functional/treesitter/parser_spec.lua @@ -948,4 +948,48 @@ int x = INT_MAX; [16] = '1', [17] = '0' }, get_fold_levels()) end) + + it('tracks the root range properly (#22911)', function() + insert([[ + int main() { + int x = 3; + }]]) + + local query0 = [[ + (declaration) @declaration + (function_definition) @function + ]] + + exec_lua([[ + vim.treesitter.start(0, 'c') + ]]) + + local function run_query() + return exec_lua([[ + local query = vim.treesitter.query.parse("c", ...) + parser = vim.treesitter.get_parser() + tree = parser:parse()[1] + res = {} + for id, node in query:iter_captures(tree:root()) do + table.insert(res, {query.captures[id], node:range()}) + end + return res + ]], query0) + end + + eq({ + { 'function', 0, 0, 2, 1 }, + { 'declaration', 1, 2, 1, 12 } + }, run_query()) + + helpers.command'normal ggO' + insert('int a;') + + eq({ + { 'declaration', 0, 0, 0, 6 }, + { 'function', 1, 0, 3, 1 }, + { 'declaration', 2, 2, 2, 12 } + }, run_query()) + + end) end) |