local M = {} function M.on_attach(_, bufnr) -- we create a function that lets us more easily define mappings specific -- for LSP related items. It sets the mode, buffer and description for us each time. local nmap = function(keys, func, desc) if desc then desc = "LSP: " .. desc end vim.keymap.set("n", keys, func, { buffer = bufnr, desc = desc }) end nmap("rn", vim.lsp.buf.rename, "[R]e[n]ame") nmap("ca", vim.lsp.buf.code_action, "[C]ode [A]ction") nmap("gd", vim.lsp.buf.definition, "[G]oto [D]efinition") -- NOTE: why are these functions that call the telescope builtin? -- because otherwise they would load telescope eagerly when this is defined. -- due to us using the on_require handler to make sure it is available. if nixCats("general.telescope") then nmap("gr", function() require("telescope.builtin").lsp_references() end, "[G]oto [R]eferences") nmap("gI", function() require("telescope.builtin").lsp_implementations() end, "[G]oto [I]mplementation") nmap("ds", function() require("telescope.builtin").lsp_document_symbols() end, "[D]ocument [S]ymbols") nmap("ws", function() require("telescope.builtin").lsp_dynamic_workspace_symbols() end, "[W]orkspace [S]ymbols") nmap("dd", "Telescope diagnostics bufnr=0", "[D]ocument [D]iagnostics") nmap("wd", "Telescope diagnostics", "[W]orkspace [D]iagnostics") end -- TODO: someone who knows the builtin versions of these to do instead help me out please. nmap("D", vim.lsp.buf.type_definition, "Type [D]efinition") nmap("e", vim.diagnostic.open_float, "Show [E]rror") -- See `:help K` for why this keymap nmap("K", vim.lsp.buf.hover, "Hover Documentation") nmap("", vim.lsp.buf.signature_help, "Signature Documentation") -- Lesser used LSP functionality nmap("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") nmap("wa", vim.lsp.buf.add_workspace_folder, "[W]orkspace [A]dd Folder") nmap("wr", vim.lsp.buf.remove_workspace_folder, "[W]orkspace [R]emove Folder") nmap("wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, "[W]orkspace [L]ist Folders") -- Create a command `:Format` local to the LSP buffer vim.api.nvim_buf_create_user_command(bufnr, "Format", function(_) vim.lsp.buf.format() end, { desc = "Format current buffer with LSP" }) end function M.get(server_name) local capabilities = require("blink.cmp").get_lsp_capabilities() return capabilities end return M