{ "extends": ["airbnb", "prettier"], "env": { "browser": true, "node": true, "mocha": true, "jest": true }, "parser": "babel-eslint", "rules": { "no-useless-escape": 0, "allowForLoopAfterthoughts": 0, "react/no-multi-comp": 0, "import/order": 0, "import/default": 0, "import/no-duplicates": 0, "import/named": 0, "import/first": 0, "import/namespace": 0, "import/no-unresolved": 0, "import/no-named-as-default": 2, "import/extensions": 0, "import/no-extraneous-dependencies": 0, "import/prefer-default-export": 0, "comma-dangle": 0, "id-length": [ 1, { "min": 1, "properties": "never" } ], "consistent-return": "off", "indent": "off", "no-console": 0, "arrow-parens": 0, "no-alert": 0, "no-plusplus": 0, "no-unsafe-negation": 0, "no-loop-func": 0, "no-lonely-if": 0, "no-bitwise": 0, "global-require": 0, "no-param-reassign": 0, "no-underscore-dangle": 0, "no-useless-return": 0, "no-restricted-syntax": 0, "no-prototype-builtins": 0, "array-callback-return": 0, "no-useless-concat": 0, "class-methods-use-this": 0, "arrow-body-style": 0, "prefer-template": 0, "prefer-spread": 0, "object-shorthand": 0, "camelcase": 0, "object-curly-newline": 0, "spaced-comment": 0, "prefer-destructuring": [ "error", { "object": false, "array": false } ], "prefer-rest-params": 0, "function-paren-newline": 0, "no-case-declarations": 0, "no-restricted-globals": 0, "no-unneeded-ternary": 0, "no-mixed-operators": 0, "no-return-assign": 0, "operator-assignment": 0, "strict": 0, "react/jsx-no-duplicate-props": 0, "react/jsx-filename-extension": 0, "react/jsx-curly-brace-presence": 0, "react/forbid-prop-types": 0, "react/require-default-props": 0, "react/no-unused-prop-types": 0, "react/no-string-refs": 0, "react/no-unused-state": 0, "react/no-array-index-key": 0, "react/jsx-no-bind": 0, "react/prop-types": 0, "react/prefer-stateless-function": 0, "react/no-unescaped-entities": 0, "react/sort-comp": 0, "react/jsx-indent": 0, "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", "jsx-a11y/click-events-have-key-events": 0, "jsx-a11y/no-static-element-interactions": 0, "jsx-a11y/no-noninteractive-element-interactions": 0, "jsx-a11y/label-has-for": 0, "jsx-a11y/anchor-is-valid": 0, "jsx-a11y/lang": 0, "jsx-a11y/alt-text": 0, "jsx-a11y/no-autofocus": 0, "max-len": 0, "no-continue": 0, "no-new": 0, "eqeqeq": 0, "no-nested-ternary": 0, "react/forbid-dom-props": [ "error", { "forbid": [ { "propName": "data-analytics-name", "message": "Analytics attributes (data-analytics-name) should be added through the Analytics component/utilities" }, { "propName": "data-trackid", "message": "Analytics attributes (data-trackid) should be added through the Analytics component/utilities" }, { "propName": "data-heap-redact-text", "message": "Analytics attributes (data-heap-redact-text) should be added through the Analytics component/utilities" }, { "propName": "data-heap-redact-attributes", "message": "Analytics attributes (data-heap-redact-attributes) should be added through the Analytics component/utilities" } ] } ], "react/forbid-component-props": [ "error", { "forbid": [ { "propName": "data-analytics-name", "message": "Analytics attributes (data-analytics-name) should be added through the Analytics component/utilities" }, { "propName": "data-trackid", "message": "Analytics attributes (data-trackid) should be added through the Analytics component/utilities" }, { "propName": "data-heap-redact-text", "message": "Analytics attributes (data-heap-redact-text) should be added through the Analytics component/utilities" }, { "propName": "data-heap-redact-attributes", "message": "Analytics attributes (data-heap-redact-attributes) should be added through the Analytics component/utilities" } ] } ] }, "plugins": [ "react", "import", "@typescript-eslint/eslint-plugin", "react-hooks", "testing-library" ], "settings": { "import/resolve": { "moduleDirectory": ["node_modules", "src"] } }, "globals": { "__DEVELOPMENT__": true, "__CLIENT__": true, "__SERVER__": true, "__DISABLE_SSR__": true, "__DEVTOOLS__": true, "socket": true, "webpackIsomorphicTools": true, "CONSOLE_ASSET_VERSION": true }, "overrides": [ { "extends": [ "plugin:@typescript-eslint/recommended", "airbnb", "prettier" ], "parser": "@typescript-eslint/parser", "files": ["*.ts", "*.tsx"], "rules": { "no-useless-escape": 0, "no-restricted-imports": [ "error", { "patterns": ["@/features/*/*", "@/new-components/*/*"] } ], "jsx-a11y/label-has-for": [ 0, { "required": { "some": ["nesting", "id"] } } ], "import/order": 0, "import/extensions": 0, "import/prefer-default-export": "off", "react/prop-types": "off", "react/jsx-filename-extension": 0, "no-unused-vars": "off", "camelcase": "off", "no-param-reassign": "off", "no-use-before-define": "off", "consistent-return": "off", "import/no-extraneous-dependencies": [ "error", { "devDependencies": [ "src/storybook/**/*", "**/__tests__/**/*", "**/*.test.js", "**/*.test.jsx", "**/*.spec.js", "**/*.spec.jsx", "**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx", "**/*.stories.tsx", "**/*.stories.mdx", "**/*.mock.tsx", "**/*.mock.ts" ] } ], "@typescript-eslint/no-unused-vars": 2, "@typescript-eslint/no-use-before-define": "warn", "@typescript-eslint/indent": 0, "@typescript-eslint/explicit-function-return-type": 0, "@typescript-eslint/prefer-interface": 0, "@typescript-eslint/no-namespace": "off", "@typescript-eslint/camelcase": 0, "@typescript-eslint/explicit-member-accessibility": 0, "@typescript-eslint/no-non-null-assertion": 0, "@typescript-eslint/no-object-literal-type-assertion": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/no-parameter-properties": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/no-shadow": "error", "@typescript-eslint/no-useless-constructor": "error", "@typescript-eslint/no-unused-expressions": ["error"], "@typescript-eslint/no-empty-function": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "no-restricted-syntax": "warn", /** * Disable things that are checked by TypeScript */ "import/no-unresolved": 0, "getter-return": "off", "no-dupe-args": "off", "no-dupe-keys": "off", "no-unreachable": "off", "valid-typeof": "off", "no-const-assign": "off", "no-new-symbol": "off", "no-this-before-super": "off", "no-undef": "off", "no-dupe-class-members": "off", "no-redeclare": "off", "no-restricted-globals": "warn", "no-useless-constructor": "off", "no-unused-expressions": "off", "no-console": "off", "no-shadow": "off", "prefer-destructuring": "off", "no-plusplus": "off", "jsx-a11y/anchor-is-valid": "off", "jsx-a11y/click-events-have-key-events": "off", "jsx-a11y/no-static-element-interactions": "off", "no-new": "off", "no-nested-ternary": "off", "jsx-a11y/interactive-supports-focus": "off", "no-restricted-properties": "off", "react/no-danger": "off", "react/no-array-index-key": "off", "no-case-declarations": 0, "react/jsx-indent": "off", "arrow-body-style": "off", "react/require-default-props": "warn", "react/no-unused-prop-types": "warn", "jsx-a11y/role-supports-aria-props": "warn" } }, { // 3) Now we enable eslint-plugin-testing-library rules or preset only for matching files! "files": [ "src/**/__tests__/**/*.[jt]s?(x)", "src/**/?(*.)+(spec|test).[jt]s?(x)" ], "extends": ["plugin:testing-library/react", "plugin:jest-dom/recommended"] } ] }