You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Improve lint & format speed: ship --cache, skip single top-level ESLint config #2384
Task: would a single top-level ESLint config improve lint/format speed?
Short answer: No. The dominant, zero-risk win is --cache (~10x incremental). Collapsing to one top-level config is a modest cold-only win (~2x) that costs per-package isolation and widens lint scope.
How lint runs today
One shared config @cpn-console/eslint-config (flat config over @antfu/eslint-config) consumed by 17 eslint.config.* files.
pnpm -r run lint spawns ~15 separate eslint ./ processes; each re-imports the shared config, reloading Node + plugins + typescript-eslint parser. That startup/parser cost — not config-file count — is what we pay for.
14/17 configs are byte-identical bare wrappers. Only 3 diverge:
root: ignores apps/packages/plugins (so lint:root is effectively inert for repo source)
harbor: ignores src/api/Api.ts
client: 2 rule overrides
No --cache flag anywhere.
Measurements (Node 24.12, ESLint 10.5, antfu 8.2)
Command
Cold
Warm (cache)
pnpm -r run lint (17 procs)
22.1s
—
single root eslint .
10.4s
2.0s
single root eslint . --cache
10.4s
2.0s
Recommendation (in priority order)
Ship --cache — DO. Zero-risk, ~10x incremental warm, works under either layout. Adds --cache to the lint/format scripts and ignores .eslintcache.
Implementation is already prepared in worktree branch wt/t_2fb40277 (17 files, +34/-31, uncommitted, pending review → PR).
Do NOT collapse to one top-level config. ~2x cold win only; kills per-package lint isolation; surfaces ~40 currently-unlinted root-level violations (pnpm-workspace.yaml, README.md, commitlint.config.cjs, docker/*.yml, every package.json). Revisit only if per-package isolation is explicitly unwanted.
Secondary follow-ups (optional):
Fix or delete the dead lint:root scope (root config ignores the whole monorepo source).
Resolve doc/config drift: AGENTS.md claims server-nestjs uses Prettier, but its eslint.config.mjs does not enable it.
Acceptance
--cache merged and .eslintcache gitignored
Single top-level config explicitly decided against (this issue) — no action
(optional) dead lint:root + Prettier drift resolved in follow-up
Activity