Here's my assessment of issue #41:
What uv actually offers: uv itself doesn't include a linter. The confusion likely comes from the fact that uv is made by Astral, the same company that makes Ruff — a very fast Python linter and formatter written in Rust. Ruff is a natural companion to uv but is a separate tool.
Current setup: The project uses flake8 (linting) + black (formatting), both run via uv run. These are two separate dev dependencies.
Why Ruff would be a good replacement:
- Ruff replaces both flake8 AND black — it's a linter and formatter in one tool. This would cut two dev dependencies down to one.
- Direct uv integration —
uv run ruff checkanduv run ruff formatwork seamlessly. - Drop-in migration — Ruff supports all the flake8 rules currently configured (E203 ignore, E501 per-file ignore, max-line-length 132, complexity checks).
- Much faster — 10-100x faster than flake8, though that barely matters for a project this size.
- Config lives in
pyproject.toml— eliminates the separate.flake8file.
Migration would look like:
- Replace flake8 and black with ruff in [dependency-groups] dev
- Add a [tool.ruff] section in pyproject.toml mapping the current flake8/black settings
- Update sh/lint.sh to use uv run ruff check and uv run ruff format
- Delete .flake8
Want me to go ahead and implement this migration?