Skip to main content

eslint-config-complete

npm version

Introduction

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.

Install

Using complete-lint

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. (However, complete-lint will not work with the pnpm package manager, since pnpm does not handle transitive dependencies properly.)

For installation instructions, see the complete-lint page.

Manually

If you do not want to use the complete-lint meta-package, then you can install this config manually:

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

(eslint and typescript are peer-dependencies.)

Usage

Here's an example "eslint.config.mjs" file that loads the base config:

// @ts-check

import { completeConfigBase } from "eslint-config-complete";
import tseslint from "typescript-eslint";

export default tseslint.config(...completeConfigBase);

If you have a monorepo, you might also want to load the monorepo config:

// @ts-check

import {
completeConfigBase,
completeConfigMonorepo,
} from "eslint-config-complete";
import tseslint from "typescript-eslint";

export default tseslint.config(
...completeConfigBase,
...completeConfigMonorepo,
);

Why Do I Need To Use ESLint?

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. 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!

Why Do I Need eslint-config-complete?

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).

Our Config Philosophy

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.)

Auto-Fixing

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 (i.e. VSCode) to automatically run --fix whenever you save a file.

Dealing with False Positives

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 VSCode, 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. Some rules won't make sense for every project and that's okay!

Rule List

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

Core ESLint Rules

