Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
.eslintrc 4.23 KiB
{
  "rules": {
    "strict": [2, "never"],
    "no-undef": 2,
    "no-var": 1,
    "no-unused-vars": [
      "error",
      {
        "vars": "all",
        "args": "none",
        "varsIgnorePattern": "^_.+",
        "ignoreRestSiblings": true
      }
    ],
    "no-empty": [1, { "allowEmptyCatch": true }],
    "curly": [1, "all"],
    "eqeqeq": [1, "smart"],
    "import/no-default-export": 2,
    "import/no-commonjs": 1,
    "import/order": [
      "error",
      {
        "pathGroups": [
          {
            "pattern": "react",
            "group": "builtin",
            "position": "before"
          },
          {
            "pattern": "metabase/**",
            "group": "internal"
          },
          {
            "pattern": "metabase/**/components",
            "group": "internal",
            "position": "before"
          },
          {
            "pattern": "__**",
            "group": "internal",
            "position": "before"
          },
          {
            "pattern": "metabase-lib/**",
            "group": "internal",
            "position": "after"
          }
        ],
        "groups": [
          "builtin",
          "external",
          "internal",
          "parent",
          "sibling",
          "index",
          "object"
        ]
      }
    ],
    "no-console": [2, {"allow": ["warn", "error"]}],
    "react/no-is-mounted": 2,
    "react/prefer-es6-class": 2,
    "react/display-name": 1,
    "react/prop-types": 2,
    "react/no-did-mount-set-state": 0,
    "react/no-did-update-set-state": 0,
    "react/no-find-dom-node": 0,
    "react/no-children-prop": 2,
    "react/no-string-refs": 2,
    "react/no-unescaped-entities": 2,
    "react/jsx-no-target-blank": 2,
    "react/jsx-key": 2,
    "react/forbid-component-props": [2, { "forbid": ["w", "h"] }],
    "react-hooks/exhaustive-deps": [
      "warn",
      { "additionalHooks": "(useSyncedQueryString|useSafeAsyncFunction)" }
    ],
    "prefer-const": [1, { "destructuring": "all" }],
    "no-useless-escape": 0,
    "no-only-tests/no-only-tests": [
      "error",
      {"block": ["describe", "it", "context", "test", "tape", "fixture", "serial", "Feature", "Scenario", "Given", "And", "When", "Then", "describeWithSnowplow", "describeEE"]}
    ],
    "complexity": ["error", { "max": 54 }]
  },
  "globals": {
    "before": true,
    "cy": true,
    "Cypress": true
  },
  "env": {
    "browser": true,
    "es6": true,
    "commonjs": true,
    "jest": true,
    "jest/globals": true
  },
  "parser": "babel-eslint",
  "plugins": ["react", "no-only-tests"],
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended",
    "plugin:react/jsx-runtime",
    "plugin:react-hooks/recommended",
    "plugin:import/errors",
    "plugin:import/warnings"
  ],
  "settings": {
    "import/internal-regex": "^metabase/|^metabase-lib/",
    "import/resolver": "webpack",
    "import/ignore": ["\\.css$"],
    "react": {
      "version": "detect"
    }
  },
  "parserOptions": {
    "ecmaFeatures": {
      "legacyDecorators": true
    }
  },
  "overrides": [
    {
      "extends": ["plugin:@typescript-eslint/recommended"],
      "files": ["*.ts", "*.tsx"],
      "parser": "@typescript-eslint/parser",
      "plugins": ["@typescript-eslint"],
      "rules": {
        "prefer-rest-params": "off",
        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/no-inferrable-types": "off",
        "@typescript-eslint/no-explicit-any": "off",
        "@typescript-eslint/no-this-alias": "off",
        "no-unused-vars": "off",
        "@typescript-eslint/no-unused-vars": [
          "error",
          {
            "vars": "all",
            "args": "none",
            "varsIgnorePattern": "^_.+",
            "ignoreRestSiblings": true,
            "destructuredArrayIgnorePattern": "^_"
          }
        ]
      }
    },
    {
      "extends": [
        "plugin:jest/recommended",
        "plugin:jest-dom/recommended",
        "plugin:testing-library/react"
      ],
      "plugins": ["jest", "jest-dom", "testing-library"],
      "files": [
        "*.unit.spec.ts",
        "*.unit.spec.tsx",
        "*.unit.spec.js",
        "*.unit.spec.jsx"
      ],
      "rules": {
        "jest/valid-title": ["error", { "ignoreTypeOfDescribeName": true }]
      }
    }
  ]
}