diff options
| author | William Boman <william@redwill.se> | 2025-02-16 17:07:22 +0100 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2025-02-19 12:15:49 +0100 |
| commit | 5063ba98dc220a754caf68e510fb192755b1bdf0 (patch) | |
| tree | 174abf2bd4339e3ea1db3652610469f3f09e24b2 /lua/mason-core/spawn.lua | |
| parent | feat(context): add ctx:fetch() (diff) | |
| download | mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar.gz mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar.bz2 mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar.lz mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar.xz mason-5063ba98dc220a754caf68e510fb192755b1bdf0.tar.zst mason-5063ba98dc220a754caf68e510fb192755b1bdf0.zip | |
refactor: turn StdioSink into a proper class
Diffstat (limited to 'lua/mason-core/spawn.lua')
| -rw-r--r-- | lua/mason-core/spawn.lua | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/lua/mason-core/spawn.lua b/lua/mason-core/spawn.lua index 33af9ea4..26434bd9 100644 --- a/lua/mason-core/spawn.lua +++ b/lua/mason-core/spawn.lua @@ -70,10 +70,8 @@ setmetatable(spawn, { args = cmd_args, } - local stdio if not spawn_args.stdio_sink then - stdio = process.in_memory_sink() - spawn_args.stdio_sink = stdio.sink + spawn_args.stdio_sink = process.BufferedSink:new() end local cmd = self._aliases[normalized_cmd] or normalized_cmd @@ -93,17 +91,30 @@ setmetatable(spawn, { end) if exit_code == 0 and signal == 0 then - return Result.success { - stdout = stdio and table.concat(stdio.buffers.stdout, "") or nil, - stderr = stdio and table.concat(stdio.buffers.stderr, "") or nil, - } + if getmetatable(spawn_args.stdio_sink) == process.BufferedSink then + local sink = spawn_args.stdio_sink --[[@as BufferedSink]] + return Result.success { + stdout = table.concat(sink.buffers.stdout, "") or nil, + stderr = table.concat(sink.buffers.stderr, "") or nil, + } + else + return Result.success() + end else - return Failure({ - exit_code = exit_code, - signal = signal, - stdout = stdio and table.concat(stdio.buffers.stdout, "") or nil, - stderr = stdio and table.concat(stdio.buffers.stderr, "") or nil, - }, cmd) + if getmetatable(spawn_args.stdio_sink) == process.BufferedSink then + local sink = spawn_args.stdio_sink --[[@as BufferedSink]] + return Failure({ + exit_code = exit_code, + signal = signal, + stdout = table.concat(sink.buffers.stdout, "") or nil, + stderr = table.concat(sink.buffers.stderr, "") or nil, + }, cmd) + else + return Failure({ + exit_code = exit_code, + signal = signal, + }, cmd) + end end end end, |