Rule NameEnabledParent ConfigsNotesSource File
accessor-pairsbase-eslint.js
array-callback-returnThe checkForEach option is enabled to make the rule stricter.base-eslint.js
arrow-body-stylebase-eslint.js
block-scoped-varbase-eslint.js
camelcaseSuperseded by the @typescript-eslint/naming-convention rule. (camelcase is used to enforce naming conventions.)base-eslint.js
capitalized-commentsSuperseded by the complete/complete-sentences-jsdoc and complete/complete-sentences-line-comments rules.base-eslint.js
class-methods-use-thisSuperseded by the @typescript-eslint/class-methods-use-this rule.base-eslint.js
complexityDisabled since cyclomatic complexity is not a good enough general indicator of code complexity and leads to too many false positives.base-eslint.js
consistent-returnSuperseded by the @typescript-eslint/consistent-return rule.base-eslint.js
consistent-thisbase-eslint.js
constructor-superbase-eslint.js
curlyAlways 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 eslint-prettier-config.base-eslint.js
default-caseDisabled since it would cause the @typescript-eslint/switch-exhaustiveness-check rule to not work properly.base-eslint.js
default-case-lastbase-eslint.js
default-param-lastSuperseded by the @typescript-eslint/default-param-last rule.base-eslint.js
dot-notationSuperseded by the @typescript-eslint/dot-notation rule.base-eslint.js
eqeqeqSuperseded by the complete/eqeqeq-fix rule.base-eslint.js
for-directionbase-eslint.js
func-name-matchingbase-eslint.js
func-namesbase-eslint.js
func-styleDisabled since it is common in the TypeScript ecosystem to use both function forms, depending on the situation.base-eslint.js
getter-returnbase-eslint.js
grouped-accessor-pairsbase-eslint.js
guard-for-inSuperseded by the complete/no-for-in rule.base-eslint.js
id-denylistDisabled since it is expected to be configured with project-specific keywords.base-eslint.js
id-lengthDisabled because short variable names are understandable in many contexts.base-eslint.js
id-matchSuperseded by the @typescript-eslint/naming-convention rule. (id-match is used to enforce naming conventions.)base-eslint.js
init-declarationsSuperseded by the @typescript-eslint/init-declarations rule.base-eslint.js
logical-assignment-operatorsThe enforceForIfStatements option is enabled to make the rule stricter.base-eslint.js
max-classes-per-filebase-eslint.js
max-depthDisabled since this rule is too prescriptive for general-purpose use.base-eslint.js
max-linesDisabled because enforcing an arbitrary line threshold for every file in a project does not provide much value.base-eslint.js
max-lines-per-functionDisabled because enforcing an arbitrary line threshold for every function in a project does not provide much value.base-eslint.js
max-nested-callbacksbase-eslint.js
max-paramsSuperseded by the @typescript-eslint/max-params rule.base-eslint.js
max-statementsDisabled because enforcing an arbitrary statement threshold for every function in a project does not provide much value.base-eslint.js
new-capbase-eslint.js
no-alertbase-eslint.js
no-array-constructorSuperseded by the @typescript-eslint/no-array-constructor rule.base-eslint.js
no-async-promise-executorbase-eslint.js
no-await-in-loopbase-eslint.js
no-bitwisebase-eslint.js
no-callerbase-eslint.js
no-case-declarationsbase-eslint.js
no-class-assignbase-eslint.js
no-compare-neg-zerobase-eslint.js
no-cond-assignbase-eslint.js
no-consoleDisabled because command-line programs written in TypeScript commonly write to standard out and standard error.base-eslint.js
no-const-assignbase-eslint.js
no-constant-binary-expressionbase-eslint.js
no-constant-conditionbase-eslint.js
no-constructor-returnbase-eslint.js
no-continueDisabled 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-regexbase-eslint.js
no-debuggerbase-eslint.js
no-delete-varbase-eslint.js
no-div-regexDisabled since it is incompatible with the unicorn/better-regex rule.base-eslint.js
no-dupe-argsbase-eslint.js
no-dupe-class-membersbase-eslint.js
no-dupe-else-ifbase-eslint.js
no-dupe-keysbase-eslint.js
no-duplicate-casebase-eslint.js
no-duplicate-importsSuperseded by the import-x/no-duplicates rule.base-eslint.js
no-else-returnThe allowElseIf option is disabled to make the rule stricter.base-eslint.js
no-emptybase-eslint.js
no-empty-character-classbase-eslint.js
no-empty-functionSuperseded by the @typescript-eslint/no-empty-function rule.base-eslint.js
no-empty-patternbase-eslint.js
no-empty-static-blockbase-eslint.js
no-eq-nullbase-eslint.js
no-evalbase-eslint.js
no-ex-assignbase-eslint.js
no-extend-nativebase-eslint.js
no-extra-bindbase-eslint.js
no-extra-boolean-castbase-eslint.js
no-extra-labelbase-eslint.js
no-fallthroughbase-eslint.js
no-func-assignbase-eslint.js
no-global-assignbase-eslint.js
no-implicit-coercionbase-eslint.js
no-implicit-globalsbase-eslint.js
no-implied-evalSuperseded by the @typescript-eslint/no-implied-eval rule.base-eslint.js
no-import-assignbase-eslint.js
no-inline-commentsDisabled because inline comments are common in the TypeScript ecosystem.base-eslint.js
no-inner-declarationsbase-eslint.js
no-invalid-regexpbase-eslint.js
no-invalid-thisSuperseded by the @typescript-eslint/no-invalid-this rule.base-eslint.js
no-irregular-whitespacebase-eslint.js
no-iteratorbase-eslint.js
no-label-varbase-eslint.js
no-labelsbase-eslint.js
no-lone-blocksbase-eslint.js
no-lonely-ifbase-eslint.js
no-loop-funcSuperseded by the @typescript-eslint/no-loop-func rule.base-eslint.js
no-loss-of-precisionSuperseded by the @typescript-eslint/no-loss-of-precision rule.base-eslint.js
no-magic-numbersSuperseded by the @typescript-eslint/no-magic-numbers rule.base-eslint.js
no-misleading-character-classbase-eslint.js
no-multi-assignbase-eslint.js
no-multi-strbase-eslint.js
no-negated-conditionSuperseded by the unicorn/no-negated-condition rule.base-eslint.js
no-nested-ternaryunicorn/no-nested-ternary is a modified version of this rule but that version is less strict.base-eslint.js
no-newbase-eslint.js
no-new-funcbase-eslint.js
no-new-native-nonconstructorbase-eslint.js
no-new-wrappersbase-eslint.js
no-nonoctal-decimal-escapebase-eslint.js
no-obj-callsbase-eslint.js
no-object-constructorbase-eslint.js
no-octalbase-eslint.js
no-octal-escapebase-eslint.js
no-param-reassignThe options are copied from Airbnb.base-eslint.js
no-plusplusDisabled 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-returnbase-eslint.js
no-protobase-eslint.js
no-prototype-builtinsbase-eslint.js
no-redeclareSuperseded by the @typescript-eslint/block-spacing rule.base-eslint.js
no-regex-spacesbase-eslint.js
no-restricted-exportsThe options are copied from Airbnb.base-eslint.js
no-restricted-globalsThe options are copied from Airbnb.base-eslint.js
no-restricted-importsSuperseded by the @typescript-eslint/no-restricted-imports rule.base-eslint.js
no-restricted-propertiesThe options are copied from Airbnb.base-eslint.js
no-restricted-syntaxDisabled because it is intended for disallowing specific language features per-project.base-eslint.js
no-return-assignThe always option is provided to make the rule stricter.base-eslint.js
no-script-urlbase-eslint.js
no-self-assignbase-eslint.js
no-self-comparebase-eslint.js
no-sequencesDisabled because it can conflict with Prettier.base-eslint.js
no-setter-returnbase-eslint.js
no-shadowSuperseded by the @typescript-eslint/no-shadow rule.base-eslint.js
no-shadow-restricted-namesbase-eslint.js
no-sparse-arraysbase-eslint.js
no-template-curly-in-stringbase-eslint.js
no-ternaryDisabled 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-superbase-eslint.js
no-throw-literalSuperseded by the @typescript-eslint/no-throw-literal rule.base-eslint.js
no-undefbase-eslint.js
no-undef-initbase-eslint.js
no-undefinedDisabled because in TypeScript, it is common to explicitly check for undefined for the purposes of type narrowing.base-eslint.js
no-underscore-dangleDisabled since it is a common pattern to use underscores to temporarily allow unused variables during development.base-eslint.js
no-unexpected-multilineDisabled because this is handled by Prettier.base-eslint.js
no-unmodified-loop-conditionbase-eslint.js
no-unneeded-ternaryThe defaultAssignment option is disabled to make the rule stricter.base-eslint.js
no-unreachablebase-eslint.js
no-unreachable-loopbase-eslint.js
no-unsafe-finallybase-eslint.js
no-unsafe-negationbase-eslint.js
no-unsafe-optional-chainingbase-eslint.js
no-unused-expressionsSuperseded by the @typescript-eslint/no-unused-expressions rule.base-eslint.js
no-unused-labelsbase-eslint.js
no-unused-private-class-membersbase-eslint.js
no-unused-varsSuperseded by the @typescript-eslint/no-unused-vars rule.base-eslint.js
no-use-before-defineSuperseded by the @typescript-eslint/no-use-before-define rule.base-eslint.js
no-useless-assignmentbase-eslint.js
no-useless-backreferencebase-eslint.js
no-useless-callbase-eslint.js
no-useless-catchbase-eslint.js
no-useless-computed-keyThe enforceForClassMembers option is enabled to make the rule stricter.base-eslint.js
no-useless-concatbase-eslint.js
no-useless-constructorSuperseded by the @typescript-eslint/no-useless-constructor rule.base-eslint.js
no-useless-escapebase-eslint.js
no-useless-renamebase-eslint.js
no-useless-returnSuperseded by the complete/no-useless-return rule (since the auto-fix is usually unwanted).base-eslint.js
no-varbase-eslint.js
no-voidbase-eslint.js
no-warning-commentsSuperseded by the unicorn/expiring-todo-comments rule.base-eslint.js
no-withbase-eslint.js
object-shorthandThe ignoreConstructors option is disabled to make the rule stricter.base-eslint.js
one-varThe never option is provided to disallow multi-variable declarations (since they can be confusing).base-eslint.js
operator-assignmentbase-eslint.js
prefer-arrow-callbackbase-eslint.js
prefer-constSuperseded by the complete/prefer-const rule (since the auto-fix is usually unwanted).base-eslint.js
prefer-destructuringSuperseded by the @typescript-eslint/prefer-destructuring rule.base-eslint.js
prefer-exponentiation-operatorbase-eslint.js
prefer-named-capture-groupDisabled 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-literalsbase-eslint.js
prefer-object-has-ownbase-eslint.js
prefer-object-spreadbase-eslint.js
prefer-promise-reject-errorsSuperseded by the @typescript-eslint/prefer-promise-reject-errors rule.base-eslint.js
prefer-regex-literalsThe disallowRedundantWrapping option is enabled to make the rule stricter.base-eslint.js
prefer-rest-paramsbase-eslint.js
prefer-spreadbase-eslint.js
prefer-templatebase-eslint.js
radixbase-eslint.js
require-atomic-updatesDisabled since Airbnb reports that the rule is "very buggy".base-eslint.js
require-awaitSuperseded by the @typescript-eslint/require-await rule.base-eslint.js
require-unicode-regexpDisabled because requiring the u or the v flag for ASCII text is verbose and cumbersome. (Even though these flags would also enable regex strict mode, the marginal benefit is not worth the verbosity.)base-eslint.js
require-yieldbase-eslint.js
sort-importsDisabled since this is automatically handled by prettier-plugin-organize-imports.base-eslint.js
sort-keysDisabled because object keys are often not meant to be sorted in alphabetical order.base-eslint.js
sort-varsDisabled because variable declarations are often not meant to be sorted in alphabetical order.base-eslint.js
strictThe never option is provided to make the rule stricter.base-eslint.js
symbol-descriptionbase-eslint.js
unicode-bombase-eslint.js
use-isnanbase-eslint.js
valid-typeofbase-eslint.js
vars-on-topbase-eslint.js
yodabase-eslint.js

