diff --git a/lua/cp/commands/init.lua b/lua/cp/commands/init.lua index 5006cc9..de6d307 100644 --- a/lua/cp/commands/init.lua +++ b/lua/cp/commands/init.lua @@ -11,7 +11,6 @@ local actions = constants.ACTIONS ---@field type string ---@field error string? ---@field action? string ----@field requires_context? boolean ---@field message? string ---@field contest? string ---@field platform? string @@ -72,7 +71,7 @@ local function parse_command(args) end elseif first == 'race' then if args[2] == 'stop' then - return { type = 'action', action = 'race_stop', requires_context = false } + return { type = 'action', action = 'race_stop' } end if not args[2] or not args[3] then return { @@ -87,7 +86,6 @@ local function parse_command(args) return { type = 'action', action = 'race', - requires_context = false, platform = args[2], contest = args[3], language = language, @@ -95,20 +93,14 @@ local function parse_command(args) elseif first == 'interact' then local inter = args[2] if inter and inter ~= '' then - return { - type = 'action', - action = 'interact', - requires_context = true, - interactor_cmd = inter, - } + return { type = 'action', action = 'interact', interactor_cmd = inter } else - return { type = 'action', action = 'interact', requires_context = true } + return { type = 'action', action = 'interact' } end elseif first == 'stress' then return { type = 'action', action = 'stress', - requires_context = true, generator_cmd = args[2], brute_cmd = args[3], } @@ -127,7 +119,7 @@ local function parse_command(args) end test_index = idx end - return { type = 'action', action = 'edit', requires_context = true, test_index = test_index } + return { type = 'action', action = 'edit', test_index = test_index } elseif first == 'run' or first == 'panel' then local debug = false local test_indices = nil @@ -240,22 +232,10 @@ local function parse_command(args) return { type = 'action', action = first, - requires_context = true, test_indices = test_indices, debug = debug, mode = mode, } - elseif first == 'pick' then - local language = nil - if #args >= 3 and args[2] == '--lang' then - language = args[3] - elseif #args >= 2 and args[2] ~= nil and args[2]:sub(1, 2) ~= '--' then - return { - type = 'error', - message = ("Unknown argument '%s' for action '%s'"):format(args[2], first), - } - end - return { type = 'action', action = 'pick', requires_context = false, language = language } else local language = nil if #args >= 3 and args[2] == '--lang' then @@ -266,7 +246,7 @@ local function parse_command(args) message = ("Unknown argument '%s' for action '%s'"):format(args[2], first), } end - return { type = 'action', action = first, requires_context = true, language = language } + return { type = 'action', action = first, language = language } end end @@ -278,7 +258,7 @@ local function parse_command(args) } elseif #args == 2 then if args[2] == 'login' or args[2] == 'logout' then - return { type = 'action', action = args[2], requires_context = false, platform = first } + return { type = 'action', action = args[2], platform = first } end local contest = args[2] if first == 'codeforces' then @@ -338,7 +318,9 @@ function M.handle_command(opts) local restore = require('cp.restore') restore.restore_from_current_file() elseif cmd.type == 'action' then - if cmd.requires_context and not state.get_platform() then + local CONTEST_ACTIONS = + { 'run', 'panel', 'edit', 'interact', 'stress', 'submit', 'next', 'prev', 'pick' } + if vim.tbl_contains(CONTEST_ACTIONS, cmd.action) and not state.get_platform() then local restore = require('cp.restore') if not restore.restore_from_current_file() then return diff --git a/lua/cp/setup.lua b/lua/cp/setup.lua index a954d62..1609e61 100644 --- a/lua/cp/setup.lua +++ b/lua/cp/setup.lua @@ -477,15 +477,9 @@ function M.navigate_problem(direction, language) logger.log(('navigate_problem: %s -> %s'):format(current_problem_id, problems[new_index].id)) - local views = require('cp.ui.views') - views.cancel_io_view() local active_panel = state.get_active_panel() if active_panel == 'run' then - views.disable() - elseif active_panel == 'interactive' then - views.cancel_interactive() - elseif active_panel == 'stress' then - require('cp.stress').cancel() + require('cp.ui.views').disable() end local lang = nil diff --git a/plugin/cp.lua b/plugin/cp.lua index 3e3b56c..60efb7a 100644 --- a/plugin/cp.lua +++ b/plugin/cp.lua @@ -44,12 +44,7 @@ end, { table.insert(candidates, 'cache') table.insert(candidates, 'pick') if platform and contest_id then - vim.list_extend( - candidates, - vim.tbl_filter(function(a) - return a ~= 'pick' and a ~= 'cache' - end, actions) - ) + vim.list_extend(candidates, actions) local cache = require('cp.cache') cache.load() local contest_data = cache.get_contest_data(platform, contest_id)