diff options
| author | Christian Clason <c.clason@uni-graz.at> | 2023-08-11 12:48:36 +0200 |
|---|---|---|
| committer | Christian Clason <c.clason@uni-graz.at> | 2023-08-12 17:34:15 +0200 |
| commit | b223402ba9a69a5993e25e3e7effac5621fbb0e1 (patch) | |
| tree | cbe8a98a4dc4808166f71e2a44b37b3a9f7172cf /lua | |
| parent | feat(bash): add heredoc injection (diff) | |
| download | nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar.gz nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar.bz2 nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar.lz nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar.xz nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.tar.zst nvim-treesitter-b223402ba9a69a5993e25e3e7effac5621fbb0e1.zip | |
fix(directive): make downcase work on captures
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/nvim-treesitter/query_predicates.lua | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/lua/nvim-treesitter/query_predicates.lua b/lua/nvim-treesitter/query_predicates.lua index 7f2b73c54..d4726107c 100644 --- a/lua/nvim-treesitter/query_predicates.lua +++ b/lua/nvim-treesitter/query_predicates.lua @@ -178,37 +178,25 @@ end, true) -- Just avoid some annoying warnings for this directive query.add_directive("make-range!", function() end, true) +--- transform node text to lower case (e.g., to make @injection.language case insensitive) +--- ---@param match (TSNode|nil)[] ---@param _ string ---@param bufnr integer ---@param pred string[] ----@param metadata table ---@return boolean|nil query.add_directive("downcase!", function(match, _, bufnr, pred, metadata) - local text, key, value ---@type string|string[], string, string|integer - - if #pred == 3 then - -- (#downcase! @capture "key") - key = pred[3] - value = metadata[pred[2]][key] - else - -- (#downcase! "key") - key = pred[2] - value = metadata[key] - end - - if type(value) == "string" then - text = value - else - local node = match[value] - text = vim.treesitter.get_node_text(node, bufnr) or "" + local id = pred[2] + local node = match[id] + if not node then + return end - if #pred == 3 then - metadata[pred[2]][key] = string.lower(text) - else - metadata[key] = string.lower(text) + local text = vim.treesitter.get_node_text(node, bufnr, { metadata = metadata[id] }) or "" + if not metadata[id] then + metadata[id] = {} end + metadata[id].text = string.lower(text) end, true) -- Trim blank lines from end of the region |
