utils_spec.lua (1559B)
1 local t = require('test.testutil') 2 local n = require('test.functional.testnvim')() 3 4 local clear = n.clear 5 local insert = n.insert 6 local eq = t.eq 7 local exec_lua = n.exec_lua 8 9 before_each(clear) 10 11 describe('treesitter utils', function() 12 it('can find an ancestor', function() 13 insert([[ 14 int main() { 15 int x = 3; 16 }]]) 17 18 exec_lua(function() 19 local parser = vim.treesitter.get_parser(0, 'c') 20 local tree = parser:parse()[1] 21 local root = tree:root() 22 _G.ancestor = assert(root:child(0)) 23 _G.child = assert(_G.ancestor:named_child(1)) 24 _G.child_sibling = assert(_G.ancestor:named_child(2)) 25 _G.grandchild = assert(_G.child:named_child(0)) 26 end) 27 28 eq(true, exec_lua('return vim.treesitter.is_ancestor(_G.ancestor, _G.child)')) 29 eq(true, exec_lua('return vim.treesitter.is_ancestor(_G.ancestor, _G.grandchild)')) 30 eq(false, exec_lua('return vim.treesitter.is_ancestor(_G.child, _G.ancestor)')) 31 eq(false, exec_lua('return vim.treesitter.is_ancestor(_G.child, _G.child_sibling)')) 32 end) 33 34 it('can detect if a position is contained in a node', function() 35 exec_lua(function() 36 _G.node = { 37 range = function() 38 return 0, 4, 0, 8 39 end, 40 } 41 end) 42 43 eq(false, exec_lua('return vim.treesitter.is_in_node_range(node, 0, 3)')) 44 for i = 4, 7 do 45 eq(true, exec_lua('return vim.treesitter.is_in_node_range(node, 0, ...)', i)) 46 end 47 -- End column exclusive 48 eq(false, exec_lua('return vim.treesitter.is_in_node_range(node, 0, 8)')) 49 end) 50 end)