local M = {} local map = vim.keymap.set local conf = require("nvconfig").ui.lsp -- export on_attach & capabilities for custom lspconfigs M.on_attach = function(client, bufnr) local function opts(desc) return { buffer = bufnr, desc = desc } end map("n", "gD", vim.lsp.buf.declaration, opts "Lsp Go to declaration") map("n", "gd", vim.lsp.buf.definition, opts "Lsp Go to definition") map("n", "K", vim.lsp.buf.hover, opts "Lsp hover information") map("n", "gi", vim.lsp.buf.implementation, opts "Lsp Go to implementation") map("n", "sh", vim.lsp.buf.signature_help, opts "Lsp Show signature help") map("n", "wa", vim.lsp.buf.add_workspace_folder, opts "Lsp Add workspace folder") map("n", "wr", vim.lsp.buf.remove_workspace_folder, opts "Lsp Remove workspace folder") map("n", "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts "Lsp List workspace folders") map("n", "D", vim.lsp.buf.type_definition, opts "Lsp Go to type definition") map("n", "ra", function() require "nvchad.lsp.renamer"() end, opts "Lsp NvRenamer") map({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts "Lsp Code action") map("n", "gr", vim.lsp.buf.references, opts "Lsp Show references") -- setup signature popup if conf.signature and client.server_capabilities.signatureHelpProvider then require("nvchad.lsp.signature").setup(client, bufnr) end end -- disable semanticTokens M.on_init = function(client, _) if not conf.semantic_tokens and client.supports_method "textDocument/semanticTokens" then client.server_capabilities.semanticTokensProvider = nil end end M.capabilities = vim.lsp.protocol.make_client_capabilities() M.capabilities.textDocument.completion.completionItem = { documentationFormat = { "markdown", "plaintext" }, snippetSupport = true, preselectSupport = true, insertReplaceSupport = true, labelDetailsSupport = true, deprecatedSupport = true, commitCharactersSupport = true, tagSupport = { valueSet = { 1 } }, resolveSupport = { properties = { "documentation", "detail", "additionalTextEdits", }, }, } M.defaults = function() dofile(vim.g.base46_cache .. "lsp") require "nvchad.lsp" require("lspconfig").lua_ls.setup { on_attach = M.on_attach, capabilities = M.capabilities, on_init = M.on_init, settings = { Lua = { diagnostics = { globals = { "vim" }, }, workspace = { library = { [vim.fn.expand "$VIMRUNTIME/lua"] = true, [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, }, maxPreload = 100000, preloadFileSize = 10000, }, }, }, } end return M