diff --git a/lua/cp/pickers/fzf_lua.lua b/lua/cp/pickers/fzf_lua.lua index d8acce9..fee8217 100644 --- a/lua/cp/pickers/fzf_lua.lua +++ b/lua/cp/pickers/fzf_lua.lua @@ -1,53 +1,5 @@ local picker_utils = require('cp.pickers') -local function problem_picker(platform, contest_id) - local constants = require('cp.constants') - local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform - local fzf = require('fzf-lua') - local problems = picker_utils.get_problems_for_contest(platform, contest_id) - - if #problems == 0 then - vim.notify( - ("Contest %s %s hasn't started yet or has no available problems"):format( - platform_display_name, - contest_id - ), - vim.log.levels.WARN - ) - contest_picker(platform) - return - end - - local entries = vim.tbl_map(function(problem) - return problem.display_name - end, problems) - - return fzf.fzf_exec(entries, { - prompt = ('Select Problem (%s %s)> '):format(platform_display_name, contest_id), - actions = { - ['default'] = function(selected) - if not selected or #selected == 0 then - return - end - - local selected_name = selected[1] - local problem = nil - for _, p in ipairs(problems) do - if p.display_name == selected_name then - problem = p - break - end - end - - if problem then - local cp = require('cp') - cp.handle_command({ fargs = { platform, contest_id, problem.id } }) - end - end, - }, - }) -end - local function contest_picker(platform) local constants = require('cp.constants') local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform @@ -99,6 +51,54 @@ local function contest_picker(platform) }) end +local function problem_picker(platform, contest_id) + local constants = require('cp.constants') + local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform + local fzf = require('fzf-lua') + local problems = picker_utils.get_problems_for_contest(platform, contest_id) + + if #problems == 0 then + vim.notify( + ("Contest %s %s hasn't started yet or has no available problems"):format( + platform_display_name, + contest_id + ), + vim.log.levels.WARN + ) + contest_picker(platform) + return + end + + local entries = vim.tbl_map(function(problem) + return problem.display_name + end, problems) + + return fzf.fzf_exec(entries, { + prompt = ('Select Problem (%s %s)> '):format(platform_display_name, contest_id), + actions = { + ['default'] = function(selected) + if not selected or #selected == 0 then + return + end + + local selected_name = selected[1] + local problem = nil + for _, p in ipairs(problems) do + if p.display_name == selected_name then + problem = p + break + end + end + + if problem then + local cp = require('cp') + cp.handle_command({ fargs = { platform, contest_id, problem.id } }) + end + end, + }, + }) +end + local function platform_picker() local fzf = require('fzf-lua') local platforms = picker_utils.get_platforms() diff --git a/lua/cp/pickers/telescope.lua b/lua/cp/pickers/telescope.lua index 21350bd..5dc3e51 100644 --- a/lua/cp/pickers/telescope.lua +++ b/lua/cp/pickers/telescope.lua @@ -6,53 +6,6 @@ local actions = require('telescope.actions') local picker_utils = require('cp.pickers') -local function problem_picker(opts, platform, contest_id) - local constants = require('cp.constants') - local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform - local problems = picker_utils.get_problems_for_contest(platform, contest_id) - - if #problems == 0 then - vim.notify( - ("Contest %s %s hasn't started yet or has no available problems"):format( - platform_display_name, - contest_id - ), - vim.log.levels.WARN - ) - contest_picker(opts, platform) - return - end - - pickers - .new(opts, { - prompt_title = ('Select Problem (%s %s)'):format(platform_display_name, contest_id), - finder = finders.new_table({ - results = problems, - entry_maker = function(entry) - return { - value = entry, - display = entry.display_name, - ordinal = entry.display_name, - } - end, - }), - sorter = conf.generic_sorter(opts), - attach_mappings = function(prompt_bufnr) - actions.select_default:replace(function() - local selection = action_state.get_selected_entry() - actions.close(prompt_bufnr) - - if selection then - local cp = require('cp') - cp.handle_command({ fargs = { platform, contest_id, selection.value.id } }) - end - end) - return true - end, - }) - :find() -end - local function contest_picker(opts, platform) local constants = require('cp.constants') local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform @@ -104,6 +57,53 @@ local function contest_picker(opts, platform) :find() end +local function problem_picker(opts, platform, contest_id) + local constants = require('cp.constants') + local platform_display_name = constants.PLATFORM_DISPLAY_NAMES[platform] or platform + local problems = picker_utils.get_problems_for_contest(platform, contest_id) + + if #problems == 0 then + vim.notify( + ("Contest %s %s hasn't started yet or has no available problems"):format( + platform_display_name, + contest_id + ), + vim.log.levels.WARN + ) + contest_picker(opts, platform) + return + end + + pickers + .new(opts, { + prompt_title = ('Select Problem (%s %s)'):format(platform_display_name, contest_id), + finder = finders.new_table({ + results = problems, + entry_maker = function(entry) + return { + value = entry, + display = entry.display_name, + ordinal = entry.display_name, + } + end, + }), + sorter = conf.generic_sorter(opts), + attach_mappings = function(prompt_bufnr) + actions.select_default:replace(function() + local selection = action_state.get_selected_entry() + actions.close(prompt_bufnr) + + if selection then + local cp = require('cp') + cp.handle_command({ fargs = { platform, contest_id, selection.value.id } }) + end + end) + return true + end, + }) + :find() +end + local function platform_picker(opts) opts = opts or {} diff --git a/scrapers/__init__.py b/scrapers/__init__.py index 2babd81..6140dce 100644 --- a/scrapers/__init__.py +++ b/scrapers/__init__.py @@ -29,12 +29,12 @@ def __getattr__(name): "TestsResult", ]: from .models import ( - ContestListResult, - ContestSummary, - MetadataResult, - ProblemSummary, - TestCase, - TestsResult, + ContestListResult, # noqa: F401 + ContestSummary, # noqa: F401 + MetadataResult, # noqa: F401 + ProblemSummary, # noqa: F401 + TestCase, # noqa: F401 + TestsResult, # noqa: F401 ) return locals()[name] diff --git a/tests/scrapers/test_interface_compliance.py b/tests/scrapers/test_interface_compliance.py index a10c78c..ab07ff2 100644 --- a/tests/scrapers/test_interface_compliance.py +++ b/tests/scrapers/test_interface_compliance.py @@ -1,4 +1,3 @@ -import inspect from unittest.mock import Mock import pytest