require("mason-lspconfig").setup() 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", "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("null-ls") local mason_null_ls = require("mason-null-ls") mason_null_ls.setup({ ensure_installed = { -- Opt to list sources here, when available in mason. }, automatic_installation = false, automatic_setup = true, -- Recommended, but optional }) -- mason_null_ls.setup_handlers() -- 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({ -- float = { show_header = true, souce = "always", border = "rounded", wrap = true, }, float = { show_header = true, souce = "always", border = "rounded" }, severity_sort = true, -- default to false })