summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/getchoo/lsp/config/cmp.lua
diff options
context:
space:
mode:
authorseth <[email protected]>2022-08-24 15:37:06 -0400
committerseth <[email protected]>2022-08-24 15:37:06 -0400
commit8fef927ede6733c20a53c4b0c13d2ab4cb08b604 (patch)
treec5eae97847773355ffd3f2afcc84c7c9c2a5b387 /.config/nvim/lua/getchoo/lsp/config/cmp.lua
parentee45c4211d79dfb3b62531cc4f974ac3932e5131 (diff)
refactor lsp config
Diffstat (limited to '.config/nvim/lua/getchoo/lsp/config/cmp.lua')
-rw-r--r--.config/nvim/lua/getchoo/lsp/config/cmp.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/.config/nvim/lua/getchoo/lsp/config/cmp.lua b/.config/nvim/lua/getchoo/lsp/config/cmp.lua
new file mode 100644
index 0000000..bfade29
--- /dev/null
+++ b/.config/nvim/lua/getchoo/lsp/config/cmp.lua
@@ -0,0 +1,71 @@
+local cmp = require("cmp")
+local mapping = cmp.mapping
+local luasnip = require("luasnip")
+
+local M = {}
+
+local has_words_before = function()
+ local line, col = unpack(vim.api.nvim_win_get_cursor(0))
+ return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
+end
+
+local feedkey = function(key, mode)
+ vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
+end
+
+M.config = {
+ snippet = {
+ expand = function(args)
+ vim.fn["vsnip#anonymous"](args.body)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ mapping = mapping.preset.insert({
+ ["<C-Space>"] = mapping.complete(),
+ ["<CR>"] = mapping.confirm({
+ select = true,
+ }),
+ ["<Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_next_item()
+ elseif luasnip.expand_or_jumpable() then
+ luasnip.expand_or_jump()
+ elseif vim.fn["vsnip#available"](1) == 1 then
+ feedkey("<Plug>(vsnip-expand-or-jump)", "")
+ elseif has_words_before() then
+ cmp.complete()
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ ["<S-Tab>"] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item()
+ elseif luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ elseif vim.fn["vsnip#available"](-1) == 1 then
+ feedkey("<Plug>(vsnip-jump-prev)", "")
+ else
+ fallback()
+ end
+ end, { "i", "s" }),
+ }),
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "luasnip" },
+ { name = "vsnip" },
+ }, {
+ { name = "buffer" },
+ }),
+}
+
+local capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities())
+capabilities.textDocument.completion.completionItem.snippetSupport = true
+
+M.capabilities = capabilities
+
+M.on_attach = function(_, bufnr)
+ vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
+end
+
+return M