diff options
author | zeertzjq <zeertzjq@outlook.com> | 2025-03-09 06:35:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-09 06:35:51 +0800 |
commit | e02ee7410a6d04b32ec38af9f4ffdcf0798a0f0b (patch) | |
tree | 5aeb5286de2c0c874279e84846aa4905620141ac /src | |
parent | 92713296359b6f2fcbdcfc17cc0a13f3d9698c7e (diff) | |
download | rneovim-e02ee7410a6d04b32ec38af9f4ffdcf0798a0f0b.tar.gz rneovim-e02ee7410a6d04b32ec38af9f4ffdcf0798a0f0b.tar.bz2 rneovim-e02ee7410a6d04b32ec38af9f4ffdcf0798a0f0b.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/gen/gen_events.lua | 39 | ||||
-rw-r--r-- | src/gen/gen_vimvim.lua | 13 | ||||
-rw-r--r-- | src/nvim/auevents.lua | 283 |
3 files changed, 173 insertions, 162 deletions
diff --git a/src/gen/gen_events.lua b/src/gen/gen_events.lua index 77f766bb28..020599301c 100644 --- a/src/gen/gen_events.lua +++ b/src/gen/gen_events.lua @@ -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() diff --git a/src/gen/gen_vimvim.lua b/src/gen/gen_vimvim.lua index d2b1f48a4c..6545483bf3 100644 --- a/src/gen/gen_vimvim.lua +++ b/src/gen/gen_vimvim.lua @@ -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 diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua index 9655fef0a4..c5e7186713 100644 --- a/src/nvim/auevents.lua +++ b/src/nvim/auevents.lua @@ -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, |