372 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			372 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /** @type {(import('eslint').Linter.Config)[]} */
 | ||
| module.exports = [
 | ||
|   {
 | ||
|     files: ['**/*.?(m|c)ts?(x)'],
 | ||
|     rules: {
 | ||
|       '@typescript-eslint/no-var-requires': 'off',
 | ||
|       '@typescript-eslint/prefer-namespace-keyword': 'off',
 | ||
|       '@typescript-eslint/dot-notation': 'error',
 | ||
|       '@typescript-eslint/require-await': 'error',
 | ||
| 
 | ||
|       'max-lines': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           max: 500,
 | ||
|           skipComments: true,
 | ||
|           skipBlankLines: true,
 | ||
|         },
 | ||
|       ],
 | ||
|       '@typescript-eslint/no-array-constructor': 'error',
 | ||
|       '@typescript-eslint/prefer-for-of': 'warn',
 | ||
|       '@typescript-eslint/prefer-literal-enum-member': 'error',
 | ||
|       '@typescript-eslint/no-duplicate-enum-values': 'error',
 | ||
|       '@typescript-eslint/adjacent-overload-signatures': 'error',
 | ||
|       '@typescript-eslint/unified-signatures': 'error',
 | ||
|       '@typescript-eslint/no-this-alias': 'error',
 | ||
|       '@typescript-eslint/method-signature-style': 'error',
 | ||
|       '@typescript-eslint/no-misused-new': 'error',
 | ||
|       '@typescript-eslint/consistent-type-assertions': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           assertionStyle: 'as',
 | ||
|           objectLiteralTypeAssertions: 'never',
 | ||
|         },
 | ||
|       ],
 | ||
|       '@typescript-eslint/no-non-null-assertion': 'error',
 | ||
|       '@typescript-eslint/no-extra-non-null-assertion': 'error',
 | ||
|       '@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
 | ||
|       '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error',
 | ||
|       '@typescript-eslint/ban-ts-comment': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           'ts-expect-error': 'allow-with-description',
 | ||
|         },
 | ||
|       ],
 | ||
|       '@typescript-eslint/prefer-ts-expect-error': 'error',
 | ||
|       '@typescript-eslint/no-inferrable-types': 'error',
 | ||
|       '@typescript-eslint/explicit-module-boundary-types': 'off',
 | ||
|       '@typescript-eslint/prefer-as-const': 'error',
 | ||
|       '@typescript-eslint/consistent-type-definitions': ['error', 'interface'],
 | ||
|       '@typescript-eslint/no-empty-interface': 'error',
 | ||
|       '@typescript-eslint/no-explicit-any': 'error',
 | ||
|       '@typescript-eslint/no-unnecessary-type-constraint': 'error',
 | ||
|       '@typescript-eslint/no-invalid-void-type': 'error',
 | ||
|       '@typescript-eslint/no-namespace': 'error',
 | ||
|       '@typescript-eslint/no-require-imports': 'error',
 | ||
|       '@typescript-eslint/consistent-type-imports': 'error',
 | ||
|       '@typescript-eslint/no-unused-vars': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           vars: 'all',
 | ||
|           args: 'none', // function arguments should not force to match this rule.
 | ||
|           argsIgnorePattern: '^_', // 规范允许下划线
 | ||
|           ignoreRestSiblings: true, //使用rest语法(如 `var { foo, ...rest } = data`) 忽略foo。
 | ||
|           destructuredArrayIgnorePattern: '^_', //结构数组允许使用_
 | ||
|           caughtErrors: 'none',
 | ||
|           // "caughtErrorsIgnorePattern": "^e$"
 | ||
|         },
 | ||
|       ],
 | ||
|       '@stylistic/ts/quotes': [
 | ||
|         'error',
 | ||
|         'single',
 | ||
|         {
 | ||
|           avoidEscape: true,
 | ||
|         },
 | ||
|       ],
 | ||
|       '@typescript-eslint/no-magic-numbers': [
 | ||
|         'warn',
 | ||
|         {
 | ||
|           ignoreArrayIndexes: true,
 | ||
|           ignoreDefaultValues: true,
 | ||
|           ignoreEnums: true,
 | ||
|           ignoreNumericLiteralTypes: true,
 | ||
|           enforceConst: true,
 | ||
|           ignore: [-1, 0, 1],
 | ||
|           ignoreTypeIndexes: true,
 | ||
|           ignoreReadonlyClassProperties: true,
 | ||
|           ignoreClassFieldInitialValues: true,
 | ||
|         },
 | ||
|       ],
 | ||
|       '@stylistic/ts/no-extra-semi': 'error',
 | ||
|       '@typescript-eslint/no-dupe-class-members': 'error',
 | ||
|       '@typescript-eslint/no-useless-constructor': 'error',
 | ||
|       '@typescript-eslint/default-param-last': 'error',
 | ||
|       '@typescript-eslint/no-loss-of-precision': 'error',
 | ||
|       '@stylistic/ts/comma-dangle': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           arrays: 'always-multiline',
 | ||
|           objects: 'always-multiline',
 | ||
|           imports: 'always-multiline',
 | ||
