Skip to content

eslint-config-complete

This is a sharable configuration for ESLint that is intended to be used in TypeScript projects that want to be as safe as possible.

The config is environment-agnostic, meaning that it will work in client-side projects (e.g., React), server-side projects (e.g., Node.js), and so on.

This package is part of the complete-lint meta-linting package. It is recommended that instead of consuming eslint-config-complete directly, you instead list complete-lint as a dependency, as that will install both this config and other goodies.

For installation instructions, see the complete-lint page.

If you do not want to use the complete-lint meta-package, then you can install this config manually. For example, if you use the npm package manager:

Terminal window
npm install --save-dev eslint typescript eslint-plugin-complete

(eslint and typescript are peer-dependencies.)

Here’s an example “eslint.config.mjs” file that loads the base config:

// @ts-check
import { completeConfigBase } from "eslint-config-complete";
import { defineConfig } from "eslint/config";
export default defineConfig(...completeConfigBase);

This package exports two configs:

  • completeConfigBase - The general-purpose config that people should use for TypeScript projects.
  • completeConfigESLintPlugin - Enables extra rules for custom ESLint plugins from eslint-plugin-eslint-plugin. (This should only be used in custom ESLint plugins.)

If you are reading this page, you are likely a user of TypeScript. As you probably know, TypeScript is great because it saves you an enormous amount of time. The hours spent troubleshooting run-time errors caused from small typos have become a thing of the past. Good riddance!

But there are many other code problems that do not have to do with types. For example, ESLint can show you when you forgot to use the await keyword. And it can help show you lines of code that you think are doing something but are not really doing anything. In the same way that you want to use TypeScript to catch as many bugs as possible, you also want to use ESLint with a config that enables lots of good linting rules to catch even more bugs.

ESLint rules can help catch bugs, but they can also help to make your codebase more consistent and adhere to best-practices within the TypeScript ecosystem. Remember that code is read more often than it is written. If you care about your code being the best that it can possibly be, then using ESLint is a must!

eslint-config-complete is one of the most comprehensive ESLint configs out there.

Building an ESLint config from scratch takes many, many hours. ESLint has over 250 rules. typescript-eslint has over 125 rules. And that’s just the beginning.

Don’t bother creating and maintaining a huge ESLint config yourself. We’ve done the work to:

  • Enable every ESLint rule that we can find from trusted sources that provides value.
  • Weed out the rules that don’t apply to TypeScript codebases (because many ESLint rules were written before TypeScript existed).
  • Weed out the rules covered by Prettier (because many ESLint rules were written before Prettier existed).
  • Weed out the rules that are too noisy to provide value (and document them below).

We want to enable as many lint rules as possible, so that we can catch as many bugs as possible. Of course, this is a tradeoff: with more lint rules, we get more false positives. But in general, a few false positives are worth the time saved from investigating and squashing bugs. (More on false positives later.)

In line with this philosophy, our linting config enables nearly all of the recommended rules from both the core ESLint team and the TypeScript ESLint team, as well as some additional rules that catch even more bugs.

This config also assumes that you are using Prettier to format your TypeScript code, which is considered to be best-practice in the ecosystem. Subsequently, all formatting-related rules that conflict with Prettier are disabled. (However, we use a few formatting-related rules that are not handled by Prettier.)

Deploying this ESLint config on an existing codebase can generate a ton of warnings. Fixing them all might seem overwhelming. While some warnings need to be fixed manually, a ton of ESLint rules have “auto-fixers”. This means that the code will fix itself if you run ESLint with the --fix flag. So, by running npx eslint --fix . in the root of your project, you can take care of a lot of the warnings automatically.

Additionally, we recommend that you configure your IDE (e.g., Visual Studio Code) to automatically run --fix whenever you save a file.

Your first reaction to having a bunch of yellow squiggly lines might be to disable any rule that gets in your way. However, even if you think an ESLint warning is superfluous, it is often a sign that your codebase is structured in a bug-prone or non-idiomatic way. Before simply disabling a rule, sometimes it is good to do some research and think carefully if your code can be refactored in some way to be cleaner.

Additionally, some ESLint rules are not about catching bugs, but are about code style and code consistency. If you find the new style to be foreign and weird, it can be tempting to ignore or disable the rule. But before you do that, consider the cost: your codebase will be deviating from others in the TypeScript ecosystem. It is really nice for everyone’s code to adhere to the same look and the same standards!

With that said, with so many ESLint rules turned on, you will undoubtedly come across some false positives. You can quickly take care of these by adding a // eslint-disable-next-line insert-rule-name-here comment. And you can automatically add the comment by selecting “Quick Fix” in Visual Studio Code, which is mapped to Ctrl + . by default.

If you find yourself adding a lot of disable comments for a specific rule, then turn the rule off for the entire project by adding an entry for it in your eslint.config.mjs file: like this:

// @ts-check
import { completeConfigBase } from "eslint-config-complete";
import { defineConfig } from "eslint/config";
export default defineConfig(...completeConfigBase, {
rules: {
// We intentionally use number enums to save bandwidth between the client and server. Number
// enums are almost always safe with the `complete/strict-enums` rule.
"@typescript-eslint/prefer-enum-initializers": "off",
},
});

Some rules won’t make sense for every project and that’s okay!

The legendary Josh Goldberg has an excellent blog explaining why using warnings in ESLint should be avoided. In fact, the ESLint ecosystem has standardized around not using warnings, so this config follows suit.

Furthermore, we especially agree with Josh’s opinion on squigglies: red squigglies should be reserved for TypeScript errors (which are often critical bugs that will cause a run-time error) and yellow squigglies should be reserved for ESLint errors (which are often code-quality issues).

If you use Visual Studio Code, you can accomplish this with the following configuration:

"eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }],

Below, we provide documentation for every rule that is disabled. (We take a blacklist approach rather than a whitelist approach.)

