possibly working
This commit is contained in:
parent
545793df39
commit
f9cf5b1614
5 changed files with 20 additions and 75 deletions
|
|
@ -109,9 +109,7 @@ local function parse_command(args)
|
|||
end
|
||||
|
||||
function M.handle_command(opts)
|
||||
logger.log(('command received: %s'):format(vim.inspect(opts.fargs)))
|
||||
local cmd = parse_command(opts.fargs)
|
||||
logger.log(('parsed command: %s'):format(vim.inspect(cmd)))
|
||||
|
||||
if cmd.type == 'error' then
|
||||
logger.log(cmd.message, vim.log.levels.ERROR)
|
||||
|
|
@ -125,19 +123,14 @@ function M.handle_command(opts)
|
|||
end
|
||||
|
||||
if cmd.type == 'action' then
|
||||
logger.log(('handling action: %s'):format(cmd.action))
|
||||
local setup = require('cp.setup')
|
||||
local ui = require('cp.ui.panel')
|
||||
|
||||
if cmd.action == 'run' then
|
||||
print('running')
|
||||
logger.log('calling toggle_run_panel')
|
||||
ui.toggle_run_panel(cmd.debug)
|
||||
elseif cmd.action == 'next' then
|
||||
logger.log('calling navigate_problem(1)')
|
||||
setup.navigate_problem(1, cmd.language)
|
||||
elseif cmd.action == 'prev' then
|
||||
logger.log('calling navigate_problem(-1)')
|
||||
setup.navigate_problem(-1, cmd.language)
|
||||
elseif cmd.action == 'pick' then
|
||||
local picker = require('cp.commands.picker')
|
||||
|
|
|
|||
|
|
@ -87,14 +87,11 @@ end
|
|||
---@param expected_file string
|
||||
---@return TestCase[]
|
||||
local function parse_test_cases_from_files(input_file, expected_file)
|
||||
if vim.fn.filereadable(input_file) == 0 or vim.fn.filereadable(expected_file) == 0 then
|
||||
return {}
|
||||
end
|
||||
|
||||
local base_name = vim.fn.fnamemodify(input_file, ':r')
|
||||
local test_cases = {}
|
||||
local i = 1
|
||||
|
||||
-- Try numbered files first (created by scraper)
|
||||
local i = 1
|
||||
while true do
|
||||
local individual_input_file = base_name .. '.' .. i .. '.cpin'
|
||||
local individual_expected_file = base_name .. '.' .. i .. '.cpout'
|
||||
|
|
@ -113,12 +110,6 @@ local function parse_test_cases_from_files(input_file, expected_file)
|
|||
end
|
||||
end
|
||||
|
||||
if #test_cases == 0 then
|
||||
local input_content = table.concat(vim.fn.readfile(input_file), '\n')
|
||||
local expected_content = table.concat(vim.fn.readfile(expected_file), '\n')
|
||||
return { create_test_case(1, input_content, expected_content) }
|
||||
end
|
||||
|
||||
return test_cases
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -91,11 +91,6 @@ function M.scrape_problem_tests(platform, contest_id, problem_id, callback)
|
|||
if mkdir_ok then
|
||||
local config = require('cp.config')
|
||||
local base_name = config.default_filename(contest_id, problem_id)
|
||||
local logger = require('cp.log')
|
||||
|
||||
logger.log(
|
||||
('writing %d test files for %s (base: %s)'):format(#result.tests, problem_id, base_name)
|
||||
)
|
||||
|
||||
for i, test_case in ipairs(result.tests) do
|
||||
local input_file = 'io/' .. base_name .. '.' .. i .. '.cpin'
|
||||
|
|
@ -104,23 +99,9 @@ function M.scrape_problem_tests(platform, contest_id, problem_id, callback)
|
|||
local input_content = test_case.input:gsub('\r', '')
|
||||
local expected_content = test_case.expected:gsub('\r', '')
|
||||
|
||||
local input_ok =
|
||||
pcall(vim.fn.writefile, vim.split(input_content, '\n', true), input_file)
|
||||
local expected_ok =
|
||||
pcall(vim.fn.writefile, vim.split(expected_content, '\n', true), expected_file)
|
||||
|
||||
if input_ok and expected_ok then
|
||||
logger.log(('wrote test files: %s, %s'):format(input_file, expected_file))
|
||||
else
|
||||
logger.log(
|
||||
('failed to write test files for %s.%d'):format(base_name, i),
|
||||
vim.log.levels.WARN
|
||||
)
|
||||
end
|
||||
pcall(vim.fn.writefile, vim.split(input_content, '\n', true), input_file)
|
||||
pcall(vim.fn.writefile, vim.split(expected_content, '\n', true), expected_file)
|
||||
end
|
||||
else
|
||||
local logger = require('cp.log')
|
||||
logger.log('failed to create io/ directory', vim.log.levels.ERROR)
|
||||
end
|
||||
end)
|
||||
|
||||
|
|
|
|||
|
|
@ -108,22 +108,20 @@ function M.setup_problem(contest_id, problem_id, language)
|
|||
logger.log('loading test cases...')
|
||||
|
||||
scraper.scrape_problem_tests(platform, contest_id, problem_id, function(result)
|
||||
vim.schedule(function()
|
||||
if result.success then
|
||||
logger.log(('loaded %d test cases for %s'):format(#(result.tests or {}), problem_id))
|
||||
if state.get_problem_id() == problem_id then
|
||||
state.set_test_cases(result.tests)
|
||||
end
|
||||
else
|
||||
logger.log(
|
||||
'failed to load tests: ' .. (result.error or 'unknown error'),
|
||||
vim.log.levels.ERROR
|
||||
)
|
||||
if state.get_problem_id() == problem_id then
|
||||
state.set_test_cases({})
|
||||
end
|
||||
if result.success then
|
||||
logger.log(('loaded %d test cases for %s'):format(#(result.tests or {}), problem_id))
|
||||
if state.get_problem_id() == problem_id then
|
||||
state.set_test_cases(result.tests)
|
||||
end
|
||||
end)
|
||||
else
|
||||
logger.log(
|
||||
'failed to load tests: ' .. (result.error or 'unknown error'),
|
||||
vim.log.levels.ERROR
|
||||
)
|
||||
if state.get_problem_id() == problem_id then
|
||||
state.set_test_cases({})
|
||||
end
|
||||
end
|
||||
end)
|
||||
else
|
||||
logger.log(('scraping disabled for %s'):format(platform))
|
||||
|
|
@ -202,20 +200,9 @@ function M.scrape_remaining_problems(platform, contest_id, problems)
|
|||
logger.log(('scraping %d uncached problems in background...'):format(#missing_problems))
|
||||
|
||||
for _, prob in ipairs(missing_problems) do
|
||||
logger.log(('starting background scrape for problem %s'):format(prob.id))
|
||||
scraper.scrape_problem_tests(platform, contest_id, prob.id, function(result)
|
||||
if result.success then
|
||||
logger.log(
|
||||
('background: scraped problem %s - %d test cases'):format(prob.id, #(result.tests or {}))
|
||||
)
|
||||
else
|
||||
logger.log(
|
||||
('background: failed to scrape problem %s: %s'):format(
|
||||
prob.id,
|
||||
result.error or 'unknown error'
|
||||
),
|
||||
vim.log.levels.WARN
|
||||
)
|
||||
logger.log(('background: scraped problem %s'):format(prob.id))
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
|
@ -260,8 +247,6 @@ function M.navigate_problem(direction, language)
|
|||
|
||||
local new_problem = problems[new_index]
|
||||
M.setup_problem(contest_id, new_problem.id, language)
|
||||
|
||||
state.set_problem_id(new_problem.id)
|
||||
end
|
||||
|
||||
return M
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ local function get_current_problem()
|
|||
end
|
||||
|
||||
function M.toggle_run_panel(is_debug)
|
||||
if state.run_panel_active then
|
||||
if state.is_run_panel_active() then
|
||||
if current_diff_layout then
|
||||
current_diff_layout.cleanup()
|
||||
current_diff_layout = nil
|
||||
|
|
@ -27,15 +27,12 @@ function M.toggle_run_panel(is_debug)
|
|||
state.saved_session = nil
|
||||
end
|
||||
|
||||
print('run panel was active, returning')
|
||||
|
||||
state.set_run_panel_active(false)
|
||||
logger.log('test panel closed')
|
||||
return
|
||||
end
|
||||
|
||||
if not state.get_platform() then
|
||||
print('no panel active, returning')
|
||||
logger.log(
|
||||
'No contest configured. Use :CP <platform> <contest> <problem> to set up first.',
|
||||
vim.log.levels.ERROR
|
||||
|
|
@ -44,9 +41,7 @@ function M.toggle_run_panel(is_debug)
|
|||
end
|
||||
|
||||
local problem_id = get_current_problem()
|
||||
print(problem_id)
|
||||
if not problem_id then
|
||||
logger.log('no current problem set', vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
|
||||
|
|
@ -205,7 +200,7 @@ function M.toggle_run_panel(is_debug)
|
|||
|
||||
vim.api.nvim_set_current_win(test_windows.tab_win)
|
||||
|
||||
state.run_panel_active = true
|
||||
state.set_run_panel_active(true)
|
||||
state.test_buffers = test_buffers
|
||||
state.test_windows = test_windows
|
||||
local test_state = run.get_run_panel_state()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue