Skip to content

Commit e296d8f

Browse files
committed
feat: remove snippet deduplication
closes #146
1 parent c5146a5 commit e296d8f

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

lua/blink/cmp/sources/snippets/init.lua

+4-5
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ function snippets:get_completions(_, callback)
2424
local global_snippets = self.registry:get_global_snippets()
2525
local extended_snippets = self.registry:get_extended_snippets(filetype)
2626
local ft_snippets = self.registry:get_snippets_for_ft(filetype)
27-
local snips = vim.tbl_deep_extend('force', {}, global_snippets, extended_snippets, ft_snippets)
27+
local snips = vim.list_extend({}, global_snippets)
28+
vim.list_extend(snips, extended_snippets)
29+
vim.list_extend(snips, ft_snippets)
2830

29-
self.cache[filetype] = {}
30-
for _, snippet in pairs(snips) do
31-
table.insert(self.cache[filetype], snippet)
32-
end
31+
self.cache[filetype] = snips
3332
end
3433

3534
local items = vim.tbl_map(

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function registry.new(config)
3636
end
3737

3838
--- @param filetype string
39-
--- @return table<string, blink.cmp.Snippet>
39+
--- @return blink.cmp.Snippet[]
4040
function registry:get_snippets_for_ft(filetype)
4141
local loaded_snippets = {}
4242
local files = self.registry[filetype]
@@ -49,8 +49,8 @@ function registry:get_snippets_for_ft(filetype)
4949
local snippets = utils.parse_json_with_error_msg(f, contents)
5050
for _, key in ipairs(vim.tbl_keys(snippets)) do
5151
local snippet = utils.read_snippet(snippets[key], key)
52-
for snippet_name, snippet_def in pairs(snippet) do
53-
loaded_snippets[snippet_name] = snippet_def
52+
for _, snippet_def in pairs(snippet) do
53+
table.insert(loaded_snippets, snippet_def)
5454
end
5555
end
5656
end
@@ -61,8 +61,8 @@ function registry:get_snippets_for_ft(filetype)
6161
local snippets = utils.parse_json_with_error_msg(files, contents)
6262
for _, key in ipairs(vim.tbl_keys(snippets)) do
6363
local snippet = utils.read_snippet(snippets[key], key)
64-
for key, snippet in pairs(snippet) do
65-
loaded_snippets[key] = snippet
64+
for _, snippet in pairs(snippet) do
65+
table.insert(loaded_snippets, snippet)
6666
end
6767
end
6868
end
@@ -72,31 +72,31 @@ function registry:get_snippets_for_ft(filetype)
7272
end
7373

7474
--- @param filetype string
75-
--- @return table<string, blink.cmp.Snippet>
75+
--- @return blink.cmp.Snippet[]
7676
function registry:get_extended_snippets(filetype)
7777
local loaded_snippets = {}
7878
if not filetype then return loaded_snippets end
7979

8080
local extended_snippets = self.config.extended_filetypes[filetype] or {}
8181
for _, ft in ipairs(extended_snippets) do
8282
if vim.tbl_contains(self.config.extended_filetypes, filetype) then
83-
loaded_snippets = vim.tbl_deep_extend('force', {}, loaded_snippets, self:get_extended_snippets(ft))
83+
vim.list_extend(loaded_snippets, self:get_extended_snippets(ft))
8484
else
85-
loaded_snippets = vim.tbl_deep_extend('force', {}, loaded_snippets, self:get_snippets_for_ft(ft))
85+
vim.list_extend(loaded_snippets, self:get_snippets_for_ft(ft))
8686
end
8787
end
8888
return loaded_snippets
8989
end
9090

91-
--- @return table<string, blink.cmp.Snippet>
91+
--- @return blink.cmp.Snippet[]
9292
function registry:get_global_snippets()
9393
local loaded_snippets = {}
9494
local global_snippets = self.config.global_snippets
9595
for _, ft in ipairs(global_snippets) do
9696
if vim.tbl_contains(self.config.extended_filetypes, ft) then
97-
loaded_snippets = vim.tbl_deep_extend('force', {}, loaded_snippets, self:get_extended_snippets(ft))
97+
vim.list_extend(loaded_snippets, self:get_extended_snippets(ft))
9898
else
99-
loaded_snippets = vim.tbl_deep_extend('force', {}, loaded_snippets, self:get_snippets_for_ft(ft))
99+
vim.list_extend(loaded_snippets, self:get_snippets_for_ft(ft))
100100
end
101101
end
102102
return loaded_snippets

0 commit comments

Comments
 (0)