dotfiles2/dot_config/nvim/lua/config/lspconfig.lua

109 lines
3.3 KiB
Lua

-- neovim/neovim-lspconfig
local function on_attach(client, bufnr)
local opts = {
silent = true,
noremap = true,
}
local function buf_nmap(mapping, cmd) vim.api.nvim_buf_set_keymap(bufnr, "n", mapping, cmd, opts) end
-- Jump to definition
buf_nmap("gd", "<Cmd>lua vim.lsp.buf.definition()<CR>")
-- Format current buffer on write
vim.api.nvim_command([[autocmd BufWritePre <buffer> lua vim.lsp.buf.format()]])
-- Show diagnostics for current line
buf_nmap("<leader>dd", "<Cmd>lua vim.diagnostic.open_float()<CR>")
-- Jump between diagnostic messages
buf_nmap("<leader>dj", "<Cmd>lua vim.diagnostic.goto_next()<CR>")
buf_nmap("<leader>dk", "<Cmd>lua vim.diagnostic.goto_prev()<CR>")
-- Rename symbol under cursor
buf_nmap("<leader>dr", "<Cmd>lua vim.lsp.buf.rename()<CR>")
-- Show hover info
buf_nmap("<leader>df", "<Cmd>lua vim.lsp.buf.hover()<CR>")
buf_nmap("<leader>du", "<Cmd>lua vim.lsp.buf.references()<CR>")
buf_nmap("<leader>da", "<Cmd>lua vim.lsp.buf.code_action()<CR>")
end
-- For cmp autocomplete
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- Comes with clang
vim.lsp.config('clangd', {
on_attach = on_attach,
capabilities = capabilities
})
vim.lsp.enable('clangd')
-- NPM: dockerfile-language-server-nodejs
-- vim.lsp.config('dockerls', {
-- capabilities = capabilities
-- })
-- vim.lsp.enable('dockerls')
-- Pacman: haskell-language-server
-- AUR: haskell-language-server-bin
-- GH: https://github.com/haskell/haskell-language-server
-- vim.lsp.config('hls', {
-- on_attach = on_attach,
-- settings = {
-- haskell = {
-- formattingProvider = "stylish-haskell"
-- }
-- },
-- capabilities = capabilities
-- })
-- Pacman: vieter-vls (requires my Vieter repository)
-- GH: https://github.com/vlang/vls
-- require'lspconfig'.vls.setup{
-- cmd = {'vls'},
-- filetypes = {'v'},
-- on_attach = on_attach
-- }
-- Pacman: rust-analyzer
-- GH: https://github.com/rust-analyzer/rust-analyzer
vim.lsp.config('rust_analyzer', {
on_attach = on_attach,
capabilities = capabilities
})
vim.lsp.enable('rust_analyzer')
-- Installed using R shell:
-- `install.packages('languageserver')`
-- GH: https://github.com/REditorSupport/languageserver
-- vim.lsp.config('r_language_server', {
-- capabilities = capabilities
-- })
-- Installed using Go CLI:
-- go install github.com/nametake/golangci-lint-langserver@latest
-- go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
vim.lsp.config('gopls', {
on_attach = on_attach,
capabilities = capabilities
})
vim.lsp.enable('gopls')
vim.lsp.config('texlab', {
on_attach = on_attach,
capabilities = capabilities
})
vim.lsp.enable('texlab')
vim.lsp.config('ltex_plus', {
on_attach = on_attach,
capabilities = capabilities
})
vim.lsp.enable('ltex_plus')
-- Fix that stops rust-analyzer interrupting typing when a request is cancelled
for _, method in ipairs({ 'textDocument/diagnostic', 'workspace/diagnostic' }) do
local default_diagnostic_handler = vim.lsp.handlers[method]
vim.lsp.handlers[method] = function(err, result, context, config)
if err ~= nil and err.code == -32802 then
return
end
return default_diagnostic_handler(err, result, context, config)
end
end