local function Command(init_args, opts)
opts = opts or {}
local cmd = {
_args = init_args,
_flags = {},
_vars = {},
}
local function mkflag(flag)
return (opts.flag_prefix or "-") .. flag
end
function cmd:arg(val)
table.insert(self._args, val)
end
function cmd:opt(key, val)
if not val then
table.insert(self._args, mkflag(key))
return
end
self._flags[mkflag(key)] = val
end
function cmd:optif(key, val)
if val then
self:opt(key, val)
end
end
function cmd:get(flag)
return self._flags[mkflag(flag)]
end
function cmd:has(flag)
return self._flags[mkflag(flag)] ~= nil
end
function cmd:build()
for k, v in pairs(self._flags) do
table.insert(self._args, k)
table.insert(self._args, v)
end
return self._args
end
local function env()
return { __NVIM_AOC = vim.api.nvim_buf_get_name(0) }
end
function cmd:spawn(callback)
return vim.system(self:build(), { text = true, env = env() }, callback)
end
return cmd
end
return Command