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 modulescommitlint.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-casescripts/: kebab-casetest/: PascalCase with exceptionsdocs/: 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
- Maintainability: Each concern is isolated in its own file
- Readability: Smaller files are easier to understand
- Reusability: Modules can be imported individually if needed
- Discoverability: Clear filenames indicate what each module controls
- 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:
- Ignore patterns: Edit
config/eslint.ignores.mjs - Naming conventions: Edit
config/eslint.naming.mjs - Filename cases: Edit
config/eslint.filename.mjs - Prettier settings: Edit
config/eslint.prettier.mjs - 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'],
},
];