nvim-config/archive/lua/configs/lsp-installer.lua
2022-09-22 11:31:50 -07:00

95 lines
3.2 KiB
Lua

local M = {}
-- From plugins.lua
-- LSP EZ Installer
-- use {
-- 'williamboman/nvim-lsp-installer',
-- after = { 'cmp-nvim-lsp', 'nvim-lspconfig' },
-- event = 'BufRead',
-- config = function() require'configs.lsp-installer'.config() end
-- }
function M.config()
local status_lsp_installer_ok, lsp_installer = pcall(require, "nvim-lsp-installer")
if not status_lsp_installer_ok then
return
end
-- Highlight under current selection
local function lsp_highlight_document(client)
if client.resolved_capabilities.document_highlight then
vim.api.nvim_exec(
[[
augroup lsp_document_highlight
autocmd! * <buffer>
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
augroup END
]],
false
)
end
end
local function lsp_keymaps(bufnr)
local opts = { noremap = true, silent = true }
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "gl", "<cmd>lua vim.diagnostic.open_float({ source = false, prefix = function(d, i, ttl) return string.rep(' ', #tostring(ttl) - #tostring(i)) .. tostring(i) .. ': ', nil end })<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "go", "<cmd>lua vim.diagnostic.open_float()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({ border = "rounded" })<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({ border = "rounded" })<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>ll", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lf", "<cmd>lua vim.lsp.buf.formatting_sync()<CR>", opts)
--vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]
end
local on_attach = function(client, bufnr)
if client.name == "tsserver" then
client.resolved_capabilities.document_formatting = false
end
if client.name == "jsonls" then
client.resolved_capabilities.document_formatting = false
end
if client.name == "html" then
client.resolved_capabilities.document_formatting = false
end
if client.name == "sumneko_lua" then
client.resolved_capabilities.document_formatting = false
end
lsp_keymaps(bufnr)
lsp_highlight_document(client)
end
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
-- Add cmp_nvim_lsp capabilities
local status_cmp_nvim_lsp_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
if not status_cmp_nvim_lsp_ok then
return
end
local capabilities = cmp_nvim_lsp.update_capabilities(client_capabilities)
lsp_installer.on_server_ready(function(server)
local opts = server:get_default_options()
opts.on_attach = on_attach
opts.capabilities = capabilities
opts.settings = {
Lua = {
diagnostics = {
globals = { 'vim' }
}
}
}
server:setup(opts)
end)
end
return M