diff options
author | Maria José Solano <majosolano99@gmail.com> | 2023-10-01 09:54:04 -0700 |
---|---|---|
committer | Christian Clason <c.clason@uni-graz.at> | 2023-10-02 22:21:35 +0200 |
commit | eb1f0e8fcca756a00d287e23bf87554e0e7f6dfd (patch) | |
tree | 1715876f90bfc7de32a4f5b7a16e61bb42ae12fe /runtime/lua/vim/lsp/util.lua | |
parent | f736b075d371dd15fa6fffc907db7952bc19bb9d (diff) | |
download | rneovim-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.lua | 35 |
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. |