| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 
							- local M = {}
 
- local check_backspace = function()
 
-   local col = vim.fn.col "." - 1
 
-   return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
 
- end
 
- local function T(str)
 
-   return vim.api.nvim_replace_termcodes(str, true, true, true)
 
- end
 
- local is_emmet_active = function()
 
-   local clients = vim.lsp.buf_get_clients()
 
-   for _, client in pairs(clients) do
 
-     if client.name == "emmet_ls" then
 
-       return true
 
-     end
 
-   end
 
-   return false
 
- end
 
- M.config = function()
 
-   local status_cmp_ok, cmp = pcall(require, "cmp")
 
-   if not status_cmp_ok then
 
-     return
 
-   end
 
-   local status_luasnip_ok, luasnip = pcall(require, "luasnip")
 
-   if not status_luasnip_ok then
 
-     return
 
-   end
 
-   lvim.builtin.cmp = {
 
-     formatting = {
 
-       format = function(entry, vim_item)
 
-         local icons = require("lsp.kind").icons
 
-         vim_item.kind = icons[vim_item.kind]
 
-         vim_item.menu = ({
 
-           nvim_lsp = "(LSP)",
 
-           emoji = "(Emoji)",
 
-           path = "(Path)",
 
-           calc = "(Calc)",
 
-           cmp_tabnine = "(Tabnine)",
 
-           vsnip = "(Snippet)",
 
-           luasnip = "(Snippet)",
 
-           buffer = "(Buffer)",
 
-         })[entry.source.name]
 
-         vim_item.dup = ({
 
-           buffer = 1,
 
-           path = 1,
 
-           nvim_lsp = 0,
 
-         })[entry.source.name] or 0
 
-         return vim_item
 
-       end,
 
-     },
 
-     snippet = {
 
-       expand = function(args)
 
-         require("luasnip").lsp_expand(args.body)
 
-       end,
 
-     },
 
-     documentation = {
 
-       border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" },
 
-     },
 
-     sources = {
 
-       { name = "nvim_lsp" },
 
-       { name = "path" },
 
-       { name = "luasnip" },
 
-       { name = "cmp_tabnine" },
 
-       { name = "nvim_lua" },
 
-       { name = "buffer" },
 
-       { name = "calc" },
 
-       { name = "emoji" },
 
-       { name = "treesitter" },
 
-       { name = "crates" },
 
-     },
 
-     mapping = {
 
-       ["<C-d>"] = cmp.mapping.scroll_docs(-4),
 
-       ["<C-f>"] = cmp.mapping.scroll_docs(4),
 
-       -- TODO: potentially fix emmet nonsense
 
-       ["<Tab>"] = cmp.mapping(function()
 
-         if vim.fn.pumvisible() == 1 then
 
-           vim.fn.feedkeys(T "<down>", "n")
 
-         elseif luasnip.expand_or_jumpable() then
 
-           vim.fn.feedkeys(T "<Plug>luasnip-expand-or-jump", "")
 
-         elseif check_backspace() then
 
-           vim.fn.feedkeys(T "<Tab>", "n")
 
-         elseif is_emmet_active() then
 
-           return vim.fn["cmp#complete"]()
 
-         else
 
-           vim.fn.feedkeys(T "<Tab>", "n")
 
-         end
 
-       end, {
 
-         "i",
 
-         "s",
 
-       }),
 
-       ["<S-Tab>"] = cmp.mapping(function(fallback)
 
-         if vim.fn.pumvisible() == 1 then
 
-           vim.fn.feedkeys(T "<up>", "n")
 
-         elseif luasnip.jumpable(-1) then
 
-           vim.fn.feedkeys(T "<Plug>luasnip-jump-prev", "")
 
-         else
 
-           fallback()
 
-         end
 
-       end, {
 
-         "i",
 
-         "s",
 
-       }),
 
-       ["<C-Space>"] = cmp.mapping.complete(),
 
-       ["<C-e>"] = cmp.mapping.close(),
 
-       ["<CR>"] = cmp.mapping.confirm {
 
-         behavior = cmp.ConfirmBehavior.Replace,
 
-         select = true,
 
-       },
 
-     },
 
-   }
 
- end
 
- M.setup = function()
 
-   require("luasnip/loaders/from_vscode").lazy_load()
 
-   require("cmp").setup(lvim.builtin.cmp)
 
- end
 
- return M
 
 
  |