/**
 * @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

module.exports = {
  "extends": ["eslint:recommended", "google"],
  "parserOptions": {
    "ecmaVersion": 9,
    "sourceType": "module"
  },
  "env": {
    "browser": true,
    "es6": true
  },
  "rules": {
    "no-confusing-arrow": "error",
    "newline-per-chained-call": ["error", {"ignoreChainWithDepth": 2}],
    "arrow-body-style": ["error", "as-needed",
      {"requireReturnForObjectLiteral": true}],
    "arrow-parens": ["error", "as-needed"],
    "block-spacing": ["error", "always"],
    "brace-style": ["error", "1tbs", {"allowSingleLine": true}],
    "camelcase": "off",
    "comma-dangle": ["error", {
      "arrays": "always-multiline",
      "objects": "always-multiline",
      "imports": "always-multiline",
      "exports": "always-multiline",
      "functions": "never"
    }],
    "eol-last": "off",
    "indent": ["error", 2, {
      "MemberExpression": 2,
      "FunctionDeclaration": {"body": 1, "parameters": 2},
      "FunctionExpression": {"body": 1, "parameters": 2},
      "CallExpression": {"arguments": 2},
      "ArrayExpression": 1,
      "ObjectExpression": 1,
      "SwitchCase": 1
    }],
    "keyword-spacing": ["error", {"after": true, "before": true}],
    "lines-between-class-members": ["error", "always"],
    "max-len": [
      "error",
      80,
      2,
      {
        "ignoreComments": true,
        "ignorePattern": "^import .*;$"
      }
    ],
    "new-cap": ["error", {
      "capIsNewExceptions": ["Polymer", "LegacyElementMixin",
        "GestureEventListeners", "LegacyDataMixin"]
    }],
    "no-console": "off",
    "no-multiple-empty-lines": ["error", {"max": 1}],
    "no-prototype-builtins": "off",
    "no-redeclare": "off",
    "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.
    "no-undef": ["error"],
    "no-useless-escape": "off",
    "no-var": "error",
    "operator-linebreak": "off",
    "object-shorthand": ["error", "always"],
    "padding-line-between-statements": [
      "error",
      {
        "blankLine": "always",
        "prev": "class",
        "next": "*"
      },
      {
        "blankLine": "always",
        "prev": "*",
        "next": "class"
      }
    ],
    "prefer-arrow-callback": "error",
    "prefer-const": "error",
    "prefer-promise-reject-errors": "error",
    "prefer-spread": "error",
    "quote-props": ["error", "consistent-as-needed"],
    "semi": [2, "always"],
    "template-curly-spacing": "error",

    "require-jsdoc": 0,
    "valid-jsdoc": 0,
    "jsdoc/check-alignment": 2,
    "jsdoc/check-examples": 0,
    "jsdoc/check-indentation": 0,
    "jsdoc/check-param-names": 0,
    "jsdoc/check-syntax": 0,
    "jsdoc/check-tag-names": 0,
    "jsdoc/check-types": 0,
    "jsdoc/implements-on-classes": 2,
    "jsdoc/match-description": 0,
    "jsdoc/newline-after-description": 2,
    "jsdoc/no-types": 0,
    "jsdoc/no-undefined-types": 0,
    "jsdoc/require-description": 0,
    "jsdoc/require-description-complete-sentence": 0,
    "jsdoc/require-example": 0,
    "jsdoc/require-hyphen-before-param-description": 0,
    "jsdoc/require-jsdoc": 0,
    "jsdoc/require-param": 0,
    "jsdoc/require-param-description": 0,
    "jsdoc/require-param-name": 2,
    "jsdoc/require-param-type": 2,
    "jsdoc/require-returns": 0,
    "jsdoc/require-returns-check": 0,
    "jsdoc/require-returns-description": 0,
    "jsdoc/require-returns-type": 2,
    "jsdoc/valid-types": 2,
    "jsdoc/require-file-overview": ["error", {
      "tags": {
        "license": {
          "mustExist": true,
          "preventDuplicates": true
        }
      }
    }],
    "import/named": 2,
    "import/no-unresolved": 2,
    "import/no-self-import": 2,
    // The no-cycle rule is slow, because it doesn't cache dependencies.
    // Disable it.
    "import/no-cycle": 0,
    "import/no-useless-path-segments": 2,
    "import/no-unused-modules": 2,
    "import/no-default-export": 2,
  },

  // 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
    "GrReporting": "readonly",
    // 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
    "Polymer": "readonly",
    "ShadyCSS": "readonly",
    "linkify": "readonly",
    "security": "readonly",
  },
  "overrides": [
    {
      "files": ["*.html", "test.js", "test-infra.js"],
      "rules": {
        "jsdoc/require-file-overview": "off"
      },
    },
    {
      "files": ["*.html", "common-test-setup.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",
        "a11ySuite": "readonly",
        "assert": "readonly",
        "expect": "readonly",
        "fixture": "readonly",
        "flush": "readonly",
        "flushAsynchronousOperations": "readonly",
        "setup": "readonly",
        "sinon": "readonly",
        "stub": "readonly",
        "suite": "readonly",
        "suiteSetup": "readonly",
        "teardown": "readonly",
        "test": "readonly",
      }
    },
    {
      "files": "import-href.js",
      "globals": {
        "HTMLImports": "readonly",
      }
    },
    {
      "files": ["samples/**/*.js", "**/test/plugin.html"],
      "globals": {
        // Settings for samples. You can add globals here if you want to use it
        "Gerrit": "readonly",
      }
    },
    {
      "files": ["test/functional/**/*.js", "wct.conf.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": "test/index.html",
      "globals": {
        "WCT": "readonly",
      }
    },
    {
      "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"
  },
};
