feat(commands): implement :CP open [problem|contest|standings] (#319)

## Problem

There was no way to open a problem, contest, or standings page in the
browser from within the plugin.

## Solution

Add `contest_url` and `standings_url` to `MetadataResult` and persist
them in the cache. Add `cache.get_open_urls` to resolve all three URLs.
Wire up `:CP open [problem|contest|standings]` in `commands/init.lua`
to call `vim.ui.open`, warning when a URL is unavailable (e.g. CSES
has no standings). Closes #315.
This commit is contained in:
Barrett Ruth 2026-03-05 19:16:05 -05:00 committed by GitHub
parent b959f29bd4
commit 7bf4cf2538
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 65 additions and 2 deletions

View file

@ -42,6 +42,8 @@ class MetadataResult(ScrapingResult):
contest_id: str = ""
problems: list[ProblemSummary] = Field(default_factory=list)
url: str
contest_url: str = ""
standings_url: str = ""
model_config = ConfigDict(extra="forbid")