From b223402ba9a69a5993e25e3e7effac5621fbb0e1 Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Fri, 11 Aug 2023 12:48:36 +0200 Subject: [PATCH] fix(directive): make downcase work on captures --- lua/nvim-treesitter/query_predicates.lua | 32 ++++++++---------------- queries/awk/injections.scm | 7 ------ queries/ruby/injections.scm | 3 +-- 3 files changed, 11 insertions(+), 31 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] + local id = pred[2] + local node = match[id] + if not node then + return end - if type(value) == "string" then - text = value - else - local node = match[value] - text = vim.treesitter.get_node_text(node, bufnr) or "" - 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 diff --git a/queries/awk/injections.scm b/queries/awk/injections.scm index e93de626c..bc35c8312 100644 --- a/queries/awk/injections.scm +++ b/queries/awk/injections.scm @@ -3,10 +3,3 @@ ((regex) @injection.content (#set! injection.language "regex")) - -((redirected_statement - (heredoc_redirect - (heredoc_start) @injection.language)) - (heredoc_body) @injection.content - (#offset! @injection.content 0 0 -1 0) - (#downcase! @injection.language)) diff --git a/queries/ruby/injections.scm b/queries/ruby/injections.scm index 6981808c5..381d96b2f 100644 --- a/queries/ruby/injections.scm +++ b/queries/ruby/injections.scm @@ -4,8 +4,7 @@ (heredoc_body (heredoc_content) @injection.content (heredoc_end) @injection.language - (#set! "language" @injection.language) - (#downcase! "language")) + (#downcase! @injection.language)) (regex (string_content) @injection.content