telescope-frecency.nvim/lua/frecency/timer.lua
JINNOUCHI Yasushi a6482c2fbf
feat: separate bootstrap logic to launch faster (#250)
* chore: track setup() time

* feat: avoid setup() to be called twice

* chore: track time between Database:start()

* feat: add bootstrap option to load DB in advance

* feat: initialize DB before frecency class starts

* chore: add more logging

* feat!: load DB in Neovim starting

only if the plugin is loaded non-lazily.

* fix: simplify logic for timer

* fix: detect error and safely finish

* chore: remove unnecessary method
2024-08-31 15:02:15 +09:00

47 lines
1.1 KiB
Lua

local config = require "frecency.config"
local log = require "frecency.log"
---@class FrecencyTimer
---@field has_lazy boolean?
local M = {}
---@param event string
---@return nil
function M.track(event)
if not config.debug then
return
elseif M.has_lazy == nil then
M.has_lazy = (pcall(require, "lazy.stats"))
if not M.has_lazy then
log.debug "frecency.timer needs lazy.nvim"
end
end
if M.has_lazy then
local stats = require "lazy.stats"
local function make_key(num)
local key = num and ("[telescope-frecency] %s: %d"):format(event, num) or "[telescope-frecency] " .. event
return stats._stats.times[key] and make_key((num or 1) + 1) or key
end
stats.track(make_key())
end
end
---@return string
function M.pp()
local times = require("lazy.stats")._stats.times
local result = vim.tbl_map(function(k)
return { event = k, t = times[k] }
end, vim.tbl_keys(times))
table.sort(result, function(a, b)
return a.t < b.t
end)
return table.concat(
vim.tbl_map(function(r)
return ("%8.3f : %s"):format(r.t, r.event)
end, result),
"\n"
)
end
return M