feat(snippets): try to use the snippet parse to get a preview

This commit is contained in:
Folke Lemaitre 2024-05-28 19:31:59 +02:00
parent 425dadef72
commit eb0da3c92f
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040

View file

@ -1,6 +1,8 @@
---@class lazyvim.util.cmp ---@class lazyvim.util.cmp
local M = {} local M = {}
---@alias Placeholder {n:number, text:string}
---@param snippet string ---@param snippet string
---@param fn fun(placeholder:Placeholder):string ---@param fn fun(placeholder:Placeholder):string
---@return string ---@return string
@ -15,10 +17,13 @@ end
---@param snippet string ---@param snippet string
---@return string ---@return string
function M.snippet_preview(snippet) function M.snippet_preview(snippet)
local ret = M.snippet_replace(snippet, function(placeholder) local ok, parsed = pcall(function()
return vim.lsp._snippet_grammar.parse(snippet)
end)
return ok and tostring(parsed)
or M.snippet_replace(snippet, function(placeholder)
return M.snippet_preview(placeholder.text) return M.snippet_preview(placeholder.text)
end):gsub("%$0", "") end):gsub("%$0", "")
return ret
end end
-- This function replaces nested placeholders in a snippet with LSP placeholders. -- This function replaces nested placeholders in a snippet with LSP placeholders.