File Conventions
The config applies additional rules and relaxations based on file patterns. Follow these conventions and the matching override blocks apply automatically.
File patterns
| Pattern | Purpose | Convention source |
|---|---|---|
*.test.{ts,tsx}, __tests__/** | Unit/integration tests | Vitest default |
*.spec.ts | E2E tests | Playwright default |
*.stories.{ts,tsx} | Component stories | Storybook default |
*.config.*, vite.config.*, vitest.config.*, etc. | Tool configs | Vite / Vitest / Next / Tailwind conventions |
*.d.ts | Type declarations | TypeScript convention |
scripts/** | Build/dev scripts | Common project convention |
Generated block model
Generated configs always include a shared base block plus file-scoped overrides:
| Block | Files | Purpose |
|---|---|---|
eslint-config-setup/base | all files | Shared core rules (TypeScript, imports, quality, etc.) |
eslint-config-setup/tests | **/*.test.{ts,tsx}, **/__tests__/**/*.{ts,tsx} | Vitest rules + relaxed strictness |
eslint-config-setup/tests-testing-library | same as tests | Testing Library rules |
eslint-config-setup/e2e | **/*.spec.ts | Playwright rules + relaxed strictness |
eslint-config-setup/stories | **/*.stories.{ts,tsx} | Storybook rules + relaxed strictness |
eslint-config-setup/config-files | config globs | Relaxed rules for config files |
eslint-config-setup/declarations | **/*.d.ts | Relaxed rules for declaration files |
eslint-config-setup/scripts | **/scripts/**/*.{ts,mts,js,mjs} | Relaxed rules for scripts |
eslint-config-setup/json, eslint-config-setup/jsonc, eslint-config-setup/markdown | matching file types | JSON/JSONC/Markdown linting |
eslint-config-setup/prettier | all files | Disables Prettier-conflicting formatting rules |
Additional optional blocks are enabled by flags:
eslint-config-setup/ai-*whenai: trueeslint-config-setup/react+eslint-config-setup/react-effectwhenreact: trueeslint-config-setup/nodewhennode: trueeslint-config-setup/oxlint*whenoxlint: true
Mixed runtime note
If you enable both react: true and node: true, browser and Node concerns are active in the same generated baseline. For repos that contain both frontend and backend code, add your own files-scoped blocks in eslint.config.ts to make runtime boundaries explicit. See Configuration.