monorepo/packages/eslint-config/next.mjs

122 lines
3.3 KiB
JavaScript
Raw Normal View History

2025-04-30 19:50:16 +08:00
import antfu from "@antfu/eslint-config";
import nextPlugin from "@next/eslint-plugin-next";
import eslintConfigPrettier from "eslint-config-prettier";
import jsxA11y from "eslint-plugin-jsx-a11y";
import perfectionist from "eslint-plugin-perfectionist";
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
import unusedImports from "eslint-plugin-unused-imports";
2025-03-31 19:43:56 +08:00
2025-04-30 19:50:16 +08:00
const config = antfu(
{
isInEditor: true,
react: true,
typescript: true,
stylistic: false,
markdown: false,
toml: false,
ignores: [
"public",
"node_modules",
"build",
".history",
".next",
"public",
"pnpm-lock.yaml",
"package-lock.json",
"next-env.d.ts",
],
},
{
files: ["**/*.{ts,tsx,js,jsx}"],
languageOptions: {
ecmaVersion: "latest",
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
rules: {
"react-hooks-extra/no-direct-set-state-in-use-effect": "off",
"react/no-unstable-context-value": "off",
"no-console": "off",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "off",
"ts/no-use-before-define": "off",
"ts/strict-boolean-expressions": "off",
"ts/no-unsafe-member-access": "off",
"ts/no-unsafe-call": "off",
"ts/no-unsafe-assignment": "off",
"ts/no-unsafe-return": "off",
"ts/no-unsafe-argument": "off",
"ts/no-misused-promises": "off",
"ts/no-floating-promises": "off",
"node/prefer-global/process": "off",
"node/prefer-global/buffer": "off",
"import/no-named-default": "off",
"react-hooks/exhaustive-deps": "off",
"react-refresh/only-export-components": "off",
"react/no-leaked-conditional-rendering": "off",
"react/no-forward-ref": "off",
"jsdoc/check-param-names": "off",
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
},
2025-03-31 19:43:56 +08:00
2025-04-30 19:50:16 +08:00
jsxA11y.flatConfigs.recommended,
{
plugins: {
"@next/next": nextPlugin,
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
rules: {
...nextPlugin.configs.recommended.rules,
...nextPlugin.configs["core-web-vitals"].rules,
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
},
{
name: "perfectionist",
rules: {
"import/order": "off",
"sort-imports": "off",
"perfectionist/sort-imports":
perfectionist.configs["recommended-natural"].rules[
"perfectionist/sort-imports"
],
"perfectionist/sort-exports":
perfectionist.configs["recommended-natural"].rules[
"perfectionist/sort-exports"
],
"perfectionist/sort-named-imports":
perfectionist.configs["recommended-natural"].rules[
"perfectionist/sort-named-imports"
],
"perfectionist/sort-named-exports":
perfectionist.configs["recommended-natural"].rules[
"perfectionist/sort-named-exports"
],
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
},
{
plugins: {
"unused-imports": unusedImports,
},
rules: {
"unused-imports/no-unused-imports": "error",
"unused-imports/no-unused-vars": [
"warn",
{
vars: "all",
varsIgnorePattern: "^_",
args: "after-used",
argsIgnorePattern: "^_",
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
],
},
},
{
name: "tailwind",
rules: {
"tailwindcss/no-custom-classname": "off",
"tailwindcss/enforces-shorthand": "off",
2025-03-31 19:43:56 +08:00
},
2025-04-30 19:50:16 +08:00
},
eslintConfigPrettier,
eslintPluginPrettierRecommended,
2025-03-31 19:43:56 +08:00
);
2025-04-30 19:50:16 +08:00
export default config;