import globals from "globals"; import pluginJs from "@eslint/js"; import tseslint from "typescript-eslint"; import pluginReact from "eslint-plugin-react"; import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; import { FlatCompat } from "@eslint/eslintrc"; import js from "@eslint/js"; // import nextPlugin from "@next/eslint-plugin-next"; import typescriptEslint from "@typescript-eslint/eslint-plugin"; import checkFile from "eslint-plugin-check-file"; import _import from "eslint-plugin-import"; import jsxA11y from "eslint-plugin-jsx-a11y"; import n from "eslint-plugin-n"; import reactHooks from "eslint-plugin-react-hooks"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const compat = new FlatCompat({ baseDirectory: __dirname, recommendedConfig: js.configs.recommended, allConfig: js.configs.all, }); export default [ // Basis-Konfigurationen für Next.js, TypeScript und React ...fixupConfigRules( compat.extends( // "next/core-web-vitals", // Next.js Performance und Best Practices // "next/typescript", // Next.js TypeScript Support "prettier", // Prettier Kompatibilität "eslint:recommended", // ESLint Basis-Regeln "plugin:@typescript-eslint/recommended", // TypeScript Empfehlungen "plugin:react-hooks/recommended" // React Hooks Empfehlungen ) ), { plugins: { "check-file": checkFile, // Überprüft Datei- und Ordnernamen n, // Node.js spezifische Regeln // "@typescript-eslint": fixupPluginRules(typescriptEslint), import: fixupPluginRules(_import), // Import/Export Regeln "react-hooks": fixupPluginRules(reactHooks), "jsx-a11y": fixupPluginRules(jsxA11y), // Accessibility Regeln // next: fixupPluginRules(nextPlugin), // Next.js spezifische Regeln }, // Globale Einstellungen settings: { "import/resolver": { typescript: { project: "./tsconfig.json", // TypeScript Konfiguration für Import-Auflösung }, }, next: { rootDir: ".", // Next.js Wurzelverzeichnis }, }, // Regelkonfigurationen rules: { // // Next.js spezifische Regeln - alle deaktiviert // "next/no-html-link-for-pages": "off", // Erlaubt HTML Links // "next/no-img-element": "off", // Erlaubt Tags // "next/no-head-element": "off", // Erlaubt Element // "next/no-sync-scripts": "off", // Erlaubt synchrone Scripts // TypeScript Variablen-Regeln "@typescript-eslint/no-unused-vars": [ "error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", ignoreRestSiblings: true, }, ], // Code-Stil Regeln "prefer-arrow-callback": ["off"], // Erlaubt normale Funktionen "prefer-template": ["off"], // Erlaubt String-Konkatenation semi: ["off", "always"], // Keine Semikolon-Regeln quotes: ["warn", "double"], // Warnt bei nicht-doppelten Anführungszeichen // Node.js Regeln "n/no-process-env": ["error"], // Verbietet direkten process.env Zugriff // Allgemeine Regeln "no-console": [ "warn", { allow: ["off", "error"], // Erlaubt console.error }, ], // Variable und Typen Regeln "no-unused-vars": "off", // Warnt bei ungenutzten Variablen "@typescript-eslint/explicit-function-return-type": "off", // Kein expliziter Rückgabetyp nötig "@typescript-eslint/no-explicit-any": "error", // Verbietet 'any' Typ "import/no-duplicates": "warn", // Warnt bei doppelten Imports // React Hooks Regeln "react-hooks/rules-of-hooks": "warn", // Hooks Regeln "react-hooks/exhaustive-deps": "warn", // Dependencies Array Vollständigkeit // Accessibility "jsx-a11y/alt-text": "off", // Alt-Text für Bilder "check-file/filename-naming-convention": [ "warn", { "**/*.{ts,tsx}": "KEBAB_CASE", // Erzwingt kebab-case für TS/TSX Dateien }, { ignoreMiddleExtensions: true, }, ], "check-file/folder-naming-convention": [ "error", { "src/**/!^[.*": "KEBAB_CASE", // Erzwingt kebab-case für Ordner }, ], }, }, ];