local M = {} local map = vim.keymap.set local conf = require("nvconfig").ui.lsp -- export on_attach & capabilities M.on_attach = function(client, bufnr) local function opts(desc) return { buffer = bufnr, desc = "LSP " .. desc } end map("n", "gD", vim.lsp.buf.declaration, opts "Go to declaration") map("n", "gd", vim.lsp.buf.definition, opts "Go to definition") map("n", "K", vim.lsp.buf.hover, opts "hover information") map("n", "gi", vim.lsp.buf.implementation, opts "Go to implementation") map("n", "sh", vim.lsp.buf.signature_help, opts "Show signature help") map("n", "wa", vim.lsp.buf.add_workspace_folder, opts "Add workspace folder") map("n", "wr", vim.lsp.buf.remove_workspace_folder, opts "Remove workspace folder") map("n", "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts "List workspace folders") map("n", "D", vim.lsp.buf.type_definition, opts "Go to type definition") map("n", "ra", function() require "nvchad.lsp.renamer"() end, opts "NvRenamer") map({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts "Code action") map("n", "gr", vim.lsp.buf.references, opts "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 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, [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