fix(event): dont use autocmd pattern to detect event retriggering. Fixes #858

This commit is contained in:
Folke Lemaitre 2023-06-06 14:29:38 +02:00
parent f145e6f42a
commit bc89502357
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
1 changed files with 6 additions and 8 deletions

View File

@ -28,11 +28,11 @@ function M:_add(value)
return return
end end
Util.track({ [self.type] = value }) Util.track({ [self.type] = value })
local groups = M.get_augroups(event, pattern) local groups = M.get_augroups(event)
-- load the plugins -- load the plugins
Loader.load(self.active[value], { [self.type] = value }) Loader.load(self.active[value], { [self.type] = value })
-- check if any plugin created an event handler for this event and fire the group -- check if any plugin created an event handler for this event and fire the group
self:trigger(event, pattern, groups) self:trigger(event, groups)
Util.track() Util.track()
end, end,
}) })
@ -45,12 +45,11 @@ end
-- Get all augroups for the events -- Get all augroups for the events
---@param event string ---@param event string
---@param pattern? string function M.get_augroups(event)
function M.get_augroups(event, pattern)
local events = M.trigger_events[event] or { event } local events = M.trigger_events[event] or { event }
---@type table<string,true> ---@type table<string,true>
local groups = {} local groups = {}
for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events, pattern = pattern })) do for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = events })) do
if autocmd.group then if autocmd.group then
groups[autocmd.group] = true groups[autocmd.group] = true
end end
@ -61,18 +60,17 @@ end
---@param event string|string[] ---@param event string|string[]
---@param pattern? string ---@param pattern? string
---@param groups table<string,true> ---@param groups table<string,true>
function M:trigger(event, pattern, groups) function M:trigger(event, groups)
local events = M.trigger_events[event] or { event } local events = M.trigger_events[event] or { event }
---@cast events string[] ---@cast events string[]
for _, e in ipairs(events) do for _, e in ipairs(events) do
for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e, pattern = pattern })) do for _, autocmd in ipairs(vim.api.nvim_get_autocmds({ event = e })) do
if autocmd.event == e and autocmd.group and not groups[autocmd.group] then if autocmd.event == e and autocmd.group and not groups[autocmd.group] then
if Config.options.debug then if Config.options.debug then
Util.info({ Util.info({
"# Firing Events", "# Firing Events",
" - **group:** `" .. autocmd.group_name .. "`", " - **group:** `" .. autocmd.group_name .. "`",
" - **event:** " .. autocmd.event, " - **event:** " .. autocmd.event,
pattern and (" - **pattern:** " .. pattern),
}) })
end end
Util.track({ event = autocmd.group_name }) Util.track({ event = autocmd.group_name })