81 lines
1.8 KiB
Lua
81 lines
1.8 KiB
Lua
local build = {}
|
|
|
|
function build.dir(opts)
|
|
print(vim.inspect(opts))
|
|
local num_fargs = table.maxn(opts.fargs)
|
|
local dir = nil
|
|
|
|
for index, arg in ipairs(opts.fargs) do
|
|
print(index, arg)
|
|
end
|
|
|
|
if num_fargs == 0 then
|
|
-- Find build directories
|
|
local dirs = build.list_dirs()
|
|
local num_dirs = table.maxn(dirs)
|
|
|
|
if num_dirs == 0 then
|
|
vim.cmd.echoerr('no build directories found')
|
|
|
|
elseif num_dirs == 1 then
|
|
-- One build directory found, use it
|
|
dir = dirs[1]
|
|
|
|
else
|
|
-- TODO: Implement Telescope picker
|
|
-- Prompt user to choose dir with to inputlist
|
|
local choices = {}
|
|
for index, choice in ipairs(dirs) do
|
|
table.insert(choices, tostring(index) .. ': ' .. choice)
|
|
end
|
|
local index = vim.fn.inputlist(choices)
|
|
dir = dirs[index]
|
|
print(' ' .. dir)
|
|
end
|
|
|
|
elseif num_fargs == 1 then
|
|
-- Single argument, invoked as :BuildDir <dir>
|
|
dir = opts.fargs[1]
|
|
|
|
else
|
|
error('build#dir called with too many arguments')
|
|
end
|
|
|
|
if not dir then
|
|
return
|
|
end
|
|
|
|
-- TODO: Set build directory
|
|
-- TODO: Post-process compile_commands.json with compdb
|
|
end
|
|
|
|
function build.run(opts)
|
|
print(vim.inspect(opts))
|
|
end
|
|
|
|
function build.list_dirs()
|
|
local dirs = vim.fn.globpath('.', 'build*')
|
|
dirs = vim.fn.substitute(dirs, '\\.\\/', '', 'g')
|
|
return vim.fn.split(dirs)
|
|
end
|
|
|
|
function build.list_targets()
|
|
return {}
|
|
end
|
|
|
|
function build.create_commands()
|
|
local buffer = vim.api.nvim_get_current_buf()
|
|
|
|
-- Create :BuildDir command
|
|
vim.api.nvim_buf_create_user_command(buffer, 'BuildDir', build.dir, {
|
|
bang = true, nargs = '?', complete = build.list_dirs,
|
|
})
|
|
|
|
-- Create :Build command
|
|
vim.api.nvim_buf_create_user_command(buffer, 'Build', build.run, {
|
|
bang = true, nargs = '*', complete = build.list_targets,
|
|
})
|
|
end
|
|
|
|
return build
|