@flint.fyi/ts 0.21.0 → 0.23.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 +22468 -0
- package/package.json +9 -8
- 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,73 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/forDirections.ts
|
|
5
|
-
function getConditionDirection(condition, counterName) {
|
|
6
|
-
if (condition.kind !== SyntaxKind.BinaryExpression) return;
|
|
7
|
-
const leftName = getCounterName(condition.left);
|
|
8
|
-
const rightName = getCounterName(condition.right);
|
|
9
|
-
if (!leftName && !rightName) return condition.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken ? getConditionDirection(condition.left, counterName) ?? getConditionDirection(condition.right, counterName) : void 0;
|
|
10
|
-
const isCounterLeft = leftName === counterName;
|
|
11
|
-
if (!isCounterLeft && !(rightName === counterName)) return;
|
|
12
|
-
const { operatorToken } = condition;
|
|
13
|
-
if (isCounterLeft) {
|
|
14
|
-
if (operatorToken.kind === SyntaxKind.LessThanToken || operatorToken.kind === SyntaxKind.LessThanEqualsToken) return 1;
|
|
15
|
-
if (operatorToken.kind === SyntaxKind.GreaterThanToken || operatorToken.kind === SyntaxKind.GreaterThanEqualsToken) return -1;
|
|
16
|
-
} else {
|
|
17
|
-
if (operatorToken.kind === SyntaxKind.LessThanToken || operatorToken.kind === SyntaxKind.LessThanEqualsToken) return -1;
|
|
18
|
-
if (operatorToken.kind === SyntaxKind.GreaterThanToken || operatorToken.kind === SyntaxKind.GreaterThanEqualsToken) return 1;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function getCounterName(node) {
|
|
22
|
-
return node.kind === SyntaxKind.Identifier ? node.text : void 0;
|
|
23
|
-
}
|
|
24
|
-
function getIncrementorDirection(incrementor) {
|
|
25
|
-
if (incrementor.kind === SyntaxKind.PostfixUnaryExpression || incrementor.kind === SyntaxKind.PrefixUnaryExpression) switch (incrementor.operator) {
|
|
26
|
-
case SyntaxKind.MinusMinusToken: return -1;
|
|
27
|
-
case SyntaxKind.PlusPlusToken: return 1;
|
|
28
|
-
default: return;
|
|
29
|
-
}
|
|
30
|
-
if (incrementor.kind === SyntaxKind.BinaryExpression) {
|
|
31
|
-
const { operatorToken, right } = incrementor;
|
|
32
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken || operatorToken.kind === SyntaxKind.MinusEqualsToken) {
|
|
33
|
-
if (right.kind === SyntaxKind.NumericLiteral) {
|
|
34
|
-
const value = Number(right.text);
|
|
35
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken) return value > 0 ? 1 : value < 0 ? -1 : 0;
|
|
36
|
-
return value > 0 ? -1 : value < 0 ? 1 : 0;
|
|
37
|
-
}
|
|
38
|
-
if (right.kind === SyntaxKind.PrefixUnaryExpression && right.operator === SyntaxKind.MinusToken && right.operand.kind === SyntaxKind.NumericLiteral) {
|
|
39
|
-
const value = Number(right.operand.text);
|
|
40
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken) return value > 0 ? -1 : 1;
|
|
41
|
-
return value > 0 ? 1 : -1;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
var forDirections_default = ruleCreator.createRule(typescriptLanguage, {
|
|
47
|
-
about: {
|
|
48
|
-
description: "Reports for loops with counter variables that move in the wrong direction.",
|
|
49
|
-
id: "forDirections",
|
|
50
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
51
|
-
},
|
|
52
|
-
messages: { wrongDirection: {
|
|
53
|
-
primary: "The update moves the counter in the wrong direction for this loop condition.",
|
|
54
|
-
secondary: ["A for loop with a counter that moves in the wrong direction relative to its stop condition will run infinitely or never execute.", "When the counter increases but the condition expects it to decrease (or vice versa), the loop logic is incorrect."],
|
|
55
|
-
suggestions: ["Verify the loop counter update direction matches the condition."]
|
|
56
|
-
} },
|
|
57
|
-
setup(context) {
|
|
58
|
-
return { visitors: { ForStatement: (node, { sourceFile }) => {
|
|
59
|
-
if (!node.condition || !node.incrementor || node.initializer?.kind !== SyntaxKind.VariableDeclarationList) return;
|
|
60
|
-
const declaration = node.initializer.declarations.at(0);
|
|
61
|
-
if (declaration?.name.kind !== SyntaxKind.Identifier) return;
|
|
62
|
-
const updateDirection = getIncrementorDirection(node.incrementor);
|
|
63
|
-
if (!updateDirection) return;
|
|
64
|
-
const conditionDirection = getConditionDirection(node.condition, declaration.name.text);
|
|
65
|
-
if (conditionDirection && conditionDirection !== updateDirection) context.report({
|
|
66
|
-
message: "wrongDirection",
|
|
67
|
-
range: getTSNodeRange(node.incrementor, sourceFile)
|
|
68
|
-
});
|
|
69
|
-
} } };
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
//#endregion
|
|
73
|
-
export { forDirections_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports iterating over an array with a for-in loop.";
|
|
3
|
-
readonly id: "forInArrays";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "forIn", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/forInArrays.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { isTypeRecursive } from "./utils/isTypeRecursive.js";
|
|
4
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import ts from "typescript";
|
|
6
|
-
import * as tsutils from "ts-api-utils";
|
|
7
|
-
//#region src/rules/forInArrays.ts
|
|
8
|
-
var forInArrays_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports iterating over an array with a for-in loop.",
|
|
11
|
-
id: "forInArrays",
|
|
12
|
-
presets: ["logical", "logicalStrict"]
|
|
13
|
-
},
|
|
14
|
-
messages: { forIn: {
|
|
15
|
-
primary: "For-in loops over arrays have surprising behavior that often leads to bugs.",
|
|
16
|
-
secondary: [
|
|
17
|
-
"A for-in loop (`for (const i in o)`) iterates over all enumerable properties of an object, including those that are not array indices.",
|
|
18
|
-
"This can lead to unexpected behavior when used with arrays, as it may include properties that are not part of the array's numeric indices.",
|
|
19
|
-
"It also returns the index key (`i`) as a string, which is not the expected numeric type for array indices."
|
|
20
|
-
],
|
|
21
|
-
suggestions: ["Use a construct more suited for arrays, such as a for-of loop (`for (const i of o)`)."]
|
|
22
|
-
} },
|
|
23
|
-
setup(context) {
|
|
24
|
-
function hasNumberLikeLength(type, typeChecker) {
|
|
25
|
-
const lengthProperty = type.getProperty("length");
|
|
26
|
-
if (lengthProperty == null) return false;
|
|
27
|
-
return tsutils.isTypeFlagSet(typeChecker.getTypeOfSymbol(lengthProperty), ts.TypeFlags.NumberLike);
|
|
28
|
-
}
|
|
29
|
-
function isArrayLike(type, typeChecker) {
|
|
30
|
-
return isTypeRecursive(type, (t) => t.getNumberIndexType() != null && hasNumberLikeLength(t, typeChecker));
|
|
31
|
-
}
|
|
32
|
-
return { visitors: { ForInStatement: (node, { sourceFile, typeChecker }) => {
|
|
33
|
-
if (isArrayLike(getConstrainedTypeAtLocation(node.expression, typeChecker), typeChecker)) context.report({
|
|
34
|
-
message: "forIn",
|
|
35
|
-
range: {
|
|
36
|
-
begin: node.getStart(sourceFile),
|
|
37
|
-
end: node.statement.getStart(sourceFile) - 1
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
} } };
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
//#endregion
|
|
44
|
-
export { forInArrays_default as default };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports for-in loops without an if statement to filter inherited properties.";
|
|
3
|
-
readonly id: "forInGuards";
|
|
4
|
-
} & {
|
|
5
|
-
readonly pluginId: string;
|
|
6
|
-
readonly url: string;
|
|
7
|
-
}, "missingGuard", undefined>;
|
|
8
|
-
export default _default;
|
package/lib/rules/forInGuards.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/forInGuards.ts
|
|
5
|
-
function isIfStatementGuard(node) {
|
|
6
|
-
if (ts.isContinueStatement(node.thenStatement)) return true;
|
|
7
|
-
if (ts.isBlock(node.thenStatement) && node.thenStatement.statements.length === 1 && ts.isContinueStatement(node.thenStatement.statements[0])) return true;
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
var forInGuards_default = ruleCreator.createRule(typescriptLanguage, {
|
|
11
|
-
about: {
|
|
12
|
-
description: "Reports for-in loops without an if statement to filter inherited properties.",
|
|
13
|
-
id: "forInGuards"
|
|
14
|
-
},
|
|
15
|
-
messages: { missingGuard: {
|
|
16
|
-
primary: "For-in loop body should be wrapped in an if statement to filter inherited properties.",
|
|
17
|
-
secondary: ["Looping over objects with a for-in loop will include properties inherited through the prototype chain.", "This behavior can lead to unexpected items being iterated over."],
|
|
18
|
-
suggestions: ["Wrap the loop body with `if (Object.hasOwn(object, key))` or `if (Object.prototype.hasOwnProperty.call(object, key))`."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { ForInStatement: (node, { sourceFile }) => {
|
|
22
|
-
switch (node.statement.kind) {
|
|
23
|
-
case ts.SyntaxKind.EmptyStatement:
|
|
24
|
-
case ts.SyntaxKind.IfStatement: return;
|
|
25
|
-
case ts.SyntaxKind.Block: {
|
|
26
|
-
if (!node.statement.statements.length) return;
|
|
27
|
-
const firstStatement = node.statement.statements[0];
|
|
28
|
-
if (firstStatement.kind === ts.SyntaxKind.IfStatement && (node.statement.statements.length === 1 || isIfStatementGuard(firstStatement))) return;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
context.report({
|
|
32
|
-
message: "missingGuard",
|
|
33
|
-
range: {
|
|
34
|
-
begin: node.getStart(sourceFile),
|
|
35
|
-
end: node.statement.getStart(sourceFile)
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
} } };
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
//#endregion
|
|
42
|
-
export { forInGuards_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer the spread operator over `.apply()` calls.";
|
|
3
|
-
readonly id: "functionApplySpreads";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferSpread", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, hasSameTokens, isFunction, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/functionApplySpreads.ts
|
|
5
|
-
var functionApplySpreads_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Prefer the spread operator over `.apply()` calls.",
|
|
8
|
-
id: "functionApplySpreads",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferSpread: {
|
|
12
|
-
primary: "Use the spread operator instead of `.apply()`.",
|
|
13
|
-
secondary: ["The spread operator (`...`) provides cleaner syntax for variadic function calls.", "`func.apply(thisArg, args)` can be replaced with `func.call(thisArg, ...args)` or `thisArg.func(...args)`."],
|
|
14
|
-
suggestions: ["Replace `.apply(thisArg, args)` with spread syntax like `func(...args)`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function isNullOrUndefined(node) {
|
|
18
|
-
return node.kind === SyntaxKind.NullKeyword || node.kind === SyntaxKind.Identifier && node.text === "undefined";
|
|
19
|
-
}
|
|
20
|
-
function isApplyCall(node) {
|
|
21
|
-
if (node.expression.kind !== SyntaxKind.PropertyAccessExpression) return false;
|
|
22
|
-
const propertyAccess = node.expression;
|
|
23
|
-
if (propertyAccess.name.kind !== SyntaxKind.Identifier) return false;
|
|
24
|
-
return propertyAccess.name.text === "apply";
|
|
25
|
-
}
|
|
26
|
-
function getVariadicArgumentsNode(node) {
|
|
27
|
-
if (!isApplyCall(node) || node.arguments.length !== 2) return;
|
|
28
|
-
const argumentsNode = node.arguments[1];
|
|
29
|
-
if (argumentsNode.kind === SyntaxKind.ArrayLiteralExpression || argumentsNode.kind === SyntaxKind.SpreadElement) return;
|
|
30
|
-
return argumentsNode;
|
|
31
|
-
}
|
|
32
|
-
function getExpectedThis(node) {
|
|
33
|
-
const applied = node.expression;
|
|
34
|
-
if (applied.kind === SyntaxKind.PropertyAccessExpression) return applied.expression;
|
|
35
|
-
}
|
|
36
|
-
function isValidThisArg(expectedThis, thisArg, sourceFile) {
|
|
37
|
-
return expectedThis ? hasSameTokens(expectedThis, thisArg, sourceFile) : isNullOrUndefined(thisArg);
|
|
38
|
-
}
|
|
39
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
40
|
-
const argumentsNode = getVariadicArgumentsNode(node);
|
|
41
|
-
if (!argumentsNode) return;
|
|
42
|
-
if (!ts.isPropertyAccessExpression(node.expression) || !isFunction(node.expression.expression, typeChecker)) return;
|
|
43
|
-
const expectedThis = getExpectedThis(node.expression);
|
|
44
|
-
const thisArg = node.arguments[0];
|
|
45
|
-
if (!isValidThisArg(expectedThis, thisArg, sourceFile)) return;
|
|
46
|
-
const argumentsText = argumentsNode.getText(sourceFile);
|
|
47
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
48
|
-
const fixedText = `${node.expression.expression.getText(sourceFile)}(...${argumentsText})`;
|
|
49
|
-
context.report({
|
|
50
|
-
fix: {
|
|
51
|
-
range,
|
|
52
|
-
text: fixedText
|
|
53
|
-
},
|
|
54
|
-
message: "preferSpread",
|
|
55
|
-
range
|
|
56
|
-
});
|
|
57
|
-
} } };
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
//#endregion
|
|
61
|
-
export { functionApplySpreads_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports reassigning variables declared with function declarations.";
|
|
3
|
-
readonly id: "functionAssignments";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noFunctionAssignment", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getModifyingReferences, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/functionAssignments.ts
|
|
4
|
-
var functionAssignments_default = ruleCreator.createRule(typescriptLanguage, {
|
|
5
|
-
about: {
|
|
6
|
-
description: "Reports reassigning variables declared with function declarations.",
|
|
7
|
-
id: "functionAssignments",
|
|
8
|
-
presets: ["javascript"]
|
|
9
|
-
},
|
|
10
|
-
messages: { noFunctionAssignment: {
|
|
11
|
-
primary: "Variables declared with function declarations should not be reassigned.",
|
|
12
|
-
secondary: ["Reassigning a function declaration can make code harder to understand and maintain.", "Function declarations are hoisted to the top of their scope, and reassigning them can lead to unexpected behavior."],
|
|
13
|
-
suggestions: ["Use a function expression or const variable instead if you need to reassign the function."]
|
|
14
|
-
} },
|
|
15
|
-
setup(context) {
|
|
16
|
-
return { visitors: { FunctionDeclaration: (node, { sourceFile }) => {
|
|
17
|
-
if (!node.name) return;
|
|
18
|
-
const modifyingReferences = getModifyingReferences(node.name, sourceFile);
|
|
19
|
-
for (const reference of modifyingReferences) context.report({
|
|
20
|
-
message: "noFunctionAssignment",
|
|
21
|
-
range: getTSNodeRange(reference, sourceFile)
|
|
22
|
-
});
|
|
23
|
-
} } };
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
//#endregion
|
|
27
|
-
export { functionAssignments_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.apply()` or `.call()` or when the context (`this` value) provides no benefit.";
|
|
3
|
-
readonly id: "functionCurryingRedundancy";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryCall", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isFunction, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
5
|
-
//#region src/rules/functionCurryingRedundancy.ts
|
|
6
|
-
var functionCurryingRedundancy_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports using `.apply()` or `.call()` or when the context (`this` value) provides no benefit.",
|
|
9
|
-
id: "functionCurryingRedundancy",
|
|
10
|
-
presets: ["logical", "logicalStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { unnecessaryCall: {
|
|
13
|
-
primary: "This \"currying\" of a function without a defined context does nothing and can be simplified.",
|
|
14
|
-
secondary: ["Using `.{{ method }}()` with null or undefined as the context provides no benefit over a direct function call.", "This adds unnecessary complexity and reduces code readability."],
|
|
15
|
-
suggestions: ["Replace the `.{{ method }}()` with a direct function call."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
19
|
-
if (node.expression.kind !== SyntaxKind.PropertyAccessExpression) return;
|
|
20
|
-
const method = node.expression.name.text;
|
|
21
|
-
if (method !== "call" && method !== "apply" || !node.arguments.length || !isFunction(node.expression.expression, typeChecker)) return;
|
|
22
|
-
const firstArgument = nullThrows(node.arguments[0], "First argument is expected to be present by prior length check");
|
|
23
|
-
if (firstArgument.kind !== SyntaxKind.NullKeyword && !(firstArgument.kind === SyntaxKind.Identifier && firstArgument.text === "undefined")) return;
|
|
24
|
-
const fixTextCreator = method === "apply" ? createApplyFixText : createCallFixText;
|
|
25
|
-
context.report({
|
|
26
|
-
data: { method },
|
|
27
|
-
fix: {
|
|
28
|
-
range: {
|
|
29
|
-
begin: node.getStart(sourceFile),
|
|
30
|
-
end: node.getEnd()
|
|
31
|
-
},
|
|
32
|
-
text: fixTextCreator(node.expression.expression.getText(sourceFile), node.arguments.slice(1), sourceFile)
|
|
33
|
-
},
|
|
34
|
-
message: "unnecessaryCall",
|
|
35
|
-
range: {
|
|
36
|
-
begin: node.expression.name.getStart(sourceFile) - 1,
|
|
37
|
-
end: node.getEnd()
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
} } };
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
function createApplyFixText(functionExpression, methodArguments, sourceFile) {
|
|
44
|
-
if (!methodArguments.length) return `${functionExpression}()`;
|
|
45
|
-
return `${functionExpression}(...${nullThrows(methodArguments[0], "First argument is expected to be present by prior length check").getText(sourceFile)})`;
|
|
46
|
-
}
|
|
47
|
-
function createCallFixText(functionExpression, methodArguments, sourceFile) {
|
|
48
|
-
return `${functionExpression}(${methodArguments.map((arg) => arg.getText(sourceFile)).join(", ")})`;
|
|
49
|
-
}
|
|
50
|
-
//#endregion
|
|
51
|
-
export { functionCurryingRedundancy_default as default };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { z } from "zod/v4";
|
|
2
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
3
|
-
readonly description: "Reports functions that don't match the configured style (declaration vs expression).";
|
|
4
|
-
readonly id: "functionDeclarationStyles";
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferDeclaration" | "preferExpression", {
|
|
9
|
-
allowArrowFunctions: z.ZodDefault<z.ZodBoolean>;
|
|
10
|
-
style: z.ZodDefault<z.ZodEnum<{
|
|
11
|
-
expression: "expression";
|
|
12
|
-
declaration: "declaration";
|
|
13
|
-
}>>;
|
|
14
|
-
}>;
|
|
15
|
-
export default _default;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
import { z as z$1 } from "zod/v4";
|
|
5
|
-
//#region src/rules/functionDeclarationStyles.ts
|
|
6
|
-
function isOverloadedDeclaration(node, sourceFile) {
|
|
7
|
-
if (!node.name) return false;
|
|
8
|
-
const statements = sourceFile.statements;
|
|
9
|
-
let count = 0;
|
|
10
|
-
for (const statement of statements) if (ts.isFunctionDeclaration(statement) && statement.name?.text === node.name.text) {
|
|
11
|
-
count++;
|
|
12
|
-
if (count > 1) return true;
|
|
13
|
-
}
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
var functionDeclarationStyles_default = ruleCreator.createRule(typescriptLanguage, {
|
|
17
|
-
about: {
|
|
18
|
-
description: "Reports functions that don't match the configured style (declaration vs expression).",
|
|
19
|
-
id: "functionDeclarationStyles"
|
|
20
|
-
},
|
|
21
|
-
messages: {
|
|
22
|
-
preferDeclaration: {
|
|
23
|
-
primary: "For consistency, this project prefers a function declaration instead of a function expression.",
|
|
24
|
-
secondary: ["Function declarations are hoisted and provide clearer intent for named functions."],
|
|
25
|
-
suggestions: ["Convert this function expression to a function declaration."]
|
|
26
|
-
},
|
|
27
|
-
preferExpression: {
|
|
28
|
-
primary: "For consistency, this project prefers a function expression instead of a function declaration.",
|
|
29
|
-
secondary: ["Function expressions assigned to variables provide consistent syntax with arrow functions."],
|
|
30
|
-
suggestions: ["Convert this function declaration to a function expression assigned to a variable."]
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
options: {
|
|
34
|
-
allowArrowFunctions: z$1.boolean().default(false).describe("Whether to allow arrow functions when style is 'declaration'."),
|
|
35
|
-
style: z$1.enum(["declaration", "expression"]).default("expression").describe("Which function style to enforce: 'declaration' for function declarations or 'expression' for function expressions.")
|
|
36
|
-
},
|
|
37
|
-
setup(context) {
|
|
38
|
-
return { visitors: {
|
|
39
|
-
FunctionDeclaration: (node, { options, sourceFile }) => {
|
|
40
|
-
if (options.style !== "expression" || !node.name || isOverloadedDeclaration(node, sourceFile)) return;
|
|
41
|
-
context.report({
|
|
42
|
-
message: "preferExpression",
|
|
43
|
-
range: getTSNodeRange(node.name, sourceFile)
|
|
44
|
-
});
|
|
45
|
-
},
|
|
46
|
-
VariableStatement: (node, { options, sourceFile }) => {
|
|
47
|
-
if (options.style !== "declaration") return;
|
|
48
|
-
for (const declaration of node.declarationList.declarations) switch (declaration.initializer?.kind) {
|
|
49
|
-
case ts.SyntaxKind.ArrowFunction:
|
|
50
|
-
if (!options.allowArrowFunctions) context.report({
|
|
51
|
-
message: "preferDeclaration",
|
|
52
|
-
range: getTSNodeRange(declaration.name, sourceFile)
|
|
53
|
-
});
|
|
54
|
-
break;
|
|
55
|
-
case ts.SyntaxKind.FunctionExpression: context.report({
|
|
56
|
-
message: "preferDeclaration",
|
|
57
|
-
range: getTSNodeRange(declaration.name, sourceFile)
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
} };
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
//#endregion
|
|
65
|
-
export { functionDeclarationStyles_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports function names that don't match the variable or property they're assigned to.";
|
|
3
|
-
readonly id: "functionNameMatches";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "mismatch", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,72 +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/functionNameMatches.ts
|
|
5
|
-
function getNameText(name) {
|
|
6
|
-
return ts.isIdentifier(name) || ts.isPrivateIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name) ? name.text : void 0;
|
|
7
|
-
}
|
|
8
|
-
function getNameTextIfMismatched(functionName, name) {
|
|
9
|
-
const nameText = getNameText(name);
|
|
10
|
-
if (!nameText || nameText === functionName || !isValidIdentifier(nameText)) return;
|
|
11
|
-
return nameText;
|
|
12
|
-
}
|
|
13
|
-
function isValidIdentifier(name) {
|
|
14
|
-
return /^[\p{L}_$][\p{L}\d_$]*$/u.test(name);
|
|
15
|
-
}
|
|
16
|
-
var functionNameMatches_default = ruleCreator.createRule(typescriptLanguage, {
|
|
17
|
-
about: {
|
|
18
|
-
description: "Reports function names that don't match the variable or property they're assigned to.",
|
|
19
|
-
id: "functionNameMatches",
|
|
20
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
21
|
-
},
|
|
22
|
-
messages: { mismatch: {
|
|
23
|
-
primary: "Function name `{{ functionName }}` does not match assigned name `{{ assignedName }}`.",
|
|
24
|
-
secondary: ["When a named function expression is assigned to a variable or property, the function name should match to avoid confusion."],
|
|
25
|
-
suggestions: ["Rename the function to `{{ assignedName }}`", "Use an anonymous function."]
|
|
26
|
-
} },
|
|
27
|
-
setup(context) {
|
|
28
|
-
return { visitors: {
|
|
29
|
-
PropertyAssignment: (node, { sourceFile }) => {
|
|
30
|
-
if (!ts.isFunctionExpression(node.initializer) || !node.initializer.name) return;
|
|
31
|
-
const propertyName = getNameTextIfMismatched(node.initializer.name.text, node.name);
|
|
32
|
-
if (!propertyName) return;
|
|
33
|
-
context.report({
|
|
34
|
-
data: {
|
|
35
|
-
assignedName: propertyName,
|
|
36
|
-
functionName: node.initializer.name.text
|
|
37
|
-
},
|
|
38
|
-
message: "mismatch",
|
|
39
|
-
range: getTSNodeRange(node.initializer.name, sourceFile)
|
|
40
|
-
});
|
|
41
|
-
},
|
|
42
|
-
PropertyDeclaration: (node, { sourceFile }) => {
|
|
43
|
-
if (!node.initializer || !ts.isFunctionExpression(node.initializer) || node.name.kind !== ts.SyntaxKind.Identifier || !node.initializer.name) return;
|
|
44
|
-
const propertyName = getNameTextIfMismatched(node.initializer.name.text, node.name);
|
|
45
|
-
if (!propertyName) return;
|
|
46
|
-
context.report({
|
|
47
|
-
data: {
|
|
48
|
-
assignedName: propertyName,
|
|
49
|
-
functionName: node.initializer.name.text
|
|
50
|
-
},
|
|
51
|
-
message: "mismatch",
|
|
52
|
-
range: getTSNodeRange(node.initializer.name, sourceFile)
|
|
53
|
-
});
|
|
54
|
-
},
|
|
55
|
-
VariableDeclaration: (node, { sourceFile }) => {
|
|
56
|
-
if (!node.initializer || !ts.isFunctionExpression(node.initializer) || !node.initializer.name || !ts.isIdentifier(node.name)) return;
|
|
57
|
-
const variableName = getNameTextIfMismatched(node.initializer.name.text, node.name);
|
|
58
|
-
if (!variableName) return;
|
|
59
|
-
context.report({
|
|
60
|
-
data: {
|
|
61
|
-
assignedName: variableName,
|
|
62
|
-
functionName: node.initializer.name.text
|
|
63
|
-
},
|
|
64
|
-
message: "mismatch",
|
|
65
|
-
range: getTSNodeRange(node.initializer.name, sourceFile)
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
} };
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
//#endregion
|
|
72
|
-
export { functionNameMatches_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the Function constructor to create functions from strings.";
|
|
3
|
-
readonly id: "functionNewCalls";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noFunctionConstructor", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclaration, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/functionNewCalls.ts
|
|
5
|
-
var functionNewCalls_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using the Function constructor to create functions from strings.",
|
|
8
|
-
id: "functionNewCalls",
|
|
9
|
-
presets: ["logical"]
|
|
10
|
-
},
|
|
11
|
-
messages: { noFunctionConstructor: {
|
|
12
|
-
primary: "Dynamically creating functions with the Function constructor is insecure and slow.",
|
|
13
|
-
secondary: ["Using the `Function` constructor to create functions from strings is similar to `eval()` and introduces security risks and performance issues.", "Code passed to the Function constructor is executed in the global scope, making it harder to optimize and potentially allowing arbitrary code execution if user input is involved."],
|
|
14
|
-
suggestions: ["Define functions using function declarations (`function name() {}`) or arrow functions (`() => {}`) instead.", "If dynamic code generation is truly necessary, consider safer alternatives like passing functions as parameters or using a more constrained domain-specific approach."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function checkNode(node, { program, sourceFile, typeChecker }) {
|
|
18
|
-
if (isFunctionConstructor(node, typeChecker, program)) context.report({
|
|
19
|
-
message: "noFunctionConstructor",
|
|
20
|
-
range: getTSNodeRange(node.expression, sourceFile)
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
function isFunctionConstructor(node, typeChecker, program) {
|
|
24
|
-
if (node.expression.kind === SyntaxKind.Identifier) {
|
|
25
|
-
if (isGlobalDeclarationOfName(node.expression, "Function", typeChecker, program)) return true;
|
|
26
|
-
} else if (node.expression.kind === SyntaxKind.PropertyAccessExpression && isGlobalDeclaration(node.expression, typeChecker, program)) {
|
|
27
|
-
if (node.expression.name.text !== "Function") return false;
|
|
28
|
-
const object = node.expression.expression;
|
|
29
|
-
if (object.kind === SyntaxKind.Identifier) return object.text === "globalThis" || object.text === "window";
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
return { visitors: {
|
|
34
|
-
CallExpression: checkNode,
|
|
35
|
-
NewExpression: checkNode
|
|
36
|
-
} };
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
//#endregion
|
|
40
|
-
export { functionNewCalls_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports generator functions that do not yield values.";
|
|
3
|
-
readonly id: "generatorFunctionYields";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingYield", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/generatorFunctionYields.ts
|
|
6
|
-
var generatorFunctionYields_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports generator functions that do not yield values.",
|
|
9
|
-
id: "generatorFunctionYields",
|
|
10
|
-
presets: ["logical"]
|
|
11
|
-
},
|
|
12
|
-
messages: { missingYield: {
|
|
13
|
-
primary: "Generator functions must contain at least one yield expression to produce values.",
|
|
14
|
-
secondary: [
|
|
15
|
-
"Generator functions use the `function*` syntax to create iterators that can produce multiple values over time.",
|
|
16
|
-
"Without a yield expression, the generator will not produce any values and behaves like an empty iterator.",
|
|
17
|
-
"This is likely unintentional and indicates incomplete implementation or a misunderstanding of generator functions."
|
|
18
|
-
],
|
|
19
|
-
suggestions: ["Add a `yield` expression to produce values from the generator.", "If the function should not be a generator, remove the asterisk (`*`) from the function declaration."]
|
|
20
|
-
} },
|
|
21
|
-
setup(context) {
|
|
22
|
-
return { visitors: {
|
|
23
|
-
FunctionDeclaration: checkFunction,
|
|
24
|
-
FunctionExpression: checkFunction,
|
|
25
|
-
MethodDeclaration: checkFunction
|
|
26
|
-
} };
|
|
27
|
-
function checkFunction(node, { sourceFile }) {
|
|
28
|
-
if (!node.asteriskToken || !node.body || blockContainsYield(node.body)) return;
|
|
29
|
-
context.report({
|
|
30
|
-
message: "missingYield",
|
|
31
|
-
range: {
|
|
32
|
-
begin: node.asteriskToken.getStart(sourceFile),
|
|
33
|
-
end: node.asteriskToken.getEnd()
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
function blockContainsYield(block) {
|
|
40
|
-
function checkForYield(node) {
|
|
41
|
-
if (node.kind === SyntaxKind.YieldExpression) return true;
|
|
42
|
-
if (tsutils.isFunctionScopeBoundary(node)) return false;
|
|
43
|
-
return ts.forEachChild(node, checkForYield);
|
|
44
|
-
}
|
|
45
|
-
return ts.forEachChild(block, checkForYield);
|
|
46
|
-
}
|
|
47
|
-
//#endregion
|
|
48
|
-
export { generatorFunctionYields_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports getter functions that do not return values.";
|
|
3
|
-
readonly id: "getterReturns";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingReturn", undefined>;
|
|
9
|
-
export default _default;
|