eslint-config.yaml (185 lines of code) (raw):
---
env:
es2020: true
jest: true
node: true
plugins:
- '@typescript-eslint'
- import
- prettier
parser: '@typescript-eslint/parser'
parserOptions:
ecmaVersion: 2020
impliedStrict: true
sourceType: script
project: ./**/tsconfig.json
extends:
- eslint:recommended
- plugin:@typescript-eslint/eslint-recommended
- plugin:@typescript-eslint/recommended
- plugin:@typescript-eslint/recommended-requiring-type-checking
- plugin:import/typescript
- prettier
- plugin:prettier/recommended
settings:
import/parsers:
'@typescript-eslint/parser': ['.ts', '.tsx']
import/resolver:
node: {}
typescript:
project: ./**/tsconfig.json
ignorePatterns:
# Ignore Jest configuration file (it's excluded from tsconfig.json, so it's problematic!)
- jest.config.ts
rules:
# Custom Configurations
'prettier/prettier':
- error
'@typescript-eslint/array-type':
- error
- default: array-simple
readonly: array-simple
'@typescript-eslint/await-thenable':
- error
'@typescript-eslint/explicit-module-boundary-types':
- off
'@typescript-eslint/explicit-member-accessibility':
- error
'@typescript-eslint/member-ordering':
- error
- default:
- static-field
- static-method
- instance-field
- constructor
- instance-method
'@typescript-eslint/no-empty-function':
- error
- allow: [constructors]
'@typescript-eslint/no-floating-promises':
- error
'@typescript-eslint/no-for-in-array':
- error
'@typescript-eslint/no-misused-promises':
- error
'@typescript-eslint/no-require-imports':
- error
'@typescript-eslint/no-unsafe-assignment':
- off
'@typescript-eslint/no-unsafe-call':
- off
'@typescript-eslint/no-unsafe-member-access':
- off
'@typescript-eslint/no-unsafe-return':
- off
'@typescript-eslint/no-unused-vars':
- error
- args: all
argsIgnorePattern: ^_
caughtErrors: all
vars: all
varsIgnorePattern: ^_
'@typescript-eslint/no-useless-constructor':
- error
'@typescript-eslint/prefer-for-of':
- error
'@typescript-eslint/prefer-nullish-coalescing':
- error
- ignoreMixedLogicalExpressions: true
'@typescript-eslint/prefer-readonly':
- error
'@typescript-eslint/promise-function-async':
- error
- checkArrowFunctions: false
'@typescript-eslint/restrict-template-expressions':
- error
- allowNumber: true
allowBoolean: true
allowAny: true
allowNullish: true
'@typescript-eslint/require-await':
- error
'@typescript-eslint/return-await':
- error
- 'in-try-catch'
'@typescript-eslint/switch-exhaustiveness-check':
- error
'complexity':
- off
'dot-notation':
- error
'eqeqeq':
- error
- always
- null: ignore
'import/no-duplicates':
- error
'import/no-extraneous-dependencies':
- error
- devDependencies: # Only allow importing devDependencies from tests
- '**/test/**'
- '**/*.test.ts'
optionalDependencies: false # Disallow importing optional dependencies (those shouldn't be used here)
peerDependencies: false # Disallow importing peer dependencies (those shouldn't be used here)
'import/no-unresolved':
- error
- ignore:
- '@jsii/check-node/run' # @jsii/check-node uses an export map, which import/resolver does not (yet) support (https://github.com/import-js/eslint-plugin-import/issues/1868)
- worker_threads # This isn't supported in all node versions (import is always guarded)
'import/order':
- error
- alphabetize:
order: asc
caseInsensitive: true
groups:
- [builtin, external]
- [parent, sibling]
- [index, unknown]
newlines-between: always
'no-alert':
- error
'no-await-in-loop':
- error
'no-caller':
- error
'no-else-return':
- error
- allowElseIf: true
'no-eval':
- error
'no-extra-bind':
- error
'no-implied-eval':
- error
'no-lone-blocks':
- error
'no-new-symbol':
- error
'no-proto':
- error
'no-restricted-properties':
- error
- { property: "substr", message: "Use .slice instead of .substr." }
'no-return-await':
- error
'no-unused-expressions':
- error
'no-useless-call':
- error
'no-var':
- error
'prefer-const':
- error
'prefer-template':
- error
'eol-last':
- error
- always
# Disabled rules
'@typescript-eslint/explicit-function-return-type': off
'@typescript-eslint/interface-name-prefix': off
'@typescript-eslint/no-explicit-any': off
'@typescript-eslint/no-non-null-assertion': off
'@typescript-eslint/no-use-before-define': off
'@typescript-eslint/unbound-method': off
'no-case-declarations': off
'require-atomic-updates': off
# This is not a bad rule but it got sprung on us and our code loudly fails it
# Disable to get the eslint upgrade to pass.
'@typescript-eslint/no-unsafe-argument': off
# 'consistent-return' actually decreases safety. Its use will enforce useless `throws`
# statements, forcing a runtime error that occlude cases where the TypeScript type
# checker would actually have caught something like a non-exhaustive `switch` statement
# at compile time.
'consistent-return': off