Open
Description
import jsPlugin from "@eslint/js";
import importPlugin from "eslint-plugin-import";
import jsx11yPlugin from "eslint-plugin-jsx-a11y";
import prettierPluginRecommended from "eslint-plugin-prettier/recommended";
import reactPlugin from "eslint-plugin-react";
import reactHooksPlugin from "eslint-plugin-react-hooks";
import reactRefreshPlugin from "eslint-plugin-react-refresh";
import eslintConfigPrettier from "eslint-config-prettier";
import { includeIgnoreFile } from "@eslint/compat";
import path from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const gitignorePath = path.resolve(__dirname, ".gitignore");
/** @type { import("eslint").Linter.Config[] } */
export default [
includeIgnoreFile(gitignorePath),
jsPlugin.configs.recommended,
importPlugin.flatConfigs.recommended,
importPlugin.flatConfigs.typescript,
jsx11yPlugin.flatConfigs.recommended,
reactPlugin.configs.flat.recommended,
eslintConfigPrettier,
//! make prettierPlugin the last plugin to override previous rules.
prettierPluginRecommended,
{
plugins: {
"react-hooks": reactHooksPlugin.configs.recommended,
"react-refresh": reactRefreshPlugin,
},
rules: {
"import/order": [
"error",
{
groups: [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
"object",
"type",
],
"newlines-between": "always",
},
],
},
settings: {
"import/resolver": {
"typescript": true,
"node": true,
},
},
ignores: ["eslint.config.js", "commitlint.config.js"],
},
];