From 95aea6b533e71e478d61d18fac71cca116c56a4d Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sun, 22 May 2022 22:47:23 +0100 Subject: Add all the plugins I currently use --- start/cmp/lua/cmp_nvim_lsp/init.lua | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 start/cmp/lua/cmp_nvim_lsp/init.lua (limited to 'start/cmp/lua/cmp_nvim_lsp/init.lua') diff --git a/start/cmp/lua/cmp_nvim_lsp/init.lua b/start/cmp/lua/cmp_nvim_lsp/init.lua new file mode 100644 index 0000000..9feb93a --- /dev/null +++ b/start/cmp/lua/cmp_nvim_lsp/init.lua @@ -0,0 +1,84 @@ +local source = require('cmp_nvim_lsp.source') + +local M = {} + +---Registered client and source mapping. +M.client_source_map = {} + +---Setup cmp-nvim-lsp source. +M.setup = function() + vim.cmd([[ + augroup cmp_nvim_lsp + autocmd! + autocmd InsertEnter * lua require'cmp_nvim_lsp'._on_insert_enter() + augroup END + ]]) +end + +local if_nil = function(val, default) + if val == nil then return default end + return val +end + +M.update_capabilities = function(capabilities, override) + override = override or {} + + local completionItem = capabilities.textDocument.completion.completionItem + + completionItem.snippetSupport = if_nil(override.snippetSupport, true) + completionItem.preselectSupport = if_nil(override.preselectSupport, true) + completionItem.insertReplaceSupport = if_nil(override.insertReplaceSupport, true) + completionItem.labelDetailsSupport = if_nil(override.labelDetailsSupport, true) + completionItem.deprecatedSupport = if_nil(override.deprecatedSupport, true) + completionItem.commitCharactersSupport = if_nil(override.commitCharactersSupport, true) + completionItem.tagSupport = if_nil(override.tagSupport, { valueSet = { 1 } }) + completionItem.resolveSupport = if_nil(override.resolveSupport, { + properties = { + 'documentation', + 'detail', + 'additionalTextEdits', + } + }) + + return capabilities +end + +---Refresh sources on InsertEnter. +M._on_insert_enter = function() + local cmp = require('cmp') + + local allowed_clients = {} + + -- register all active clients. + for _, client in ipairs(vim.lsp.get_active_clients()) do + allowed_clients[client.id] = client + if not M.client_source_map[client.id] then + local s = source.new(client) + if s:is_available() then + M.client_source_map[client.id] = cmp.register_source('nvim_lsp', s) + end + end + end + + -- register all buffer clients (early register before activation) + for _, client in ipairs(vim.lsp.buf_get_clients(0)) do + allowed_clients[client.id] = client + if not M.client_source_map[client.id] then + local s = source.new(client) + if s:is_available() then + M.client_source_map[client.id] = cmp.register_source('nvim_lsp', s) + end + end + end + + -- unregister stopped/detached clients. + for client_id, source_id in pairs(M.client_source_map) do + if not allowed_clients[client_id] or allowed_clients[client_id]:is_stopped() then + cmp.unregister_source(source_id) + M.client_source_map[client_id] = nil + end + end +end + +return M + -- cgit v1.2.3