From eb0da3c92f2aee00ce951410ec820ce2f63490d8 Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Tue, 28 May 2024 19:31:59 +0200 Subject: [PATCH] feat(snippets): try to use the snippet parse to get a preview --- lua/lazyvim/util/cmp.lua | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lua/lazyvim/util/cmp.lua b/lua/lazyvim/util/cmp.lua index 1c9ad419..a3f83d79 100644 --- a/lua/lazyvim/util/cmp.lua +++ b/lua/lazyvim/util/cmp.lua @@ -1,6 +1,8 @@ ---@class lazyvim.util.cmp local M = {} +---@alias Placeholder {n:number, text:string} + ---@param snippet string ---@param fn fun(placeholder:Placeholder):string ---@return string @@ -15,10 +17,13 @@ end ---@param snippet string ---@return string function M.snippet_preview(snippet) - local ret = M.snippet_replace(snippet, function(placeholder) - return M.snippet_preview(placeholder.text) - end):gsub("%$0", "") - return ret + 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) + end):gsub("%$0", "") end -- This function replaces nested placeholders in a snippet with LSP placeholders.