File: //home/ubuntu/neovim/.deps/build/src/treesitter_vim/rules/autocmd.js
const { maybe_bang, keyword, commaSep1, case_insensitive } = require("./utils");
// :h events
const EVENTS = [
"BufAdd", // after adding a buffer to the buffer list
"BufDelete", // deleting a buffer from the buffer list
"BufEnter", // after entering a buffer
"BufFilePost", // after renaming a buffer
"BufFilePre", // before renaming a buffer
"BufHidden", // just after buffer becomes hidden
"BufLeave", // before leaving a buffer
"BufModifiedSet", // after the "modified" state of a buffer changes
"BufNew", // after creating any buffer
"BufNewFile", // when creating a buffer for a new file
"BufReadCmd", // read buffer using command
"BufReadPost", // after reading a buffer
"BufReadPre", // before reading a buffer
"BufUnload", // just before unloading a buffer
"BufWinEnter", // after showing a buffer in a window
"BufWinLeave", // just after buffer removed from window
"BufWipeout", // just before really deleting a buffer
"BufWriteCmd", // write buffer using command
"BufWritePost", // after writing a buffer
"BufWritePre", // before writing a buffer
"ChanInfo", // info was received about channel
"ChanOpen", // channel was opened
"CmdUndefined", // command undefined
"CmdWinEnter", // after entering the cmdline window
"CmdWinLeave", // before leaving the cmdline window
"CmdlineChanged", // command line was modified
"CmdlineEnter", // after entering cmdline mode
"CmdlineLeave", // before leaving cmdline mode
"ColorScheme", // after loading a colorscheme
"ColorSchemePre", // before loading a colorscheme
"CompleteChanged", // after popup menu changed
"CompleteDone", // after finishing insert complete
"CompleteDonePre", // idem, before clearing info
"CursorHold", // cursor in same position for a while
"CursorHoldI", // idem, in Insert mode
"CursorMoved", // cursor was moved
"CursorMovedI", // cursor was moved in Insert mode
"DiagnosticChanged", // diagnostics in a buffer were modified
"DiffUpdated", // diffs have been updated
"DirChanged", // directory changed
"DirChangedPre", // directory is going to change
"EncodingChanged", // after changing the "encoding" option
"ExitPre", // before exiting
"FileAppendCmd", // append to a file using command
"FileAppendPost", // after appending to a file
"FileAppendPre", // before appending to a file
"FileChangedRO", // before first change to read-only file
"FileChangedShell", // after shell command that changed file
"FileChangedShellPost", // after (not) reloading changed file
"FileReadCmd", // read from a file using command
"FileReadPost", // after reading a file
"FileReadPre", // before reading a file
"FileType", // new file type detected (user defined)
"FileWriteCmd", // write to a file using command
"FileWritePost", // after writing a file
"FileWritePre", // before writing a file
"FilterReadPost", // after reading from a filter
"FilterReadPre", // before reading from a filter
"FilterWritePost", // after writing to a filter
"FilterWritePre", // before writing to a filter
"FocusGained", // got the focus
"FocusLost", // lost the focus to another app
"FuncUndefined", // if calling a function which doesn"t exist
"GUIEnter", // after starting the GUI
"GUIFailed", // after starting the GUI failed
"InsertChange", // when changing Insert/Replace mode
"InsertCharPre", // before inserting a char
"InsertEnter", // when entering Insert mode
"InsertLeave", // just after leaving Insert mode
"InsertLeavePre", // just before leaving Insert mode
"LspAttach", // after an LSP client attaches to a buffer
"LspDetach", // after an LSP client detaches from a buffer
"LspTokenUpdate", // after a visible LSP token is updated
"MenuPopup", // just before popup menu is displayed
"ModeChanged", // after changing the mode
"OptionSet", // after setting any option
"QuickFixCmdPost", // after :make, :grep etc.
"QuickFixCmdPre", // before :make, :grep etc.
"QuitPre", // before :quit
"RecordingEnter", // when starting to record a macro
"RecordingLeave", // just before a macro stops recording
"RemoteReply", // upon string reception from a remote vim
"SearchWrapped", // after the search wrapped around
"SessionLoadPost", // after loading a session file
"ShellCmdPost", // after ":!cmd"
"ShellFilterPost", // after ":1,2!cmd", ":w !cmd", ":r !cmd".
"Signal", // after nvim process received a signal
"SourceCmd", // sourcing a Vim script using command
"SourcePost", // after sourcing a Vim script
"SourcePre", // before sourcing a Vim script
"SpellFileMissing", // spell file missing
"StdinReadPost", // after reading from stdin
"StdinReadPre", // before reading from stdin
"SwapExists", // found existing swap file
"Syntax", // syntax selected
"TabClosed", // a tab has closed
"TabEnter", // after entering a tab page
"TabLeave", // before leaving a tab page
"TabNew", // when creating a new tab
"TabNewEntered", // after entering a new tab
"TermChanged", // after changing "term"
"TermClose", // after the process exits
"TermEnter", // after entering Terminal mode
"TermLeave", // after leaving Terminal mode
"TermOpen", // after opening a terminal buffer
"TermResponse", // after setting "v:termresponse"
"TextChanged", // text was modified
"TextChangedI", // text was modified in Insert mode(no popup)
"TextChangedP", // text was modified in Insert mode(popup)
"TextChangedT", // text was modified in Terminal mode
"TextYankPost", // after a yank or delete was done (y, d, c)
"UIEnter", // after UI attaches
"UILeave", // after UI detaches
"User", // user defined autocommand
"VimEnter", // after starting Vim
"VimLeave", // before exiting Vim
"VimLeavePre", // before exiting Vim and writing ShaDa file
"VimResized", // after Vim window was resized
"VimResume", // after Nvim is resumed
"VimSuspend", // before Nvim is suspended
"WinClosed", // after closing a window
"WinEnter", // after entering a window
"WinLeave", // before leaving a window
"WinNew", // when entering a new window
"WinResized", // after a window was resized
"WinScrolled", // after a window was scrolled or resized
"BufCreate", // alias for BufAdd
"BufRead", // alias for BufReadPost
"BufWrite", // alias for BufWritePre
"FileEncoding", // alias for EncodingChanged
].map(case_insensitive);
module.exports = {
// If an event is valid, it should take precedence over identifier
au_event: ($) => token(prec(1, choice(...EVENTS))),
au_event_list: ($) => commaSep1($.au_event),
_augroup_name: ($) => alias($.identifier, $.augroup_name),
_autocmd_pattern: ($) => commaSep1(alias(/[^ \t\n,]+/, $.pattern)),
au_once: ($) => "++once",
au_nested: ($) => "++nested",
_autocmd_command: ($) =>
seq(
$.au_event_list,
$._autocmd_pattern,
optional($.au_once),
optional($.au_nested),
field("command", $._statement)
),
// :h autocmd-define
_autocmd_define: ($) =>
seq(keyword($, "autocmd"), optional($._augroup_name), $._autocmd_command),
// :h autocmd-remove
_autocmd_remove: ($) =>
seq(
keyword($, "autocmd"),
$.bang,
optional($._augroup_name),
optional(
choice(
$._autocmd_command,
seq($.au_event_list, $._autocmd_pattern),
$._autocmd_pattern,
$.au_event_list
)
)
),
// :h autocmd-list
_autocmd_list: ($) =>
seq(
keyword($, "autocmd"),
optional($._augroup_name),
optional(
choice(
seq($.au_event_list, $._autocmd_pattern),
$._autocmd_pattern,
$.au_event_list
)
)
),
autocmd_statement: ($) =>
choice($._autocmd_define, $._autocmd_remove, $._autocmd_list),
augroup_statement: ($) =>
seq(
maybe_bang($, keyword($, "augroup")),
alias($.identifier, $.augroup_name)
),
};