рдХреЛрдгреАрдп рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВред рдХреБрдХрд┐рдВрдЧ рдИрдПрд╕рд▓рд┐рдВрдЯ, рдХреЛрдбрд▓реАрдЬрд░, рд╕реНрдЯрд╛рдЗрд▓рд▓рд┐рдВрдЯ, рд╣рд╕реНрдХреА, рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬреНрдб рдФрд░ рдкреНрд░реАрдЯреАрдпрд░

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЖрдк рдЗрди рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХрд┐рд╕реА рдХреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рднреА рдирд╣реАрдВ рд╣реИред рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВред


рдЬреИрд╕реЗ рд╣реА рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд╕реНрдерд┐рддрд┐ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рдЙрд╕ рд╢реИрд▓реА рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рдПрдХ рд╕рд╛рде рдорд┐рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреЛрдбреЗрдХреНрд╕ рдХреА рдЪрд░реНрдЪрд╛ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдиреАрдЪреЗ рдХрд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣рд╛рдВ рдХреНрдпреЛрдВ рд╣реИред



рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд░реЛрдмреЛрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╣ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реГрддреНрдд рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИрдВред рдХреГрдкрдпрд╛ рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рд╕рднреА рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдХреЛрдб, рдмрд▓реНрдХрд┐ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА 100% рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред


тАК тАФ , , . , . , , . .



, , . Angular- .


, , Angular, Angular , :


npm install -g @angular/cli #      @angular/cli
ng new angular-linters-sample

TSLint (deprecated)


, Angular CLI, TSLint. npm run lint, CLI ng lint, codestyle.


: ( , ).



TSLint: Angular-


styleguide, Angular-.


TSLint . , TSLint.


, TSLint deprecated, ESLint ( ).


Codelyzer


TSLint, , , TypeScript, Angular- , Angular.


тАК тАФ тАКcodelyzer, Angular CLI. codelyzer npm run lint. tslint.json, TSLint codelyzer rulesDirectory.


ESLint


TSLint deprecated, Angular- ESLint. , , , .


( Angular 9.0.5) ESLint Angular , CLI TSLint codelyzer. , codelyzer ESLint angular-eslint: builder тАФ schematic .
ESLint eslint-plugin-typescript.


Nx, 9.1 @nrwl/linter, ESLint.


@tinkoff/linters, Tinkoff. ESLint, тАФ TSLint.


, , ESLint, .


Stylelint


? . тАКтАФ тАКstylelint. , . тАФ .


stylelint, :


npm install stylelint stylelint-config-standard --save-dev

.stylelintrc ( ):


{
 "extends": "stylelint-config-standard",
 "rules": {
   "at-rule-empty-line-before": null
 }
}

package.json, :


"scripts": {
 ...
 "lint-css": "stylelint src/**/*.css"
 ...
}

, app.component.css , no-empty-source, .



Stylelint: Angular-


Husky


, тАК . , husky, Git Hooks.
, - , pre-commit.
pre-push. , pre-commit .


. тАК , npm run lint.
husky:


npm install husky --save-dev

.huskyrc ( package.json, ):


{
 "hooks": {
   "pre-commit": "npm run lint"
 }
}

:



Husky:


, ng lint, lint, package.json.
:


Husky тЖТ pre-commit hook тЖТ npm run lint тЖТ ng lint


, , .


Lint-staged


husky, , , codestyle.


, , , - - ( codestyle, !). , , , , .


, , , . . , , , тАК тАФтАК staged ( git ).


.
lint-staged:


npm install lint-staged --save-dev

.lintstagedrc ( ). , js ts, тАФ css:


{
 "*.{js,ts}": "npm run lint",
 "*.css": "npm run lint-css"
}

husky, pre-commit. lint-staged, , :


{
 "hooks": {
   "pre-commit": "lint-staged"
 }
}

:


Husky тЖТ pre-commit hook тЖТ lint-staged
тЖТ tslint
тЖТ stylelint


Prettier


Prettier , .
, ?


:


  • Prettier (auto fix). , TSLint , . Has Fixer . stylelint: , , --fix. prettier , .
  • тАЬтАЭ . .
  • , ESLint, TSLint, stylelint.
  • IDE.
  • .
  • .

:


  • . , .
  • HTML.

, prettier , . , , , тАФ - тАЬтАЭ . , , тАФ , , .


.
Prettier TSLint stylelint:


npm install prettier tslint-config-prettier tslint-plugin-prettier stylelint-config-prettier stylelint-prettier --save-dev

TSLint tslint.json:


{
 "extends": [
   "tslint-config-prettier",
   "tslint-plugin-prettier",
   "codelyzer"
 ],
 "rules": {
   "prettier": true
 }
}

: ESLint/TSLint Prettier , .
, тАФ Prettier.
stylelint .stylelintrc:


{
 "extends": ["stylelint-prettier/recommended"]
}

Prettier .prettierrc:


{
 "trailingComma": "es5",
 "tabWidth": 2,
 "semi": true,
 "singleQuote": true
}

, :


npx tslint-config-prettier-check ./tslint.json
npx stylelint-config-prettier-check

prettier package.json:


"scripts": {
 ...
 "prettier": "prettier --write src/**/*.{js,ts,css}",
 ...
}

lint-staged, Prettier :


{
 "*.{js,json,md,html}": [
   "prettier --write"
 ],
 "*.css": [
   "prettier --write",
   "npm run lint-css"
 ],
 "*.ts": [
   "prettier --write",
   "npm run lint"
 ]
}

Prettier , :


npm run prettier


, .


, Angular, тАФ . Angular, .


, , .


@tinkoff/linters, .
, , .


All Articles