Rule Name Enabled Parent Configs Notes Source File
accessor-pairs base-eslint.js
array-callback-return The checkForEach option is enabled to make the rule stricter. base-eslint.js
arrow-body-style base-eslint.js
block-scoped-var base-eslint.js
camelcase Superseded by the @typescript-eslint/naming-convention rule. (camelcase is used to enforce naming conventions.) base-eslint.js
capitalized-comments Superseded by the complete/complete-sentences-jsdoc and complete/complete-sentences-line-comments rules. base-eslint.js
class-methods-use-this Superseded by the @typescript-eslint/class-methods-use-this rule. base-eslint.js
complexity Disabled since cyclomatic complexity is not a good enough general indicator of code complexity and leads to too many false positives. base-eslint.js
consistent-return Superseded by the @typescript-eslint/consistent-return rule. base-eslint.js
consistent-this base-eslint.js
constructor-super Disabled since this is already enforced by TypeScript (ts(2335) & ts(2377)). base-eslint.js
curly Always requiring curly braces can partially ward against Apple-style if statement bugs. Additionally, this rule needs to be set to “all” to work properly with Prettier. base-eslint.js
default-case Disabled since it would cause the @typescript-eslint/switch-exhaustiveness-check rule to not work properly. base-eslint.js
default-case-last base-eslint.js
default-param-last Superseded by the @typescript-eslint/default-param-last rule. base-eslint.js
dot-notation Superseded by the @typescript-eslint/dot-notation rule. base-eslint.js
eqeqeq Superseded by the complete/eqeqeq-fix rule (since we want auto-fix to work properly). base-eslint.js
for-direction base-eslint.js
func-name-matching base-eslint.js
func-names base-eslint.js
func-style Disabled since it is common in the TypeScript ecosystem to use both function forms, depending on the situation. base-eslint.js
getter-return Disabled since this is already enforced by TypeScript (ts(2378)). base-eslint.js
grouped-accessor-pairs base-eslint.js
guard-for-in Superseded by the complete/no-for-in rule. base-eslint.js
id-denylist Disabled since it is expected to be configured with project-specific keywords. base-eslint.js
id-length Disabled because short variable names are understandable in many contexts. base-eslint.js
id-match Superseded by the @typescript-eslint/naming-convention rule. (id-match is used to enforce naming conventions.) base-eslint.js
init-declarations Superseded by the @typescript-eslint/init-declarations rule. base-eslint.js
logical-assignment-operators The enforceForIfStatements option is enabled to make the rule stricter. base-eslint.js
max-classes-per-file base-eslint.js
max-depth Disabled since this rule is too prescriptive for general-purpose use. base-eslint.js
max-lines Disabled because enforcing an arbitrary line threshold for every file in a project does not provide much value. base-eslint.js
max-lines-per-function Disabled because enforcing an arbitrary line threshold for every function in a project does not provide much value. base-eslint.js
max-nested-callbacks base-eslint.js
max-params Superseded by the @typescript-eslint/max-params rule. base-eslint.js
max-statements Disabled because enforcing an arbitrary statement threshold for every function in a project does not provide much value. base-eslint.js
new-cap base-eslint.js
no-alert base-eslint.js
no-array-constructor Superseded by the @typescript-eslint/no-array-constructor rule. base-eslint.js
no-async-promise-executor base-eslint.js
no-await-in-loop base-eslint.js
no-bitwise base-eslint.js
no-caller base-eslint.js
no-case-declarations base-eslint.js
no-class-assign Disabled since this is already enforced by TypeScript (ts(2629)). base-eslint.js
no-compare-neg-zero base-eslint.js
no-cond-assign base-eslint.js
no-console Disabled because command-line programs written in TypeScript commonly write to standard out and standard error. base-eslint.js
no-const-assign Disabled since this is already enforced by TypeScript (ts(2588)). base-eslint.js
no-constant-binary-expression base-eslint.js
no-constant-condition base-eslint.js
no-constructor-return base-eslint.js
no-continue Disabled because proper use of continues can reduce indentation for long blocks of code in the same way as the early return pattern. base-eslint.js
no-control-regex Superseded by the regexp/no-control-characters rule. base-eslint.js
no-debugger base-eslint.js
no-delete-var base-eslint.js
no-div-regex base-eslint.js
no-dupe-args Disabled since this is already enforced by TypeScript (ts(2300)). base-eslint.js
no-dupe-class-members Disabled since this is already enforced by TypeScript (ts(2393) & ts(2300)). base-eslint.js
no-dupe-else-if base-eslint.js
no-dupe-keys Disabled since this is already enforced by TypeScript (ts(1117)). base-eslint.js
no-duplicate-case base-eslint.js
no-duplicate-imports Superseded by the import-x/no-duplicates rule. base-eslint.js
no-else-return The allowElseIf option is disabled to make the rule stricter. base-eslint.js
no-empty base-eslint.js
no-empty-character-class Superseded by the regexp/no-empty-character-class rule. base-eslint.js
no-empty-function Superseded by the @typescript-eslint/no-empty-function rule. base-eslint.js
no-empty-pattern base-eslint.js
no-empty-static-block base-eslint.js
no-eq-null base-eslint.js
no-eval base-eslint.js
no-ex-assign base-eslint.js
no-extend-native base-eslint.js
no-extra-bind base-eslint.js
no-extra-boolean-cast base-eslint.js
no-extra-label base-eslint.js
no-fallthrough base-eslint.js
no-func-assign Disabled since this is already enforced by TypeScript (ts(2630)). base-eslint.js
no-global-assign base-eslint.js
no-implicit-coercion base-eslint.js
no-implicit-globals base-eslint.js
no-implied-eval Superseded by the @typescript-eslint/no-implied-eval rule. base-eslint.js
no-import-assign Disabled since this is already enforced by TypeScript (ts(2632) & ts(2540)). base-eslint.js
no-inline-comments Disabled because inline comments are common in the TypeScript ecosystem. base-eslint.js
no-inner-declarations base-eslint.js
no-invalid-regexp Superseded by the regexp/no-invalid-regexp rule. base-eslint.js
no-invalid-this Superseded by the @typescript-eslint/no-invalid-this rule. base-eslint.js
no-irregular-whitespace base-eslint.js
no-iterator base-eslint.js
no-label-var base-eslint.js
no-labels base-eslint.js
no-lone-blocks base-eslint.js
no-lonely-if base-eslint.js
no-loop-func Superseded by the @typescript-eslint/no-loop-func rule. base-eslint.js
no-loss-of-precision Superseded by the @typescript-eslint/no-loss-of-precision rule. base-eslint.js
no-magic-numbers Superseded by the @typescript-eslint/no-magic-numbers rule. base-eslint.js
no-misleading-character-class Superseded by the regexp/no-misleading-unicode-character rule. base-eslint.js
no-multi-assign base-eslint.js
no-multi-str base-eslint.js
no-negated-condition Superseded by the unicorn/no-negated-condition rule. base-eslint.js
no-nested-ternary unicorn/no-nested-ternary is a modified version of this rule but that version is less strict. base-eslint.js
no-new base-eslint.js
no-new-func base-eslint.js
no-new-native-nonconstructor Disabled since this is already enforced by TypeScript (ts(7009)). base-eslint.js
no-new-wrappers base-eslint.js
no-nonoctal-decimal-escape base-eslint.js
no-obj-calls Disabled since this is already enforced by TypeScript (ts(2349)). base-eslint.js
no-object-constructor base-eslint.js
no-octal base-eslint.js
no-octal-escape base-eslint.js
no-param-reassign The options are copied from Airbnb. base-eslint.js
no-plusplus Disabled because the rule is unnecessary when using Prettier. (Unary operators can lead to errors with minified code, but Prettier adds semicolons automatically.) base-eslint.js
no-promise-executor-return base-eslint.js
no-proto base-eslint.js
no-prototype-builtins base-eslint.js
no-redeclare Disabled since this is already enforced by TypeScript (ts(2451)). base-eslint.js
no-regex-spaces Superseded by the regexp/prefer-quantifier rule. base-eslint.js
no-restricted-exports The options are copied from Airbnb. base-eslint.js
no-restricted-globals The options are copied from Airbnb. base-eslint.js
no-restricted-imports Superseded by the @typescript-eslint/no-restricted-imports rule. base-eslint.js
no-restricted-properties The options are copied from Airbnb. base-eslint.js
no-restricted-syntax Disabled because it is intended for disallowing specific language features per-project. base-eslint.js
no-return-assign The always option is provided to make the rule stricter. base-eslint.js
no-script-url base-eslint.js
no-self-assign base-eslint.js
no-self-compare base-eslint.js
no-sequences Disabled because it can conflict with Prettier. base-eslint.js
no-setter-return Disabled since this is already enforced by TypeScript (ts(2408)). base-eslint.js
no-shadow Superseded by the @typescript-eslint/no-shadow rule. base-eslint.js
no-shadow-restricted-names base-eslint.js
no-sparse-arrays base-eslint.js
no-template-curly-in-string Superseded by the complete/eqeqeq-fix rule (since we want auto-fix to work properly). base-eslint.js
no-ternary Disabled because ternaries are common in the TypeScript ecosystem and can often lead to concise code that is easy to read. base-eslint.js
no-this-before-super Disabled since this is already enforced by TypeScript (ts(2376) & ts(17009)). base-eslint.js
no-throw-literal Superseded by the @typescript-eslint/no-throw-literal rule. base-eslint.js
no-unassigned-vars base-eslint.js
no-undef Disabled since this is already enforced by TypeScript (ts(2304) & ts(2552)). base-eslint.js
no-undef-init base-eslint.js
no-undefined Disabled because in TypeScript, it is common to explicitly check for undefined for the purposes of type narrowing. base-eslint.js
no-underscore-dangle Disabled since it is a common pattern to use underscores to temporarily allow unused variables during development. base-eslint.js
no-unexpected-multiline Disabled because this is handled by Prettier. base-eslint.js
no-unmodified-loop-condition base-eslint.js
no-unneeded-ternary The defaultAssignment option is disabled to make the rule stricter. base-eslint.js
no-unreachable Disabled since this is already enforced by TypeScript (ts(7027)). base-eslint.js
no-unreachable-loop base-eslint.js
no-unsafe-finally base-eslint.js
no-unsafe-negation Disabled since this is already enforced by TypeScript (ts(2365) & ts(2322) & ts(2358)). base-eslint.js
no-unsafe-optional-chaining base-eslint.js
no-unused-expressions Superseded by the @typescript-eslint/no-unused-expressions rule. base-eslint.js
no-unused-labels base-eslint.js
no-unused-private-class-members base-eslint.js
no-unused-vars Superseded by the @typescript-eslint/no-unused-vars rule. base-eslint.js
no-use-before-define Superseded by the @typescript-eslint/no-use-before-define rule. base-eslint.js
no-useless-assignment base-eslint.js
no-useless-backreference Superseded by the regexp/no-useless-backreference rule. base-eslint.js
no-useless-call base-eslint.js
no-useless-catch base-eslint.js
no-useless-computed-key The enforceForClassMembers option is enabled to make the rule stricter. base-eslint.js
no-useless-concat base-eslint.js
no-useless-constructor Superseded by the @typescript-eslint/no-useless-constructor rule. base-eslint.js
no-useless-escape base-eslint.js
no-useless-rename base-eslint.js
no-useless-return Superseded by the complete/no-useless-return rule (since the auto-fix is usually unwanted). base-eslint.js
no-var base-eslint.js
no-void base-eslint.js
no-warning-comments Superseded by the unicorn/expiring-todo-comments rule. base-eslint.js
no-with Disabled since this is already enforced by TypeScript (ts(1101) & ts(2410)). base-eslint.js
object-shorthand The ignoreConstructors option is disabled to make the rule stricter. base-eslint.js
one-var The never option is provided to disallow multi-variable declarations (since they can be confusing). base-eslint.js
operator-assignment base-eslint.js
prefer-arrow-callback base-eslint.js
prefer-const Superseded by the complete/prefer-const rule (since the auto-fix is usually unwanted). base-eslint.js
prefer-destructuring Superseded by the @typescript-eslint/prefer-destructuring rule. base-eslint.js
prefer-exponentiation-operator base-eslint.js
prefer-named-capture-group Disabled because it is common to have a regex with only a single match, in which case a named capture group can be needlessly verbose (and cause extra type narrowing). base-eslint.js
prefer-numeric-literals base-eslint.js
prefer-object-has-own base-eslint.js
prefer-object-spread base-eslint.js
prefer-promise-reject-errors Superseded by the @typescript-eslint/prefer-promise-reject-errors rule. base-eslint.js
prefer-regex-literals The disallowRedundantWrapping option is enabled to make the rule stricter. base-eslint.js
prefer-rest-params base-eslint.js
prefer-spread base-eslint.js
prefer-template base-eslint.js
preserve-caught-error base-eslint.js
radix base-eslint.js
require-atomic-updates Disabled since Airbnb reports that the rule is “very buggy”. base-eslint.js
require-await Superseded by the @typescript-eslint/require-await rule. base-eslint.js
require-unicode-regexp Superseded by the regexp/require-unicode-regexp rule. base-eslint.js
require-yield base-eslint.js
sort-imports Disabled since this is automatically handled by prettier-plugin-organize-imports. base-eslint.js
sort-keys Disabled because object keys are often not meant to be sorted in alphabetical order. base-eslint.js
sort-vars Disabled because variable declarations are often not meant to be sorted in alphabetical order. base-eslint.js
strict The never option is provided to make the rule stricter. base-eslint.js
symbol-description base-eslint.js
unicode-bom base-eslint.js
use-isnan base-eslint.js
valid-typeof base-eslint.js
vars-on-top base-eslint.js
yoda base-eslint.js
Rule Name Enabled Parent Configs Notes Source File
@typescript-eslint/adjacent-overload-signatures base-typescript-eslint.js
@typescript-eslint/array-type The default value is array. We choose array-simple because it makes complicated arrays easier to understand. This is worth the cost of deviating from the base rule configuration. base-typescript-eslint.js
@typescript-eslint/await-thenable base-typescript-eslint.js
@typescript-eslint/ban-ts-comment base-typescript-eslint.js
@typescript-eslint/ban-tslint-comment base-typescript-eslint.js
@typescript-eslint/class-literal-property-style base-typescript-eslint.js
@typescript-eslint/class-methods-use-this base-typescript-eslint.js
@typescript-eslint/consistent-generic-constructors base-typescript-eslint.js
@typescript-eslint/consistent-indexed-object-style base-typescript-eslint.js
@typescript-eslint/consistent-return Disabled since this is handled by the noImplicitReturns TypeScript compiler flag. (The compiler flag does not technically handle all cases that the rule does. However, in most cases, it will result in duplicate error messages being thrown, so we disable it. Additionally, more coverage of this nature is also provided by the complete/strict-void-functions rule.) base-typescript-eslint.js
@typescript-eslint/consistent-type-assertions base-typescript-eslint.js
@typescript-eslint/consistent-type-definitions base-typescript-eslint.js
@typescript-eslint/consistent-type-exports base-typescript-eslint.js
@typescript-eslint/consistent-type-imports base-typescript-eslint.js
@typescript-eslint/default-param-last base-typescript-eslint.js
@typescript-eslint/dot-notation base-typescript-eslint.js
@typescript-eslint/explicit-function-return-type Disabled since it would be to cumbersome to require return types for non-exported functions. (It is more reasonable to require it for exported functions only, since it speeds up the type-checker in large codebases.) base-typescript-eslint.js
@typescript-eslint/explicit-member-accessibility Disabled since many programs may have internal-only classes that would not benefit from an explicit public/private distinction. base-typescript-eslint.js
@typescript-eslint/explicit-module-boundary-types base-typescript-eslint.js
@typescript-eslint/init-declarations Disabled since it is superfluous to require an = undefined during variable initialization (and TypeScript will take care of the non-undefined cases). base-typescript-eslint.js
@typescript-eslint/max-params Disabled because enforcing an arbitrary parameter number threshold for every function in a project does not provide much value. (Additionally, using TypeScript reduces the value of such a check.) base-typescript-eslint.js
@typescript-eslint/member-ordering Disabled since prescribed class ordering is too project-specific. base-typescript-eslint.js
@typescript-eslint/method-signature-style base-typescript-eslint.js
@typescript-eslint/naming-convention The options are copied from Airbnb. We also allow a leading underscore, which signifies that the element is temporarily not being used. base-typescript-eslint.js
@typescript-eslint/no-array-constructor base-typescript-eslint.js
@typescript-eslint/no-array-delete base-typescript-eslint.js
@typescript-eslint/no-base-to-string base-typescript-eslint.js
@typescript-eslint/no-confusing-non-null-assertion base-typescript-eslint.js
@typescript-eslint/no-confusing-void-expression base-typescript-eslint.js
@typescript-eslint/no-deprecated base-typescript-eslint.js
@typescript-eslint/no-dupe-class-members Disabled since it is superfluous when using TypeScript according to the ESLint documentation. base-typescript-eslint.js
@typescript-eslint/no-duplicate-enum-values base-typescript-eslint.js
@typescript-eslint/no-duplicate-type-constituents base-typescript-eslint.js
@typescript-eslint/no-dynamic-delete base-typescript-eslint.js
@typescript-eslint/no-empty-function base-typescript-eslint.js
@typescript-eslint/no-empty-interface The allowSingleExtends option is enabled to allow for the common pattern of using using interfaces to provide an opaque type. (This can be useful with type-builders such as Zod, since z.infer uses Expand, which is sometimes not desired since it can lead to verbose/confusing mouseover tooltips and TypeScript errors.) base-typescript-eslint.js
@typescript-eslint/no-empty-object-type base-typescript-eslint.js
@typescript-eslint/no-explicit-any base-typescript-eslint.js
@typescript-eslint/no-extra-non-null-assertion base-typescript-eslint.js
@typescript-eslint/no-extraneous-class base-typescript-eslint.js
@typescript-eslint/no-floating-promises The ignoreVoid option is disabled to make the rule stricter. The allowForKnownSafeCalls is used because the built-in Node.js test runner contains functions that are not meant to be awaited. base-typescript-eslint.js
@typescript-eslint/no-for-in-array base-typescript-eslint.js
@typescript-eslint/no-implied-eval base-typescript-eslint.js
@typescript-eslint/no-import-type-side-effects base-typescript-eslint.js
@typescript-eslint/no-inferrable-types base-typescript-eslint.js
@typescript-eslint/no-invalid-this The capIsConstructor option is disabled to make the rule stricter. base-typescript-eslint.js
@typescript-eslint/no-invalid-void-type base-typescript-eslint.js
@typescript-eslint/no-loop-func base-typescript-eslint.js
@typescript-eslint/no-loss-of-precision base-typescript-eslint.js
@typescript-eslint/no-magic-numbers Disabled since it results in too many false positives. base-typescript-eslint.js
@typescript-eslint/no-meaningless-void-operator base-typescript-eslint.js
@typescript-eslint/no-misused-new base-typescript-eslint.js
@typescript-eslint/no-misused-promises base-typescript-eslint.js
@typescript-eslint/no-misused-spread base-typescript-eslint.js
@typescript-eslint/no-mixed-enums base-typescript-eslint.js
@typescript-eslint/no-namespace base-typescript-eslint.js
@typescript-eslint/no-non-null-asserted-nullish-coalescing base-typescript-eslint.js
@typescript-eslint/no-non-null-asserted-optional-chain base-typescript-eslint.js
@typescript-eslint/no-non-null-assertion base-typescript-eslint.js
@typescript-eslint/no-redeclare Disabled since it is handled by the combination of the TypeScript compiler and the no-var ESLint rule. base-typescript-eslint.js
@typescript-eslint/no-redundant-type-constituents base-typescript-eslint.js
@typescript-eslint/no-require-imports base-typescript-eslint.js
@typescript-eslint/no-restricted-imports Configured to prevent importing with some common patterns that are almost always a mistake (“/src”, “/dist”, and “/index”). base-typescript-eslint.js
@typescript-eslint/no-restricted-types Disabled since this rule is intended to be used for project-specific types. base-typescript-eslint.js
@typescript-eslint/no-shadow base-typescript-eslint.js
@typescript-eslint/no-this-alias base-typescript-eslint.js
@typescript-eslint/no-type-alias Disabled because this rule is deprecated. base-typescript-eslint.js
@typescript-eslint/no-unnecessary-boolean-literal-compare base-typescript-eslint.js
@typescript-eslint/no-unnecessary-condition base-typescript-eslint.js
@typescript-eslint/no-unnecessary-parameter-property-assignment base-typescript-eslint.js
@typescript-eslint/no-unnecessary-qualifier base-typescript-eslint.js
@typescript-eslint/no-unnecessary-template-expression base-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-arguments base-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-assertion base-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-constraint base-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-conversion base-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-parameters base-typescript-eslint.js
@typescript-eslint/no-unsafe-argument base-typescript-eslint.js
@typescript-eslint/no-unsafe-assignment base-typescript-eslint.js
@typescript-eslint/no-unsafe-call base-typescript-eslint.js
@typescript-eslint/no-unsafe-declaration-merging base-typescript-eslint.js
@typescript-eslint/no-unsafe-enum-comparison base-typescript-eslint.js
@typescript-eslint/no-unsafe-function-type base-typescript-eslint.js
@typescript-eslint/no-unsafe-member-access base-typescript-eslint.js
@typescript-eslint/no-unsafe-return base-typescript-eslint.js
@typescript-eslint/no-unsafe-type-assertion Disabled because this rule causes too many false positives. The rule prevents a narrowing type assertion, but often times this is precisely the point of the assertion. base-typescript-eslint.js
@typescript-eslint/no-unsafe-unary-minus base-typescript-eslint.js
@typescript-eslint/no-unused-expressions The allowTaggedTemplates option is enabled to allow the rule to work with libraries like execa. base-typescript-eslint.js
@typescript-eslint/no-unused-private-class-members base-typescript-eslint.js
@typescript-eslint/no-unused-vars The args option is set to all make the rule stricter. Additionally, we ignore things that begin with an underscore, since this matches the behavior of the --noUnusedLocals TypeScript compiler flag. base-typescript-eslint.js
@typescript-eslint/no-use-before-define Disabled because it can prevent code from being structured sequentially. base-typescript-eslint.js
@typescript-eslint/no-useless-constructor base-typescript-eslint.js
@typescript-eslint/no-useless-default-assignment base-typescript-eslint.js
@typescript-eslint/no-useless-empty-export base-typescript-eslint.js
@typescript-eslint/no-var-requires base-typescript-eslint.js
@typescript-eslint/no-wrapper-object-types base-typescript-eslint.js
@typescript-eslint/non-nullable-type-assertion-style base-typescript-eslint.js
@typescript-eslint/only-throw-error base-typescript-eslint.js
@typescript-eslint/parameter-properties base-typescript-eslint.js
@typescript-eslint/prefer-as-const base-typescript-eslint.js
@typescript-eslint/prefer-destructuring Object destructuring is enforced but array destructuring is not. This matches usage in the general TypeScript ecosystem. base-typescript-eslint.js
@typescript-eslint/prefer-enum-initializers base-typescript-eslint.js
@typescript-eslint/prefer-find base-typescript-eslint.js
@typescript-eslint/prefer-for-of base-typescript-eslint.js
@typescript-eslint/prefer-function-type base-typescript-eslint.js
@typescript-eslint/prefer-includes base-typescript-eslint.js
@typescript-eslint/prefer-literal-enum-member base-typescript-eslint.js
@typescript-eslint/prefer-namespace-keyword base-typescript-eslint.js
@typescript-eslint/prefer-nullish-coalescing base-typescript-eslint.js
@typescript-eslint/prefer-optional-chain Disabled because it can modify the type of boolean declarations, which is undesired in some circumstances. base-typescript-eslint.js
@typescript-eslint/prefer-promise-reject-errors The allowEmptyReject option is enabled since this is a common pattern. base-typescript-eslint.js
@typescript-eslint/prefer-readonly base-typescript-eslint.js
@typescript-eslint/prefer-readonly-parameter-types Superseded by the complete/prefer-readonly-parameter-types rule. base-typescript-eslint.js
@typescript-eslint/prefer-reduce-type-parameter base-typescript-eslint.js
@typescript-eslint/prefer-regexp-exec Disabled since using the String.match form might make code easier to read. base-typescript-eslint.js
@typescript-eslint/prefer-return-this-type base-typescript-eslint.js
@typescript-eslint/prefer-string-starts-ends-with base-typescript-eslint.js
@typescript-eslint/prefer-ts-expect-error base-typescript-eslint.js
@typescript-eslint/promise-function-async base-typescript-eslint.js
@typescript-eslint/related-getter-setter-pairs base-typescript-eslint.js
@typescript-eslint/require-array-sort-compare base-typescript-eslint.js
@typescript-eslint/require-await base-typescript-eslint.js
@typescript-eslint/restrict-plus-operands The various “allow” options are disabled to make the rule stricter. base-typescript-eslint.js
@typescript-eslint/restrict-template-expressions Disabled since a common use-case of template strings is to coerce everything to a string. base-typescript-eslint.js
@typescript-eslint/return-await Even though the core rule was deprecated, the extended rule uses type information, so it is much better. Additionally, we opt for the “always” option instead of the default of “in-try-catch”, for reasons described in this issue. base-typescript-eslint.js
@typescript-eslint/sort-type-constituents Disabled since in it does not make sense to sort a union alphabetically in many cases. base-typescript-eslint.js
@typescript-eslint/strict-boolean-expressions The allowString and allowNumber options are disabled to make the rule stricter. base-typescript-eslint.js
@typescript-eslint/strict-void-return base-typescript-eslint.js
@typescript-eslint/switch-exhaustiveness-check The allowDefaultCaseForExhaustiveSwitch option is disabled and the requireDefaultForNonUnion option is enabled to make the rule stricter. The considerDefaultExhaustiveForUnions option is enabled since it is not intended to be used when allowDefaultCaseForExhaustiveSwitch is disabled. base-typescript-eslint.js
@typescript-eslint/triple-slash-reference base-typescript-eslint.js
@typescript-eslint/typedef Disabled since it is not recommended by the typescript-eslint team. (They recommend using the noImplicitAny and strictPropertyInitialization TypeScript compiler options instead.) base-typescript-eslint.js
@typescript-eslint/unbound-method base-typescript-eslint.js
@typescript-eslint/unified-signatures base-typescript-eslint.js
@typescript-eslint/use-unknown-in-catch-callback-variable base-typescript-eslint.js
Rule Name Enabled Parent Configs Notes Source File
import-x/consistent-type-specifier-style base-import-x.js
import-x/default Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/dynamic-import-chunkname Disabled because it is only useful in environments that use webpack. base-import-x.js
import-x/export base-import-x.js
import-x/exports-last Disabled because this style is not generally used. base-import-x.js
import-x/extensions Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/first base-import-x.js
import-x/group-exports Disabled because this style is not generally used. base-import-x.js
import-x/max-dependencies Disabled since it will trigger false positives in codebases that prefer smaller files. base-import-x.js
import-x/named Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/namespace Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/newline-after-import base-import-x.js
import-x/no-absolute-path base-import-x.js
import-x/no-amd base-import-x.js
import-x/no-anonymous-default-export Disabled since we disallow default exports elsewhere in this config (in favor of named exports). base-import-x.js
import-x/no-commonjs base-import-x.js
import-x/no-cycle base-import-x.js
import-x/no-default-export The case against default exports is laid out by Basarat Ali Syed. base-import-x.js
import-x/no-deprecated Superseded by the deprecation/deprecation rule. (That rule is better because it catches deprecated usage that does not come from import statements specifically.) base-import-x.js
import-x/no-duplicates base-import-x.js
import-x/no-dynamic-require base-import-x.js
import-x/no-empty-named-blocks base-import-x.js
import-x/no-extraneous-dependencies We add common patterns to the “devDependencies” array. base-import-x.js
import-x/no-import-module-exports base-import-x.js
import-x/no-internal-modules Disabled since a prescribed import pattern is not generalizable enough across projects. base-import-x.js
import-x/no-mutable-exports base-import-x.js
import-x/no-named-as-default base-import-x.js
import-x/no-named-as-default-member Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/no-named-default base-import-x.js
import-x/no-named-export Disabled since we disallow default exports elsewhere in this config (in favor of named exports). base-import-x.js
import-x/no-namespace Disabled since it is too prescriptive for a general audience. (Using import * as is common.) base-import-x.js
import-x/no-nodejs-modules Disabled because it is only used in specific environments (like the browser). base-import-x.js
import-x/no-relative-packages base-import-x.js
import-x/no-relative-parent-imports Disabled since a forward import direction pattern is not generalizable enough across projects. base-import-x.js
import-x/no-rename-default Disabled since it has a lot of false positives. base-import-x.js
import-x/no-restricted-paths Disabled since this rule should only contain a project-specific path restriction. base-import-x.js
import-x/no-self-import base-import-x.js
import-x/no-unassigned-import base-import-x.js
import-x/no-unresolved Disabled because this is already handled by the TypeScript compiler. base-import-x.js
import-x/no-unused-modules Disabled since this check is better performed by the knip tool. base-import-x.js
import-x/no-useless-path-segments base-import-x.js
import-x/no-webpack-loader-syntax base-import-x.js
import-x/order Disabled because this is automatically handled by prettier-plugin-organize-imports. base-import-x.js
import-x/prefer-default-export Disabled because we disallow default exports elsewhere in this config (in favor of named exports). base-import-x.js
import-x/prefer-namespace-import base-import-x.js
import-x/unambiguous Disabled because this is already handled by the TypeScript compiler. base-import-x.js
Rule Name Enabled Parent Configs Notes Source File
jsdoc/check-access Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/check-alignment Superseded by the complete/limit-jsdoc-comments rule. base-jsdoc.js
jsdoc/check-examples Disabled since it does not work with ESLint 8. base-jsdoc.js
jsdoc/check-indentation Superseded by the complete/limit-jsdoc-comments rule. base-jsdoc.js
jsdoc/check-line-alignment Disabled since this is not a common formatting scheme. It is also not recommended by the plugin authors. base-jsdoc.js
jsdoc/check-param-names base-jsdoc.js
jsdoc/check-property-names Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/check-syntax Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/check-tag-names base-jsdoc.js
jsdoc/check-template-names base-jsdoc.js
jsdoc/check-types Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/check-values base-jsdoc.js
jsdoc/convert-to-jsdoc-comments Disabled since it is idiomatic in the TypeScript ecosystem to use a mixture of both JSDoc and non-JSDoc comments. base-jsdoc.js
jsdoc/empty-tags base-jsdoc.js
jsdoc/escape-inline-tags base-jsdoc.js
jsdoc/implements-on-classes base-jsdoc.js
jsdoc/imports-as-dependencies Disabled since you cannot configure it with a path to the correct “package.json” file. base-jsdoc.js
jsdoc/informative-docs base-jsdoc.js
jsdoc/lines-before-block Disabled since it is currently bugged. base-jsdoc.js
jsdoc/match-description Superseded by the complete/jsdoc-full-sentences rule. base-jsdoc.js
jsdoc/match-name Disabled because it is only needed for projects with specific JSDoc requirements. base-jsdoc.js
jsdoc/multiline-blocks Superseded by the complete/limit-jsdoc-comments rule. base-jsdoc.js
jsdoc/no-bad-blocks Disabled because it provides little value; it only detects JSDoc comments with tags in them. base-jsdoc.js
jsdoc/no-blank-block-descriptions Superseded by the complete/format-jsdoc-comments rule. base-jsdoc.js
jsdoc/no-blank-blocks Superseded by the complete/no-empty-jsdoc rule. base-jsdoc.js
jsdoc/no-defaults Disabled because it provides little value; the @default tag is rare. base-jsdoc.js
jsdoc/no-missing-syntax Disabled because it is too project-specific. base-jsdoc.js
jsdoc/no-multi-asterisks Superseded by the complete/limit-jsdoc-comments rule. base-jsdoc.js
jsdoc/no-restricted-syntax Disabled because it is intended for disabling of specific language features per-project. base-jsdoc.js
jsdoc/no-types The contexts option is set to any to make the rule stricter. base-jsdoc.js
jsdoc/no-undefined-types Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/normalize-see-links base-jsdoc.js
jsdoc/prefer-import-tag Disabled since it is not idiomatic in the ecosystem to do this, especially in configuration files like “prettier.config.mjs”. base-jsdoc.js
jsdoc/reject-any-type base-jsdoc.js
jsdoc/reject-function-type base-jsdoc.js
jsdoc/require-asterisk-prefix base-jsdoc.js
jsdoc/require-description Disabled because it is overboard for every function to have a description. base-jsdoc.js
jsdoc/require-description-complete-sentence Superseded by the complete/jsdoc-complete-sentences rule. base-jsdoc.js
jsdoc/require-example Disabled because it is overboard for every function to require an example. base-jsdoc.js
jsdoc/require-file-overview Disabled because it is overboard for every file to require an overview. base-jsdoc.js
jsdoc/require-hyphen-before-param-description The never option is provided to make the rule match the format of the official TypeScript codebase. base-jsdoc.js
jsdoc/require-jsdoc Disabled since it is overboard for every function to have a JSDoc comment. base-jsdoc.js
jsdoc/require-next-description base-jsdoc.js
jsdoc/require-next-type base-jsdoc.js
jsdoc/require-param Configured to only apply when there are one or more parameters. base-jsdoc.js
jsdoc/require-param-description The contexts option is set to any to make the rule stricter. base-jsdoc.js
jsdoc/require-param-name The contexts option is set to any to make the rule stricter. base-jsdoc.js
jsdoc/require-param-type Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/require-property Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/require-property-description base-jsdoc.js
jsdoc/require-property-name base-jsdoc.js
jsdoc/require-property-type Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/require-rejects Disabled because it is overboard to document every throw statement. base-jsdoc.js
jsdoc/require-returns Disabled because it is overboard for every function to document every return value. base-jsdoc.js
jsdoc/require-returns-check Disabled because it is overboard for every function to document every return value. base-jsdoc.js
jsdoc/require-returns-description The contexts option is set to any to make the rule stricter. base-jsdoc.js
jsdoc/require-returns-type Disabled because it is not needed in TypeScript. base-jsdoc.js
jsdoc/require-tags Disabled since it is expected to be configured with project-specific keywords. base-jsdoc.js
jsdoc/require-template Disabled because it is overboard to document every generic type variable. base-jsdoc.js
jsdoc/require-template-description base-jsdoc.js
jsdoc/require-throws Disabled because it is overboard to document every throw statement. base-jsdoc.js
jsdoc/require-throws-description base-jsdoc.js
jsdoc/require-throws-type Disabled since in most cases, the type of a thrown error will simply be Error, making the annotation superfluous. base-jsdoc.js
jsdoc/require-yields Disabled because it is overboard to document every yield. base-jsdoc.js
jsdoc/require-yields-check Disabled because it is overboard to document every yield. base-jsdoc.js
jsdoc/require-yields-description base-jsdoc.js
jsdoc/require-yields-type base-jsdoc.js
jsdoc/sort-tags base-jsdoc.js
jsdoc/tag-lines Superseded by the complete/format-jsdoc-comments rule. base-jsdoc.js
jsdoc/text-escaping Disabled since it is only useful in certain environments (e.g., when your project converts JSDoc comments to Markdown). base-jsdoc.js
jsdoc/ts-method-signature-style base-jsdoc.js
jsdoc/ts-no-empty-object-type base-jsdoc.js
jsdoc/ts-no-unnecessary-template-expression base-jsdoc.js
jsdoc/ts-prefer-function-type base-jsdoc.js
jsdoc/type-formatting base-jsdoc.js
jsdoc/valid-types Disabled because it is not needed in TypeScript. base-jsdoc.js
Rule Name Enabled Parent Configs Notes Source File
n/callback-return Disabled since stylistic rules from this plugin are not used. base-n.js
n/exports-style Disabled since stylistic rules from this plugin are not used. base-n.js
n/file-extension-in-import This rule is helpful to automatically fix file extensions in import statements throughout an entire codebase. base-n.js
n/global-require Disabled since stylistic rules from this plugin are not used. base-n.js
n/handle-callback-err base-n.js
n/hashbang Disabled since it does not work very well with TypeScript. (It needs project-specific configuration depending on where the output directory is located.) base-n.js
n/no-callback-literal base-n.js
n/no-deprecated-api base-n.js
n/no-exports-assign base-n.js
n/no-extraneous-import Disabled since it is handled by the TypeScript compiler. base-n.js
n/no-extraneous-require Disabled since require statements are not used in TypeScript code. base-n.js
n/no-missing-import Disabled since it is handled by the TypeScript compiler. base-n.js
n/no-missing-require Disabled since it is handled by the TypeScript compiler. base-n.js
n/no-mixed-requires Disabled since stylistic rules from this plugin are not used. base-n.js
n/no-new-require base-n.js
n/no-path-concat base-n.js
n/no-process-env Disabled since stylistic rules from this plugin are not used. base-n.js
n/no-process-exit Disabled because using process.exit is common to exit command-line apps without verbose output. base-n.js
n/no-restricted-import Disabled since stylistic rules from this plugin are not used. base-n.js
n/no-restricted-require Disabled since stylistic rules from this plugin are not used. base-n.js
n/no-sync Disabled since stylistic rules from this plugin are not used. base-n.js
n/no-top-level-await Disabled since modern ESM projects that are written in TypeScript do not generally have to worry about interop with require. base-n.js
n/no-unpublished-bin base-n.js
n/no-unpublished-import Superseded by the import-x/no-extraneous-dependencies rule. base-n.js
n/no-unpublished-require Disabled since it is assumed that source code will be written in ESM. base-n.js
n/no-unsupported-features/es-builtins Disabled because it is assumed that we are running on modern versions of Node.js. base-n.js
n/no-unsupported-features/es-syntax Disabled because it is assumed that our transpiler or runtime has support for the latest version of ESM. base-n.js
n/no-unsupported-features/node-builtins Disabled since it is handled by the TypeScript compiler. base-n.js
n/prefer-global/buffer Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/console Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/crypto Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/process Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/text-decoder Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/text-encoder Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/timers Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/url Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-global/url-search-params Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-import/assert-strict base-n.js
n/prefer-node-protocol Superseded by the unicorn/prefer-node-protocol rule. base-n.js
n/prefer-process-get-builtin-module base-n.js
n/prefer-promises/dns Disabled since stylistic rules from this plugin are not used. base-n.js
n/prefer-promises/fs Disabled since stylistic rules from this plugin are not used. base-n.js
n/process-exit-as-throw base-n.js
Rule Name Enabled Parent Configs Notes Source File
perfectionist/sort-array-includes base-perfectionist.js
perfectionist/sort-arrays This rule is only enabled for ReadonlySet constructors. base-perfectionist.js
perfectionist/sort-classes Disabled because class member ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-decorators Disabled because decorator ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-enums Disabled because enum ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-export-attributes base-perfectionist.js
perfectionist/sort-exports Disabled since this is automatically handled by prettier-plugin-organize-imports. base-perfectionist.js
perfectionist/sort-heritage-clauses base-perfectionist.js
perfectionist/sort-import-attributes base-perfectionist.js
perfectionist/sort-imports Disabled since this is automatically handled by prettier-plugin-organize-imports. base-perfectionist.js
perfectionist/sort-interfaces Disabled because interface ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-intersection-types Disabled because intersection type ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-jsx-props base-perfectionist.js
perfectionist/sort-maps base-perfectionist.js
perfectionist/sort-modules Disabled because module ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-named-exports Disabled since this is automatically handled by prettier-plugin-organize-imports. base-perfectionist.js
perfectionist/sort-named-imports Disabled since this is automatically handled by prettier-plugin-organize-imports. base-perfectionist.js
perfectionist/sort-object-types Disabled because object type ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-objects Disabled because object keys are often not meant to be sorted in alphabetical order. base-perfectionist.js
perfectionist/sort-sets base-perfectionist.js
perfectionist/sort-switch-case Disabled because switch case ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-union-types Disabled because union type ordering can be semantically significant. base-perfectionist.js
perfectionist/sort-variable-declarations base-perfectionist.js
Rule Name Enabled Parent Configs Notes Source File
regexp/confusing-quantifier base-regexp.js
regexp/control-character-escape base-regexp.js
regexp/grapheme-string-literal base-regexp.js
regexp/hexadecimal-escape base-regexp.js
regexp/letter-case Disabled since it conflicts with the unicorn/escape-case rule. base-regexp.js
regexp/match-any base-regexp.js
regexp/negation base-regexp.js
regexp/no-contradiction-with-assertion base-regexp.js
regexp/no-control-character base-regexp.js
regexp/no-dupe-characters-character-class base-regexp.js
regexp/no-dupe-disjunctions base-regexp.js
regexp/no-empty-alternative base-regexp.js
regexp/no-empty-capturing-group base-regexp.js
regexp/no-empty-character-class base-regexp.js
regexp/no-empty-group base-regexp.js
regexp/no-empty-lookarounds-assertion base-regexp.js
regexp/no-empty-string-literal base-regexp.js
regexp/no-escape-backspace base-regexp.js
regexp/no-extra-lookaround-assertions base-regexp.js
regexp/no-invalid-regexp base-regexp.js
regexp/no-invisible-character base-regexp.js
regexp/no-lazy-ends base-regexp.js
regexp/no-legacy-features base-regexp.js
regexp/no-misleading-capturing-group base-regexp.js
regexp/no-misleading-unicode-character base-regexp.js
regexp/no-missing-g-flag base-regexp.js
regexp/no-non-standard-flag base-regexp.js
regexp/no-obscure-range base-regexp.js
regexp/no-octal base-regexp.js
regexp/no-optional-assertion base-regexp.js
regexp/no-potentially-useless-backreference base-regexp.js
regexp/no-standalone-backslash base-regexp.js
regexp/no-super-linear-backtracking base-regexp.js
regexp/no-super-linear-move base-regexp.js
regexp/no-trivially-nested-assertion base-regexp.js
regexp/no-trivially-nested-quantifier base-regexp.js
regexp/no-unused-capturing-group base-regexp.js
regexp/no-useless-assertions base-regexp.js
regexp/no-useless-backreference base-regexp.js
regexp/no-useless-character-class base-regexp.js
regexp/no-useless-dollar-replacements base-regexp.js
regexp/no-useless-escape base-regexp.js
regexp/no-useless-flag base-regexp.js
regexp/no-useless-lazy base-regexp.js
regexp/no-useless-non-capturing-group base-regexp.js
regexp/no-useless-quantifier base-regexp.js
regexp/no-useless-range base-regexp.js
regexp/no-useless-set-operand base-regexp.js
regexp/no-useless-string-literal base-regexp.js
regexp/no-useless-two-nums-quantifier base-regexp.js
regexp/no-zero-quantifier base-regexp.js
regexp/optimal-lookaround-quantifier base-regexp.js
regexp/optimal-quantifier-concatenation base-regexp.js
regexp/prefer-character-class base-regexp.js
regexp/prefer-d base-regexp.js
regexp/prefer-escape-replacement-dollar-char base-regexp.js
regexp/prefer-lookaround base-regexp.js
regexp/prefer-named-backreference base-regexp.js
regexp/prefer-named-capture-group Disabled because it is common to have a regex with only a single match, in which case a named capture group can be needlessly verbose (and cause extra type narrowing). base-regexp.js
regexp/prefer-named-replacement base-regexp.js
regexp/prefer-plus-quantifier base-regexp.js
regexp/prefer-predefined-assertion base-regexp.js
regexp/prefer-quantifier base-regexp.js
regexp/prefer-question-quantifier base-regexp.js
regexp/prefer-range base-regexp.js
regexp/prefer-regexp-exec base-regexp.js
regexp/prefer-regexp-test base-regexp.js
regexp/prefer-result-array-groups base-regexp.js
regexp/prefer-set-operation base-regexp.js
regexp/prefer-star-quantifier base-regexp.js
regexp/prefer-unicode-codepoint-escapes base-regexp.js
regexp/prefer-w base-regexp.js
regexp/require-unicode-regexp base-regexp.js
regexp/require-unicode-sets-regexp base-regexp.js
regexp/simplify-set-operations base-regexp.js
regexp/sort-alternatives base-regexp.js
regexp/sort-character-class-elements base-regexp.js
regexp/sort-flags base-regexp.js
regexp/strict base-regexp.js
regexp/unicode-escape base-regexp.js
regexp/unicode-property base-regexp.js
regexp/use-ignore-case base-regexp.js
Rule Name Enabled Parent Configs Notes Source File
unicorn/better-dom-traversing base-unicorn.js
unicorn/catch-error-name base-unicorn.js
unicorn/class-reference-in-static-methods base-unicorn.js
unicorn/comment-content base-unicorn.js
unicorn/consistent-arrow-return-style Superseded by the arrow-body-style rule. base-unicorn.js
unicorn/consistent-assert base-unicorn.js
unicorn/consistent-boolean-name Disabled because it is too strict. base-unicorn.js
unicorn/consistent-class-member-order base-unicorn.js
unicorn/consistent-compound-words base-unicorn.js
unicorn/consistent-conditional-object-spread base-unicorn.js
unicorn/consistent-date-clone base-unicorn.js
unicorn/consistent-destructuring base-unicorn.js
unicorn/consistent-empty-array-spread base-unicorn.js
unicorn/consistent-existence-index-check base-unicorn.js
unicorn/consistent-export-decorator-position base-unicorn.js
unicorn/consistent-function-scoping base-unicorn.js
unicorn/consistent-function-style base-unicorn.js
unicorn/consistent-json-file-read base-unicorn.js
unicorn/consistent-optional-chaining base-unicorn.js
unicorn/consistent-template-literal-escape base-unicorn.js
unicorn/consistent-tuple-labels base-unicorn.js
unicorn/custom-error-definition base-unicorn.js
unicorn/default-export-style base-unicorn.js
unicorn/dom-node-dataset base-unicorn.js
unicorn/empty-brace-spaces Disabled because this is handled by Prettier. base-unicorn.js
unicorn/error-message base-unicorn.js
unicorn/escape-case base-unicorn.js
unicorn/expiring-todo-comments base-unicorn.js
unicorn/explicit-length-check base-unicorn.js
unicorn/explicit-timer-delay base-unicorn.js
unicorn/filename-case Disabled since projects may use different file naming conventions. base-unicorn.js
unicorn/id-match base-unicorn.js
unicorn/import-style base-unicorn.js
unicorn/isolated-functions base-unicorn.js
unicorn/iteration-fallback-style base-unicorn.js
unicorn/logical-assignment-operators base-unicorn.js
unicorn/max-nested-calls base-unicorn.js
unicorn/name-replacements Disabled since it is common to use the variable name of “i”. base-unicorn.js
unicorn/new-for-builtins base-unicorn.js
unicorn/no-abusive-eslint-disable Disabled because if a line breaks three or more ESLint rules, then it is useful to use a single “eslint-disable” comment to make things more concise. base-unicorn.js
unicorn/no-accessor-recursion base-unicorn.js
unicorn/no-accidental-bitwise-operator base-unicorn.js
unicorn/no-anonymous-default-export base-unicorn.js
unicorn/no-array-callback-reference Disabled since it is not helpful when using TypeScript. base-unicorn.js
unicorn/no-array-concat-in-loop base-unicorn.js
unicorn/no-array-fill-with-reference-type base-unicorn.js
unicorn/no-array-from-fill base-unicorn.js
unicorn/no-array-front-mutation base-unicorn.js
unicorn/no-array-method-this-argument base-unicorn.js
unicorn/no-array-reduce base-unicorn.js
unicorn/no-array-reverse base-unicorn.js
unicorn/no-array-sort base-unicorn.js
unicorn/no-array-sort-for-min-max base-unicorn.js
unicorn/no-array-splice base-unicorn.js
unicorn/no-asterisk-prefix-in-documentation-comments Disabled because this goes against the standard JSDoc format. base-unicorn.js
unicorn/no-async-promise-finally base-unicorn.js
unicorn/no-await-expression-member base-unicorn.js
unicorn/no-await-in-promise-methods base-unicorn.js
unicorn/no-barrel-files Disabled since barrel files are useful as package entry points. base-unicorn.js
unicorn/no-blob-to-file base-unicorn.js
unicorn/no-boolean-sort-comparator base-unicorn.js
unicorn/no-break-in-nested-loop Disabled since simple double nested loops are common. base-unicorn.js
unicorn/no-canvas-to-image base-unicorn.js
unicorn/no-chained-comparison base-unicorn.js
unicorn/no-collection-bracket-access base-unicorn.js
unicorn/no-computed-property-existence-check Disabled since it is unnecessary with TypeScript objects that are properly typed. base-unicorn.js
unicorn/no-confusing-array-splice base-unicorn.js
unicorn/no-confusing-array-with base-unicorn.js
unicorn/no-console-spaces base-unicorn.js
unicorn/no-constant-zero-expression base-unicorn.js
unicorn/no-declarations-before-early-exit base-unicorn.js
unicorn/no-document-cookie base-unicorn.js
unicorn/no-double-comparison base-unicorn.js
unicorn/no-duplicate-if-branches base-unicorn.js
unicorn/no-duplicate-logical-operands base-unicorn.js
unicorn/no-duplicate-loops base-unicorn.js
unicorn/no-duplicate-set-values base-unicorn.js
unicorn/no-empty-file base-unicorn.js
unicorn/no-error-property-assignment base-unicorn.js
unicorn/no-exports-in-scripts base-unicorn.js
unicorn/no-for-each base-unicorn.js
unicorn/no-for-loop base-unicorn.js
unicorn/no-global-object-property-assignment base-unicorn.js
unicorn/no-immediate-mutation base-unicorn.js
unicorn/no-impossible-length-comparison base-unicorn.js
unicorn/no-incorrect-query-selector base-unicorn.js
unicorn/no-incorrect-template-string-interpolation base-unicorn.js
unicorn/no-instanceof-builtins base-unicorn.js
unicorn/no-invalid-argument-count base-unicorn.js
unicorn/no-invalid-character-comparison base-unicorn.js
unicorn/no-invalid-fetch-options base-unicorn.js
unicorn/no-invalid-file-input-accept base-unicorn.js
unicorn/no-invalid-remove-event-listener base-unicorn.js
unicorn/no-invalid-well-known-symbol-methods base-unicorn.js
unicorn/no-keyword-prefix Disabled because it is common to prefix variables with “new”. base-unicorn.js
unicorn/no-late-current-target-access base-unicorn.js
unicorn/no-late-event-control base-unicorn.js
unicorn/no-lonely-if base-unicorn.js
unicorn/no-loop-iterable-mutation base-unicorn.js
unicorn/no-magic-array-flat-depth base-unicorn.js
unicorn/no-manually-wrapped-comments Superseded by the complete/format-line-comments rule. base-unicorn.js
unicorn/no-mismatched-map-key base-unicorn.js
unicorn/no-misrefactored-assignment base-unicorn.js
unicorn/no-missing-local-resource base-unicorn.js
unicorn/no-multiple-promise-resolver-calls base-unicorn.js
unicorn/no-named-default base-unicorn.js
unicorn/no-negated-array-predicate base-unicorn.js
unicorn/no-negated-comparison base-unicorn.js
unicorn/no-negated-condition base-unicorn.js
unicorn/no-negation-in-equality-check base-unicorn.js
unicorn/no-nested-ternary Disabled because this is handled by Prettier. base-unicorn.js
unicorn/no-new-array base-unicorn.js
unicorn/no-new-buffer base-unicorn.js
unicorn/no-non-function-verb-prefix base-unicorn.js
unicorn/no-nonstandard-builtin-properties base-unicorn.js
unicorn/no-null base-unicorn.js
unicorn/no-object-as-default-parameter base-unicorn.js
unicorn/no-object-methods-with-collections base-unicorn.js
unicorn/no-optional-chaining-on-undeclared-variable base-unicorn.js
unicorn/no-process-exit Disabled because using process.exit is common to exit command-line apps without verbose output. base-unicorn.js
unicorn/no-redundant-comparison base-unicorn.js
unicorn/no-return-array-push base-unicorn.js
unicorn/no-selector-as-dom-name base-unicorn.js
unicorn/no-shorthand-property-overrides base-unicorn.js
unicorn/no-single-promise-in-promise-methods base-unicorn.js
unicorn/no-static-only-class base-unicorn.js
unicorn/no-subtraction-comparison base-unicorn.js
unicorn/no-thenable base-unicorn.js
unicorn/no-this-assignment Superseded by the @typescript-eslint/no-this-alias rule. base-unicorn.js
unicorn/no-this-outside-of-class base-unicorn.js
unicorn/no-top-level-assignment-in-function base-unicorn.js
unicorn/no-top-level-side-effects base-unicorn.js
unicorn/no-transition-all base-unicorn.js
unicorn/no-typeof-undefined base-unicorn.js
unicorn/no-uncalled-method base-unicorn.js
unicorn/no-undeclared-class-members base-unicorn.js
unicorn/no-unnecessary-array-flat-depth base-unicorn.js
unicorn/no-unnecessary-array-flat-map base-unicorn.js
unicorn/no-unnecessary-array-splice-count base-unicorn.js
unicorn/no-unnecessary-await base-unicorn.js
unicorn/no-unnecessary-boolean-comparison base-unicorn.js
unicorn/no-unnecessary-fetch-options base-unicorn.js
unicorn/no-unnecessary-global-this base-unicorn.js
unicorn/no-unnecessary-nested-ternary base-unicorn.js
unicorn/no-unnecessary-polyfills base-unicorn.js
unicorn/no-unnecessary-slice-end base-unicorn.js
unicorn/no-unnecessary-splice base-unicorn.js
unicorn/no-unnecessary-string-trim base-unicorn.js
unicorn/no-unreadable-array-destructuring base-unicorn.js
unicorn/no-unreadable-for-of-expression base-unicorn.js
unicorn/no-unreadable-iife base-unicorn.js
unicorn/no-unreadable-new-expression base-unicorn.js
unicorn/no-unreadable-object-destructuring base-unicorn.js
unicorn/no-unsafe-buffer-conversion base-unicorn.js
unicorn/no-unsafe-dom-html base-unicorn.js
unicorn/no-unsafe-promise-all-settled-values base-unicorn.js
unicorn/no-unsafe-property-key base-unicorn.js
unicorn/no-unsafe-sqlite-interpolation base-unicorn.js
unicorn/no-unsafe-string-replacement Disabled since it has too many false positives. base-unicorn.js
unicorn/no-unused-array-method-return base-unicorn.js
unicorn/no-unused-properties base-unicorn.js
unicorn/no-useless-boolean-cast base-unicorn.js
unicorn/no-useless-coercion base-unicorn.js
unicorn/no-useless-collection-argument base-unicorn.js
unicorn/no-useless-compound-assignment base-unicorn.js
unicorn/no-useless-concat base-unicorn.js
unicorn/no-useless-continue base-unicorn.js
unicorn/no-useless-delete-check base-unicorn.js
unicorn/no-useless-else base-unicorn.js
unicorn/no-useless-error-capture-stack-trace base-unicorn.js
unicorn/no-useless-fallback-in-spread base-unicorn.js
unicorn/no-useless-iterator-to-array base-unicorn.js
unicorn/no-useless-length-check base-unicorn.js
unicorn/no-useless-logical-operand base-unicorn.js
unicorn/no-useless-override base-unicorn.js
unicorn/no-useless-promise-resolve-reject base-unicorn.js
unicorn/no-useless-re-export base-unicorn.js
unicorn/no-useless-recursion base-unicorn.js
unicorn/no-useless-spread base-unicorn.js
unicorn/no-useless-switch-case base-unicorn.js
unicorn/no-useless-template-literals base-unicorn.js
unicorn/no-useless-undefined Disabled since it does not work properly with TypeScript. base-unicorn.js
unicorn/no-xor-as-exponentiation base-unicorn.js
unicorn/no-zero-fractions base-unicorn.js
unicorn/number-literal-case Disabled because this is handled by Prettier. base-unicorn.js
unicorn/numeric-separators-style base-unicorn.js
unicorn/operator-assignment base-unicorn.js
unicorn/prefer-abort-signal-any base-unicorn.js
unicorn/prefer-abort-signal-timeout base-unicorn.js
unicorn/prefer-add-event-listener base-unicorn.js
unicorn/prefer-add-event-listener-options base-unicorn.js
unicorn/prefer-aggregate-error base-unicorn.js
unicorn/prefer-array-find base-unicorn.js
unicorn/prefer-array-flat base-unicorn.js
unicorn/prefer-array-flat-map base-unicorn.js
unicorn/prefer-array-from-async base-unicorn.js
unicorn/prefer-array-from-map base-unicorn.js
unicorn/prefer-array-from-range base-unicorn.js
unicorn/prefer-array-index-of base-unicorn.js
unicorn/prefer-array-iterable-methods base-unicorn.js
unicorn/prefer-array-last-methods base-unicorn.js
unicorn/prefer-array-slice base-unicorn.js
unicorn/prefer-array-some base-unicorn.js
unicorn/prefer-at base-unicorn.js
unicorn/prefer-await base-unicorn.js
unicorn/prefer-bigint-literals base-unicorn.js
unicorn/prefer-blob-reading-methods base-unicorn.js
unicorn/prefer-block-statement-over-iife base-unicorn.js
unicorn/prefer-boolean-return base-unicorn.js
unicorn/prefer-class-fields base-unicorn.js
unicorn/prefer-classlist-toggle base-unicorn.js
unicorn/prefer-code-point base-unicorn.js
unicorn/prefer-continue base-unicorn.js
unicorn/prefer-date-now base-unicorn.js
unicorn/prefer-default-parameters base-unicorn.js
unicorn/prefer-direct-iteration base-unicorn.js
unicorn/prefer-dispose base-unicorn.js
unicorn/prefer-dom-node-append base-unicorn.js
unicorn/prefer-dom-node-html-methods base-unicorn.js
unicorn/prefer-dom-node-remove base-unicorn.js
unicorn/prefer-dom-node-replace-children base-unicorn.js
unicorn/prefer-dom-node-text-content base-unicorn.js
unicorn/prefer-early-return base-unicorn.js
unicorn/prefer-else-if base-unicorn.js
unicorn/prefer-error-is-error Disabled because ECMAScript 2027 APIs are too new to enforce. base-unicorn.js
unicorn/prefer-event-target base-unicorn.js
unicorn/prefer-explicit-viewport-units Disabled since it causes errors on JavaScript/TypeScript files. base-unicorn.js
unicorn/prefer-export-from base-unicorn.js
unicorn/prefer-flat-math-min-max base-unicorn.js
unicorn/prefer-get-or-insert-computed base-unicorn.js
unicorn/prefer-global-number-constants base-unicorn.js
unicorn/prefer-global-this base-unicorn.js
unicorn/prefer-group-by base-unicorn.js
unicorn/prefer-has-check base-unicorn.js
unicorn/prefer-hoisting-branch-code base-unicorn.js
unicorn/prefer-https base-unicorn.js
unicorn/prefer-identifier-import-export-specifiers base-unicorn.js
unicorn/prefer-import-meta-properties base-unicorn.js
unicorn/prefer-includes base-unicorn.js
unicorn/prefer-includes-over-repeated-comparisons Disabled since it does not work with common TypeScript narrowing patterns such as: `major === undefined
unicorn/prefer-iterable-in-constructor base-unicorn.js
unicorn/prefer-iterator-concat Disabled since Iterator.spread is not available in TypeScript 6. base-unicorn.js
unicorn/prefer-iterator-helpers base-unicorn.js
unicorn/prefer-iterator-to-array base-unicorn.js
unicorn/prefer-iterator-to-array-at-end base-unicorn.js
unicorn/prefer-keyboard-event-key base-unicorn.js
unicorn/prefer-location-assign base-unicorn.js
unicorn/prefer-logical-operator-over-ternary base-unicorn.js
unicorn/prefer-map-from-entries base-unicorn.js
unicorn/prefer-math-abs base-unicorn.js
unicorn/prefer-math-constants base-unicorn.js
unicorn/prefer-math-min-max base-unicorn.js
unicorn/prefer-math-trunc base-unicorn.js
unicorn/prefer-minimal-ternary base-unicorn.js
unicorn/prefer-modern-dom-apis base-unicorn.js
unicorn/prefer-modern-math-apis base-unicorn.js
unicorn/prefer-module base-unicorn.js
unicorn/prefer-native-coercion-functions base-unicorn.js
unicorn/prefer-negative-index base-unicorn.js
unicorn/prefer-node-protocol base-unicorn.js
unicorn/prefer-number-coercion base-unicorn.js
unicorn/prefer-number-is-safe-integer base-unicorn.js
unicorn/prefer-number-properties base-unicorn.js
unicorn/prefer-object-define-properties base-unicorn.js
unicorn/prefer-object-destructuring-defaults base-unicorn.js
unicorn/prefer-object-from-entries base-unicorn.js
unicorn/prefer-object-iterable-methods base-unicorn.js
unicorn/prefer-observer-apis base-unicorn.js
unicorn/prefer-optional-catch-binding base-unicorn.js
unicorn/prefer-path2d base-unicorn.js
unicorn/prefer-private-class-fields base-unicorn.js
unicorn/prefer-promise-try base-unicorn.js
unicorn/prefer-promise-with-resolvers base-unicorn.js
unicorn/prefer-prototype-methods base-unicorn.js
unicorn/prefer-query-selector base-unicorn.js
unicorn/prefer-queue-microtask base-unicorn.js
unicorn/prefer-reflect-apply base-unicorn.js
unicorn/prefer-regexp-escape base-unicorn.js
unicorn/prefer-regexp-test base-unicorn.js
unicorn/prefer-response-static-json base-unicorn.js
unicorn/prefer-scoped-selector base-unicorn.js
unicorn/prefer-set-has base-unicorn.js
unicorn/prefer-set-methods base-unicorn.js
unicorn/prefer-set-size base-unicorn.js
unicorn/prefer-short-arrow-method base-unicorn.js
unicorn/prefer-simple-condition-first base-unicorn.js
unicorn/prefer-simple-sort-comparator base-unicorn.js
unicorn/prefer-simplified-conditions base-unicorn.js
unicorn/prefer-single-array-predicate base-unicorn.js
unicorn/prefer-single-call base-unicorn.js
unicorn/prefer-single-object-destructuring base-unicorn.js
unicorn/prefer-single-replace base-unicorn.js
unicorn/prefer-smaller-scope base-unicorn.js
unicorn/prefer-split-limit base-unicorn.js
unicorn/prefer-spread base-unicorn.js
unicorn/prefer-string-match-all base-unicorn.js
unicorn/prefer-string-pad-start-end base-unicorn.js
unicorn/prefer-string-raw base-unicorn.js
unicorn/prefer-string-repeat base-unicorn.js
unicorn/prefer-string-replace-all base-unicorn.js
unicorn/prefer-string-slice base-unicorn.js
unicorn/prefer-string-starts-ends-with base-unicorn.js
unicorn/prefer-string-trim-start-end base-unicorn.js
unicorn/prefer-structured-clone base-unicorn.js
unicorn/prefer-switch base-unicorn.js
unicorn/prefer-temporal Disabled since Bun does not yet support the Temporal API. (Node.js does though.) base-unicorn.js
unicorn/prefer-ternary base-unicorn.js
unicorn/prefer-then-catch base-unicorn.js
unicorn/prefer-toggle-attribute base-unicorn.js
unicorn/prefer-top-level-await base-unicorn.js
unicorn/prefer-type-error base-unicorn.js
unicorn/prefer-type-literal-last base-unicorn.js
unicorn/prefer-uint8array-base64 base-unicorn.js
unicorn/prefer-unary-minus base-unicorn.js
unicorn/prefer-unicode-code-point-escapes base-unicorn.js
unicorn/prefer-url-can-parse base-unicorn.js
unicorn/prefer-url-href base-unicorn.js
unicorn/prefer-url-search-parameters base-unicorn.js
unicorn/prefer-while-loop-condition base-unicorn.js
unicorn/relative-url-style base-unicorn.js
unicorn/require-array-join-separator base-unicorn.js
unicorn/require-array-sort-compare Superseded by the @typescript-eslint/require-array-sort-compare rule (which is type-aware). base-unicorn.js
unicorn/require-css-escape base-unicorn.js
unicorn/require-frontmatter-fields base-unicorn.js
unicorn/require-module-attributes base-unicorn.js
unicorn/require-module-specifiers base-unicorn.js
unicorn/require-number-to-fixed-digits-argument base-unicorn.js
unicorn/require-passive-events base-unicorn.js
unicorn/require-post-message-target-origin Disabled since it is not recommended by the plugin authors. base-unicorn.js
unicorn/require-proxy-trap-boolean-return base-unicorn.js
unicorn/single-line-block-comment-style The default is “multiline”, which is not idiomatic in the TypeScript ecosystem. base-unicorn.js
unicorn/string-content Disabled since string content enforcement is too project-specific. base-unicorn.js
unicorn/switch-case-braces base-unicorn.js
unicorn/switch-case-break-position base-unicorn.js
unicorn/template-indent Even though this rule is in eslint-config-prettier, it is not actually handled by Prettier. base-unicorn.js
unicorn/text-encoding-identifier-case base-unicorn.js
unicorn/throw-new-error base-unicorn.js
unicorn/try-complexity base-unicorn.js
Rule Name Enabled Parent Configs Notes Source File
complete-sentences-jsdoc
complete-sentences-line-comments
consistent-enum-values
consistent-object-braces
eqeqeq-fix
format-jsdoc-comments
format-line-comments
jsdoc-code-block-language
newline-between-switch-case
no-empty-jsdoc
no-empty-line-comments
no-explicit-array-loops
no-explicit-map-set-loops
no-for-in
no-let-any
no-mutable-return
no-number-enums
no-object-any
no-object-methods-with-map-set
no-redundant-jsdoc-default
no-string-length-0
no-template-curly-in-string-fix
no-undefined-return-type
no-unnecessary-assignment
no-unsafe-plusplus
no-useless-return
no-void-return-type
prefer-const
prefer-is-array
prefer-path-resolve
prefer-plusplus
prefer-postfix-plusplus
prefer-readonly-parameter-types
prefer-unknown-type-annotations
require-ascii
require-break
require-capital-const-assertions
require-capital-read-only
require-unannotated-const-assertions
require-variadic-function-argument
sort-destructured-properties
sort-objects
strict-array-methods
strict-enums
strict-undefined-functions
strict-void-functions
type-declaration-immutability