mirror of
https://github.com/neovim/neovim.git
synced 2025-09-23 11:38:31 +00:00
refactor(generator): remove nested loop for event aliases (#32780)
After #32777 the aliases no longer need to come later, so the list of autocommand names can be fully sorted.
This commit is contained in:
@@ -3,9 +3,14 @@ local names_file = arg[2]
|
||||
|
||||
local auevents = require('nvim.auevents')
|
||||
local events = auevents.events
|
||||
local aliases = auevents.aliases
|
||||
|
||||
local enum_tgt = io.open(fileio_enum_file, 'w')
|
||||
local names_tgt = io.open(names_file, 'w')
|
||||
--- @type string[]
|
||||
local names = vim.tbl_keys(vim.tbl_extend('error', events, aliases))
|
||||
table.sort(names)
|
||||
|
||||
local enum_tgt = assert(io.open(fileio_enum_file, 'w'))
|
||||
local names_tgt = assert(io.open(names_file, 'w'))
|
||||
|
||||
enum_tgt:write([[
|
||||
// IWYU pragma: private, include "nvim/autocmd_defs.h"
|
||||
@@ -18,23 +23,25 @@ static const struct event_name {
|
||||
int event;
|
||||
} event_names[] = {]])
|
||||
|
||||
local aliases = 0
|
||||
for i, event in ipairs(events) do
|
||||
enum_tgt:write(('\n EVENT_%s = %u,'):format(event[1]:upper(), i + aliases - 1))
|
||||
for i, name in ipairs(names) do
|
||||
enum_tgt:write(('\n EVENT_%s = %u,'):format(name:upper(), i - 1))
|
||||
local pref_name = aliases[name] ~= nil and aliases[name] or name
|
||||
local win_local = events[pref_name]
|
||||
assert(win_local ~= nil)
|
||||
-- Events with positive keys aren't allowed in 'eventignorewin'.
|
||||
local event_int = ('%sEVENT_%s'):format(event[3] and '-' or '', event[1]:upper())
|
||||
names_tgt:write(('\n {%u, "%s", %s},'):format(#event[1], event[1], event_int))
|
||||
for _, alias in ipairs(event[2]) do
|
||||
aliases = aliases + 1
|
||||
names_tgt:write(('\n {%u, "%s", %s},'):format(#alias, alias, event_int))
|
||||
enum_tgt:write(('\n EVENT_%s = %u,'):format(alias:upper(), i + aliases - 1))
|
||||
end
|
||||
if i == #events then -- Last item.
|
||||
enum_tgt:write(('\n NUM_EVENTS = %u,'):format(i + aliases))
|
||||
end
|
||||
names_tgt:write(
|
||||
('\n [EVENT_%s] = {%u, "%s", %sEVENT_%s},'):format(
|
||||
name:upper(),
|
||||
#name,
|
||||
name,
|
||||
win_local and '-' or '',
|
||||
pref_name:upper()
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
names_tgt:write('\n {0, NULL, (event_T)0},\n};\n')
|
||||
enum_tgt:write(('\n NUM_EVENTS = %u,'):format(#names))
|
||||
names_tgt:write('\n [NUM_EVENTS] = {0, NULL, (event_T)0},\n};\n')
|
||||
names_tgt:write('\nstatic AutoCmdVec autocmds[NUM_EVENTS] = { 0 };\n')
|
||||
names_tgt:close()
|
||||
|
||||
|
@@ -113,19 +113,12 @@ w('\nsyn case ignore')
|
||||
local vimau_start = 'syn keyword vimAutoEvent contained '
|
||||
w('\n\n' .. vimau_start)
|
||||
|
||||
for _, au in ipairs(auevents.events) do
|
||||
if not auevents.nvim_specific[au[1]] then
|
||||
for au, _ in vim.spairs(vim.tbl_extend('error', auevents.events, auevents.aliases)) do
|
||||
if not auevents.nvim_specific[au] then
|
||||
if lld.line_length > 850 then
|
||||
w('\n' .. vimau_start)
|
||||
end
|
||||
w(' ' .. au[1])
|
||||
for _, alias in ipairs(au[2]) do
|
||||
if lld.line_length > 850 then
|
||||
w('\n' .. vimau_start)
|
||||
end
|
||||
-- au[1] is aliased to alias
|
||||
w(' ' .. alias)
|
||||
end
|
||||
w(' ' .. au)
|
||||
end
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user