@typescript-eslint Rules

Rule NameEnabledParent ConfigsNotesSource File
@typescript-eslint/adjacent-overload-signaturesbase-typescript-eslint.js
@typescript-eslint/array-typeThe 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-thenablebase-typescript-eslint.js
@typescript-eslint/ban-ts-commentbase-typescript-eslint.js
@typescript-eslint/ban-tslint-commentbase-typescript-eslint.js
@typescript-eslint/class-literal-property-stylebase-typescript-eslint.js
@typescript-eslint/class-methods-use-thisbase-typescript-eslint.js
@typescript-eslint/consistent-generic-constructorsbase-typescript-eslint.js
@typescript-eslint/consistent-indexed-object-stylebase-typescript-eslint.js
@typescript-eslint/consistent-returnDisabled since this is handled by the noImplicitReturns TypeScript compiler flag.base-typescript-eslint.js
@typescript-eslint/consistent-type-assertionsbase-typescript-eslint.js
@typescript-eslint/consistent-type-definitionsbase-typescript-eslint.js
@typescript-eslint/consistent-type-exportsbase-typescript-eslint.js
@typescript-eslint/consistent-type-importsbase-typescript-eslint.js
@typescript-eslint/default-param-lastbase-typescript-eslint.js
@typescript-eslint/dot-notationbase-typescript-eslint.js
@typescript-eslint/explicit-function-return-typeDisabled 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-accessibilityDisabled 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-typesbase-typescript-eslint.js
@typescript-eslint/init-declarationsDisabled 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-paramsDisabled 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-orderingDisabled since prescribed class ordering is too project-specific.base-typescript-eslint.js
@typescript-eslint/method-signature-stylebase-typescript-eslint.js
@typescript-eslint/naming-conventionThe 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-constructorbase-typescript-eslint.js
@typescript-eslint/no-array-deletebase-typescript-eslint.js
@typescript-eslint/no-base-to-stringbase-typescript-eslint.js
@typescript-eslint/no-confusing-non-null-assertionbase-typescript-eslint.js
@typescript-eslint/no-confusing-void-expressionbase-typescript-eslint.js
@typescript-eslint/no-deprecatedbase-typescript-eslint.js
@typescript-eslint/no-dupe-class-membersDisabled since it is superfluous when using TypeScript according to the ESLint documentation.base-typescript-eslint.js
@typescript-eslint/no-duplicate-enum-valuesbase-typescript-eslint.js
@typescript-eslint/no-duplicate-type-constituentsbase-typescript-eslint.js
@typescript-eslint/no-dynamic-deletebase-typescript-eslint.js
@typescript-eslint/no-empty-functionbase-typescript-eslint.js
@typescript-eslint/no-empty-interfaceThe 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-typebase-typescript-eslint.js
@typescript-eslint/no-explicit-anybase-typescript-eslint.js
@typescript-eslint/no-extra-non-null-assertionbase-typescript-eslint.js
@typescript-eslint/no-extraneous-classbase-typescript-eslint.js
@typescript-eslint/no-floating-promises- The ignoreVoid option is disabled to make the rule stricter. - The rule is disabled in "*.test.ts" files because the built-in Node test runner returns a promise that is not meant to be awaited.base-typescript-eslint.js
@typescript-eslint/no-for-in-arraybase-typescript-eslint.js
@typescript-eslint/no-implied-evalbase-typescript-eslint.js
@typescript-eslint/no-import-type-side-effectsbase-typescript-eslint.js
@typescript-eslint/no-inferrable-typesbase-typescript-eslint.js
@typescript-eslint/no-invalid-thisThe capIsConstructor option is disabled to make the rule stricter.base-typescript-eslint.js
@typescript-eslint/no-invalid-void-typebase-typescript-eslint.js
@typescript-eslint/no-loop-funcbase-typescript-eslint.js
@typescript-eslint/no-loss-of-precisionbase-typescript-eslint.js
@typescript-eslint/no-magic-numbersDisabled since it results in too many false positives.base-typescript-eslint.js
@typescript-eslint/no-meaningless-void-operatorbase-typescript-eslint.js
@typescript-eslint/no-misused-newbase-typescript-eslint.js
@typescript-eslint/no-misused-promisesbase-typescript-eslint.js
@typescript-eslint/no-mixed-enumsbase-typescript-eslint.js
@typescript-eslint/no-namespacebase-typescript-eslint.js
@typescript-eslint/no-non-null-asserted-nullish-coalescingbase-typescript-eslint.js
@typescript-eslint/no-non-null-asserted-optional-chainbase-typescript-eslint.js
@typescript-eslint/no-non-null-assertionbase-typescript-eslint.js
@typescript-eslint/no-redeclareDisabled 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-constituentsbase-typescript-eslint.js
@typescript-eslint/no-require-importsbase-typescript-eslint.js
@typescript-eslint/no-restricted-importsConfigured to prevent importing with some common patterns that are almost always a mistake: - "src" directories (but allowed in test files that are in a separate "tests" directory) - "dist" directories - "index" files (things in the same package should directly import instead of use the public API)base-typescript-eslint.js
@typescript-eslint/no-restricted-typesDisabled since this rule is intended to be used for project-specific types.base-typescript-eslint.js
@typescript-eslint/no-shadowbase-typescript-eslint.js
@typescript-eslint/no-this-aliasbase-typescript-eslint.js
@typescript-eslint/no-type-aliasDisabled because this rule is deprecated.base-typescript-eslint.js
@typescript-eslint/no-unnecessary-boolean-literal-comparebase-typescript-eslint.js
@typescript-eslint/no-unnecessary-conditionbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-parameter-property-assignmentbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-qualifierbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-template-expressionbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-argumentsbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-assertionbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-constraintbase-typescript-eslint.js
@typescript-eslint/no-unnecessary-type-parametersbase-typescript-eslint.js
@typescript-eslint/no-unsafe-argumentbase-typescript-eslint.js
@typescript-eslint/no-unsafe-assignmentbase-typescript-eslint.js
@typescript-eslint/no-unsafe-callbase-typescript-eslint.js
@typescript-eslint/no-unsafe-declaration-mergingbase-typescript-eslint.js
@typescript-eslint/no-unsafe-enum-comparisonbase-typescript-eslint.js
@typescript-eslint/no-unsafe-function-typebase-typescript-eslint.js
@typescript-eslint/no-unsafe-member-accessbase-typescript-eslint.js
@typescript-eslint/no-unsafe-returnbase-typescript-eslint.js
@typescript-eslint/no-unsafe-unary-minusbase-typescript-eslint.js
@typescript-eslint/no-unused-expressionsThe allowTaggedTemplates option is enabled to allow the rule to work with libraries like execa.base-typescript-eslint.js
@typescript-eslint/no-unused-varsThe 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-defineDisabled because it can prevent code from being structured sequentially.base-typescript-eslint.js
@typescript-eslint/no-useless-constructorbase-typescript-eslint.js
@typescript-eslint/no-useless-empty-exportbase-typescript-eslint.js
@typescript-eslint/no-var-requiresbase-typescript-eslint.js
@typescript-eslint/no-wrapper-object-typesbase-typescript-eslint.js
@typescript-eslint/non-nullable-type-assertion-stylebase-typescript-eslint.js
@typescript-eslint/only-throw-errorbase-typescript-eslint.js
@typescript-eslint/parameter-propertiesbase-typescript-eslint.js
@typescript-eslint/prefer-as-constbase-typescript-eslint.js
@typescript-eslint/prefer-destructuringObject destructuring is enforced but array destructuring is not. This matches usage in the general TypeScript ecosystem.base-typescript-eslint.js
@typescript-eslint/prefer-enum-initializersbase-typescript-eslint.js
@typescript-eslint/prefer-findbase-typescript-eslint.js
@typescript-eslint/prefer-for-ofbase-typescript-eslint.js
@typescript-eslint/prefer-function-typebase-typescript-eslint.js
@typescript-eslint/prefer-includesbase-typescript-eslint.js
@typescript-eslint/prefer-literal-enum-memberbase-typescript-eslint.js
@typescript-eslint/prefer-namespace-keywordbase-typescript-eslint.js
@typescript-eslint/prefer-nullish-coalescingbase-typescript-eslint.js
@typescript-eslint/prefer-optional-chainDisabled because it can modify the type of boolean declarations, which is undesired in some circumstances.base-typescript-eslint.js
@typescript-eslint/prefer-promise-reject-errorsThe allowEmptyReject option is enabled since this is a common pattern.base-typescript-eslint.js
@typescript-eslint/prefer-readonlybase-typescript-eslint.js
@typescript-eslint/prefer-readonly-parameter-typesSuperseded by the complete/prefer-readonly-parameter-types rule.base-typescript-eslint.js
@typescript-eslint/prefer-reduce-type-parameterbase-typescript-eslint.js
@typescript-eslint/prefer-regexp-execDisabled since using the String.match form might make code easier to read.base-typescript-eslint.js
@typescript-eslint/prefer-return-this-typebase-typescript-eslint.js
@typescript-eslint/prefer-string-starts-ends-withbase-typescript-eslint.js
@typescript-eslint/prefer-ts-expect-errorbase-typescript-eslint.js
@typescript-eslint/promise-function-asyncbase-typescript-eslint.js
@typescript-eslint/require-array-sort-comparebase-typescript-eslint.js
@typescript-eslint/require-awaitbase-typescript-eslint.js
@typescript-eslint/restrict-plus-operandsThe various "allow" options are disabled to make the rule stricter.base-typescript-eslint.js
@typescript-eslint/restrict-template-expressionsDisabled since a common use-case of template strings is to coerce everything to a string.base-typescript-eslint.js
@typescript-eslint/return-awaitEven though the core rule was deprecated, the extended rule uses type information, so it is much better.base-typescript-eslint.js
@typescript-eslint/sort-type-constituentsDisabled since in it does not make sense to sort a union alphabetically in many cases.base-typescript-eslint.js
@typescript-eslint/strict-boolean-expressionsThe allowString and allowNumber options are disabled to make the rule stricter.base-typescript-eslint.js
@typescript-eslint/switch-exhaustiveness-checkThe 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-referencebase-typescript-eslint.js
@typescript-eslint/typedefDisabled 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-methodbase-typescript-eslint.js
@typescript-eslint/unified-signaturesbase-typescript-eslint.js
@typescript-eslint/use-unknown-in-catch-callback-variablebase-typescript-eslint.js

