local lsp = require("lspconfig") local fmt = require("null-ls") local cmp = require("cmp") require("nvim-autopairs").setup({}) require("lsp_signature").setup({ hint_enable = false, }) local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) fmt.setup({ sources = { fmt.builtins.formatting.clang_format, require("none-ls.formatting.rustfmt"), fmt.builtins.formatting.stylua, fmt.builtins.formatting.gofmt, }, on_attach = function(client, bufnr) if client.supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = augroup, buffer = bufnr, callback = function() vim.lsp.buf.format({ async = false }) end, }) end end, }) cmp.setup({ snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), [""] = cmp.mapping.confirm({ select = true }), }), window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "vsnip" }, { name = "spell", option = { keep_all_entries = false, enable_in_context = function() return true end, }, }, }, { { name = "buffer" }, { name = "nvim_lua" }, }), }) cmp.setup.filetype("gitcommit", { sources = cmp.config.sources({ { name = "git" }, }, { { name = "buffer" }, }), }) cmp.setup.cmdline({ "/", "?" }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = "buffer" }, }, }) cmp.setup.cmdline(":", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "path" }, }, { { name = "cmdline" }, }), }) local capabilities = require("cmp_nvim_lsp").default_capabilities() lsp.rust_analyzer.setup({ settings = { ["rust-analyzer"] = {}, }, capabilities = capabilities, }) local clangd_capabilities = vim.deepcopy(capabilities) clangd_capabilities["offsetEncoding"] = "utf-8" lsp.clangd.setup({ cmd = { "clangd", "--background-index", "--function-arg-placeholders=0", "-j=12", "--clang-tidy", }, capabilities = clangd_capabilities, init_options = { documentFormatting = true, }, }) lsp.pyright.setup({ capabilities = capabilities, }) lsp.gopls.setup({ capabilities = capabilities, }) lsp.asm_lsp.setup({ capabilities = capabilities, }) lsp.zls.setup({ capabilities = capabilities, }) lsp.jdtls.setup({ capabilities = capabilities, }) lsp.tinymist.setup({ capabilities = capabilities, }) lsp.lua_ls.setup({ on_init = function(client) local path = client.workspace_folders[1].name if not vim.loop.fs_stat(path .. "/.luarc.json") and not vim.loop.fs_stat(path .. "/.luarc.jsonc") then client.config.settings = vim.tbl_deep_extend("force", client.config.settings, { Lua = { runtime = { version = "LuaJIT", }, workspace = { checkThirdParty = false, library = { vim.env.VIMRUNTIME, }, }, }, }) client.notify("workspace/didChangeConfiguration", { settings = client.config.settings }) end return true end, capabilities = capabilities, })