## Problem `:CP <platform> login` short-circuited on cached cookies/tokens — if an old session was still valid, the new credentials were never tested. The user got "login successful" even with wrong input. USACO submit also wasted a roundtrip on `_check_usaco_login` every time. ## Solution Always validate credentials in the login path. Remove cookie/token loading from `_login_headless` (AtCoder), `_login_headless_cf` (CF), `_login_headless_codechef` (CodeChef), and `login` (CSES). For USACO submit, replace the `_check_usaco_login` roundtrip with cookie trust + retry-on-auth-failure (the Kattis pattern). Submit paths are unchanged — cookie fast-paths remain for contest speed. Closes #331 |
||
|---|---|---|
| .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