all repos

gopher.nvim @ a995af3415d80e4d8ece4074b132a811a81aa54b

Minimalistic plugin for Go development

gopher.nvim/lua/gopher/_utils/runner/init.lua(view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
local Job = require "plenary.job"
local runner = {}

---@class gopher.RunnerOpts
---@field args? string[]
---@field cwd? string?
---@field on_exit? fun(data:string, status:number)

---@param cmd string
---@param opts gopher.RunnerOpts
---@return string[]|nil
function runner.sync(cmd, opts)
  local output
  Job:new({
    command = cmd,
    args = opts.args,
    cwd = opts.cwd,
    on_stderr = function(_, data)
      vim.print(data)
    end,
    on_exit = function(data, status)
      output = data:result()
      vim.schedule(function()
        if opts.on_exit then
          opts.on_exit(output, status)
        end
      end)
    end,
  }):sync(60000 --[[1 min]])
  return output
end

return runner