diff options
author | figsoda <figsoda@pm.me> | 2022-07-21 12:08:37 +0100 |
---|---|---|
committer | figsoda <figsoda@pm.me> | 2023-02-04 21:04:45 -0500 |
commit | bb8845340b1b9c2180fb19f049ff9deff5857d99 (patch) | |
tree | 27d0c9887021bdfcc4960ad7871ba8e16ee2096f /runtime/lua/vim/treesitter/query.lua | |
parent | 5c4b503d3cb4a48d083bcf50d4932927e6eb749d (diff) | |
download | rneovim-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.lua | 15 |
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 |