Files
nvim-cmp/lua/cmp/utils/autocmd.lua
abeldekat 12509903a5 fix: Outdated completion item with mini.snippets (#2126)
* fix: Outdated completion item with mini.snippets

* fix: Outdated completion item with mini.snippets. Prevent completion suggestions directly after snippet expand

* fix: Outdated completion item with mini.snippets. Undo changes

* fix: Outdated completion item with mini.snippets. The cmp.resubscribe solution

---------

Co-authored-by: abeldekat <abel@nomail.com>
2025-01-23 16:22:37 +09:00

78 lines
1.8 KiB
Lua

local debug = require('cmp.utils.debug')
local autocmd = {}
autocmd.group = vim.api.nvim_create_augroup('___cmp___', { clear = true })
autocmd.events = {}
local function create_autocmd(event)
vim.api.nvim_create_autocmd(event, {
desc = ('nvim-cmp: autocmd: %s'):format(event),
group = autocmd.group,
callback = function()
autocmd.emit(event)
end,
})
end
---Subscribe autocmd
---@param events string|string[]
---@param callback function
---@return function
autocmd.subscribe = function(events, callback)
events = type(events) == 'string' and { events } or events
for _, event in ipairs(events) do
if not autocmd.events[event] then
autocmd.events[event] = {}
create_autocmd(event)
end
table.insert(autocmd.events[event], callback)
end
return function()
for _, event in ipairs(events) do
for i, callback_ in ipairs(autocmd.events[event]) do
if callback_ == callback then
table.remove(autocmd.events[event], i)
break
end
end
end
end
end
---Emit autocmd
---@param event string
autocmd.emit = function(event)
debug.log(' ')
debug.log(string.format('>>> %s', event))
autocmd.events[event] = autocmd.events[event] or {}
for _, callback in ipairs(autocmd.events[event]) do
callback()
end
end
---Resubscribe to events
---@param events string[]
autocmd.resubscribe = function(events)
-- Delete the autocommands if present
local found = vim.api.nvim_get_autocmds({
group = autocmd.group,
event = events,
})
for _, to_delete in ipairs(found) do
vim.api.nvim_del_autocmd(to_delete.id)
end
-- Recreate if event is known
for _, event in ipairs(events) do
if autocmd.events[event] then
create_autocmd(event)
end
end
end
return autocmd