local cmp = require "cmp" dofile(vim.g.base46_cache .. "cmp") local cmp_ui = require("nvconfig").ui.cmp local cmp_style = cmp_ui.style local field_arrangement = { atom = { "kind", "abbr", "menu" }, atom_colored = { "kind", "abbr", "menu" }, } local formatting_style = { -- default fields order i.e completion word + item.kind + item.kind icons fields = field_arrangement[cmp_style] or { "abbr", "kind", "menu" }, format = function(_, item) local icons = require "nvchad.icons.lspkind" local icon = (cmp_ui.icons and icons[item.kind]) or "" if cmp_style == "atom" or cmp_style == "atom_colored" then icon = " " .. icon .. " " item.menu = cmp_ui.lspkind_text and " (" .. item.kind .. ")" or "" item.kind = icon else icon = cmp_ui.lspkind_text and (" " .. icon .. " ") or icon item.kind = string.format("%s %s", icon, cmp_ui.lspkind_text and item.kind or "") end return item end, } local function border(hl_name) return { { "╭", hl_name }, { "─", hl_name }, { "╮", hl_name }, { "│", hl_name }, { "╯", hl_name }, { "─", hl_name }, { "╰", hl_name }, { "│", hl_name }, } end local options = { completion = { completeopt = "menu,menuone", }, window = { completion = { side_padding = (cmp_style ~= "atom" and cmp_style ~= "atom_colored") and 1 or 0, winhighlight = "Normal:CmpPmenu,CursorLine:CmpSel,Search:None", scrollbar = false, }, documentation = { border = border "CmpDocBorder", winhighlight = "Normal:CmpDoc", }, }, snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, formatting = formatting_style, mapping = { [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.close(), [""] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Insert, select = true, }, [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif require("luasnip").expand_or_jumpable() then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif require("luasnip").jumpable(-1) then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") else fallback() end end, { "i", "s" }), }, sources = { { name = "nvim_lsp" }, { name = "luasnip" }, { name = "buffer" }, { name = "nvim_lua" }, { name = "path" }, }, } if cmp_style ~= "atom" and cmp_style ~= "atom_colored" then options.window.completion.border = border "CmpBorder" end return options