eslint-plugin-import-x Rules

Rule NameEnabledParent ConfigsNotesSource File
import-x/consistent-type-specifier-stylebase-import-x.js
import-x/defaultDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/dynamic-import-chunknameDisabled because it is only useful in environments that use webpack.base-import-x.js
import-x/exportbase-import-x.js
import-x/exports-lastDisabled because this style is not generally used.base-import-x.js
import-x/extensionsDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/firstbase-import-x.js
import-x/group-exportsDisabled because this style is not generally used.base-import-x.js
import-x/imports-firstDisabled because this rule is deprecated.base-import-x.js
import-x/max-dependenciesDisabled since it will trigger false positives in codebases that prefer smaller files.base-import-x.js
import-x/namedDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/namespaceDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/newline-after-importbase-import-x.js
import-x/no-absolute-pathbase-import-x.js
import-x/no-amdbase-import-x.js
import-x/no-anonymous-default-exportDisabled since we disallow default exports elsewhere in this config (in favor of named exports).base-import-x.js
import-x/no-commonjsbase-import-x.js
import-x/no-cyclebase-import-x.js
import-x/no-default-exportThe case against default exports is laid out by Basarat Ali Syed.base-import-x.js
import-x/no-deprecatedSuperseded 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-duplicatesbase-import-x.js
import-x/no-dynamic-requirebase-import-x.js
import-x/no-empty-named-blocksbase-import-x.js
import-x/no-extraneous-dependenciesWe add common patterns to the "devDependencies" array.base-import-x.js
import-x/no-import-module-exportsbase-import-x.js
import-x/no-internal-modulesDisabled since a prescribed import pattern is not generalizable enough across projects.base-import-x.js
import-x/no-mutable-exportsbase-import-x.js
import-x/no-named-as-defaultbase-import-x.js
import-x/no-named-as-default-memberDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/no-named-defaultbase-import-x.js
import-x/no-named-exportDisabled since we disallow default exports elsewhere in this config (in favor of named exports).base-import-x.js
import-x/no-namespaceDisabled since it is too prescriptive for a general audience. (Using import * as is common.)base-import-x.js
import-x/no-nodejs-modulesDisabled because it is only used in specific environments (like the browser).base-import-x.js
import-x/no-relative-packagesbase-import-x.js
import-x/no-relative-parent-importsDisabled since a forward import direction pattern is not generalizable enough across projects.base-import-x.js
import-x/no-rename-defaultTemporarily disabled due to false positives.base-import-x.js
import-x/no-restricted-pathsDisabled since this rule should only contain a project-specific path restriction.base-import-x.js
import-x/no-self-importbase-import-x.js
import-x/no-unassigned-importbase-import-x.js
import-x/no-unresolvedDisabled because this is already handled by the TypeScript compiler.base-import-x.js
import-x/no-unused-modulesDisabled since this check is better performed by the knip tool.base-import-x.js
import-x/no-useless-path-segmentsbase-import-x.js
import-x/no-webpack-loader-syntaxbase-import-x.js
import-x/orderDisabled because this is automatically handled by prettier-plugin-organize-imports.base-import-x.js
import-x/prefer-default-exportDisabled because we disallow default exports elsewhere in this config (in favor of named exports).base-import-x.js
import-x/unambiguousDisabled because this is already handled by the TypeScript compiler.base-import-x.js

