UNPKG

eslint-config-ts-lib

Version:

ts-lib-scripts创建的ts库项目使用的ESLint配置

153 lines (149 loc) 3.89 kB
const functionRules = require('./rules/function-rules'); const varRules = require('./rules/var-rules'); module.exports = { parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 'latest', sourceType: 'module', }, env: { browser: true, node: true, }, extends: [ 'eslint:recommended', 'plugin:react/recommended', 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended', 'plugin:@typescript-eslint/recommended', 'plugin:jsdoc/recommended', 'prettier', ], plugins: [ '@typescript-eslint', 'react-hooks', 'simple-import-sort', 'import', 'jsdoc', ], settings: { react: { version: '17' }, import: { parsers: { '@typescript-eslint/parser': ['.js', '.ts', '.tsx'], }, cache: { lifetime: Infinity }, }, jsdoc: { mode: 'jsdoc', }, }, rules: { ...functionRules, 'no-console': ['warn', { allow: ['warn', 'error'] }], 'simple-import-sort/imports': 'error', 'simple-import-sort/exports': 'error', 'import/first': 'error', 'import/newline-after-import': 'error', }, overrides: [ { files: ['*.js'], rules: { '@typescript-eslint/no-var-requires': 'off', }, }, { files: ['*.ts', '*.tsx'], rules: { 'no-duplicate-imports': 'off', '@typescript-eslint/no-duplicate-imports': ['error'], 'no-dupe-class-members': 'off', '@typescript-eslint/no-dupe-class-members': ['error'], 'no-redeclare': 'off', '@typescript-eslint/no-redeclare': [ 'error', { builtinGlobals: false, }, ], 'no-invalid-this': 'off', '@typescript-eslint/no-invalid-this': ['error'], 'no-loop-func': 'off', '@typescript-eslint/no-loop-func': ['error'], 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': ['error'], 'no-loss-of-precision': 'off', '@typescript-eslint/no-loss-of-precision': ['error'], '@typescript-eslint/array-type': ['error'], '@typescript-eslint/consistent-type-imports': ['error'], '@typescript-eslint/explicit-function-return-type': ['error'], '@typescript-eslint/no-require-imports': ['error'], '@typescript-eslint/prefer-optional-chain': ['error'], '@typescript-eslint/type-annotation-spacing': ['error'], 'jsdoc/require-returns-type': 'off', 'jsdoc/require-param-type': 'off', 'jsdoc/require-property-type': 'off', 'jsdoc/require-returns': 'off', '@typescript-eslint/no-explicit-any': 'off', 'react/prop-types': 'off', 'jsdoc/require-jsdoc': [ 'error', { contexts: [ 'TSInterfaceDeclaration', 'TSMethodSignature', 'TSPropertySignature', ], require: { ClassDeclaration: true, ClassExpression: true, MethodDefinition: true, }, }, ], 'jsdoc/check-tag-names': [ 'warn', { definedTags: ['jest-environment'], }, ], ...varRules, }, settings: { jsdoc: { mode: 'typescript', }, }, }, { files: ['*.worker.js', '*.worker.ts'], env: { browser: false, node: false, worker: true, }, }, { files: [ '*.test.js', '*.spec.js', '*.test.ts', '*.spec.ts', '*.test.tsx', '*.spec.tsx', '*/tests/*.js', '*/tests/*.ts', '*/tests/*.tsx', '*.stories.tsx', '*/stories/*', ], env: { jest: true, }, rules: { 'no-console': 'off', }, }, ], };