mirror of
https://github.com/kristoferssolo/telescope-frecency.nvim.git
synced 2025-10-21 20:10:38 +00:00
* refactor: simplify logic to load web_devicons * refactor: make register() asynchronous * fix: load lazily modules outside this plugin * refactor: simplify logic to wait initialization * refactor: use uv.hrtime() instead of os.clock() * fix: avoid errors in calling plenary.log in async * test: store elapsed time to check in tests * test: fix module names This becomes a problem only in Ubuntu because macOS and Windows does not care cases in filenames. * test: fix types and unused modules * style: fix by stylua * refactor: make recency / entry_maker loaded lazily
55 lines
1.2 KiB
Lua
55 lines
1.2 KiB
Lua
local async = require "plenary.async"
|
|
|
|
---@class FrecencyWait
|
|
---@field config FrecencyWaitConfig
|
|
local Wait = {}
|
|
|
|
---@class FrecencyWaitConfig
|
|
---@field time integer default: 5000
|
|
---@field interval integer default: 200
|
|
|
|
---@alias FrecencyWaitCallback fun(): nil
|
|
|
|
---@param f FrecencyWaitCallback
|
|
---@param opts FrecencyWaitConfig?
|
|
Wait.new = function(f, opts)
|
|
return setmetatable(
|
|
{ f = f, config = vim.tbl_extend("force", { time = 5000, interval = 200 }, opts or {}) },
|
|
{ __index = Wait }
|
|
)
|
|
end
|
|
|
|
---@async
|
|
---@private
|
|
Wait.f = function()
|
|
error "implement me"
|
|
end
|
|
|
|
---@return boolean ok
|
|
---@return nil|-1|-2 status
|
|
function Wait:run()
|
|
local done = false
|
|
async.void(function()
|
|
self.f()
|
|
done = true
|
|
end)()
|
|
return vim.wait(self.config.time, function()
|
|
return done
|
|
end, self.config.interval)
|
|
end
|
|
|
|
---@param f FrecencyWaitCallback
|
|
---@param opts FrecencyWaitConfig?
|
|
---@return nil
|
|
return function(f, opts)
|
|
local wait = Wait.new(f, opts)
|
|
local ok, status = wait:run()
|
|
if ok then
|
|
return
|
|
elseif status == -1 then
|
|
error "callback never returnes during the time"
|
|
elseif status == -2 then
|
|
error "callback is interrupted during the time"
|
|
end
|
|
end
|