eslint-plugin-jsdoc Rules

Rule NameEnabledParent ConfigsNotesSource File
jsdoc/check-accessDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/check-alignmentSuperseded by the complete/limit-jsdoc-comments rule.base-jsdoc.js
jsdoc/check-examplesDisabled since it does not work with ESLint 8.base-jsdoc.js
jsdoc/check-indentationSuperseded by the complete/limit-jsdoc-comments rule.base-jsdoc.js
jsdoc/check-line-alignmentDisabled since this is not a common formatting scheme. It is also not recommended by the plugin authors.base-jsdoc.js
jsdoc/check-param-namesbase-jsdoc.js
jsdoc/check-property-namesDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/check-syntaxDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/check-tag-namesbase-jsdoc.js
jsdoc/check-template-namesbase-jsdoc.js
jsdoc/check-typesDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/check-valuesbase-jsdoc.js
jsdoc/convert-to-jsdoc-commentsDisabled since it is idiomatic in the TypeScript ecosystem to use a mixture of both JSDoc and non-JSDoc comments.base-jsdoc.js
jsdoc/empty-tagsbase-jsdoc.js
jsdoc/implements-on-classesbase-jsdoc.js
jsdoc/imports-as-dependenciesDisabled since you cannot configure it with a path to the correct "package.json" file.base-jsdoc.js
jsdoc/informative-docsbase-jsdoc.js
jsdoc/lines-before-blockDisabled since it is currently bugged.base-jsdoc.js
jsdoc/match-descriptionSuperseded by the complete/jsdoc-full-sentences rule.base-jsdoc.js
jsdoc/match-nameDisabled because it is only needed for projects with specific JSDoc requirements.base-jsdoc.js
jsdoc/multiline-blocksSuperseded by the complete/limit-jsdoc-comments rule.base-jsdoc.js
jsdoc/no-bad-blocksDisabled because it provides little value; it only detects JSDoc comments with tags in them.base-jsdoc.js
jsdoc/no-blank-block-descriptionsSuperseded by the complete/format-jsdoc-comments rule.base-jsdoc.js
jsdoc/no-blank-blocksSuperseded by the complete/no-empty-jsdoc rule.base-jsdoc.js
jsdoc/no-defaultsDisabled because it provides little value; the @default tag is rare.base-jsdoc.js
jsdoc/no-missing-syntaxDisabled because it is too project-specific.base-jsdoc.js
jsdoc/no-multi-asterisksSuperseded by the complete/limit-jsdoc-comments rule.base-jsdoc.js
jsdoc/no-restricted-syntaxDisabled because it is intended for disabling of specific language features per-project.base-jsdoc.js
jsdoc/no-typesThe contexts option is set to any to make the rule stricter.base-jsdoc.js
jsdoc/no-undefined-typesDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/require-asterisk-prefixbase-jsdoc.js
jsdoc/require-descriptionDisabled because it is overboard for every function to have a description.base-jsdoc.js
jsdoc/require-description-complete-sentenceSuperseded by the complete/jsdoc-complete-sentences rule.base-jsdoc.js
jsdoc/require-exampleDisabled because it is overboard for every function to require an example.base-jsdoc.js
jsdoc/require-file-overviewDisabled because it is overboard for every file to require an overview.base-jsdoc.js
jsdoc/require-hyphen-before-param-descriptionThe never option is provided to make the rule match the format of the official TypeScript codebase.base-jsdoc.js
jsdoc/require-jsdocDisabled since it is overboard for every function to have a JSDoc comment.base-jsdoc.js
jsdoc/require-paramConfigured to only apply when there are one or more parameters.base-jsdoc.js
jsdoc/require-param-descriptionThe contexts option is set to any to make the rule stricter.base-jsdoc.js
jsdoc/require-param-nameThe contexts option is set to any to make the rule stricter.base-jsdoc.js
jsdoc/require-param-typeDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/require-propertyDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/require-property-descriptionbase-jsdoc.js
jsdoc/require-property-namebase-jsdoc.js
jsdoc/require-property-typeDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/require-returnsDisabled because it is overboard for every function to document every return value.base-jsdoc.js
jsdoc/require-returns-checkDisabled because it is overboard for every function to document every return value.base-jsdoc.js
jsdoc/require-returns-descriptionThe contexts option is set to any to make the rule stricter.base-jsdoc.js
jsdoc/require-returns-typeDisabled because it is not needed in TypeScript.base-jsdoc.js
jsdoc/require-templateDisabled because it is overboard to document every generic type variable.base-jsdoc.js
jsdoc/require-throwsDisabled because it is overboard to document every throw statement.base-jsdoc.js
jsdoc/require-yieldsDisabled because it is overboard to document every yield.base-jsdoc.js
jsdoc/require-yields-checkDisabled because it is overboard to document every yield.base-jsdoc.js
jsdoc/sort-tagsDisabled because it is not very useful. In most cases, a function will only have @param and @return tags, making sorting unnecessary.base-jsdoc.js
jsdoc/tag-linesSuperseded by the complete/format-jsdoc-comments rule.base-jsdoc.js
jsdoc/text-escapingDisabled since it is only useful in certain environments (e.g. when your project converts JSDoc comments to Markdown).base-jsdoc.js
jsdoc/valid-typesDisabled because it is not needed in TypeScript.base-jsdoc.js

