import js from '@eslint/js' import globals from 'globals' import reactHooks from 'eslint-plugin-react-hooks' import { reactRefresh } from 'eslint-plugin-react-refresh' import tseslint from 'typescript-eslint' import { defineConfig, globalIgnores } from 'eslint/config' export default defineConfig([ globalIgnores(['dist']), { files: ['**/*.{ts,tsx}'], extends: [ js.configs.recommended, tseslint.configs.recommended, reactHooks.configs.flat.recommended, reactRefresh.configs.vite(), ], languageOptions: { ecmaVersion: 2020, globals: globals.browser, }, rules: { // React Compiler compatibility rules introduced in eslint-plugin-react-hooks@7.1.x. // These enforce patterns required for the React Compiler (still experimental). // Set to warn so existing code compiles while we adopt patterns incrementally. 'react-hooks/set-state-in-effect': 'warn', 'react-hooks/refs': 'warn', 'react-hooks/purity': 'warn', 'react-hooks/preserve-manual-memoization': 'warn', 'react-hooks/use-memo': 'warn', 'react-hooks/immutability': 'warn', 'react-hooks/globals': 'warn', 'react-hooks/static-components': 'warn', 'react-hooks/set-state-in-render': 'warn', 'react-hooks/error-boundaries': 'warn', 'react-hooks/config': 'warn', 'react-hooks/gating': 'warn', }, }, { // Vendored shadcn/ui components; these export a helper constant (e.g. // buttonVariants) alongside the component, which eslint-plugin-react-refresh // 0.5.5 now correctly flags. Downgrade to warn rather than restructure // generated files. files: ['src/components/ui/**/*.{ts,tsx}'], rules: { 'react-refresh/only-export-components': 'warn', }, }, ])