A set of tslint rules for static code analysis of Angular 2 TypeScript projects.
npm install --save-dev codelyzer
Then hop to your tslint.json
and add rulesDirectory which points to codelyzer, like this:
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules":{
}
}
Now you can apply codelyzer rules to your tslint config. Enjoy!
Below you can find a recommended configuration which is based on the Angular 2 Style Guide.
{
"directive-selector-name": [true, "camelCase"],
"component-selector-name": [true, "kebab-case"],
"directive-selector-type": [true, "attribute"],
"component-selector-type": [true, "element"],
"directive-selector-prefix": [true, "sg"],
"component-selector-prefix": [true, "sg"],
"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-forward-ref" :true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"pipe-naming": [true, "camelCase", "sg"],
"component-class-suffix": true,
"directive-class-suffix": true
}
- Directive selector type.
- Directive selector name convention.
- Directive selector name prefix.
- Component selector type.
- Component selector name convention.
- Component selector name prefix.
- Use
@Input
instead ofinputs
decorator property. - Use
@Output
instead ofoutputs
decorator property. - Use
@HostListeners
and@HostBindings
instead ofhost
decorator property. - Implement life-cycle hooks explicitly.
- Implement Pipe transform interface for pipes.
- Proper naming for pipes (kebab-case, optionally prefixed).
- Do not rename outputs.
- Do not rename inputs.
- Do not use
forwardRef
. - Do not use the
@Attribute
decorator. - Proper naming of directives and components (name plus
(Directive|Component)
suffix). - Do not use
nativeElement
injected withElementRef
. - Externalize template above n lines of code.
- Rise a warning for impure pipes.
- Do not declare global providers.
- Follow convention for naming the routes.
- Use
@Injectable
instead of@Inject
. - Single export per module, except facade modules.
- Proper naming of modules (kebab-case followed by module type followed by extension for regular modules, module name plus extension name for facades).
- Verify if used directive is declared in the current component or any parent component.
- Verify that property or method used in the template exists in the current context.
- Locate component templates in the same directory.
- Locate tests in the same directory (rise optional warning when no test file is found).
- Rise warning on complex logic inside of the templates.
- Do not manipulate elements referenced within the template.
MIT