ESLint - Quick Reference
When to Use This Skill
-
Configure linting for JavaScript/TypeScript projects
-
Create custom rules
-
Integrate with Prettier and other tools
When NOT to Use This Skill
-
ESLint 9 flat config + Biome - Use eslint-biome skill for modern setup
-
TypeScript-specific rules - Use typescript-eslint skill
-
Code quality principles - Use quality-common for SOLID/Clean Code
-
SonarQube integration - Use sonarqube skill
Deep Knowledge: Use mcp__documentation__fetch_docs with technology: eslint for comprehensive documentation.
Basic Setup
npm install -D eslint @eslint/js npx eslint --init
Flat Config (ESLint 9+)
eslint.config.js
import js from '@eslint/js'; import tseslint from 'typescript-eslint';
export default [ js.configs.recommended, ...tseslint.configs.recommended, { files: ['/*.ts', '/.tsx'], rules: { '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/explicit-function-return-type': 'warn', }, }, { ignores: ['dist/', 'node_modules/', '.config.js'], }, ];
With Prettier
import eslintConfigPrettier from 'eslint-config-prettier';
export default [ js.configs.recommended, ...tseslint.configs.recommended, eslintConfigPrettier, // Must be last ];
Legacy Config (.eslintrc)
{ "root": true, "env": { "browser": true, "es2021": true, "node": true }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "rules": { "no-console": "warn", "@typescript-eslint/no-explicit-any": "error" } }
CLI Usage
Lint files
npx eslint src/
Fix auto-fixable issues
npx eslint src/ --fix
Check specific files
npx eslint "src/**/*.{ts,tsx}"
Anti-Patterns
Anti-Pattern Why It's Bad Correct Approach
Using legacy .eslintrc in new projects Deprecated in ESLint 9 Use flat config (eslint.config.mjs)
No TypeScript type checking Misses type-aware issues Use recommendedTypeChecked preset
Disabling rules with comments everywhere Code smell, defeats purpose Fix the issue or adjust rule config
Not caching in CI Slow linting Use --cache flag
Conflicting Prettier rules Formatting wars Use eslint-config-prettier
Ignoring warnings Accumulate tech debt Treat warnings as errors in CI
Quick Troubleshooting
Issue Likely Cause Solution
"Failed to load config" error Wrong config format Check eslint.config.mjs syntax
Type-aware rules not working Missing parserOptions Add projectService: true to config
Linting very slow No caching, type checking all files Enable cache, limit type checking to TS files
Rules from plugin not found Plugin not in flat config format Check plugin compatibility with ESLint 9
Prettier conflicts Both formatting same code Add eslint-config-prettier last
File not being linted In ignores array Check ignores in config