feat: file conflict prompt, empty submit guard, and lint fixes (#366)

## Problem

Loading a problem whose source file already exists silently overwrites
user code. Submitting an empty file sends a blank submission to the
platform. Two ruff lint violations existed in the scrapers.

## Solution

- `setup.lua`: when the target source file exists on the filesystem
(`vim.uv.fs_stat`), show an inline `Overwrite? [y/N]:` prompt. Declining
keeps the existing file open and registers state normally. Skipped when
the file is already loaded in a buffer.
- `submit.lua`: resolve path to absolute, use `vim.uv.fs_stat` to verify
existence, abort with WARN if `stat.size == 0` ("Submit aborted: source
file has no content").
- `scrapers/atcoder.py`: remove unused `pathlib.Path` import (F401).
- `scrapers/base.py`: move local imports to top of file (E402).

Closes #364, #365.
This commit is contained in:
Barrett Ruth 2026-03-07 16:30:51 -05:00 committed by GitHub
parent b7ddf4c253
commit 573b335646
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 145 additions and 560 deletions

View file

@ -7,6 +7,16 @@ from abc import ABC, abstractmethod
from pathlib import Path
from typing import Any
from .language_ids import get_language_id
from .models import (
CombinedTest,
ContestListResult,
LoginResult,
MetadataResult,
SubmitResult,
TestsResult,
)
_COOKIE_FILE = Path.home() / ".cache" / "cp-nvim" / "cookies.json"
@ -37,16 +47,6 @@ def clear_platform_cookies(platform: str) -> None:
pass
from .language_ids import get_language_id
from .models import (
CombinedTest,
ContestListResult,
LoginResult,
MetadataResult,
SubmitResult,
TestsResult,
)
_PRECISION_ABS_REL_RE = re.compile(
r"(?:absolute|relative)\s+error[^.]*?10\s*[\^{]\s*\{?\s*[-\u2212]\s*(\d+)\s*\}?",
re.IGNORECASE,