nvim/lua/profile/autocmd.lua

154 lines
2.8 KiB
Lua

local M = {}
local autocmds = {
"BufAdd",
"BufDelete",
"BufEnter",
"BufFilePost",
"BufFilePre",
"BufHidden",
"BufLeave",
"BufModifiedSet",
"BufNew",
"BufNewFile",
"BufRead",
-- "BufReadCmd",
"BufReadPre",
"BufUnload",
"BufWinEnter",
"BufWinLeave",
"BufWipeout",
"BufWrite",
-- "BufWriteCmd",
"BufWritePost",
"ChanInfo",
"ChanOpen",
"CmdUndefined",
"CmdlineChanged",
"CmdlineEnter",
"CmdlineLeave",
"CmdwinEnter",
"CmdwinLeave",
"ColorScheme",
"ColorSchemePre",
"CompleteChanged",
"CompleteDonePre",
"CompleteDone",
"CursorHold",
"CursorHoldI",
"CursorMoved",
"CursorMovedI",
"DiffUpdated",
"DirChanged",
-- "FileAppendCmd",
"FileAppendPost",
"FileAppendPre",
"FileChangedRO",
"ExitPre",
"FileChangedShell",
"FileChangedShellPost",
-- "FileReadCmd",
"FileReadPost",
"FileReadPre",
"FileType",
-- "FileWriteCmd",
"FileWritePost",
"FileWritePre",
"FilterReadPost",
"FilterReadPre",
"FilterWritePost",
"FilterWritePre",
"FocusGained",
"FocusLost",
"FuncUndefined",
"UIEnter",
"UILeave",
"InsertChange",
"InsertCharPre",
"TextYankPost",
"InsertEnter",
"InsertLeavePre",
"InsertLeave",
"LspAttach",
"LspDetach",
"LspTokenUpdate",
"MenuPopup",
"OptionSet",
"QuickFixCmdPre",
"QuickFixCmdPost",
"QuitPre",
"RemoteReply",
"SessionLoadPost",
"ShellCmdPost",
"Signal",
"ShellFilterPost",
"SourcePre",
"SourcePost",
-- "SourceCmd",
"SpellFileMissing",
"StdinReadPost",
"StdinReadPre",
"SwapExists",
"Syntax",
"TabEnter",
"TabLeave",
"TabNew",
"TabNewEntered",
"TabClosed",
"TermOpen",
"TermEnter",
"TermLeave",
"TermClose",
"TermResponse",
"TextChanged",
"TextChangedI",
"TextChangedP",
"User",
"VimEnter",
"VimLeave",
"VimLeavePre",
"VimResized",
"VimResume",
"VimSuspend",
"WinClosed",
"WinEnter",
"WinLeave",
"WinNew",
"WinScrolled",
}
---@param groupname string
---@param fn string
local function create(groupname, fn)
local aug = vim.api.nvim_create_augroup(groupname, {})
for _, autocmd in ipairs(autocmds) do
vim.api.nvim_create_autocmd(autocmd, {
desc = "profile.nvim " .. fn,
pattern = "*",
group = aug,
callback = function(args)
require("profile")[fn](autocmd, { match = args.match })
end,
})
end
end
M.instrument_start = function()
create("lua_profile_start", "log_start")
end
M.instrument_auto = function()
if vim.fn.exists("#lua_profile_start") ~= 0 then
create("lua_profile_end", "log_end")
else
create("lua_profile", "log_instant")
end
end
M.clear = function()
vim.api.nvim_create_augroup("lua_profile", {})
vim.api.nvim_create_augroup("lua_profile_start", {})
vim.api.nvim_create_augroup("lua_profile_end", {})
end
return M