From 4d6e333d8d200176cae4040ccd81e9577a6540f3 Mon Sep 17 00:00:00 2001 From: Oscar Hinton Date: Tue, 31 Jan 2023 18:39:10 +0100 Subject: [PATCH] [SM-468] Add eslint rule for forcing type to buttons (#4576) * Add eslint rule for forcing type to buttons * Fix eslint js errors --- .eslintrc.json | 192 +-- .../popup/vault/vault-select.component.html | 2 + .../src/popup/vault/view.component.html | 2 + .../layout/account-switcher.component.html | 2 + apps/desktop/src/app/send/send.component.html | 2 + .../filters/collection-filter.component.html | 2 + .../filters/folder-filter.component.html | 2 + .../organization-filter.component.html | 2 + .../filters/status-filter.component.html | 2 + .../filters/type-filter.component.html | 2 + .../src/app/vault/vault-items.component.html | 2 + .../desktop/src/app/vault/view.component.html | 2 + .../trial-initiation.component.html | 2 + .../vertical-step-content.component.html | 2 + .../user-verification-prompt.component.html | 2 + .../web/src/app/layouts/navbar.component.html | 2 + .../product-switcher.component.html | 2 + ...zation-billing-history-view.component.html | 2 + .../manage/groups.component.html | 2 + .../members/people.component.html | 2 + .../organizations/vault/vault.component.html | 2 + apps/web/src/app/send/add-edit.component.html | 2 + apps/web/src/app/send/send.component.html | 2 + .../src/app/settings/account.component.html | 2 + .../billing-history-view.component.html | 2 + .../settings/emergency-access.component.html | 2 + .../settings/payment-method.component.html | 2 + .../app/settings/security-keys.component.html | 2 + .../sponsoring-org-row.component.html | 2 + .../settings/two-factor-setup.component.html | 2 + .../password-generator-history.component.html | 2 + .../organization-name-badge.component.html | 2 + .../organization-options.component.html | 2 + .../vault-filter-section.component.html | 2 + .../src/app/vault/vault-items.component.html | 2 + .../web/src/connectors/webauthn-fallback.html | 2 + apps/web/src/connectors/webauthn-mobile.html | 2 + apps/web/src/connectors/webauthn.html | 2 + .../clients/add-organization.component.html | 2 + .../providers/clients/clients.component.html | 2 + .../providers/manage/people.component.html | 2 + .../layout/header.component.html | 2 + .../layout/new-menu.component.html | 2 + .../layout/org-switcher.component.html | 2 + .../project/project-secrets.component.html | 2 + .../projects-list.component.html | 2 + .../dialog/secret-dialog.component.html | 2 + .../access/access-list.component.html | 2 + .../access-token-dialog.component.html | 2 + .../service-accounts-list.component.html | 2 + .../shared/secrets-list.component.html | 2 + .../src/banner/banner.component.html | 2 + .../breadcrumbs/breadcrumbs.component.html | 2 + .../simple-configurable-dialog.component.html | 2 + .../src/navigation/nav-group.component.html | 2 + .../src/navigation/nav-item.component.html | 2 + package-lock.json | 1027 ++++++++++++++++- package.json | 3 + 58 files changed, 1200 insertions(+), 132 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 6bcea9dd04..1bd7b04f21 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,106 +4,118 @@ "browser": true, "webextensions": true }, - "plugins": ["@typescript-eslint", "rxjs", "rxjs-angular", "import"], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": ["./tsconfig.eslint.json"], - "sourceType": "module" - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/recommended", - "plugin:import/typescript", - "prettier", - "plugin:rxjs/recommended" - ], - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts"] - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true - } - } - }, - "rules": { - "@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled - "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], - "@typescript-eslint/explicit-member-accessibility": [ - "error", - { - "accessibility": "no-public" - } - ], - "@typescript-eslint/no-this-alias": [ - "error", - { - "allowedNames": ["self"] - } - ], - "no-console": "error", - "import/no-unresolved": "off", // TODO: Look into turning off once each package is an actual package. - "import/order": [ - "error", - { - "alphabetize": { - "order": "asc" + "overrides": [ + { + "files": ["*.ts", "*.js"], + "plugins": ["@typescript-eslint", "rxjs", "rxjs-angular", "import"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": ["./tsconfig.eslint.json"], + "sourceType": "module", + "ecmaVersion": 2020 + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/typescript", + "prettier", + "plugin:rxjs/recommended" + ], + "settings": { + "import/parsers": { + "@typescript-eslint/parser": [".ts"] }, - "newlines-between": "always", - "pathGroups": [ + "import/resolver": { + "typescript": { + "alwaysTryTypes": true + } + } + }, + "rules": { + "@typescript-eslint/no-explicit-any": "off", // TODO: This should be re-enabled + "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], + "@typescript-eslint/explicit-member-accessibility": [ + "error", { - "pattern": "@bitwarden/**", - "group": "external", - "position": "after" - }, - { - "pattern": "src/**/*", - "group": "parent", - "position": "before" + "accessibility": "no-public" } ], - "pathGroupsExcludedImportTypes": ["builtin"] - } - ], - "rxjs-angular/prefer-takeuntil": "error", - "rxjs/no-exposed-subjects": ["error", { "allowProtected": true }], - "no-restricted-syntax": [ - "error", - { - "message": "Calling `svgIcon` directly is not allowed", - "selector": "CallExpression[callee.name='svgIcon']" - }, - { - "message": "Accessing FormGroup using `get` is not allowed, use `.value` instead", - "selector": "ChainExpression[expression.object.callee.property.name='get'][expression.property.name='value']" - } - ], - "curly": ["error", "all"], - "import/namespace": ["off"], // This doesn't resolve namespace imports correctly, but TS will throw for this anyway - "import/no-restricted-paths": [ - "error", - { - "zones": [ - // Do not allow angular/node code to be imported into common + "@typescript-eslint/no-this-alias": [ + "error", { - "target": "./libs/common/**/*", - "from": "./libs/angular/**/*" + "allowedNames": ["self"] + } + ], + "no-console": "error", + "import/no-unresolved": "off", // TODO: Look into turning off once each package is an actual package. + "import/order": [ + "error", + { + "alphabetize": { + "order": "asc" + }, + "newlines-between": "always", + "pathGroups": [ + { + "pattern": "@bitwarden/**", + "group": "external", + "position": "after" + }, + { + "pattern": "src/**/*", + "group": "parent", + "position": "before" + } + ], + "pathGroupsExcludedImportTypes": ["builtin"] + } + ], + "rxjs-angular/prefer-takeuntil": "error", + "rxjs/no-exposed-subjects": ["error", { "allowProtected": true }], + "no-restricted-syntax": [ + "error", + { + "message": "Calling `svgIcon` directly is not allowed", + "selector": "CallExpression[callee.name='svgIcon']" }, { - "target": "./libs/common/**/*", - "from": "./libs/node/**/*" + "message": "Accessing FormGroup using `get` is not allowed, use `.value` instead", + "selector": "ChainExpression[expression.object.callee.property.name='get'][expression.property.name='value']" } + ], + "curly": ["error", "all"], + "import/namespace": ["off"], // This doesn't resolve namespace imports correctly, but TS will throw for this anyway + "import/no-restricted-paths": [ + "error", + { + "zones": [ + // Do not allow angular/node code to be imported into common + { + "target": "./libs/common/**/*", + "from": "./libs/angular/**/*" + }, + { + "target": "./libs/common/**/*", + "from": "./libs/node/**/*" + } + ] + } + ], + "no-restricted-imports": [ + "error", + { "patterns": ["src/**/*"], "paths": ["@fluffy-spoon/substitute"] } ] } - ], - "no-restricted-imports": [ - "error", - { "patterns": ["src/**/*"], "paths": ["@fluffy-spoon/substitute"] } - ] - }, - "overrides": [ + }, + { + "files": ["*.html"], + "parser": "@angular-eslint/template-parser", + "plugins": ["@angular-eslint/template"], + "rules": { + "@angular-eslint/template/button-has-type": "error" + } + }, { "files": ["libs/common/src/**/*.ts"], "rules": { diff --git a/apps/browser/src/popup/vault/vault-select.component.html b/apps/browser/src/popup/vault/vault-select.component.html index a25f49ebf2..b6da7308ca 100644 --- a/apps/browser/src/popup/vault/vault-select.component.html +++ b/apps/browser/src/popup/vault/vault-select.component.html @@ -1,3 +1,5 @@ + +
diff --git a/apps/browser/src/popup/vault/view.component.html b/apps/browser/src/popup/vault/view.component.html index 151460d0ac..3d5c5450bc 100644 --- a/apps/browser/src/popup/vault/view.component.html +++ b/apps/browser/src/popup/vault/view.component.html @@ -1,3 +1,5 @@ + +
diff --git a/apps/desktop/src/app/layout/account-switcher.component.html b/apps/desktop/src/app/layout/account-switcher.component.html index 991e0dfb71..e5482b938f 100644 --- a/apps/desktop/src/app/layout/account-switcher.component.html +++ b/apps/desktop/src/app/layout/account-switcher.component.html @@ -1,3 +1,5 @@ + + diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/layout/org-switcher.component.html b/bitwarden_license/bit-web/src/app/secrets-manager/layout/org-switcher.component.html index 9b678157ca..1282b48d5a 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/layout/org-switcher.component.html +++ b/bitwarden_license/bit-web/src/app/secrets-manager/layout/org-switcher.component.html @@ -1,3 +1,5 @@ + + +