UNPKG

@ctrl/eslint-config-biome

Version:
371 lines (348 loc) 10.9 kB
import typescriptEslint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; import importPlugin from 'eslint-plugin-import-x'; import simpleImportSort from 'eslint-plugin-simple-import-sort'; import globals from 'globals'; import tseslint from 'typescript-eslint'; const tsEslintConfig = tseslint.config( { plugins: { '@typescript-eslint': typescriptEslint }, files: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'], languageOptions: { parser: tsParser, parserOptions: { projectService: true, ecmaFeatures: { modules: true }, ecmaVersion: 'latest', project: './tsconfig.json', warnOnUnsupportedTypeScriptVersion: false, }, globals: { ...globals.node, }, sourceType: 'module', }, rules: { '@typescript-eslint/no-unsafe-function-type': ['error'], '@typescript-eslint/no-wrapper-object-types': ['error'], '@typescript-eslint/adjacent-overload-signatures': ['error'], '@typescript-eslint/await-thenable': ['error'], '@typescript-eslint/ban-tslint-comment': ['error'], '@typescript-eslint/class-literal-property-style': ['error', 'getters'], '@typescript-eslint/consistent-generic-constructors': ['error', 'constructor'], '@typescript-eslint/consistent-indexed-object-style': ['error'], '@typescript-eslint/consistent-type-assertions': [ 'error', { assertionStyle: 'as', objectLiteralTypeAssertions: 'allow-as-parameter', }, ], '@typescript-eslint/member-ordering': [ 'error', { default: [ 'signature', 'public-static-field', 'public-static-method', 'protected-static-field', 'protected-static-method', 'private-static-field', 'private-static-method', 'static-field', 'static-method', 'public-decorated-field', 'public-instance-field', 'public-abstract-field', 'public-field', 'protected-decorated-field', 'protected-instance-field', 'protected-abstract-field', 'protected-field', 'private-decorated-field', 'private-instance-field', 'private-field', 'instance-field', 'abstract-field', 'decorated-field', 'field', 'public-constructor', 'protected-constructor', 'private-constructor', 'constructor', 'public-decorated-method', 'public-instance-method', 'public-abstract-method', 'public-method', 'protected-decorated-method', 'protected-instance-method', 'protected-abstract-method', 'protected-method', 'private-decorated-method', 'private-instance-method', 'private-method', 'instance-method', 'abstract-method', 'decorated-method', 'method', ], }, ], '@typescript-eslint/no-base-to-string': ['error'], '@typescript-eslint/no-array-constructor': ['error'], '@typescript-eslint/no-array-delete': ['error'], '@typescript-eslint/no-duplicate-enum-values': ['error'], '@typescript-eslint/no-duplicate-type-constituents': ['error'], '@typescript-eslint/no-dynamic-delete': ['error'], '@typescript-eslint/no-loop-func': ['error'], '@typescript-eslint/no-for-in-array': ['error'], '@typescript-eslint/no-meaningless-void-operator': ['error'], '@typescript-eslint/no-misused-promises': [ 'error', { checksConditionals: true, checksVoidReturn: false, }, ], '@typescript-eslint/no-non-null-asserted-nullish-coalescing': ['error'], '@typescript-eslint/no-non-null-asserted-optional-chain': ['error'], '@typescript-eslint/no-require-imports': ['error'], '@typescript-eslint/only-throw-error': [ 'error', { allowThrowingUnknown: true, allowThrowingAny: false, }, ], '@typescript-eslint/no-unnecessary-boolean-literal-compare': ['error'], '@typescript-eslint/no-unnecessary-qualifier': ['error'], '@typescript-eslint/no-unnecessary-type-arguments': ['error'], '@typescript-eslint/no-unnecessary-type-assertion': ['error'], '@typescript-eslint/no-unsafe-enum-comparison': ['error'], '@typescript-eslint/no-var-requires': ['error'], '@typescript-eslint/non-nullable-type-assertion-style': ['error'], '@typescript-eslint/parameter-properties': [ 'error', { prefer: 'parameter-property', }, ], '@typescript-eslint/prefer-find': ['error'], '@typescript-eslint/prefer-includes': ['error'], '@typescript-eslint/prefer-promise-reject-errors': ['error'], '@typescript-eslint/prefer-readonly': ['error'], '@typescript-eslint/prefer-reduce-type-parameter': ['error'], '@typescript-eslint/prefer-string-starts-ends-with': ['error'], '@typescript-eslint/ban-ts-comment': [ 'error', { 'ts-expect-error': 'allow-with-description', minimumDescriptionLength: 4, }, ], '@typescript-eslint/no-unnecessary-parameter-property-assignment': 'error', '@typescript-eslint/restrict-template-expressions': [ 'error', { allowNumber: true, }, ], '@typescript-eslint/return-await': ['error'], '@typescript-eslint/require-array-sort-compare': [ 'error', { ignoreStringArrays: true, }, ], '@typescript-eslint/switch-exhaustiveness-check': [ 'error', { allowDefaultCaseForExhaustiveSwitch: false, requireDefaultForNonUnion: true, }, ], '@typescript-eslint/triple-slash-reference': [ 'error', { path: 'never', types: 'never', lib: 'never', }, ], '@typescript-eslint/prefer-regexp-exec': ['error'], '@typescript-eslint/prefer-return-this-type': ['error'], '@typescript-eslint/unified-signatures': [ 'error', { ignoreDifferentlyNamedParameters: true, }, ], 'no-dupe-else-if': ['error'], 'no-invalid-regexp': ['error'], 'no-promise-executor-return': ['error'], 'no-template-curly-in-string': ['error'], 'no-unreachable-loop': ['error'], 'no-useless-backreference': ['error'], 'no-unexpected-multiline': ['error'], 'accessor-pairs': [ 'error', { enforceForClassMembers: true, getWithoutSet: false, setWithoutGet: true, }, ], 'array-callback-return': [ 'error', { allowImplicit: true, checkForEach: false, allowVoid: false, }, ], 'block-scoped-var': ['error'], 'grouped-accessor-pairs': ['error', 'getBeforeSet'], 'guard-for-in': ['error'], 'no-alert': ['error'], 'no-caller': ['error'], 'no-eq-null': ['error'], 'no-extend-native': ['error'], 'no-extra-bind': ['error'], 'no-implicit-coercion': ['error'], 'no-implicit-globals': ['error'], 'no-implied-eval': ['error'], 'no-iterator': ['error'], 'no-multi-str': ['error'], 'no-new-func': ['error'], 'no-object-constructor': ['error'], 'no-new': ['error'], 'no-octal-escape': ['error'], 'no-octal': ['error'], 'no-proto': ['error'], 'no-return-assign': ['error', 'always'], 'no-return-await': ['error'], 'no-script-url': ['error'], 'no-unmodified-loop-condition': ['error'], 'no-useless-call': ['error'], 'no-useless-escape': ['error'], 'no-useless-return': ['error'], radix: ['error'], 'no-delete-var': ['error'], 'no-undef-init': ['error'], 'no-buffer-constructor': ['error'], 'func-name-matching': [ 'error', { considerPropertyDescriptor: true, }, ], 'max-depth': ['warn'], 'max-nested-callbacks': ['warn', 4], 'max-params': [ 'warn', { max: 4, }, ], 'max-statements-per-line': ['error'], 'new-cap': [ 'error', { newIsCap: true, capIsNew: true, properties: true, }, ], 'no-bitwise': ['error'], 'no-multi-assign': ['error'], 'one-var-declaration-per-line': ['error'], 'prefer-object-spread': ['error'], 'unicode-bom': ['error', 'never'], 'no-constant-binary-expression': ['error'], 'no-useless-computed-key': [ 'error', { enforceForClassMembers: true, }, ], 'object-shorthand': [ 'error', 'always', { avoidExplicitReturnArrows: true, }, ], 'prefer-destructuring': [ 'error', { VariableDeclarator: { array: false, object: true, }, AssignmentExpression: { array: false, object: false, }, }, { enforceForRenamedProperties: false, }, ], 'prefer-object-has-own': ['error'], 'prefer-spread': ['error'], 'symbol-description': ['error'], }, }, { plugins: { 'simple-import-sort': simpleImportSort, }, files: [ '**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts', '**/*.mjs', '**/*.cjs', '**/*.js', '**/*.jsx', ], rules: { 'simple-import-sort/imports': [ 'error', { groups: [ ['^\\u0000'], ['^node:.*$'], [ '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)', ], ['^react', '^@?\\w'], ['^(@ctrl)(/.*|$)'], ['^\\.\\.(?!/?$)', '^\\.\\./?$'], ['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'], ], }, ], }, }, { plugins: { import: importPlugin, }, files: [ '**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts', '**/*.mjs', '**/*.cjs', '**/*.js', '**/*.jsx', ], rules: { 'import/no-duplicates': ['error', { considerQueryString: true }], }, }, ); export default tsEslintConfig;