Files
neovim-config/lua/config/profile.lua
T

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')