Skip to content

Rules

The progress of all rule implementations is tracked here.

  • Total number of rules: 640
  • Rules turned on by default: 104

Legend for 'Fixable?' column:

  • 🛠️: an auto-fix is available for this rule
  • 💡: a suggestion is available for this rule
  • ⚠️🛠️: a dangerous auto-fix is available for this rule
  • ⚠️💡: a dangerous suggestion is available for this rule
  • 🚧: an auto-fix or suggestion is possible, but currently not implemented

Correctness (199):

Code that is outright wrong or useless.

Rule nameSourceDefaultFixable?
constructor-supereslint
for-directioneslint⚠️🛠️️
no-async-promise-executoreslint
no-callereslint
no-class-assigneslint
no-compare-neg-zeroeslint🛠️💡
no-cond-assigneslint
no-const-assigneslint
no-constant-binary-expressioneslint
no-constant-conditioneslint
no-control-regexeslint
no-debuggereslint🛠️
no-delete-vareslint
no-dupe-class-memberseslint
no-dupe-else-ifeslint
no-dupe-keyseslint
no-duplicate-caseeslint
no-empty-character-classeslint
no-empty-patterneslint
no-empty-static-blockeslint💡
no-evaleslint
no-ex-assigneslint
no-extra-boolean-casteslint🛠️💡
no-func-assigneslint
no-global-assigneslint
no-import-assigneslint
no-invalid-regexpeslint
no-irregular-whitespaceeslint
no-loss-of-precisioneslint
no-new-native-nonconstructoreslint
no-nonoctal-decimal-escapeeslint🚧
no-obj-callseslint
no-self-assigneslint
no-setter-returneslint
no-shadow-restricted-nameseslint
no-sparse-arrayseslint
no-this-before-supereslint
no-unassigned-varseslint
no-unsafe-finallyeslint
no-unsafe-negationeslint🛠️
no-unsafe-optional-chainingeslint
no-unused-expressionseslint
no-unused-labelseslint🛠️
no-unused-private-class-memberseslint
no-unused-varseslint⚠️💡
no-useless-backreferenceeslint
no-useless-catcheslint
no-useless-escapeeslint🛠️
no-useless-renameeslint
no-witheslint
require-yieldeslint
use-isnaneslint🛠️
valid-typeofeslint🛠️
defaultimport
namespaceimport
expect-expectjest
no-conditional-expectjest
no-disabled-testsjest
no-exportjest
no-focused-testsjest🛠️
no-standalone-expectjest
require-to-throw-messagejest
valid-describe-callbackjest
valid-expectjest
valid-titlejest🛠️
check-property-namesjsdoc
check-tag-namesjsdoc
implements-on-classesjsdoc
no-defaultsjsdoc
require-propertyjsdoc
require-property-descriptionjsdoc
require-property-namejsdoc
require-property-typejsdoc
require-yieldsjsdoc
alt-textjsx_a11y
anchor-has-contentjsx_a11y💡
anchor-is-validjsx_a11y
aria-activedescendant-has-tabindexjsx_a11y
aria-propsjsx_a11y🛠️
aria-rolejsx_a11y
aria-unsupported-elementsjsx_a11y🛠️
autocomplete-validjsx_a11y
click-events-have-key-eventsjsx_a11y
heading-has-contentjsx_a11y
html-has-langjsx_a11y
iframe-has-titlejsx_a11y
img-redundant-altjsx_a11y
label-has-associated-controljsx_a11y
langjsx_a11y
media-has-captionjsx_a11y
mouse-events-have-key-eventsjsx_a11y
no-access-keyjsx_a11y💡
no-aria-hidden-on-focusablejsx_a11y🛠️
no-autofocusjsx_a11y🛠️
no-distracting-elementsjsx_a11y
no-noninteractive-tabindexjsx_a11y
no-redundant-rolesjsx_a11y🛠️
prefer-tag-over-rolejsx_a11y
role-has-required-aria-propsjsx_a11y
role-supports-aria-propsjsx_a11y
scopejsx_a11y🛠️
tabindex-no-positivejsx_a11y⚠️💡
google-font-displaynextjs
google-font-preconnectnextjs
inline-script-idnextjs
next-script-for-ganextjs
no-assign-module-variablenextjs
no-async-client-componentnextjs
no-before-interactive-script-outside-documentnextjs
no-css-tagsnextjs
no-document-import-in-pagenextjs
no-duplicate-headnextjs
no-head-elementnextjs
no-head-import-in-documentnextjs
no-html-link-for-pagesnextjs
no-img-elementnextjs🚧
no-page-custom-fontnextjs
no-script-component-in-headnextjs
no-styled-jsx-in-documentnextjs
no-sync-scriptsnextjs
no-title-in-document-headnextjs
no-typosnextjs🚧
no-unwanted-polyfillionextjs
bad-array-method-on-argumentsoxc
bad-char-at-comparisonoxc
bad-comparison-sequenceoxc
bad-min-max-funcoxc
bad-object-literal-comparisonoxc
bad-replace-all-argoxc
const-comparisonsoxc
double-comparisonsoxc🛠️
erasing-opoxc⚠️🛠️️
missing-throwoxc💡
number-arg-out-of-rangeoxc
only-used-in-recursionoxc⚠️🛠️️
uninvoked-array-callbackoxc
no-callback-in-promisepromise
no-new-staticspromise🛠️
valid-paramspromise
exhaustive-depsreact⚠️🛠️️💡
forward-ref-uses-refreact💡
jsx-keyreact
jsx-no-duplicate-propsreact
jsx-no-undefreact
jsx-props-no-spread-multireact🛠️
no-children-propreact
no-danger-with-childrenreact
no-direct-mutation-statereact
no-find-dom-nodereact
no-is-mountedreact
no-render-return-valuereact
no-string-refsreact
no-unsafereact
void-dom-elements-no-childrenreact
await-thenabletypescript🚧
no-array-deletetypescript🚧
no-base-to-stringtypescript🚧
no-duplicate-enum-valuestypescript
no-duplicate-type-constituentstypescript🚧
no-extra-non-null-assertiontypescript
no-floating-promisestypescript🚧
no-for-in-arraytypescript🚧
no-implied-evaltypescript🚧
no-meaningless-void-operatortypescript🚧
no-misused-newtypescript
no-misused-spreadtypescript🚧
no-non-null-asserted-optional-chaintypescript💡
no-redundant-type-constituentstypescript🚧
no-this-aliastypescript
no-unnecessary-parameter-property-assignmenttypescript💡
no-unsafe-declaration-mergingtypescript
no-unsafe-unary-minustypescript🚧
no-useless-empty-exporttypescript🛠️
no-wrapper-object-typestypescript🛠️
prefer-as-consttypescript🛠️
require-array-sort-comparetypescript🚧
restrict-template-expressionstypescript🚧
triple-slash-referencetypescript
unbound-methodtypescript🚧
no-await-in-promise-methodsunicorn
no-empty-fileunicorn
no-invalid-fetch-optionsunicorn
no-invalid-remove-event-listenerunicorn
no-new-arrayunicorn🚧
no-single-promise-in-promise-methodsunicorn🛠️
no-thenableunicorn
no-unnecessary-awaitunicorn🛠️
no-useless-fallback-in-spreadunicorn🛠️
no-useless-length-checkunicorn🚧
no-useless-spreadunicorn⚠️🛠️️
prefer-set-sizeunicorn🛠️
prefer-string-starts-ends-withunicorn🛠️
no-conditional-testsvitest
require-local-test-context-for-concurrent-snapshotsvitest🚧
no-deprecated-destroyed-lifecyclevue🛠️
no-export-in-script-setupvue
prefer-import-from-vuevue🛠️
valid-define-emitsvue🚧
valid-define-propsvue🚧

Perf (12):

Code that can be written to run faster.

Rule nameSourceDefaultFixable?
no-await-in-loopeslint
no-useless-calleslint
no-accumulating-spreadoxc
no-map-spreadoxc🛠️💡
no-array-index-keyreact
jsx-no-jsx-as-propreact_perf
jsx-no-new-array-as-propreact_perf
jsx-no-new-function-as-propreact_perf
jsx-no-new-object-as-propreact_perf
prefer-array-findunicorn🚧
prefer-array-flat-mapunicorn🛠️
prefer-set-hasunicorn⚠️🛠️️

Restriction (80):

Lints which prevent the use of language and library features. Must not be enabled as a whole, should be considered on a case-by-case basis before enabling.

Rule nameSourceDefaultFixable?
class-methods-use-thiseslint
default-caseeslint
no-alerteslint
no-bitwiseeslint
no-consoleeslint💡
no-div-regexeslint🛠️
no-emptyeslint💡
no-empty-functioneslint
no-eq-nulleslint⚠️🛠️️
no-iteratoreslint💡
no-param-reassigneslint
no-pluspluseslint💡
no-protoeslint🚧
no-regex-spaceseslint🛠️
no-restricted-globalseslint
no-restricted-importseslint
no-sequenceseslint
no-undefinedeslint
no-vareslint🛠️
no-voideslint💡
unicode-bomeslint🛠️
extensionsimport
no-amdimport
no-commonjsimport
no-cycleimport
no-default-exportimport
no-dynamic-requireimport
no-webpack-loader-syntaximport
unambiguousimport
check-accessjsdoc
empty-tagsjsdoc
anchor-ambiguous-textjsx_a11y
no-new-requirenode
no-process-envnode
bad-bitwise-operatoroxc💡
no-async-awaitoxc
no-barrel-fileoxc
no-const-enumoxc🛠️
no-optional-chainingoxc
no-rest-spread-propertiesoxc
catch-or-returnpromise
spec-onlypromise
button-has-typereact
forbid-dom-propsreact
forbid-elementsreact
jsx-filename-extensionreact🚧
no-dangerreact
no-unknown-propertyreact🚧
only-export-componentsreact
explicit-function-return-typetypescript
explicit-module-boundary-typestypescript
no-dynamic-deletetypescript
no-empty-object-typetypescript
no-explicit-anytypescript🛠️
no-import-type-side-effectstypescript🛠️
no-namespacetypescript
no-non-null-asserted-nullish-coalescingtypescript
no-non-null-assertiontypescript
no-require-importstypescript🚧
no-restricted-typestypescript🛠️💡
no-var-requirestypescript
non-nullable-type-assertion-styletypescript🚧
prefer-literal-enum-membertypescript
promise-function-asynctypescript🚧
use-unknown-in-catch-callback-variabletypescript🚧
no-abusive-eslint-disableunicorn
no-anonymous-default-exportunicorn
no-array-for-eachunicorn🚧
no-array-reduceunicorn
no-document-cookieunicorn
no-length-as-slice-endunicorn🛠️
no-magic-array-flat-depthunicorn
no-process-exitunicorn🚧
no-useless-error-capture-stack-traceunicorn🚧
prefer-modern-math-apisunicorn🚧
prefer-node-protocolunicorn🛠️
prefer-number-propertiesunicorn⚠️🛠️️
max-propsvue
no-import-compiler-macrosvue⚠️🛠️️
no-multiple-slot-argsvue🚧

