module.exports = { env: { browser: true, }, extends: [ "airbnb", "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "prettier", ], parser: "@typescript-eslint/parser", parserOptions: { project: "./tsconfig.json", ecmaFeatures: { jsx: true, }, ecmaVersion: 12, sourceType: "module", }, plugins: [ "react", "@typescript-eslint", "prettier", "react-hooks", "prefer-arrow", ], rules: { "react/jsx-uses-react": "off", "react/react-in-jsx-scope": "off", "react/function-component-definition": [ "error", { namedComponents: "arrow-function", unnamedComponents: "arrow-function", }, ], "react/jsx-filename-extension": [ "error", { extensions: ["jsx", "tsx"], }, ], "import/extensions": [ "error", "ignorePackages", { js: "never", jsx: "never", ts: "never", tsx: "never", }, ], "import/no-unresolved": "off", "import/prefer-default-export": "off", "no-use-before-define": 0, "prettier/prettier": "error", "no-param-reassign": 0, "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/prefer-interface": "off", "@typescript-eslint/indent": "off", "react-hooks/rules-of-hooks": "error", // Checks rules of Hooks "react-hooks/exhaustive-deps": "warn", // Checks effect dependencies "import/no-extraneous-dependencies": [ "error", { devDependencies: [ "**/*.test.js", "**/*.spec.js", "**/*.test.ts", "**/*.spec.ts", "**/*.test.tsx", "**/*.spec.tsx", "**/setupTests.ts", ], }, ], camelcase: "off", "prefer-arrow/prefer-arrow-functions": [ "error", { disallowPrototype: true, singleReturnOnly: false, classPropertiesAllowed: false, }, ], "func-style": [ "error", "expression", { allowArrowFunctions: true, }, ], "react/no-multi-comp": ["error"], "react/jsx-pascal-case": ["error"], "@typescript-eslint/naming-convention": [ "error", // default config { selector: "default", format: ["camelCase"], leadingUnderscore: "allow", trailingUnderscore: "allow", }, { selector: "variable", format: ["camelCase", "UPPER_CASE"], leadingUnderscore: "allow", trailingUnderscore: "allow", }, { selector: "typeLike", format: ["PascalCase"], }, // custom config { selector: ["property"], format: ["camelCase", "PascalCase"], }, { selector: ["variable"], types: ["function"], format: ["camelCase", "PascalCase"], }, { selector: "interface", format: ["PascalCase"], custom: { regex: "^I[A-Z]", match: false, }, }, ], "max-lines": ["error", 3000], }, settings: { "import/parsers": { "@typescript-eslint/parser": [".ts", ".tsx"], }, "import/resolver": { node: { extensions: [".js", "jsx", ".ts", ".tsx"], paths: ["src"], }, }, react: { version: "detect", }, }, };