aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/query.lua
diff options
context:
space:
mode:
authorfigsoda <figsoda@pm.me>2022-07-21 12:08:37 +0100
committerfigsoda <figsoda@pm.me>2023-02-04 21:04:45 -0500
commitbb8845340b1b9c2180fb19f049ff9deff5857d99 (patch)
tree27d0c9887021bdfcc4960ad7871ba8e16ee2096f /runtime/lua/vim/treesitter/query.lua
parent5c4b503d3cb4a48d083bcf50d4932927e6eb749d (diff)
downloadrneovim-bb8845340b1b9c2180fb19f049ff9deff5857d99.tar.gz
rneovim-bb8845340b1b9c2180fb19f049ff9deff5857d99.tar.bz2
rneovim-bb8845340b1b9c2180fb19f049ff9deff5857d99.zip
feat(treesitter): allow capture text to be transformed
Co-authored-by: Lewis Russell <lewis6991@gmail.com>
Diffstat (limited to 'runtime/lua/vim/treesitter/query.lua')
-rw-r--r--runtime/lua/vim/treesitter/query.lua15
1 files changed, 15 insertions, 0 deletions
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua
index 84ed2667b9..5ec8c67462 100644
--- a/runtime/lua/vim/treesitter/query.lua
+++ b/runtime/lua/vim/treesitter/query.lua
@@ -452,6 +452,21 @@ local directive_handlers = {
metadata[capture_id].range = range
end
end,
+
+ -- Transform the content of the node
+ -- Example: (#gsub! @_node ".*%.(.*)" "%1")
+ ['gsub!'] = function(match, _, bufnr, pred, metadata)
+ assert(#pred == 4)
+
+ local id = pred[2]
+ local node = match[id]
+ local text = M.get_node_text(node, bufnr, { metadata = metadata[id] }) or ''
+
+ if not metadata[id] then
+ metadata[id] = {}
+ end
+ metadata[id].text = text:gsub(pred[3], pred[4])
+ end,
}
--- Adds a new predicate to be used in queries