summaryrefslogtreecommitdiff
path: root/start/cmp/lua/cmp_nvim_lsp/init.lua
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2022-05-22 22:47:23 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2022-05-22 22:47:23 +0100
commit95aea6b533e71e478d61d18fac71cca116c56a4d (patch)
tree1a1f42f723772258cc54551495826768f374474a /start/cmp/lua/cmp_nvim_lsp/init.lua
Add all the plugins I currently use
Diffstat (limited to 'start/cmp/lua/cmp_nvim_lsp/init.lua')
-rw-r--r--start/cmp/lua/cmp_nvim_lsp/init.lua84
1 files changed, 84 insertions, 0 deletions
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
+