@flint.fyi/ts 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +1 -1
- package/dist/index.mjs +22467 -0
- package/package.json +8 -7
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -619
- package/lib/rules/accessorPairGroups.d.ts +0 -9
- package/lib/rules/accessorPairGroups.js +0 -46
- package/lib/rules/accessorPairTypes.d.ts +0 -9
- package/lib/rules/accessorPairTypes.js +0 -70
- package/lib/rules/accessorThisRecursion.d.ts +0 -9
- package/lib/rules/accessorThisRecursion.js +0 -63
- package/lib/rules/anyArguments.d.ts +0 -9
- package/lib/rules/anyArguments.js +0 -232
- package/lib/rules/anyAssignments.d.ts +0 -9
- package/lib/rules/anyAssignments.js +0 -263
- package/lib/rules/anyCalls.d.ts +0 -9
- package/lib/rules/anyCalls.js +0 -66
- package/lib/rules/anyMemberAccess.d.ts +0 -9
- package/lib/rules/anyMemberAccess.js +0 -83
- package/lib/rules/anyReturns.d.ts +0 -9
- package/lib/rules/anyReturns.js +0 -100
- package/lib/rules/arguments.d.ts +0 -9
- package/lib/rules/arguments.js +0 -36
- package/lib/rules/arrayCallbackReturns.d.ts +0 -9
- package/lib/rules/arrayCallbackReturns.js +0 -71
- package/lib/rules/arrayConstructors.d.ts +0 -9
- package/lib/rules/arrayConstructors.js +0 -45
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
- package/lib/rules/arrayElementDeletions.d.ts +0 -9
- package/lib/rules/arrayElementDeletions.js +0 -41
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
- package/lib/rules/arrayFilteredFinds.d.ts +0 -9
- package/lib/rules/arrayFilteredFinds.js +0 -72
- package/lib/rules/arrayFinds.d.ts +0 -9
- package/lib/rules/arrayFinds.js +0 -39
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMapMethods.js +0 -45
- package/lib/rules/arrayFlatMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMethods.js +0 -81
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
- package/lib/rules/arrayIncludes.d.ts +0 -9
- package/lib/rules/arrayIncludes.js +0 -51
- package/lib/rules/arrayIncludesMethods.d.ts +0 -9
- package/lib/rules/arrayIncludesMethods.js +0 -35
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
- package/lib/rules/arrayIndexOfMethods.js +0 -49
- package/lib/rules/arrayLoops.d.ts +0 -9
- package/lib/rules/arrayLoops.js +0 -34
- package/lib/rules/arrayMapIdentities.d.ts +0 -9
- package/lib/rules/arrayMapIdentities.js +0 -72
- package/lib/rules/arrayMutableReverses.d.ts +0 -9
- package/lib/rules/arrayMutableReverses.js +0 -37
- package/lib/rules/arrayMutableSorts.d.ts +0 -9
- package/lib/rules/arrayMutableSorts.js +0 -70
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
- package/lib/rules/arrayReduceTypeArguments.js +0 -62
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
- package/lib/rules/arraySomeMethods.d.ts +0 -9
- package/lib/rules/arraySomeMethods.js +0 -75
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
- package/lib/rules/arrayTypes.d.ts +0 -16
- package/lib/rules/arrayTypes.js +0 -109
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
- package/lib/rules/asConstAssertions.d.ts +0 -9
- package/lib/rules/asConstAssertions.js +0 -55
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
- package/lib/rules/assignmentOperatorShorthands.js +0 -45
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
- package/lib/rules/asyncFunctionAwaits.js +0 -53
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
- package/lib/rules/asyncPromiseExecutors.js +0 -39
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
- package/lib/rules/atAccesses.d.ts +0 -9
- package/lib/rules/atAccesses.js +0 -50
- package/lib/rules/builtinCoercions.d.ts +0 -9
- package/lib/rules/builtinCoercions.js +0 -115
- package/lib/rules/builtinConstructorNews.d.ts +0 -9
- package/lib/rules/builtinConstructorNews.js +0 -87
- package/lib/rules/caseDeclarations.d.ts +0 -9
- package/lib/rules/caseDeclarations.js +0 -38
- package/lib/rules/caseDuplicates.d.ts +0 -9
- package/lib/rules/caseDuplicates.js +0 -34
- package/lib/rules/caseFallthroughs.d.ts +0 -9
- package/lib/rules/caseFallthroughs.js +0 -74
- package/lib/rules/catchCallbackTypes.d.ts +0 -9
- package/lib/rules/catchCallbackTypes.js +0 -65
- package/lib/rules/caughtVariableNames.d.ts +0 -9
- package/lib/rules/caughtVariableNames.js +0 -38
- package/lib/rules/chainedAssignments.d.ts +0 -9
- package/lib/rules/chainedAssignments.js +0 -31
- package/lib/rules/charAtComparisons.d.ts +0 -9
- package/lib/rules/charAtComparisons.js +0 -53
- package/lib/rules/classAssignments.d.ts +0 -9
- package/lib/rules/classAssignments.js +0 -27
- package/lib/rules/classFieldDeclarations.d.ts +0 -9
- package/lib/rules/classFieldDeclarations.js +0 -38
- package/lib/rules/classLiteralProperties.d.ts +0 -9
- package/lib/rules/classLiteralProperties.js +0 -43
- package/lib/rules/classMemberDuplicates.d.ts +0 -9
- package/lib/rules/classMemberDuplicates.js +0 -69
- package/lib/rules/classMethodsThis.d.ts +0 -13
- package/lib/rules/classMethodsThis.js +0 -122
- package/lib/rules/combinedPushes.d.ts +0 -9
- package/lib/rules/combinedPushes.js +0 -54
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
- package/lib/rules/consecutiveNonNullAssertions.js +0 -37
- package/lib/rules/consoleCalls.d.ts +0 -8
- package/lib/rules/consoleCalls.js +0 -26
- package/lib/rules/constantAssignments.d.ts +0 -9
- package/lib/rules/constantAssignments.js +0 -39
- package/lib/rules/constructorGenericCalls.d.ts +0 -15
- package/lib/rules/constructorGenericCalls.js +0 -136
- package/lib/rules/constructorReturns.d.ts +0 -9
- package/lib/rules/constructorReturns.js +0 -39
- package/lib/rules/constructorSupers.d.ts +0 -9
- package/lib/rules/constructorSupers.js +0 -75
- package/lib/rules/dateConstructorClones.d.ts +0 -9
- package/lib/rules/dateConstructorClones.js +0 -35
- package/lib/rules/dateNowTimestamps.d.ts +0 -9
- package/lib/rules/dateNowTimestamps.js +0 -55
- package/lib/rules/debuggerStatements.d.ts +0 -9
- package/lib/rules/debuggerStatements.js +0 -31
- package/lib/rules/defaultCaseLast.d.ts +0 -9
- package/lib/rules/defaultCaseLast.js +0 -34
- package/lib/rules/defaultParameterLast.d.ts +0 -9
- package/lib/rules/defaultParameterLast.js +0 -40
- package/lib/rules/deprecated.d.ts +0 -9
- package/lib/rules/deprecated.js +0 -241
- package/lib/rules/destructuringConsistency.d.ts +0 -9
- package/lib/rules/destructuringConsistency.js +0 -104
- package/lib/rules/duplicateArguments.d.ts +0 -9
- package/lib/rules/duplicateArguments.js +0 -43
- package/lib/rules/dynamicDeletes.d.ts +0 -9
- package/lib/rules/dynamicDeletes.js +0 -35
- package/lib/rules/elseIfDuplicates.d.ts +0 -9
- package/lib/rules/elseIfDuplicates.js +0 -36
- package/lib/rules/elseReturns.d.ts +0 -9
- package/lib/rules/elseReturns.js +0 -65
- package/lib/rules/emptyBlocks.d.ts +0 -9
- package/lib/rules/emptyBlocks.js +0 -54
- package/lib/rules/emptyDestructures.d.ts +0 -9
- package/lib/rules/emptyDestructures.js +0 -32
- package/lib/rules/emptyEnums.d.ts +0 -9
- package/lib/rules/emptyEnums.js +0 -28
- package/lib/rules/emptyExports.d.ts +0 -9
- package/lib/rules/emptyExports.js +0 -58
- package/lib/rules/emptyFiles.d.ts +0 -9
- package/lib/rules/emptyFiles.js +0 -42
- package/lib/rules/emptyFunctions.d.ts +0 -9
- package/lib/rules/emptyFunctions.js +0 -59
- package/lib/rules/emptyModuleAttributes.d.ts +0 -9
- package/lib/rules/emptyModuleAttributes.js +0 -33
- package/lib/rules/emptyObjectTypes.d.ts +0 -9
- package/lib/rules/emptyObjectTypes.js +0 -45
- package/lib/rules/emptyStaticBlocks.d.ts +0 -9
- package/lib/rules/emptyStaticBlocks.js +0 -40
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
- package/lib/rules/emptyTypeParameterLists.js +0 -29
- package/lib/rules/enumInitializers.d.ts +0 -9
- package/lib/rules/enumInitializers.js +0 -52
- package/lib/rules/enumMemberLiterals.d.ts +0 -9
- package/lib/rules/enumMemberLiterals.js +0 -37
- package/lib/rules/enumValueConsistency.d.ts +0 -9
- package/lib/rules/enumValueConsistency.js +0 -54
- package/lib/rules/enumValueDuplicates.d.ts +0 -9
- package/lib/rules/enumValueDuplicates.js +0 -43
- package/lib/rules/equalityOperatorNegations.d.ts +0 -8
- package/lib/rules/equalityOperatorNegations.js +0 -58
- package/lib/rules/equalityOperators.d.ts +0 -9
- package/lib/rules/equalityOperators.js +0 -42
- package/lib/rules/errorMessages.d.ts +0 -9
- package/lib/rules/errorMessages.js +0 -54
- package/lib/rules/errorSubclassProperties.d.ts +0 -9
- package/lib/rules/errorSubclassProperties.js +0 -142
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
- package/lib/rules/escapeSequenceCasing.d.ts +0 -9
- package/lib/rules/escapeSequenceCasing.js +0 -73
- package/lib/rules/evals.d.ts +0 -9
- package/lib/rules/evals.js +0 -29
- package/lib/rules/evolvingVariableTypes.d.ts +0 -9
- package/lib/rules/evolvingVariableTypes.js +0 -31
- package/lib/rules/exceptionAssignments.d.ts +0 -9
- package/lib/rules/exceptionAssignments.js +0 -37
- package/lib/rules/explicitAnys.d.ts +0 -9
- package/lib/rules/explicitAnys.js +0 -53
- package/lib/rules/exponentiationOperators.d.ts +0 -9
- package/lib/rules/exponentiationOperators.js +0 -32
- package/lib/rules/exportFromImports.d.ts +0 -9
- package/lib/rules/exportFromImports.js +0 -117
- package/lib/rules/exportMutables.d.ts +0 -9
- package/lib/rules/exportMutables.js +0 -31
- package/lib/rules/exportUniqueNames.d.ts +0 -9
- package/lib/rules/exportUniqueNames.js +0 -63
- package/lib/rules/extraneousClasses.d.ts +0 -15
- package/lib/rules/extraneousClasses.js +0 -109
- package/lib/rules/fetchMethodBodies.d.ts +0 -9
- package/lib/rules/fetchMethodBodies.js +0 -70
- package/lib/rules/finallyStatementSafety.d.ts +0 -9
- package/lib/rules/finallyStatementSafety.js +0 -45
- package/lib/rules/forDirections.d.ts +0 -9
- package/lib/rules/forDirections.js +0 -73
- package/lib/rules/forInArrays.d.ts +0 -9
- package/lib/rules/forInArrays.js +0 -44
- package/lib/rules/forInGuards.d.ts +0 -8
- package/lib/rules/forInGuards.js +0 -42
- package/lib/rules/functionApplySpreads.d.ts +0 -9
- package/lib/rules/functionApplySpreads.js +0 -61
- package/lib/rules/functionAssignments.d.ts +0 -9
- package/lib/rules/functionAssignments.js +0 -27
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
- package/lib/rules/functionCurryingRedundancy.js +0 -51
- package/lib/rules/functionDeclarationStyles.d.ts +0 -15
- package/lib/rules/functionDeclarationStyles.js +0 -65
- package/lib/rules/functionNameMatches.d.ts +0 -9
- package/lib/rules/functionNameMatches.js +0 -72
- package/lib/rules/functionNewCalls.d.ts +0 -9
- package/lib/rules/functionNewCalls.js +0 -40
- package/lib/rules/generatorFunctionYields.d.ts +0 -9
- package/lib/rules/generatorFunctionYields.js +0 -48
- package/lib/rules/getterReturns.d.ts +0 -9
- package/lib/rules/getterReturns.js +0 -63
- package/lib/rules/globalAssignments.d.ts +0 -9
- package/lib/rules/globalAssignments.js +0 -45
- package/lib/rules/globalObjectCalls.d.ts +0 -9
- package/lib/rules/globalObjectCalls.js +0 -40
- package/lib/rules/globalThisAliases.d.ts +0 -9
- package/lib/rules/globalThisAliases.js +0 -45
- package/lib/rules/impliedEvals.d.ts +0 -9
- package/lib/rules/impliedEvals.js +0 -128
- package/lib/rules/importEmptyBlocks.d.ts +0 -9
- package/lib/rules/importEmptyBlocks.js +0 -51
- package/lib/rules/importTypeSideEffects.d.ts +0 -9
- package/lib/rules/importTypeSideEffects.js +0 -29
- package/lib/rules/indexedObjectTypes.d.ts +0 -15
- package/lib/rules/indexedObjectTypes.js +0 -81
- package/lib/rules/instanceOfArrays.d.ts +0 -9
- package/lib/rules/instanceOfArrays.js +0 -29
- package/lib/rules/irregularWhitespaces.d.ts +0 -15
- package/lib/rules/irregularWhitespaces.js +0 -95
- package/lib/rules/isNaNComparisons.d.ts +0 -9
- package/lib/rules/isNaNComparisons.js +0 -41
- package/lib/rules/literalConstructorWrappers.d.ts +0 -9
- package/lib/rules/literalConstructorWrappers.js +0 -62
- package/lib/rules/mathMethods.d.ts +0 -9
- package/lib/rules/mathMethods.js +0 -126
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
- package/lib/rules/meaninglessVoidOperators.js +0 -37
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
- package/lib/rules/misleadingVoidExpressions.js +0 -126
- package/lib/rules/moduleSpecifierLists.d.ts +0 -9
- package/lib/rules/moduleSpecifierLists.js +0 -90
- package/lib/rules/multilineAmbiguities.d.ts +0 -9
- package/lib/rules/multilineAmbiguities.js +0 -62
- package/lib/rules/namedDefaultExports.d.ts +0 -9
- package/lib/rules/namedDefaultExports.js +0 -58
- package/lib/rules/namespaceDeclarations.d.ts +0 -13
- package/lib/rules/namespaceDeclarations.js +0 -35
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
- package/lib/rules/namespaceKeywords.d.ts +0 -9
- package/lib/rules/namespaceKeywords.js +0 -38
- package/lib/rules/nativeObjectExtensions.d.ts +0 -9
- package/lib/rules/nativeObjectExtensions.js +0 -112
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
- package/lib/rules/negativeIndexLengthMethods.js +0 -178
- package/lib/rules/negativeZeroComparisons.d.ts +0 -9
- package/lib/rules/negativeZeroComparisons.js +0 -46
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
- package/lib/rules/nestedStandaloneIfs.js +0 -103
- package/lib/rules/newDefinitions.d.ts +0 -9
- package/lib/rules/newDefinitions.js +0 -82
- package/lib/rules/newExpressions.d.ts +0 -9
- package/lib/rules/newExpressions.js +0 -36
- package/lib/rules/newNativeNonConstructors.d.ts +0 -9
- package/lib/rules/newNativeNonConstructors.js +0 -37
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
- package/lib/rules/nonNullAssertionPlacement.js +0 -92
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
- package/lib/rules/nonNullableTypeAssertions.js +0 -76
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
- package/lib/rules/nonOctalDecimalEscapes.js +0 -46
- package/lib/rules/nullishCheckStyle.d.ts +0 -20
- package/lib/rules/nullishCheckStyle.js +0 -142
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
- package/lib/rules/nullishCoalescingOperators.js +0 -321
- package/lib/rules/numberMethodRanges.d.ts +0 -9
- package/lib/rules/numberMethodRanges.js +0 -72
- package/lib/rules/numberStaticMethods.d.ts +0 -9
- package/lib/rules/numberStaticMethods.js +0 -51
- package/lib/rules/numericErasingOperations.d.ts +0 -9
- package/lib/rules/numericErasingOperations.js +0 -44
- package/lib/rules/numericLiteralParsing.d.ts +0 -9
- package/lib/rules/numericLiteralParsing.js +0 -55
- package/lib/rules/numericPrecision.d.ts +0 -9
- package/lib/rules/numericPrecision.js +0 -100
- package/lib/rules/numericSeparatorGroups.d.ts +0 -9
- package/lib/rules/numericSeparatorGroups.js +0 -99
- package/lib/rules/objectAssignSpreads.d.ts +0 -9
- package/lib/rules/objectAssignSpreads.js +0 -51
- package/lib/rules/objectCalls.d.ts +0 -9
- package/lib/rules/objectCalls.js +0 -36
- package/lib/rules/objectEntriesMethods.d.ts +0 -9
- package/lib/rules/objectEntriesMethods.js +0 -80
- package/lib/rules/objectHasOwns.d.ts +0 -9
- package/lib/rules/objectHasOwns.js +0 -48
- package/lib/rules/objectKeyDuplicates.d.ts +0 -9
- package/lib/rules/objectKeyDuplicates.js +0 -61
- package/lib/rules/objectProto.d.ts +0 -9
- package/lib/rules/objectProto.js +0 -48
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
- package/lib/rules/objectPrototypeBuiltIns.js +0 -52
- package/lib/rules/objectShorthand.d.ts +0 -9
- package/lib/rules/objectShorthand.js +0 -82
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
- package/lib/rules/objectTypeDefinitions.d.ts +0 -9
- package/lib/rules/objectTypeDefinitions.js +0 -32
- package/lib/rules/octalEscapes.d.ts +0 -9
- package/lib/rules/octalEscapes.js +0 -56
- package/lib/rules/octalNumbers.d.ts +0 -9
- package/lib/rules/octalNumbers.js +0 -53
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
- package/lib/rules/operatorAssignmentShorthand.js +0 -75
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
- package/lib/rules/overloadSignaturesAdjacent.js +0 -138
- package/lib/rules/parameterReassignments.d.ts +0 -9
- package/lib/rules/parameterReassignments.js +0 -43
- package/lib/rules/parseIntRadixes.d.ts +0 -9
- package/lib/rules/parseIntRadixes.js +0 -57
- package/lib/rules/propertyAccessNotation.d.ts +0 -12
- package/lib/rules/propertyAccessNotation.js +0 -117
- package/lib/rules/recursionOnlyArguments.d.ts +0 -9
- package/lib/rules/recursionOnlyArguments.js +0 -62
- package/lib/rules/redundantTypeConstituents.d.ts +0 -9
- package/lib/rules/redundantTypeConstituents.js +0 -275
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
- package/lib/rules/regexAllGlobalFlags.js +0 -54
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
- package/lib/rules/regexAmbiguousInvalidity.js +0 -295
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
- package/lib/rules/regexCharacterClassRanges.js +0 -135
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
- package/lib/rules/regexCharacterClassSetOperations.js +0 -79
- package/lib/rules/regexCharacterClasses.d.ts +0 -9
- package/lib/rules/regexCharacterClasses.js +0 -232
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
- package/lib/rules/regexContradictoryAssertions.js +0 -208
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
- package/lib/rules/regexControlCharacterEscapes.js +0 -128
- package/lib/rules/regexControlCharacters.d.ts +0 -9
- package/lib/rules/regexControlCharacters.js +0 -93
- package/lib/rules/regexDigitMatchers.d.ts +0 -9
- package/lib/rules/regexDigitMatchers.js +0 -178
- package/lib/rules/regexDollarEscapes.d.ts +0 -9
- package/lib/rules/regexDollarEscapes.js +0 -89
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
- package/lib/rules/regexEmptyAlternatives.js +0 -138
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
- package/lib/rules/regexEmptyCapturingGroups.js +0 -65
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
- package/lib/rules/regexEmptyCharacterClasses.js +0 -66
- package/lib/rules/regexEmptyGroups.d.ts +0 -9
- package/lib/rules/regexEmptyGroups.js +0 -64
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
- package/lib/rules/regexEmptyStringLiterals.js +0 -64
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
- package/lib/rules/regexEscapeBackspaces.js +0 -67
- package/lib/rules/regexExecutors.d.ts +0 -9
- package/lib/rules/regexExecutors.js +0 -56
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
- package/lib/rules/regexGraphemeStringLiterals.js +0 -49
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
- package/lib/rules/regexHexadecimalEscapes.js +0 -69
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
- package/lib/rules/regexIgnoreCaseFlags.js +0 -143
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
- package/lib/rules/regexInvisibleCharacters.js +0 -88
- package/lib/rules/regexLetterCasing.d.ts +0 -9
- package/lib/rules/regexLetterCasing.js +0 -184
- package/lib/rules/regexLiterals.d.ts +0 -9
- package/lib/rules/regexLiterals.js +0 -87
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexLookaroundAssertions.js +0 -161
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
- package/lib/rules/regexMatchNotation.d.ts +0 -9
- package/lib/rules/regexMatchNotation.js +0 -137
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
- package/lib/rules/regexMisleadingQuantifiers.js +0 -76
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
- package/lib/rules/regexNamedBackreferences.d.ts +0 -9
- package/lib/rules/regexNamedBackreferences.js +0 -46
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
- package/lib/rules/regexNamedCaptureGroups.js +0 -65
- package/lib/rules/regexNamedReplacements.d.ts +0 -9
- package/lib/rules/regexNamedReplacements.js +0 -91
- package/lib/rules/regexNonStandardFlags.d.ts +0 -9
- package/lib/rules/regexNonStandardFlags.js +0 -64
- package/lib/rules/regexObscureRanges.d.ts +0 -9
- package/lib/rules/regexObscureRanges.js +0 -91
- package/lib/rules/regexOctalEscapes.d.ts +0 -9
- package/lib/rules/regexOctalEscapes.js +0 -68
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
- package/lib/rules/regexPlusQuantifiers.js +0 -66
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
- package/lib/rules/regexPredefinedAssertions.js +0 -125
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
- package/lib/rules/regexQuestionQuantifiers.js +0 -102
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
- package/lib/rules/regexRepeatQuantifiers.js +0 -94
- package/lib/rules/regexResultArrayGroups.d.ts +0 -9
- package/lib/rules/regexResultArrayGroups.js +0 -185
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
- package/lib/rules/regexSetOperationOptimizations.js +0 -175
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
- package/lib/rules/regexStandaloneBackslashes.js +0 -57
- package/lib/rules/regexStarQuantifiers.d.ts +0 -9
- package/lib/rules/regexStarQuantifiers.js +0 -66
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
- package/lib/rules/regexSuperLinearBacktracking.js +0 -96
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
- package/lib/rules/regexSuperLinearMoves.js +0 -140
- package/lib/rules/regexTestMethods.d.ts +0 -9
- package/lib/rules/regexTestMethods.js +0 -81
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
- package/lib/rules/regexUnicodeEscapes.js +0 -95
- package/lib/rules/regexUnicodeFlag.d.ts +0 -8
- package/lib/rules/regexUnicodeFlag.js +0 -95
- package/lib/rules/regexUnicodeProperties.d.ts +0 -9
- package/lib/rules/regexUnicodeProperties.js +0 -131
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryAssertions.js +0 -221
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
- package/lib/rules/regexUnnecessaryEscapes.js +0 -134
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
- package/lib/rules/regexUnnecessarySetOperands.js +0 -134
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnusedCapturingGroups.js +0 -67
- package/lib/rules/regexUnusedFlags.d.ts +0 -9
- package/lib/rules/regexUnusedFlags.js +0 -114
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedQuantifiers.js +0 -61
- package/lib/rules/regexValidity.d.ts +0 -9
- package/lib/rules/regexValidity.js +0 -144
- package/lib/rules/regexWordMatchers.d.ts +0 -9
- package/lib/rules/regexWordMatchers.js +0 -144
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
- package/lib/rules/regexZeroQuantifiers.js +0 -58
- package/lib/rules/requireImports.d.ts +0 -9
- package/lib/rules/requireImports.js +0 -46
- package/lib/rules/responseJsonMethods.d.ts +0 -9
- package/lib/rules/responseJsonMethods.js +0 -49
- package/lib/rules/restrictedIdentifiers.d.ts +0 -12
- package/lib/rules/restrictedIdentifiers.js +0 -39
- package/lib/rules/restrictedImports.d.ts +0 -26
- package/lib/rules/restrictedImports.js +0 -164
- package/lib/rules/returnAssignments.d.ts +0 -9
- package/lib/rules/returnAssignments.js +0 -36
- package/lib/rules/returnThisTypes.d.ts +0 -9
- package/lib/rules/returnThisTypes.js +0 -92
- package/lib/rules/ruleCreator.d.ts +0 -2
- package/lib/rules/ruleCreator.js +0 -15
- package/lib/rules/selfAssignments.d.ts +0 -9
- package/lib/rules/selfAssignments.js +0 -27
- package/lib/rules/sequences.d.ts +0 -9
- package/lib/rules/sequences.js +0 -26
- package/lib/rules/setSizeLengthChecks.d.ts +0 -9
- package/lib/rules/setSizeLengthChecks.js +0 -46
- package/lib/rules/setterReturns.d.ts +0 -9
- package/lib/rules/setterReturns.js +0 -39
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
- package/lib/rules/shadowedRestrictedNames.js +0 -66
- package/lib/rules/singleVariableDeclarations.d.ts +0 -9
- package/lib/rules/singleVariableDeclarations.js +0 -34
- package/lib/rules/sizeComparisonOperators.d.ts +0 -15
- package/lib/rules/sizeComparisonOperators.js +0 -146
- package/lib/rules/sparseArrays.d.ts +0 -9
- package/lib/rules/sparseArrays.js +0 -41
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
- package/lib/rules/staticMemberOnlyClasses.js +0 -75
- package/lib/rules/stringCaseMismatches.d.ts +0 -9
- package/lib/rules/stringCaseMismatches.js +0 -53
- package/lib/rules/stringCodePoints.d.ts +0 -9
- package/lib/rules/stringCodePoints.js +0 -48
- package/lib/rules/stringSliceMethods.d.ts +0 -9
- package/lib/rules/stringSliceMethods.js +0 -45
- package/lib/rules/stringStartsEndsWith.d.ts +0 -9
- package/lib/rules/stringStartsEndsWith.js +0 -77
- package/lib/rules/structuredCloneMethods.d.ts +0 -9
- package/lib/rules/structuredCloneMethods.js +0 -37
- package/lib/rules/symbolDescriptions.d.ts +0 -9
- package/lib/rules/symbolDescriptions.js +0 -30
- package/lib/rules/thisAliases.d.ts +0 -9
- package/lib/rules/thisAliases.js +0 -42
- package/lib/rules/thisBeforeSuper.d.ts +0 -9
- package/lib/rules/thisBeforeSuper.js +0 -84
- package/lib/rules/throwErrors.d.ts +0 -9
- package/lib/rules/throwErrors.js +0 -59
- package/lib/rules/topLevelAwaits.d.ts +0 -9
- package/lib/rules/topLevelAwaits.js +0 -47
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
- package/lib/rules/tripleSlashReferenceValidity.js +0 -52
- package/lib/rules/tripleSlashReferences.d.ts +0 -9
- package/lib/rules/tripleSlashReferences.js +0 -32
- package/lib/rules/tsComments.d.ts +0 -21
- package/lib/rules/tsComments.js +0 -128
- package/lib/rules/tslintComments.d.ts +0 -9
- package/lib/rules/tslintComments.js +0 -34
- package/lib/rules/typeAssertionStyles.d.ts +0 -9
- package/lib/rules/typeAssertionStyles.js +0 -30
- package/lib/rules/typeImports.d.ts +0 -19
- package/lib/rules/typeImports.js +0 -281
- package/lib/rules/typeofComparisons.d.ts +0 -9
- package/lib/rules/typeofComparisons.js +0 -53
- package/lib/rules/unassignedVariables.d.ts +0 -9
- package/lib/rules/unassignedVariables.js +0 -32
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
- package/lib/rules/undefinedTypeofChecks.js +0 -39
- package/lib/rules/undefinedVariables.d.ts +0 -9
- package/lib/rules/undefinedVariables.js +0 -37
- package/lib/rules/unicodeBOMs.d.ts +0 -9
- package/lib/rules/unicodeBOMs.js +0 -37
- package/lib/rules/unnecessaryBinds.d.ts +0 -9
- package/lib/rules/unnecessaryBinds.js +0 -76
- package/lib/rules/unnecessaryBlocks.d.ts +0 -9
- package/lib/rules/unnecessaryBlocks.js +0 -58
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
- package/lib/rules/unnecessaryBooleanCasts.js +0 -56
- package/lib/rules/unnecessaryCatches.d.ts +0 -9
- package/lib/rules/unnecessaryCatches.js +0 -46
- package/lib/rules/unnecessaryComparisons.d.ts +0 -9
- package/lib/rules/unnecessaryComparisons.js +0 -291
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
- package/lib/rules/unnecessaryConcatenation.js +0 -26
- package/lib/rules/unnecessaryEscapes.d.ts +0 -9
- package/lib/rules/unnecessaryEscapes.js +0 -132
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
- package/lib/rules/unnecessaryMathClamps.js +0 -106
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
- package/lib/rules/unnecessaryNumericFractions.js +0 -48
- package/lib/rules/unnecessaryRenames.d.ts +0 -9
- package/lib/rules/unnecessaryRenames.js +0 -90
- package/lib/rules/unnecessaryTernaries.d.ts +0 -9
- package/lib/rules/unnecessaryTernaries.js +0 -86
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
- package/lib/rules/unnecessaryUseStricts.js +0 -38
- package/lib/rules/unsafeNegations.d.ts +0 -9
- package/lib/rules/unsafeNegations.js +0 -36
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
- package/lib/rules/utils/collectAccessorPairs.js +0 -27
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
- package/lib/rules/utils/countCommentsInRange.js +0 -10
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
- package/lib/rules/utils/discriminateAnyType.js +0 -36
- package/lib/rules/utils/equalityOperators.d.ts +0 -8
- package/lib/rules/utils/equalityOperators.js +0 -34
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
- package/lib/rules/utils/forEachReturnStatement.js +0 -27
- package/lib/rules/utils/formatReportedType.d.ts +0 -3
- package/lib/rules/utils/formatReportedType.js +0 -7
- package/lib/rules/utils/getConstrainedType.d.ts +0 -2
- package/lib/rules/utils/getConstrainedType.js +0 -7
- package/lib/rules/utils/getFunctionName.d.ts +0 -2
- package/lib/rules/utils/getFunctionName.js +0 -14
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
- package/lib/rules/utils/getRegExpConstruction.js +0 -25
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
- package/lib/rules/utils/getThisExpression.d.ts +0 -2
- package/lib/rules/utils/getThisExpression.js +0 -14
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -25
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
- package/lib/rules/utils/isInBooleanContext.js +0 -20
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
- package/lib/rules/utils/isTypeRecursive.js +0 -6
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
- package/lib/rules/utils/isUnsafeAssignment.js +0 -43
- package/lib/rules/utils/operators.d.ts +0 -4
- package/lib/rules/utils/operators.js +0 -33
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
- package/lib/rules/utils/parseRegexpAst.js +0 -15
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAstFull.js +0 -16
- package/lib/rules/utils/skipParentheses.d.ts +0 -2
- package/lib/rules/utils/skipParentheses.js +0 -8
- package/lib/rules/variableDeletions.d.ts +0 -9
- package/lib/rules/variableDeletions.js +0 -33
- package/lib/rules/voidOperator.d.ts +0 -9
- package/lib/rules/voidOperator.js +0 -32
- package/lib/rules/withStatements.d.ts +0 -9
- package/lib/rules/withStatements.js +0 -28
- package/lib/rules/wrapperObjects.d.ts +0 -9
- package/lib/rules/wrapperObjects.js +0 -34
- package/lib/type-utils/getSpecifierNames.d.ts +0 -2
- package/lib/type-utils/getSpecifierNames.js +0 -7
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
- package/lib/type-utils/isFromFile.d.ts +0 -2
- package/lib/type-utils/isFromFile.js +0 -11
- package/lib/type-utils/isFromPackage.d.ts +0 -2
- package/lib/type-utils/isFromPackage.js +0 -13
- package/lib/type-utils/matchesSpecifier.d.ts +0 -3
- package/lib/type-utils/matchesSpecifier.js +0 -18
- package/lib/type-utils/schemas.d.ts +0 -14
- package/lib/type-utils/schemas.js +0 -23
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticNumberValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
import { z as z$1 } from "zod/v4";
|
|
5
|
-
//#region src/rules/sizeComparisonOperators.ts
|
|
6
|
-
const sizePropertyNames = /* @__PURE__ */ new Set(["length", "size"]);
|
|
7
|
-
function hasLogicalOrFallback(node) {
|
|
8
|
-
return ts$1.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === ts$1.SyntaxKind.BarBarToken && node.parent.left === node;
|
|
9
|
-
}
|
|
10
|
-
function isDoubleNegation(node) {
|
|
11
|
-
return ts$1.isPrefixUnaryExpression(node) && node.operator === ts$1.SyntaxKind.ExclamationToken && ts$1.isPrefixUnaryExpression(node.operand) && node.operand.operator === ts$1.SyntaxKind.ExclamationToken;
|
|
12
|
-
}
|
|
13
|
-
function isInBooleanContext(node) {
|
|
14
|
-
if (isDoubleNegation(node)) return true;
|
|
15
|
-
switch (node.parent.kind) {
|
|
16
|
-
case ts$1.SyntaxKind.BinaryExpression: return node.parent.operatorToken.kind === ts$1.SyntaxKind.AmpersandAmpersandToken && node.parent.left === node;
|
|
17
|
-
case ts$1.SyntaxKind.CallExpression: return ts$1.isIdentifier(node.parent.expression) && node.parent.expression.text === "Boolean" && node.parent.arguments.length === 1 && node.parent.arguments[0] === node;
|
|
18
|
-
case ts$1.SyntaxKind.ConditionalExpression:
|
|
19
|
-
case ts$1.SyntaxKind.ForStatement: return node.parent.condition === node;
|
|
20
|
-
case ts$1.SyntaxKind.DoStatement:
|
|
21
|
-
case ts$1.SyntaxKind.IfStatement:
|
|
22
|
-
case ts$1.SyntaxKind.WhileStatement: return node.parent.expression === node;
|
|
23
|
-
case ts$1.SyntaxKind.PrefixUnaryExpression: return node.parent.operator === ts$1.SyntaxKind.ExclamationToken;
|
|
24
|
-
default: return false;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function isInNullishCoalescing(node) {
|
|
28
|
-
return ts$1.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === ts$1.SyntaxKind.QuestionQuestionToken;
|
|
29
|
-
}
|
|
30
|
-
function isNegated(node) {
|
|
31
|
-
if (!ts$1.isPrefixUnaryExpression(node.parent) || node.parent.operator !== ts$1.SyntaxKind.ExclamationToken) return {
|
|
32
|
-
negated: false,
|
|
33
|
-
outerNode: node
|
|
34
|
-
};
|
|
35
|
-
if (ts$1.isPrefixUnaryExpression(node.parent.parent) && node.parent.parent.operator === ts$1.SyntaxKind.ExclamationToken) return {
|
|
36
|
-
negated: false,
|
|
37
|
-
outerNode: node.parent.parent
|
|
38
|
-
};
|
|
39
|
-
return {
|
|
40
|
-
negated: true,
|
|
41
|
-
outerNode: node.parent
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function requiresBooleanType(node) {
|
|
45
|
-
switch (node.parent.kind) {
|
|
46
|
-
case ts$1.SyntaxKind.ArrowFunction:
|
|
47
|
-
case ts$1.SyntaxKind.PropertyDeclaration:
|
|
48
|
-
case ts$1.SyntaxKind.ReturnStatement:
|
|
49
|
-
case ts$1.SyntaxKind.VariableDeclaration: return true;
|
|
50
|
-
case ts$1.SyntaxKind.BinaryExpression:
|
|
51
|
-
if (node.parent.operatorToken.kind === ts$1.SyntaxKind.EqualsToken && node.parent.right === node) return true;
|
|
52
|
-
if (node.parent.operatorToken.kind === ts$1.SyntaxKind.BarBarToken || node.parent.operatorToken.kind === ts$1.SyntaxKind.AmpersandAmpersandToken) return node.parent.right === node;
|
|
53
|
-
return false;
|
|
54
|
-
case ts$1.SyntaxKind.ParenthesizedExpression: return requiresBooleanType(node.parent.expression);
|
|
55
|
-
}
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
var sizeComparisonOperators_default = ruleCreator.createRule(typescriptLanguage, {
|
|
59
|
-
about: {
|
|
60
|
-
description: "Enforce consistent style for `.length` and `.size` checks.",
|
|
61
|
-
id: "sizeComparisonOperators",
|
|
62
|
-
presets: ["stylisticStrict"]
|
|
63
|
-
},
|
|
64
|
-
messages: {
|
|
65
|
-
coercionNonZeroCheck: {
|
|
66
|
-
primary: "Prefer implicit boolean coercions instead of explicit `> 0` comparisons.",
|
|
67
|
-
secondary: ["Implicit boolean coercion of `.{{ property }}` is more concise."],
|
|
68
|
-
suggestions: ["Replace with `.{{ property }}`."]
|
|
69
|
-
},
|
|
70
|
-
coercionZeroCheck: {
|
|
71
|
-
primary: "Prefer implicit boolean coercions instead of explicit `=== 0` comparisons.",
|
|
72
|
-
secondary: ["Implicit boolean coercion of `.{{ property }}` is more concise."],
|
|
73
|
-
suggestions: ["Replace with `!.{{ property }}`."]
|
|
74
|
-
},
|
|
75
|
-
explicitNonZeroCheck: {
|
|
76
|
-
primary: "Prefer explicit `> 0` comparisons instead of implicit boolean coercions.",
|
|
77
|
-
secondary: ["Implicit boolean coercion of `.{{ property }}` can be confusing."],
|
|
78
|
-
suggestions: ["Replace with `.{{ property }} > 0`."]
|
|
79
|
-
},
|
|
80
|
-
explicitZeroCheck: {
|
|
81
|
-
primary: "Prefer explicit `=== 0` comparisons instead of implicit boolean coercions.",
|
|
82
|
-
secondary: ["Implicit boolean coercion of `.{{ property }}` can be confusing."],
|
|
83
|
-
suggestions: ["Replace with `.{{ property }} === 0`."]
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
options: { style: z$1.enum(["coercion", "explicit"]).default("coercion").describe("Which style to enforce: 'coercion' for implicit boolean checks like `if (arr.length)`, or 'explicit' for comparisons like `if (arr.length > 0)`.") },
|
|
87
|
-
setup(context) {
|
|
88
|
-
return { visitors: {
|
|
89
|
-
BinaryExpression: (node, { options, sourceFile }) => {
|
|
90
|
-
if (options.style !== "coercion") return;
|
|
91
|
-
const { left, operatorToken, right } = node;
|
|
92
|
-
if (!ts$1.isPropertyAccessExpression(left) || !sizePropertyNames.has(left.name.text) || !Object.is(getStaticNumberValue(right), 0)) return;
|
|
93
|
-
const isNonZeroCheck = operatorToken.kind === ts$1.SyntaxKind.GreaterThanToken || operatorToken.kind === ts$1.SyntaxKind.ExclamationEqualsEqualsToken || operatorToken.kind === ts$1.SyntaxKind.ExclamationEqualsToken;
|
|
94
|
-
const isZeroCheck = operatorToken.kind === ts$1.SyntaxKind.EqualsEqualsEqualsToken || operatorToken.kind === ts$1.SyntaxKind.EqualsEqualsToken || operatorToken.kind === ts$1.SyntaxKind.LessThanEqualsToken;
|
|
95
|
-
if (!isNonZeroCheck && !isZeroCheck) return;
|
|
96
|
-
const propertyText = left.getText(sourceFile);
|
|
97
|
-
const needsBoolean = requiresBooleanType(node);
|
|
98
|
-
if (isZeroCheck) context.report({
|
|
99
|
-
data: { property: left.name.text },
|
|
100
|
-
fix: {
|
|
101
|
-
range: getTSNodeRange(node, sourceFile),
|
|
102
|
-
text: `!${propertyText}`
|
|
103
|
-
},
|
|
104
|
-
message: "coercionZeroCheck",
|
|
105
|
-
range: getTSNodeRange(node, sourceFile)
|
|
106
|
-
});
|
|
107
|
-
else context.report({
|
|
108
|
-
data: { property: left.name.text },
|
|
109
|
-
fix: {
|
|
110
|
-
range: getTSNodeRange(node, sourceFile),
|
|
111
|
-
text: needsBoolean ? `!!${propertyText}` : propertyText
|
|
112
|
-
},
|
|
113
|
-
message: "coercionNonZeroCheck",
|
|
114
|
-
range: getTSNodeRange(node, sourceFile)
|
|
115
|
-
});
|
|
116
|
-
},
|
|
117
|
-
PropertyAccessExpression: (node, { options, sourceFile }) => {
|
|
118
|
-
if (options.style !== "explicit") return;
|
|
119
|
-
if (!sizePropertyNames.has(node.name.text) || hasLogicalOrFallback(node) || isInNullishCoalescing(node)) return;
|
|
120
|
-
const { negated, outerNode } = isNegated(node);
|
|
121
|
-
if (!isInBooleanContext(outerNode)) return;
|
|
122
|
-
const propertyText = node.getText(sourceFile);
|
|
123
|
-
if (negated) context.report({
|
|
124
|
-
data: { property: node.name.text },
|
|
125
|
-
fix: {
|
|
126
|
-
range: getTSNodeRange(outerNode, sourceFile),
|
|
127
|
-
text: `${propertyText} === 0`
|
|
128
|
-
},
|
|
129
|
-
message: "explicitZeroCheck",
|
|
130
|
-
range: getTSNodeRange(outerNode, sourceFile)
|
|
131
|
-
});
|
|
132
|
-
else context.report({
|
|
133
|
-
data: { property: node.name.text },
|
|
134
|
-
fix: {
|
|
135
|
-
range: getTSNodeRange(outerNode, sourceFile),
|
|
136
|
-
text: `${propertyText} > 0`
|
|
137
|
-
},
|
|
138
|
-
message: "explicitNonZeroCheck",
|
|
139
|
-
range: getTSNodeRange(outerNode, sourceFile)
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
} };
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
//#endregion
|
|
146
|
-
export { sizeComparisonOperators_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports array literals with holes (sparse arrays).";
|
|
3
|
-
readonly id: "sparseArrays";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noSparseArray", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
5
|
-
//#region src/rules/sparseArrays.ts
|
|
6
|
-
var sparseArrays_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports array literals with holes (sparse arrays).",
|
|
9
|
-
id: "sparseArrays",
|
|
10
|
-
presets: ["logical", "logicalStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { noSparseArray: {
|
|
13
|
-
primary: "Sparse arrays with \"holes\" (empty slots) are misleading and behave differently from `undefined` values.",
|
|
14
|
-
secondary: ["Array methods treat holes inconsistently, which can lead to unexpected behavior and bugs.", "Using explicit `undefined` values makes the intent clear and ensures consistent behavior."],
|
|
15
|
-
suggestions: ["Replace holes with explicit `undefined` values.", "Remove unintended commas if the holes are accidental."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
return { visitors: { OmittedExpression: (node, { sourceFile }) => {
|
|
19
|
-
if (node.parent.kind !== SyntaxKind.ArrayLiteralExpression) return;
|
|
20
|
-
const syntaxList = node.parent.getChildren(sourceFile).find((child) => child.kind === SyntaxKind.SyntaxList);
|
|
21
|
-
if (!syntaxList) return;
|
|
22
|
-
const children = syntaxList.getChildren(sourceFile);
|
|
23
|
-
const omittedIndex = children.indexOf(node);
|
|
24
|
-
for (let i = omittedIndex + 1; i < children.length; i++) {
|
|
25
|
-
const child = nullThrows(children[i], "Child is expected to be present by the loop condition");
|
|
26
|
-
if (child.kind === SyntaxKind.CommaToken) {
|
|
27
|
-
context.report({
|
|
28
|
-
message: "noSparseArray",
|
|
29
|
-
range: {
|
|
30
|
-
begin: child.getStart(sourceFile),
|
|
31
|
-
end: child.getEnd()
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
} } };
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
//#endregion
|
|
41
|
-
export { sparseArrays_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports classes that only contain static members.";
|
|
3
|
-
readonly id: "staticMemberOnlyClasses";
|
|
4
|
-
readonly presets: readonly ["logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noStaticOnlyClass", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/staticMemberOnlyClasses.ts
|
|
5
|
-
function hasDecorators(node) {
|
|
6
|
-
return node.modifiers?.some(ts.isDecorator) ?? false;
|
|
7
|
-
}
|
|
8
|
-
function hasExtendsClause(node) {
|
|
9
|
-
return node.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ?? false;
|
|
10
|
-
}
|
|
11
|
-
function hasPrivateConstructor(node) {
|
|
12
|
-
return node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PrivateKeyword) ?? false;
|
|
13
|
-
}
|
|
14
|
-
function hasStaticModifier(modifiers) {
|
|
15
|
-
return modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ?? false;
|
|
16
|
-
}
|
|
17
|
-
function isAbstractClass(node) {
|
|
18
|
-
return node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AbstractKeyword) ?? false;
|
|
19
|
-
}
|
|
20
|
-
function isEmptyConstructor(member) {
|
|
21
|
-
return !member.body?.statements.length && !member.parameters.length;
|
|
22
|
-
}
|
|
23
|
-
var staticMemberOnlyClasses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
24
|
-
about: {
|
|
25
|
-
description: "Reports classes that only contain static members.",
|
|
26
|
-
id: "staticMemberOnlyClasses",
|
|
27
|
-
presets: ["logicalStrict"]
|
|
28
|
-
},
|
|
29
|
-
messages: { noStaticOnlyClass: {
|
|
30
|
-
primary: "This class only contains static members. Consider using module-level exports instead.",
|
|
31
|
-
secondary: ["Classes with only static members add unnecessary complexity.", "Module-level functions and constants are simpler and more idiomatic in JavaScript/TypeScript."],
|
|
32
|
-
suggestions: ["Use module-level functions and constants instead of a static-only class.", "If grouping is needed, use a plain object or namespace."]
|
|
33
|
-
} },
|
|
34
|
-
setup(context) {
|
|
35
|
-
function checkClass(node, { sourceFile }) {
|
|
36
|
-
if (hasExtendsClause(node) || isAbstractClass(node) || hasDecorators(node) || !node.members.length) return;
|
|
37
|
-
let hasNonStaticMember = false;
|
|
38
|
-
let hasPrivateConstructorMember = false;
|
|
39
|
-
for (const member of node.members) {
|
|
40
|
-
if (ts.isConstructorDeclaration(member)) {
|
|
41
|
-
if (hasPrivateConstructor(member)) {
|
|
42
|
-
hasPrivateConstructorMember = true;
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
if (!isEmptyConstructor(member)) {
|
|
46
|
-
hasNonStaticMember = true;
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (ts.isSemicolonClassElement(member) || ts.isClassStaticBlockDeclaration(member)) continue;
|
|
52
|
-
if (ts.isIndexSignatureDeclaration(member)) {
|
|
53
|
-
hasNonStaticMember = true;
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
if ((ts.isPropertyDeclaration(member) || ts.isMethodDeclaration(member) || ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)) && !hasStaticModifier(member.modifiers)) {
|
|
57
|
-
hasNonStaticMember = true;
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (hasPrivateConstructorMember || hasNonStaticMember) return;
|
|
62
|
-
const reportRange = getTSNodeRange(node.name ?? node, sourceFile);
|
|
63
|
-
context.report({
|
|
64
|
-
message: "noStaticOnlyClass",
|
|
65
|
-
range: reportRange
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return { visitors: {
|
|
69
|
-
ClassDeclaration: checkClass,
|
|
70
|
-
ClassExpression: checkClass
|
|
71
|
-
} };
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
//#endregion
|
|
75
|
-
export { staticMemberOnlyClasses_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports string case method calls compared against literals with mismatched casing.";
|
|
3
|
-
readonly id: "stringCaseMismatches";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "mismatch", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticStringValue, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/stringCaseMismatches.ts
|
|
5
|
-
function isLowerCase(text) {
|
|
6
|
-
return text === text.toLowerCase();
|
|
7
|
-
}
|
|
8
|
-
function isUpperCase(text) {
|
|
9
|
-
return text === text.toUpperCase();
|
|
10
|
-
}
|
|
11
|
-
var stringCaseMismatches_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports string case method calls compared against literals with mismatched casing.",
|
|
14
|
-
id: "stringCaseMismatches",
|
|
15
|
-
presets: ["logical"]
|
|
16
|
-
},
|
|
17
|
-
messages: { mismatch: {
|
|
18
|
-
primary: "This `{{ method }}()` call is compared against a string that is not {{ expectedCase }}.",
|
|
19
|
-
secondary: ["The comparison will always be {{ result }} because the casing doesn't match."],
|
|
20
|
-
suggestions: ["Change the compared string to {{ expectedCase }}: \"{{ corrected }}\"."]
|
|
21
|
-
} },
|
|
22
|
-
setup(context) {
|
|
23
|
-
return { visitors: { CallExpression(node, { sourceFile }) {
|
|
24
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
25
|
-
if (node.expression.name.text !== "toLowerCase" && node.expression.name.text !== "toUpperCase" || node.arguments.length || !ts$1.isBinaryExpression(node.parent)) return;
|
|
26
|
-
const operator = node.parent.operatorToken.kind;
|
|
27
|
-
if (operator !== ts$1.SyntaxKind.EqualsEqualsToken && operator !== ts$1.SyntaxKind.EqualsEqualsEqualsToken && operator !== ts$1.SyntaxKind.ExclamationEqualsToken && operator !== ts$1.SyntaxKind.ExclamationEqualsEqualsToken) return;
|
|
28
|
-
const otherSide = node.parent.left === node ? node.parent.right : node.parent.left;
|
|
29
|
-
const value = getStaticStringValue(otherSide);
|
|
30
|
-
if (value === void 0) return;
|
|
31
|
-
const isToLower = node.expression.name.text === "toLowerCase";
|
|
32
|
-
const expectedCase = isToLower ? "lowercase" : "uppercase";
|
|
33
|
-
if (isToLower ? isLowerCase(value) : isUpperCase(value)) return;
|
|
34
|
-
const corrected = isToLower ? value.toLowerCase() : value.toUpperCase();
|
|
35
|
-
const isEquality = operator === ts$1.SyntaxKind.EqualsEqualsToken || operator === ts$1.SyntaxKind.EqualsEqualsEqualsToken;
|
|
36
|
-
context.report({
|
|
37
|
-
data: {
|
|
38
|
-
corrected,
|
|
39
|
-
expectedCase,
|
|
40
|
-
method: node.expression.name.text,
|
|
41
|
-
result: isEquality ? "false" : "true"
|
|
42
|
-
},
|
|
43
|
-
message: "mismatch",
|
|
44
|
-
range: {
|
|
45
|
-
begin: otherSide.getStart(sourceFile),
|
|
46
|
-
end: otherSide.getEnd()
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
} } };
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
//#endregion
|
|
53
|
-
export { stringCaseMismatches_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports usage of charCodeAt and fromCharCode instead of their codePoint equivalents.";
|
|
3
|
-
readonly id: "stringCodePoints";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferCodePointAt" | "preferFromCodePoint", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/stringCodePoints.ts
|
|
6
|
-
var stringCodePoints_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports usage of charCodeAt and fromCharCode instead of their codePoint equivalents.",
|
|
9
|
-
id: "stringCodePoints",
|
|
10
|
-
presets: ["logical"]
|
|
11
|
-
},
|
|
12
|
-
messages: {
|
|
13
|
-
preferCodePointAt: {
|
|
14
|
-
primary: "Prefer `codePointAt` over `charCodeAt` for proper Unicode support.",
|
|
15
|
-
secondary: ["charCodeAt only handles characters in the Basic Multilingual Plane (BMP).", "codePointAt correctly handles all Unicode code points, including emoji."],
|
|
16
|
-
suggestions: ["Replace with codePointAt()."]
|
|
17
|
-
},
|
|
18
|
-
preferFromCodePoint: {
|
|
19
|
-
primary: "Prefer `String.fromCodePoint` over `String.fromCharCode` for proper Unicode support.",
|
|
20
|
-
secondary: ["fromCharCode only handles code points up to U+FFFF.", "fromCodePoint correctly handles all Unicode code points."],
|
|
21
|
-
suggestions: ["Replace with String.fromCodePoint()."]
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
setup(context) {
|
|
25
|
-
return { visitors: {
|
|
26
|
-
CallExpression(node, { sourceFile, typeChecker }) {
|
|
27
|
-
if (ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "charCodeAt" && tsutils.isTypeFlagSet(typeChecker.getTypeAtLocation(node.expression.expression), ts$1.TypeFlags.StringLike)) context.report({
|
|
28
|
-
message: "preferCodePointAt",
|
|
29
|
-
range: {
|
|
30
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
31
|
-
end: node.expression.name.getEnd()
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
},
|
|
35
|
-
PropertyAccessExpression(node, { program, sourceFile, typeChecker }) {
|
|
36
|
-
if (node.name.text === "fromCharCode" && ts$1.isIdentifier(node.expression) && isGlobalDeclarationOfName(node.expression, "String", typeChecker, program)) context.report({
|
|
37
|
-
message: "preferFromCodePoint",
|
|
38
|
-
range: {
|
|
39
|
-
begin: node.name.getStart(sourceFile),
|
|
40
|
-
end: node.name.getEnd()
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
} };
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { stringCodePoints_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports usage of `substring` instead of slice for string operations.";
|
|
3
|
-
readonly id: "stringSliceMethods";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferSliceOverSubstring", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
import * as tsutils from "ts-api-utils";
|
|
6
|
-
//#region src/rules/stringSliceMethods.ts
|
|
7
|
-
var stringSliceMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
8
|
-
about: {
|
|
9
|
-
description: "Reports usage of `substring` instead of slice for string operations.",
|
|
10
|
-
id: "stringSliceMethods",
|
|
11
|
-
presets: ["logical"]
|
|
12
|
-
},
|
|
13
|
-
messages: { preferSliceOverSubstring: {
|
|
14
|
-
primary: "Prefer `slice` over `substring` for more consistent behavior.",
|
|
15
|
-
secondary: [
|
|
16
|
-
"`slice` has predictable behavior matching `Array.prototype.slice`.",
|
|
17
|
-
"`substring` auto-swaps arguments if start > end, which can be confusing.",
|
|
18
|
-
"`substring` also treats negative indices as 0, unlike `slice`."
|
|
19
|
-
],
|
|
20
|
-
suggestions: ["Replace with slice()."]
|
|
21
|
-
} },
|
|
22
|
-
setup(context) {
|
|
23
|
-
return { visitors: { CallExpression(node, { sourceFile, typeChecker }) {
|
|
24
|
-
if (ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "substring" && tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(node, typeChecker), ts$1.TypeFlags.StringLike)) {
|
|
25
|
-
const args = node.arguments.map((arg) => arg.getText(sourceFile));
|
|
26
|
-
const receiver = node.expression.expression.getText(sourceFile);
|
|
27
|
-
const replacement = !args.length ? `${receiver}.slice()` : args.length === 1 ? `${receiver}.slice(${args[0]})` : `${receiver}.slice(${args[0]}, ${args[1]})`;
|
|
28
|
-
context.report({
|
|
29
|
-
message: "preferSliceOverSubstring",
|
|
30
|
-
range: getTSNodeRange(node.expression.name, sourceFile),
|
|
31
|
-
suggestions: [{
|
|
32
|
-
id: "replaceWithSlice",
|
|
33
|
-
range: {
|
|
34
|
-
begin: node.getStart(sourceFile),
|
|
35
|
-
end: node.getEnd()
|
|
36
|
-
},
|
|
37
|
-
text: replacement
|
|
38
|
-
}]
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
} } };
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
//#endregion
|
|
45
|
-
export { stringSliceMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports regex patterns that can be replaced with `endsWith` or `startsWith`.";
|
|
3
|
-
readonly id: "stringStartsEndsWith";
|
|
4
|
-
readonly presets: readonly ["stylistic"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferEndsWith" | "preferStartsWith", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/stringStartsEndsWith.ts
|
|
5
|
-
const REGEX_METACHARACTERS = /[+[{(.?*|\\]/;
|
|
6
|
-
function escapeString(str) {
|
|
7
|
-
return str.replace(/["'\\]/g, "\\$&");
|
|
8
|
-
}
|
|
9
|
-
function isSimpleString(pattern) {
|
|
10
|
-
return !REGEX_METACHARACTERS.test(pattern);
|
|
11
|
-
}
|
|
12
|
-
var stringStartsEndsWith_default = ruleCreator.createRule(typescriptLanguage, {
|
|
13
|
-
about: {
|
|
14
|
-
description: "Reports regex patterns that can be replaced with `endsWith` or `startsWith`.",
|
|
15
|
-
id: "stringStartsEndsWith",
|
|
16
|
-
presets: ["stylistic"]
|
|
17
|
-
},
|
|
18
|
-
messages: {
|
|
19
|
-
preferEndsWith: {
|
|
20
|
-
primary: "Prefer `endsWith()` over a regex with `$` for readability.",
|
|
21
|
-
secondary: ["`endsWith` is generally more readable than using a regular expression."],
|
|
22
|
-
suggestions: ["Replace the regular expression with `endsWith()`."]
|
|
23
|
-
},
|
|
24
|
-
preferStartsWith: {
|
|
25
|
-
primary: "Prefer `startsWith()` over a regex with `^` for readability.",
|
|
26
|
-
secondary: ["`startsWith` is generally more readable than using a regular expression."],
|
|
27
|
-
suggestions: ["Replace the regular expression with `startsWith()`."]
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
setup(context) {
|
|
31
|
-
return { visitors: { CallExpression(node, { sourceFile }) {
|
|
32
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
33
|
-
if (node.expression.name.text !== "test") return;
|
|
34
|
-
const callee = node.expression.expression;
|
|
35
|
-
if (!ts$1.isRegularExpressionLiteral(callee)) return;
|
|
36
|
-
const regexText = callee.text;
|
|
37
|
-
const match = /^\/(.*)\/([gimsuy]*)$/.exec(regexText);
|
|
38
|
-
if (!match) return;
|
|
39
|
-
const pattern = match[1];
|
|
40
|
-
const flags = match[2];
|
|
41
|
-
if (flags.includes("i") || flags.includes("m")) return;
|
|
42
|
-
const argument = node.arguments[0];
|
|
43
|
-
if (!argument) return;
|
|
44
|
-
const argumentText = argument.getText(sourceFile);
|
|
45
|
-
const callRange = getTSNodeRange(node, sourceFile);
|
|
46
|
-
if (pattern.startsWith("^") && !pattern.endsWith("$")) {
|
|
47
|
-
const stringPart = pattern.slice(1);
|
|
48
|
-
if (isSimpleString(stringPart)) context.report({
|
|
49
|
-
fix: {
|
|
50
|
-
range: callRange,
|
|
51
|
-
text: `${argumentText}.startsWith("${escapeString(stringPart)}")`
|
|
52
|
-
},
|
|
53
|
-
message: "preferStartsWith",
|
|
54
|
-
range: {
|
|
55
|
-
begin: callee.getStart(sourceFile),
|
|
56
|
-
end: callee.getEnd()
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
} else if (pattern.endsWith("$") && !pattern.startsWith("^")) {
|
|
60
|
-
const stringPart = pattern.slice(0, -1);
|
|
61
|
-
if (isSimpleString(stringPart)) context.report({
|
|
62
|
-
fix: {
|
|
63
|
-
range: callRange,
|
|
64
|
-
text: `${argumentText}.endsWith("${escapeString(stringPart)}")`
|
|
65
|
-
},
|
|
66
|
-
message: "preferEndsWith",
|
|
67
|
-
range: {
|
|
68
|
-
begin: callee.getStart(sourceFile),
|
|
69
|
-
end: callee.getEnd()
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
} } };
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
//#endregion
|
|
77
|
-
export { stringStartsEndsWith_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports JSON.parse(JSON.stringify()) patterns that can use structuredClone.";
|
|
3
|
-
readonly id: "structuredCloneMethods";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferStructuredClone", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { isCallExpression, isIdentifier, isPropertyAccessExpression, isSpreadElement } from "typescript";
|
|
4
|
-
//#region src/rules/structuredCloneMethods.ts
|
|
5
|
-
function isJsonMethod(node, methodName, typeChecker, program) {
|
|
6
|
-
return isCallExpression(node) && isPropertyAccessExpression(node.expression) && isIdentifier(node.expression.expression) && isGlobalDeclarationOfName(node.expression.expression, "JSON", typeChecker, program) && node.expression.expression.text === "JSON" && node.expression.name.text === methodName;
|
|
7
|
-
}
|
|
8
|
-
var structuredCloneMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports JSON.parse(JSON.stringify()) patterns that can use structuredClone.",
|
|
11
|
-
id: "structuredCloneMethods",
|
|
12
|
-
presets: ["logical"]
|
|
13
|
-
},
|
|
14
|
-
messages: { preferStructuredClone: {
|
|
15
|
-
primary: "Prefer `structuredClone()` over `JSON.parse(JSON.stringify())`.",
|
|
16
|
-
secondary: ["structuredClone is the native deep cloning API available in modern JavaScript.", "It properly handles circular references and more data types than JSON methods."],
|
|
17
|
-
suggestions: ["Replace with structuredClone()."]
|
|
18
|
-
} },
|
|
19
|
-
setup(context) {
|
|
20
|
-
return { visitors: { CallExpression(node, { program, sourceFile, typeChecker }) {
|
|
21
|
-
if (!isJsonMethod(node, "parse", typeChecker, program) || node.arguments.length !== 1) return;
|
|
22
|
-
const argument = node.arguments[0];
|
|
23
|
-
if (isSpreadElement(argument) || !isJsonMethod(argument, "stringify", typeChecker, program) || argument.arguments.length !== 1) return;
|
|
24
|
-
const stringifyArgument = argument.arguments[0];
|
|
25
|
-
if (isSpreadElement(stringifyArgument)) return;
|
|
26
|
-
context.report({
|
|
27
|
-
message: "preferStructuredClone",
|
|
28
|
-
range: {
|
|
29
|
-
begin: node.getStart(sourceFile),
|
|
30
|
-
end: node.getEnd()
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { structuredCloneMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports Symbol() calls without description arguments.";
|
|
3
|
-
readonly id: "symbolDescriptions";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingDescription", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/symbolDescriptions.ts
|
|
5
|
-
var symbolDescriptions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports Symbol() calls without description arguments.",
|
|
8
|
-
id: "symbolDescriptions",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { missingDescription: {
|
|
12
|
-
primary: "Symbols without descriptions are more difficult to debug or reason about.",
|
|
13
|
-
secondary: ["Creating a symbol without a description makes debugging difficult, as the symbol's purpose isn't clear when inspecting it.", "While the description doesn't affect the symbol's uniqueness, it appears in the symbol's string representation and can be accessed via `Symbol.prototype.description`."],
|
|
14
|
-
suggestions: ["Add a descriptive string argument to the Symbol constructor that explains the symbol's purpose."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { CallExpression: (node, { sourceFile }) => {
|
|
18
|
-
if (node.expression.kind !== SyntaxKind.Identifier || node.expression.text !== "Symbol" || node.arguments.length) return;
|
|
19
|
-
context.report({
|
|
20
|
-
message: "missingDescription",
|
|
21
|
-
range: {
|
|
22
|
-
begin: node.getStart(sourceFile),
|
|
23
|
-
end: node.getEnd()
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
} } };
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
//#endregion
|
|
30
|
-
export { symbolDescriptions_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports assigning `this` to a variable.";
|
|
3
|
-
readonly id: "thisAliases";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noThisAlias", undefined>;
|
|
9
|
-
export default _default;
|