Skip to content
This repository was archived by the owner on Oct 13, 2021. It is now read-only.

Commit 5c1983f

Browse files
authored
Merge pull request #180 from runiq/snippets.nvim
Add supports for snippets.nvim's own snippets
2 parents a2935ee + 0cf1dc1 commit 5c1983f

3 files changed

Lines changed: 36 additions & 0 deletions

File tree

lua/completion.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ local function hasConfirmedCompletion()
107107
api.nvim_input("<c-r>".."=neosnippet#expand('"..completed_item.word.."')".."<CR>")
108108
elseif completed_item.kind == 'vim-vsnip' then
109109
api.nvim_call_function('vsnip#expand', {})
110+
elseif completed_item.kind == 'snippets.nvim' then
111+
require'snippets'.expand_at_cursor()
110112
end
111113
end
112114

lua/completion/source.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ local complete_items_map = {
3434
},
3535
['Neosnippet'] = {
3636
item = snippet.getNeosnippetItems
37+
},
38+
['snippets.nvim'] = {
39+
item = snippet.getSnippetsNvimItems
3740
}
3841
}
3942

lua/completion/source/snippet.lua

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,35 @@ M.getVsnipItems = function(prefix)
7676
return complete_items
7777
end
7878

79+
-- Cribbed almost wholesale from snippets.lookup_snippet()
80+
M.getSnippetsNvimItems = function(prefix)
81+
local snippets = require 'snippets'
82+
if not snippets then return {} end
83+
local ft = vim.bo.filetype
84+
local snippetsList = vim.tbl_extend('force', snippets.snippets._global, snippets.snippets[ft] or {})
85+
local complete_items = {}
86+
if vim.tbl_isempty(snippetsList) == 0 then
87+
return {}
88+
end
89+
local priority = vim.g.completion_items_priority['snippets.nvim'] or 1
90+
local kind = 'snippets.nvim'
91+
for short, long in pairs(snippetsList) do
92+
-- TODO: We cannot put the parsed snippet itself in userdata, since it may
93+
-- contain Lua functions (see
94+
-- https://github.com/norcalli/snippets.nvim#notes-because-this-is-beta-release-software)
95+
local user_data = {}
96+
local item = {}
97+
item.word = short
98+
item.kind = kind
99+
-- TODO: Turn actual snippet text into label/description?
100+
item.menu = short
101+
item.priority = priority
102+
item.user_data = user_data
103+
match.matching(complete_items, prefix, item)
104+
end
105+
return complete_items
106+
end
107+
79108
M.getCompletionItems = function(prefix)
80109
local source = vim.g.completion_enable_snippet
81110
local snippet_list = {}
@@ -85,6 +114,8 @@ M.getCompletionItems = function(prefix)
85114
snippet_list = M.getNeosnippetItems(prefix)
86115
elseif source == 'vim-vsnip' then
87116
snippet_list = M.getVsnipItems(prefix)
117+
elseif source == 'snippets.nvim' then
118+
snippet_list = M.getSnippetsNvimItems(prefix)
88119
end
89120
return snippet_list
90121
end

0 commit comments

Comments
 (0)