{
  "env": {
    "browser": true,
    "es2021": true
  },
  "extends": [
    "react-app",
    "airbnb",
    "airbnb-typescript",
    "plugin:prettier/recommended",
    "prettier"
  ],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "plugins": [
    "@typescript-eslint",
    "simple-import-sort",
    "typescript-sort-keys",
    "prettier"
  ],
  "rules": {
    "jsx-a11y/media-has-caption":"off",
    "react/jsx-filename-extension": "off",
    "typescript-sort-keys/interface": [
      "error",
      "asc",
      {
        "caseSensitive": true,
        "natural": false,
        "requiredFirst": true
      }
    ],
    "simple-import-sort/imports": [
      "error",
      {
        "groups": [
          [
            "^react",
            "^@?\\w",
            "^(components|modules|utils)(/.*|$)",
            "^\\u0000",
            "^\\.\\.(?!/?$)",
            "^\\.\\./?$",
            "^\\./(?=.*/)(?!/?$)",
            "^\\.(?!/?$)",
            "^\\./?$",
            "^.+\\.s?css$"
          ]
        ]
      }
    ],
    "no-param-reassign": [
      "error",
      {
        "props": true,
        "ignorePropertyModificationsFor": [
          "state"
        ]
      }
    ],
    "object-curly-spacing": [
      "warn",
      "always"
    ],
    "no-use-before-define": [
      "error",
      {
        "functions": false,
        "classes": true,
        "variables": true
      }
    ],
    "max-len": [
      "warn",
      {
        "code": 100,
        "ignoreStrings": true,
        "ignoreTemplateLiterals": true,
        "ignoreComments": true
      }
    ],
    "no-plusplus": [
      "error",
      {
        "allowForLoopAfterthoughts": true
      }
    ],
    "padding-line-between-statements": [
      "error",
      {
        "blankLine": "always",
        "prev": [
          "const",
          "let",
          "var"
        ],
        "next": "*"
      },
      {
        "blankLine": "never",
        "prev": [
          "const",
          "let",
          "var"
        ],
        "next": [
          "const",
          "let",
          "var"
        ]
      },
      {
        "blankLine": "always",
        "prev": "*",
        "next": [
          "multiline-block-like",
          "multiline-const",
          "multiline-expression",
          "multiline-let",
          "multiline-var",
          "return"
        ]
      },
      {
        "blankLine": "always",
        "prev": [
          "multiline-block-like",
          "multiline-const",
          "multiline-expression",
          "multiline-let",
          "multiline-var",
          "case",
          "default"
        ],
        "next": "*"
      }
    ],
    "no-multiple-empty-lines": [
      "error",
      {
        "max": 1,
        "maxEOF": 0,
        "maxBOF": 0
      }
    ],
    "arrow-body-style": [
      "error",
      "as-needed"
    ],
    "import/prefer-default-export": "off",
    "@typescript-eslint/no-unused-vars": [
      "warn",
      {
        "vars": "all",
        "args": "all"
      }
    ],
    "@typescript-eslint/no-explicit-any": [
      "error",
      {
        "ignoreRestArgs": true
      }
    ],
    "@typescript-eslint/no-use-before-define": [
      "error",
      {
        "functions": false,
        "classes": true,
        "variables": true,
        "typedefs": true
      }
    ],
    "prettier/prettier": [
      "error",
      {
        "endOfLine": "auto"
      }
    ],
    "react/function-component-definition": "off",
    "react/react-in-jsx-scope": "off",
    "react/jsx-key": "error",
    "react-hooks/exhaustive-deps": "error",
    "react/jsx-props-no-spreading": "off",
    "react/require-default-props": "off",
    "react/destructuring-assignment": "off"
  }
}
