mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +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
|
||||
|
||||
|
@@ -1,142 +1,153 @@
|
||||
return {
|
||||
--- @type [string, string[], boolean][] List of [eventname, aliases, window-local event] tuples.
|
||||
--- @type table<string,boolean>
|
||||
--- Keys are events names.
|
||||
--- Values are boolean indicating whether the event is window-local.
|
||||
events = {
|
||||
{ 'BufAdd', { 'BufCreate' }, true }, -- after adding a buffer to the buffer list
|
||||
{ 'BufDelete', {}, true }, -- deleting a buffer from the buffer list
|
||||
{ 'BufEnter', {}, true }, -- after entering a buffer
|
||||
{ 'BufFilePost', {}, true }, -- after renaming a buffer
|
||||
{ 'BufFilePre', {}, true }, -- before renaming a buffer
|
||||
{ 'BufHidden', {}, true }, -- just after buffer becomes hidden
|
||||
{ 'BufLeave', {}, true }, -- before leaving a buffer
|
||||
{ 'BufModifiedSet', {}, true }, -- after the 'modified' state of a buffer changes
|
||||
{ 'BufNew', {}, true }, -- after creating any buffer
|
||||
{ 'BufNewFile', {}, true }, -- when creating a buffer for a new file
|
||||
{ 'BufReadCmd', {}, true }, -- read buffer using command
|
||||
{ 'BufReadPost', { 'BufRead' }, true }, -- after reading a buffer
|
||||
{ 'BufReadPre', {}, true }, -- before reading a buffer
|
||||
{ 'BufUnload', {}, true }, -- just before unloading a buffer
|
||||
{ 'BufWinEnter', {}, true }, -- after showing a buffer in a window
|
||||
{ 'BufWinLeave', {}, true }, -- just after buffer removed from window
|
||||
{ 'BufWipeout', {}, true }, -- just before really deleting a buffer
|
||||
{ 'BufWriteCmd', {}, true }, -- write buffer using command
|
||||
{ 'BufWritePost', {}, true }, -- after writing a buffer
|
||||
{ 'BufWritePre', { 'BufWrite' }, true }, -- before writing a buffer
|
||||
{ 'ChanInfo', {}, false }, -- info was received about channel
|
||||
{ 'ChanOpen', {}, false }, -- channel was opened
|
||||
{ 'CmdUndefined', {}, false }, -- command undefined
|
||||
{ 'CmdWinEnter', {}, false }, -- after entering the cmdline window
|
||||
{ 'CmdWinLeave', {}, false }, -- before leaving the cmdline window
|
||||
{ 'CmdlineChanged', {}, false }, -- command line was modified
|
||||
{ 'CmdlineEnter', {}, false }, -- after entering cmdline mode
|
||||
{ 'CmdlineLeave', {}, false }, -- before leaving cmdline mode
|
||||
{ 'ColorScheme', {}, false }, -- after loading a colorscheme
|
||||
{ 'ColorSchemePre', {}, false }, -- before loading a colorscheme
|
||||
{ 'CompleteChanged', {}, false }, -- after popup menu changed
|
||||
{ 'CompleteDone', {}, false }, -- after finishing insert complete
|
||||
{ 'CompleteDonePre', {}, false }, -- idem, before clearing info
|
||||
{ 'CursorHold', {}, true }, -- cursor in same position for a while
|
||||
{ 'CursorHoldI', {}, true }, -- idem, in Insert mode
|
||||
{ 'CursorMoved', {}, true }, -- cursor was moved
|
||||
{ 'CursorMovedC', {}, true }, -- cursor was moved in Cmdline mode
|
||||
{ 'CursorMovedI', {}, true }, -- cursor was moved in Insert mode
|
||||
{ 'DiagnosticChanged', {}, false }, -- diagnostics in a buffer were modified
|
||||
{ 'DiffUpdated', {}, false }, -- diffs have been updated
|
||||
{ 'DirChanged', {}, false }, -- directory changed
|
||||
{ 'DirChangedPre', {}, false }, -- directory is going to change
|
||||
{ 'EncodingChanged', { 'FileEncoding' }, false }, -- after changing the 'encoding' option
|
||||
{ 'ExitPre', {}, false }, -- before exiting
|
||||
{ 'FileAppendCmd', {}, true }, -- append to a file using command
|
||||
{ 'FileAppendPost', {}, true }, -- after appending to a file
|
||||
{ 'FileAppendPre', {}, true }, -- before appending to a file
|
||||
{ 'FileChangedRO', {}, true }, -- before first change to read-only file
|
||||
{ 'FileChangedShell', {}, true }, -- after shell command that changed file
|
||||
{ 'FileChangedShellPost', {}, true }, -- after (not) reloading changed file
|
||||
{ 'FileReadCmd', {}, true }, -- read from a file using command
|
||||
{ 'FileReadPost', {}, true }, -- after reading a file
|
||||
{ 'FileReadPre', {}, true }, -- before reading a file
|
||||
{ 'FileType', {}, true }, -- new file type detected (user defined)
|
||||
{ 'FileWriteCmd', {}, true }, -- write to a file using command
|
||||
{ 'FileWritePost', {}, true }, -- after writing a file
|
||||
{ 'FileWritePre', {}, true }, -- before writing a file
|
||||
{ 'FilterReadPost', {}, true }, -- after reading from a filter
|
||||
{ 'FilterReadPre', {}, true }, -- before reading from a filter
|
||||
{ 'FilterWritePost', {}, true }, -- after writing to a filter
|
||||
{ 'FilterWritePre', {}, true }, -- before writing to a filter
|
||||
{ 'FocusGained', {}, false }, -- got the focus
|
||||
{ 'FocusLost', {}, false }, -- lost the focus to another app
|
||||
{ 'FuncUndefined', {}, false }, -- if calling a function which doesn't exist
|
||||
{ 'GUIEnter', {}, false }, -- after starting the GUI
|
||||
{ 'GUIFailed', {}, false }, -- after starting the GUI failed
|
||||
{ 'InsertChange', {}, true }, -- when changing Insert/Replace mode
|
||||
{ 'InsertCharPre', {}, true }, -- before inserting a char
|
||||
{ 'InsertEnter', {}, true }, -- when entering Insert mode
|
||||
{ 'InsertLeave', {}, true }, -- just after leaving Insert mode
|
||||
{ 'InsertLeavePre', {}, true }, -- just before leaving Insert mode
|
||||
{ 'LspAttach', {}, false }, -- after an LSP client attaches to a buffer
|
||||
{ 'LspDetach', {}, false }, -- after an LSP client detaches from a buffer
|
||||
{ 'LspNotify', {}, false }, -- after an LSP notice has been sent to the server
|
||||
{ 'LspProgress', {}, false }, -- after a LSP progress update
|
||||
{ 'LspRequest', {}, false }, -- after an LSP request is started, canceled, or completed
|
||||
{ 'LspTokenUpdate', {}, false }, -- after a visible LSP token is updated
|
||||
{ 'MenuPopup', {}, false }, -- just before popup menu is displayed
|
||||
{ 'ModeChanged', {}, false }, -- after changing the mode
|
||||
{ 'OptionSet', {}, false }, -- after setting any option
|
||||
{ 'QuickFixCmdPost', {}, false }, -- after :make, :grep etc.
|
||||
{ 'QuickFixCmdPre', {}, false }, -- before :make, :grep etc.
|
||||
{ 'QuitPre', {}, false }, -- before :quit
|
||||
{ 'RecordingEnter', {}, true }, -- when starting to record a macro
|
||||
{ 'RecordingLeave', {}, true }, -- just before a macro stops recording
|
||||
{ 'RemoteReply', {}, false }, -- upon string reception from a remote vim
|
||||
{ 'SafeState', {}, false }, -- going to wait for a character
|
||||
{ 'SearchWrapped', {}, true }, -- after the search wrapped around
|
||||
{ 'SessionLoadPost', {}, false }, -- after loading a session file
|
||||
{ 'SessionWritePost', {}, false }, -- after writing a session file
|
||||
{ 'ShellCmdPost', {}, false }, -- after ":!cmd"
|
||||
{ 'ShellFilterPost', {}, true }, -- after ":1,2!cmd", ":w !cmd", ":r !cmd".
|
||||
{ 'Signal', {}, false }, -- after nvim process received a signal
|
||||
{ 'SourceCmd', {}, false }, -- sourcing a Vim script using command
|
||||
{ 'SourcePost', {}, false }, -- after sourcing a Vim script
|
||||
{ 'SourcePre', {}, false }, -- before sourcing a Vim script
|
||||
{ 'SpellFileMissing', {}, false }, -- spell file missing
|
||||
{ 'StdinReadPost', {}, false }, -- after reading from stdin
|
||||
{ 'StdinReadPre', {}, false }, -- before reading from stdin
|
||||
{ 'SwapExists', {}, false }, -- found existing swap file
|
||||
{ 'Syntax', {}, false }, -- syntax selected
|
||||
{ 'TabClosed', {}, false }, -- a tab has closed
|
||||
{ 'TabEnter', {}, false }, -- after entering a tab page
|
||||
{ 'TabLeave', {}, false }, -- before leaving a tab page
|
||||
{ 'TabNew', {}, false }, -- when creating a new tab
|
||||
{ 'TabNewEntered', {}, false }, -- after entering a new tab
|
||||
{ 'TermChanged', {}, false }, -- after changing 'term'
|
||||
{ 'TermClose', {}, false }, -- after the process exits
|
||||
{ 'TermEnter', {}, false }, -- after entering Terminal mode
|
||||
{ 'TermLeave', {}, false }, -- after leaving Terminal mode
|
||||
{ 'TermOpen', {}, false }, -- after opening a terminal buffer
|
||||
{ 'TermRequest', {}, false }, -- after an unhandled OSC sequence is emitted
|
||||
{ 'TermResponse', {}, false }, -- after setting "v:termresponse"
|
||||
{ 'TextChanged', {}, true }, -- text was modified
|
||||
{ 'TextChangedI', {}, true }, -- text was modified in Insert mode(no popup)
|
||||
{ 'TextChangedP', {}, true }, -- text was modified in Insert mode(popup)
|
||||
{ 'TextChangedT', {}, true }, -- text was modified in Terminal mode
|
||||
{ 'TextYankPost', {}, true }, -- after a yank or delete was done (y, d, c)
|
||||
{ 'UIEnter', {}, false }, -- after UI attaches
|
||||
{ 'UILeave', {}, false }, -- after UI detaches
|
||||
{ 'User', {}, false }, -- user defined autocommand
|
||||
{ 'VimEnter', {}, false }, -- after starting Vim
|
||||
{ 'VimLeave', {}, false }, -- before exiting Vim
|
||||
{ 'VimLeavePre', {}, false }, -- before exiting Vim and writing ShaDa file
|
||||
{ 'VimResized', {}, false }, -- after Vim window was resized
|
||||
{ 'VimResume', {}, false }, -- after Nvim is resumed
|
||||
{ 'VimSuspend', {}, false }, -- before Nvim is suspended
|
||||
{ 'WinClosed', {}, true }, -- after closing a window
|
||||
{ 'WinEnter', {}, true }, -- after entering a window
|
||||
{ 'WinLeave', {}, true }, -- before leaving a window
|
||||
{ 'WinNew', {}, false }, -- when entering a new window
|
||||
{ 'WinResized', {}, true }, -- after a window was resized
|
||||
{ 'WinScrolled', {}, true }, -- after a window was scrolled or resized
|
||||
BufAdd = true, -- after adding a buffer to the buffer list
|
||||
BufDelete = true, -- deleting a buffer from the buffer list
|
||||
BufEnter = true, -- after entering a buffer
|
||||
BufFilePost = true, -- after renaming a buffer
|
||||
BufFilePre = true, -- before renaming a buffer
|
||||
BufHidden = true, -- just after buffer becomes hidden
|
||||
BufLeave = true, -- before leaving a buffer
|
||||
BufModifiedSet = true, -- after the 'modified' state of a buffer changes
|
||||
BufNew = true, -- after creating any buffer
|
||||
BufNewFile = true, -- when creating a buffer for a new file
|
||||
BufReadCmd = true, -- read buffer using command
|
||||
BufReadPost = true, -- after reading a buffer
|
||||
BufReadPre = true, -- before reading a buffer
|
||||
BufUnload = true, -- just before unloading a buffer
|
||||
BufWinEnter = true, -- after showing a buffer in a window
|
||||
BufWinLeave = true, -- just after buffer removed from window
|
||||
BufWipeout = true, -- just before really deleting a buffer
|
||||
BufWriteCmd = true, -- write buffer using command
|
||||
BufWritePost = true, -- after writing a buffer
|
||||
BufWritePre = true, -- before writing a buffer
|
||||
ChanInfo = false, -- info was received about channel
|
||||
ChanOpen = false, -- channel was opened
|
||||
CmdUndefined = false, -- command undefined
|
||||
CmdWinEnter = false, -- after entering the cmdline window
|
||||
CmdWinLeave = false, -- before leaving the cmdline window
|
||||
CmdlineChanged = false, -- command line was modified
|
||||
CmdlineEnter = false, -- after entering cmdline mode
|
||||
CmdlineLeave = false, -- before leaving cmdline mode
|
||||
ColorScheme = false, -- after loading a colorscheme
|
||||
ColorSchemePre = false, -- before loading a colorscheme
|
||||
CompleteChanged = false, -- after popup menu changed
|
||||
CompleteDone = false, -- after finishing insert complete
|
||||
CompleteDonePre = false, -- idem, before clearing info
|
||||
CursorHold = true, -- cursor in same position for a while
|
||||
CursorHoldI = true, -- idem, in Insert mode
|
||||
CursorMoved = true, -- cursor was moved
|
||||
CursorMovedC = true, -- cursor was moved in Cmdline mode
|
||||
CursorMovedI = true, -- cursor was moved in Insert mode
|
||||
DiagnosticChanged = false, -- diagnostics in a buffer were modified
|
||||
DiffUpdated = false, -- diffs have been updated
|
||||
DirChanged = false, -- directory changed
|
||||
DirChangedPre = false, -- directory is going to change
|
||||
EncodingChanged = false, -- after changing the 'encoding' option
|
||||
ExitPre = false, -- before exiting
|
||||
FileAppendCmd = true, -- append to a file using command
|
||||
FileAppendPost = true, -- after appending to a file
|
||||
FileAppendPre = true, -- before appending to a file
|
||||
FileChangedRO = true, -- before first change to read-only file
|
||||
FileChangedShell = true, -- after shell command that changed file
|
||||
FileChangedShellPost = true, -- after (not) reloading changed file
|
||||
FileReadCmd = true, -- read from a file using command
|
||||
FileReadPost = true, -- after reading a file
|
||||
FileReadPre = true, -- before reading a file
|
||||
FileType = true, -- new file type detected (user defined)
|
||||
FileWriteCmd = true, -- write to a file using command
|
||||
FileWritePost = true, -- after writing a file
|
||||
FileWritePre = true, -- before writing a file
|
||||
FilterReadPost = true, -- after reading from a filter
|
||||
FilterReadPre = true, -- before reading from a filter
|
||||
FilterWritePost = true, -- after writing to a filter
|
||||
FilterWritePre = true, -- before writing to a filter
|
||||
FocusGained = false, -- got the focus
|
||||
FocusLost = false, -- lost the focus to another app
|
||||
FuncUndefined = false, -- if calling a function which doesn't exist
|
||||
GUIEnter = false, -- after starting the GUI
|
||||
GUIFailed = false, -- after starting the GUI failed
|
||||
InsertChange = true, -- when changing Insert/Replace mode
|
||||
InsertCharPre = true, -- before inserting a char
|
||||
InsertEnter = true, -- when entering Insert mode
|
||||
InsertLeave = true, -- just after leaving Insert mode
|
||||
InsertLeavePre = true, -- just before leaving Insert mode
|
||||
LspAttach = false, -- after an LSP client attaches to a buffer
|
||||
LspDetach = false, -- after an LSP client detaches from a buffer
|
||||
LspNotify = false, -- after an LSP notice has been sent to the server
|
||||
LspProgress = false, -- after a LSP progress update
|
||||
LspRequest = false, -- after an LSP request is started, canceled, or completed
|
||||
LspTokenUpdate = false, -- after a visible LSP token is updated
|
||||
MenuPopup = false, -- just before popup menu is displayed
|
||||
ModeChanged = false, -- after changing the mode
|
||||
OptionSet = false, -- after setting any option
|
||||
QuickFixCmdPost = false, -- after :make, :grep etc.
|
||||
QuickFixCmdPre = false, -- before :make, :grep etc.
|
||||
QuitPre = false, -- before :quit
|
||||
RecordingEnter = true, -- when starting to record a macro
|
||||
RecordingLeave = true, -- just before a macro stops recording
|
||||
RemoteReply = false, -- upon string reception from a remote vim
|
||||
SafeState = false, -- going to wait for a character
|
||||
SearchWrapped = true, -- after the search wrapped around
|
||||
SessionLoadPost = false, -- after loading a session file
|
||||
SessionWritePost = false, -- after writing a session file
|
||||
ShellCmdPost = false, -- after ":!cmd"
|
||||
ShellFilterPost = true, -- after ":1,2!cmd", ":w !cmd", ":r !cmd".
|
||||
Signal = false, -- after nvim process received a signal
|
||||
SourceCmd = false, -- sourcing a Vim script using command
|
||||
SourcePost = false, -- after sourcing a Vim script
|
||||
SourcePre = false, -- before sourcing a Vim script
|
||||
SpellFileMissing = false, -- spell file missing
|
||||
StdinReadPost = false, -- after reading from stdin
|
||||
StdinReadPre = false, -- before reading from stdin
|
||||
SwapExists = false, -- found existing swap file
|
||||
Syntax = false, -- syntax selected
|
||||
TabClosed = false, -- a tab has closed
|
||||
TabEnter = false, -- after entering a tab page
|
||||
TabLeave = false, -- before leaving a tab page
|
||||
TabNew = false, -- when creating a new tab
|
||||
TabNewEntered = false, -- after entering a new tab
|
||||
TermChanged = false, -- after changing 'term'
|
||||
TermClose = false, -- after the process exits
|
||||
TermEnter = false, -- after entering Terminal mode
|
||||
TermLeave = false, -- after leaving Terminal mode
|
||||
TermOpen = false, -- after opening a terminal buffer
|
||||
TermRequest = false, -- after an unhandled OSC sequence is emitted
|
||||
TermResponse = false, -- after setting "v:termresponse"
|
||||
TextChanged = true, -- text was modified
|
||||
TextChangedI = true, -- text was modified in Insert mode(no popup)
|
||||
TextChangedP = true, -- text was modified in Insert mode(popup)
|
||||
TextChangedT = true, -- text was modified in Terminal mode
|
||||
TextYankPost = true, -- after a yank or delete was done (y, d, c)
|
||||
UIEnter = false, -- after UI attaches
|
||||
UILeave = false, -- after UI detaches
|
||||
User = false, -- user defined autocommand
|
||||
VimEnter = false, -- after starting Vim
|
||||
VimLeave = false, -- before exiting Vim
|
||||
VimLeavePre = false, -- before exiting Vim and writing ShaDa file
|
||||
VimResized = false, -- after Vim window was resized
|
||||
VimResume = false, -- after Nvim is resumed
|
||||
VimSuspend = false, -- before Nvim is suspended
|
||||
WinClosed = true, -- after closing a window
|
||||
WinEnter = true, -- after entering a window
|
||||
WinLeave = true, -- before leaving a window
|
||||
WinNew = false, -- when entering a new window
|
||||
WinResized = true, -- after a window was resized
|
||||
WinScrolled = true, -- after a window was scrolled or resized
|
||||
},
|
||||
-- List of nvim-specific events or aliases for the purpose of generating
|
||||
-- syntax file
|
||||
--- @type table<string,string>
|
||||
--- Keys are event aliases.
|
||||
--- Values are the names in the `events` table above.
|
||||
aliases = {
|
||||
BufCreate = 'BufAdd',
|
||||
BufRead = 'BufReadPost',
|
||||
BufWrite = 'BufWritePre',
|
||||
FileEncoding = 'EncodingChanged',
|
||||
},
|
||||
--- @type table<string,true>
|
||||
--- List of Nvim-specific events or aliases for generating syntax file.
|
||||
nvim_specific = {
|
||||
BufModifiedSet = true,
|
||||
DiagnosticChanged = true,
|
||||
|
Reference in New Issue
Block a user