import eslint from '@eslint/js' import reactHooks from 'eslint-plugin-react-hooks' import reactRefresh from 'eslint-plugin-react-refresh' import globals from 'globals' import tseslint from 'typescript-eslint' export default tseslint.config( { ignores: ['dist/**', 'node_modules/**'], }, { files: ['src/**/*.{ts,tsx}', 'tests/**/*.{ts,tsx}', 'vite.config.ts'], extends: [ eslint.configs.recommended, ...tseslint.configs.recommended, reactHooks.configs.flat.recommended, reactRefresh.configs.vite, ], languageOptions: { globals: { ...globals.browser, ...globals.node, }, parserOptions: { project: './tsconfig.eslint.json', tsconfigRootDir: import.meta.dirname, }, }, rules: { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-floating-promises': [ 'error', { ignoreIIFE: true, ignoreVoid: true, }, ], '@typescript-eslint/no-misused-promises': [ 'error', { checksVoidReturn: { attributes: false, }, }, ], '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', destructuredArrayIgnorePattern: '^_', varsIgnorePattern: '^_', }, ], 'react-hooks/refs': 'warn', 'react-hooks/set-state-in-effect': 'warn', 'react-refresh/only-export-components': 'warn', }, }, { files: ['src/**/*.test.{ts,tsx}', 'tests/**/*.{ts,tsx}'], rules: { '@typescript-eslint/no-floating-promises': 'off', }, }, )