diff options
| author | William Boman <william@redwill.se> | 2022-04-11 01:04:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-11 01:04:06 +0200 |
| commit | 89abfcd2fbd56c3246772726a85ed0e548d77d3b (patch) | |
| tree | 5a90c3277ee853fe6c1c04be09982b94472f45ab /lua/nvim-lsp-installer/core/installer/init.lua | |
| parent | sumneko_lua: support Linux arm64 (#391) (diff) | |
| download | mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar.gz mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar.bz2 mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar.lz mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar.xz mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.tar.zst mason-89abfcd2fbd56c3246772726a85ed0e548d77d3b.zip | |
make install context available via coroutine context (#586)
Diffstat (limited to 'lua/nvim-lsp-installer/core/installer/init.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/core/installer/init.lua | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/lua/nvim-lsp-installer/core/installer/init.lua b/lua/nvim-lsp-installer/core/installer/init.lua index 03b2de01..0159e1e0 100644 --- a/lua/nvim-lsp-installer/core/installer/init.lua +++ b/lua/nvim-lsp-installer/core/installer/init.lua @@ -21,6 +21,33 @@ local function write_receipt(context) end end +local CONTEXT_REQUEST = {} + +---@return InstallContext +function M.context() + return coroutine.yield(CONTEXT_REQUEST) +end + +---@async +---@param context InstallContext +---@param installer async fun(context: InstallContext) +function M.run_installer(context, installer) + local thread = coroutine.create(installer) + local step + step = function(...) + local ok, result = coroutine.resume(thread, ...) + if not ok then + error(result, 0) + elseif result == CONTEXT_REQUEST then + step(context) + elseif coroutine.status(thread) == "suspended" then + -- yield to parent coroutine + step(coroutine.yield(result)) + end + end + step(context) +end + ---@async ---@param context InstallContext ---@param installer async fun(ctx: InstallContext) @@ -37,7 +64,7 @@ function M.execute(context, installer) context.cwd:set(tmp_installation_dir) -- 2. run installer - installer(context) + M.run_installer(context, installer) -- 3. finalize write_receipt(context) @@ -51,15 +78,4 @@ function M.execute(context, installer) end) end ----@param installers async fun(ctx: InstallContext)[] -function M.serial(installers) - ---@async - ---@param ctx InstallContext - return function(ctx) - for _, installer_step in pairs(installers) do - installer_step(ctx) - end - end -end - return M |
