{ // Configuration for JavaScript files "extends": [ "airbnb-base", "next/core-web-vitals", // Needed to avoid warning in next.js build: 'The Next.js plugin was not detected in your ESLint configuration' "plugin:prettier/recommended" ], "rules": { "prettier/prettier": [ "error", { "singleQuote": false, "endOfLine": "auto" } ] // Avoid conflict rule between Prettier and Airbnb Eslint }, "overrides": [ // Configuration for TypeScript files { "files": ["**/*.js"], "rules": { "@typescript-eslint/no-var-requires": "off", // Allow require() in JavaScript files "global-require": "off" // Allow require() in JavaScript files } }, { "files": ["**/*.ts", "**/*.tsx"], "plugins": [ "@typescript-eslint", "unused-imports", "tailwindcss", "simple-import-sort" ], "extends": [ "plugin:tailwindcss/recommended", "airbnb", "airbnb-typescript", "next/core-web-vitals", "plugin:prettier/recommended" ], "parserOptions": { "project": "./tsconfig.json" }, "rules": { "prettier/prettier": [ "error", { "singleQuote": false, "endOfLine": "auto" } ], // Avoid conflict rule between Prettier and Airbnb Eslint "import/extensions": "off", // Avoid missing file extension errors, TypeScript already provides a similar feature "react/function-component-definition": "off", // Disable Airbnb's specific function type "react/destructuring-assignment": "off", // Vscode doesn't support automatically destructuring, it's a pain to add a new variable "react/require-default-props": "off", // Allow non-defined react props as undefined "react/jsx-props-no-spreading": "off", // _app.tsx uses spread operator and also, react-hook-form "@typescript-eslint/comma-dangle": "off", // Avoid conflict rule between Eslint and Prettier "@typescript-eslint/consistent-type-imports": "error", // Ensure `import type` is used when it's necessary "no-restricted-syntax": [ "error", "ForInStatement", "LabeledStatement", "WithStatement" ], // Overrides Airbnb configuration and enable no-restricted-syntax "import/prefer-default-export": "off", // Named export is easier to refactor automatically "simple-import-sort/imports": "error", // Import configuration for `eslint-plugin-simple-import-sort` "simple-import-sort/exports": "error", // Export configuration for `eslint-plugin-simple-import-sort` "import/order": "off", // Avoid conflict rule between `eslint-plugin-import` and `eslint-plugin-simple-import-sort` "@typescript-eslint/no-unused-vars": "off", "unused-imports/no-unused-imports": "error", "import/no-extraneous-dependencies": "off", "tailwindcss/no-custom-classname": "off", "global-require": "off", "unused-imports/no-unused-vars": [ "error", { "argsIgnorePattern": "^_" } ] } }, { // feel free to replace with your preferred file pattern - eg. 'src/**/*Slice.ts' "files": ["src/**/*.slice.ts"], // avoid state param assignment "rules": { "no-param-reassign": ["error", { "props": false }] } }, // Configuration for testing { "files": ["**/*.test.ts", "**/*.test.tsx"], "plugins": ["jest", "jest-formatting", "testing-library", "jest-dom"], "extends": [ "plugin:jest/recommended", "plugin:jest-formatting/recommended", "plugin:testing-library/react", "plugin:jest-dom/recommended" ] }, // Configuration for Storybook { "files": ["*.stories.*"], "extends": ["plugin:storybook/recommended"], "rules": { "import/no-extraneous-dependencies": [ "error", { "devDependencies": true } ] } } ] }