eslint-plugin-n Rules

Rule NameEnabledParent ConfigsNotesSource File
n/callback-returnDisabled since stylistic rules from this plugin are not used.base-n.js
n/exports-styleDisabled since stylistic rules from this plugin are not used.base-n.js
n/file-extension-in-importThis rule is helpful to automatically fix file extensions in import statements throughout an entire codebase.base-n.js
n/global-requireDisabled since stylistic rules from this plugin are not used.base-n.js
n/handle-callback-errbase-n.js
n/hashbangDisabled 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-literalbase-n.js
n/no-deprecated-apibase-n.js
n/no-exports-assignbase-n.js
n/no-extraneous-importDisabled since it is handled by the TypeScript compiler.base-n.js
n/no-extraneous-requireDisabled since require statements are not used in TypeScript code.base-n.js
n/no-hide-core-modulesDisabled because this rule is deprecated.base-n.js
n/no-missing-importDisabled since it is handled by the TypeScript compiler.base-n.js
n/no-missing-requireDisabled since it is handled by the TypeScript compiler.base-n.js
n/no-mixed-requiresDisabled since stylistic rules from this plugin are not used.base-n.js
n/no-new-requirebase-n.js
n/no-path-concatbase-n.js
n/no-process-envDisabled since stylistic rules from this plugin are not used.base-n.js
n/no-process-exitDisabled because using process.exit is common to exit command-line applications without verbose output.base-n.js
n/no-restricted-importDisabled since stylistic rules from this plugin are not used.base-n.js
n/no-restricted-requireDisabled since stylistic rules from this plugin are not used.base-n.js
n/no-syncDisabled since stylistic rules from this plugin are not used.base-n.js
n/no-unpublished-binbase-n.js
n/no-unpublished-importAn exception is made for files in a "scripts" directory, since those should be allowed to import from "devDependencies".base-n.js
n/no-unpublished-requirebase-n.js
n/no-unsupported-features/es-builtinsDisabled because it is assumed that we are running on modern versions of Node.js.base-n.js
n/no-unsupported-features/es-syntaxDisabled 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-builtinsDisabled since it is handled by the TypeScript compiler.base-n.js
n/prefer-global/bufferDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/consoleDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/processDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/text-decoderDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/text-encoderDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/urlDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-global/url-search-paramsDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-node-protocolSuperseded by the unicorn/prefer-node-protocol rule.base-n.js
n/prefer-promises/dnsDisabled since stylistic rules from this plugin are not used.base-n.js
n/prefer-promises/fsDisabled since stylistic rules from this plugin are not used.base-n.js
n/process-exit-as-throwbase-n.js
n/shebangSuperseded by the n/hashbang rule.base-n.js

