diff options
author | Mathias Fußenegger <mfussenegger@users.noreply.github.com> | 2021-12-12 12:05:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-12 12:05:39 +0100 |
commit | 1f3c0593eb1d4e54ce1edf35da67d184807a9280 (patch) | |
tree | 0408061fca08ff777afdcde653af9c3c53912b25 /test/functional/treesitter/parser_spec.lua | |
parent | 3aff3d6349d878f2f57b8931b2f1a2397926f889 (diff) | |
download | rneovim-1f3c0593eb1d4e54ce1edf35da67d184807a9280.tar.gz rneovim-1f3c0593eb1d4e54ce1edf35da67d184807a9280.tar.bz2 rneovim-1f3c0593eb1d4e54ce1edf35da67d184807a9280.zip |
feat(ts): add support for multiline nodes in get_node_text (#14999)
Based on https://github.com/neovim/neovim/pull/14445
This extends `vim.treesitter.query.get_node_text` to return the text
that spans a node's range even if start_row ~= end_row.
Diffstat (limited to 'test/functional/treesitter/parser_spec.lua')
-rw-r--r-- | test/functional/treesitter/parser_spec.lua | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/functional/treesitter/parser_spec.lua b/test/functional/treesitter/parser_spec.lua index 1138cfbf4c..911fa017ab 100644 --- a/test/functional/treesitter/parser_spec.lua +++ b/test/functional/treesitter/parser_spec.lua @@ -227,6 +227,43 @@ void ui_refresh(void) }, res) end) + it('supports getting text of multiline node', function() + if pending_c_parser(pending) then return end + insert(test_text) + local res = exec_lua([[ + local parser = vim.treesitter.get_parser(0, "c") + local tree = parser:parse()[1] + return vim.treesitter.get_node_text(tree:root(), 0) + ]]) + eq(test_text, res) + + local res2 = exec_lua([[ + local parser = vim.treesitter.get_parser(0, "c") + local root = parser:parse()[1]:root() + return vim.treesitter.get_node_text(root:child(0):child(0), 0) + ]]) + eq('void', res2) + end) + + it('support getting text where start of node is past EOF', function() + local text = [[ +def run + a = <<~E +end]] + insert(text) + local result = exec_lua([[ + local fake_node = {} + function fake_node:start() + return 3, 0, 23 + end + function fake_node:end_() + return 3, 0, 23 + end + return vim.treesitter.get_node_text(fake_node, 0) == nil + ]]) + eq(true, result) + end) + it('can match special regex characters like \\ * + ( with `vim-match?`', function() insert('char* astring = "\\n"; (1 + 1) * 2 != 2;') |