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 = 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