UNPKG

@ws-frontend/eslint-plugin-angular

Version:

WS Frontend Angular ESLint Rules

179 lines (177 loc) 11.1 kB
/** * @license * Copyright Trilogy Enterprises, Inc (WS Frontend) - All Rights Reserved. * * This file is part of Rapid Engineering QC project. * Unauthorized copying of this file, via any medium is strictly prohibited - Proprietary and confidential */ module.exports = { configs: { typescript: { extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:@angular-eslint/recommended' ], plugins: ['@ws-frontend/angular', '@angular-eslint', '@typescript-eslint/eslint-plugin'], rules: { // ESLint 'valid-jsdoc': ['error'], // @ws-frontend '@ws-frontend/angular/rule-of-one': ['error', 1], '@ws-frontend/angular/no-console': ['error', {allow: ['warn', 'error']}], '@ws-frontend/angular/file-size': ['error', {max: 400, skipComments: true, skipBlankLines: true} ], '@ws-frontend/angular/small-functions': ['error', {max: 75, skipComments: true, skipBlankLines: true} ], // @angular-eslint '@angular-eslint/component-selector': ['error', {type: ['element', 'attribute'], prefix: [''], style: 'kebab-case'} ], '@angular-eslint/directive-selector': ['error', {type: ['element', 'attribute'], prefix: [''], style: 'camelCase'} ], '@angular-eslint/component-class-suffix': ['error'], '@angular-eslint/directive-class-suffix': ['error'], '@angular-eslint/component-max-inline-declarations': ['error'], '@angular-eslint/contextual-decorator': ['error'], '@angular-eslint/contextual-lifecycle': ['error'], '@angular-eslint/no-attribute-decorator': ['error'], '@angular-eslint/pipe-prefix': ['error'], '@angular-eslint/no-output-on-prefix': ['error'], '@angular-eslint/no-outputs-metadata-property': ['error'], '@angular-eslint/no-output-rename': ['error'], '@angular-eslint/no-input-rename': ['error'], '@angular-eslint/no-input-prefix': ['error'], '@angular-eslint/no-inputs-metadata-property': ['error'], '@angular-eslint/no-host-metadata-property': ['error'], '@angular-eslint/no-lifecycle-call': ['error'], '@angular-eslint/no-conflicting-lifecycle': ['error'], '@angular-eslint/no-output-native': ['error'], '@angular-eslint/no-forward-ref': ['error'], '@angular-eslint/no-pipe-impure': ['error'], '@angular-eslint/no-queries-metadata-property': ['error'], '@angular-eslint/no-empty-lifecycle-method': ['error'], '@angular-eslint/use-component-selector': ['error'], '@angular-eslint/sort-ngmodule-metadata-arrays': ['error'], '@angular-eslint/relative-url-prefix': ['error'], '@angular-eslint/use-component-view-encapsulation': ['error'], '@angular-eslint/use-injectable-provided-in': ['error'], '@angular-eslint/use-lifecycle-interface': ['error'], '@angular-eslint/use-pipe-transform-interface': ['error'], '@angular-eslint/prefer-output-readonly': ['error'], '@angular-eslint/prefer-on-push-component-change-detection': ['error'], // typescript-eslint '@typescript-eslint/no-explicit-any': ['error'], '@typescript-eslint/explicit-module-boundary-types': ['error'], '@typescript-eslint/adjacent-overload-signatures': ['error'], '@typescript-eslint/array-type': ['error'], '@typescript-eslint/await-thenable': ['error'], '@typescript-eslint/ban-ts-comment': ['error'], '@typescript-eslint/ban-types': ['error'], '@typescript-eslint/class-literal-property-style': ['error'], '@typescript-eslint/consistent-indexed-object-style': ['error'], '@typescript-eslint/consistent-type-assertions': ['error'], "@typescript-eslint/consistent-type-definitions": ["error", "type"], "@typescript-eslint/consistent-type-exports": ["error"], "@typescript-eslint/consistent-type-imports": ["error"], "@typescript-eslint/explicit-function-return-type": ["error"], "@typescript-eslint/explicit-member-accessibility": ["error"], "@typescript-eslint/member-delimiter-style": ["error"], "@typescript-eslint/member-ordering": ["error"], "@typescript-eslint/method-signature-style": ["error"], "@typescript-eslint/no-base-to-string": ["error"], "@typescript-eslint/no-confusing-non-null-assertion": ["error"], "@typescript-eslint/no-confusing-void-expression": ["error"], "@typescript-eslint/no-extra-non-null-assertion": ["error"], "@typescript-eslint/no-dynamic-delete": ["error"], "@typescript-eslint/no-extraneous-class": ["error"], "@typescript-eslint/no-floating-promises": ["error"], "@typescript-eslint/no-for-in-array": ["error"], "@typescript-eslint/no-inferrable-types": ["error"], "@typescript-eslint/no-invalid-void-type": ["error"], "@typescript-eslint/no-meaningless-void-operator": ["error"], "@typescript-eslint/no-misused-new": ["error"], "@typescript-eslint/no-misused-promises": ["error"], "@typescript-eslint/no-namespace": ["error"], "@typescript-eslint/no-non-null-asserted-optional-chain": ["error"], "@typescript-eslint/no-non-null-asserted-nullish-coalescing": ["error"], "@typescript-eslint/no-non-null-assertion": ["error"], "@typescript-eslint/no-require-imports": ["error"], "@typescript-eslint/no-this-alias": ["error"], "@typescript-eslint/no-unnecessary-boolean-literal-compare": ["error"], "@typescript-eslint/no-unnecessary-condition": ["error"], "@typescript-eslint/no-unnecessary-qualifier": ["error"], "@typescript-eslint/no-unnecessary-type-arguments": ["error"], "@typescript-eslint/no-unnecessary-type-assertion": ["error"], "@typescript-eslint/no-unnecessary-type-constraint": ["error"], "@typescript-eslint/no-unsafe-argument": ["error"], "@typescript-eslint/no-unsafe-assignment": ["error"], "@typescript-eslint/no-unsafe-call": ["error"], "@typescript-eslint/no-unsafe-member-access": ["error"], "@typescript-eslint/no-unsafe-return": ["error"], "@typescript-eslint/no-var-requires": ["error"], "@typescript-eslint/non-nullable-type-assertion-style": ["error"], "@typescript-eslint/prefer-as-const": ["error"], "@typescript-eslint/prefer-enum-initializers": ["error"], "@typescript-eslint/prefer-for-of": ["error"], "@typescript-eslint/prefer-includes": ["error"], "@typescript-eslint/prefer-nullish-coalescing": ["error"], "@typescript-eslint/prefer-optional-chain": ["error"], "@typescript-eslint/prefer-readonly": ["error"], "@typescript-eslint/prefer-reduce-type-parameter": ["error"], "@typescript-eslint/prefer-string-starts-ends-with": ["error"], "@typescript-eslint/promise-function-async": ["error"], "@typescript-eslint/restrict-plus-operands": ["error"], "@typescript-eslint/restrict-template-expressions": ["error"], "@typescript-eslint/sort-type-union-intersection-members": ["error"], "@typescript-eslint/strict-boolean-expressions": ["error"], "@typescript-eslint/switch-exhaustiveness-check": ["error"], "@typescript-eslint/triple-slash-reference": ["error"], "@typescript-eslint/type-annotation-spacing": ["error"], "@typescript-eslint/unbound-method": ["error"], "@typescript-eslint/unified-signatures": ["error"], "@typescript-eslint/no-empty-interface": ["error", {"allowSingleExtends": false} ], // Note: we must disable the base rule as it can report incorrect errors 'no-unused-vars': "off", '@typescript-eslint/no-unused-vars': ['error'] } }, template: { extends: ['plugin:@angular-eslint/template/recommended'], plugins: ['@ws-frontend/angular', '@angular-eslint'], rules: { '@angular-eslint/template/no-negated-async': ['error'], '@angular-eslint/template/accessibility-alt-text': ['error'], '@angular-eslint/template/accessibility-elements-content': ['error'], '@angular-eslint/template/accessibility-table-scope': ['error'], '@angular-eslint/template/accessibility-valid-aria': ['error'], '@angular-eslint/template/banana-in-box': ['error'], '@angular-eslint/template/accessibility-label-has-associated-control': ['error'], '@angular-eslint/template/click-events-have-key-events': ['error'], '@angular-eslint/template/mouse-events-have-key-events': ['error'], '@angular-eslint/template/eqeqeq': ['error'], '@angular-eslint/template/no-any': ['error'], '@angular-eslint/template/no-autofocus': ['error'], '@angular-eslint/template/no-call-expression': ['error'], '@angular-eslint/template/no-distracting-elements': ['error'], '@angular-eslint/template/no-duplicate-attributes': ['error'], '@angular-eslint/template/no-positive-tabindex': ['error'], '@angular-eslint/template/cyclomatic-complexity': ['error'], '@angular-eslint/template/use-track-by-function': ['error'], '@angular-eslint/template/conditional-complexity': ['error', { maxComplexity: 0 }], }, }, }, rules: { 'rule-of-one': require('./rules/single-responsibility-rule-of-one'), 'file-size': require('./rules/single-responsibility-file-size'), 'small-functions': require('./rules/single-responsibility-small-functions'), 'no-console': require('./rules/no-console-rule') } }