All Rules
This is a full table of all rules that will be implemented in the main Flint project. It includes rules from all three provided categories of plugins: Core, Focused, and Incubator. Each rule is equivalent to at least one existing rule in another linter.
Implemented: 142 of 834 (17%)
| Flint Rule | Plugin | Preset |
|---|---|---|
accessKeysDisallow the use of the accessKey / accesskey attribute on JSX elements. | JSX | logical |
accessorThisRecursion | TypeScript | logical (strict) |
afterAllPaddingLines | Vitest | stylistic (strict) |
afterEachPaddingLines | Vitest | stylistic (strict) |
alertsReports uses of the global alert/confirm/prompt dialog APIs. | Browser | logical |
aliasMethods | Vitest | stylistic |
allPaddingLines | Vitest | stylistic (strict) |
altTextsReports elements that require alt text but are missing it. | JSX | logical |
anchorAmbiguousTextReports anchor elements with ambiguous text that doesn't describe the link destination. | JSX | logical (strict) |
anchorContentReports anchor elements without accessible content. | JSX | logical |
anchorNatives | Next.js | logical |
anchorValidityReports invalid usage of anchor elements. | JSX | logical |
anyArguments | TypeScript | logical |
anyAssignments | TypeScript | logical |
anyCalls | TypeScript | logical |
anyMemberAccess | TypeScript | logical |
anyReturnsReports returning a value with type any from a function. | TypeScript | logical |
arguments | TypeScript | logical |
ariaActiveDescendantTabIndexReports elements with aria-activedescendant without tabIndex. | JSX | logical |
ariaHiddenFocusablesReports elements with aria-hidden='true' that are focusable. | JSX | logical (strict) |
ariaPropsReports invalid ARIA properties. | JSX | logical |
ariaPropTypesReports ARIA properties with invalid value types. | JSX | logical |
ariaRoleValidityReports invalid or abstract ARIA roles. | JSX | logical |
ariaUnsupportedElementsReports ARIA attributes on elements that don't support them. | JSX | logical |
arrayCallbackReturns | TypeScript | untyped |
arrayConstructors | TypeScript | logical |
arrayDeleteUnnecessaryCounts | TypeScript | stylistic |
arrayElementDeletions | TypeScript | logical |
arrayEmptyCallbackSlots | TypeScript | logical |
arrayExistenceChecksConsistency | TypeScript | stylistic |
arrayFilteredFinds | TypeScript | stylistic (strict) |
arrayFinds | TypeScript | stylistic |
arrayFlatMapMethods | TypeScript | stylistic (strict) |
arrayFlatMethods | TypeScript | stylistic (strict) |
arrayFlatUnnecessaryDepths | TypeScript | stylistic |
arrayHandlers | SolidJS | (none) |
arrayIncludes | TypeScript | stylistic |
arrayIncludesMethods | TypeScript | stylistic (strict) |
arrayIndexKeyes | React | logical |
arrayIndexOfMethods | TypeScript | stylistic (strict) |
arrayLoops | TypeScript | stylistic |
arrayMapIdentities | TypeScript | logical |
arrayMutableReverses | TypeScript | stylistic |
arrayMutableSorts | TypeScript | stylistic |
arraySliceUnnecessaryEnd | TypeScript | stylistic |
arraySomeMethods | TypeScript | stylistic (strict) |
arrayTernarySpreadingConsistency | TypeScript | stylistic |
arrayTypes | TypeScript | stylistic |
arrayUnnecessaryLengthChecks | TypeScript | logical |
asConstAssertions | TypeScript | stylistic |
assertStrictPrefer strict assertion mode from Node.js for better error messages and behavior. | Node.js | logical |
assertStylesPrefer assert.ok() over assert() for explicit intent and better readability. | Node.js | stylistic |
assignmentOperatorShorthands | TypeScript | stylistic |
asyncFunctionAwaits | TypeScript | logical |
asyncPromiseExecutorsReports using async functions as Promise executor functions. | TypeScript | logical |
asyncUnnecessaryPromiseWrappers | TypeScript | logical |
atAccesses | TypeScript | stylistic (strict) |
attributeNameCasing | Vue | stylistic |
attributeOrders | Vue | stylistic (strict) |
attributesSorting | Astro | stylistic |
attributeValidity | JSX | logical |
authorPresence | PackageJSON | (none) |
authorValidity | PackageJSON | logical |
autocompleteEnsure the autocomplete attribute is correct and suitable for the form field. | JSX | logical |
autoFocusPropsReports autoFocus props that are not set to false. | JSX | logical |
awaitInsidePromiseMethods | TypeScript | logical (strict) |
awaitThenable | TypeScript | logical |
bareUrlsReports bare URLs that should be formatted as autolinks or links. | Markdown | stylistic (strict) |
beforeAllPaddingLines | Vitest | stylistic (strict) |
beforeEachPaddingLines | Vitest | stylistic (strict) |
bindDirectiveValidity | Vue | logical |
bindStyles | Vue | stylistic |
binValidity | PackageJSON | logical |
blobReadingMethodsPrefer direct Blob reading methods over wrapping in Response for simpler code. | Node.js | stylistic |
blockMappings | YAML | stylistic |
blockOrders | Vue | sorting |
blockquoteBlankLineMultiples | Markdown | stylistic (strict) |
blockSequences | YAML | stylistic |
booleanPropNames | JSX | stylistic (strict) |
booleanValuesPrefer shorthand boolean attributes over explicit {true} values in JSX. | JSX | stylistic |
bracedStatementsDisallow unnecessary JSX curly braces around literals and JSX elements. | JSX | stylistic |
bufferAllocatorsPrefer modern Buffer allocation methods over the deprecated Buffer constructor. | Node.js | logical |
bugsPresence | PackageJSON | (none) |
builtinCoercions | TypeScript | stylistic (strict) |
builtinConstructorNews | TypeScript | stylistic |
bundleDependenciesPresence | PackageJSON | (none) |
bundleDependenciesValidity | PackageJSON | logical |
buttonTypesReports button elements without an explicit type attribute. | JSX | logical |
calledOnceWithAssertions | Vitest | stylistic (strict) |
calledTimesAssertions | Vitest | stylistic (strict) |
calledWithAssertions | Vitest | stylistic (strict) |
caseDeclarationsReports lexical declarations in case clauses without wrapping them in blocks. | TypeScript | untyped |
caseDuplicatesReports switch statements with duplicate case clause test expressions. | TypeScript | logical |
caseFallthroughs | TypeScript | logical |
catchCallbackTypes | TypeScript | logical |
caughtErrorCauses | TypeScript | logical (strict) |
caughtVariableNames | TypeScript | stylistic (strict) |
chainedAssignmentsReports using chained assignment expressions (e.g., a = b = c). | TypeScript | stylistic |
charAtComparisons | TypeScript | logical |
childContentOverrides | Vue | logical |
childrenPropsReports usage of the children prop. | JSX | stylistic |
childrenWhitespace | JSX | logical (strict) |
classAssignmentsReports reassigning class declarations. | TypeScript | untyped |
classComponentStateDefinitions | React | stylistic (strict) |
classComponentStateInitialization | React | stylistic (strict) |
classes | Sorting | stylistic |
classFieldDeclarations | TypeScript | untyped |
classListDirectiveObjects | Astro | stylistic |
classListDirectives | Astro | stylistic |
classListDirectiveSplits | Astro | stylistic |
classListTogglesPrefer using classList.toggle() over conditional classList.add() and classList.remove(). | Browser | stylistic |
classLiteralProperties | TypeScript | stylistic |
classMemberDuplicates | TypeScript | untyped |
classMethodsThis | TypeScript | stylistic (strict) |
clickEventKeyEventsReports onClick without keyboard event handlers. | JSX | logical |
clientComponentAsyncDefinitions | Next.js | logical |
clientOnlyDirectiveValues | Astro | logical |
cloakDirectiveValidity | Vue | logical |
codeSpaces | Markdown | stylistic |
combinedPushes | TypeScript | stylistic (strict) |
commentedOutTests | Vitest | logical (strict) |
commentTextNodesReports JSX text nodes that contain comment syntax but are rendered as text. | JSX | logical |
comparisonMatcherAssertions | Vitest | stylistic |
compilerOptions | React | config |
componentConditionalReturns | SolidJS | logical |
componentDataSharing | Vue | logical |
componentDefinitions | React | stylistic |
componentDidMountSetStates | React | logical (strict) |
componentDidUpdateSetStates | React | logical (strict) |
componentDisplayNames | React | logical (strict) |
componentFileExports | Astro | logical |
componentHookFactories | React | logical |
componentHtmlTextProps | Vue | logical |
componentNameCasing | Vue | stylistic |
componentNames | Vue | stylistic |
componentNameValidity | Vue | logical |
componentNesting | React | logical |
componentPropertyOrder | Vue | sorting |
componentPropMutations | Vue | logical |
componentVIsBinds | Vue | logical |
componentWillUpdateSetStates | React | logical (strict) |
computedAsyncProperties | Vue | logical |
computedPropertyLikeMethods | Vue | logical |
computedPropertyReturns | Vue | logical |
computedPropertySideEffects | Vue | logical |
conditionalExpects | Vitest | stylistic (strict) |
configValidity | PackageJSON | logical |
consecutiveNonNullAssertionsReports unnecessary extra non-null assertions. | TypeScript | stylistic |
consoleCalls | TypeScript | (none) |
consoleSpaces | Node.js | stylistic (strict) |
constantAssignmentsReports attempting to reassign variables declared with const. | TypeScript | untyped |
constructorReturnsReports returning values from constructor functions. | TypeScript | untyped |
constructorSupers | TypeScript | untyped |
constVariables | TypeScript | logical |
contextValueReferences | React | logical (strict) |
cpuValidity | PackageJSON | logical |
cspellRuns the CSpell spell checker on any source code file. | Spelling | logical |
cssManualStylesheets | Next.js | logical |
customFontsInPages | Next.js | logical |
dangerouslySetInnerHTMLWithChildren | React | logical |
dangerousProps | React | logical (strict) |
dataComputedProperties | Vue | logical |
dateConstructorClones | TypeScript | logical |
dateNowTimestamps | TypeScript | logical (strict) |
debuggerStatementsReports using debugger statements. | TypeScript | logical |
decorators | Sorting | stylistic |
defaultCaseLastReports switch statements where the default clause is not last. | TypeScript | logical |
defaultParameterLast | TypeScript | untyped |
defaultPropsMatchingPropTypes | React | logical |
defaultPropTypes | Vue | logical |
defineEmitsValidity | Vue | logical |
defineOptionsValidity | Vue | logical |
definePropsValidity | Vue | logical |
definitionContentsReports definitions with empty URLs or only empty fragments. | Markdown | logical |
definitionDuplicatesReports duplicate definition identifiers (case-insensitive). | Markdown | logical |
definitionUsesReports unused reference definitions. | Markdown | logical |
deletesReports using the delete operator. | Performance | logical |
dependenciesPresence | PackageJSON | (none) |
dependenciesValidity | PackageJSON | logical |
dependencyRanges | PackageJSON | (none) |
dependencyUniqueness | PackageJSON | logical |
deprecated | TypeScript | logical |
deprecatedDataObjectDeclarations | Vue | logical |
deprecatedDestroyedLifecycleHooks | Vue | logical |
deprecatedFilters | Vue | logical |
deprecatedFunctionalTemplates | Vue | logical |
deprecatedThisDefaultProps | Vue | logical |
describeCallbackValidity | Vitest | logical |
describePaddingLines | Vitest | stylistic (strict) |
describeTitleReferences | Vitest | stylistic |
descriptionPresence | PackageJSON | logical |
descriptionValidity | PackageJSON | logical |
destructuring | React | stylistic |
destructuringConsistency | TypeScript | stylistic (strict) |
devDependenciesPresence | PackageJSON | (none) |
devDependenciesValidity | PackageJSON | logical |
directivePairs | TypeScript | logical (strict) |
directiveRequireDescriptions | TypeScript | stylistic (strict) |
directoriesValidity | PackageJSON | logical |
distractingElementsReports distracting elements like <marquee> and <blink>. | JSX | logical |
documentCookiesReports uses of document.cookie which can be error-prone and has security implications. | Browser | logical (strict) |
duplicateArgumentsReports functions with duplicate parameter names in their signatures. | TypeScript | untyped |
duplicateAttributes | Vue | logical |
duplicateVElseIfConditions | Vue | logical |
dynamicDeletes | TypeScript | logical |
eachLoops | Vitest | stylistic |
effectSetStates | React | logical |
elementChildrenValidityReports void DOM elements that have children, which is invalid HTML. | JSX | logical (strict) |
elseDirectiveValidity | Vue | logical |
elseIfDirectiveValidity | Vue | logical |
elseIfDuplicatesReports duplicate conditions in if-else-if chains that make code unreachable. | TypeScript | logical |
elseReturns | TypeScript | stylistic (strict) |
emitsValidatorReturns | Vue | logical |
emptyBlocksReports empty block statements that should contain code. | TypeScript | stylistic |
emptyDestructuresReports using empty destructuring patterns that destructure no values. | TypeScript | logical |
emptyDocuments | YAML | logical |
emptyEnums | TypeScript | logical |
emptyExports | TypeScript | logical |
emptyFields | PackageJSON | logical |
emptyFiles | TypeScript | stylistic (strict) |
emptyFunctions | TypeScript | stylistic (strict) |
emptyMappingKeysReports empty mapping keys. | YAML | logical |
emptyMappingValues | YAML | logical |
emptyModuleAttributes | TypeScript | stylistic |
emptyObjectTypes | TypeScript | logical |
emptySequenceEntries | YAML | logical |
emptyStaticBlocksReports empty static initialization blocks within class declarations. | TypeScript | stylistic |
emptyTypeParameterLists | TypeScript | stylistic |
endTagPresence | Vue | logical |
enginesPresence | PackageJSON | (none) |
enumMemberLiterals | TypeScript | logical |
enumMixedValues | TypeScript | logical |
enumValueConsistency | TypeScript | logical |
enumValueDuplicates | TypeScript | logical |
equalityMatchers | Vitest | stylistic |
equalityOperators | TypeScript | logical |
errorBoundaries | React | logical |
errorMessages | TypeScript | logical (strict) |
errorSubclassProperties | TypeScript | logical (strict) |
errorUnnecessaryCaptureStackTraces | TypeScript | logical |
escapeSequenceCasing | TypeScript | stylistic (strict) |
evals | TypeScript | logical |
eventClassesPrefer EventTarget over EventEmitter for cross-platform compatibility. | Node.js | logical (strict) |
eventHandlerCasing | SolidJS | logical |
eventListenerSubscriptionsPrefer addEventListener over assigning to on* event handler properties. | Browser | logical (strict) |
eventTriggerExplicitEmits | Vue | logical |
exceptionAssignmentsReports reassigning exception parameters in catch clauses. | TypeScript | logical |
exhaustiveDeps | React | logical |
expectGroupPaddingLines | Vitest | stylistic (strict) |
expectResolves | Vitest | stylistic |
expectsOutsideTests | Vitest | logical (strict) |
expectTypeOfs | Vitest | stylistic |
expectValidity | Vitest | logical |
explicitAnys | TypeScript | logical |
exponentiationOperators | TypeScript | stylistic |
exportFromImports | TypeScript | stylistic |
exportMutables | TypeScript | logical |
exports | Sorting | stylistic |
exportsAssignmentsPrevent assignment to the exports variable in CommonJS modules. | Node.js | logical |
exportsValidity | PackageJSON | logical |
exposeAfterAwaits | Vue | logical |
extraneousClasses | TypeScript | logical (strict) |
fencedCodeLanguagesReports fenced code blocks without a language specified. | Markdown | stylistic (strict) |
fetchMethodBodies | TypeScript | logical |
fileExtensions | YAML | stylistic (strict) |
filenames | Vitest | (none) |
filePathsFromImportMeta | Node.js | stylistic (strict) |
fileReadJSONBuffers | Node.js | stylistic (strict) |
filesPresence | PackageJSON | (none) |
filesRedundancy | PackageJSON | logical |
filesValidity | PackageJSON | logical |
floatingPromises | TypeScript | logical |
forBindKeys | Vue | logical |
forDirectionsReports for loops with counter variables that move in the wrong direction. | TypeScript | stylistic |
forDirectiveValidity | Vue | logical |
forInArraysReports iterating over an array with a for-in loop. | TypeScript | logical |
forMaps | SolidJS | logical |
fragmentElements | JSX | stylistic |
functionAssignmentsReports reassigning variables declared with function declarations. | TypeScript | untyped |
functionCallSpreads | TypeScript | stylistic |
functionComponentDefinitions | React | stylistic |
functionComponentThisReferences | React | untyped |
functionDefinitionScopeConsistency | TypeScript | stylistic (strict) |
functionNewCallsReports using the Function constructor to create functions from strings. | TypeScript | logical |
functionTypeDeclarations | TypeScript | stylistic |
gating | React | config |
generatorFunctionYieldsReports generator functions that do not yield values. | TypeScript | logical |
genericConstructorCalls | TypeScript | stylistic |
getterReturns | TypeScript | untyped |
getterSetterPairedTypes | TypeScript | logical |
globalAssignmentsReports attempting to assign to read-only global variables such as undefined, NaN, Infinity, Object, etc. | TypeScript | untyped |
globalMutations | React | logical |
globalObjectCallsReports calling global objects like Math, JSON, or Reflect as functions. | TypeScript | untyped |
globalThisAliases | TypeScript | stylistic (strict) |
googleAnalyticsInlineScript | Next.js | logical |
googleFontDisplay | Next.js | logical |
googleFontPreconnect | Next.js | logical |
groupedAccessorPairs | TypeScript | stylistic |
hashbangs | Node.js | logical |
headDuplicates | Next.js | logical |
headImportsInDocuments | Next.js | logical |
headingContentsReports heading elements without accessible content. | JSX | logical |
headingDuplicates | Markdown | stylistic (strict) |
headingEmphasisEquivalents | Markdown | stylistic (strict) |
headingIncrementsReports heading levels incrementing by more than one. | Markdown | logical |
headingRootDuplicatesReports multiple H1 headings in the same document. | Markdown | logical (strict) |
headingRootPresence | Markdown | logical (strict) |
headingTrailingPunctuation | Markdown | stylistic (strict) |
headNatives | Next.js | logical |
heritageClauses | Sorting | stylistic |
hoistedApiPositions | Vitest | logical (strict) |
homepageValidity | PackageJSON | logical |
hookDuplicates | Vitest | logical (strict) |
hookOrders | Vitest | stylistic (strict) |
hooksBeforeTestCases | Vitest | stylistic (strict) |
htmlDirectiveValidity | Vue | logical |
htmlLangsReports <html> elements without a lang prop. | JSX | logical |
ifDirectiveValidity | Vue | logical |
iframeSandboxes | JSX | logical (strict) |
iframeTitlesReports <iframe> elements without a title prop. | JSX | logical |
imageAltTextsReports images without alternative text. | Markdown | logical |
imageContentsReports images with empty URLs or only empty fragments. | Markdown | logical |
imgNatives | Next.js | logical |
immutability | React | logical |
implicitGlobalsPrevents implicit global variable declarations in browser scripts. | Browser | logical |
impliedEvals | TypeScript | logical |
importAssignments | TypeScript | untyped |
importCycles | TypeScript | stylistic |
importedNamespaceDynamicAccessesDisallow computed member access on imported namespace identifiers. | Performance | logical |
importEmptyBlocks | TypeScript | logical |
importExtraneousDependencies | TypeScript | logical (strict) |
importFileExtensions | Node.js | (none) |
importMetaProperties | Nuxt | stylistic |
importSelf | TypeScript | stylistic |
importsInMocks | Vitest | (none) |
importTypeSideEffects | TypeScript | (none) |
importUnnecessaryPathSegments | TypeScript | stylistic |
incompatibleLibraries | React | logical |
indexedObjectTypes | TypeScript | stylistic |
inlineScriptId | Next.js | logical |
innerHTMLProps | SolidJS | logical (strict) |
inputCheckedMutability | JSX | logical |
instanceOfArrays | TypeScript | logical |
interactiveElementRolesReports interactive elements with non-interactive ARIA roles. | JSX | logical |
interactiveElementsFocusableReports interactive elements that are not focusable via keyboard. | JSX | logical |
interfaces | Sorting | stylistic |
intersectionTypes | Sorting | stylistic |
invalidCodeLinesReports cases for invalid code that isn't formatted across lines. | Flint | logical |
invalidThis | TypeScript | untyped |
invalidVoidTypes | TypeScript | logical (strict) |
irregularWhitespace | YAML | stylistic |
isDirectiveValidity | Vue | logical |
isNaNComparisons | TypeScript | logical |
iterableKeys | React | logical (strict) |
jsdocAccessTags | TypeScript | stylistic |
jsdocAsterisks | TypeScript | stylistic (strict) |
jsdocEmptyBlocks | TypeScript | stylistic |
jsdocEmptyTags | TypeScript | stylistic |
jsdocImplementsTags | TypeScript | stylistic |
jsdocInformativeDocs | TypeScript | stylistic (strict) |
jsdocMisleadingBlocks | TypeScript | stylistic (strict) |
jsdocMultilineBlocks | TypeScript | stylistic (strict) |
jsdocParameterDescriptionHyphens | TypeScript | stylistic (strict) |
jsdocParameterNames | TypeScript | stylistic |
jsdocPropertyNames | TypeScript | stylistic |
jsdocRedundantTypes | TypeScript | stylistic |
jsdocTagNames | TypeScript | stylistic (strict) |
jsdocTags | Sorting | stylistic |
jsdocTemplateNames | TypeScript | stylistic |
jsdocTypesSyntax | TypeScript | stylistic |
jsdocUnnecessaryReturns | TypeScript | stylistic |
jsdocUnnecessaryYields | TypeScript | stylistic |
jsdocValidTypes | TypeScript | stylistic |
jsdocValues | TypeScript | stylistic |
jsdocYields | TypeScript | stylistic |
jsonKeys | Sorting | stylistic |
jsxProps | Sorting | stylistic |
keyboardEventKeysPrefer KeyboardEvent.key over deprecated properties like keyCode, charCode, and which. | Browser | logical |
keyDuplicatesReports unnecessary duplicate keys that override previous values. | JSON | logical |
keyDuplicates | Vue | logical |
keyNormalizationReports object keys that are not normalized using Unicode normalization forms. | JSON | logical |
keyValidity | Vue | logical |
keywordsPresence | PackageJSON | (none) |
keywordsValidity | PackageJSON | logical |
labelAssociatedControlsReports <label> elements without an associated control element. | JSX | logical |
labelReferencesReports missing label references. | Markdown | logical |
labelReferenceValidityReports invalid label references with whitespace. | Markdown | logical |
langValidityReports invalid lang attribute values. | JSX | logical (strict) |
licenseRequired | PackageJSON | logical |
licenseValidity | PackageJSON | logical |
lifecyclesAfterAwaits | Vue | logical |
linkContentsReports links with empty URLs or only empty fragments. | Markdown | logical |
linkDescriptions | Markdown | logical (strict) |
linkFragments | Markdown | logical |
literalConstructorWrappers | TypeScript | stylistic |
loneTemplates | Vue | logical (strict) |
loopAwaitsReports using await expressions inside loops. | Performance | logical |
loopFunctionsReports function declarations and expressions inside loops that reference variables modified by the loop. | Performance | logical |
mainValidity | PackageJSON | logical |
manualMemoizationPreservations | React | logical |
manValidity | PackageJSON | logical |
maps | Sorting | stylistic |
mathMethods | TypeScript | stylistic (strict) |
meaninglessVoidOperators | TypeScript | logical |
mediaCaptionsReports media elements without captions. | JSX | logical |
mediaSyntaxReversalsReports reversed link and image syntax in Markdown. | Markdown | stylistic |
memoDirectiveValidity | Vue | logical |
messagePhrases | Flint | logical (strict) |
misleadingVoidExpressions | TypeScript | logical |
missingPlaceholders | Flint | logical |
misusedPromises | TypeScript | logical |
mockedFunctionInstances | Vitest | stylistic (strict) |
mockTypeParameters | Vitest | stylistic (strict) |
modelDirectiveValidity | Vue | logical |
moduleAssignments | Next.js | untyped |
modules | Sorting | stylistic |
moduleSpecifierLists | TypeScript | logical |
mouseEventKeyEventsReports mouse events without corresponding keyboard events. | JSX | logical |
multilineAmbiguities | TypeScript | stylistic |
namedDefaultExports | TypeScript | stylistic (strict) |
namePresence | PackageJSON | logical |
namespaceDeclarationsReports using legacy namespace declarations. | TypeScript | logical |
namespaceImplicitAmbientImports | TypeScript | stylistic (strict) |
namespaceKeywords | TypeScript | stylistic |
namespaceValidity | SolidJS | untyped |
nameValidity | PackageJSON | logical |
nativeObjectExtensions | TypeScript | untyped |
negativeIndexLengthMethods | TypeScript | stylistic (strict) |
negativeZeroComparisonsReports comparisons with -0 that may not behave as expected. | TypeScript | logical |
nestedStandaloneIfs | TypeScript | stylistic |
newDefinitions | TypeScript | logical |
newExpressionsReports standalone new expressions that don't use the constructed object. | TypeScript | logical |
newNativeNonConstructorsDisallows using new with global non-constructor functions like Symbol and BigInt. | TypeScript | untyped |
nextDocumentOutsidePage | Next.js | logical |
nextScriptInHeads | Next.js | logical |
nextScriptInteractiveOutsideDocument | Next.js | logical |
nextTickValidity | Vue | logical |
nodeAppendMethodsPrefer modern DOM append/prepend methods over appendChild/insertBefore. | Browser | logical (strict) |
nodeDatasetAttributesPrefer using element.dataset over getAttribute/setAttribute for data-* attributes. | Browser | logical (strict) |
nodeModificationMethodsPrefer modern DOM APIs like .replaceWith() and .before() over legacy methods like .replaceChild() and .insertBefore(). | Browser | logical (strict) |
nodePropertyInChecks | Flint | logical |
nodeProtocols | Node.js | logical |
nodeQueryMethodsPrefer modern querySelector and querySelectorAll over legacy DOM query methods. | Browser | stylistic (strict) |
nodeRemoveMethodsPrefer the modern node.remove() method over the legacy parentNode.removeChild(node) API. | Browser | logical (strict) |
nodeTestImports | Vitest | logical |
nodeTextContentsPrefer textContent over innerText for DOM nodes. | Browser | logical (strict) |
nonInteractiveElementInteractionsReports non-interactive elements with interactive event handlers. | JSX | logical |
nonInteractiveElementRolesReports non-interactive elements with interactive ARIA roles. | JSX | logical |
nonInteractiveElementTabIndexesReports non-interactive elements with positive or zero tabIndex values. | JSX | logical |
nonNullableTypeAssertions | TypeScript | stylistic |
nonNullAssertedNullishCoalesces | TypeScript | logical (strict) |
nonNullAssertedOptionalChains | TypeScript | logical |
nonNullAssertionPlacement | TypeScript | stylistic (strict) |
nonNullAssertions | TypeScript | logical (strict) |
nonOctalDecimalEscapesReports non-octal decimal escape sequences (\8 and \9) in string literals. | TypeScript | logical |
nullishCoalescingOperators | TypeScript | stylistic |
numberMethodRanges | TypeScript | logical |
numberStaticMethods | TypeScript | stylistic (strict) |
numericErasingOperations | TypeScript | logical |
numericLiteralCasing | TypeScript | stylistic (strict) |
numericLiteralParsingReports parseInt calls with binary, hexadecimal, or octal strings that can be replaced with numeric literals. | TypeScript | stylistic |
numericPrecision | TypeScript | logical |
numericSeparatorGroups | TypeScript | stylistic (strict) |
numericTrailingZeros | YAML | stylistic (strict) |
objectAssignSpreads | TypeScript | stylistic |
objectCalls | TypeScript | logical |
objectEntriesMethods | TypeScript | stylistic (strict) |
objectHasOwns | TypeScript | stylistic |
objectKeyDuplicates | TypeScript | logical |
objectProtoReports using the deprecated proto property to access or modify an object's prototype. | TypeScript | untyped |
objectPrototypeBuiltIns | TypeScript | logical |
objects | Sorting | stylistic |
objectShorthand | TypeScript | stylistic |
objectSpreadUnnecessaryFallbacks | TypeScript | logical |
objectTypeDefinitions | TypeScript | stylistic |
objectTypes | Sorting | stylistic |
octalEscapesReports using octal escape sequences in string literals. | TypeScript | untyped |
octalNumbersReports using legacy octal numeric literals. | TypeScript | untyped |
olPrefixes | Markdown | stylistic (strict) |
onceDirectiveValidity | Vue | logical |
onDirectiveValidity | Vue | logical |
onEventHyphens | Vue | stylistic |
onEventStyles | Vue | stylistic |
onExactModifiers | Vue | logical |
operatorAssignmentShorthand | TypeScript | stylistic |
optionalChainOperators | TypeScript | stylistic |
optionalDependenciesPresence | PackageJSON | (none) |
optionalDependenciesValidity | PackageJSON | logical |
optionalPropDefaults | Vue | logical |
osValidity | PackageJSON | logical |
overloadSignaturesAdjacent | TypeScript | stylistic |
packageCollections | Sorting | stylistic |
parameterPropertyAssignment | TypeScript | logical |
parameterReassignments | TypeScript | stylistic (strict) |
parseIntRadixes | TypeScript | logical |
peerDependenciesPresence | PackageJSON | (none) |
peerDependenciesValidity | PackageJSON | logical |
plainScalars | YAML | stylistic (strict) |
plusOperands | TypeScript | logical |
polyfillDuplicates | Next.js | logical |
preDirectiveValidity | Vue | logical |
privateValidity | PackageJSON | logical |
processExists | Node.js | logical |
promiseExecutorReturns | TypeScript | logical |
promiseFinallyReturns | TypeScript | logical |
promiseFunctionAsync | TypeScript | stylistic |
promiseMethodSingleArrayArguments | TypeScript | logical |
promiseRejectErrors | TypeScript | logical |
promiseSettleAssertions | Vitest | stylistic |
propDestructures | SolidJS | logical |
propDuplicatesDisallow duplicate props in JSX elements. | JSX | logical |
propertyAccessNotation | TypeScript | stylistic |
propertyOrdering | PackageJSON | logical |
propertyValidity | React | untyped |
propNameCasing | Vue | stylistic |
propNameValidity | Vue | logical |
propRequiredAndDefaults | Vue | logical (strict) |
propTypeConstructors | Vue | logical |
propTypes | React | untyped |
propTypes | Vue | logical |
publishConfigValidity | PackageJSON | logical |
pureComponentShouldUpdateDefinitions | JSX | logical (strict) |
purity | React | logical |
reactivity | SolidJS | logical |
reactLikeDeps | SolidJS | untyped |
reactLikeProps | SolidJS | untyped |
recursionOnlyArguments | TypeScript | logical |
reduceTypeParameters | TypeScript | logical (strict) |
redundantTypeConstituents | TypeScript | logical |
referenceLikeUrls | Markdown | logical |
refOperands | Vue | logical |
refs | React | logical |
refStrings | React | logical |
regexAllGlobalFlags | TypeScript | logical |
regexAmbiguousInvalidity | TypeScript | logical |
regexCharacterClasses | TypeScript | stylistic (strict) |
regexCharacterClassRanges | TypeScript | stylistic |
regexCharacterClassSetOperations | TypeScript | stylistic |
regexConciseCharacterClassNegations | TypeScript | stylistic |
regexContradictoryAssertions | TypeScript | logical |
regexControlCharacterEscapes | TypeScript | logical |
regexControlCharacters | TypeScript | logical |
regexDigitMatchers | TypeScript | stylistic (strict) |
regexDollarEscapes | TypeScript | stylistic |
regexDuplicateCharacterClassCharacters | TypeScript | logical |
regexDuplicateDisjunctions | TypeScript | logical |
regexEmptyAlternatives | TypeScript | logical |
regexEmptyCapturingGroups | TypeScript | logical |
regexEmptyCharacterClasses | TypeScript | logical |
regexEmptyGroups | TypeScript | logical |
regexEmptyLazyQuantifiers | TypeScript | logical |
regexEmptyLookaroundsAssertions | TypeScript | logical |
regexEmptyStringLiterals | TypeScript | logical |
regexEscapeBackspaces | TypeScript | logical |
regexExecutors | TypeScript | stylistic (strict) |
regexFlags | Sorting | stylistic |
regexGraphemeStringLiterals | TypeScript | logical (strict) |
regexHexadecimalEscapes | TypeScript | stylistic (strict) |
regexIgnoreCaseFlags | TypeScript | logical |
regexInvisibleCharacters | TypeScript | logical |
regexLegacyFeatures | TypeScript | logical |
regexLetterCasing | TypeScript | stylistic (strict) |
regexLists | Sorting | stylistic |
regexLiterals | TypeScript | logical |
regexLookaroundAssertions | TypeScript | stylistic (strict) |
regexLookaroundQuantifierOptimizations | TypeScript | logical |
regexMatchNotation | TypeScript | stylistic (strict) |
regexMisleadingCapturingGroups | TypeScript | logical |
regexMisleadingQuantifiers | TypeScript | logical |
regexMisleadingUnicodeCharacters | TypeScript | logical |
regexNamedBackreferences | TypeScript | stylistic (strict) |
regexNamedCaptureGroups | TypeScript | logical |
regexNamedReplacements | TypeScript | stylistic (strict) |
regexNonStandardFlags | TypeScript | logical |
regexObscureRanges | TypeScript | logical |
regexOctalEscapes | TypeScript | logical |
regexPlusQuantifiers | TypeScript | stylistic (strict) |
regexPredefinedAssertions | TypeScript | stylistic |
regexQuantifierOptimizations | TypeScript | logical |
regexQuestionQuantifiers | TypeScript | stylistic (strict) |
regexRepeatQuantifiers | TypeScript | stylistic |
regexResultArrayGroups | TypeScript | stylistic (strict) |
regexSetOperationOptimizations | TypeScript | logical |
regexStandaloneBackslashes | TypeScript | logical |
regexStarQuantifiers | TypeScript | stylistic (strict) |
regexSuperLinearBacktracking | TypeScript | logical |
regexSuperLinearMoves | TypeScript | logical |
regexTestMethods | TypeScript | stylistic |
regexUnicodeCodepointEscapes | TypeScript | stylistic (strict) |
regexUnicodeEscapes | TypeScript | stylistic |
regexUnicodeFlag | TypeScript | (none) |
regexUnicodeProperties | TypeScript | stylistic |
regexUnnecessaryAssertions | TypeScript | logical |
regexUnnecessaryBackreferences | TypeScript | logical |
regexUnnecessaryCharacterClasses | TypeScript | logical |
regexUnnecessaryCharacterRanges | TypeScript | logical |
regexUnnecessaryDisjunctions | TypeScript | logical |
regexUnnecessaryDollarReplacements | TypeScript | logical |
regexUnnecessaryEscapes | TypeScript | stylistic |
regexUnnecessaryLookaroundAssertions | TypeScript | logical |
regexUnnecessaryNestedAssertions | TypeScript | logical |
regexUnnecessaryNestedQuantifiers | TypeScript | logical |
regexUnnecessaryNonCapturingGroups | TypeScript | stylistic (strict) |
regexUnnecessaryNumericQuantifiers | TypeScript | logical |
regexUnnecessaryOptionalAssertions | TypeScript | logical |
regexUnnecessaryReferentialBackreferences | TypeScript | logical |
regexUnnecessarySetOperands | TypeScript | logical |
regexUnusedCapturingGroups | TypeScript | logical |
regexUnusedFlags | TypeScript | logical |
regexUnusedLazyQuantifiers | TypeScript | logical |
regexUnusedQuantifiers | TypeScript | logical |
regexValidity | TypeScript | logical |
regexWordMatchers | TypeScript | stylistic (strict) |
regexZeroQuantifiers | TypeScript | logical |
removeEventListenerExpressionsDisallow inline function expressions in removeEventListener calls. | Browser | logical |
renderedLiteralLeaks | JSX | logical (strict) |
renderReturns | Vue | logical |
renderSetStates | React | logical |
repositoryDirectoryValidity | PackageJSON | logical |
repositoryShorthand | PackageJSON | logical |
repositoryValidity | PackageJSON | logical |
requireImports | TypeScript | logical |
responseMethods | TypeScript | stylistic |
restrictedComponentProps | React | (none) |
restrictedDomProps | React | (none) |
restrictedElements | React | (none) |
restrictedGlobals | TypeScript | (none) |
restrictedIdentifiers | TypeScript | (none) |
restrictedImports | TypeScript | (none) |
restrictedMatchers | Vitest | (none) |
restrictedProperties | TypeScript | (none) |
restrictedPropTypes | React | (none) |
restrictedSyntax | TypeScript | (none) |
restrictedTypes | TypeScript | (none) |
restrictedViMethods | Vitest | (none) |
returnAssignmentsReports using assignment expressions in return statements. | TypeScript | stylistic |
returnAwaitPromises | TypeScript | logical |
returnThisTypes | TypeScript | logical (strict) |
roleRedundanciesReports redundant ARIA roles on elements with implicit roles. | JSX | logical |
roleRequiredAriaPropsReports ARIA roles missing their required ARIA properties. | JSX | logical |
roleSupportedAriaPropsReports ARIA properties that are not supported by an element's role. | JSX | logical |
roleTagsReports ARIA roles that have semantic HTML element equivalents. | JSX | logical (strict) |
ruleDescriptions | Flint | logical |
rulePresets | Flint | logical |
rulesOfHooks | React | logical |
ruleURLs | Flint | logical |
scopePropsReports scope props on non-th elements. | JSX | logical |
scriptSetupExports | Vue | logical |
scriptsValidity | PackageJSON | logical |
scriptSyncs | Next.js | logical |
scriptUrlsReports javascript: URLs that can act as a form of eval. | Browser | logical |
scriptUrls | JSX | logical |
selfAssignmentsReports self-assignments which have no effect and are likely errors. | TypeScript | logical |
selfClosingTags | JSX | stylistic |
selfComparisonsReports comparing a value to itself. | TypeScript | logical (strict) |
sequencesReports using the comma operator in expressions. | TypeScript | untyped |
setDirectiveChildContentConflicts | Astro | logical |
setHasExistenceChecks | TypeScript | stylistic (strict) |
setHtmlDirectives | Astro | security |
sets | Sorting | stylistic |
setSizeLengthChecks | TypeScript | stylistic (strict) |
setterReturns | TypeScript | untyped |
setTextDirectives | Astro | logical |
shadowedRestrictedNamesReports variable declarations that shadow JavaScript's restricted names. | TypeScript | untyped |
shadows | TypeScript | stylistic |
showDirectiveValidity | Vue | logical |
showWhens | SolidJS | stylistic |
singleVariableDeclarations | TypeScript | logical |
sizeComparisonOperators | TypeScript | stylistic (strict) |
slotArguments | Vue | logical (strict) |
slotDirectiveValidity | Vue | logical |
slotsAsFunctions | Vue | logical |
slotStyles | Vue | stylistic |
snapshotLocalTextContexts | Vitest | logical |
solidImports | SolidJS | logical |
sparseArraysReports array literals with holes (sparse arrays). | TypeScript | logical |
spreadAccumulatorsReports spread operations that accumulate values in loops, causing quadratic time complexity. | Performance | logical |
stateMutations | React | logical |
staticComponents | React | logical |
staticElementInteractionsReports static elements with event handlers that lack ARIA roles. | JSX | logical |
staticMemberOnlyClasses | TypeScript | stylistic (strict) |
stringCaseMismatches | TypeScript | logical |
stringCodePoints | TypeScript | logical (strict) |
stringMappingKeys | YAML | logical (strict) |
stringSliceMethods | TypeScript | stylistic (strict) |
stringStartsEndsWith | TypeScript | stylistic |
stringTrimMethods | TypeScript | stylistic (strict) |
structuredCloneMethods | TypeScript | stylistic (strict) |
styledJsxInDocuments | Next.js | logical |
stylePropObjects | React | logical (strict) |
stylePropValidity | SolidJS | untyped |
svgTitlesReports <svg> elements without a <title> child element. | JSX | logical |
switchCases | Sorting | stylistic |
symbolDescriptionsReports Symbol() calls without description arguments. | TypeScript | stylistic |
tabIndexPositiveValuesReports positive tabIndex values. | JSX | logical |
tableColumnCounts | Markdown | logical |
templateExpressionValues | TypeScript | logical |
templateKeys | Vue | logical |
templateRootValidity | Vue | logical |
templateShadows | Vue | logical (strict) |
templateVForOnChildren | Vue | logical |
testBodyExpectations | Vitest | logical |
testCaseAssertions | Vitest | stylistic |
testCaseDuplicatesReports test cases that are identical to previous test cases. | Flint | logical |
testCaseOnlies | Flint | logical |
testCasePaddingLines | Vitest | stylistic (strict) |
testCasesWithinDescribes | Vitest | stylistic (strict) |
testConditionals | Vitest | logical (strict) |
testDefinitionFunctions | Vitest | (none) |
testPrefixes | Vitest | stylistic |
testShorthands | Flint | stylistic |
textareaMustacheChildren | Vue | logical |
textDirectiveValidity | Vue | logical |
thisBeforeSuper | TypeScript | untyped |
thisInTemplates | Vue | logical (strict) |
throwErrors | TypeScript | logical |
titleInDocumentHeads | Next.js | logical |
titleRepeats | Vitest | logical |
titleValidity | Vitest | logical |
toContainMatchers | Vitest | stylistic |
toHaveLengthMatchers | Vitest | stylistic |
topLevelAwaits | TypeScript | stylistic (strict) |
transitionToggles | Vue | logical |
tripleSlashReferences | TypeScript | logical |
tripleSlashReferenceValidity | TypeScript | logical |
tsComments | TypeScript | logical |
tslintComments | TypeScript | stylistic |
typeAssertions | TypeScript | stylistic |
typeConstituentDuplicates | TypeScript | logical |
typeExports | TypeScript | stylistic |
typeImports | TypeScript | stylistic |
typeofComparisonsReports typeof expressions that compare impossible string literals. | TypeScript | untyped |
typePresence | PackageJSON | logical |
typeRequired | PackageJSON | logical |
typesPresence | PackageJSON | (none) |
typeValidity | PackageJSON | logical |
typos | Next.js | logical |
typos | React | logical |
unassignedVariablesReports variables that are declared but never assigned a value. | TypeScript | untyped |
unboundMethods | TypeScript | logical |
undefinedInitialValues | TypeScript | stylistic |
undefinedTypeofChecks | TypeScript | stylistic (strict) |
undefinedVariablesReports using variables that are not defined. | TypeScript | untyped |
unescapedEntitiesDisallow unescaped HTML entities in JSX text that may cause rendering issues. | JSX | stylistic |
unicodeBOMsReports files with Unicode Byte Order Marks (BOMs). | TypeScript | stylistic |
unifiedSignatures | TypeScript | logical (strict) |
unionTypes | Sorting | stylistic |
unnecessaryBind | TypeScript | logical |
unnecessaryBlocksReports standalone block statements that don't create a meaningful scope. | TypeScript | stylistic |
unnecessaryBooleanCasts | TypeScript | stylistic |
unnecessaryCatchesReports catch clauses that only rethrow the caught error without modification. | TypeScript | logical |
unnecessaryComparisons | TypeScript | logical |
unnecessaryComputedKeys | TypeScript | stylistic |
unnecessaryConcatenationReports string concatenation using the + operator when both operands are string literals. | TypeScript | stylistic |
unnecessaryConditions | TypeScript | logical |
unnecessaryConstructors | TypeScript | stylistic |
unnecessaryContinues | TypeScript | logical |
unnecessaryEscapes | TypeScript | stylistic |
unnecessaryFragmentsDisallow unnecessary JSX fragments that wrap a single child or have no children. | JSX | stylistic |
unnecessaryFunctionCurries | TypeScript | logical |
unnecessaryLogicalComparisons | TypeScript | logical |
unnecessaryMathClamps | TypeScript | logical |
unnecessaryNumericFractions | TypeScript | logical |
unnecessaryRenames | TypeScript | stylistic |
unnecessaryReturns | TypeScript | stylistic |
unnecessarySpreads | TypeScript | logical |
unnecessaryTemplateAttributes | Vue | logical |
unnecessaryTemplateExpressions | TypeScript | logical |
unnecessaryTernaries | TypeScript | stylistic (strict) |
unnecessaryTypeAnnotations | TypeScript | stylistic |
unnecessaryTypeArguments | TypeScript | logical |
unnecessaryTypeAssertions | TypeScript | logical |
unnecessaryTypeConstraints | TypeScript | logical |
unnecessaryTypeConversions | TypeScript | logical |
unnecessaryTypeParameters | TypeScript | logical |
unnecessaryUndefinedDefaults | TypeScript | logical |
unnecessaryUseStricts | TypeScript | logical |
unpublishedBins | Node.js | logical |
unpublishedImports | Node.js | logical |
unreachableStatements | TypeScript | untyped |
unsafeDeclarationmerging | TypeScript | logical |
unsafeEnumComparisons | TypeScript | logical |
unsafeFinallyStatements | TypeScript | logical |
unsafeFunctionTypes | TypeScript | logical |
unsafeInlineScripts | Astro | security |
unsafeNegationsReports negating the left operand of in or instanceof relations. | TypeScript | untyped |
unsafeOptionalChains | TypeScript | untyped |
unsafeToString | TypeScript | logical |
unsafeUnaryNegations | TypeScript | logical |
unsupportedGlobals | Node.js | logical |
unsupportedNodeAPIs | Node.js | logical |
unsupportedSyntax | Node.js | logical |
unsupportedSyntax | React | logical |
unusedClassComponentMethods | React | logical |
unusedComponents | Vue | logical |
unusedCssSelectors | Astro | logical |
unusedExpressions | TypeScript | logical |
unusedLabels | TypeScript | stylistic |
unusedMessageIds | Flint | logical |
unusedPlaceholders | Flint | logical |
unusedPrivateClassMembers | TypeScript | logical |
unusedPropTypes | React | logical |
unusedState | React | logical |
unusedStyleDefineVars | Astro | logical |
unusedSwitchStatements | TypeScript | logical |
unusedValues | TypeScript | logical |
unusedVariables | TypeScript | logical |
unusedVariables | Vue | logical |
usageBeforeDefinition | TypeScript | untyped |
useMemoReturns | React | logical |
useStateDestructures | React | stylistic |
useStrictDirectives | TypeScript | untyped |
valueSafetyReports JSON values that are unsafe for data interchange. | JSON | logical |
varDeclarations | TypeScript | stylistic |
variableBlockScopeUsage | TypeScript | untyped |
variableDeclarations | Sorting | stylistic |
variableDeletionsReports attempting to delete variables with the delete operator. | TypeScript | untyped |
variableRedeclarations | TypeScript | untyped |
versionPresence | PackageJSON | logical |
versionValidity | PackageJSON | logical |
vHtmlDirectives | Vue | logical (strict) |
vIfsWithVFors | Vue | logical |
viNamespaceNames | Vitest | (none) |
vitestGlobalImports | Vitest | stylistic |
voidOperatorReports using the void operator. | TypeScript | stylistic |
vuePackageImports | Vue | logical |
watchAfterAwaits | Vue | logical |
watchArrowFunctions | Vue | logical |
windowMessagingTargetOriginRequires specifying the targetOrigin argument when calling window.postMessage(). | Browser | logical |
withStatements | TypeScript | logical |
workspacesValidity | PackageJSON | logical |
wrapperObjectTypes | TypeScript | logical |
yamlKeys | Sorting | stylistic |
yamlSequenceValues | Sorting | stylistic |
Made with ❤️🔥 in Boston by
Josh Goldberg and contributors.