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 ✅