
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
@siemens/eslint-config-angular
Advanced tools
Configuration for linting Angular TypeScript and templates using Angular ESLint.
Siemens Lint helps you to improve and keep the code quality of your project on a high level. It provides presets and plugins for various linters used at Siemens.
We welcome contributions of further linting rules and configs to be added to this repo for various other programming languages and frameworks.
Presets available for following linters:
Plugins:
@defaultValue
TSDoc tagInstall @siemens/*-config*
and their peer dependencies in your project (whichever you need):
npm install @siemens/stylelint-config-scss --save-dev --save-exact
npm install @siemens/commitlint-config --save-dev --save-exact
npm install @siemens/prettier-config --save-dev --save-exact
npm install @siemens/eslint-config-typescript --save-dev --save-exact
npm install @siemens/eslint-config-angular --save-dev --save-exact
Note You should specify the exact versions of the packages above and
their peer dependencies like eslint
and its plugins, stylelint
,
stylelint-config-sass-guidelines
and @commitlint/config-conventional
. Rules
will get changed in the patch releases.
Our ESLint configurations does not include any formatting rules. Please use a formatter like Prettier or add a formatting ruleset for ESLint like ESLint Stylistic.
Include the ESLint preset in your root eslint.config.mjs
:
import path from 'path';
import { fileURLToPath } from 'url';
import typescriptEslint from 'typescript-eslint';
import typescriptConfig from '@siemens/eslint-config-typescript';
// mimic CommonJS variables
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
export default typescriptEslint.config({
extends: [...baseTypescriptConfig, prettier],
files: ['**/*.ts'],
languageOptions: {
parserOptions: {
project: ['tsconfig.json', 'tsconfig.app.json', 'tsconfig.spec.json', 'e2e/tsconfig.json'],
tsconfigRootDir: __dirname
}
}
});
Note: to use less strict rules, use the
base
rules, by importing{ configBase }
instead.
Include the ESLint preset in your root eslint.config.js
(not .mjs
) and make
sure "type": "module"
is set in your root package.json
:
import path from 'path';
import { fileURLToPath } from 'url';
import typescriptEslint from 'typescript-eslint';
import angularTypescriptConfig from '@siemens/eslint-config-angular';
import angularTemplateConfig from '@siemens/eslint-config-angular/template';
import prettier from 'eslint-config-prettier';
// mimic CommonJS variables
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
export const tsConfig = typescriptEslint.config({
extends: [...angularTypescriptConfig],
files: ['**/*.ts'],
languageOptions: {
parserOptions: {
project: ['tsconfig.json', 'tsconfig.app.json', 'tsconfig.spec.json', 'e2e/tsconfig.json'],
tsconfigRootDir: __dirname
}
},
rules: {
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'app',
style: 'camelCase'
}
],
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'app',
style: 'kebab-case'
}
]
}
});
export const templateConfig = typescriptEslint.config({
extends: [...angularTemplateConfig],
files: ['**/*.html']
});
export default typescriptEslint.config(...tsConfig, ...templateConfig);
For libraries and other things in the projects
directory,
make sure "type": "module"
is set in the relevant package.json
and create an additional
eslint.config.js
for each project that looks like this:
import typescriptEslint from 'typescript-eslint';
import { tsConfig, templateConfig } from '../../eslint.config.js';
export default typescriptEslint.config(
{
extends: [...tsConfig],
files: ['**/*.ts'],
languageOptions: {
parserOptions: {
project: ['projects/element-ng/tsconfig.lib.json', 'projects/element-ng/tsconfig.spec.json']
}
},
rules: {
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'si',
style: 'kebab-case'
}
],
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'si',
style: 'camelCase'
}
]
}
},
...templateConfig
);
The @angular-eslint/builder
will also not automatically pick up the library
config location, manually provide it in angular.json
:
@@ -122,15 +125,11 @@
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": [
"src/**/*.ts",
"src/**/*.html"
],
+ "eslintConfig": "path/to/project/eslint.config.js"
}
},
Also in angular.json
, make sure to replace the TSLint related entries like
this:
@@ -122,15 +125,11 @@
}
},
"lint": {
- "builder": "@angular-devkit/build-angular:tslint",
+ "builder": "@angular-eslint/builder:lint",
"options": {
- "tsConfig": [
- "tsconfig.app.json",
- "tsconfig.spec.json",
- "e2e/tsconfig.json"
- ],
- "exclude": [
- "**/node_modules/**"
+ "lintFilePatterns": [
+ "src/**/*.ts",
+ "src/**/*.html"
]
}
},
Note: to use less strict rules, which are derived from the upstream Angular recommendation and more geared towards applications, use the
base
rules, by importing{ configBase }
instead.
Include the stylelint preset in your .stylelintrc.yml
:
extends:
- '@siemens/stylelint-config-scss/stylelintrc.yml'
Include the commitlint preset in your package.json
:
"commitlint": {
"extends": [
"@siemens/commitlint-config/.commitlintrc.js"
]
},
// Optional: Pre-commit hook using husky: https://github.com/typicode/husky
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
Include the shared Prettier config in your package.json
:
"prettier": "@siemens/prettier-config/.prettierrc.json",
The usage of the ESLint plugin is documented here.
The preset will now be automatically used by eslint
and ng lint
. Please
refer to the Angular ESLint and
ng lint documentation for more details.
Add the commitlint, ESlint and stylelint scripts to your package.json
:
"scripts": {
"lint": "ng lint",
"lint:sass": "stylelint **.scss",
"lint:commit": "commitlint --from=origin/main",
"lint:all": "npm run lint:commit && npm run lint && npm run lint:sass"
}
To fix ESLint issues automatically use:
"scripts": {
"lint:fix": "ng lint --fix"
}
To fix stylelint issues automatically use:
"scripts": {
"lint:sass:fix": "stylelint --fix **.scss"
}
Make sure to call the linters in your CI build chain in .gitlab-ci.yml
:
lint:
stage: tests
script:
- npm install
- npm run lint:all
Note: To make commitlint work in Gitlab CI, one needs to set the
Git shallow clone
setting to0
(found in projectsettings
>CI / CD
). That way GitLab CI fetches all branches and tags each time.
Improvements are always welcome! Feel free to log a bug, write a suggestion or contribute code by creating a pull request. All details are listed in our contribution guide.
See CONTRIBUTING.md.
Code and documentation Copyright (c) Siemens 2018 - 2024.
See LICENSE.md.
FAQs
Configuration for linting Angular TypeScript and templates using Angular ESLint.
We found that @siemens/eslint-config-angular demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.