Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Build StatusBuild statusGitter Chat

codelyzer

A set of tslint rules for static code analysis of Angular TypeScript projects.

You can run the static code analyzer over web apps, NativeScript, Ionic, etc.

How to use?

Angular CLI

Angular CLI has support for codelyzer. In order to validate your code with CLI and the custom Angular specific rules just use:

ng new codelyzer
ng lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Angular Seed

Another project which has out of the box integration with codelyzer is angular-seed. In order to run the linter you should:

# Skip if you've already cloned Angular Seed
git clone https://github.com/mgechev/angular-seed
# Skip if you've already installed all the dependencies of Angular Seedcd angular-seed && npm i
# Run all the tslint and codelyzer rules
npm run lint

Note that by default all components are aligned with the style guide so you won't see any errors in the console.

Custom Setup

You can easily use codelyzer with your custom setup:

Installation

npm i codelyzer@~4.0.0 tslint@^5.0.0 typescript@2.4.0 @angular/core@~5.0.1 @angular/compiler@~5.0.1 rxjs@5.5.0 zone.js@~0.8.4

A. Using codelyzer package in PATH

Create the following tslint.json file like:

{
"extends": ["codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"use-view-encapsulation": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

To run TSLint with this setup you can use one of the following alternatives:

  1. Install codelyzer globally npm install -g codelyzer

  2. Run TSLint from a package.json script by adding a script like tslint . to your package.json, similar to:

"scripts": {
...
"lint": "tslint .",
...
},

Then run npm run lint

B. Using codelyzer from node_modules directory

Now create the following tslint.json file where your node_modules directory is:

{
"rulesDirectory": ["node_modules/codelyzer"],
"rules": {
"angular-whitespace": [true, "check-interpolation", "check-semicolon"],
"banana-in-box": true,
"templates-no-negated-async": true,
"directive-selector": [true, "attribute", "sg", "camelCase"],
"component-selector": [true, "element", "sg", "kebab-case"],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"use-host-property-decorator": true,
"no-attribute-parameter-decorator": true,
"no-input-rename": true,
"no-output-rename": true,
"no-output-on-prefix": true,
"no-forward-ref": true,
"use-view-encapsulation": true,
"use-life-cycle-interface": true,
"contextual-life-cycle": true,
"trackBy-function": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true,
"pipe-impure": true
}
}

Next you can create a component file in the same directory with name component.ts and the following content:

import{Component}from'@angular/core';
@Component({selector: 'codelyzer',template: ` <h1>Hello {{ nme }}!</h1> `})classCodelyzer{name: string='World';ngOnInit(){console.log('Initialized');}}

As last step you can execute all the rules against your code with tslint:

$ ./node_modules/.bin/tslint -c tslint.json component.ts

You should see the following output:

component.ts[4, 13]: The selector of the component "Codelyzer" should have prefix "sg" (https://goo.gl/cix8BY)
component.ts[12, 3]: Implement lifecycle hook interface OnInit for method ngOnInit in class Codelyzer (https://goo.gl/w1Nwk3)
component.ts[9, 7]: The name of the class Codelyzer should end with the suffix Component (https://goo.gl/5X1TE7)
component.ts[6, 18]: The property "nme" that you're trying to access does not exist in the class declaration. Probably you mean: "name".

Editor Configuration

Note that you need to have tslint plugin install on your editor.

Codelyzer should work out of the box with Atom but for VSCode you will have to open Code > Preferences > User Settings, and enter the following config:

{
"tslint.rulesDirectory": "./node_modules/codelyzer",
"typescript.tsdk": "node_modules/typescript/lib"
}

Now you should have the following result:

VSCode Codelyzer

Enjoy!

Changelog

You can find it here.

Recommended configuration

Below you can find a recommended configuration which is based on the Angular Style Guide.

{// The rule have the following arguments:// [ENABLED, "attribute" | "element", "selectorPrefix" | ["listOfPrefixes"], "camelCase" | "kebab-case"]"directive-selector": [true,"attribute",["dir-prefix1","dir-prefix2"],"camelCase"],"component-selector": [true,"element",["cmp-prefix1","cmp-prefix2"],"kebab-case"],"angular-whitespace": [true,"check-interpolation","check-semicolon"],"use-input-property-decorator": true,"use-output-property-decorator": true,"use-host-property-decorator": true,"no-attribute-parameter-decorator": true,"no-input-rename": true,"no-output-on-prefix": true,"no-output-rename": true,"no-forward-ref": true,"use-life-cycle-interface": true,"use-pipe-transform-interface": true,// [ENABLED, "SUFFIX"]// Where "SUFFIX" is your custom suffix, for instance "Page" for Ionic 2 components."component-class-suffix": [true,"Component"],"directive-class-suffix": [true,"Directive"]}

Advanced configuration

Codelyzer 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:

// Demo of transforming Sass stylesvarsass=require('node-sass');module.exports={// Definition of custom interpolation stringsinterpolation: ['{{','}}'],// You can transform the urls of your external styles and templatesresolveUrl(url,decorator){returnurl;},// Transformation of the templates. This hooks is quite useful// if you're using any other templating language, for instance// jade, markdown, haml, etc.//// NOTE that this method WILL NOT throw an error in case of invalid template.//transformTemplate(code,url,decorator){return{code: code,url: url};},// Transformation of styles. This hook is useful is you're using// any other style language, for instance Sass, Less, etc.//// NOTE that this method WILL NOT throw an error in case of invalid style.//transformStyle(code,url,decorator){varresult={code: code,url: url};if(url&&/\.scss$/.test(url)){vartransformed=sass.renderSync({data: code,sourceMap: true,outFile: '/dev/null'});result.source=code;result.code=transformed.css.toString();result.map=transformed.map.toString();}returnresult;},// Custom predefined directives in case you get error for// missing property and you are using a template referencepredefinedDirectives: [{selector: 'form',exportAs: 'ngForm'}],// None = 0b000, Error = 0b001, Info = 0b011, Debug = 0b111logLevel: 0b111};

Contributors

mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
mgechevpreslavshwKozarokerkonyGregOnNeteppsilon
csvnghsyeungKobzollazarljubenovicclydinconnor4312
csvnghsyeungKobzollazarljubenovicclydinconnor4312
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
FoxandxssHotellcomfroelsplantain-00nexus-uwrtfpessoa
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
Gillespie59Mandurokarol-depkaleosvelperezMartin-Wegnereromano
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev
scttcperlacolacotmaircexbrayatreducktedsagittarius-rev

License

MIT

About

Linting of Angular projects.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages