๐งถ Rules
Filter by plugins...
Rule | Plugin | Severity | Options | Docs | Files |
---|---|---|---|---|---|
constructor-super | @eslint/js | 2 | No options | Require `super()` calls in constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
for-direction | @eslint/js | 2 | No options | Enforce "for" loop update clause moving the counter in the right direction | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
getter-return | @eslint/js | 2 | No options | Enforce `return` statements in getters | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-async-promise-executor | @eslint/js | 2 | No options | Disallow using an async function as a Promise executor | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-case-declarations | @eslint/js | 2 | No options | Disallow lexical declarations in case clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-class-assign | @eslint/js | 2 | No options | Disallow reassigning class members | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-compare-neg-zero | @eslint/js | 2 | No options | Disallow comparing against -0 | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-cond-assign | @eslint/js | 2 | No options | Disallow assignment operators in conditional expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-const-assign | @eslint/js | 2 | No options | Disallow reassigning `const` variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-constant-condition | @eslint/js | 2 | No options | Disallow constant expressions in conditions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-control-regex | @eslint/js | 2 | No options | Disallow control characters in regular expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-debugger | @eslint/js | 2 | No options | Disallow the use of `debugger` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-delete-var | @eslint/js | 2 | No options | Disallow deleting variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-dupe-args | @eslint/js | 2 | No options | Disallow duplicate arguments in `function` definitions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-dupe-else-if | @eslint/js | 2 | No options | Disallow duplicate conditions in if-else-if chains | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-dupe-keys | @eslint/js | 2 | No options | Disallow duplicate keys in object literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-duplicate-case | @eslint/js | 2 | No options | Disallow duplicate case labels | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-empty | @eslint/js | 2 | No options | Disallow empty block statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-empty-character-class | @eslint/js | 2 | No options | Disallow empty character classes in regular expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-empty-pattern | @eslint/js | 2 | No options | Disallow empty destructuring patterns | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-ex-assign | @eslint/js | 2 | No options | Disallow reassigning exceptions in `catch` clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-extra-boolean-cast | @eslint/js | 2 | No options | Disallow unnecessary boolean casts | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-fallthrough | @eslint/js | 2 | No options | Disallow fallthrough of `case` statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-func-assign | @eslint/js | 2 | No options | Disallow reassigning `function` declarations | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-global-assign | @eslint/js | 2 | No options | Disallow assignments to native objects or read-only global variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-import-assign | @eslint/js | 2 | No options | Disallow assigning to imported bindings | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-inner-declarations | @eslint/js | 2 | No options | Disallow variable or `function` declarations in nested blocks | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-invalid-regexp | @eslint/js | 2 | No options | Disallow invalid regular expression strings in `RegExp` constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-irregular-whitespace | @eslint/js | 2 | No options | Disallow irregular whitespace | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-misleading-character-class | @eslint/js | 2 | No options | Disallow characters which are made with multiple code points in character class syntax | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-mixed-spaces-and-tabs | @eslint/js | 2 | No options | Disallow mixed spaces and tabs for indentation | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-new-symbol | @eslint/js | 2 | No options | Disallow `new` operators with the `Symbol` object | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-nonoctal-decimal-escape | @eslint/js | 2 | No options | Disallow `\8` and `\9` escape sequences in string literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-obj-calls | @eslint/js | 2 | No options | Disallow calling global object properties as functions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-octal | @eslint/js | 2 | No options | Disallow octal literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-prototype-builtins | @eslint/js | 2 | No options | Disallow calling some `Object.prototype` methods directly on objects | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-regex-spaces | @eslint/js | 2 | No options | Disallow multiple spaces in regular expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-self-assign | @eslint/js | 2 | No options | Disallow assignments where both sides are exactly the same | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-setter-return | @eslint/js | 2 | No options | Disallow returning values from setters | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-shadow-restricted-names | @eslint/js | 2 | No options | Disallow identifiers from shadowing restricted names | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-sparse-arrays | @eslint/js | 2 | No options | Disallow sparse arrays | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-this-before-super | @eslint/js | 2 | No options | Disallow `this`/`super` before calling `super()` in constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unexpected-multiline | @eslint/js | 2 | No options | Disallow confusing multiline expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unreachable | @eslint/js | 2 | No options | Disallow unreachable code after `return`, `throw`, `continue`, and `break` statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unsafe-finally | @eslint/js | 2 | No options | Disallow control flow statements in `finally` blocks | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unsafe-negation | @eslint/js | 2 | No options | Disallow negating the left operand of relational operators | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unsafe-optional-chaining | @eslint/js | 2 | No options | Disallow use of optional chaining in contexts where the `undefined` value is not allowed | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unused-labels | @eslint/js | 2 | No options | Disallow unused labels | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-useless-backreference | @eslint/js | 2 | No options | Disallow useless backreferences in regular expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-useless-catch | @eslint/js | 2 | No options | Disallow unnecessary `catch` clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-useless-escape | @eslint/js | 2 | No options | Disallow unnecessary escape characters | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-with | @eslint/js | 2 | No options | Disallow `with` statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
require-yield | @eslint/js | 2 | No options | Require generator functions to contain `yield` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
use-isnan | @eslint/js | 2 | No options | Require calls to `isNaN()` when checking for `NaN` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
valid-typeof | @eslint/js | 2 | No options | Enforce comparing `typeof` expressions against valid strings | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/adjacent-overload-signatures | @typescript-eslint/eslint-plugin | 2 | No options | Require that function overload signatures be consecutive | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/ban-ts-comment | @typescript-eslint/eslint-plugin | 0 | No options | Disallow `@ts-<directive>` comments or require descriptions after directives | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/ban-types | @typescript-eslint/eslint-plugin | 2 | No options | Disallow certain types | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-array-constructor | @typescript-eslint/eslint-plugin | 0 | No options | Disallow generic `Array` constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-empty-function | @typescript-eslint/eslint-plugin | 2 | No options | Disallow empty functions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-empty-interface | @typescript-eslint/eslint-plugin | 2 | No options | Disallow the declaration of empty interfaces | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-explicit-any | @typescript-eslint/eslint-plugin | 1 | No options | Disallow the `any` type | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-extra-non-null-assertion | @typescript-eslint/eslint-plugin | 2 | No options | Disallow extra non-null assertions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-extra-semi | @eslint/js | 0 | No options | Disallow unnecessary semicolons | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-extra-semi | @typescript-eslint/eslint-plugin | 2 | No options | Disallow unnecessary semicolons | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-inferrable-types | @typescript-eslint/eslint-plugin | 2 | No options | Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-loss-of-precision | @eslint/js | 0 | No options | Disallow literal numbers that lose precision | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-loss-of-precision | @typescript-eslint/eslint-plugin | 2 | No options | Disallow literal numbers that lose precision | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-misused-new | @typescript-eslint/eslint-plugin | 2 | No options | Enforce valid definition of `new` and `constructor` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-namespace | @typescript-eslint/eslint-plugin | 2 | No options | Disallow TypeScript namespaces | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-non-null-asserted-optional-chain | @typescript-eslint/eslint-plugin | 2 | No options | Disallow non-null assertions after an optional chain expression | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-non-null-assertion | @typescript-eslint/eslint-plugin | 1 | No options | Disallow non-null assertions using the `!` postfix operator | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-this-alias | @typescript-eslint/eslint-plugin | 2 | No options | Disallow aliasing `this` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unnecessary-type-constraint | @typescript-eslint/eslint-plugin | 2 | No options | Disallow unnecessary constraints on generic types | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unused-vars | @typescript-eslint/eslint-plugin | 1 | No options | Disallow unused variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-var-requires | @typescript-eslint/eslint-plugin | 2 | No options | Disallow `require` statements except in import statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/prefer-as-const | @typescript-eslint/eslint-plugin | 2 | No options | Enforce the use of `as const` over literal type | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/prefer-namespace-keyword | @typescript-eslint/eslint-plugin | 2 | No options | Require using `namespace` keyword over `module` keyword to declare custom TypeScript modules | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/triple-slash-reference | @typescript-eslint/eslint-plugin | 2 | No options | Disallow certain triple slash directives in favor of ES6-style import declarations | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/await-thenable | @typescript-eslint/eslint-plugin | 2 | No options | Disallow awaiting a value that is not a Thenable | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-floating-promises | @typescript-eslint/eslint-plugin | 2 | No options | Require Promise-like statements to be handled appropriately | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-for-in-array | @typescript-eslint/eslint-plugin | 2 | No options | Disallow iterating over an array with a for-in loop | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-implied-eval | @eslint/js | 0 | No options | Disallow the use of `eval()`-like methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-implied-eval | @typescript-eslint/eslint-plugin | 2 | No options | Disallow the use of `eval()`-like methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-misused-promises | @typescript-eslint/eslint-plugin | 2 | No options | Disallow Promises in places not designed to handle them | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unnecessary-type-assertion | @typescript-eslint/eslint-plugin | 2 | No options | Disallow type assertions that do not change the type of an expression | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unsafe-argument | @typescript-eslint/eslint-plugin | 2 | No options | Disallow calling a function with a value with type `any` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unsafe-assignment | @typescript-eslint/eslint-plugin | 0 | No options | Disallow assigning a value with type `any` to variables and properties | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unsafe-call | @typescript-eslint/eslint-plugin | 2 | No options | Disallow calling a value with type `any` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unsafe-member-access | @typescript-eslint/eslint-plugin | 2 | No options | Disallow member access on a value with type `any` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unsafe-return | @typescript-eslint/eslint-plugin | 2 | No options | Disallow returning a value with type `any` from a function | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/require-await | @typescript-eslint/eslint-plugin | 2 | No options | Disallow async functions which have no `await` expression | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/restrict-plus-operands | @typescript-eslint/eslint-plugin | 2 | No options | Require both operands of addition to be the same type and be `bigint`, `number`, or `string` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/restrict-template-expressions | @typescript-eslint/eslint-plugin | 2 | No options | Enforce template literal expressions to be of `string` type | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/unbound-method | @typescript-eslint/eslint-plugin | 2 | No options | Enforce unbound methods are called with their expected scope | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/return-await | @typescript-eslint/eslint-plugin | 2 | No options | Enforce consistent returning of awaited values | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-redundant-type-constituents | @typescript-eslint/eslint-plugin | 2 | No options | Disallow members of unions and intersections that do nothing or override type information | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unnecessary-boolean-literal-compare | @typescript-eslint/eslint-plugin | 2 | No options | Disallow unnecessary equality comparisons against boolean literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/prefer-ts-expect-error | @typescript-eslint/eslint-plugin | 2 | No options | Enforce using `@ts-expect-error` over `@ts-ignore` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-throw-literal | @typescript-eslint/eslint-plugin | 2 | No options | Disallow throwing literals as exceptions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-use-before-define | @typescript-eslint/eslint-plugin | 2 | No options | Disallow the use of variables before they are defined | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/consistent-type-assertions | @typescript-eslint/eslint-plugin | 2 | No options | Enforce consistent usage of type assertions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/consistent-type-imports | @typescript-eslint/eslint-plugin | 2 | [{"fixStyle":"inline-type-imports"}] | Enforce consistent usage of type imports | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/consistent-type-exports | @typescript-eslint/eslint-plugin | 2 | [{"fixMixedExportsWithInlineTypeSpecifier":true}] | Enforce consistent usage of type exports | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/explicit-module-boundary-types | @typescript-eslint/eslint-plugin | 2 | No options | Require explicit return and argument types on exported functions' and classes' public class methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/switch-exhaustiveness-check | @typescript-eslint/eslint-plugin | 2 | No options | Require switch-case statements to be exhaustive with union type | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-invalid-void-type | @typescript-eslint/eslint-plugin | 2 | No options | Disallow `void` type outside of generic or return types | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/method-signature-style | @typescript-eslint/eslint-plugin | 2 | No options | Enforce using a particular method signature syntax | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/non-nullable-type-assertion-style | @typescript-eslint/eslint-plugin | 2 | No options | Enforce non-null assertions over explicit type casts | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-confusing-void-expression | @typescript-eslint/eslint-plugin | 2 | No options | Require expressions of type void to appear in statement position | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/prefer-nullish-coalescing | @typescript-eslint/eslint-plugin | 2 | [{"ignorePrimitives":{"string":true}}] | Enforce using the nullish coalescing operator instead of logical chaining | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unnecessary-condition | @typescript-eslint/eslint-plugin | 2 | No options | Disallow conditionals where the type is always truthy or always falsy | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/unified-signatures | @typescript-eslint/eslint-plugin | 2 | No options | Disallow two overloads that could be unified into one with a union or an optional/rest parameter | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-unused-expressions | @typescript-eslint/eslint-plugin | 2 | [{"allowShortCircuit":true,"allowTernary":true,"allowTaggedTemplates":true,"enforceForJSX":true}] | Disallow unused expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/array-type | @typescript-eslint/eslint-plugin | 2 | No options | Require consistently using either `T[]` or `Array<T>` for arrays | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/prefer-optional-chain | @typescript-eslint/eslint-plugin | 2 | No options | Enforce using concise optional chain expressions instead of chained logical ands, negated logical ors, or empty objects | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/dot-notation | @typescript-eslint/eslint-plugin | 2 | No options | Enforce dot notation whenever possible | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-import-type-side-effects | @typescript-eslint/eslint-plugin | 2 | No options | Enforce the use of top-level import type qualifier when an import only has specifiers with inline type qualifiers | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/default-param-last | @typescript-eslint/eslint-plugin | 2 | No options | Enforce default parameters to be last | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/no-shadow | @typescript-eslint/eslint-plugin | 2 | [{"hoist":"all","allow":["resolve","reject","done","next","err","error"],"ignoreTypeValueShadow":true,"ignoreFunctionTypeParameterNameValueShadow":true}] | Disallow variable declarations from shadowing variables declared in the outer scope | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/naming-convention | @typescript-eslint/eslint-plugin | 2 | [{"selector":"default","format":["camelCase"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","format":["camelCase","UPPER_CASE"],"modifiers":["const"],"types":["boolean","string","number"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"objectLiteralProperty","format":null,"leadingUnderscore":"allowSingleOrDouble","trailingUnderscore":"forbid"},{"selector":"typeLike","format":["PascalCase"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","types":["boolean"],"format":["camelCase"],"prefix":["is","has","should","can"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","modifiers":["destructured"],"format":null},{"selector":"typeProperty","format":null}] | Enforce naming conventions for everything across a codebase | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
tsdoc/syntax | eslint-plugin-tsdoc | 2 | No options | Validates that TypeScript documentation comments conform to the TSDoc standard | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
func-style | @eslint/js | 2 | No options | Enforce the consistent use of either `function` declarations or expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-promise-executor-return | @eslint/js | 2 | No options | Disallow returning values from Promise executor functions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unreachable-loop | @eslint/js | 2 | No options | Disallow loops with a body that allows only one iteration | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-caller | @eslint/js | 2 | No options | Disallow the use of `arguments.caller` or `arguments.callee` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-restricted-imports | @eslint/js | 2 | [{"paths":["prop-types"]}] | Disallow specified modules when loaded by `import` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-extend-native | @eslint/js | 2 | No options | Disallow extending native types | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-extra-bind | @eslint/js | 2 | No options | Disallow unnecessary calls to `.bind()` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-extra-label | @eslint/js | 2 | No options | Disallow unnecessary labels | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-implicit-coercion | @eslint/js | 2 | No options | Disallow shorthand type conversions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-multi-str | @eslint/js | 2 | No options | Disallow multiline strings | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-negated-condition | @eslint/js | 2 | No options | Disallow negated conditions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-new-wrappers | @eslint/js | 2 | No options | Disallow `new` operators with the `String`, `Number`, and `Boolean` objects | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-new-object | @eslint/js | 2 | No options | Disallow `Object` constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-restricted-properties | @eslint/js | 2 | [{"object":"global","property":"isFinite","message":"Please use Number.isFinite instead"},{"object":"self","property":"isFinite","message":"Please use Number.isFinite instead"},{"object":"window","property":"isFinite","message":"Please use Number.isFinite instead"},{"object":"global","property":"isNaN","message":"Please use Number.isNaN instead"},{"object":"self","property":"isNaN","message":"Please use Number.isNaN instead"},{"object":"window","property":"isNaN","message":"Please use Number.isNaN instead"}] | Disallow certain properties on certain objects | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
strict | @eslint/js | 2 | ["never"] | Require or disallow strict mode directives | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-octal-escape | @eslint/js | 2 | No options | Disallow octal escape sequences in string literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-proto | @eslint/js | 2 | No options | Disallow the use of the `__proto__` property | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-sequences | @eslint/js | 2 | [{"allowInParentheses":false}] | Disallow comma operators | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unmodified-loop-condition | @eslint/js | 2 | No options | Disallow unmodified loop conditions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-void | @eslint/js | 2 | No options | Disallow `void` operators | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
max-statements-per-line | @eslint/js | 2 | [{"max":1}] | Enforce a maximum number of statements allowed per line | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-array-constructor | @eslint/js | 2 | No options | Disallow `Array` constructors | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-multi-assign | @eslint/js | 2 | No options | Disallow use of chained assignment expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-plusplus | @eslint/js | 2 | No options | Disallow the unary operators `++` and `--` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-destructuring | @eslint/js | 2 | [{"array":false,"object":true},{"enforceForRenamedProperties":false}] | Require destructuring from arrays and/or objects | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-useless-call | @eslint/js | 2 | No options | Disallow unnecessary calls to `.call()` and `.apply()` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-object-has-own | @eslint/js | 2 | No options | Disallow use of `Object.prototype.hasOwnProperty.call()` and prefer use of `Object.hasOwn()` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-constant-binary-expression | @eslint/js | 2 | No options | Disallow expressions where the operation doesn't affect the value | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-lone-blocks | @eslint/js | 2 | No options | Disallow unnecessary nested blocks | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-var | @eslint/js | 2 | No options | Require `let` or `const` instead of `var` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-eval | @eslint/js | 2 | No options | Disallow the use of `eval()` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-const | @eslint/js | 2 | No options | Require `const` declarations for variables that are never reassigned after declared | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-rest-params | @eslint/js | 2 | No options | Require rest parameters instead of `arguments` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-return-assign | @eslint/js | 2 | ["always"] | Disallow assignment operators in `return` statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-else-return | @eslint/js | 2 | [{"allowElseIf":false}] | Disallow `else` blocks after `return` statements in `if` statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-template | @eslint/js | 2 | No options | Require template literals instead of string concatenation | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
operator-assignment | @eslint/js | 2 | ["never"] | Require or disallow assignment operator shorthand where possible | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
logical-assignment-operators | @eslint/js | 2 | ["never"] | Require or disallow logical assignment operator shorthand | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
padding-line-between-statements | @eslint/js | 2 | [{"blankLine":"always","prev":["const","let"],"next":"*"},{"blankLine":"any","prev":["const","let"],"next":["const","let"]},{"blankLine":"always","prev":"*","next":"return"}] | Require or disallow padding lines between statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-spread | @eslint/js | 2 | No options | Require spread operators instead of `.apply()` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-object-spread | @eslint/js | 2 | No options | Disallow using Object.assign with an object literal as the first argument and prefer the use of object spread instead | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-param-reassign | @eslint/js | 2 | [{"props":true}] | Disallow reassigning `function` parameters | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-redeclare | @eslint/js | 2 | No options | Disallow variable redeclaration | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
array-callback-return | @eslint/js | 2 | [{"allowImplicit":true,"checkForEach":true}] | Enforce `return` statements in callbacks of array methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
object-shorthand | @eslint/js | 2 | No options | Require or disallow method and property shorthand syntax for object literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unneeded-ternary | @eslint/js | 2 | [{"defaultAssignment":false}] | Disallow ternary operators when simpler alternatives exist | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
require-atomic-updates | @eslint/js | 2 | No options | Disallow assignments that can lead to race conditions due to usage of `await` or `yield` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-nested-ternary | @eslint/js | 2 | No options | Disallow nested ternary expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-console | @eslint/js | 2 | [{"allow":["warn","error","debug"]}] | Disallow the use of `console` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
eqeqeq | @eslint/js | 2 | No options | Require the use of `===` and `!==` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
prefer-arrow-callback | @eslint/js | 2 | No options | Require using arrow functions for callbacks | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
arrow-body-style | @eslint/js | 2 | ["as-needed"] | Require braces around arrow function bodies | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-restricted-syntax | @eslint/js | 2 | [{"selector":"LabeledStatement","message":"Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand."},{"selector":"ForInStatement","message":"for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array."},{"selector":"Identifier[name='Reflect']","message":"Avoid the Reflect API. It is a very low-level feature that has only rare and specific use-cases if building complex and hacky libraries. There is no need to use this feature for any kind of normal development."},{"selector":"BinaryExpression[operator='in']","message":"Avoid the 'in' operator. In real-world scenarios there is rarely a need for this operator. For most usecases, basic property access is all you need. For every other case, use the Object.hasOwn() or the Object.prototype.hasOwnProperty() method. In the really niche cases where you actually need to check for the existence of a property both in the object itself AND in it's prototype chain, feel free to disable this rule with the inline eslint-disable syntax."},{"selector":"PropertyDefinition[accessibility='public']","message":"Avoid access modifiers. In Javascript modules there is no need to limit developer access to properties."},{"selector":"PropertyDefinition[accessibility='protected']","message":"Avoid access modifiers. In Javascript modules there is no need to limit developer access to properties."},{"selector":"PropertyDefinition[accessibility='private']","message":"Avoid access modifiers. In Javascript modules there is no need to limit developer access to properties."},{"selector":"Identifier[name='PropTypes']","message":"Avoid PropTypes. Use Typescript instead."},{"selector":"Identifier[name='propTypes']","message":"Avoid PropTypes. Use Typescript instead."}] | Disallow specified syntax | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-undef | @eslint/js | 0 | No options | Disallow the use of undeclared variables unless mentioned in `/*global */` comments | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-dupe-class-members | @eslint/js | 0 | No options | Disallow duplicate class members | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-return-await | @eslint/js | 0 | No options | Disallow unnecessary `return await` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-throw-literal | @eslint/js | 0 | No options | Disallow throwing literals as exceptions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-use-before-define | @eslint/js | 0 | No options | Disallow the use of variables before they are defined | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unused-expressions | @eslint/js | 0 | No options | Disallow unused expressions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-empty-function | @eslint/js | 0 | No options | Disallow empty functions | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
require-await | @eslint/js | 0 | No options | Disallow async functions which have no `await` expression | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-unused-vars | @eslint/js | 0 | No options | Disallow unused variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
dot-notation | @eslint/js | 0 | No options | Enforce dot notation whenever possible | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
no-shadow | @eslint/js | 0 | No options | Disallow variable declarations from shadowing variables declared in the outer scope | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
default-param-last | @eslint/js | 0 | No options | Enforce default parameters to be last | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
fp/no-arguments | eslint-plugin-fp | 2 | No options | Forbid the use of `arguments`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
fp/no-class | eslint-plugin-fp | 2 | No options | Forbid the use of `class`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
fp/no-delete | eslint-plugin-fp | 2 | No options | Forbid the use of `delete`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
fp/no-proxy | eslint-plugin-fp | 2 | No options | Forbid the use of `Proxy`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
etc/no-enum | eslint-plugin-etc | 2 | No options | Forbids the use of `enum`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
etc/no-misused-generics | eslint-plugin-etc | 2 | No options | Forbids type parameters without inference sites and type parameters that don't add type safety to declarations. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
etc/no-assign-mutated-array | eslint-plugin-etc | 2 | No options | Forbids the assignment of returned, mutated arrays. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@regru/prefer-early-return/prefer-early-return | @regru/eslint-plugin-prefer-early-return | 2 | [{"maximumStatements":1}] | Prefer early returns over full-body conditional wrapping in function declarations. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/better-regex | eslint-plugin-unicorn | 2 | No options | Improve regexes by making them shorter, consistent, and safer. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/explicit-length-check | eslint-plugin-unicorn | 2 | No options | Enforce explicitly comparing the `length` or `size` property of a value. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/consistent-function-scoping | eslint-plugin-unicorn | 2 | No options | Move function definitions to the highest possible scope. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-default-parameters | eslint-plugin-unicorn | 2 | No options | Prefer default parameters over reassignment. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-array-push-push | eslint-plugin-unicorn | 2 | No options | Enforce combining multiple `Array#push()` into one call. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-array-index-of | eslint-plugin-unicorn | 2 | No options | Prefer `Array#{indexOf,lastIndexOf}()` over `Array#{findIndex,findLastIndex}()` when looking for the index of an item. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-array-flat-map | eslint-plugin-unicorn | 2 | No options | Prefer `.flatMap(โฆ)` over `.map(โฆ).flat()`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-array-some | eslint-plugin-unicorn | 2 | No options | Prefer `.some(โฆ)` over `.filter(โฆ).length` check and `.{find,findLast}(โฆ)`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-array-find | eslint-plugin-unicorn | 2 | No options | Prefer `.find(โฆ)` and `.findLast(โฆ)` over the first or last element from `.filter(โฆ)`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-array-flat | eslint-plugin-unicorn | 2 | No options | Prefer `Array#flat()` over legacy techniques to flatten arrays. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-includes | eslint-plugin-unicorn | 2 | No options | Prefer `.includes()` over `.indexOf()` and `Array#some()` when checking for existence or non-existence. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-top-level-await | eslint-plugin-unicorn | 2 | No options | Prefer top-level await over top-level promises and async function calls. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-spread | eslint-plugin-unicorn | 2 | No options | Prefer the spread operator over `Array.from(โฆ)`, `Array#concat(โฆ)`, `Array#{slice,toSpliced}()` and `String#split('')`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-useless-spread | eslint-plugin-unicorn | 2 | No options | Disallow unnecessary spread. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-useless-undefined | eslint-plugin-unicorn | 2 | No options | Disallow useless `undefined`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-for-loop | eslint-plugin-unicorn | 2 | No options | Do not use a `for` loop that can be replaced with a `for-of` loop. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-set-size | eslint-plugin-unicorn | 2 | No options | Prefer using `Set#size` instead of `Array#length`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-type-error | eslint-plugin-unicorn | 2 | No options | Enforce throwing `TypeError` in type checking conditions. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-object-from-entries | eslint-plugin-unicorn | 2 | No options | Prefer using `Object.fromEntries(โฆ)` to transform a list of key-value pairs into an object. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-native-coercion-functions | eslint-plugin-unicorn | 2 | No options | Prefer using `String`, `Number`, `BigInt`, `Boolean`, and `Symbol` directly. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-logical-operator-over-ternary | eslint-plugin-unicorn | 2 | No options | Prefer using a logical operator over a ternary. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-event-target | eslint-plugin-unicorn | 2 | No options | Prefer `EventTarget` over `EventEmitter`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-await-expression-member | eslint-plugin-unicorn | 2 | No options | Disallow member access from await expression. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-new-array | eslint-plugin-unicorn | 2 | No options | Disallow `new Array()`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/throw-new-error | eslint-plugin-unicorn | 2 | No options | Require `new` when throwing an error. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-array-reduce | eslint-plugin-unicorn | 2 | No options | Disallow `Array#reduce()` and `Array#reduceRight()`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-useless-length-check | eslint-plugin-unicorn | 2 | No options | Disallow useless array length check. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-prototype-methods | eslint-plugin-unicorn | 2 | No options | Prefer borrowing methods from the prototype instead of the instance. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-date-now | eslint-plugin-unicorn | 2 | No options | Prefer `Date.now()` to get the number of milliseconds since the Unix Epoch. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-export-from | eslint-plugin-unicorn | 2 | [{"ignoreUsedVariables":true}] | Prefer `exportโฆfrom` when re-exporting. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-new-buffer | eslint-plugin-unicorn | 2 | No options | Enforce the use of `Buffer.from()` and `Buffer.alloc()` instead of the deprecated `new Buffer()`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-query-selector | eslint-plugin-unicorn | 2 | No options | Prefer `.querySelector()` over `.getElementById()`, `.querySelectorAll()` over `.getElementsByClassName()` and `.getElementsByTagName()`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-string-replace-all | eslint-plugin-unicorn | 2 | No options | Prefer `String#replaceAll()` over regex searches with the global flag. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/prefer-switch | eslint-plugin-unicorn | 2 | [{"emptyDefaultCase":"do-nothing-comment"}] | Prefer `switch` over multiple `else-if`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/switch-case-braces | eslint-plugin-unicorn | 2 | No options | Enforce consistent brace style for `case` clauses. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/catch-error-name | eslint-plugin-unicorn | 2 | No options | Enforce a specific parameter name in catch clauses. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/cognitive-complexity | eslint-plugin-sonarjs | 0 | No options | Cognitive Complexity of functions should not be too high | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/elseif-without-else | eslint-plugin-sonarjs | 0 | No options | "if ... else if" constructs should end with "else" clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/max-switch-cases | eslint-plugin-sonarjs | 2 | No options | "switch" statements should not have too many "case" clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-all-duplicated-branches | eslint-plugin-sonarjs | 2 | No options | All branches in a conditional structure should not have exactly the same implementation | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-collapsible-if | eslint-plugin-sonarjs | 2 | No options | Collapsible "if" statements should be merged | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-collection-size-mischeck | eslint-plugin-sonarjs | 2 | No options | Collection sizes and array length comparisons should make sense | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-duplicate-string | eslint-plugin-sonarjs | 2 | No options | String literals should not be duplicated | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-duplicated-branches | eslint-plugin-sonarjs | 2 | No options | Two branches in a conditional structure should not have exactly the same implementation | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-element-overwrite | eslint-plugin-sonarjs | 2 | No options | Collection elements should not be replaced unconditionally | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-empty-collection | eslint-plugin-sonarjs | 2 | No options | Empty collections should not be accessed or iterated | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-extra-arguments | eslint-plugin-sonarjs | 2 | No options | Function calls should not pass extra arguments | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-gratuitous-expressions | eslint-plugin-sonarjs | 2 | No options | Boolean expressions should not be gratuitous | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-identical-conditions | eslint-plugin-sonarjs | 2 | No options | Related "if-else-if" and "switch-case" statements should not have the same condition | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-identical-expressions | eslint-plugin-sonarjs | 2 | No options | Identical expressions should not be used on both sides of a binary operator | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-identical-functions | eslint-plugin-sonarjs | 2 | No options | Functions should not have identical implementations | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-ignored-return | eslint-plugin-sonarjs | 2 | No options | Return values from functions without side effects should not be ignored | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-inverted-boolean-check | eslint-plugin-sonarjs | 0 | No options | Boolean checks should not be inverted | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-nested-switch | eslint-plugin-sonarjs | 2 | No options | "switch" statements should not be nested | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-nested-template-literals | eslint-plugin-sonarjs | 2 | No options | Template literals should not be nested | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-one-iteration-loop | eslint-plugin-sonarjs | 2 | No options | Loops with at most one iteration should be refactored | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-redundant-boolean | eslint-plugin-sonarjs | 2 | No options | Boolean literals should not be redundant | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-redundant-jump | eslint-plugin-sonarjs | 2 | No options | Jump statements should not be redundant | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-same-line-conditional | eslint-plugin-sonarjs | 2 | No options | Conditionals should start on new lines | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-small-switch | eslint-plugin-sonarjs | 2 | No options | "switch" statements should have at least 3 "case" clauses | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-unused-collection | eslint-plugin-sonarjs | 2 | No options | Collection and array contents should be used | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-use-of-empty-return-value | eslint-plugin-sonarjs | 2 | No options | The output of functions that don't return anything should not be used | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/no-useless-catch | eslint-plugin-sonarjs | 2 | No options | "catch" clauses should do more than rethrow | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/non-existent-operator | eslint-plugin-sonarjs | 2 | No options | Non-existent operators "=+", "=-" and "=!" should not be used | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/prefer-immediate-return | eslint-plugin-sonarjs | 0 | No options | Local variables should not be declared and then immediately returned or thrown | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/prefer-object-literal | eslint-plugin-sonarjs | 2 | No options | Object literal syntax should be used | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/prefer-single-boolean-return | eslint-plugin-sonarjs | 2 | No options | Return of boolean expressions should not be wrapped into an "if-then-else" statement | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
sonarjs/prefer-while | eslint-plugin-sonarjs | 2 | No options | A "while" loop should be used instead of a "for" loop | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/named | eslint-plugin-import | 0 | No options | Ensure named imports correspond to a named export in the remote file. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/namespace | eslint-plugin-import | 0 | No options | Ensure imported namespaces contain dereferenced properties as they are dereferenced. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/default | eslint-plugin-import | 0 | No options | Ensure a default export is present, given a default import. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-named-as-default-member | eslint-plugin-import | 0 | No options | Forbid use of exported name as property of default export. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-unresolved | eslint-plugin-import | 2 | [{"commonjs":true,"caseSensitiveStrict":true}] | Ensure imports point to a file/module that can be resolved. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/first | eslint-plugin-import | 2 | No options | Ensure all imports appear before other statements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/order | eslint-plugin-import | 2 | [{"newlines-between":"never"}] | Enforce a convention in module import order. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-default-export | eslint-plugin-import | 2 | No options | Forbid default exports. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-named-as-default | eslint-plugin-import | 2 | No options | Forbid use of exported name as identifier of default export. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-duplicates | eslint-plugin-import | 2 | [{"prefer-inline":true}] | Forbid repeated import of the same module in multiple places. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/newline-after-import | eslint-plugin-import | 2 | [{"considerComments":true}] | Enforce a newline after import statements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-useless-path-segments | eslint-plugin-import | 2 | [{"noUselessIndex":true}] | Forbid unnecessary path segments in import and require statements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-anonymous-default-export | eslint-plugin-import | 0 | No options | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) | |
storybook/await-interactions | eslint-plugin-storybook | 2 | No options | Interactions should be awaited | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/context-in-play-function | eslint-plugin-storybook | 2 | No options | Pass a context when invoking play function of another story | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/default-exports | eslint-plugin-storybook | 2 | No options | Story files should have a default export | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/hierarchy-separator | eslint-plugin-storybook | 1 | No options | Deprecated hierarchy separator in title property | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/no-redundant-story-name | eslint-plugin-storybook | 1 | No options | A story should not have a redundant name property | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/prefer-pascal-case | eslint-plugin-storybook | 1 | No options | Stories should use PascalCase | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/story-exports | eslint-plugin-storybook | 2 | No options | A story file must contain at least one story export | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/use-storybook-expect | eslint-plugin-storybook | 2 | No options | Use expect from `@storybook/jest` | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/use-storybook-testing-library | eslint-plugin-storybook | 2 | No options | Do not use testing-library directly on stories | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/csf-component | eslint-plugin-storybook | 1 | No options | The component property should be set | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/no-stories-of | eslint-plugin-storybook | 2 | No options | storiesOf is deprecated and should not be used | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
storybook/no-title-property-in-meta | eslint-plugin-storybook | 2 | No options | Do not define a title in meta | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) |
import/no-default-export | eslint-plugin-import | 0 | No options | **/*.stories.@(ts|tsx|js|jsx|mjs|cjs), **/*.story.@(ts|tsx|js|jsx|mjs|cjs) | |
storybook/no-uninstalled-addons | eslint-plugin-storybook | 2 | No options | This rule identifies storybook addons that are invalid because they are either not installed or contain a typo in their name. | **/.storybook/main.@(js|cjs|mjs|ts) |
jsdoc/require-description | eslint-plugin-jsdoc | 2 | No options | Requires that all functions have a description. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-description-complete-sentence | eslint-plugin-jsdoc | 2 | No options | Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-hyphen-before-param-description | eslint-plugin-jsdoc | 2 | No options | Requires a hyphen before the `@param` description. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-returns-description | eslint-plugin-jsdoc | 2 | No options | Requires that the `@returns` tag has a `description` value. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-param-name | eslint-plugin-jsdoc | 2 | No options | Requires that all function parameters have names. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-param-description | eslint-plugin-jsdoc | 2 | No options | Requires that each `@param` tag has a `description` value. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/require-asterisk-prefix | eslint-plugin-jsdoc | 2 | No options | Requires that each JSDoc line starts with an `*`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/no-types | eslint-plugin-jsdoc | 2 | No options | This rule reports types being used on `@param` or `@returns`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/no-multi-asterisks | eslint-plugin-jsdoc | 2 | No options | https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-multi-asterisks.md#repos-sticky-header | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/no-defaults | eslint-plugin-jsdoc | 2 | No options | This rule reports defaults being used on the relevant portion of `@param` or `@default`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/no-blank-block-descriptions | eslint-plugin-jsdoc | 2 | No options | Detects and removes extra lines of a blank block description | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/check-indentation | eslint-plugin-jsdoc | 2 | No options | Reports invalid padding inside JSDoc blocks. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/check-tag-names | eslint-plugin-jsdoc | 2 | [{"jsxTags":true}] | Reports invalid block tag names. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/check-param-names | eslint-plugin-jsdoc | 2 | [{"checkDestructured":false,"enableFixer":false}] | Ensures that parameter names in JSDoc match those in the function declaration. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/sort-tags | eslint-plugin-jsdoc | 2 | No options | Sorts tags by a specified sequence according to tag name. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsdoc/tag-lines | eslint-plugin-jsdoc | 2 | ["any",{"startLines":1}] | Enforces lines (or no lines) between tags. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
import/no-default-export | eslint-plugin-import | 0 | No options | **/*.config.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} | |
react/display-name | eslint-plugin-react | 2 | No options | Disallow missing displayName in a React component definition | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-key | eslint-plugin-react | 2 | No options | Disallow missing `key` props in iterators/collection literals | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-comment-textnodes | eslint-plugin-react | 2 | No options | Disallow comments from being inserted as text nodes | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-duplicate-props | eslint-plugin-react | 2 | No options | Disallow duplicate properties in JSX | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-target-blank | eslint-plugin-react | 2 | No options | Disallow `target="_blank"` attribute without `rel="noreferrer"` | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-undef | eslint-plugin-react | 2 | No options | Disallow undeclared variables in JSX | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-uses-react | eslint-plugin-react | 0 | No options | Disallow React to be incorrectly marked as unused | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-uses-vars | eslint-plugin-react | 2 | No options | Disallow variables used in JSX to be incorrectly marked as unused | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-children-prop | eslint-plugin-react | 2 | No options | Disallow passing of children as props | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-danger-with-children | eslint-plugin-react | 2 | No options | Disallow when a DOM element is using both children and dangerouslySetInnerHTML | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-deprecated | eslint-plugin-react | 2 | No options | Disallow usage of deprecated methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-direct-mutation-state | eslint-plugin-react | 2 | No options | Disallow direct mutation of this.state | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-find-dom-node | eslint-plugin-react | 2 | No options | Disallow usage of findDOMNode | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-is-mounted | eslint-plugin-react | 2 | No options | Disallow usage of isMounted | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-render-return-value | eslint-plugin-react | 2 | No options | Disallow usage of the return value of ReactDOM.render | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-string-refs | eslint-plugin-react | 2 | No options | Disallow using string references | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-unescaped-entities | eslint-plugin-react | 2 | No options | Disallow unescaped HTML entities from appearing in markup | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-unknown-property | eslint-plugin-react | 2 | No options | Disallow usage of unknown DOM property | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-unsafe | eslint-plugin-react | 0 | No options | Disallow usage of unsafe lifecycle methods | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/prop-types | eslint-plugin-react | 0 | No options | Disallow missing props validation in a React component definition | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/react-in-jsx-scope | eslint-plugin-react | 0 | No options | Disallow missing React when using JSX | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/require-render-return | eslint-plugin-react | 2 | No options | Enforce ES5 or ES6 class for returning value in render function | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-unstable-nested-components | eslint-plugin-react | 2 | [{"allowAsProps":false}] | Disallow creating unstable components inside components | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-useless-fragment | eslint-plugin-react | 2 | [{"allowExpressions":true}] | Disallow unnecessary fragments | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/function-component-definition | eslint-plugin-react | 2 | [{"namedComponents":"arrow-function"}] | Enforce a specific function type for function components | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-boolean-value | eslint-plugin-react | 2 | No options | Enforce boolean attributes notation in JSX | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-fragments | eslint-plugin-react | 2 | No options | Enforce shorthand or standard form for React fragments | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/hook-use-state | eslint-plugin-react | 2 | No options | Ensure destructuring and symmetric naming of useState hook value and setter variables | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-no-leaked-render | eslint-plugin-react | 2 | [{"validStrategies":["coerce","ternary"]}] | Disallow problematic leaked values from being rendered | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/destructuring-assignment | eslint-plugin-react | 2 | No options | Enforce consistent usage of destructuring assignment of props, state, and context | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-filename-extension | eslint-plugin-react | 2 | [{"extensions":["jsx",".tsx","mtsx","mjsx"],"allow":"as-needed"}] | Disallow file extensions that may contain JSX | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-multi-comp | eslint-plugin-react | 2 | No options | Disallow multiple component definition per file | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/no-array-index-key | eslint-plugin-react | 2 | No options | Disallow usage of Array index in keys | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-props-no-spreading | eslint-plugin-react | 2 | No options | Disallow JSX prop spreading | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react/jsx-sort-props | eslint-plugin-react | 2 | [{"callbacksLast":true,"shorthandFirst":true,"shorthandLast":false,"ignoreCase":true,"noSortAlphabetically":true,"multiline":"last","reservedFirst":false}] | Enforce props alphabetical sorting | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@typescript-eslint/naming-convention | @typescript-eslint/eslint-plugin | 2 | [{"selector":"default","format":["camelCase","StrictPascalCase"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","format":["camelCase","UPPER_CASE"],"modifiers":["const"],"types":["boolean","string","number"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"objectLiteralProperty","format":null,"leadingUnderscore":"allowSingleOrDouble","trailingUnderscore":"forbid"},{"selector":"typeLike","format":["PascalCase"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","types":["boolean"],"format":["camelCase"],"prefix":["is","has","should","can"],"leadingUnderscore":"forbid","trailingUnderscore":"forbid"},{"selector":"variable","modifiers":["destructured"],"format":null},{"selector":"typeProperty","format":null}] | **/*{jsx,tsx,mtsx,mjsx} | |
react-refresh/only-export-components | eslint-plugin-react-refresh | 2 | No options | **/*{jsx,tsx,mtsx,mjsx} | |
jsx-a11y/alt-text | eslint-plugin-jsx-a11y | 2 | No options | Enforce all elements that require alternative text have meaningful information to relay back to end user. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/anchor-ambiguous-text | eslint-plugin-jsx-a11y | 0 | No options | Enforce `<a>` text to not exactly match "click here", "here", "link", or "a link". | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/anchor-has-content | eslint-plugin-jsx-a11y | 2 | No options | Enforce all anchors to contain accessible content. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/anchor-is-valid | eslint-plugin-jsx-a11y | 2 | No options | Enforce all anchors are valid, navigable elements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/aria-activedescendant-has-tabindex | eslint-plugin-jsx-a11y | 2 | No options | Enforce elements with aria-activedescendant are tabbable. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/aria-props | eslint-plugin-jsx-a11y | 2 | No options | Enforce all `aria-*` props are valid. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/aria-proptypes | eslint-plugin-jsx-a11y | 2 | No options | Enforce ARIA state and property values are valid. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/aria-role | eslint-plugin-jsx-a11y | 2 | No options | Enforce that elements with ARIA roles must use a valid, non-abstract ARIA role. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/aria-unsupported-elements | eslint-plugin-jsx-a11y | 2 | No options | Enforce that elements that do not support ARIA roles, states, and properties do not have those attributes. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/autocomplete-valid | eslint-plugin-jsx-a11y | 2 | No options | Enforce that autocomplete attributes are used correctly. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/click-events-have-key-events | eslint-plugin-jsx-a11y | 2 | No options | Enforce a clickable non-interactive element has at least one keyboard event listener. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/control-has-associated-label | eslint-plugin-jsx-a11y | 0 | [{"ignoreElements":["audio","canvas","embed","input","textarea","tr","video"],"ignoreRoles":["grid","listbox","menu","menubar","radiogroup","row","tablist","toolbar","tree","treegrid"],"includeRoles":["alert","dialog"]}] | Enforce that a control (an interactive element) has a text label. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/heading-has-content | eslint-plugin-jsx-a11y | 2 | No options | Enforce heading (`h1`, `h2`, etc) elements contain accessible content. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/html-has-lang | eslint-plugin-jsx-a11y | 2 | No options | Enforce `<html>` element has `lang` prop. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/iframe-has-title | eslint-plugin-jsx-a11y | 2 | No options | Enforce iframe elements have a title attribute. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/img-redundant-alt | eslint-plugin-jsx-a11y | 2 | No options | Enforce `<img>` alt prop does not contain the word "image", "picture", or "photo". | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/interactive-supports-focus | eslint-plugin-jsx-a11y | 2 | [{"tabbable":["button","checkbox","link","searchbox","spinbutton","switch","textbox"]}] | Enforce that elements with interactive handlers like `onClick` must be focusable. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/label-has-associated-control | eslint-plugin-jsx-a11y | 2 | No options | Enforce that a `label` tag has a text label and an associated control. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/label-has-for | eslint-plugin-jsx-a11y | 0 | No options | Enforce that `<label>` elements have the `htmlFor` prop. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/media-has-caption | eslint-plugin-jsx-a11y | 2 | No options | Enforces that `<audio>` and `<video>` elements must have a `<track>` for captions. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/mouse-events-have-key-events | eslint-plugin-jsx-a11y | 2 | No options | Enforce that `onMouseOver`/`onMouseOut` are accompanied by `onFocus`/`onBlur` for keyboard-only users. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-access-key | eslint-plugin-jsx-a11y | 2 | No options | Enforce that the `accessKey` prop is not used on any element to avoid complications with keyboard commands used by a screenreader. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-autofocus | eslint-plugin-jsx-a11y | 2 | No options | Enforce autoFocus prop is not used. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-distracting-elements | eslint-plugin-jsx-a11y | 2 | No options | Enforce distracting elements are not used. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-interactive-element-to-noninteractive-role | eslint-plugin-jsx-a11y | 2 | [{"tr":["none","presentation"],"canvas":["img"]}] | Interactive elements should not be assigned non-interactive roles. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-noninteractive-element-interactions | eslint-plugin-jsx-a11y | 2 | [{"handlers":["onClick","onError","onLoad","onMouseDown","onMouseUp","onKeyPress","onKeyDown","onKeyUp"],"alert":["onKeyUp","onKeyDown","onKeyPress"],"body":["onError","onLoad"],"dialog":["onKeyUp","onKeyDown","onKeyPress"],"iframe":["onError","onLoad"],"img":["onError","onLoad"]}] | Non-interactive elements should not be assigned mouse or keyboard event listeners. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-noninteractive-element-to-interactive-role | eslint-plugin-jsx-a11y | 2 | [{"ul":["listbox","menu","menubar","radiogroup","tablist","tree","treegrid"],"ol":["listbox","menu","menubar","radiogroup","tablist","tree","treegrid"],"li":["menuitem","option","row","tab","treeitem"],"table":["grid"],"td":["gridcell"],"fieldset":["radiogroup","presentation"]}] | Non-interactive elements should not be assigned interactive roles. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-noninteractive-tabindex | eslint-plugin-jsx-a11y | 2 | [{"tags":[],"roles":["tabpanel"],"allowExpressionValues":true}] | `tabIndex` should only be declared on interactive elements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-redundant-roles | eslint-plugin-jsx-a11y | 2 | No options | Enforce explicit role property is not the same as implicit/default role property on element. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/no-static-element-interactions | eslint-plugin-jsx-a11y | 2 | [{"allowExpressionValues":true,"handlers":["onClick","onMouseDown","onMouseUp","onKeyPress","onKeyDown","onKeyUp"]}] | Enforce that non-interactive, visible elements (such as `<div>`) that have click handlers use the role attribute. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/role-has-required-aria-props | eslint-plugin-jsx-a11y | 2 | No options | Enforce that elements with ARIA roles must have all required attributes for that role. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/role-supports-aria-props | eslint-plugin-jsx-a11y | 2 | No options | Enforce that elements with explicit or implicit roles defined contain only `aria-*` properties supported by that `role`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/scope | eslint-plugin-jsx-a11y | 2 | No options | Enforce `scope` prop is only used on `<th>` elements. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
jsx-a11y/tabindex-no-positive | eslint-plugin-jsx-a11y | 2 | No options | Enforce `tabIndex` value is not greater than zero. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react-hooks/rules-of-hooks | eslint-plugin-react-hooks | 2 | No options | enforces the Rules of Hooks | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react-hooks/exhaustive-deps | eslint-plugin-react-hooks | 1 | No options | verifies the list of dependencies for Hooks like useEffect and similar | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
react-refresh/only-export-components | eslint-plugin-react-refresh | 0 | No options | **/*.stories.tsx | |
react/jsx-filename-extension | eslint-plugin-react | 2 | [{"allow":"always","extensions":["jsx",".tsx","mtsx","mjsx"]}] | **/*.stories.tsx | |
vitest/consistent-test-it | eslint-plugin-vitest | 2 | [{"fn":"test","withinDescribe":"test"}] | Prefer test or it but not both | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/expect-expect | eslint-plugin-vitest | 2 | No options | Enforce having expectation in test body | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-commented-out-tests | eslint-plugin-vitest | 2 | No options | Disallow commented out tests | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-conditional-expect | eslint-plugin-vitest | 2 | No options | Disallow conditional expects | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-conditional-in-test | eslint-plugin-vitest | 2 | No options | Disallow conditional tests | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-disabled-tests | eslint-plugin-vitest | 2 | No options | Disallow disabled tests | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-done-callback | eslint-plugin-vitest | 2 | No options | Disallow using a callback in asynchronous tests and hooks | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-duplicate-hooks | eslint-plugin-vitest | 2 | No options | Disallow duplicate hooks and teardown hooks | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-identical-title | eslint-plugin-vitest | 2 | No options | Disallow identical titles | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-focused-tests | eslint-plugin-vitest | 2 | No options | Disallow focused tests | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-standalone-expect | eslint-plugin-vitest | 2 | No options | Disallow using `expect` outside of `it` or `test` blocks | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-test-prefixes | eslint-plugin-vitest | 2 | No options | Disallow using `test` as a prefix | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/no-test-return-statement | eslint-plugin-vitest | 2 | No options | Disallow return statements in tests | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-comparison-matcher | eslint-plugin-vitest | 2 | No options | Suggest using the built-in comparison matchers | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-each | eslint-plugin-vitest | 2 | No options | Prefer `each` rather than manual loops | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-equality-matcher | eslint-plugin-vitest | 2 | No options | Suggest using the built-in quality matchers | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-expect-resolves | eslint-plugin-vitest | 2 | No options | Suggest using `expect().resolves` over `expect(await ...)` syntax | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-hooks-in-order | eslint-plugin-vitest | 2 | No options | Prefer having hooks in consistent order | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-hooks-on-top | eslint-plugin-vitest | 2 | No options | Suggest having hooks before any test cases | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-lowercase-title | eslint-plugin-vitest | 2 | No options | Enforce lowercase titles | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-mock-promise-shorthand | eslint-plugin-vitest | 2 | No options | Prefer mock resolved/rejected shorthands for promises | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-spy-on | eslint-plugin-vitest | 2 | No options | Suggest using `vi.spyOn` | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-strict-equal | eslint-plugin-vitest | 2 | No options | Prefer strict equal over equal | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-be | eslint-plugin-vitest | 2 | No options | Suggest using toBe() | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-be-falsy | eslint-plugin-vitest | 2 | No options | Suggest using toBeFalsy() | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-be-object | eslint-plugin-vitest | 2 | No options | Prefer toBeObject() | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-be-truthy | eslint-plugin-vitest | 2 | No options | Suggest using `toBeTruthy` | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-contain | eslint-plugin-vitest | 2 | No options | Prefer using toContain() | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-to-have-length | eslint-plugin-vitest | 2 | No options | Suggest using toHaveLength() | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/prefer-todo | eslint-plugin-vitest | 2 | No options | Suggest using `test.todo` | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/require-hook | eslint-plugin-vitest | 2 | No options | Require setup and teardown to be within a hook | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/require-to-throw-message | eslint-plugin-vitest | 2 | No options | Require toThrow() to be called with an error message | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/require-top-level-describe | eslint-plugin-vitest | 2 | No options | Enforce that all tests are in a top-level describe | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/valid-describe-callback | eslint-plugin-vitest | 2 | No options | Enforce valid describe callback | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
vitest/valid-expect | eslint-plugin-vitest | 2 | No options | Enforce valid `expect()` usage | **/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx}, **/tests/**, **/__tests__/** |
@next/next/google-font-display | @next/eslint-plugin-next | 1 | No options | Enforce font-display behavior with Google Fonts. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/google-font-preconnect | @next/eslint-plugin-next | 1 | No options | Ensure `preconnect` is used with Google Fonts. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/next-script-for-ga | @next/eslint-plugin-next | 1 | No options | Prefer `next/script` component when using the inline script for Google Analytics. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-before-interactive-script-outside-document | @next/eslint-plugin-next | 1 | No options | Prevent usage of `next/script`'s `beforeInteractive` strategy outside of `pages/_document.js`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-css-tags | @next/eslint-plugin-next | 1 | No options | Prevent manual stylesheet tags. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-head-element | @next/eslint-plugin-next | 1 | No options | Prevent usage of `<head>` element. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-html-link-for-pages | @next/eslint-plugin-next | 2 | No options | Prevent usage of `<a>` elements to navigate to internal Next.js pages. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-img-element | @next/eslint-plugin-next | 1 | No options | Prevent usage of `<img>` element due to slower LCP and higher bandwidth. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-page-custom-font | @next/eslint-plugin-next | 1 | No options | Prevent page-only custom fonts. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-styled-jsx-in-document | @next/eslint-plugin-next | 1 | No options | Prevent usage of `styled-jsx` in `pages/_document.js`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-sync-scripts | @next/eslint-plugin-next | 2 | No options | Prevent synchronous scripts. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-title-in-document-head | @next/eslint-plugin-next | 1 | No options | Prevent usage of `<title>` with `Head` component from `next/document`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-typos | @next/eslint-plugin-next | 1 | No options | Prevent common typos in Next.js data fetching functions. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-unwanted-polyfillio | @next/eslint-plugin-next | 1 | No options | Prevent duplicate polyfills from Polyfill.io. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/inline-script-id | @next/eslint-plugin-next | 2 | No options | Enforce `id` attribute on `next/script` components with inline content. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-assign-module-variable | @next/eslint-plugin-next | 2 | No options | Prevent assignment to the `module` variable. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-document-import-in-page | @next/eslint-plugin-next | 2 | No options | Prevent importing `next/document` outside of `pages/_document.js`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-duplicate-head | @next/eslint-plugin-next | 2 | No options | Prevent duplicate usage of `<Head>` in `pages/_document.js`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-head-import-in-document | @next/eslint-plugin-next | 2 | No options | Prevent usage of `next/head` in `pages/_document.js`. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
@next/next/no-script-component-in-head | @next/eslint-plugin-next | 2 | No options | Prevent usage of `next/script` in `next/head` component. | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/callback-binding | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/callback-binding.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/chain-style | eslint-plugin-lodash-f | 1 | ["as-needed"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/chain-style.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/chaining | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/chaining.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/collection-method-value | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/collection-method-value.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/collection-ordering | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/collection-ordering.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/collection-return | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/collection-return.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/consistent-compose | eslint-plugin-lodash-f | 1 | ["flow"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/consistent-compose.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/identity-shorthand | eslint-plugin-lodash-f | 1 | ["always"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/identity-shorthand.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/import-scope | eslint-plugin-lodash-f | 2 | ["member"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/import-scope.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/matches-prop-shorthand | eslint-plugin-lodash-f | 1 | ["always"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/matches-prop-shorthand.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/matches-shorthand | eslint-plugin-lodash-f | 1 | ["always",3] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/matches-shorthand.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/no-commit | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/no-commit.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/no-double-unwrap | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/no-double-unwrap.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/no-extra-args | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/no-extra-args.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/no-unbound-this | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/no-unbound-this.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/path-style | eslint-plugin-lodash-f | 1 | ["string"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/path-style.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-compact | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-compact.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-constant | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-constant.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-filter | eslint-plugin-lodash-f | 2 | [3] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-filter.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-find | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-find.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-flat-map | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-flat-map.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-get | eslint-plugin-lodash-f | 0 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-get.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-immutable-method | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-immutable-method.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-includes | eslint-plugin-lodash-f | 2 | [{"includeNative":false}] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-includes.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-invoke-map | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-invoke-map.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-is-empty | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-is-empty.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-is-nil | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-is-nil.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-lodash-chain | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-lodash-chain.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-lodash-method | eslint-plugin-lodash-f | 0 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-lodash-method.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-lodash-typecheck | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-lodash-typecheck.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-map | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-map.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-matches | eslint-plugin-lodash-f | 0 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-matches.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-nullish-coalescing | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-nullish-coalescing.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-noop | eslint-plugin-lodash-f | 0 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-noop.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-over-quantifier | eslint-plugin-lodash-f | 0 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-over-quantifier.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-reject | eslint-plugin-lodash-f | 2 | [3] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-reject.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-some | eslint-plugin-lodash-f | 2 | [{"includeNative":false}] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-some.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-startswith | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-startswith.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-thru | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-thru.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-times | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-times.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prefer-wrapper-method | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prefer-wrapper-method.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/preferred-alias | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/preferred-alias.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/prop-shorthand | eslint-plugin-lodash-f | 1 | ["always"] | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/prop-shorthand.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
lodash-f/unwrap | eslint-plugin-lodash-f | 1 | No options | https://github.com/wix/eslint-plugin-lodash/blob/v7.5.3/docs/rules/unwrap.md | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |
unicorn/no-instanceof-array | eslint-plugin-unicorn | 0 | No options | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} | |
no-empty-pattern | @eslint/js | 0 | No options | **/*{js,ts} | |
playwright/missing-playwright-await | eslint-plugin-playwright | 2 | No options | Identify false positives when async Playwright APIs are not properly awaited. | **/*{js,ts} |
playwright/no-page-pause | eslint-plugin-playwright | 1 | No options | Prevent usage of page.pause() | **/*{js,ts} |
playwright/no-element-handle | eslint-plugin-playwright | 1 | No options | The use of ElementHandle is discouraged, use Locator instead | **/*{js,ts} |
playwright/no-eval | eslint-plugin-playwright | 1 | No options | The use of `page.$eval` and `page.$$eval` are discouraged, use `locator.evaluate` or `locator.evaluateAll` instead | **/*{js,ts} |
playwright/no-focused-test | eslint-plugin-playwright | 2 | No options | Prevent usage of `.only()` focus test annotation | **/*{js,ts} |
playwright/no-skipped-test | eslint-plugin-playwright | 1 | No options | Prevent usage of the `.skip()` skip test annotation. | **/*{js,ts} |
playwright/no-wait-for-timeout | eslint-plugin-playwright | 1 | No options | Prevent usage of page.waitForTimeout() | **/*{js,ts} |
playwright/no-force-option | eslint-plugin-playwright | 0 | No options | Prevent usage of `{ force: true }` option. | **/*{js,ts} |
playwright/max-nested-describe | eslint-plugin-playwright | 1 | No options | Enforces a maximum depth to nested describe calls | **/*{js,ts} |
playwright/no-conditional-in-test | eslint-plugin-playwright | 1 | No options | Disallow conditional logic in tests | **/*{js,ts} |
playwright/no-useless-not | eslint-plugin-playwright | 1 | No options | Disallow usage of 'not' matchers when a more specific matcher exists | **/*{js,ts} |
playwright/valid-expect | eslint-plugin-playwright | 2 | No options | Enforce valid `expect()` usage | **/*{js,ts} |
playwright/prefer-lowercase-title | eslint-plugin-playwright | 2 | No options | Enforce lowercase test names | **/*{js,ts} |
playwright/prefer-to-have-length | eslint-plugin-playwright | 2 | No options | Suggest using `toHaveLength()` | **/*{js,ts} |
playwright/require-top-level-describe | eslint-plugin-playwright | 2 | No options | Require test cases and hooks to be inside a `test.describe` block | **/*{js,ts} |
playwright/prefer-to-be | eslint-plugin-playwright | 2 | No options | Suggest using `toBe()` for primitive literals | **/*{js,ts} |
playwright/prefer-strict-equal | eslint-plugin-playwright | 2 | No options | Suggest using `toStrictEqual()` | **/*{js,ts} |
curly | @eslint/js | 0 | No options | Enforce consistent brace style for all control statements | * |
lines-around-comment | @eslint/js | 0 | No options | Require empty lines around comments | * |
max-len | @eslint/js | 0 | No options | Enforce a maximum line length | * |
no-confusing-arrow | @eslint/js | 0 | No options | Disallow arrow functions where they could be confused with comparisons | * |
no-mixed-operators | @eslint/js | 0 | No options | Disallow mixed binary operators | * |
no-tabs | @eslint/js | 0 | No options | Disallow all tabs | * |
no-unexpected-multiline | @eslint/js | 0 | No options | Disallow confusing multiline expressions | * |
quotes | @eslint/js | 0 | No options | Enforce the consistent use of either backticks, double, or single quotes | * |
@typescript-eslint/lines-around-comment | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/quotes | @typescript-eslint/eslint-plugin | 0 | No options | * | |
babel/quotes | eslint-plugin-babel | 0 | No options | * | |
vue/html-self-closing | eslint-plugin-vue | 0 | No options | * | |
vue/max-len | eslint-plugin-vue | 0 | No options | * | |
array-bracket-newline | @eslint/js | 0 | No options | Enforce linebreaks after opening and before closing array brackets | * |
array-bracket-spacing | @eslint/js | 0 | No options | Enforce consistent spacing inside array brackets | * |
array-element-newline | @eslint/js | 0 | No options | Enforce line breaks after each array element | * |
arrow-parens | @eslint/js | 0 | No options | Require parentheses around arrow function arguments | * |
arrow-spacing | @eslint/js | 0 | No options | Enforce consistent spacing before and after the arrow in arrow functions | * |
block-spacing | @eslint/js | 0 | No options | Disallow or enforce spaces inside of blocks after opening block and before closing block | * |
brace-style | @eslint/js | 0 | No options | Enforce consistent brace style for blocks | * |
comma-dangle | @eslint/js | 0 | No options | Require or disallow trailing commas | * |
comma-spacing | @eslint/js | 0 | No options | Enforce consistent spacing before and after commas | * |
comma-style | @eslint/js | 0 | No options | Enforce consistent comma style | * |
computed-property-spacing | @eslint/js | 0 | No options | Enforce consistent spacing inside computed property brackets | * |
dot-location | @eslint/js | 0 | No options | Enforce consistent newlines before and after dots | * |
eol-last | @eslint/js | 0 | No options | Require or disallow newline at the end of files | * |
func-call-spacing | @eslint/js | 0 | No options | Require or disallow spacing between function identifiers and their invocations | * |
function-call-argument-newline | @eslint/js | 0 | No options | Enforce line breaks between arguments of a function call | * |
function-paren-newline | @eslint/js | 0 | No options | Enforce consistent line breaks inside function parentheses | * |
generator-star-spacing | @eslint/js | 0 | No options | Enforce consistent spacing around `*` operators in generator functions | * |
implicit-arrow-linebreak | @eslint/js | 0 | No options | Enforce the location of arrow function bodies | * |
indent | @eslint/js | 0 | No options | Enforce consistent indentation | * |
jsx-quotes | @eslint/js | 0 | No options | Enforce the consistent use of either double or single quotes in JSX attributes | * |
key-spacing | @eslint/js | 0 | No options | Enforce consistent spacing between keys and values in object literal properties | * |
keyword-spacing | @eslint/js | 0 | No options | Enforce consistent spacing before and after keywords | * |
linebreak-style | @eslint/js | 0 | No options | Enforce consistent linebreak style | * |
max-statements-per-line | @eslint/js | 0 | No options | Enforce a maximum number of statements allowed per line | * |
multiline-ternary | @eslint/js | 0 | No options | Enforce newlines between operands of ternary expressions | * |
newline-per-chained-call | @eslint/js | 0 | No options | Require a newline after each call in a method chain | * |
new-parens | @eslint/js | 0 | No options | Enforce or disallow parentheses when invoking a constructor with no arguments | * |
no-extra-parens | @eslint/js | 0 | No options | Disallow unnecessary parentheses | * |
no-extra-semi | @eslint/js | 0 | No options | Disallow unnecessary semicolons | * |
no-floating-decimal | @eslint/js | 0 | No options | Disallow leading or trailing decimal points in numeric literals | * |
no-mixed-spaces-and-tabs | @eslint/js | 0 | No options | Disallow mixed spaces and tabs for indentation | * |
no-multi-spaces | @eslint/js | 0 | No options | Disallow multiple spaces | * |
no-multiple-empty-lines | @eslint/js | 0 | No options | Disallow multiple empty lines | * |
no-trailing-spaces | @eslint/js | 0 | No options | Disallow trailing whitespace at the end of lines | * |
no-whitespace-before-property | @eslint/js | 0 | No options | Disallow whitespace before properties | * |
nonblock-statement-body-position | @eslint/js | 0 | No options | Enforce the location of single-line statements | * |
object-curly-newline | @eslint/js | 0 | No options | Enforce consistent line breaks after opening and before closing braces | * |
object-curly-spacing | @eslint/js | 0 | No options | Enforce consistent spacing inside braces | * |
object-property-newline | @eslint/js | 0 | No options | Enforce placing object properties on separate lines | * |
one-var-declaration-per-line | @eslint/js | 0 | No options | Require or disallow newlines around variable declarations | * |
operator-linebreak | @eslint/js | 0 | No options | Enforce consistent linebreak style for operators | * |
padded-blocks | @eslint/js | 0 | No options | Require or disallow padding within blocks | * |
quote-props | @eslint/js | 0 | No options | Require quotes around object literal property names | * |
rest-spread-spacing | @eslint/js | 0 | No options | Enforce spacing between rest and spread operators and their expressions | * |
semi | @eslint/js | 0 | No options | Require or disallow semicolons instead of ASI | * |
semi-spacing | @eslint/js | 0 | No options | Enforce consistent spacing before and after semicolons | * |
semi-style | @eslint/js | 0 | No options | Enforce location of semicolons | * |
space-before-blocks | @eslint/js | 0 | No options | Enforce consistent spacing before blocks | * |
space-before-function-paren | @eslint/js | 0 | No options | Enforce consistent spacing before `function` definition opening parenthesis | * |
space-in-parens | @eslint/js | 0 | No options | Enforce consistent spacing inside parentheses | * |
space-infix-ops | @eslint/js | 0 | No options | Require spacing around infix operators | * |
space-unary-ops | @eslint/js | 0 | No options | Enforce consistent spacing before or after unary operators | * |
switch-colon-spacing | @eslint/js | 0 | No options | Enforce spacing around colons of switch statements | * |
template-curly-spacing | @eslint/js | 0 | No options | Require or disallow spacing around embedded expressions of template strings | * |
template-tag-spacing | @eslint/js | 0 | No options | Require or disallow spacing between template tags and their literals | * |
wrap-iife | @eslint/js | 0 | No options | Require parentheses around immediate `function` invocations | * |
wrap-regex | @eslint/js | 0 | No options | Require parenthesis around regex literals | * |
yield-star-spacing | @eslint/js | 0 | No options | Require or disallow spacing around the `*` in `yield*` expressions | * |
@babel/object-curly-spacing | @babel/eslint-plugin | 0 | No options | * | |
@babel/semi | @babel/eslint-plugin | 0 | No options | * | |
@typescript-eslint/block-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/brace-style | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/comma-dangle | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/comma-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/func-call-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/indent | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/key-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/keyword-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/member-delimiter-style | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/no-extra-parens | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/no-extra-semi | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/object-curly-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/semi | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/space-before-blocks | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/space-before-function-paren | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/space-infix-ops | @typescript-eslint/eslint-plugin | 0 | No options | * | |
@typescript-eslint/type-annotation-spacing | @typescript-eslint/eslint-plugin | 0 | No options | * | |
babel/object-curly-spacing | eslint-plugin-babel | 0 | No options | * | |
babel/semi | eslint-plugin-babel | 0 | No options | * | |
flowtype/boolean-style | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/delimiter-dangle | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/generic-spacing | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/object-type-curly-spacing | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/object-type-delimiter | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/quotes | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/semi | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/space-after-type-colon | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/space-before-generic-bracket | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/space-before-type-colon | eslint-plugin-flowtype | 0 | No options | * | |
flowtype/union-intersection-spacing | eslint-plugin-flowtype | 0 | No options | * | |
react/jsx-child-element-spacing | eslint-plugin-react | 0 | No options | * | |
react/jsx-closing-bracket-location | eslint-plugin-react | 0 | No options | * | |
react/jsx-closing-tag-location | eslint-plugin-react | 0 | No options | * | |
react/jsx-curly-newline | eslint-plugin-react | 0 | No options | * | |
react/jsx-curly-spacing | eslint-plugin-react | 0 | No options | * | |
react/jsx-equals-spacing | eslint-plugin-react | 0 | No options | * | |
react/jsx-first-prop-new-line | eslint-plugin-react | 0 | No options | * | |
react/jsx-indent | eslint-plugin-react | 0 | No options | * | |
react/jsx-indent-props | eslint-plugin-react | 0 | No options | * | |
react/jsx-max-props-per-line | eslint-plugin-react | 0 | No options | * | |
react/jsx-newline | eslint-plugin-react | 0 | No options | * | |
react/jsx-one-expression-per-line | eslint-plugin-react | 0 | No options | * | |
react/jsx-props-no-multi-spaces | eslint-plugin-react | 0 | No options | * | |
react/jsx-tag-spacing | eslint-plugin-react | 0 | No options | * | |
react/jsx-wrap-multilines | eslint-plugin-react | 0 | No options | * | |
standard/array-bracket-even-spacing | eslint-plugin-standard | 0 | No options | * | |
standard/computed-property-even-spacing | eslint-plugin-standard | 0 | No options | * | |
standard/object-curly-even-spacing | eslint-plugin-standard | 0 | No options | * | |
unicorn/empty-brace-spaces | eslint-plugin-unicorn | 0 | No options | * | |
unicorn/no-nested-ternary | eslint-plugin-unicorn | 0 | No options | * | |
unicorn/number-literal-case | eslint-plugin-unicorn | 0 | No options | * | |
vue/array-bracket-newline | eslint-plugin-vue | 0 | No options | * | |
vue/array-bracket-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/array-element-newline | eslint-plugin-vue | 0 | No options | * | |
vue/arrow-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/block-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/block-tag-newline | eslint-plugin-vue | 0 | No options | * | |
vue/brace-style | eslint-plugin-vue | 0 | No options | * | |
vue/comma-dangle | eslint-plugin-vue | 0 | No options | * | |
vue/comma-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/comma-style | eslint-plugin-vue | 0 | No options | * | |
vue/dot-location | eslint-plugin-vue | 0 | No options | * | |
vue/func-call-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/html-closing-bracket-newline | eslint-plugin-vue | 0 | No options | * | |
vue/html-closing-bracket-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/html-end-tags | eslint-plugin-vue | 0 | No options | * | |
vue/html-indent | eslint-plugin-vue | 0 | No options | * | |
vue/html-quotes | eslint-plugin-vue | 0 | No options | * | |
vue/key-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/keyword-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/max-attributes-per-line | eslint-plugin-vue | 0 | No options | * | |
vue/multiline-html-element-content-newline | eslint-plugin-vue | 0 | No options | * | |
vue/multiline-ternary | eslint-plugin-vue | 0 | No options | * | |
vue/mustache-interpolation-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/no-extra-parens | eslint-plugin-vue | 0 | No options | * | |
vue/no-multi-spaces | eslint-plugin-vue | 0 | No options | * | |
vue/no-spaces-around-equal-signs-in-attribute | eslint-plugin-vue | 0 | No options | * | |
vue/object-curly-newline | eslint-plugin-vue | 0 | No options | * | |
vue/object-curly-spacing | eslint-plugin-vue | 0 | No options | * | |
vue/object-property-newline | eslint-plugin-vue | 0 | No options | * | |
vue/operator-linebreak | eslint-plugin-vue | 0 | No options | * | |
vue/quote-props | eslint-plugin-vue | 0 | No options | * | |
vue/script-indent | eslint-plugin-vue | 0 | No options | * | |
vue/singleline-html-element-content-newline | eslint-plugin-vue | 0 | No options | * | |
vue/space-in-parens | eslint-plugin-vue | 0 | No options | * | |
vue/space-infix-ops | eslint-plugin-vue | 0 | No options | * | |
vue/space-unary-ops | eslint-plugin-vue | 0 | No options | * | |
vue/template-curly-spacing | eslint-plugin-vue | 0 | No options | * | |
generator-star | @eslint/js | 0 | No options | * | |
indent-legacy | @eslint/js | 0 | No options | Enforce consistent indentation | * |
no-arrow-condition | @eslint/js | 0 | No options | * | |
no-comma-dangle | @eslint/js | 0 | No options | * | |
no-reserved-keys | @eslint/js | 0 | No options | * | |
no-space-before-semi | @eslint/js | 0 | No options | * | |
no-spaced-func | @eslint/js | 0 | No options | Disallow spacing between function identifiers and their applications (deprecated) | * |
no-wrap-func | @eslint/js | 0 | No options | * | |
space-after-function-name | @eslint/js | 0 | No options | * | |
space-after-keywords | @eslint/js | 0 | No options | * | |
space-before-function-parentheses | @eslint/js | 0 | No options | * | |
space-before-keywords | @eslint/js | 0 | No options | * | |
space-in-brackets | @eslint/js | 0 | No options | * | |
space-return-throw-case | @eslint/js | 0 | No options | * | |
space-unary-word-ops | @eslint/js | 0 | No options | * | |
react/jsx-space-before-closing | eslint-plugin-react | 0 | No options | * | |
curly | @eslint/js | 2 | ["all"] | Enforce consistent brace style for all control statements | **/*{js,mjs,cjs,ts,mts,cts,jsx,tsx,mtsx,mjsx} |