|           exports: 'always-multiline',
 | ||
|           enums: 'always-multiline',
 | ||
|           generics: 'ignore',
 | ||
|           tuples: 'always-multiline',
 | ||
|           functions: 'always-multiline',
 | ||
|         },
 | ||
|       ],
 | ||
|       '@typescript-eslint/no-empty-function': 'error',
 | ||
|       '@typescript-eslint/no-extraneous-class': 'error',
 | ||
|       'no-import-assign': 'off',
 | ||
|       'no-undef': 'off',
 | ||
|       'dot-notation': 'off',
 | ||
|       'constructor-super': 'off',
 | ||
|       'no-this-before-super': 'off',
 | ||
|       'getter-return': 'off',
 | ||
|       'no-setter-return': 'off',
 | ||
|       'no-func-assign': 'off',
 | ||
|       'no-unsafe-negation': 'off',
 | ||
|       'valid-typeof': 'off',
 | ||
|       'no-unreachable': 'off',
 | ||
|       'no-throw-literal': 'off',
 | ||
|       'no-implied-eval': 'off',
 | ||
|       'no-new-symbol': 'off',
 | ||
|       'no-obj-calls': 'off',
 | ||
|       camelcase: 'off',
 | ||
|       'no-const-assign': 'off',
 | ||
|       'no-dupe-args': 'off',
 | ||
|       'no-dupe-class-members': 'off',
 | ||
|       'no-dupe-keys': 'off',
 | ||
|       'no-redeclare': 'off',
 | ||
|       'no-array-constructor': 'off',
 | ||
|       'no-empty-function': 'off',
 | ||
|       'no-extra-semi': 'off',
 | ||
|       'no-loss-of-precision': 'off',
 | ||
|       'no-unused-vars': 'off',
 | ||
|       'default-param-last': 'off',
 | ||
|       'no-useless-constructor': 'off',
 | ||
|       quotes: 'off',
 | ||
|       'comma-dangle': 'off',
 | ||
|       indent: 'off',
 | ||
|       'no-magic-numbers': 'off',
 | ||
|       '@typescript-eslint/naming-convention': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           selector: ['default', 'variableLike'],
 | ||
|           format: ['camelCase', 'UPPER_CASE'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: ['class', 'interface', 'typeLike'],
 | ||
|           format: ['PascalCase'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: ['variable'],
 | ||
|           format: ['UPPER_CASE', 'camelCase'],
 | ||
|           modifiers: ['global', 'exported'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'objectLiteralProperty',
 | ||
|           format: null,
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'enumMember',
 | ||
|           format: ['UPPER_CASE', 'PascalCase'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'typeProperty',
 | ||
|           format: ['camelCase', 'snake_case'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'function',
 | ||
|           format: ['camelCase'],
 | ||
|           leadingUnderscore: 'forbid',
 | ||
|           trailingUnderscore: 'forbid',
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'parameter',
 | ||
|           format: ['camelCase'],
 | ||
|           leadingUnderscore: 'allow',
 | ||
|           trailingUnderscore: 'forbid',
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'variable',
 | ||
|           modifiers: ['destructured'],
 | ||
|           format: [
 | ||
|             'camelCase',
 | ||
|             'PascalCase',
 | ||
|             'snake_case',
 | ||
|             'strictCamelCase',
 | ||
|             'StrictPascalCase',
 | ||
|             'UPPER_CASE',
 | ||
|           ],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'import',
 | ||
|           format: ['camelCase', 'PascalCase', 'UPPER_CASE'],
 | ||
|         },
 | ||
|       ],
 | ||
|       'unicorn/filename-case': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           cases: {
 | ||
|             kebabCase: true,
 | ||
|           },
 | ||
|         },
 | ||
|       ],
 | ||
|       'max-lines-per-function': [
 | ||
|         'warn',
 | ||
|         {
 | ||
|           max: 120,
 | ||
|           IIFEs: true,
 | ||
|         },
 | ||
|       ],
 | ||
|     },
 | ||
|     languageOptions: {
 | ||
|       parser: require('@typescript-eslint/parser'),
 | ||
|       parserOptions: {
 | ||
|         ecmaVersion: 11,
 | ||
|         projectService: true,
 | ||
|         sourceType: 'module',
 | ||
|         ecmaFeatures: {
 | ||
|           jsx: true,
 | ||
|           legacyDecorators: true,
 | ||
|         },
 | ||
|       },
 | ||
|     },
 | ||
|   },
 | ||