Suspicious (48):

code that is most likely wrong or useless.

Rule nameSourceDefaultFixable?
block-scoped-vareslint
no-extend-nativeeslint
no-extra-bindeslint🚧
no-neweslint
no-unexpected-multilineeslint⚠️🛠️️
no-unneeded-ternaryeslint⚠️🛠️️
no-useless-concateslint
no-useless-constructoreslint🛠️
preserve-caught-erroreslint🛠️
no-absolute-pathimport🚧
no-empty-named-blocksimport🛠️
no-named-as-defaultimport
no-named-as-default-memberimport
no-self-importimport
no-unassigned-importimport
no-commented-out-testsjest
approx-constantoxc💡
misrefactored-assign-opoxc💡
no-async-endpoint-handlersoxc
no-this-in-exported-functionoxc
always-returnpromise
no-multiple-resolvedpromise
no-promise-in-callbackpromise
iframe-missing-sandboxreact🚧
jsx-no-comment-textnodesreact
jsx-no-script-urlreact🚧
no-namespacereact
react-in-jsx-scopereact
style-prop-objectreact
no-confusing-non-null-assertiontypescript🚧
no-extraneous-classtypescript⚠️💡
no-unnecessary-boolean-literal-comparetypescript🚧
no-unnecessary-template-expressiontypescript🚧
no-unnecessary-type-argumentstypescript🚧
no-unnecessary-type-assertiontypescript🚧
no-unnecessary-type-constrainttypescript
no-unsafe-enum-comparisontypescript🚧
no-unsafe-type-assertiontypescript🚧
consistent-function-scopingunicorn🚧
no-accessor-recursionunicorn
no-array-reverseunicorn🛠️
no-array-sortunicorn🛠️
no-instanceof-builtinsunicorn🚧
prefer-add-event-listenerunicorn🚧
require-module-specifiersunicorn🛠️
require-post-message-target-originunicorn💡
no-required-prop-with-defaultvue🚧
require-default-exportvue

