## Problem CSES `_web_login` used bare dict indexing on the API response, raising an opaque `KeyError` on missing fields. `_check_token` swallowed all exceptions as `False`, conflating transient network errors with invalid tokens. CF persisted cookies unconditionally and silently swallowed `_solve_turnstile` failures in `submit_action`. ## Solution CSES API fields now use `.get()` with a descriptive `RuntimeError` on absence. `_check_token` re-raises `httpx` network/timeout exceptions so callers see real failures. CF cookie writes are guarded by an `X-User-Handle` check (the CF auth cookie). `_solve_turnstile` errors propagate to the outer error handler instead of being silenced. |
||
|---|---|---|
| .github | ||
| after/ftplugin | ||
| doc | ||
| lua/cp | ||
| plugin | ||
| scrapers | ||
| scripts | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| .luarc.json | ||
| .pre-commit-config.yaml | ||
| .prettierignore | ||
| .prettierrc | ||
| .python-version | ||
| .styluaignore | ||
| cp.nvim-scm-1.rockspec | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
| selene.toml | ||
| stylua.toml | ||
| uv.lock | ||
| vim.yaml | ||
cp.nvim
The definitive competitive programming environment for Neovim
Scrape problems, run tests, and debug solutions across multiple platforms with zero configuration.
https://github.com/user-attachments/assets/e81d8dfb-578f-4a79-9989-210164fc0148
Features
- Multi-platform support: AtCoder, CodeChef, Codeforces, and CSES
- Automatic problem setup: Scrape test cases and metadata in seconds
- Dual view modes: Lightweight I/O view for quick feedback, full panel for detailed analysis
- Test case management: Quickly view, edit, add, & remove test cases
- Rich test output: 256 color ANSI support for compiler errors and program output
- Language agnostic: Works with any language
- Diff viewer: Compare expected vs actual output with 3 diff modes
Installation
Install using your package manager of choice or via luarocks:
luarocks install cp.nvim
Dependencies
Quick Start
cp.nvim follows a simple principle: solve locally, submit remotely.
Basic Usage
-
Find a contest or problem
-
Set up contests locally
:CP codeforces 1848 -
Code and test
:CP run -
Navigate between problems
:CP next :CP prev :CP e1 -
Debug and edit test cases
:CP edit
:CP panel --debug
- Submit on the original website
Documentation
:help cp.nvim
See my config for the setup in the video shown above.
Motivation
I could not find a neovim-centric, efficient, dependency-free, flexible, and easily customizable competitive programming workflow that "just works"--so I made it myself. I conferenced with top competitive programmers at Carnegie Mellon Univerity and the University of Virginia and covered their (and my) pain points:
- Scraping: contests are automatically loaded asynchronously
- Test Case Management: test case editor (
:CP edit) - UI: both
runandpanellayouts cover common formats - Extensibility: snippet plugins, compilation, etc. are left to the programmer