eslint-plugin-unicorn Rules

Rule NameEnabledParent ConfigsNotesSource File
unicorn/better-regexbase-unicorn.js
unicorn/catch-error-namebase-unicorn.js
unicorn/consistent-destructuringDisabled because it has too many false positives.base-unicorn.js
unicorn/consistent-empty-array-spreadbase-unicorn.js
unicorn/consistent-existence-index-checkbase-unicorn.js
unicorn/consistent-function-scopingbase-unicorn.js
unicorn/custom-error-definitionbase-unicorn.js
unicorn/empty-brace-spacesDisabled because this is handled by Prettier.base-unicorn.js
unicorn/error-messagebase-unicorn.js
unicorn/escape-casebase-unicorn.js
unicorn/expiring-todo-commentsbase-unicorn.js
unicorn/explicit-length-checkbase-unicorn.js
unicorn/filename-caseDisabled since projects may use different file naming conventions.base-unicorn.js
unicorn/import-indexDisabled because this rule is deprecated.base-unicorn.js
unicorn/import-stylebase-unicorn.js
unicorn/new-for-builtinsbase-unicorn.js
unicorn/no-abusive-eslint-disableDisabled 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-anonymous-default-exportbase-unicorn.js
unicorn/no-array-callback-referenceDisabled since it is not helpful when using TypeScript.base-unicorn.js
unicorn/no-array-for-eachbase-unicorn.js
unicorn/no-array-instanceofDisabled because this rule is deprecated.base-unicorn.js
unicorn/no-array-method-this-argumentbase-unicorn.js
unicorn/no-array-push-pushbase-unicorn.js
unicorn/no-array-reducebase-unicorn.js
unicorn/no-await-expression-memberbase-unicorn.js
unicorn/no-await-in-promise-methodsbase-unicorn.js
unicorn/no-console-spacesbase-unicorn.js
unicorn/no-document-cookiebase-unicorn.js
unicorn/no-empty-filebase-unicorn.js
unicorn/no-fn-reference-in-iteratorDisabled because this rule is deprecated.base-unicorn.js
unicorn/no-for-loopbase-unicorn.js
unicorn/no-hex-escapebase-unicorn.js
unicorn/no-instanceof-arraybase-unicorn.js
unicorn/no-invalid-fetch-optionsbase-unicorn.js
unicorn/no-invalid-remove-event-listenerbase-unicorn.js
unicorn/no-keyword-prefixDisabled because it is common to prefix variables with "new".base-unicorn.js
unicorn/no-length-as-slice-endbase-unicorn.js
unicorn/no-lonely-ifbase-unicorn.js
unicorn/no-magic-array-flat-depthbase-unicorn.js
unicorn/no-negated-conditionbase-unicorn.js
unicorn/no-negation-in-equality-checkbase-unicorn.js
unicorn/no-nested-ternaryDisabled because this is handled by Prettier.base-unicorn.js
unicorn/no-new-arraybase-unicorn.js
unicorn/no-new-bufferbase-unicorn.js
unicorn/no-nullbase-unicorn.js
unicorn/no-object-as-default-parameterbase-unicorn.js
unicorn/no-process-exitDisabled because using process.exit is common to exit command-line applications without verbose output.base-unicorn.js
unicorn/no-reduceDisabled because this rule is deprecated.base-unicorn.js
unicorn/no-single-promise-in-promise-methodsbase-unicorn.js
unicorn/no-static-only-classbase-unicorn.js
unicorn/no-thenablebase-unicorn.js
unicorn/no-this-assignmentSuperseded by the @typescript-eslint/no-this-alias rule.base-unicorn.js
unicorn/no-typeof-undefinedbase-unicorn.js
unicorn/no-unnecessary-awaitbase-unicorn.js
unicorn/no-unnecessary-polyfillsbase-unicorn.js
unicorn/no-unreadable-array-destructuringbase-unicorn.js
unicorn/no-unreadable-iifebase-unicorn.js
unicorn/no-unsafe-regexDisabled because this rule is deprecated.base-unicorn.js
unicorn/no-unused-propertiesbase-unicorn.js
unicorn/no-useless-fallback-in-spreadbase-unicorn.js
unicorn/no-useless-length-checkbase-unicorn.js
unicorn/no-useless-promise-resolve-rejectbase-unicorn.js
unicorn/no-useless-spreadbase-unicorn.js
unicorn/no-useless-switch-casebase-unicorn.js
unicorn/no-useless-undefinedDisabled since it does not work properly with TypeScript.base-unicorn.js
unicorn/no-zero-fractionsbase-unicorn.js
unicorn/number-literal-caseDisabled because this is handled by Prettier.base-unicorn.js
unicorn/numeric-separators-stylebase-unicorn.js
unicorn/prefer-add-event-listenerbase-unicorn.js
unicorn/prefer-array-findbase-unicorn.js
unicorn/prefer-array-flatbase-unicorn.js
unicorn/prefer-array-flat-mapbase-unicorn.js
unicorn/prefer-array-index-ofbase-unicorn.js
unicorn/prefer-array-somebase-unicorn.js
unicorn/prefer-atbase-unicorn.js
unicorn/prefer-blob-reading-methodsbase-unicorn.js
unicorn/prefer-code-pointbase-unicorn.js
unicorn/prefer-datasetDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-date-nowbase-unicorn.js
unicorn/prefer-default-parametersbase-unicorn.js
unicorn/prefer-dom-node-appendbase-unicorn.js
unicorn/prefer-dom-node-datasetbase-unicorn.js
unicorn/prefer-dom-node-removebase-unicorn.js
unicorn/prefer-dom-node-text-contentbase-unicorn.js
unicorn/prefer-event-keyDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-event-targetbase-unicorn.js
unicorn/prefer-exponentiation-operatorDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-export-frombase-unicorn.js
unicorn/prefer-flat-mapDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-global-thisbase-unicorn.js
unicorn/prefer-includesbase-unicorn.js
unicorn/prefer-json-parse-bufferDisabled because the rule is not compatible with TypeScript.base-unicorn.js
unicorn/prefer-keyboard-event-keybase-unicorn.js
unicorn/prefer-logical-operator-over-ternarybase-unicorn.js
unicorn/prefer-math-min-maxbase-unicorn.js
unicorn/prefer-math-truncbase-unicorn.js
unicorn/prefer-modern-dom-apisbase-unicorn.js
unicorn/prefer-modern-math-apisbase-unicorn.js
unicorn/prefer-modulebase-unicorn.js
unicorn/prefer-native-coercion-functionsbase-unicorn.js
unicorn/prefer-negative-indexbase-unicorn.js
unicorn/prefer-node-appendDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-node-protocolbase-unicorn.js
unicorn/prefer-node-removeDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-number-propertiesbase-unicorn.js
unicorn/prefer-object-from-entriesbase-unicorn.js
unicorn/prefer-object-has-ownDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-optional-catch-bindingbase-unicorn.js
unicorn/prefer-prototype-methodsbase-unicorn.js
unicorn/prefer-query-selectorbase-unicorn.js
unicorn/prefer-reflect-applybase-unicorn.js
unicorn/prefer-regexp-testbase-unicorn.js
unicorn/prefer-replace-allDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-set-hasbase-unicorn.js
unicorn/prefer-set-sizebase-unicorn.js
unicorn/prefer-spreadbase-unicorn.js
unicorn/prefer-starts-ends-withDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-string-rawbase-unicorn.js
unicorn/prefer-string-replace-allbase-unicorn.js
unicorn/prefer-string-slicebase-unicorn.js
unicorn/prefer-string-starts-ends-withbase-unicorn.js
unicorn/prefer-string-trim-start-endbase-unicorn.js
unicorn/prefer-structured-clonebase-unicorn.js
unicorn/prefer-switchbase-unicorn.js
unicorn/prefer-ternarybase-unicorn.js
unicorn/prefer-text-contentDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-top-level-awaitbase-unicorn.js
unicorn/prefer-trim-start-endDisabled because this rule is deprecated.base-unicorn.js
unicorn/prefer-type-errorbase-unicorn.js
unicorn/prevent-abbreviationsDisabled since it is common to use the variable name of "i".base-unicorn.js
unicorn/regex-shorthandDisabled because this rule is deprecated.base-unicorn.js
unicorn/relative-url-stylebase-unicorn.js
unicorn/require-array-join-separatorbase-unicorn.js
unicorn/require-number-to-fixed-digits-argumentbase-unicorn.js
unicorn/require-post-message-target-originDisabled since it is not recommended by the plugin authors.base-unicorn.js
unicorn/string-contentDisabled since string content enforcement is too project-specific.base-unicorn.js
unicorn/switch-case-bracesbase-unicorn.js
unicorn/template-indentEven though this rule is in eslint-config-prettier, it is not actually handled by Prettier.base-unicorn.js
unicorn/text-encoding-identifier-casebase-unicorn.js
unicorn/throw-new-errorbase-unicorn.js

