all repos

gopher.nvim @ c5cc508

Minimalistic plugin for Go development

gopher.nvim/lua/gopher/_utils/runner/gocmd.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
local r = require "gopher._utils.runner"
local c = require("gopher.config").commands
local u = require "gopher._utils"
local gocmd = {}

---@param args string[]
---@return string[]
local function if_get(args)
  for i, arg in ipairs(args) do
    local m = string.match(arg, "^https://(.*)$") or string.match(arg, "^http://(.*)$") or arg
    table.remove(args, i)
    table.insert(args, i, m)
  end
  return args
end

---@param args unknown[]
---@return string[]
local function if_generate(args)
  if #args == 1 and args[1] == "%" then
    args[1] = vim.fn.expand "%"
  end
  return args
end

---@param subcmd string
---@param args string[]
---@return string[]|nil
function gocmd.run(subcmd, args)
  if #args == 0 then
    error "please provide any arguments"
  end

  if subcmd == "get" then
    args = if_get(args)
  end

  if subcmd == "generate" then
    args = if_generate(args)
  end

  return r.sync(c.go, {
    args = { subcmd, unpack(args) },
    on_exit = function(data, status)
      if status ~= 0 then
        error("gocmd failed: " .. data)
      end
      u.notify(c.go .. " " .. subcmd .. " ran successful")
    end,
  })
end

return gocmd