docs(coding): files 1000 lines max, functions 200 lines max, no earlier split point

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
BluscreamandClaude Opus 5.5 committed 2026-10-18 21:52:48 +02:00
1 parent e385e01993
commit 44c2d1502c
4 files changed
+26 -25

No files matched your search

+3 -3
View File
@@ -139,9 +139,9 @@ Attach an `AbortController` to every long-lived `fetch` and abort it in cleanup.
- **Imports**: prefer the configured alias (`@/…`) over relative climbs.
- Indentation and quote/semicolon style: **match the file you are editing**. Do not introduce
a new formatter or lint config into a project that already has one.
- **One file until it earns a split** — around 250 lines for a self-contained plugin/feature,
or when a second file is genuinely reusable (`utils.ts`, `types.ts`, `components/`).
Hard limits from the general rules still apply: ESLint's `max-lines` and
- **One file until it earns a split** — when it nears the 1000-line limit, or when a second
file is genuinely reusable (`utils.ts`, `types.ts`, `components/`).
The limits from the general rules (1000 lines per file, 200 per function) apply: ESLint's `max-lines` and
`max-lines-per-function` cover both natively, so prefer those over a separate test here.
---
+2 -3
View File
@@ -225,9 +225,8 @@ When talking to a rate-limited API (a chat platform, a store, a tracker):
function-length rule — `PLR0915` (`too-many-statements`, default 50) and `C901`
(cyclomatic complexity) are the closest proxies and are worth enabling, but neither
measures lines. Put **both** the function-length and file-length limits in a pytest
case (see [`coding-dev.md` §4](skills-public/coding-dev.md)): file hard 1000 / soft 600 (soft
prints a note rather than failing), function hard 100 measured by walking the `ast` rather than
counting lines of text. **Guard the guard** with a test asserting the glob matched anything at
case (see [`coding-dev.md` §4](skills-public/coding-dev.md)): file 1000 lines max, function
200 lines max measured by walking the `ast` rather than counting lines of text. **Guard the guard** with a test asserting the glob matched anything at
all — a pattern that matches nothing makes every limit vacuous and still passes.
---
+6 -2
View File
@@ -73,8 +73,12 @@ workspace = true
wrong for the *entire* codebase — not a shortcut for one stubborn call site. It silences
the rule in code nobody has written yet.
- **Re-test every `#[allow]` periodically.** If removing one produces no warning, delete it.
- `too_many_lines` is the mechanical enforcement of the 100-line function limit. A function
that trips it wants extracting, not an allow.
- `too_many_lines` is the mechanical enforcement of the 200-line function limit. Clippy's
default threshold is 100, so set it in `clippy.toml`:
```toml
too-many-lines-threshold = 200
```
A function that trips it wants extracting, not an allow.
- Clippy has **no file-length lint**, so the 1000-line file limit belongs in a test — see
[`coding-dev.md` §4](skills-public/coding-dev.md) for the pattern. Put it in the workspace
root's `tests/` so one test covers every member crate, walking `src/` plus each