local M = {} local map = vim.keymap.set -- export on_attach & capabilities for custom lspconfigs M.on_attach = function(client, bufnr) local conf = require("nvconfig").ui.lsp -- semanticTokens if not conf.semantic_tokens and client.supports_method "textDocument/semanticTokens" then client.server_capabilities.semanticTokensProvider = nil end if conf.signature and client.server_capabilities.signatureHelpProvider then require("nvchad.signature").setup(client, bufnr) end 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", "", 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.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") 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, settings = { Lua = { diagnostics = { globals = { "vim" }, }, workspace = { library = { [vim.fn.expand "$VIMRUNTIME/lua"] = true, [vim.fn.expand "$VIMRUNTIME/lua/vim/lsp"] = true, [vim.fn.stdpath "data" .. "/lazy/ui/nvchad_types"] = true, [vim.fn.stdpath "data" .. "/lazy/lazy.nvim/lua/lazy"] = true, }, maxPreload = 100000, preloadFileSize = 10000, }, }, }, } end return M