Skip to main content

ESLint Configuration

This project uses a modular ESLint configuration for better maintainability and organization.

Structure

The ESLint configuration is split into focused, single-responsibility modules located in the config/ directory:

Core Files

  • eslint.common.mjs - Main entry point that imports and combines all modules
  • commitlint.common.mjs - Commitlint configuration

ESLint Modules

eslint.ignores.mjs

Defines files and directories to ignore:

  • Build outputs (build/, dist/, cdk.out/)
  • Dependencies (node_modules/)
  • Generated files (.gen/)
  • Documentation build artifacts (.docusaurus/, docs/build/)

eslint.naming.mjs

TypeScript naming conventions:

  • Variables: camelCase, UPPER_CASE for constants
  • Functions: camelCase
  • Classes: PascalCase
  • Interfaces: PascalCase
  • Type aliases: PascalCase
  • Enums: PascalCase
  • Methods and properties: Various rules based on modifiers

eslint.filename.mjs

Filename case rules:

  • Default: PascalCase
  • bin/: kebab-case
  • scripts/: kebab-case
  • test/: PascalCase with exceptions
  • docs/: flexible (camelCase, PascalCase, kebabCase)

eslint.prettier.mjs

Code formatting rules:

  • Single quotes
  • Print width: 132
  • Arrow parens: always
  • Semicolons: required
  • Tab width: 2

eslint.overrides.mjs

File-specific rule overrides:

  • Example files (lintExamples.ts) - relaxed rules
  • Config files - no type checking
  • Test files - special expect assertion patterns
  • Documentation files - flexible naming, no type checking
  • Markdown files - prettier disabled

Benefits of This Structure

  1. Maintainability: Each concern is isolated in its own file
  2. Readability: Smaller files are easier to understand
  3. Reusability: Modules can be imported individually if needed
  4. Discoverability: Clear filenames indicate what each module controls
  5. Testing: Easier to test individual rule sets in isolation

Usage

The main configuration is automatically used by the root eslint.config.mjs.

Running ESLint

# Lint all code
npm run lint

# Lint only documentation
npm run docs:lint

Modifying Rules

To modify specific rules:

  1. Ignore patterns: Edit config/eslint.ignores.mjs
  2. Naming conventions: Edit config/eslint.naming.mjs
  3. Filename cases: Edit config/eslint.filename.mjs
  4. Prettier settings: Edit config/eslint.prettier.mjs
  5. File-specific overrides: Edit config/eslint.overrides.mjs

All changes are automatically applied when ESLint runs.

Example: Adding a New Ignore Pattern

// config/eslint.ignores.mjs
export const ignorePatterns = [
// ... existing patterns ...
'my-new-folder/**', // Add your pattern
];

Example: Customizing Naming Rules

// config/eslint.naming.mjs
export const namingConventionRules = [
// ... existing rules ...
{
selector: 'variable',
format: ['camelCase', 'UPPER_CASE'],
},
];