{
  "extends": [
    "plugin:mattermost/react",
    "plugin:cypress/recommended",
    "plugin:jquery/deprecated"
  ],
  "plugins": [
    "babel",
    "mattermost",
    "import",
    "cypress",
    "jquery",
    "no-only-tests"
  ],
  "parser": "@typescript-eslint/parser",
  "env": {
    "jest": true,
    "cypress/globals": true
  },
  "settings": {
    "import/resolver": "webpack",
    "react": {
        "pragma": "React",
        "version": "detect"
    }
  },
  "rules": {
    "no-unused-expressions": 0,
    "babel/no-unused-expressions": [2, {"allowShortCircuit": true}],
    "eol-last": ["error", "always"],
    "import/no-unresolved": 2,
    "import/order": [
      2,
      {
        "newlines-between": "always-and-inside-groups",
        "groups": [
          "builtin",
          "external",
          [
            "internal",
            "parent"
          ],
          "sibling",
          "index"
        ]
      }
    ],
    "no-undefined": 0,
    "react/jsx-filename-extension": 0,
    "react/prop-types": [
      2,
      {
        "ignore": [
          "location",
          "history",
          "component"
        ]
      }
    ],
    "react/no-string-refs": 2,
    "no-only-tests/no-only-tests": ["error", {"focus": ["only", "skip"]}],
    "max-nested-callbacks": ["error", {"max": 5}]
  },
  "overrides": [
    {
      "files": ["**/*.tsx", "**/*.ts"],
      "extends": [
        "plugin:@typescript-eslint/recommended"
      ],
      "rules": {
        "import/no-unresolved": 0, // ts handles this better
		"camelcase": 0,
		"semi": "off",
        "@typescript-eslint/naming-convention": [
          2,
          {
            "selector": "function",
            "format": ["camelCase", "PascalCase"]
          },
          {
            "selector": "variable",
            "format": ["camelCase", "PascalCase", "UPPER_CASE"]
          },
          {
            "selector": "parameter",
            "format": ["camelCase", "PascalCase"],
            "leadingUnderscore": "allow"
          },
          {
            "selector": "typeLike",
            "format": ["PascalCase"]
          }
        ],
        "@typescript-eslint/no-non-null-assertion": 0,
        "@typescript-eslint/no-unused-vars": [
          2,
          {
            "vars": "all",
            "args": "after-used"
          }
        ],
        "@typescript-eslint/no-var-requires": 0,
        "@typescript-eslint/no-empty-function": 0,
        "@typescript-eslint/prefer-interface": 0,
        "@typescript-eslint/explicit-function-return-type": 0,
        "@typescript-eslint/semi": [2, "never"],
		"@typescript-eslint/indent": [
          2,
          4,
          {
            "SwitchCase": 0
          }
        ],
        "no-use-before-define": "off",
        "@typescript-eslint/no-use-before-define": [
          2,
          {
            "classes": false,
            "functions": false,
            "variables": false
          }
        ],
        "no-useless-constructor": 0,
        "@typescript-eslint/no-useless-constructor": 2,
        "react/jsx-filename-extension": 0
      }
    },
    {
      "files": ["tests/**", "**/*.test.*"],
      "env": {
        "jest": true
      },
      "rules": {
        "func-names": 0,
        "global-require": 0,
        "new-cap": 0,
        "prefer-arrow-callback": 0,
        "no-import-assign": 0
      }
    },
    {
      "files": ["e2e/**"],
      "rules": {
        "func-names": 0,
        "import/no-unresolved": 0,
        "max-nested-callbacks": 0,
        "no-process-env": 0,
        "babel/no-unused-expressions": 0,
        "no-unused-expressions": 0,
        "jquery/no-ajax": 0,
        "jquery/no-ajax-events": 0,
        "jquery/no-animate": 0,
        "jquery/no-attr": 0,
        "jquery/no-bind": 0,
        "jquery/no-class": 0,
        "jquery/no-clone": 0,
        "jquery/no-closest": 0,
        "jquery/no-css": 0,
        "jquery/no-data": 0,
        "jquery/no-deferred": 0,
        "jquery/no-delegate": 0,
        "jquery/no-each": 0,
        "jquery/no-extend": 0,
        "jquery/no-fade": 0,
        "jquery/no-filter": 0,
        "jquery/no-find": 0,
        "jquery/no-global-eval": 0,
        "jquery/no-grep": 0,
        "jquery/no-has": 0,
        "jquery/no-hide": 0,
        "jquery/no-html": 0,
        "jquery/no-in-array": 0,
        "jquery/no-is-array": 0,
        "jquery/no-is-function": 0,
        "jquery/no-is": 0,
        "jquery/no-load": 0,
        "jquery/no-map": 0,
        "jquery/no-merge": 0,
        "jquery/no-param": 0,
        "jquery/no-parent": 0,
        "jquery/no-parents": 0,
        "jquery/no-parse-html": 0,
        "jquery/no-prop": 0,
        "jquery/no-proxy": 0,
        "jquery/no-ready": 0,
        "jquery/no-serialize": 0,
        "jquery/no-show": 0,
        "jquery/no-size": 0,
        "jquery/no-sizzle": 0,
        "jquery/no-slide": 0,
        "jquery/no-submit": 0,
        "jquery/no-text": 0,
        "jquery/no-toggle": 0,
        "jquery/no-trigger": 0,
        "jquery/no-trim": 0,
        "jquery/no-val": 0,
        "jquery/no-when": 0,
        "jquery/no-wrap": 0
      }
    }
  ]
}
