
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

# Note:
# If eslint does not work in VSCode, please check:
# (1) Whether "@typescript-eslint/eslint-plugin" and "@typescript-eslint/parser"
# are npm installed locally. Should better in the same version.
# (2) Whether "VSCode ESlint extension" is installed.
# (3) If the project folder is not the root folder of your working space, please
# config the "VSCode ESlint extension" in "settings":
# ```json
# "eslint.workingDirectories": [{"mode": "auto"}]
# ```
# Note that it should be "workingDirectories" rather than "WorkingDirectories".

root: true
rules:
    # Check the rules in: node_modules/@typescript-eslint/eslint-plugin/README.md
    no-console:
        - 2
        -
            allow:
                - "warn"
                - "error"
    prefer-const: 1
    no-constant-condition: 0
    comma-dangle: 2
    no-debugger: 2
    no-dupe-keys: 2
    no-empty-character-class: 2
    no-ex-assign: 2
    no-extra-boolean-cast: 0
    no-func-assign: 2
    no-inner-declarations: 2
    no-invalid-regexp: 2
    no-negated-in-lhs: 2
    no-obj-calls: 2
    no-sparse-arrays: 2
    no-unreachable: 2
    use-isnan: 2
    valid-typeof: 2
    block-scoped-var: 2
    curly:
        - 2
        - "all"
    eqeqeq:
        - 2
        - "allow-null"
    guard-for-in: 2
    no-else-return: 0
    no-labels:
        - 2
        -
            allowLoop: true
    no-eval: 2
    no-extend-native: 2
    no-extra-bind: 0
    no-implied-eval: 2
    no-iterator: 2
    no-irregular-whitespace: 2
    no-lone-blocks: 2
    no-loop-func: 2
    no-multi-str: 2
    no-native-reassign: 2
    no-new-wrappers: 2
    no-octal: 2
    no-octal-escape: 2
    no-proto: 2
    no-self-compare: 2
    no-unneeded-ternary: 2
    no-with: 2
    radix: 2
    wrap-iife:
        - 2
        - "any"
    no-delete-var: 2
    no-dupe-args: 2
    no-duplicate-case: 2
    no-label-var: 2
    no-shadow-restricted-names: 2
    no-undef: 2
    no-undef-init: 2
    "no-use-before-define": "off"
    "@typescript-eslint/no-use-before-define": 0
    brace-style:
        - 2
        - "stroustrup"
        - {}
    comma-spacing:
        - 2
        -
            before: false
            after: true
    comma-style:
        - 2
        - "last"
    new-parens: 2
    no-array-constructor: 2
    no-multi-spaces:
        - 1
        -
            ignoreEOLComments: true
            exceptions:
                Property: true
    no-new-object: 2
    no-trailing-spaces: 2
    no-extra-parens:
        - 2
        - "functions"
    no-mixed-spaces-and-tabs: 2
    one-var:
        - 2
        - "never"
    operator-linebreak:
        - 2
        - "before"
        -
            overrides:
                "=": "after"
    "quotes": "off"
    "@typescript-eslint/quotes":
        - 2
        - "single"
    "semi": "off"
    "@typescript-eslint/semi":
        - 2
        - "always"
    semi-spacing: 2
    keyword-spacing: 2
    key-spacing:
        - 2
        -
            beforeColon: false
            afterColon: true
    "space-before-function-paren": "off"
    "@typescript-eslint/space-before-function-paren":
        - 2
        -
            anonymous: "always"
            named: "never"
    space-before-blocks:
        - 2
        - "always"
    computed-property-spacing:
        - 2
        - "never"
    space-in-parens:
        - 2
        - "never"
    space-unary-ops: 2
    spaced-comment: 0

    max-nested-callbacks:
        - 1
        - 5
    max-depth:
        - 1
        - 6
    max-len:
        - 2
        - 120
        - 4
        -
            ignoreUrls: true
            ignoreComments: true
    max-params:
        - 1
        - 15

    space-infix-ops: 2
    dot-notation:
        - 2
        -
            allowKeywords: true
            allowPattern: "^catch$"

    arrow-spacing: 2
    constructor-super: 2
    no-confusing-arrow:
        - 2
        -
            allowParens: true
    no-class-assign: 2
    no-const-assign: 2
    # no-dupe-class-members: 2
    no-this-before-super: 0
    no-var: 2
    no-duplicate-imports: 2
    prefer-rest-params: 0
    unicode-bom: 2
    max-statements-per-line: 2

    no-useless-constructor: 0

    "func-call-spacing": "off"
    "@typescript-eslint/func-call-spacing": "error"

    "no-unused-vars": "off"
    "@typescript-eslint/no-unused-vars":
        - 1
        -
            vars: "local"
            args: "none"
    # Avoid dangerous usage of globals.
    "no-restricted-globals":
        - 2
        - "event"
        - "name"
        - "length"
        - "orientation"
        - "top"
        - "parent"
        - "location"
        - "closed"