aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/core/async/spawn.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-03-05 22:42:25 +0100
committerGitHub <noreply@github.com>2022-03-05 22:42:25 +0100
commitf9299bb59c9e42d59fc57ed034fb84bdd23bbd77 (patch)
tree0ac6e701d7fa206ce5e05b4daed2238ab1eaf6c0 /lua/nvim-lsp-installer/core/async/spawn.lua
parentasync: raise errors instead of returning pcall-style (#521) (diff)
downloadmason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.gz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.bz2
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.lz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.xz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.zst
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.zip
feat(ui): display installed server version (#520)
Diffstat (limited to 'lua/nvim-lsp-installer/core/async/spawn.lua')
-rw-r--r--lua/nvim-lsp-installer/core/async/spawn.lua36
1 files changed, 36 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer/core/async/spawn.lua b/lua/nvim-lsp-installer/core/async/spawn.lua
new file mode 100644
index 00000000..e643f098
--- /dev/null
+++ b/lua/nvim-lsp-installer/core/async/spawn.lua
@@ -0,0 +1,36 @@
+local a = require "nvim-lsp-installer.core.async"
+local process = require "nvim-lsp-installer.process"
+local platform = require "nvim-lsp-installer.platform"
+
+local async_spawn = a.promisify(process.spawn)
+
+local spawn = {
+ aliases = {
+ npm = platform.is_win and "npm.cmd" or "npm",
+ },
+}
+
+setmetatable(spawn, {
+ __index = function(self, k)
+ return function(args)
+ local stdio = process.in_memory_sink()
+ local cmd_args = {}
+ for i, arg in ipairs(args) do
+ cmd_args[i] = arg
+ end
+ ---@type JobSpawnOpts
+ local spawn_args = {
+ stdio_sink = stdio.sink,
+ cwd = args.cwd,
+ env = args.env,
+ args = cmd_args,
+ }
+ local cmd = self.aliases[k] or k
+ local _, exit_code = async_spawn(cmd, spawn_args)
+ assert(exit_code == 0, ("%q exited with an error code: %d."):format(cmd, exit_code))
+ return table.concat(stdio.buffers.stdout, ""), table.concat(stdio.buffers.stderr, "")
+ end
+ end,
+})
+
+return spawn