const { resolve } = require("node:path"); const project = resolve(process.cwd(), "tsconfig.json"); module.exports = { extends: ["next", "prettier", "plugin:@typescript-eslint/recommended"], parser: "@typescript-eslint/parser", plugins: ["react", "@typescript-eslint", "import"], globals: { React: "readonly", JSX: "readonly", }, env: { node: true, browser: true, }, settings: { "import/resolver": { typescript: { project, }, }, }, ignorePatterns: [".*.js", "node_modules/"], rules: { "no-useless-escape": "off", "prefer-const": "error", "no-irregular-whitespace": "error", "no-trailing-spaces": "error", "no-duplicate-imports": "error", "no-useless-catch": "warn", "no-case-declarations": "error", "no-undef": "error", "no-unreachable": "error", "arrow-body-style": ["error", "as-needed"], "@next/next/no-html-link-for-pages": "off", "@next/next/no-img-element": "off", "react/jsx-key": "error", "react/self-closing-comp": ["error", { component: true, html: true }], "react/jsx-boolean-value": "error", "react/jsx-no-duplicate-props": "error", "react-hooks/exhaustive-deps": "warn", "@typescript-eslint/no-unused-expressions": "warn", "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", caughtErrorsIgnorePattern: "^_", }, ], "@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-useless-empty-export": "error", "@typescript-eslint/prefer-ts-expect-error": "warn", "@typescript-eslint/naming-convention": [ "warn", { selector: "variable", format: ["camelCase", "snake_case", "UPPER_CASE", "PascalCase"], leadingUnderscore: "allow", }, ], "import/order": [ "warn", { groups: ["builtin", "external", "internal", "parent", "sibling"], pathGroups: [ { pattern: "react", group: "external", position: "before", }, { pattern: "lucide-react", group: "external", position: "after", }, { pattern: "@headlessui/**", group: "external", position: "after", }, { pattern: "@plane/**", group: "external", position: "after", }, { pattern: "@/**", group: "internal", }, { pattern: "public/**", group: "internal", position: "after", }, ], pathGroupsExcludedImportTypes: ["builtin", "internal", "react"], alphabetize: { order: "asc", caseInsensitive: true, }, }, ], }, };