{ "root": true, "env": { "browser": true, "es6": true, "node": true, "webextensions": true }, "ignorePatterns": [ "*.html", "tsconfig.json" ], "extends": [ "eslint:recommended", "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:storybook/recommended", "airbnb-base", "airbnb/rules/react", "airbnb-typescript", "prettier", ], "plugins": [ "import", "jsdoc", "react-prefer-function-component" ], "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly", "debugger": true, "browser": true, "context": true, "JSX": true }, "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json", "ecmaVersion": 2022, "sourceType": "module", "ecmaFeatures": { "jsx": true, "modules": true, "experimentalObjectRestSpread": true } }, "settings": { "react": { "version": "detect" }, "jsdoc": { "mode": "typescript" }, "import/parsers": { "@typescript-eslint/parser": [ ".ts", ".tsx" ] }, "import/resolver": { "typescript": { "alwaysTryTypes": true, "project": "./tsconfig.json" } } }, "rules": { "prefer-const": [ "off", { "destructuring": "any", "ignoreReadBeforeAssign": false } ], "no-inner-declarations": "off", "sort-imports": "off", "no-case-declarations": "off", "no-unreachable": "warn", "no-constant-condition": "error", "space-before-function-paren": "off", "no-undef": "off", "no-return-await": "off", "@typescript-eslint/return-await": "off", "@typescript-eslint/no-shadow": [ "off" ], "@typescript-eslint/no-use-before-define": [ "off" ], "class-methods-use-this": "off", "react-hooks/exhaustive-deps": "warn", "@typescript-eslint/lines-between-class-members": "off", "no-param-reassign": [ "error", { "props": false } ], "no-console": "off", "consistent-return": "off", "react/destructuring-assignment": "off", "import/prefer-default-export": "off", "no-promise-executor-return": "off", "import/no-cycle": "off", "import/no-extraneous-dependencies": "off", "react/jsx-props-no-spreading": "off", "keyword-spacing": [ "error", { "before": true, "after": true } ], "no-continue": "off", "space-before-blocks": [ "error", { "functions": "always", "keywords": "always", "classes": "always" } ], "react/jsx-filename-extension": [ 1, { "extensions": [ ".tsx" ] } ], "react/no-deprecated": "warn", "react/prop-types": "off", "react-prefer-function-component/react-prefer-function-component": [ "warn", { "allowComponentDidCatch": false } ], "react/function-component-definition": "off", "react/button-has-type": "off", "jsdoc/require-param-type": "off", "jsdoc/require-returns-type": "off", "jsdoc/newline-after-description": "off", "react/require-default-props": "off", "jsdoc/require-jsdoc": [ "warn", { "enableFixer": false, "publicOnly": true, "checkConstructors": false, "require": { "ArrowFunctionExpression": true, "ClassDeclaration": true, "ClassExpression": true, "FunctionExpression": true }, "contexts": [ "MethodDefinition:not([key.name=\"componentDidMount\"]):not([key.name=\"render\"])", "ArrowFunctionExpression", "ClassDeclaration", "ClassExpression", "ClassProperty:not([key.name=\"state\"]):not([key.name=\"componentDidMount\"])", "FunctionDeclaration", "FunctionExpression", "TSDeclareFunction", "TSEnumDeclaration", "TSInterfaceDeclaration", "TSMethodSignature", "TSModuleDeclaration", "TSTypeAliasDeclaration" ] } ], "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unused-vars": "warn", "@typescript-eslint/naming-convention": "off", "@typescript-eslint/space-before-function-paren": "off", "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-empty-interface": "warn", "import/no-restricted-paths": [ "error", { "zones": [ { "target": "./src/background", "from": "./src/views", "message": "You cannot import into the `background` directory from the `views` directory (i.e. content script files) because it will break the build!" }, { "target": "./src/views", "from": "./src/background", "message": "You cannot import into the `views` directory from the `background` directory (i.e. background script files) because it will break the build!" }, { "target": "./src/shared", "from": "./", "except": [ "./src/shared", "./node_modules" ], "message": "You cannot import into `shared` from an external directory." } ] } ], "no-restricted-syntax": [ "error", "ForInStatement", "LabeledStatement", "WithStatement" ] } }