Skip to content

Commit 33f0789

Browse files
committed
perf(snippets): cache lazy vars when expanding vars
Closes #2024
1 parent b745bea commit 33f0789

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

lua/blink/cmp/sources/snippets/default/registry.lua

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ end
129129
--- @return string
130130
function registry:expand_vars(snippet)
131131
local lazy_vars = self.builtin_vars.lazy
132+
local lazy_vars_cache = {}
132133
local eager_vars = self.builtin_vars.eager or {}
133134

134135
local resolved_snippet = snippet
@@ -150,7 +151,9 @@ function registry:expand_vars(snippet)
150151
if eager_vars[data.name] then
151152
resolved_snippet = resolved_snippet:gsub('%$[{]?(' .. data.name .. ')[}]?', eager_vars[data.name])
152153
elseif lazy_vars[data.name] then
153-
local replacement = lazy_vars[data.name]({ clipboard_register = self.config.clipboard_register })
154+
local replacement = lazy_vars_cache[data.name]
155+
or lazy_vars[data.name]({ clipboard_register = self.config.clipboard_register })
156+
lazy_vars_cache[data.name] = replacement
154157
-- gsub otherwise fails with strings like `%20` in the replacement string
155158
local escaped_for_gsub = replacement:gsub('%%', '%%%%')
156159
resolved_snippet = resolved_snippet:gsub('%$[{]?(' .. data.name .. ')[}]?', escaped_for_gsub)

0 commit comments

Comments
 (0)