Created
August 6, 2020 17:51
-
-
Save runiq/73417d58446b83f6ed1ca9631a8f7dcd to your computer and use it in GitHub Desktop.
Integrating snippets.nvim and completion-nvim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git i/lua/completion.lua w/lua/completion.lua | |
index 1fed4f4..4c9774b 100644 | |
--- i/lua/completion.lua | |
+++ w/lua/completion.lua | |
@@ -107,6 +107,8 @@ local function hasConfirmedCompletion() | |
api.nvim_input("<c-r>".."=neosnippet#expand('"..completed_item.word.."')".."<CR>") | |
elseif completed_item.kind == 'vim-vsnip' then | |
api.nvim_call_function('vsnip#expand', {}) | |
+ elseif completed_item.kind == 'snippets.nvim' then | |
+ require'snippets'.expand_at_cursor() | |
end | |
end | |
diff --git i/lua/completion/source.lua w/lua/completion/source.lua | |
index e769c42..5ddbf09 100644 | |
--- i/lua/completion/source.lua | |
+++ w/lua/completion/source.lua | |
@@ -34,6 +34,9 @@ local complete_items_map = { | |
}, | |
['Neosnippet'] = { | |
item = snippet.getNeosnippetItems | |
+ }, | |
+ ['snippets.nvim'] = { | |
+ item = snippet.getSnippetsNvimItems | |
} | |
} | |
diff --git i/lua/completion/source/snippet.lua w/lua/completion/source/snippet.lua | |
index edde842..179b3a0 100644 | |
--- i/lua/completion/source/snippet.lua | |
+++ w/lua/completion/source/snippet.lua | |
@@ -76,6 +76,33 @@ M.getVsnipItems = function(prefix) | |
return complete_items | |
end | |
+M.getSnippetsNvimItems = function(prefix) | |
+ local snippets = require 'snippets' | |
+ if not snippets then return {} end | |
+ local ft = vim.bo.filetype | |
+ local snippetsList = vim.tbl_extend('force', snippets.snippets._global, snippets.snippets[ft]) | |
+ local complete_items = {} | |
+ if vim.tbl_isempty(snippetsList) == 0 then | |
+ return {} | |
+ end | |
+ local priority = vim.g.completion_items_priority['snippets.nvim'] or 1 | |
+ for short, long in pairs(snippetsList) do | |
+ local user_data = { norcalli = { ['snippets.nvim'] = { [short] = long } } } | |
+ local item = {} | |
+ -- We need to keep this thing short for now and expand later. | |
+ -- Also, lookup/parsing/validation should be done later, since we also want | |
+ -- to expand LSP snippets (on CompleteDone or something). | |
+ item.word = short | |
+ item.kind = 'snippets.nvim' | |
+ item.menu = short | |
+ -- TODO: Turn actual snippet text into label/description? | |
+ item.priority = priority | |
+ item.user_data = user_data | |
+ match.matching(complete_items, prefix, item) | |
+ end | |
+ return complete_items | |
+end | |
+ | |
M.getCompletionItems = function(prefix) | |
local source = vim.g.completion_enable_snippet | |
local snippet_list = {} | |
@@ -85,6 +112,8 @@ M.getCompletionItems = function(prefix) | |
snippet_list = M.getNeosnippetItems(prefix) | |
elseif source == 'vim-vsnip' then | |
snippet_list = M.getVsnipItems(prefix) | |
+ elseif source == 'snippets.nvim' then | |
+ snippet_list = M.getSnippetsNvimItems(prefix) | |
end | |
return snippet_list | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment