aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-treesitter/async.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvim-treesitter/async.lua')
-rw-r--r--lua/nvim-treesitter/async.lua44
1 files changed, 23 insertions, 21 deletions
diff --git a/lua/nvim-treesitter/async.lua b/lua/nvim-treesitter/async.lua
index 57a670ef6..8a5e7c8af 100644
--- a/lua/nvim-treesitter/async.lua
+++ b/lua/nvim-treesitter/async.lua
@@ -3,15 +3,15 @@ local co = coroutine
local M = {}
---Executes a future with a callback when it is done
---- @param func function
---- @param callback function
---- @param ... unknown
+---@param func function
+---@param callback function
+---@param ... unknown
local function execute(func, callback, ...)
local thread = co.create(func)
local function step(...)
local ret = { co.resume(thread, ...) }
- --- @type boolean, any
+ ---@type boolean, any
local stat, nargs_or_err = unpack(ret)
if not stat then
@@ -31,7 +31,7 @@ local function execute(func, callback, ...)
return
end
- --- @type function, any[]
+ ---@type function, any[]
local fn, args = ret[3], { unpack(ret, 4, table.maxn(ret)) }
args[nargs_or_err] = step
fn(unpack(args, 1, nargs_or_err))
@@ -41,13 +41,15 @@ local function execute(func, callback, ...)
end
--- Creates an async function with a callback style function.
---- @generic F: function
---- @param func F
---- @param argc integer
---- @return F
+---@generic F: function
+---@param func F
+---@param argc integer
+---@return F
function M.wrap(func, argc)
- --- @param ... unknown
- --- @return unknown
+ vim.validate('func', func, 'function')
+ vim.validate('argc', argc, 'number')
+ ---@param ... unknown
+ ---@return unknown
return function(...)
return co.yield(argc, func, ...)
end
@@ -56,10 +58,10 @@ end
---Use this to create a function which executes in an async context but
---called from a non-async context. Inherently this cannot return anything
---since it is non-blocking
---- @generic F: function
---- @param func async F
---- @param nargs? integer
---- @return F
+---@generic F: function
+---@param func async F
+---@param nargs? integer
+---@return F
function M.sync(func, nargs)
nargs = nargs or 0
return function(...)
@@ -68,10 +70,10 @@ function M.sync(func, nargs)
end
end
---- @param n integer max number of concurrent jobs
---- @param interrupt_check? function
---- @param thunks function[]
---- @return any
+---@param n integer max number of concurrent jobs
+---@param interrupt_check? function
+---@param thunks function[]
+---@return any
function M.join(n, interrupt_check, thunks)
return co.yield(1, function(finish)
if #thunks == 0 then
@@ -81,7 +83,7 @@ function M.join(n, interrupt_check, thunks)
local remaining = { select(n + 1, unpack(thunks)) }
local to_go = #thunks
- local ret = {} --- @type any[]
+ local ret = {} ---@type any[]
local function cb(...)
ret[#ret + 1] = { ... }
@@ -104,7 +106,7 @@ end
---An async function that when called will yield to the Neovim scheduler to be
---able to call the API.
---- @type fun()
+---@type fun()
M.main = M.wrap(vim.schedule, 1)
return M