aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-03-23 23:40:04 +0100
committerGitHub <noreply@github.com>2022-03-23 23:40:04 +0100
commit9dc2cd14952bd1e26e9073428c79b894d280780b (patch)
tree3003d35886f5594340a97e06ee692ac315f2948b
parentrun autogen_metadata.lua (diff)
downloadmason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.gz
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.bz2
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.lz
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.xz
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.zst
mason-9dc2cd14952bd1e26e9073428c79b894d280780b.zip
feat(async): allow for a.promisify to reject (#557)
-rw-r--r--lua/nvim-lsp-installer/core/async/init.lua16
-rw-r--r--tests/core/async/async_spec.lua12
2 files changed, 26 insertions, 2 deletions
diff --git a/lua/nvim-lsp-installer/core/async/init.lua b/lua/nvim-lsp-installer/core/async/init.lua
index 85f4c83c..6ecb5a61 100644
--- a/lua/nvim-lsp-installer/core/async/init.lua
+++ b/lua/nvim-lsp-installer/core/async/init.lua
@@ -37,11 +37,23 @@ local function table_pack(...)
return { n = select("#", ...), ... }
end
-local function promisify(async_fn)
+---@param async_fn fun(...)
+---@param should_reject_err boolean|nil @Whether the provided async_fn takes a callback with the signature `fun(err, result)`
+local function promisify(async_fn, should_reject_err)
return function(...)
local args = table_pack(...)
return await(function(resolve, reject)
- args[args.n + 1] = resolve
+ if should_reject_err then
+ args[args.n + 1] = function(err, result)
+ if err then
+ reject(err)
+ else
+ resolve(result)
+ end
+ end
+ else
+ args[args.n + 1] = resolve
+ end
local ok, err = pcall(async_fn, unpack(args, 1, args.n + 1))
if not ok then
reject(err)
diff --git a/tests/core/async/async_spec.lua b/tests/core/async/async_spec.lua
index 88af14af..662e493a 100644
--- a/tests/core/async/async_spec.lua
+++ b/tests/core/async/async_spec.lua
@@ -36,6 +36,18 @@ describe("async", function()
)
it(
+ "should reject callback-style functions",
+ async_test(function()
+ local err = assert.has_error(function()
+ a.promisify(function(arg1, cb)
+ cb(arg1, nil)
+ end, true) "påskmust"
+ end)
+ assert.equals(err, "påskmust")
+ end)
+ )
+
+ it(
"should return all values",
async_test(function()
local val1, val2, val3 = a.wait(function(resolve)