123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- import js from '@eslint/js';
- import pluginVue from 'eslint-plugin-vue';
- import * as parserVue from 'vue-eslint-parser';
- import configPrettier from 'eslint-config-prettier';
- import pluginPrettier from 'eslint-plugin-prettier';
- import pluginImport from 'eslint-plugin-import';
- import { defineFlatConfig } from 'eslint-define-config';
- import * as parserTypeScript from '@typescript-eslint/parser';
- import pluginTypeScript from '@typescript-eslint/eslint-plugin';
- import unusedImports from 'eslint-plugin-unused-imports';
- export default defineFlatConfig([
- {
- ...js.configs.recommended,
- plugins: {
- prettier: pluginPrettier,
- },
- rules: {
- ...configPrettier.rules,
- ...pluginPrettier.configs.recommended.rules,
- 'no-debugger': 'off',
- 'no-unused-vars': [
- 'error',
- {
- argsIgnorePattern: '^_',
- varsIgnorePattern: '^_',
- },
- ],
- 'prettier/prettier': [
- 'error',
- {
- endOfLine: 'auto',
- },
- ],
- },
- },
- {
- files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'],
- languageOptions: {
- parser: parserTypeScript,
- parserOptions: {
- sourceType: 'module',
- },
- },
- plugins: {
- '@typescript-eslint': pluginTypeScript,
- },
- rules: {
- ...pluginTypeScript.configs.strict.rules,
- '@typescript-eslint/ban-types': 'off',
- '@typescript-eslint/no-unused-vars': 'off',
- '@typescript-eslint/no-unused-expressions': 'off',
- '@typescript-eslint/no-invalid-void-type': 'off',
- '@typescript-eslint/no-redeclare': 'error',
- '@typescript-eslint/ban-ts-comment': 'off',
- '@typescript-eslint/prefer-ts-expect-error': 'off',
- '@typescript-eslint/no-explicit-any': 'off',
- '@typescript-eslint/prefer-as-const': 'warn',
- '@typescript-eslint/no-empty-function': 'off',
- '@typescript-eslint/no-empty-object-type': 'off',
- '@typescript-eslint/no-non-null-assertion': 'off',
- '@typescript-eslint/no-import-type-side-effects': 'error',
- '@typescript-eslint/explicit-module-boundary-types': 'off',
- '@typescript-eslint/consistent-type-imports': [
- 'error',
- { disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' },
- ],
- '@typescript-eslint/prefer-literal-enum-member': ['error', { allowBitwiseExpressions: true }],
- },
- },
- {
- files: ['**/*.d.ts'],
- rules: {
- 'eslint-comments/no-unlimited-disable': 'off',
- 'import/no-duplicates': 'off',
- 'unused-imports/no-unused-vars': 'off',
- },
- },
- {
- files: ['**/*.?([cm])js'],
- rules: {
- '@typescript-eslint/no-require-imports': 'off',
- '@typescript-eslint/no-var-requires': 'off',
- },
- },
- {
- files: ['**/*.vue'],
- languageOptions: {
- parser: parserVue,
- parserOptions: {
- ecmaFeatures: {
- jsx: true,
- },
- extraFileExtensions: ['.vue'],
- parser: parserTypeScript,
- sourceType: 'module',
- },
- },
- plugins: {
- vue: pluginVue,
- },
- processor: pluginVue.processors['.vue'],
- rules: {
- ...pluginVue.configs.base.rules,
- ...pluginVue.configs['vue3-essential'].rules,
- ...pluginVue.configs['vue3-recommended'].rules,
- 'no-undef': 'off',
- 'no-unused-vars': 'off',
- 'vue/no-v-html': 'off',
- 'vue/require-default-prop': 'off',
- 'vue/require-explicit-emits': 'off',
- 'vue/multi-word-component-names': 'off',
- 'vue/no-setup-props-reactivity-loss': 'off',
- 'vue/html-self-closing': [
- 'error',
- {
- html: {
- void: 'always',
- normal: 'always',
- component: 'always',
- },
- svg: 'always',
- math: 'always',
- },
- ],
- },
- },
- {
- files: ['**/*.vue', '**/*.?([cm])ts', '**/*.?([cm])tsx'],
- plugins: {
- import: pluginImport,
- 'unused-imports': unusedImports,
- },
- rules: {
- 'import/first': 'error',
- 'import/no-duplicates': 'error',
- 'import/order': [
- 'error',
- {
- groups: [
- 'builtin',
- 'external',
- 'internal',
- 'parent',
- 'sibling',
- 'index',
- 'object',
- 'type',
- ],
- pathGroups: [
- {
- pattern: 'vue',
- group: 'external',
- position: 'before',
- },
- {
- pattern: '@vue/**',
- group: 'external',
- position: 'before',
- },
- {
- pattern: 'ant-design-vue',
- group: 'internal',
- },
- ],
- pathGroupsExcludedImportTypes: ['type'],
- },
- ],
- 'unused-imports/no-unused-imports': 'error',
- // 如需保存时自动删除未引用代码,可注释掉该规则
- 'unused-imports/no-unused-vars': [
- 'warn',
- {
- vars: 'all',
- varsIgnorePattern: '^_',
- args: 'after-used',
- argsIgnorePattern: '^_',
- },
- ],
- },
- },
- {
- linterOptions: {
- reportUnusedDisableDirectives: 'off',
- },
- ignores: [
- 'src/assets/**',
- '*.sh',
- 'node_modules',
- '*.md',
- '*.woff',
- '*.ttf',
- '.vscode',
- '.idea',
- 'dist',
- '/public',
- '/docs',
- '.husky',
- '.local',
- '/bin',
- 'Dockerfile',
- ],
- },
- ]);
|