From 31861ac4cac1db3dd53ee473f331c3c17e6d84e7 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Wed, 31 May 2023 13:30:34 -0500 Subject: [PATCH] Configure LSP for Elixir --- .../lua/config/plugins/lspconfig/elixir.lua | 6 +++- config/nvim/lua/config/plugins/nvim-cmp.lua | 28 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/config/nvim/lua/config/plugins/lspconfig/elixir.lua b/config/nvim/lua/config/plugins/lspconfig/elixir.lua index 8251afd..d1c3482 100644 --- a/config/nvim/lua/config/plugins/lspconfig/elixir.lua +++ b/config/nvim/lua/config/plugins/lspconfig/elixir.lua @@ -1 +1,5 @@ -require("lspconfig").elixirls.setup({}) +local capabilities = require("cmp_nvim_lsp").default_capabilities() + +require("lspconfig").elixirls.setup({ + cmd = { "elixir-ls" }, +}) diff --git a/config/nvim/lua/config/plugins/nvim-cmp.lua b/config/nvim/lua/config/plugins/nvim-cmp.lua index 41bbca9..baf4a5e 100644 --- a/config/nvim/lua/config/plugins/nvim-cmp.lua +++ b/config/nvim/lua/config/plugins/nvim-cmp.lua @@ -1,3 +1,12 @@ +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 + return function() local cmp = require("cmp") @@ -16,7 +25,24 @@ return function() [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), - [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif vim.fn["vsnip#available"](1) == 1 then + feedkey("(vsnip-expand-or-jump)", "") + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function() + if cmp.visible() then + cmp.select_prev_item() + elseif vim.fn["vsnip#jumpable"](-1) == 1 then + feedkey("(vsnip-jump-prev)", "") + end + end, { "i", "s" }) }), sources = cmp.config.sources({ { name = "nvim_lsp" },