399 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			399 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright (C) 2020 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  * http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| // Do not add any bazel-specific properties in this file to keep it clean.
 | |
| // Please add such properties to the .eslintrc-bazel.js file
 | |
| const path = require('path');
 | |
| 
 | |
| module.exports = {
 | |
|   "extends": ["eslint:recommended", "google"],
 | |
|   "parserOptions": {
 | |
|     "ecmaVersion": 9,
 | |
|     "sourceType": "module"
 | |
|   },
 | |
|   "env": {
 | |
|     "browser": true,
 | |
|     "es6": true
 | |
|   },
 | |
|   "rules": {
 | |
|     // https://eslint.org/docs/rules/no-confusing-arrow
 | |
|     "no-confusing-arrow": "error",
 | |
|     // https://eslint.org/docs/rules/newline-per-chained-call
 | |
|     "newline-per-chained-call": ["error", {"ignoreChainWithDepth": 2}],
 | |
|     // https://eslint.org/docs/rules/arrow-body-style
 | |
|     "arrow-body-style": ["error", "as-needed",
 | |
|       {"requireReturnForObjectLiteral": true}],
 | |
|     // https://eslint.org/docs/rules/arrow-parens
 | |
|     "arrow-parens": ["error", "as-needed"],
 | |
|     // https://eslint.org/docs/rules/block-spacing
 | |
|     "block-spacing": ["error", "always"],
 | |
|     // https://eslint.org/docs/rules/brace-style
 | |
|     "brace-style": ["error", "1tbs", {"allowSingleLine": true}],
 | |
|     // https://eslint.org/docs/rules/camelcase
 | |
|     "camelcase": "off",
 | |
|     // https://eslint.org/docs/rules/comma-dangle
 | |
|     "comma-dangle": ["error", {
 | |
|       "arrays": "always-multiline",
 | |
|       "objects": "always-multiline",
 | |
|       "imports": "always-multiline",
 | |
|       "exports": "always-multiline",
 | |
|       "functions": "never"
 | |
|     }],
 | |
|     // https://eslint.org/docs/rules/eol-last
 | |
|     "eol-last": "off",
 | |
|     // https://eslint.org/docs/rules/indent
 | |
|     "indent": ["error", 2, {
 | |
|       "MemberExpression": 2,
 | |
|       "FunctionDeclaration": {"body": 1, "parameters": 2},
 | |
|       "FunctionExpression": {"body": 1, "parameters": 2},
 | |
|       "CallExpression": {"arguments": 2},
 | |
|       "ArrayExpression": 1,
 | |
|       "ObjectExpression": 1,
 | |
|       "SwitchCase": 1
 | |
|     }],
 | |
|     // https://eslint.org/docs/rules/keyword-spacing
 | |
|     "keyword-spacing": ["error", {"after": true, "before": true}],
 | |
|     // https://eslint.org/docs/rules/lines-between-class-members
 | |
|     "lines-between-class-members": ["error", "always"],
 | |
|     // https://eslint.org/docs/rules/max-len
 | |
|     "max-len": [
 | |
|       "error",
 | |
|       80,
 | |
|       2,
 | |
|       {
 | |
|         "ignoreComments": true,
 | |
|         "ignorePattern": "^import .*;$"
 | |
|       }
 | |
|     ],
 | |
|     // https://eslint.org/docs/rules/new-cap
 | |
|     "new-cap": ["error", {
 | |
|       "capIsNewExceptions": ["Polymer", "GestureEventListeners"],
 | |
|       "capIsNewExceptionPattern": "^.*Mixin$"
 | |
|     }],
 | |
|     // https://eslint.org/docs/rules/no-console
 | |
|     "no-console": ["error", { allow: ["warn", "error", "info", "assert", "group", "groupEnd"] }],
 | |
|     // https://eslint.org/docs/rules/no-multiple-empty-lines
 | |
|     "no-multiple-empty-lines": ["error", {"max": 1}],
 | |
|     // https://eslint.org/docs/rules/no-prototype-builtins
 | |
|     "no-prototype-builtins": "off",
 | |
|     // https://eslint.org/docs/rules/no-redeclare
 | |
|     "no-redeclare": "off",
 | |
|     // https://eslint.org/docs/rules/no-trailing-spaces
 | |
|     "no-trailing-spaces": "error",
 | |
|     // https://eslint.org/docs/rules/no-irregular-whitespace
 | |
|     "no-irregular-whitespace": "error",
 | |
|     // https://eslint.org/docs/rules/array-callback-return
 | |
|     "array-callback-return": ['error', { allowImplicit: true }],
 | |
|     // https://eslint.org/docs/rules/no-restricted-syntax
 | |
|     "no-restricted-syntax": [
 | |
|       "error",
 | |
|       {
 | |
|         "selector": "ExpressionStatement > CallExpression > MemberExpression[object.name='test'][property.name='only']",
 | |
|         "message": "Remove test.only."
 | |
|       },
 | |
|       {
 | |
|         "selector": "ExpressionStatement > CallExpression > MemberExpression[object.name='suite'][property.name='only']",
 | |
|         "message": "Remove suite.only."
 | |
|       }
 | |
|     ],
 | |
|     // no-undef disables global variable.
 | |
|     // "globals" declares allowed global variables.
 | |
|     // https://eslint.org/docs/rules/no-undef
 | |
|     "no-undef": ["error"],
 | |
|     // https://eslint.org/docs/rules/no-useless-escape
 | |
|     "no-useless-escape": "off",
 | |
|     // https://eslint.org/docs/rules/no-var
 | |
|     "no-var": "error",
 | |
|     // https://eslint.org/docs/rules/operator-linebreak
 | |
|     "operator-linebreak": "off",
 | |
|     // https://eslint.org/docs/rules/object-shorthand
 | |
|     "object-shorthand": ["error", "always"],
 | |
|     // https://eslint.org/docs/rules/padding-line-between-statements
 | |
|     "padding-line-between-statements": [
 | |
|       "error",
 | |
|       {
 | |
|         "blankLine": "always",
 | |
|         "prev": "class",
 | |
|         "next": "*"
 | |
|       },
 | |
|       {
 | |
|         "blankLine": "always",
 | |
|         "prev": "*",
 | |
|         "next": "class"
 | |
|       }
 | |
|     ],
 | |
|     // https://eslint.org/docs/rules/prefer-arrow-callback
 | |
|     "prefer-arrow-callback": "error",
 | |
|     // https://eslint.org/docs/rules/prefer-const
 | |
|     "prefer-const": "error",
 | |
|     // https://eslint.org/docs/rules/prefer-promise-reject-errors
 | |
|     "prefer-promise-reject-errors": "error",
 | |
|     // https://eslint.org/docs/rules/prefer-spread
 | |
|     "prefer-spread": "error",
 | |
|     // https://eslint.org/docs/rules/prefer-object-spread
 | |
|     "prefer-object-spread": "error",
 | |
|     // https://eslint.org/docs/rules/quote-props
 | |
|     "quote-props": ["error", "consistent-as-needed"],
 | |
|     // https://eslint.org/docs/rules/semi
 | |
|     "semi": ["error", "always"],
 | |
|     // https://eslint.org/docs/rules/template-curly-spacing
 | |
|     "template-curly-spacing": "error",
 | |
| 
 | |
|     // https://eslint.org/docs/rules/require-jsdoc
 | |
|     "require-jsdoc": 0,
 | |
|     // https://eslint.org/docs/rules/valid-jsdoc
 | |
|     "valid-jsdoc": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-alignment
 | |
|     "jsdoc/check-alignment": 2,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-examples
 | |
|     "jsdoc/check-examples": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-indentation
 | |
|     "jsdoc/check-indentation": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names
 | |
|     "jsdoc/check-param-names": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-syntax
 | |
|     "jsdoc/check-syntax": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-tag-names
 | |
|     "jsdoc/check-tag-names": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types
 | |
|     "jsdoc/check-types": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-implements-on-classes
 | |
|     "jsdoc/implements-on-classes": 2,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description
 | |
|     "jsdoc/match-description": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-newline-after-description
 | |
|     "jsdoc/newline-after-description": 2,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-types
 | |
|     "jsdoc/no-types": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types
 | |
|     "jsdoc/no-undefined-types": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description
 | |
|     "jsdoc/require-description": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence
 | |
|     "jsdoc/require-description-complete-sentence": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-example
 | |
|     "jsdoc/require-example": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-hyphen-before-param-description
 | |
|     "jsdoc/require-hyphen-before-param-description": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-jsdoc
 | |
|     "jsdoc/require-jsdoc": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param
 | |
|     "jsdoc/require-param": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-description
 | |
|     "jsdoc/require-param-description": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-name
 | |
|     "jsdoc/require-param-name": 2,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns
 | |
|     "jsdoc/require-returns": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check
 | |
|     "jsdoc/require-returns-check": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-description
 | |
|     "jsdoc/require-returns-description": 0,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types
 | |
|     "jsdoc/valid-types": 2,
 | |
|     // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-file-overview
 | |
|     "jsdoc/require-file-overview": ["error", {
 | |
|       "tags": {
 | |
|         "license": {
 | |
|           "mustExist": true,
 | |
|           "preventDuplicates": true
 | |
|         }
 | |
|       }
 | |
|     }],
 | |
|     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-self-import.md
 | |
|     "import/no-self-import": 2,
 | |
|     // The no-cycle rule is slow, because it doesn't cache dependencies.
 | |
|     // Disable it.
 | |
|     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-cycle.md
 | |
|     "import/no-cycle": 0,
 | |
|     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-useless-path-segments.md
 | |
|     "import/no-useless-path-segments": 2,
 | |
|     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unused-modules.md
 | |
|     "import/no-unused-modules": 2,
 | |
|     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-default-export.md
 | |
|     "import/no-default-export": 2,
 | |
|     // Custom rule from the //tools/js/eslint-rules directory.
 | |
|     // See //tools/js/eslint-rules/README.md for details
 | |
|     "goog-module-id": 2,
 | |
|     // Prevents certain identifiers being used.
 | |
|     // Prefer flush() over flushAsynchronousOperations().
 | |
|     "id-blacklist": ["error", "flushAsynchronousOperations"],
 | |
|   },
 | |
| 
 | |
|   // List of allowed globals in all files
 | |
|   "globals": {
 | |
|     // Polygerrit global variables.
 | |
|     // You must not add anything new in this list!
 | |
|     // Instead export variables from modules
 | |
|     // TODO(dmfilippov): Remove global variables from polygerrit
 | |
|     // Global variables from 3rd party libraries.
 | |
|     // You should not add anything in this list, always try to import
 | |
|     // If import is not possible - you can extend this list
 | |
|     "ShadyCSS": "readonly",
 | |
|     "linkify": "readonly",
 | |
|     "security": "readonly",
 | |
|   },
 | |
|   "overrides": [
 | |
|     {
 | |
|       // .js-only rules
 | |
|       "files": ["**/*.js"],
 | |
|       "rules": {
 | |
|         // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-param-type
 | |
|         "jsdoc/require-param-type": 2,
 | |
|         // https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-type
 | |
|         "jsdoc/require-returns-type": 2,
 | |
|         // The rule is required for .js files only, because typescript compiler
 | |
|         // always checks import.
 | |
|         "import/no-unresolved": 2,
 | |
|         "import/named": 2,
 | |
|       },
 | |
|       "globals": {
 | |
|         "goog": "readonly",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["**/*.ts"],
 | |
|       "extends": [require.resolve("gts/.eslintrc.json")],
 | |
|       "rules": {
 | |
|         "no-restricted-imports": ["error", {
 | |
|           name: "@polymer/decorators/lib/decorators",
 | |
|           message: "Use @polymer/decorators instead",
 | |
|         }],
 | |
|         // The following rules is required to match internal google rules
 | |
|         "@typescript-eslint/restrict-plus-operands": "error",
 | |
|         // https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/node-builtins.md
 | |
|         "node/no-unsupported-features/node-builtins": "off",
 | |
|         "jsdoc/no-types": 2,
 | |
|       },
 | |
|       "parserOptions": {
 | |
|         "project": path.resolve(__dirname, "./tsconfig_eslint.json"),
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["**/*.ts"],
 | |
|       "excludedFiles": "*.d.ts",
 | |
|       "rules": {
 | |
|         // Custom rule from the //tools/js/eslint-rules directory.
 | |
|         // See //tools/js/eslint-rules/README.md for details
 | |
|         "ts-imports-js": 2,
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["**/*.d.ts"],
 | |
|       "rules": {
 | |
|         // See details in the //tools/js/eslint-rules/report-ts-error.js file.
 | |
|         "report-ts-error": "error",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["*.html", "test.js", "test-infra.js"],
 | |
|       "rules": {
 | |
|         "jsdoc/require-file-overview": "off"
 | |
|       },
 | |
|     },
 | |
|     {
 | |
|       "files": [
 | |
|         "*.html",
 | |
|         "common-test-setup.js",
 | |
|         "common-test-setup-karma.js",
 | |
|         "*_test.js",
 | |
|         "a11y-test-utils.js",
 | |
|       ],
 | |
|       // Additional global variables allowed in tests
 | |
|       "globals": {
 | |
|         // Global variables from 3rd party test libraries/frameworks.
 | |
|         // You can extend this list if you want to use other global
 | |
|         // variables from these libraries and import is not possible
 | |
|         "MockInteractions": "readonly",
 | |
|         "_": "readonly",
 | |
|         "axs": "readonly",
 | |
|         "a11ySuite": "readonly",
 | |
|         "assert": "readonly",
 | |
|         "expect": "readonly",
 | |
|         "fixture": "readonly",
 | |
|         "flush": "readonly",
 | |
|         "flushAsynchronousOperations": "readonly",
 | |
|         "setup": "readonly",
 | |
|         "sinon": "readonly",
 | |
|         "stub": "readonly",
 | |
|         "suite": "readonly",
 | |
|         "suiteSetup": "readonly",
 | |
|         "suiteTeardown": "readonly",
 | |
|         "teardown": "readonly",
 | |
|         "test": "readonly",
 | |
|         "fixtureFromElement": "readonly",
 | |
|         "fixtureFromTemplate": "readonly",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": "import-href.js",
 | |
|       "globals": {
 | |
|         "HTMLImports": "readonly",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["samples/**/*.js"],
 | |
|       "globals": {
 | |
|         // Settings for samples. You can add globals here if you want to use it
 | |
|         "Gerrit": "readonly",
 | |
|         "Polymer": "readonly",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["test/functional/**/*.js"],
 | |
|       // Settings for functional tests. These scripts are node scripts.
 | |
|       // Turn off "no-undef" to allow any global variable
 | |
|       "env": {
 | |
|         "browser": false,
 | |
|         "node": true,
 | |
|         "es6": false
 | |
|       },
 | |
|       "rules": {
 | |
|         "no-undef": "off",
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["*_html.js", "gr-icons.js", "*-theme.js", "*-styles.js"],
 | |
|       "rules": {
 | |
|         "max-len": "off"
 | |
|       }
 | |
|     },
 | |
|     {
 | |
|       "files": ["*_html.js"],
 | |
|       "rules": {
 | |
|         "prettier/prettier": ["error", {
 | |
|           "bracketSpacing": false,
 | |
|           "singleQuote": true,
 | |
|         }]
 | |
|       }
 | |
|     }
 | |
|   ],
 | |
|   "plugins": [
 | |
|     "html",
 | |
|     "jsdoc",
 | |
|     "import",
 | |
|     "prettier"
 | |
|   ],
 | |
|   "settings": {
 | |
|     "html/report-bad-indent": "error",
 | |
|     "import/resolver": {
 | |
|       "node": {},
 | |
|       [path.resolve(__dirname, './.eslint-ts-resolver.js')]: {},
 | |
|     },
 | |
|   },
 | |
| };
 | 
