require("mason-lspconfig").setup({ ensure_installed = { "ansiblels", "bashls", "docker_compose_language_service", "dockerls", "eslint", "gopls", "lua_ls", "marksman", "sqlls", "taplo", "vimls", "yamlls" } }) local addDesc = function(t, v) t["desc"] = v return t end local default_on_attach = function(client, bufnr) client.server_capabilities.document_formatting = false client.server_capabilities.document_range_formatting = false local opts = { buffer = bufnr, remap = false } if client.name == "eslint" then vim.cmd.LspStop("eslint") return end vim.keymap.set("n", "gd", vim.lsp.buf.definition, addDesc(opts, "Go to definition")) vim.keymap.set("n", "L", vim.lsp.buf.definition, addDesc(opts, "Go to definition")) vim.keymap.set("n", "K", vim.lsp.buf.hover, addDesc(opts, "Show Hint")) vim.keymap.set("n", "gD", vim.diagnostic.setqflist, addDesc(opts, "Show diagnostics")) vim.keymap.set("n", "vws", vim.lsp.buf.workspace_symbol, addDesc(opts, "Query workspace")) vim.keymap.set("n", "vd", vim.diagnostic.open_float, addDesc(opts, "Open diagnostics")) vim.keymap.set("n", "[d", vim.diagnostic.goto_next, addDesc(opts, "Go to next diagnostics item")) vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, addDesc(opts, "Go to previous diagnostics item")) vim.keymap.set("n", "vca", vim.lsp.buf.code_action, addDesc(opts, "Code action")) -- vim.keymap.set("n", "", vim.lsp.buf.code_action, vim.keymap.set("n", "", ":CodeActionMenu", addDesc(opts, "Code action")) vim.keymap.set("n", "vrr", vim.lsp.buf.references, addDesc(opts, "Go to reference")) vim.keymap.set("n", "gr", vim.lsp.buf.references, addDesc(opts, "Go to reference")) vim.keymap.set("n", "vrn", vim.lsp.buf.rename, addDesc(opts, "Rename")) vim.keymap.set("n", "", vim.lsp.buf.rename, addDesc(opts, "Rename")) vim.keymap.set("i", "", vim.lsp.buf.signature_help, addDesc(opts, "Get signature help")) end local default_capabilities = require("cmp_nvim_lsp").default_capabilities( vim.lsp.protocol.make_client_capabilities()) local lspconfig = require("lspconfig") lspconfig.util.default_config = vim.tbl_extend("force", lspconfig.util.default_config, { on_attach = default_on_attach, capabilities = default_capabilities }) require("mason-null-ls").setup({ ensure_installed = { 'shellcheck', 'goimports', 'luaformatter' }, automatic_installation = false, automatic_setup = true, -- Recommended, but optional handlers = {} }) require("null-ls").setup({ sources = {} }) -- The nvim-cmp almost supports LSP's capabilities so You should advertise it to LSP servers.. local capabilities = require("cmp_nvim_lsp").default_capabilities() -- require 'lspconfig'.flux_lsp.setup { -- cmd = { "/home/nige/.cargo/bin/flux-lsp", "-l", "/tmp/fluxlsp" }, -- capabilities = capabilities, -- } -- Version 0.8.30 require 'lspconfig'.flux_lsp.setup { cmd = { "/home/nige/dotfiles/.config/nvim/bin/flux-lsp", "-l", "/tmp/fluxlsp" }, capabilities = capabilities } require("mason-lspconfig").setup_handlers({ function(server_name) -- default handler (optional) require("lspconfig")[server_name].setup({ capabilities = capabilities }) end, ["lua_ls"] = function() require("lspconfig").lua_ls.setup({ settings = { Lua = { diagnostics = { globals = { "vim" } } } }, capabilities = capabilities }) end, ["flux_lsp"] = function() require 'lspconfig'.flux_lsp.setup { cmd = { "/home/nige/dotfiles/.config/nvim/bin/flux-lsp", "-l", "/tmp/fluxlsp" }, capabilities = capabilities } end }) vim.diagnostic.config({ virtual_text = false, -- float = { show_header = true, souce = "always", border = "rounded", wrap = true, }, float = { show_header = true, source = true, border = "solid", }, severity_sort = true -- default to false })