Pedantic (113):

Lints which are rather strict or have occasional false positives.

Rule nameSourceDefaultFixable?
accessor-pairseslint
array-callback-returneslint
eqeqeqeslint⚠️🛠️️
max-classes-per-fileeslint
max-deptheslint
max-lineseslint
max-lines-per-functioneslint
max-nested-callbackseslint
no-array-constructoreslint🛠️
no-case-declarationseslint
no-constructor-returneslint
no-else-returneslint🛠️
no-fallthrougheslint🚧
no-inline-commentseslint
no-inner-declarationseslint
no-lonely-ifeslint🚧
no-loop-funceslint
no-negated-conditioneslint🚧
no-new-wrapperseslint🛠️
no-object-constructoreslint🚧
no-promise-executor-returneslint
no-prototype-builtinseslint
no-redeclareeslint
no-self-compareeslint
no-throw-literaleslint💡
no-useless-returneslint🚧
no-warning-commentseslint
radixeslint⚠️🛠️️
require-awaiteslint⚠️🛠️️
sort-varseslint🚧
symbol-descriptioneslint
max-dependenciesimport
no-conditional-in-testjest
require-paramjsdoc
require-param-descriptionjsdoc
require-param-namejsdoc
require-param-typejsdoc
require-returnsjsdoc
require-returns-descriptionjsdoc
require-returns-typejsdoc
checked-requires-onchange-or-readonlyreact
jsx-no-target-blankreact
jsx-no-useless-fragmentreact💡
no-unescaped-entitiesreact
rules-of-hooksreact
ban-ts-commenttypescript🛠️
ban-typestypescript🚧
no-confusing-void-expressiontypescript🚧
no-deprecatedtypescript
no-misused-promisestypescript🚧
no-mixed-enumstypescript🚧
no-unsafe-argumenttypescript🚧
no-unsafe-assignmenttypescript🚧
no-unsafe-calltypescript🚧
no-unsafe-function-typetypescript
no-unsafe-member-accesstypescript🚧
no-unsafe-returntypescript🚧
only-throw-errortypescript🚧
prefer-enum-initializerstypescript💡
prefer-includestypescript🚧
prefer-nullish-coalescingtypescript🚧
prefer-promise-reject-errorstypescript🚧
prefer-ts-expect-errortypescript🛠️
related-getter-setter-pairstypescript🚧
require-awaittypescript🚧
restrict-plus-operandstypescript🚧
return-awaittypescript🚧
strict-boolean-expressionstypescript🚧
switch-exhaustiveness-checktypescript🚧
consistent-assertunicorn🛠️
consistent-empty-array-spreadunicorn💡
escape-caseunicorn🛠️
explicit-length-checkunicorn🛠️
new-for-builtinsunicorn
no-array-callback-referenceunicorn🚧
no-hex-escapeunicorn🛠️
no-immediate-mutationunicorn🚧
no-instanceof-arrayunicorn🛠️
no-lonely-ifunicorn
no-negation-in-equality-checkunicorn💡
no-new-bufferunicorn🚧
no-object-as-default-parameterunicorn
no-static-only-classunicorn⚠️🛠️️
no-this-assignmentunicorn
no-typeof-undefinedunicorn🚧
no-unnecessary-array-flat-depthunicorn💡
no-unnecessary-array-splice-countunicorn🛠️
no-unnecessary-slice-endunicorn🛠️
no-unreadable-iifeunicorn
no-useless-promise-resolve-rejectunicorn🛠️
no-useless-switch-caseunicorn🚧
no-useless-undefinedunicorn🛠️
prefer-array-flatunicorn⚠️🛠️️
prefer-array-someunicorn🛠️
prefer-atunicorn⚠️🛠️️
prefer-blob-reading-methodsunicorn🚧
prefer-code-pointunicorn🛠️
prefer-date-nowunicorn🛠️
prefer-dom-node-appendunicorn🛠️
prefer-dom-node-datasetunicorn🚧
prefer-dom-node-removeunicorn
prefer-event-targetunicorn
prefer-math-min-maxunicorn🛠️
prefer-math-truncunicorn🚧
prefer-native-coercion-functionsunicorn🚧
prefer-prototype-methodsunicorn🛠️
prefer-query-selectorunicorn🛠️
prefer-regexp-testunicorn🛠️
prefer-string-replace-allunicorn🛠️
prefer-string-sliceunicorn🛠️
prefer-top-level-awaitunicorn
prefer-type-errorunicorn🛠️
require-number-to-fixed-digits-argumentunicorn🛠️

