aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/core/installer/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvim-lsp-installer/core/installer/init.lua')
-rw-r--r--lua/nvim-lsp-installer/core/installer/init.lua87
1 files changed, 0 insertions, 87 deletions
diff --git a/lua/nvim-lsp-installer/core/installer/init.lua b/lua/nvim-lsp-installer/core/installer/init.lua
deleted file mode 100644
index 3bb9590d..00000000
--- a/lua/nvim-lsp-installer/core/installer/init.lua
+++ /dev/null
@@ -1,87 +0,0 @@
-local log = require "nvim-lsp-installer.log"
-local path = require "nvim-lsp-installer.core.path"
-local fs = require "nvim-lsp-installer.core.fs"
-local Result = require "nvim-lsp-installer.core.result"
-
-local M = {}
-
----@async
----@param context InstallContext
-local function write_receipt(context)
- if context.receipt.is_marked_invalid then
- return log.fmt_debug("Skipping writing receipt for %s because it is marked as invalid.", context.name)
- end
- context.receipt:with_name(context.name):with_schema_version("1.0a"):with_completion_time(vim.loop.gettimeofday())
- local receipt_success, install_receipt = pcall(context.receipt.build, context.receipt)
- if receipt_success then
- local receipt_path = path.concat { context.cwd:get(), "nvim-lsp-installer-receipt.json" }
- pcall(fs.async.write_file, receipt_path, vim.json.encode(install_receipt))
- else
- log.fmt_error("Failed to build receipt for installation=%s, error=%s", context.name, install_receipt)
- 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
- local ret_val
- 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))
- else
- ret_val = result
- end
- end
- step(context)
- return ret_val
-end
-
----@async
----@param context InstallContext
----@param installer async fun(ctx: InstallContext)
-function M.execute(context, installer)
- log.fmt_debug("Executing installer for name=%s", context.name)
- local tmp_installation_dir = ("%s.tmp"):format(context.destination_dir)
- return Result.run_catching(function()
- -- 1. prepare installation dir
- context.receipt:with_start_time(vim.loop.gettimeofday())
- if fs.async.dir_exists(tmp_installation_dir) then
- fs.async.rmrf(tmp_installation_dir)
- end
- fs.async.mkdirp(tmp_installation_dir)
- context.cwd:set(tmp_installation_dir)
-
- -- 2. run installer
- M.run_installer(context, installer)
-
- -- 3. finalize
- log.fmt_debug("Finalizing installer for name=%s", context.name)
- write_receipt(context)
- context:promote_cwd()
- pcall(fs.async.rmrf, tmp_installation_dir)
- end):on_failure(function(failure)
- log.fmt_error("Installation failed, name=%s, error=%s", context.name, tostring(failure))
- context.stdio_sink.stderr(tostring(failure))
- context.stdio_sink.stderr "\n"
- pcall(fs.async.rmrf, tmp_installation_dir)
- pcall(fs.async.rmrf, context.cwd:get())
- end)
-end
-
-return M