|   {
 | ||
|     files: ['**/*.?(m|c)tsx'],
 | ||
|     rules: {
 | ||
|       '@typescript-eslint/naming-convention': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           selector: ['default', 'variableLike'],
 | ||
|           format: ['camelCase', 'UPPER_CASE'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: ['class', 'interface', 'typeLike'],
 | ||
|           format: ['PascalCase'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: ['variable'],
 | ||
|           format: ['UPPER_CASE', 'camelCase', 'PascalCase'],
 | ||
|           modifiers: ['global', 'exported'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'objectLiteralProperty',
 | ||
|           format: null,
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'enumMember',
 | ||
|           format: ['UPPER_CASE', 'PascalCase'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'typeProperty',
 | ||
|           format: ['camelCase', 'snake_case'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'parameter',
 | ||
|           format: ['camelCase'],
 | ||
|           leadingUnderscore: 'allow',
 | ||
|           trailingUnderscore: 'forbid',
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'parameter',
 | ||
|           format: ['camelCase', 'snake_case'],
 | ||
|           modifiers: ['destructured'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'variable',
 | ||
|           modifiers: ['destructured'],
 | ||
|           format: [
 | ||
|             'camelCase',
 | ||
|             'PascalCase',
 | ||
|             'snake_case',
 | ||
|             'strictCamelCase',
 | ||
|             'StrictPascalCase',
 | ||
|             'UPPER_CASE',
 | ||
|           ],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'import',
 | ||
|           format: ['camelCase', 'PascalCase', 'UPPER_CASE'],
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'function',
 | ||
|           format: ['camelCase', 'PascalCase'],
 | ||
|           leadingUnderscore: 'forbid',
 | ||
|           trailingUnderscore: 'forbid',
 | ||
|         },
 | ||
|         {
 | ||
|           selector: 'variable',
 | ||
|           format: ['camelCase', 'PascalCase', 'UPPER_CASE'],
 | ||
|           leadingUnderscore: 'allow',
 | ||
|         },
 | ||
|       ],
 | ||
|       'unicorn/filename-case': [
 | ||
|         'warn',
 | ||
|         {
 | ||
|           cases: {
 | ||
|             kebabCase: true,
 | ||
|             snakeCase: true,
 | ||
|             pascalCase: true,
 | ||
|           },
 | ||
|           ignore: ['^(?!.*?\\.jsx$)(?!.*?\\.tsx$).+'],
 | ||
|         },
 | ||
|       ],
 | ||
|       'max-lines-per-function': [
 | ||
|         'warn',
 | ||
|         {
 | ||
|           max: 300,
 | ||
|           IIFEs: true,
 | ||
|         },
 | ||
|       ],
 | ||
|     },
 | ||
|   },
 | ||
| 
 | ||
|   // TODO: 之前overides的内容,后需可考虑直接合入上面标准配置
 | ||
|   {
 | ||
|     files: ['**/*.?(m|c)ts?(x)'],
 | ||
|     rules: {
 | ||
|       '@typescript-eslint/consistent-type-imports': [
 | ||
|         'error',
 | ||
|         {
 | ||
|           fixStyle: 'inline-type-imports',
 | ||
|         },
 | ||
|       ],
 | ||
|       // 这些规则都是从 packages/config/.eslintrc.react.js 复制迁移过来
 | ||
|       // 后续在做调整
 | ||
|       '@typescript-eslint/no-redundant-type-constituents': 0,
 | ||
|       '@typescript-eslint/no-throw-literal': 'off',
 | ||
|       '@typescript-eslint/no-unnecessary-condition': 0,
 | ||
|       '@typescript-eslint/prefer-optional-chain': 0,
 | ||
|       '@typescript-eslint/indent': 0,
 | ||
|       '@babel/new-cap': 'off',
 | ||
|       '@typescript-eslint/explicit-function-return-type': 'off',
 | ||
|       'no-shadow': 'off',
 | ||
|       '@typescript-eslint/no-shadow': 'error',
 | ||
|       // TODO: 后续开启
 | ||
|       // 'import/no-cycle': 'error',
 | ||
| 
 | ||
|       '@typescript-eslint/prefer-string-starts-ends-with': 0,
 | ||
|       '@typescript-eslint/no-unnecessary-boolean-literal-compare': 0,
 | ||
|       '@typescript-eslint/no-implied-eval': 0, // warning
 | ||
| 
 | ||
|       // TODO: 打开下面这些配置
 | ||
|       // fix: https://stackoverflow.com/questions/63961803/eslint-says-all-enums-in-typescript-app-are-already-declared-in-the-upper-scope
 | ||
|       // 'no-shadow': 'off',
 | ||
|       // '@typescript-eslint/no-shadow': ['error'],
 | ||
|       // '@typescript-eslint/consistent-type-imports': [
 | ||
|       //   'error',
 | ||
|       //   {
 | ||
|       //     fixStyle: 'inline-type-imports',
 | ||
|       //   },
 | ||
|       // ],
 | ||
|       // according to: https://typescript-eslint.io/linting/troubleshooting/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors
 | ||
|       // 'no-undef': 'off',
 | ||
|       // 'no-unused-vars': 'off',
 | ||
|       // '@typescript-eslint/no-unused-vars': [
 | ||
|       //   'error',
 | ||
|       //   {
 | ||
|       //     vars: 'all',
 | ||
|       //     args: 'none', // function arguments should not force to match this rule.
 | ||
|       //     ignoreRestSiblings: false,
 | ||
|       //   },
 | ||
|       // ],
 | ||
|       // complexity: ['error', { max: 15 }],
 | ||
|       // 后面统一使用CustomError后 再开启
 | ||
|       '@coze-arch/no-new-error': 'off',
 | ||
|     },
 | ||
|   },
 | ||
| ];
 |