// src/frontend/eslint.config.js import js from '@eslint/js' import tseslint from 'typescript-eslint' import reactPlugin from 'eslint-plugin-react' import reactHooks from 'eslint-plugin-react-hooks' import reactRefresh from 'eslint-plugin-react-refresh' import jsxA11y from 'eslint-plugin-jsx-a11y' import globals from 'globals' export default tseslint.config( // Global ignores (replaces .eslintignore) { ignores: [ 'dist/**', 'node_modules/**', 'coverage/**', 'src/styled-system/**', ], }, // Base JS recommended rules js.configs.recommended, // TypeScript recommended rules (parser + rules bundled together) ...tseslint.configs.recommended, // React-specific config { files: ['**/*.{ts,tsx}'], plugins: { react: reactPlugin, 'react-hooks': reactHooks, 'react-refresh': reactRefresh, 'jsx-a11y': jsxA11y, }, languageOptions: { globals: { ...globals.browser, }, parserOptions: { ecmaFeatures: { jsx: true }, }, }, settings: { react: { version: 'detect' }, }, rules: { // React rules ...reactPlugin.configs.recommended.rules, ...reactHooks.configs.recommended.rules, 'react/react-in-jsx-scope': 'off', // not needed with React 17+ 'react-refresh/only-export-components': [ 'warn', { allowConstantExport: true }, ], // React Compiler rules (v7+) — disable until migrated to React 19 'react-hooks/react-compiler': 'off', 'react-hooks/set-state-in-effect': 'off', 'react-hooks/preserve-manual-memoization': 'off', 'react-hooks/immutability': 'off', 'react-hooks/refs': 'off', // jsx-a11y recommended rules ...jsxA11y.configs.recommended.rules, // TypeScript rules you may want to adjust '@typescript-eslint/no-unused-vars': [ 'error', { argsIgnorePattern: '^_' }, ], '@typescript-eslint/no-explicit-any': 'warn', }, }, // CJS and root-level JS config files (postcss.config.js, etc.) { files: ['**/*.cjs', '*.config.js'], languageOptions: { globals: { ...globals.node, }, }, } )