local M = {} local map = function(mode, lhs, rhs, opts) vim.keymap.set(mode, lhs, rhs, { buffer = opts[1], desc = opts[2] }) end M.map = map M.default_config = { on_attach = function(client, bufnr) if client.server_capabilities.documentSymbolProvider then require("nvim-navic").attach(client, bufnr) end map("n", "K", vim.lsp.buf.hover, { bufnr, "Hover Information" }) map("n", "]d", vim.diagnostic.goto_next, { bufnr, "Next Diagnostic" }) map("n", "[d", vim.diagnostic.goto_prev, { bufnr, "Previous Diagnostic" }) map("n", "gs", vim.lsp.buf.signature_help, { bufnr, "Signature Help" }) map("n", "gD", vim.lsp.buf.declaration, { bufnr, "Declarations" }) map("n", "gd", "Telescope lsp_definitions", { bufnr, "Definitions" }) map("n", "gT", "Telescope lsp_type_definitions", { bufnr, "Type Definitions" }) map("n", "gr", "Telescope lsp_references", { bufnr, "References" }) map("n", "gI", "Telescope lsp_implementations", { bufnr, "Implementations" }) map("n", "gl", function() vim.diagnostic.open_float(0, { scope = "line" }) end, { bufnr, "LSP Line Diagnostics" }) map("n", "la", vim.lsp.buf.code_action, { bufnr, "Code Action" }) map("n", "lr", vim.lsp.buf.rename, { bufnr, "Rename" }) map("n", "lf", vim.lsp.buf.format, { bufnr, "Format" }) map("n", "ld", "Telescope diagnostics", { bufnr, "Workspace Diagnostics" }) map("n", "lD", "Telescope diagnostics bufnr=0", { bufnr, "Buffer Diagnostics" }) map("n", "ls", "Telescope lsp_document_symbols", { bufnr, "Document Symbols" }) map("n", "lS", "Telescope lsp_workspace_symbols", { bufnr, "Workspace Symbols" }) map("n", "lwa", vim.lsp.buf.add_workspace_folder, { bufnr, "Add Workspace Folder" }) map("n", "lwr", vim.lsp.buf.remove_workspace_folder, { bufnr, "Remove Workspace Folder" }) map("n", "lwl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, { bufnr, "List Workspace Folders" }) end, } return M