neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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)