Sitelet https://github.com/Jbz797/eslint-config-angular-strict
Skip to content

Latest commit

 

History

396 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Angular Strict ESLint Logo

Angular Strict ESLint

Modern ESLint configuration with strict rules for Angular development

NPM Version GitHub license NPM Downloads


Overview

A production-ready, opinionated ESLint configuration that enforces best practices for Angular applications. Combines rules from industry-leading plugins into a single package with zero additional configuration required.

Features

🅰️ Angular: 40+ rules for standalone, lifecycle, components/directives standards, metadata, signals, pipes,...
📘 TypeScript: Promise-async, type imports, strict typing, type safety, extraneous classes,...
✨ Code Quality: Complexity max, file length control, import cycles detection, 100+ Unicorn best practices,...
🎨 Style: Airbnb extended, max line length, object/class newlines, sorted classes/imports/objects/types,...
📁 Naming: File/folder/class suffix conventions enforced (components, services, pipes, interfaces,...)
🔍 Templates: 30+ rules with alphabetical attrs, complexity max, control flow, trackBy, a11y, no-any,...

What's Included

✨ No additional ESLint installation needed! Everything is bundled.

Installation

1. Install Package

yarn add eslint-config-angular-strict --dev

⚠️ Important: Remove any existing eslint dependency from your project - it's included!

2. Configure ESLint

Create an eslint.config.js file (flat config format):

import angularStrict from 'eslint-config-angular-strict';

export default [
  ...angularStrict,
  // Your custom overrides here
];

3. Update package.json

Add the following to your package.json:

{
  // ...
  "type": "module",
}

TypeScript Configuration

Make sure your tsconfig.json is properly configured:

{
  "compilerOptions": {
    // ...
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "exactOptionalPropertyTypes": true,
    "noImplicitOverride": true,
    "noUncheckedIndexedAccess": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "target": "esnext",
  },
  "angularCompilerOptions": {
    // ...
    "extendedDiagnostics": { "defaultCategory": "error" },
    "strictInjectionParameters": true,
    "strictStandalone": true,
    "strictTemplates": true,
  },
}

ℹ️ Note: target: "esnext" auto-includes the latest standard lib (esnext + DOM), which several Unicorn rules require. Without it, some rules may suggest APIs that TypeScript doesn't recognize as built-in. No need to set lib explicitly — TypeScript infers it from target.

Prettier

This config handles TypeScript formatting via ESLint. Prettier should only be used for HTML templates.

Recommended .prettierrc

{
  "printWidth": 165,
  "singleQuote": true,
  "overrides": [
    {
      "files": "*.html",
      "options": { "parser": "angular" }
    }
  ]
}

Recommended lint scripts (package.json)

{
  "scripts": {
    // ...
    "lint": "ng lint && prettier --check \"src/**/*.html\"",
    "lint:fix": "ng lint --fix && prettier --write \"src/**/*.html\"",
  },
}

⚠️ Important: Only target *.html files with Prettier. Running Prettier on .ts files will conflict with ESLint Stylistic rules.

Recommended VS Code settings

{
  // ...
  "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
  "editor.defaultFormatter": "dbaeumer.vscode-eslint",
  "editor.formatOnSave": true,
  "editor.formatOnType": true,
  "eslint.format.enable": true,
  "eslint.validate": [, /*...*/ "html", "typescript"],
}

This ensures ESLint handles .ts formatting on save, while Prettier handles .html templates.

Contributing

Contributions are welcome! Please open an issue or submit a PR.

License

MIT © Jean-benoit Gautier

About

Modern ESLint configuration with strict rules for Angular development

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages