local cmp_status_ok, cmp = pcall(require, "cmp") if not cmp_status_ok then return end local snip_status_ok, _ = pcall(require, "luasnip") if snip_status_ok then require("luasnip/loaders/from_vscode").lazy_load() end local lspkind_status_ok, lspkind = pcall(require, "lspkind") if not lspkind_status_ok then return end local source_mapping = { buffer = "[Buffer]", nvim_lsp = "[LSP]", nvim_lua = "[Lua]", cmp_tabnine = "[TN]", path = "[Path]", } cmp.setup({ snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), }), formatting = { format = function(entry, vim_item) vim_item.kind = lspkind.presets.default[vim_item.kind] local menu = source_mapping[entry.source.name] vim_item.menu = menu return vim_item end, }, sources = { { name = "nvim_lsp" }, { name = "path" }, { name = "luasnip" }, { name = "buffer" }, }, })