eslint-plugin-complete Rules

Rule NameEnabledParent ConfigsNotesSource File
complete/complete-sentences-jsdocbase-complete.js
complete/complete-sentences-line-commentsbase-complete.js
complete/consistent-enum-valuesbase-complete.js
complete/consistent-named-tuplesbase-complete.js
complete/eqeqeq-fixbase-complete.js
complete/format-jsdoc-commentsbase-complete.js
complete/format-line-commentsbase-complete.js
complete/jsdoc-code-block-languagebase-complete.js
complete/newline-between-switch-casebase-complete.js
complete/no-confusing-set-methodsbase-complete.js
complete/no-empty-jsdocbase-complete.js
complete/no-empty-line-commentsbase-complete.js
complete/no-explicit-array-loopsbase-complete.js
complete/no-explicit-map-set-loopsbase-complete.js
complete/no-for-inbase-complete.js
complete/no-let-anybase-complete.js
complete/no-mutable-returnbase-complete.js
complete/no-number-enumsbase-complete.js
complete/no-object-anybase-complete.js
complete/no-object-methods-with-map-setbase-complete.js
complete/no-string-length-0base-complete.js
complete/no-template-curly-in-string-fixbase-complete.js
complete/no-undefined-return-typebase-complete.js
complete/no-unnecessary-assignmentbase-complete.js
complete/no-unsafe-plusplusbase-complete.js
complete/no-useless-returnbase-complete.js
complete/no-void-return-typebase-complete.js
complete/prefer-constbase-complete.js
complete/prefer-plusplusbase-complete.js
complete/prefer-postfix-plusplusbase-complete.js
complete/prefer-readonly-parameter-typesbase-complete.js
complete/require-breakbase-complete.js
complete/require-capital-const-assertionsbase-complete.js
complete/require-capital-read-onlybase-complete.js
complete/require-unannotated-const-assertionsbase-complete.js
complete/require-variadic-function-argumentbase-complete.js
complete/strict-array-methodsbase-complete.js
complete/strict-enumsbase-complete.js
complete/strict-undefined-functionsbase-complete.js
complete/strict-void-functionsbase-complete.js