feat: race countdown support and language version selection (#346)

## Problem

Two gaps in the plugin: (1) contest pickers have no way to know whether
a contest supports countdown (race), so the UI can't surface that
affordance; (2) `:CP submit` hardcodes a single language ID per platform
with no way to choose C++ standard or override the platform ID.

## Solution

**Race countdown** (`4e709c8`): Add `supports_countdown` boolean to
`ContestListResult` and wire it through CSES/USACO scrapers, cache, race
module, and pickers.

**Language version selection** (`b90ac67`): Add `LANGUAGE_VERSIONS` and
`DEFAULT_VERSIONS` tables in `constants.lua`. Config gains `version` and
`submit_id` fields validated at setup time. `submit.lua` resolves the
effective config to a platform ID (priority: `submit_id` > `version` >
default). Helpdocs add `*cp-submit-language*` section. Tests cover
`LANGUAGE_IDS` completeness.
This commit is contained in:
Barrett Ruth 2026-03-06 18:18:21 -05:00 committed by GitHub
parent 592f977296
commit 58b6840815
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 265 additions and 46 deletions

View file

@ -24,15 +24,16 @@ CONTENTS *cp-contents*
16. Race .......................................................... |cp-race|
17. Credentials ............................................ |cp-credentials|
18. Submit ...................................................... |cp-submit|
19. Open ......................................................... |cp-open|
20. ANSI Colors ................................................... |cp-ansi|
21. Highlight Groups ........................................ |cp-highlights|
22. Terminal Colors .................................... |cp-terminal-colors|
23. Highlight Customization .......................... |cp-highlight-custom|
24. Helpers .................................................... |cp-helpers|
25. Statusline Integration .................................. |cp-statusline|
26. Panel Keymaps .......................................... |cp-panel-keys|
27. File Structure ................................................ |cp-files|
19. Submit Language Versions ......................... |cp-submit-language|
20. Open ......................................................... |cp-open|
21. ANSI Colors ................................................... |cp-ansi|
22. Highlight Groups ........................................ |cp-highlights|
23. Terminal Colors .................................... |cp-terminal-colors|
24. Highlight Customization .......................... |cp-highlight-custom|
25. Helpers .................................................... |cp-helpers|
26. Statusline Integration .................................. |cp-statusline|
27. Panel Keymaps .......................................... |cp-panel-keys|
28. File Structure ................................................ |cp-files|
28. Health Check ................................................ |cp-health|
==============================================================================
@ -1032,7 +1033,58 @@ Submit the current solution to the online judge.
Platform support:
AtCoder Fully implemented.
Others Not yet implemented.
Codeforces Fully implemented.
CSES Fully implemented.
Kattis Fully implemented.
USACO Fully implemented.
CodeChef Not yet implemented.
See |cp-submit-language| for configuring the language version
(e.g. C++20 instead of C++17).
==============================================================================
SUBMIT LANGUAGE VERSIONS *cp-submit-language*
When submitting, cp.nvim selects a language version for the platform.
The default is C++17 for cpp and Python 3 for python.
Configuring a version ~
Set {version} globally or per-platform:
>lua
languages = {
cpp = { version = "c++20", ... },
},
platforms = {
atcoder = {
overrides = { cpp = { version = "c++23" } },
},
},
<
Available versions per platform ~
Platform cpp python
AtCoder c++23 python3
Codeforces c++17 python3
CSES c++17 python3
Kattis c++17/20/23 python3
USACO c++17/20/23 python3
CodeChef c++17 python3
Using a raw platform ID ~
If your preferred version is not listed, you can bypass version
lookup by setting {submit_id} to the raw platform language ID:
>lua
platforms = {
codeforces = {
overrides = { cpp = { submit_id = "91" } },
},
},
<
To find the raw ID, open the platform's submit page in your browser,
inspect the language dropdown, and copy the <option value="..."> for
your desired language.
==============================================================================
OPEN *cp-open*