aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/util.lua
diff options
context:
space:
mode:
authorMaria José Solano <majosolano99@gmail.com>2023-10-01 09:54:04 -0700
committerChristian Clason <c.clason@uni-graz.at>2023-10-02 22:21:35 +0200
commiteb1f0e8fcca756a00d287e23bf87554e0e7f6dfd (patch)
tree1715876f90bfc7de32a4f5b7a16e61bb42ae12fe /runtime/lua/vim/lsp/util.lua
parentf736b075d371dd15fa6fffc907db7952bc19bb9d (diff)
downloadrneovim-eb1f0e8fcca756a00d287e23bf87554e0e7f6dfd.tar.gz
rneovim-eb1f0e8fcca756a00d287e23bf87554e0e7f6dfd.tar.bz2
rneovim-eb1f0e8fcca756a00d287e23bf87554e0e7f6dfd.zip
feat(lsp)!: replace snippet parser by lpeg grammar
Diffstat (limited to 'runtime/lua/vim/lsp/util.lua')
-rw-r--r--runtime/lua/vim/lsp/util.lua35
1 files changed, 32 insertions, 3 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index 51ed87219c..a4c8959b99 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -1,5 +1,5 @@
local protocol = require('vim.lsp.protocol')
-local snippet = require('vim.lsp._snippet')
+local snippet = require('vim.lsp._snippet_grammar')
local validate = vim.validate
local api = vim.api
local list_extend = vim.list_extend
@@ -610,12 +610,41 @@ end
---@return string parsed snippet
function M.parse_snippet(input)
local ok, parsed = pcall(function()
- return tostring(snippet.parse(input))
+ return snippet.parse(input)
end)
if not ok then
return input
end
- return parsed
+
+ --- @param node vim.snippet.Node<any>
+ --- @return string
+ local function node_to_string(node)
+ local insert_text = {}
+ if node.type == snippet.NodeType.Snippet then
+ for _, child in
+ ipairs((node.data --[[@as vim.snippet.SnippetData]]).children)
+ do
+ table.insert(insert_text, node_to_string(child))
+ end
+ elseif node.type == snippet.NodeType.Choice then
+ table.insert(insert_text, (node.data --[[@as vim.snippet.ChoiceData]]).values[1])
+ elseif node.type == snippet.NodeType.Placeholder then
+ table.insert(
+ insert_text,
+ node_to_string((node.data --[[@as vim.snippet.PlaceholderData]]).value)
+ )
+ elseif node.type == snippet.NodeType.Text then
+ table.insert(
+ insert_text,
+ node
+ .data --[[@as vim.snippet.TextData]]
+ .text
+ )
+ end
+ return table.concat(insert_text)
+ end
+
+ return node_to_string(parsed)
end
--- Sorts by CompletionItem.sortText.