{
  "root": true,
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  "extends": [
    "next",
    "prettier",
    "airbnb",
    "airbnb-typescript",
    "plugin:@typescript-eslint/recommended",
    "plugin:unicorn/recommended"
  ],
  "parserOptions": {
    "project": "./tsconfig.json"
  },
  "parser": "@typescript-eslint/parser",
  "plugins": ["react", "prettier", "@typescript-eslint", "unicorn", "testing-library"],
  "rules": {
    "linebreak-style": ["error", "windows"],
    "comma-dangle": "off",
    "@typescript-eslint/comma-dangle": ["off"],
    "react/react-in-jsx-scope": "off",
    "react/jsx-props-no-spreading": "off",
    "react/jsx-filename-extension": [2, { "extensions": [".js", ".jsx", ".ts", ".tsx"] }],
    "react/forbid-prop-types": "off",
    "react/require-default-props": [
      "error",
      {
        "ignoreFunctionalComponents": true
      }
    ],
    "import/extensions": "off",
    "object-curly-newline": [
      "warn",
      {
        "ObjectExpression": "always",
        "ObjectPattern": { "multiline": true },
        "ImportDeclaration": "never",
        "ExportDeclaration": { "multiline": true, "minProperties": 3 }
      }
    ],
    "lines-between-class-members": "off",
    "@typescript-eslint/lines-between-class-members": ["off"],
    "indent": "off",
    "@typescript-eslint/indent": ["off"],
    "react/jsx-no-bind": [
      "error",
      {
        "ignoreDOMComponents": false,
        "ignoreRefs": false,
        "allowArrowFunctions": false,
        "allowFunctions": true,
        "allowBind": false
      }
    ],
    "newline-before-return": "warn",
    "@typescript-eslint/consistent-type-imports": "error",
    "react/prop-types": "off",
    // Airbnb prefers forEach
    "unicorn/no-array-for-each": "off",
    "unicorn/prevent-abbreviations": "off",
    "unicorn/no-null": "off",
    "unicorn/prefer-node-protocol": "off",
    "unicorn/no-array-reduce": "off",
    "unicorn/prefer-module": "off",
    "unicorn/text-encoding-identifier-case": "off",
    "unicorn/filename-case": [
      "error",
      {
        "case": "kebabCase",
        "ignore": ["^.*.(jsx|tsx)$"]
      }
    ],
    "import/no-unresolved": "warn",
    "implicit-arrow-linebreak": "warn",
    "operator-linebreak": "warn",
    "function-paren-newline": "warn"
  },
  "overrides": [
    // Only uses Testing Library lint rules in test files
    {
      "files": ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"],
      "extends": ["plugin:testing-library/react"]
    }
  ]
}
