import pluginCss from '@eslint/css'
import pluginJs from '@eslint/js'
import pluginJson from '@eslint/json'
import pluginMarkdown from '@eslint/markdown'
import { defineConfig, globalIgnores } from 'eslint/config'
import pluginPrettier from 'eslint-plugin-prettier'
import pluginReact from 'eslint-plugin-react'
import pluginReactHooks from 'eslint-plugin-react-hooks'
import globals from 'globals'
import { tailwind4 } from 'tailwind-csstree'
import pluginTs from 'typescript-eslint'
import prettierConfig from './prettier.config.mts'
const ignores = globalIgnores(['dist/', 'tsconfig.json', 'biome.jsonc', 'eslint.config.mts', '.trae/rules/project_rules.md', 'CLAUDE.md'])
const javascript = { files: ['**/*.{js,mjs,cjs,jsx}'], languageOptions: { globals: globals.browser }, ...pluginJs.configs.recommended }
files: ['**/*.{ts,tsx,mts,cts}'],
...pluginTs.configs.recommended[2],
ecmaVersion: 'latest', // 2024,
ecmaFeatures: { jsx: true },
globals: globals.browser,
plugins: { '@typescript-eslint': pluginTs.plugin },
...pluginTs.configs.recommended[2].rules,
'@typescript-eslint/no-unused-vars': ['off'],
'@typescript-eslint/no-explicit-any': ['off'],
'@typescript-eslint/ban-ts-comment': ['off'],
'@typescript-eslint/ban-types': ['off'],
'@typescript-eslint/naming-convention': [
{ selector: 'enum', format: ['PascalCase'] },
{ selector: 'enumMember', format: ['PascalCase'] },
files: ['**/*.{jsx,tsx}'],
...pluginReact.configs.flat.recommended,
plugins: { react: pluginReact, 'react-hooks': pluginReactHooks },
languageOptions: { globals: globals.browser },
settings: { react: { version: 'detect' } },
...pluginReact.configs.flat.recommended.rules,
...pluginReactHooks.configs.flat.recommended.rules,
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'react/display-name': 'off',
'react-hooks/exhaustive-deps': 'error',
files: ['**/*.{cjs,mjs,mts}', 'commitlint.config.*'],
ecmaVersion: 'latest', // 2024,
/** 6. JSON / JSONC / JSON5 */
const jsonBase = { plugins: { json: pluginJson }, extends: ['json/recommended'] }
const json = { ...jsonBase, files: ['**/*.json'], language: 'json/json' }
const jsonc = { ...jsonBase, files: ['**/*.jsonc'], language: 'json/jsonc' }
const json5 = { ...jsonBase, files: ['**/*.json5'], language: 'json/json5' }
plugins: { markdown: pluginMarkdown },
language: 'markdown/commonmark',
extends: ['markdown/recommended'],
// processor: 'markdown/markdown',
rules: { 'markdown/fenced-code-language': 'off' },
/** 8. CSS + Tailwind v4 */
plugins: { css: pluginCss },
languageOptions: { customSyntax: tailwind4, tolerant: true },
rules: { 'css/no-empty-blocks': 'error', 'css/no-browser-hacks': 'off', 'css/no-unknown-animations': 'off' },
files: ['**/*.{js,jsx,ts,tsx,mjs,cjs,mts,cts}'],
plugins: { prettier: pluginPrettier },
rules: { 'prettier/prettier': ['warn', prettierConfig] },
/** 10. 导出最终配置(顺序极其关键) */
export default defineConfig([ignores, javascript, typescript, react, node, json, jsonc, json5, markdown, css, prettier])