{"id":13481289,"url":"https://github.com/mgechev/codelyzer","last_synced_at":"2026-02-19T16:01:01.630Z","repository":{"id":4104950,"uuid":"51457456","full_name":"mgechev/codelyzer","owner":"mgechev","description":"Static analysis for Angular projects.","archived":false,"fork":false,"pushed_at":"2026-01-30T14:36:26.000Z","size":18537,"stargazers_count":2463,"open_issues_count":82,"forks_count":237,"subscribers_count":42,"default_branch":"master","last_synced_at":"2026-01-31T07:39:04.448Z","etag":null,"topics":["angular","angular-cli","codelyzer","linting","static-code-analysis","style-guide","tslint"],"latest_commit_sha":null,"homepage":"http://codelyzer.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgechev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-02-10T17:22:40.000Z","updated_at":"2026-01-19T13:29:42.000Z","dependencies_parsed_at":"2023-07-05T19:48:41.998Z","dependency_job_id":"58efd1fd-8c41-429b-836f-897781880730","html_url":"https://github.com/mgechev/codelyzer","commit_stats":{"total_commits":852,"total_committers":66,"mean_commits":"12.909090909090908","dds":0.437793427230047,"last_synced_commit":"8b7d153e737d0978a9aaa852beb32aad3345eb3b"},"previous_names":["mgechev/ng2lint"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/mgechev/codelyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgechev%2Fcodelyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgechev%2Fcodelyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgechev%2Fcodelyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgechev%2Fcodelyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgechev","download_url":"https://codeload.github.com/mgechev/codelyzer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgechev%2Fcodelyzer/sbom","scorecard":{"id":639171,"data":{"date":"2025-08-11","repo":{"name":"github.com/mgechev/codelyzer","commit":"8b7d153e737d0978a9aaa852beb32aad3345eb3b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":2,"reason":"Found 4/17 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/mgechev/.github/SECURITY.md:1","Info: Found linked content: github.com/mgechev/.github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: github.com/mgechev/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 18 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"41 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-c75v-2vq8-878f","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-ff7x-qrg7-qggm","Warn: Project is vulnerable to: GHSA-2j2x-2gpw-g8fm","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-r8f7-9pfq-mjmv","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-g6ww-v8xp-vmwg","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-7mwh-4pqv-wmr8","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-7p7h-4mm5-852v","Warn: Project is vulnerable to: GHSA-38fc-wpqx-33j7","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh","Warn: Project is vulnerable to: GHSA-p9pc-299p-vxgp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T10:11:43.707Z","repository_id":4104950,"created_at":"2025-08-21T10:11:43.707Z","updated_at":"2025-08-21T10:11:43.707Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29068576,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T03:31:03.593Z","status":"ssl_error","status_checked_at":"2026-02-04T03:29:50.742Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","angular-cli","codelyzer","linting","static-code-analysis","style-guide","tslint"],"created_at":"2024-07-31T17:00:50.505Z","updated_at":"2026-02-19T16:01:01.547Z","avatar_url":"https://github.com/mgechev.png","language":"TypeScript","readme":"[![npm version](https://badge.fury.io/js/codelyzer.svg)](https://badge.fury.io/js/codelyzer)\n[![Downloads](https://img.shields.io/npm/dt/codelyzer.svg)](https://img.shields.io/npm/dt/codelyzer.svg)\n[![Build Status](https://travis-ci.org/mgechev/codelyzer.svg?branch=master)](https://travis-ci.org/mgechev/codelyzer)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n[![Gitter Chat](https://camo.githubusercontent.com/da2edb525cde1455a622c58c0effc3a90b9a181c/68747470733a2f2f6261646765732e6769747465722e696d2f4a6f696e253230436861742e737667)](https://gitter.im/mgechev/codelyzer)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/mgechev/codelyzer/master/assets/logo.png\" alt=\"\" width=\"200\"\u003e\n\u003c/p\u003e\n\n# codelyzer\n\nA set of tslint rules for static code analysis of Angular TypeScript projects.  \n(If you are using [ESLint](https://github.com/eslint/eslint) check out the new [`angular-eslint`](https://github.com/angular-eslint/angular-eslint) repository.)\n\nYou can run the static code analyzer over web apps, NativeScript, Ionic, etc.\n\n**Vote for your favorite feature [here](https://github.com/mgechev/codelyzer/issues?utf8=%E2%9C%93\u0026q=label%3A%22votes+needed%22+sort%3Areactions-%2B1-desc+). For more details about the feature request process see [this document](https://github.com/mgechev/codelyzer/blob/master/CONTRIBUTING.md#-missing-a-feature)**\n\n[![](https://raw.githubusercontent.com/mgechev/codelyzer/master/assets/ngconf.png)](https://youtu.be/bci-Z6nURgE)\n\n## How to use?\n\n### Angular CLI\n\n[Angular CLI](https://cli.angular.io) has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:\n\n```shell\nng new codelyzer\nng lint\n```\n\nNote that by default all components are aligned with the style guide so you won't see any errors in the console.\n\n### Angular Seed\n\nAnother project which has out of the box integration with codelyzer is [angular-seed](https://github.com/mgechev/angular-seed). In order to run the linter you should:\n\n```shell\n# Skip if you've already cloned Angular Seed\ngit clone https://github.com/mgechev/angular-seed\n\n# Skip if you've already installed all the dependencies of Angular Seed\ncd angular-seed \u0026\u0026 npm i\n\n# Run all the tslint and codelyzer rules\nnpm run lint\n```\n\nNote that by default all components are aligned with the style guide so you won't see any errors in the console.\n\n### Custom Setup\n\n#### Preset\n\nYou can use the [`tslint-angular`](https://github.com/mgechev/tslint-angular) preset. All you need is:\n\n```shell\nnpm i tslint-angular\n```\n\nAfter that create a `tslint.json` file with the following configuration:\n\n```json\n{\n  \"extends\": [\"tslint-angular\"]\n}\n```\n\nRun the linter with:\n\n```bash\n./node_modules/.bin/tslint -c tslint.json\n```\n\nTSLint will now complain that there are rules which require type checking. In order to fix this, use the `-p` config option:\n\n```bash\n./node_modules/.bin/tslint -p tsconfig.json -c tslint.json\n```\n\n#### Custom Installation\n\nYou can easily use codelyzer with your custom setup:\n\n```shell\nnpm i codelyzer tslint @angular/compiler @angular/core\n```\n\nA. Using codelyzer package in PATH\n\nCreate the following `tslint.json` file like:\n\n```json\n{\n  \"extends\": [\"codelyzer\"],\n  \"rules\": {\n    \"component-class-suffix\": true,\n    \"component-max-inline-declarations\": true,\n    \"component-selector\": [true, \"element\", \"sg\", \"kebab-case\"],\n    \"contextual-lifecycle\": true,\n    \"directive-class-suffix\": true,\n    \"directive-selector\": [true, \"attribute\", \"sg\", \"camelCase\"],\n    \"no-attribute-decorator\": true,\n    \"no-conflicting-lifecycle\": true,\n    \"no-forward-ref\": true,\n    \"no-host-metadata-property\": true,\n    \"no-input-rename\": true,\n    \"no-inputs-metadata-property\": true,\n    \"no-lifecycle-call\": true,\n    \"no-output-native\": true,\n    \"no-output-on-prefix\": true,\n    \"no-output-rename\": true,\n    \"no-outputs-metadata-property\": true,\n    \"no-pipe-impure\": true,\n    \"no-queries-metadata-property\": true,\n    \"no-unused-css\": true,\n    \"prefer-inline-decorator\": true,\n    \"prefer-output-readonly\": true,\n    \"template-banana-in-box\": true,\n    \"template-conditional-complexity\": [true, 4],\n    \"template-cyclomatic-complexity\": [true, 5],\n    \"template-i18n\": [true, \"check-id\", \"check-text\"],\n    \"template-no-negated-async\": true,\n    \"template-use-track-by-function\": true,\n    \"use-component-selector\": true,\n    \"use-component-view-encapsulation\": true,\n    \"use-lifecycle-interface\": true,\n    \"use-pipe-transform-interface\": true\n  }\n}\n```\n\nTo run TSLint with this setup you can use one of the following alternatives:\n\n1.  Install codelyzer globally `npm install -g codelyzer`\n\n2.  Run TSLint from a package.json script by adding a script like `tslint .` to your package.json, similar to:\n\n```json\n\"scripts\": {\n  ...\n  \"lint\": \"tslint .\",\n  ...\n},\n```\n\nThen run `npm run lint`\n\nB. Using codelyzer from node_modules directory\n\nNow create the following `tslint.json` file where your `node_modules` directory is:\n\n```json\n{\n  \"rulesDirectory\": [\"node_modules/codelyzer\"],\n  \"rules\": {\n    \"component-class-suffix\": true,\n    \"component-max-inline-declarations\": true,\n    \"component-selector\": [true, \"element\", \"sg\", \"kebab-case\"],\n    \"contextual-lifecycle\": true,\n    \"directive-class-suffix\": true,\n    \"directive-selector\": [true, \"attribute\", \"sg\", \"camelCase\"],\n    \"no-attribute-decorator\": true,\n    \"no-conflicting-lifecycle\": true,\n    \"no-forward-ref\": true,\n    \"no-host-metadata-property\": true,\n    \"no-input-rename\": true,\n    \"no-inputs-metadata-property\": true,\n    \"no-lifecycle-call\": true,\n    \"no-output-native\": true,\n    \"no-output-on-prefix\": true,\n    \"no-output-rename\": true,\n    \"no-outputs-metadata-property\": true,\n    \"no-pipe-impure\": true,\n    \"no-queries-metadata-property\": true,\n    \"no-unused-css\": true,\n    \"prefer-inline-decorator\": true,\n    \"prefer-output-readonly\": true,\n    \"template-banana-in-box\": true,\n    \"template-conditional-complexity\": [true, 4],\n    \"template-cyclomatic-complexity\": [true, 5],\n    \"template-i18n\": [true, \"check-id\", \"check-text\"],\n    \"template-no-negated-async\": true,\n    \"template-use-track-by-function\": true,\n    \"use-component-selector\": true,\n    \"use-component-view-encapsulation\": true,\n    \"use-lifecycle-interface\": true,\n    \"use-pipe-transform-interface\": true\n  }\n}\n```\n\nNext you can create a component file in the same directory with name `component.ts` and the following content:\n\n```ts\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'codelyzer',\n  template: ` \u003ch1\u003eHello {{ name }}!\u003c/h1\u003e `,\n})\nclass Codelyzer {\n  name: string = 'World';\n\n  ngOnInit() {\n    console.log('Initialized');\n  }\n}\n```\n\nAs last step you can execute all the rules against your code with tslint:\n\n```shell\n./node_modules/.bin/tslint -c tslint.json component.ts\n```\n\nYou should see the following output:\n\n```text\ncomponent.ts[4, 13]: The selector of the component \"Codelyzer\" should have prefix \"sg\" (https://goo.gl/cix8BY)\ncomponent.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)\ncomponent.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)\n```\n\n### Editor Configuration\n\n**Note that you need to have tslint plugin install on your editor**.\n\nCodelyzer should work out of the box with Atom but for VSCode you will have to open `Code \u003e Preferences \u003e User Settings`, and enter the following config:\n\n```json\n{\n  \"tslint.rulesDirectory\": \"./node_modules/codelyzer\",\n  \"typescript.tsdk\": \"node_modules/typescript/lib\"\n}\n```\n\nNow you should have the following result:\n\n![VSCode Codelyzer](https://s2.gifyu.com/images/cd357cc648051aadc9.gif)\n\nEnjoy!\n\n## Changelog\n\nYou can find it [here](https://github.com/mgechev/codelyzer/blob/master/CHANGELOG.md).\n\n## Recommended configuration\n\nBelow you can find a recommended configuration which is based on the [Angular Style Guide](https://angular.io/styleguide).\n\n```js\n{\n  // The rules component-selector and directive-selector have the following arguments:\n  // [ENABLED, \"attribute\" | \"element\", \"prefix\" | [\"listOfPrefixes\"], \"camelCase\" | \"kebab-case\"]\n  \"component-selector\": [true, \"element\", [\"cmp-prefix1\", \"cmp-prefix2\"], \"kebab-case\"],\n  \"directive-selector\": [true, \"attribute\", [\"dir-prefix1\", \"dir-prefix2\"], \"camelCase\"],\n\n  \"component-max-inline-declarations\": true,\n  \"contextual-lifecycle\": true,\n  \"no-conflicting-lifecycle\": true,\n  \"no-host-metadata-property\": true,\n  \"no-input-rename\": true,\n  \"no-inputs-metadata-property\": true,\n  \"no-output-native\": true,\n  \"no-output-on-prefix\": true,\n  \"no-output-rename\": true,\n  \"no-outputs-metadata-property\": true,\n  \"no-queries-metadata-property\": true,\n  \"prefer-inline-decorator\": true,\n  \"template-banana-in-box\": true,\n  \"template-no-negated-async\": true,\n  \"use-lifecycle-interface\": true,\n  \"use-pipe-transform-interface\": true,\n\n  // The rules component-class-suffix and directive-class-suffix have the following arguments:\n  // [ENABLED, \"suffix\" | [\"listOfSuffixes\"]]\n  // Where \"suffix\" is/are your custom(s) suffix(es), for instance \"Page\" for Ionic components.\n  \"component-class-suffix\": [true, \"Component\"],\n  \"directive-class-suffix\": [true, \"Directive\"]\n}\n```\n\n## Rules Status\n\n| Rule                                          |     Status     |\n| --------------------------------------------- | :------------: |\n| `component-class-suffix`                      |     Stable     |\n| `component-max-inline-declarations`           |     Stable     |\n| `component-selector`                          |     Stable     |\n| `contextual-decorator`                        |     Stable     |\n| `contextual-lifecycle`                        |     Stable     |\n| `directive-class-suffix`                      |     Stable     |\n| `directive-selector`                          |     Stable     |\n| `import-destructuring-spacing`                |     Stable     |\n| `no-attribute-decorator`                      |     Stable     |\n| `no-forward-ref`                              |     Stable     |\n| `no-host-metadata-property`                   |     Stable     |\n| `no-input-prefix`                             |     Stable     |\n| `no-input-rename`                             |     Stable     |\n| `no-inputs-metadata-property`                 |     Stable     |\n| `no-lifecycle-call`                           |     Stable     |\n| `no-output-native`                            |     Stable     |\n| `no-output-on-prefix`                         |     Stable     |\n| `no-output-rename`                            |     Stable     |\n| `no-outputs-metadata-property`                |     Stable     |\n| `no-pipe-impure`                              |     Stable     |\n| `no-queries-metadata-property`                |     Stable     |\n| `prefer-inline-decorator`                     |     Stable     |\n| `prefer-output-readonly`                      |     Stable     |\n| `template-banana-in-box`                      |     Stable     |\n| `template-cyclomatic-complexity`              |     Stable     |\n| `template-no-call-expression`                 |     Stable     |\n| `template-no-negated-async`                   |     Stable     |\n| `template-use-track-by-function`              |     Stable     |\n| `use-component-selector`                      |     Stable     |\n| `use-component-view-encapsulation`            |     Stable     |\n| `use-lifecycle-interface`                     |     Stable     |\n| `use-pipe-decorator`                          |     Stable     |\n| `use-pipe-transform-interface`                |     Stable     |\n| `prefer-on-push-component-change-detection`   | _Experimental_ |\n| `no-conflicting-lifecycle`                    | _Experimental_ |\n| `no-unused-css`                               | _Experimental_ |\n| `pipe-prefix`                                 | _Experimental_ |\n| `relative-url-prefix`                         | _Experimental_ |\n| `template-accessibility-alt-text`             | _Experimental_ |\n| `template-accessibility-elements-content`     | _Experimental_ |\n| `template-accessibility-label-for`            | _Experimental_ |\n| `template-accessibility-tabindex-no-positive` | _Experimental_ |\n| `template-accessibility-table-scope`          | _Experimental_ |\n| `template-accessibility-valid-aria`           | _Experimental_ |\n| `template-click-events-have-key-events`       | _Experimental_ |\n| `template-conditional-complexity`             | _Experimental_ |\n| `template-i18n`                               | _Experimental_ |\n| `template-mouse-events-have-key-events`       | _Experimental_ |\n| `template-no-any`                             | _Experimental_ |\n| `template-no-autofocus`                       | _Experimental_ |\n| `template-no-distracting-elements`            | _Experimental_ |\n| `angular-whitespace`                          |  _Deprecated_  |\n\n## Disable a rule that validates Template or Styles\n\nLint rules can be disabled by adding a marker in TypeScript files. More information [here](https://palantir.github.io/tslint/usage/rule-flags/).\n\nTo disable rules that validate templates or styles you'd need to add a marker in the TypeScript file referencing them.\n\n```ts\nimport { Component } from '@angular/core';\n\n/* tslint:disable:template-use-track-by-function */\n@Component({\n  selector: 'codelyzer',\n  templateUrl: './codelyzer.component.html',\n})\nclass Codelyzer {}\n```\n\n## Advanced configuration\n\nCodelyzer supports any template and style language by custom hooks. If you're using Sass for instance, you can allow codelyzer to analyze your styles by creating a file `.codelyzer.js` in the root of your project (where the `node_modules` directory is). In the configuration file can implement custom pre-processing and template resolution logic:\n\n```js\n// Demo of transforming Sass styles\nvar sass = require('node-sass');\n\nmodule.exports = {\n  // Definition of custom interpolation strings\n  interpolation: ['{{', '}}'],\n\n  // You can transform the urls of your external styles and templates\n  resolveUrl(url, decorator) {\n    return url;\n  },\n\n  // Transformation of the templates. This hooks is quite useful\n  // if you're using any other templating language, for instance\n  // jade, markdown, haml, etc.\n  //\n  // NOTE that this method WILL NOT throw an error in case of invalid template.\n  //\n  transformTemplate(code, url, decorator) {\n    return { code: code, url: url };\n  },\n\n  // Transformation of styles. This hook is useful is you're using\n  // any other style language, for instance Sass, Less, etc.\n  //\n  // NOTE that this method WILL NOT throw an error in case of invalid style.\n  //\n  transformStyle(code, url, decorator) {\n    var result = { code: code, url: url };\n    if (url \u0026\u0026 /\\.scss$/.test(url)) {\n      var transformed = sass.renderSync({ data: code, sourceMap: true, outFile: '/dev/null' });\n      result.source = code;\n      result.code = transformed.css.toString();\n      result.map = transformed.map.toString();\n    }\n    return result;\n  },\n\n  // Custom predefined directives in case you get error for\n  // missing property and you are using a template reference\n  predefinedDirectives: [{ selector: 'form', exportAs: 'ngForm' }],\n\n  // None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111\n  logLevel: 0b111,\n};\n```\n\n## Contributors\n\n| [\u003cimg alt=\"mgechev\" src=\"https://avatars1.githubusercontent.com/u/455023?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mgechev) | [\u003cimg alt=\"wKoza\" src=\"https://avatars2.githubusercontent.com/u/11403260?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/wKoza) | [\u003cimg alt=\"rafaelss95\" src=\"https://avatars0.githubusercontent.com/u/11965907?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rafaelss95) | [\u003cimg alt=\"preslavsh\" src=\"https://avatars2.githubusercontent.com/u/6237138?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/preslavsh) | [\u003cimg alt=\"mohammedzamakhan\" src=\"https://avatars3.githubusercontent.com/u/2327532?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mohammedzamakhan) | [\u003cimg alt=\"rokerkony\" src=\"https://avatars3.githubusercontent.com/u/156132?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rokerkony) |\n| :---------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |\n|                                             [mgechev](https://github.com/mgechev)                                             |                                              [wKoza](https://github.com/wKoza)                                              |                                              [rafaelss95](https://github.com/rafaelss95)                                              |                                             [preslavsh](https://github.com/preslavsh)                                              |                                             [mohammedzamakhan](https://github.com/mohammedzamakhan)                                              |                                             [rokerkony](https://github.com/rokerkony)                                             |\n\n| [\u003cimg alt=\"GregOnNet\" src=\"https://avatars3.githubusercontent.com/u/444278?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/GregOnNet) | [\u003cimg alt=\"alan-agius4\" src=\"https://avatars3.githubusercontent.com/u/17563226?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alan-agius4) | [\u003cimg alt=\"kevinphelps\" src=\"https://avatars1.githubusercontent.com/u/7399499?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/kevinphelps) | [\u003cimg alt=\"eppsilon\" src=\"https://avatars1.githubusercontent.com/u/5643?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/eppsilon) | [\u003cimg alt=\"csvn\" src=\"https://avatars2.githubusercontent.com/u/8770194?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/csvn) | [\u003cimg alt=\"ghsyeung\" src=\"https://avatars0.githubusercontent.com/u/1243185?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/ghsyeung) |\n| :-------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |\n|                                             [GregOnNet](https://github.com/GregOnNet)                                             |                                              [alan-agius4](https://github.com/alan-agius4)                                              |                                             [kevinphelps](https://github.com/kevinphelps)                                              |                                            [eppsilon](https://github.com/eppsilon)                                            |                                             [csvn](https://github.com/csvn)                                              |                                             [ghsyeung](https://github.com/ghsyeung)                                              |\n\n| [\u003cimg alt=\"Kobzol\" src=\"https://avatars0.githubusercontent.com/u/4539057?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Kobzol) | [\u003cimg alt=\"mattlewis92\" src=\"https://avatars1.githubusercontent.com/u/6425649?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/mattlewis92) | [\u003cimg alt=\"lazarljubenovic\" src=\"https://avatars3.githubusercontent.com/u/7661457?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/lazarljubenovic) | [\u003cimg alt=\"sagittarius-rev\" src=\"https://avatars0.githubusercontent.com/u/23564517?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/sagittarius-rev) | [\u003cimg alt=\"connor4312\" src=\"https://avatars0.githubusercontent.com/u/2230985?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/connor4312) | [\u003cimg alt=\"Foxandxss\" src=\"https://avatars2.githubusercontent.com/u/1087957?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Foxandxss) |\n| :--------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: |\n|                                             [Kobzol](https://github.com/Kobzol)                                              |                                             [mattlewis92](https://github.com/mattlewis92)                                              |                                             [lazarljubenovic](https://github.com/lazarljubenovic)                                              |                                              [sagittarius-rev](https://github.com/sagittarius-rev)                                              |                                             [connor4312](https://github.com/connor4312)                                              |                                             [Foxandxss](https://github.com/Foxandxss)                                              |\n\n| [\u003cimg alt=\"gbilodeau\" src=\"https://avatars2.githubusercontent.com/u/532543?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/gbilodeau) | [\u003cimg alt=\"NagRock\" src=\"https://avatars2.githubusercontent.com/u/5803314?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/NagRock) | [\u003cimg alt=\"Hotell\" src=\"https://avatars0.githubusercontent.com/u/1223799?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Hotell) | [\u003cimg alt=\"Martin-Wegner\" src=\"https://avatars1.githubusercontent.com/u/8995517?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Martin-Wegner) | [\u003cimg alt=\"comfroels\" src=\"https://avatars2.githubusercontent.com/u/4616177?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/comfroels) | [\u003cimg alt=\"plantain-00\" src=\"https://avatars0.githubusercontent.com/u/7639395?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/plantain-00) |\n| :-------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: |\n|                                             [gbilodeau](https://github.com/gbilodeau)                                             |                                             [NagRock](https://github.com/NagRock)                                              |                                             [Hotell](https://github.com/Hotell)                                              |                                             [Martin-Wegner](https://github.com/Martin-Wegner)                                              |                                             [comfroels](https://github.com/comfroels)                                              |                                             [plantain-00](https://github.com/plantain-00)                                              |\n\n| [\u003cimg alt=\"nexus-uw\" src=\"https://avatars2.githubusercontent.com/u/3188890?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/nexus-uw) | [\u003cimg alt=\"alexkpek\" src=\"https://avatars0.githubusercontent.com/u/8692873?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alexkpek) | [\u003cimg alt=\"loktionov129\" src=\"https://avatars1.githubusercontent.com/u/20480552?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/loktionov129) | [\u003cimg alt=\"alisd23\" src=\"https://avatars2.githubusercontent.com/u/5804010?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/alisd23) | [\u003cimg alt=\"aboyton\" src=\"https://avatars0.githubusercontent.com/u/7865563?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/aboyton) | [\u003cimg alt=\"bmvantunes\" src=\"https://avatars1.githubusercontent.com/u/9042965?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/bmvantunes) |\n| :------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: |\n|                                             [nexus-uw](https://github.com/nexus-uw)                                              |                                             [alexkpek](https://github.com/alexkpek)                                              |                                              [loktionov129](https://github.com/loktionov129)                                              |                                             [alisd23](https://github.com/alisd23)                                              |                                             [aboyton](https://github.com/aboyton)                                              |                                             [bmvantunes](https://github.com/bmvantunes)                                              |\n\n| [\u003cimg alt=\"Moeriki\" src=\"https://avatars2.githubusercontent.com/u/38758?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Moeriki) | [\u003cimg alt=\"sneas\" src=\"https://avatars2.githubusercontent.com/u/144651?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/sneas) | [\u003cimg alt=\"EmmanuelDemey\" src=\"https://avatars2.githubusercontent.com/u/555768?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/EmmanuelDemey) | [\u003cimg alt=\"eromano\" src=\"https://avatars1.githubusercontent.com/u/1030050?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/eromano) | [\u003cimg alt=\"Manduro\" src=\"https://avatars0.githubusercontent.com/u/2545042?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Manduro) | [\u003cimg alt=\"karol-depka\" src=\"https://avatars1.githubusercontent.com/u/958486?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/karol-depka) |\n| :--------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: |\n|                                            [Moeriki](https://github.com/Moeriki)                                             |                                             [sneas](https://github.com/sneas)                                             |                                             [EmmanuelDemey](https://github.com/EmmanuelDemey)                                             |                                             [eromano](https://github.com/eromano)                                              |                                             [Manduro](https://github.com/Manduro)                                              |                                             [karol-depka](https://github.com/karol-depka)                                             |\n\n| [\u003cimg alt=\"leosvelperez\" src=\"https://avatars3.githubusercontent.com/u/12051310?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/leosvelperez) | [\u003cimg alt=\"muhammadghazali\" src=\"https://avatars3.githubusercontent.com/u/863947?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/muhammadghazali) | [\u003cimg alt=\"PapsOu\" src=\"https://avatars3.githubusercontent.com/u/5792207?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/PapsOu) | [\u003cimg alt=\"rwlogel\" src=\"https://avatars2.githubusercontent.com/u/3373178?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rwlogel) | [\u003cimg alt=\"robzenn92\" src=\"https://avatars0.githubusercontent.com/u/3225625?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/robzenn92) | [\u003cimg alt=\"rtfpessoa\" src=\"https://avatars0.githubusercontent.com/u/902384?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/rtfpessoa) |\n| :---------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |\n|                                              [leosvelperez](https://github.com/leosvelperez)                                              |                                             [muhammadghazali](https://github.com/muhammadghazali)                                             |                                             [PapsOu](https://github.com/PapsOu)                                              |                                             [rwlogel](https://github.com/rwlogel)                                              |                                             [robzenn92](https://github.com/robzenn92)                                              |                                             [rtfpessoa](https://github.com/rtfpessoa)                                             |\n\n| [\u003cimg alt=\"santoshyadav198613\" src=\"https://avatars3.githubusercontent.com/u/11923975?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/santoshyadav198613) | [\u003cimg alt=\"scttcper\" src=\"https://avatars3.githubusercontent.com/u/1400464?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/scttcper) | [\u003cimg alt=\"stschake\" src=\"https://avatars1.githubusercontent.com/u/104132?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/stschake) | [\u003cimg alt=\"tmair\" src=\"https://avatars2.githubusercontent.com/u/1596276?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/tmair) | [\u003cimg alt=\"YogliB\" src=\"https://avatars2.githubusercontent.com/u/10498929?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/YogliB) | [\u003cimg alt=\"cexbrayat\" src=\"https://avatars3.githubusercontent.com/u/411874?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/cexbrayat) |\n| :---------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |\n|                                              [santoshyadav198613](https://github.com/santoshyadav198613)                                              |                                             [scttcper](https://github.com/scttcper)                                              |                                             [stschake](https://github.com/stschake)                                             |                                             [tmair](https://github.com/tmair)                                              |                                              [YogliB](https://github.com/YogliB)                                              |                                             [cexbrayat](https://github.com/cexbrayat)                                             |\n\n| [\u003cimg alt=\"clydin\" src=\"https://avatars2.githubusercontent.com/u/19598772?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/clydin) | [\u003cimg alt=\"reduckted\" src=\"https://avatars0.githubusercontent.com/u/10321525?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/reduckted) | [\u003cimg alt=\"someblue\" src=\"https://avatars1.githubusercontent.com/u/5562124?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/someblue) |\n| :---------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------: |\n|                                              [clydin](https://github.com/clydin)                                              |                                              [reduckted](https://github.com/reduckted)                                              |                                             [someblue](https://github.com/someblue)                                              |\n\n## License\n\nMIT\n","funding_links":[],"categories":["TypeScript","Uncategorized","`👷 Configuring Your Project`","Software Architecture AntiPatterns","Awesome Angular [![Awesome TipeIO](https://img.shields.io/badge/Awesome%20Angular-@TipeIO-6C6AE7.svg)](https://github.com/gdi2290/awesome-angular) [![Awesome devarchy.com](https://img.shields.io/badge/Awesome%20Angular-@devarchy.com-86BDC1.svg)](https://github.com/brillout/awesome-angular-components)","Angular2"],"sub_categories":["Uncategorized","TSLint (⚠️ Deprecated from Angular 11)","Angular \u003ca id=\"angular\"\u003e\u003c/a\u003e"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgechev%2Fcodelyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgechev%2Fcodelyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgechev%2Fcodelyzer/lists"}