mirror of https://github.com/ray-x/go.nvim
issue #75, better default package path for tests
parent
ff9a34bffb
commit
85f2300e72
@ -0,0 +1,200 @@
|
||||
-- Copyright (c) 2009 Aleksey Cheusov <vle@gmx.net>
|
||||
-- Copyright info:
|
||||
-- https://github.com/cheusov/lua-alt-getopt/blob/f495c21d6a203ab280603aa5799e636fb5651ae7/alt_getopt.lua#L3-L20
|
||||
|
||||
-- updated for neovim lua JIT by ray-x
|
||||
|
||||
local type, pairs, ipairs, io, os = type, pairs, ipairs, io, os
|
||||
|
||||
alt_getopt = {}
|
||||
|
||||
local function convert_short2long(opts)
|
||||
local ret = {}
|
||||
|
||||
for short_opt, accept_arg in opts:gmatch("(%w)(:?)") do
|
||||
ret[short_opt] = #accept_arg
|
||||
end
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
local function err_unknown_opt(opt)
|
||||
vim.notify("Unknown option `-" .. (#opt > 1 and "-" or "") .. opt, vim.lsp.log_levels.ERROR)
|
||||
end
|
||||
|
||||
local function canonize(options, opt)
|
||||
if not options[opt] then
|
||||
err_unknown_opt(opt)
|
||||
end
|
||||
|
||||
while type(options[opt]) == "string" do
|
||||
opt = options[opt]
|
||||
|
||||
if not options[opt] then
|
||||
err_unknown_opt(opt)
|
||||
end
|
||||
end
|
||||
|
||||
return opt
|
||||
end
|
||||
|
||||
function alt_getopt.get_ordered_opts(arg, sh_opts, long_opts)
|
||||
local i = 1
|
||||
local count = 1
|
||||
local opts = {}
|
||||
local optarg = {}
|
||||
|
||||
local options = convert_short2long(sh_opts)
|
||||
for k, v in pairs(long_opts) do
|
||||
options[k] = v
|
||||
end
|
||||
|
||||
while i <= #arg do
|
||||
local a = arg[i]
|
||||
if a == "--" then
|
||||
i = i + 1
|
||||
break
|
||||
elseif a == "-" then
|
||||
break
|
||||
elseif a:sub(1, 2) == "--" then
|
||||
local pos = a:find("=", 1, true)
|
||||
|
||||
if pos then
|
||||
local opt = a:sub(3, pos - 1)
|
||||
|
||||
opt = canonize(options, opt)
|
||||
|
||||
if options[opt] == 0 then
|
||||
vim.notify("Bad usage of option `" .. a, vim.lsp.log_levels.ERROR)
|
||||
end
|
||||
|
||||
optarg[count] = a:sub(pos + 1)
|
||||
opts[count] = opt
|
||||
else
|
||||
local opt = a:sub(3)
|
||||
|
||||
opt = canonize(options, opt)
|
||||
|
||||
if options[opt] == 0 then
|
||||
opts[count] = opt
|
||||
else
|
||||
if i == #arg then
|
||||
vim.notify("Missed value for option `" .. a, vim.lsp.log_levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
optarg[count] = arg[i + 1]
|
||||
opts[count] = opt
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
count = count + 1
|
||||
elseif a:sub(1, 1) == "-" then
|
||||
for j = 2, a:len() do
|
||||
local opt = canonize(options, a:sub(j, j))
|
||||
|
||||
if options[opt] == 0 then
|
||||
opts[count] = opt
|
||||
count = count + 1
|
||||
elseif a:len() == j then
|
||||
if i == #arg then
|
||||
vim.notify("Missed value for option `-" .. opt, vim.lsp.log_levels.ERROR)
|
||||
end
|
||||
|
||||
optarg[count] = arg[i + 1]
|
||||
opts[count] = opt
|
||||
i = i + 1
|
||||
count = count + 1
|
||||
break
|
||||
else
|
||||
optarg[count] = a:sub(j + 1)
|
||||
opts[count] = opt
|
||||
count = count + 1
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
break
|
||||
end
|
||||
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
return opts, i, optarg
|
||||
end
|
||||
|
||||
function alt_getopt.get_opts(arg, sh_opts, long_opts)
|
||||
local ret = {}
|
||||
|
||||
local opts, optind, optarg = alt_getopt.get_ordered_opts(arg, sh_opts, long_opts)
|
||||
for i, v in ipairs(opts) do
|
||||
if optarg[i] then
|
||||
ret[v] = optarg[i]
|
||||
else
|
||||
ret[v] = 1
|
||||
end
|
||||
end
|
||||
|
||||
return ret, optind
|
||||
end
|
||||
|
||||
function test_arg(arg)
|
||||
local long_opts = {
|
||||
verbose = "v",
|
||||
help = "h",
|
||||
test = "t",
|
||||
stop = "s",
|
||||
restart = "r",
|
||||
-- fake = 0,
|
||||
-- len = 1,
|
||||
tags = "g",
|
||||
output = "o",
|
||||
set_value = "S",
|
||||
["set-output"] = "o",
|
||||
}
|
||||
|
||||
local opts
|
||||
local optarg
|
||||
local optind
|
||||
arg = arg or { "-t", "-r", "-g", "unit,integration" }
|
||||
opts, optind, optarg = alt_getopt.get_ordered_opts(arg, "g:hvo:n:rS:st", long_opts)
|
||||
|
||||
print("ordered opts")
|
||||
vim.inspect(opts)
|
||||
vim.inspect(optind)
|
||||
vim.inspect(optarg)
|
||||
print("ordered opts end")
|
||||
for i, v in ipairs(opts) do
|
||||
if optarg[i] then
|
||||
print("option `" .. v .. "': " .. vim.inspect(optarg[i]))
|
||||
else
|
||||
print("option `" .. v)
|
||||
end
|
||||
end
|
||||
|
||||
optarg, optind = alt_getopt.get_opts(arg, "g:hVvo:n:rS:st", long_opts)
|
||||
|
||||
print("opts")
|
||||
vim.inspect(optarg)
|
||||
vim.inspect(optind)
|
||||
print("opts")
|
||||
local fin_options = {}
|
||||
for k, v in pairs(optarg) do
|
||||
table.insert(fin_options, "fin-option `" .. k .. "': " .. vim.inspect(v) .. "\n")
|
||||
end
|
||||
table.sort(fin_options)
|
||||
|
||||
-- -- print(table.concat(fin_options))
|
||||
--
|
||||
-- -- for i = optind, #arg do
|
||||
-- -- print(string.format("ARGV [%s] = %s\n", i, arg[i]))
|
||||
-- -- end
|
||||
end
|
||||
|
||||
-- test_arg()
|
||||
--
|
||||
-- print("test 2")
|
||||
--
|
||||
-- test_arg({ "--tags", "unit,integration", "--restart" })
|
||||
|
||||
return alt_getopt
|
Loading…
Reference in New Issue