local lsp_installer = require("nvim-lsp-installer") local lspconfig = require("lspconfig") local async = require("plenary.async") -- NOTE: Keep this near top lsp_installer.setup({}) local required_servers = { "sumneko_lua", "rust_analyzer", "bashls", "eslint", "dockerls", "ansiblels", "tsserver", } for _, name in pairs(required_servers) do local server_is_found, server = lsp_installer.get_server(name) if server_is_found then if not server:is_installed() then async.run(function() vim.notify.async("Installing Language Server " .. name, "info", { title = "Lsp Installer", }) end) server:install() end end end local function on_attach(client, bufnr) async.run(function() vim.notify.async("Attached server " .. client.name, "info", { title = "Lsp Attach", }).events.close() end) end local opts = { -- Coq configuration, ensure coq actual has capabilties shown -- capabilities = require("coq").lsp_ensure_capabilities(vim.lsp.protocol.make_client_capabilities()), capabilities = require("cmp_nvim_lsp").update_capabilities(vim.lsp.protocol.make_client_capabilities()), on_attach = on_attach, } -- INFO: RUST LSP -- In the scenario we're using rust it makes more sense to use rust-tools -- see: https://github.com/williamboman/nvim-lsp-installer/wiki/Rust -- -- NOTE: Requires rust_analyzer -- -- Dap installation, required vscode and the following extension to be installed: -- https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb -- -- locate it with `find ~/ -name ` local extension_path = os.getenv("HOME") .. "/.vscode/extensions/vadimcn.vscode-lldb-1.6.10/" local codelldb_path = extension_path .. "adapter/codelldb" local liblldb_path = extension_path .. "lldb/lib/liblldb.dylib" local rustopts = { server = opts, dap = { adapter = require("rust-tools.dap").get_codelldb_adapter(codelldb_path, liblldb_path), }, tools = { hover_actions = { auto_focus = true }, }, } require("rust-tools").setup(rustopts) -- NOTE: ANSIBLE LSP -- I use ansible a lot, define exceptions for servers that can use -- server:setup & vim.cmd at the bottom here lspconfig.ansiblels.setup({ ansible = { ansible = { useFullyQualifiedCollectionNames = true, path = "ansible", }, ansibleLint = { enabled = true, path = "ansible-lint", }, python = { interpreterPath = "python3", }, }, }) -- NOTE: BASH LSP lspconfig.bashls.setup({ filetypes = { "zsh", "bash", "profile", }, opts }) -- NOTE: PYTHON LSP lspconfig.pylsp.setup({ pylsp = { plugins = { pycodestyle = { enabled = false, }, }, }, opts }) -- NOTE: GENERIC LSP SERVERS for _, server in ipairs {"tsserver", "eslint", "dockerls", "sumneko_lua"} do lspconfig[server].setup(opts) end