Style (179):

Code that should be written in a more idiomatic way.

Rule nameSourceDefaultFixable?
arrow-body-styleeslint🛠️
capitalized-commentseslint🛠️
curlyeslint🛠️
default-case-lasteslint
default-param-lasteslint
func-nameseslint🛠️💡
func-styleeslint🚧
grouped-accessor-pairseslint🚧
guard-for-ineslint
id-lengtheslint
init-declarationseslint
max-paramseslint
max-statementseslint
new-capeslint🚧
no-continueeslint
no-duplicate-importseslint🚧
no-extra-labeleslint🛠️
no-implicit-coercioneslint🛠️
no-label-vareslint
no-labelseslint
no-lone-blockseslint
no-magic-numberseslint🚧
no-multi-assigneslint
no-multi-streslint
no-nested-ternaryeslint
no-new-funceslint
no-return-assigneslint🚧
no-script-urleslint
no-template-curly-in-stringeslint
no-ternaryeslint
no-useless-computed-keyeslint🚧
operator-assignmenteslint⚠️🛠️️
prefer-destructuringeslint🚧
prefer-exponentiation-operatoreslint
prefer-numeric-literalseslint🛠️
prefer-object-has-owneslint🛠️
prefer-object-spreadeslint🛠️
prefer-promise-reject-errorseslint
prefer-rest-paramseslint
prefer-spreadeslint
prefer-templateeslint🚧
sort-importseslint🛠️
sort-keyseslint🛠️
vars-on-topeslint
yodaeslint🛠️
consistent-type-specifier-styleimport🛠️
exports-lastimport
firstimport🚧
group-exportsimport
no-anonymous-default-exportimport
no-duplicatesimport
no-mutable-exportsimport
no-named-defaultimport
no-named-exportimport
no-namespaceimport🚧
prefer-default-exportimport
consistent-test-itjest🛠️
max-expectsjest
max-nested-describejest
no-alias-methodsjest🛠️
no-confusing-set-timeoutjest
no-deprecated-functionsjest🛠️
no-done-callbackjest
no-duplicate-hooksjest
no-hooksjest
no-identical-titlejest
no-interpolation-in-snapshotsjest
no-jasmine-globalsjest🛠️
no-large-snapshotsjest
no-mocks-importjest
no-restricted-jest-methodsjest
no-restricted-matchersjest
no-test-prefixesjest🛠️
no-test-return-statementjest
no-untyped-mock-factoryjest🛠️
padding-around-test-blocksjest🛠️
prefer-called-withjest🛠️
prefer-comparison-matcherjest🛠️
prefer-eachjest
prefer-equality-matcherjest
prefer-expect-resolvesjest🛠️
prefer-hooks-in-orderjest
prefer-hooks-on-topjest
prefer-jest-mockedjest🛠️
prefer-lowercase-titlejest🛠️
prefer-mock-promise-shorthandjest🛠️
prefer-spy-onjest🛠️
prefer-strict-equaljest🛠️
prefer-to-bejest🛠️
prefer-to-containjest🛠️
prefer-to-have-been-calledjest🛠️
prefer-to-have-been-called-timesjest🛠️
prefer-to-have-lengthjest🛠️
prefer-todojest🛠️
require-hookjest
require-top-level-describejest
no-exports-assignnode🛠️
avoid-newpromise
no-nestingpromise🚧
no-return-wrappromise🚧
param-namespromise
prefer-await-to-callbackspromise
prefer-await-to-thenpromise
prefer-catchpromise🚧
jsx-boolean-valuereact🛠️
jsx-curly-brace-presencereact🛠️
jsx-fragmentsreact🛠️
jsx-handler-namesreact
jsx-pascal-casereact
jsx-props-no-spreadingreact
no-redundant-should-component-updatereact
no-set-statereact
prefer-es6-classreact
self-closing-compreact🛠️
state-in-constructorreact
adjacent-overload-signaturestypescript
array-typetypescript🛠️
ban-tslint-commenttypescript🛠️
consistent-generic-constructorstypescript🚧
consistent-indexed-object-styletypescript🛠️
consistent-type-definitionstypescript⚠️🛠️️
consistent-type-importstypescript🛠️
no-empty-interfacetypescript
no-inferrable-typestypescript💡
prefer-for-oftypescript🚧
prefer-function-typetypescript🛠️
prefer-namespace-keywordtypescript🛠️
prefer-reduce-type-parametertypescript🚧
prefer-return-this-typetypescript🚧
catch-error-nameunicorn🛠️
consistent-date-cloneunicorn🛠️
consistent-existence-index-checkunicorn🛠️
empty-brace-spacesunicorn🛠️
error-messageunicorn
filename-caseunicorn
no-array-method-this-argumentunicorn🚧
no-await-expression-memberunicorn⚠️🛠️️
no-console-spacesunicorn🛠️
no-nested-ternaryunicorn🛠️
no-nullunicorn🛠️
no-unreadable-array-destructuringunicorn
no-useless-collection-argumentunicorn🚧
no-zero-fractionsunicorn🛠️
number-literal-caseunicorn🛠️
numeric-separators-styleunicorn🛠️
prefer-array-index-ofunicorn🚧
prefer-bigint-literalsunicorn🛠️
prefer-class-fieldsunicorn🛠️💡
prefer-classlist-toggleunicorn🛠️
prefer-default-parametersunicorn🚧
prefer-dom-node-text-contentunicorn🛠️
prefer-global-thisunicorn🚧
prefer-includesunicorn🚧
prefer-keyboard-event-keyunicorn🛠️
prefer-logical-operator-over-ternaryunicorn🚧
prefer-modern-dom-apisunicorn🚧
prefer-negative-indexunicorn🛠️
prefer-object-from-entriesunicorn🚧
prefer-optional-catch-bindingunicorn🛠️
prefer-reflect-applyunicorn
prefer-response-static-jsonunicorn🚧
prefer-spreadunicorn🛠️
prefer-string-rawunicorn🛠️
prefer-string-trim-start-endunicorn🛠️
prefer-structured-cloneunicorn💡
require-array-join-separatorunicorn🛠️
require-module-attributesunicorn💡
switch-case-bracesunicorn🛠️
text-encoding-identifier-caseunicorn🛠️
throw-new-errorunicorn🛠️
no-import-node-testvitest🛠️
prefer-called-timesvitest🛠️
prefer-to-be-falsyvitest🛠️
prefer-to-be-objectvitest🛠️
prefer-to-be-truthyvitest🛠️
define-emits-declarationvue🚧
define-props-declarationvue
define-props-destructuringvue
require-typed-refvue

Nursery (9):

New lints that are still under development.

Rule nameSourceDefaultFixable?
getter-returneslint
no-misleading-character-classeslint
no-undefeslint
no-unreachableeslint
exportimport
namedimport
branches-sharing-codeoxc
no-return-in-finallypromise
require-render-returnreact