/** @type {import("eslint").Linter.Config} */ module.exports = { parserOptions: { // 指定ESLint可以解析JSX语法 ecmaVersion: 'latest', sourceType: 'module', // React启用jsx ecmaFeatures: { jsx: true, }, }, extends: [ // airbnb规范 // https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb 'airbnb', // 兼容typescript的airbnb规范 // https://github.com/iamturns/eslint-config-airbnb-typescript 'airbnb-typescript', // react hooks的airbnb规范 'airbnb/hooks', './base-ts', ], env: { node: true, browser: true, }, plugins: ['@typescript-eslint', 'react-refresh', 'import', 'unused-imports', 'prettier'], ignorePatterns: [ // Ignore dotfiles 'node_modules/', 'dist/', ], overrides: [ { files: ['*.js?(x)', '*.ts?(x)', '*.json'], }, ], rules: { /* ********************************** React and Hooks ********************************** */ 'react/jsx-uses-react': 1, 'react/jsx-uses-vars': 1, 'react/jsx-no-useless-fragment': 0, 'react/display-name': 0, 'react/button-has-type': 0, 'react/prop-types': 0, 'react/jsx-props-no-spreading': 0, 'react/destructuring-assignment': 0, 'react/static-property-placement': 0, 'react/react-in-jsx-scope': 0, 'react/require-default-props': 0, 'react/jsx-filename-extension': [1, { extensions: ['.jsx', '.tsx'] }], 'react/function-component-definition': 0, 'react-hooks/exhaustive-deps': 0, /* ********************************** jax-a11y ********************************** */ 'jsx-a11y/anchor-is-valid': 0, 'jsx-a11y/no-static-element-interactions': 0, 'jsx-a11y/click-events-have-key-events': 0, 'jsx-a11y/label-has-associated-control': [ 'error', { required: { some: ['nesting', 'id'], }, }, ], }, };