diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2021-05-03 21:41:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-03 21:41:39 +0200 |
commit | 3fc71ea228f6fef058ebcb9c08c2ada32a705129 (patch) | |
tree | 8fb687392e2f21b382be63233f10a3395d41530a /test | |
parent | ad811444424f573c4dc10b203f8f42adb3c5fdf4 (diff) | |
parent | 44d4526e186a1f7168cf38fedb29e6fba81858a7 (diff) | |
download | rneovim-3fc71ea228f6fef058ebcb9c08c2ada32a705129.tar.gz rneovim-3fc71ea228f6fef058ebcb9c08c2ada32a705129.tar.bz2 rneovim-3fc71ea228f6fef058ebcb9c08c2ada32a705129.zip |
Merge pull request #14418 from DerekStride/treesitter-set-directive
[RDY] tree-sitter ensure there is a nested table allocated for `#set!`
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/treesitter/parser_spec.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/test/functional/treesitter/parser_spec.lua b/test/functional/treesitter/parser_spec.lua index 72ff6f2fb6..f267f9fb5d 100644 --- a/test/functional/treesitter/parser_spec.lua +++ b/test/functional/treesitter/parser_spec.lua @@ -599,6 +599,56 @@ int x = INT_MAX; eq(result, "value") end) + + describe("when setting a key on a capture", function() + it("it should create the nested table", function() + insert([[ + int x = 3; + ]]) + + local result = exec_lua([[ + local query = require("vim.treesitter.query") + local value + + query = vim.treesitter.parse_query("c", '((number_literal) @number (#set! @number "key" "value"))') + parser = vim.treesitter.get_parser(0, "c") + + for pattern, match, metadata in query:iter_matches(parser:parse()[1]:root(), 0) do + for _, nested_tbl in pairs(metadata) do + return nested_tbl.key + end + end + ]]) + + eq(result, "value") + end) + + it("it should not overwrite the nested table", function() + insert([[ + int x = 3; + ]]) + + local result = exec_lua([[ + local query = require("vim.treesitter.query") + local result + + query = vim.treesitter.parse_query("c", '((number_literal) @number (#set! @number "key" "value") (#set! @number "key2" "value2"))') + parser = vim.treesitter.get_parser(0, "c") + + for pattern, match, metadata in query:iter_matches(parser:parse()[1]:root(), 0) do + for _, nested_tbl in pairs(metadata) do + return nested_tbl + end + end + ]]) + local expected = { + ["key"] = "value", + ["key2"] = "value2", + } + + eq(expected, result) + end) + end) end) end) end) |