return { { "hrsh7th/nvim-cmp", event = "InsertEnter", config = function() local cmp = require("cmp") local has_words_before = function() local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1] :sub(col, col) :match("%s") == nil end local luasnip = require("luasnip") cmp.setup({ snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, mapping = { [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() elseif has_words_before() then cmp.complete() else fallback() end end, { "i", "s", }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s", }), [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true, }), }, formatting = { format = function(entry, vim_item) -- set a name for each source vim_item.menu = ({ path = "[Path]", nvim_lsp = "[LSP]", luasnip = "[LuaSnip]", dap = "[dap]", })[entry.source.name] return vim_item end, }, sources = { { name = "nvim_lsp" }, { name = "luasnip" }, { name = "path" }, { name = "nvim_lsp_signature_help" }, }, }) require "cmp".setup.filetype( { "dap-repl", "dapui_watches", "dapui_hover" }, { sources = { { name = "dap" }, }, }) local cmp_autopairs = require 'nvim-autopairs.completion.cmp' cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) end, dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-path", "hrsh7th/cmp-nvim-lsp-signature-help", "rcarriga/cmp-dap", "windwp/nvim-autopairs", { "saadparwaiz1/cmp_luasnip", dependencies = { { "L3MON4D3/LuaSnip", event = "InsertCharPre", keys = { { "", function() require "luasnip".jump(1) end, mode = "i" }, { "", function() require "luasnip".jump(-1) end, mode = "i" }, }, config = function() require("luasnip/loaders/from_vscode").lazy_load() end, dependencies = { "kitagry/vs-snippets", "rafamadriz/friendly-snippets", "kkonghao/snippet-dog", }, } }, }, }, }, }