Code layout has been changed and improoved. Annotations are added for documentation. Automated through utility functions and data tables BREAKING CHANGE: Tested from clean. Now properly uses LuaRocks to install dependencies.
57 lines
2.0 KiB
Lua
57 lines
2.0 KiB
Lua
--- @module "config.profile"
|
|
--- This module configures the profiler for the Neovim configuration.
|
|
--- This tool can be used to profile specific modules or all modules.
|
|
---
|
|
--- The profiler can be toggled with the leader keybinding `d<f1>`
|
|
--- or with the `NVIM_PROFILE` environment variable.
|
|
---
|
|
--- Specific modules can be selected with the `NVIM_PROFILE_MODULE`
|
|
--- environment variable.
|
|
-- ╭─────────────────────────────────────────────────────────╮
|
|
-- │ PROFILER │
|
|
-- ╰─────────────────────────────────────────────────────────╯
|
|
|
|
-- Check if the environment variable is set
|
|
local should_profile = os.getenv("NVIM_PROFILE")
|
|
local profile_module = os.getenv("NVIM_PROFILE_MODULE") or "*"
|
|
|
|
-- Start the profiler
|
|
if should_profile then
|
|
require("profile").instrument_autocmds()
|
|
if should_profile:lower():match("^start") then
|
|
require("profile").start(profile_module)
|
|
else
|
|
require("profile").instrument(profile_module)
|
|
end
|
|
end
|
|
|
|
-- Function to toggle the profiler
|
|
local function toggle_profile()
|
|
local prof = require("profile")
|
|
if prof.is_recording() then
|
|
prof.stop()
|
|
vim.ui.input({
|
|
prompt = "Save profile to:",
|
|
completion = "file",
|
|
default = "profile.json",
|
|
}, function(filename)
|
|
if filename then
|
|
prof.export(filename)
|
|
vim.notify(string.format("Wrote %s", filename))
|
|
end
|
|
end)
|
|
else
|
|
prof.start(profile_module)
|
|
end
|
|
end
|
|
|
|
-- Add the keybind to toggle the profiler
|
|
require("data").func.add_keymap("<leader>d<f1>", function()
|
|
local prof_name = profile_module
|
|
if profile_module == "*" then
|
|
prof_name = "all"
|
|
end
|
|
print("Profiling module: " .. prof_name)
|
|
toggle_profile()
|
|
end, "Toggle Profiler")
|