Skip to content

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

PatternPurposeConvention source
*.test.{ts,tsx}, __tests__/**Unit/integration testsVitest default
*.spec.tsE2E testsPlaywright default
*.stories.{ts,tsx}Component storiesStorybook default
*.config.*, vite.config.*, vitest.config.*, etc.Tool configsVite / Vitest / Next / Tailwind conventions
*.d.tsType declarationsTypeScript convention
scripts/**Build/dev scriptsCommon project convention

Generated block model

Generated configs always include a shared base block plus file-scoped overrides:

BlockFilesPurpose
eslint-config-setup/baseall filesShared 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-librarysame as testsTesting Library rules
eslint-config-setup/e2e**/*.spec.tsPlaywright rules + relaxed strictness
eslint-config-setup/stories**/*.stories.{ts,tsx}Storybook rules + relaxed strictness
eslint-config-setup/config-filesconfig globsRelaxed rules for config files
eslint-config-setup/declarations**/*.d.tsRelaxed 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/markdownmatching file typesJSON/JSONC/Markdown linting
eslint-config-setup/prettierall filesDisables Prettier-conflicting formatting rules

Additional optional blocks are enabled by flags:

  • eslint-config-setup/ai-* when ai: true
  • eslint-config-setup/react + eslint-config-setup/react-effect when react: true
  • eslint-config-setup/node when node: true
  • eslint-config-setup/oxlint* when oxlint: 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.