@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,71 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { 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/arrayCallbackReturns.ts
|
|
6
|
-
const arrayMethodsRequiringReturn = /* @__PURE__ */ new Set([
|
|
7
|
-
"every",
|
|
8
|
-
"filter",
|
|
9
|
-
"find",
|
|
10
|
-
"findIndex",
|
|
11
|
-
"findLast",
|
|
12
|
-
"findLastIndex",
|
|
13
|
-
"flatMap",
|
|
14
|
-
"map",
|
|
15
|
-
"reduce",
|
|
16
|
-
"reduceRight",
|
|
17
|
-
"some",
|
|
18
|
-
"sort",
|
|
19
|
-
"toSorted"
|
|
20
|
-
]);
|
|
21
|
-
var arrayCallbackReturns_default = ruleCreator.createRule(typescriptLanguage, {
|
|
22
|
-
about: {
|
|
23
|
-
description: "Reports missing return statements in callbacks of array methods.",
|
|
24
|
-
id: "arrayCallbackReturns",
|
|
25
|
-
presets: ["javascript"]
|
|
26
|
-
},
|
|
27
|
-
messages: { missingReturn: {
|
|
28
|
-
primary: "Array method `{{ method }}` callback expects a return value.",
|
|
29
|
-
secondary: ["Array methods like `map`, `filter`, `find`, and `reduce` rely on return values from their callbacks.", "A missing return statement is often a mistake that causes the array method to produce unexpected results."],
|
|
30
|
-
suggestions: ["Add a return statement to the callback function.", "If you don't need the return value, consider using `forEach` instead."]
|
|
31
|
-
} },
|
|
32
|
-
setup(context) {
|
|
33
|
-
return { visitors: { CallExpression: (node, { sourceFile }) => {
|
|
34
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
35
|
-
const methodName = node.expression.name.text;
|
|
36
|
-
if (!arrayMethodsRequiringReturn.has(methodName)) return;
|
|
37
|
-
const callback = node.arguments[0];
|
|
38
|
-
if (!callback) return;
|
|
39
|
-
const body = getCallbackBody(callback);
|
|
40
|
-
if (!body) return;
|
|
41
|
-
if (!hasReturnWithValue(body)) context.report({
|
|
42
|
-
data: { method: methodName },
|
|
43
|
-
message: "missingReturn",
|
|
44
|
-
range: {
|
|
45
|
-
begin: callback.getStart(sourceFile),
|
|
46
|
-
end: callback.getEnd()
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
} } };
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
function getCallbackBody(node) {
|
|
53
|
-
if (ts$1.isArrowFunction(node)) return ts$1.isBlock(node.body) ? node.body : void 0;
|
|
54
|
-
if (ts$1.isFunctionExpression(node)) return node.body;
|
|
55
|
-
}
|
|
56
|
-
function hasReturnWithValue(block) {
|
|
57
|
-
let hasReturn = false;
|
|
58
|
-
function visit(node) {
|
|
59
|
-
if (hasReturn) return;
|
|
60
|
-
if (ts$1.isReturnStatement(node) && node.expression) {
|
|
61
|
-
hasReturn = true;
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (tsutils.isFunctionScopeBoundary(node)) return;
|
|
65
|
-
ts$1.forEachChild(node, visit);
|
|
66
|
-
}
|
|
67
|
-
ts$1.forEachChild(block, visit);
|
|
68
|
-
return hasReturn;
|
|
69
|
-
}
|
|
70
|
-
//#endregion
|
|
71
|
-
export { arrayCallbackReturns_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the `Array` constructor to create arrays instead of array literal syntax.";
|
|
3
|
-
readonly id: "arrayConstructors";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferLiteral", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arrayConstructors.ts
|
|
5
|
-
var arrayConstructors_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using the `Array` constructor to create arrays instead of array literal syntax.",
|
|
8
|
-
id: "arrayConstructors",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferLiteral: {
|
|
12
|
-
primary: "Prefer array literal syntax over the `Array` constructor.",
|
|
13
|
-
secondary: ["The `Array` constructor has confusing behavior with a single numeric argument, creating a sparse array instead of an array containing that number.", "Array literal syntax is clearer and avoids potential pitfalls."],
|
|
14
|
-
suggestions: ["Use array literal syntax like `[]` or `[1, 2, 3]`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function checkNode(node, { program, sourceFile, typeChecker }) {
|
|
18
|
-
if (!ts$1.isIdentifier(node.expression) || node.expression.text !== "Array" || shouldAllowCallOrNew(node) || !isGlobalDeclarationOfName(node.expression, "Array", typeChecker, program)) return;
|
|
19
|
-
const argumentsText = node.arguments?.map((arg) => arg.getText(sourceFile)).join(", ");
|
|
20
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
21
|
-
context.report({
|
|
22
|
-
fix: {
|
|
23
|
-
range,
|
|
24
|
-
text: `[${argumentsText}]`
|
|
25
|
-
},
|
|
26
|
-
message: "preferLiteral",
|
|
27
|
-
range
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
return { visitors: {
|
|
31
|
-
CallExpression: checkNode,
|
|
32
|
-
NewExpression: checkNode
|
|
33
|
-
} };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
function getSoleArgument(node) {
|
|
37
|
-
return node.arguments?.length === 1 ? node.arguments[0] : void 0;
|
|
38
|
-
}
|
|
39
|
-
function shouldAllowCallOrNew(node) {
|
|
40
|
-
if (node.typeArguments && !!node.typeArguments.length) return true;
|
|
41
|
-
const soleArgument = getSoleArgument(node);
|
|
42
|
-
return !!soleArgument && ts$1.isNumericLiteral(soleArgument);
|
|
43
|
-
}
|
|
44
|
-
//#endregion
|
|
45
|
-
export { arrayConstructors_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.length` or `Infinity` as the `deleteCount` or `skipCount` argument of `Array#splice()` or `Array#toSpliced()`.";
|
|
3
|
-
readonly id: "arrayDeleteUnnecessaryCounts";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryCount", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
//#region src/rules/arrayDeleteUnnecessaryCounts.ts
|
|
6
|
-
function isUnnecessaryCountArgument(argumentRoot, calleeObject, sourceFile) {
|
|
7
|
-
const argument = unwrapParenthesizedNode(argumentRoot);
|
|
8
|
-
switch (argument.kind) {
|
|
9
|
-
case ts$1.SyntaxKind.Identifier: return argument.text === "Infinity" ? "`Infinity`" : void 0;
|
|
10
|
-
case ts$1.SyntaxKind.PropertyAccessExpression:
|
|
11
|
-
if (ts$1.isIdentifier(argument.expression) && argument.expression.text === "Number" && ts$1.isIdentifier(argument.name) && argument.name.text === "POSITIVE_INFINITY") return "`Number.POSITIVE_INFINITY`";
|
|
12
|
-
if (ts$1.isIdentifier(argument.name) && argument.name.text === "length" && hasSameTokens(argument.expression, calleeObject, sourceFile)) return `\`${ts$1.isIdentifier(calleeObject) ? calleeObject.text : "…"}${argument.questionDotToken ? "?." : "."}length\``;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
var arrayDeleteUnnecessaryCounts_default = ruleCreator.createRule(typescriptLanguage, {
|
|
16
|
-
about: {
|
|
17
|
-
description: "Reports using `.length` or `Infinity` as the `deleteCount` or `skipCount` argument of `Array#splice()` or `Array#toSpliced()`.",
|
|
18
|
-
id: "arrayDeleteUnnecessaryCounts",
|
|
19
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
20
|
-
},
|
|
21
|
-
messages: { unnecessaryCount: {
|
|
22
|
-
primary: "Passing {{ description }} as the {{ argumentName }} argument is unnecessary.",
|
|
23
|
-
secondary: ["When calling `splice` or `toSpliced`, omitting the second argument will delete or skip all elements after the start index.", "Using `.length` or `Infinity` is redundant and makes the code less clear."],
|
|
24
|
-
suggestions: ["Omit the second argument to achieve the same result."]
|
|
25
|
-
} },
|
|
26
|
-
setup(context) {
|
|
27
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
28
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || !ts$1.isIdentifier(node.expression.name)) return;
|
|
29
|
-
const methodName = node.expression.name.text;
|
|
30
|
-
if (methodName !== "splice" && methodName !== "toSpliced") return;
|
|
31
|
-
if (!typeChecker.isArrayType(getConstrainedTypeAtLocation(node.expression.expression, typeChecker))) return;
|
|
32
|
-
if (node.arguments.length !== 2) return;
|
|
33
|
-
const firstArg = node.arguments[0];
|
|
34
|
-
if (ts$1.isSpreadElement(firstArg)) return;
|
|
35
|
-
const secondArg = node.arguments[1];
|
|
36
|
-
if (ts$1.isSpreadElement(secondArg)) return;
|
|
37
|
-
const description = isUnnecessaryCountArgument(secondArg, node.expression.expression, sourceFile);
|
|
38
|
-
if (!description) return;
|
|
39
|
-
const argumentName = methodName === "splice" ? "`deleteCount`" : "`skipCount`";
|
|
40
|
-
context.report({
|
|
41
|
-
data: {
|
|
42
|
-
argumentName,
|
|
43
|
-
description
|
|
44
|
-
},
|
|
45
|
-
message: "unnecessaryCount",
|
|
46
|
-
range: getTSNodeRange(secondArg, sourceFile)
|
|
47
|
-
});
|
|
48
|
-
} } };
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
//#endregion
|
|
52
|
-
export { arrayDeleteUnnecessaryCounts_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the `delete` operator on array values.";
|
|
3
|
-
readonly id: "arrayElementDeletions";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noArrayDelete", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
//#region src/rules/arrayElementDeletions.ts
|
|
6
|
-
function buildSpliceReplacement(node, elementAccess, sourceFile) {
|
|
7
|
-
const children = elementAccess.getChildren(sourceFile);
|
|
8
|
-
const openBracket = children.find((child) => child.kind === ts$1.SyntaxKind.OpenBracketToken);
|
|
9
|
-
const closeBracket = children.find((child) => child.kind === ts$1.SyntaxKind.CloseBracketToken);
|
|
10
|
-
return `${sourceFile.text.slice(node.getStart(sourceFile) + 6, openBracket?.getStart(sourceFile) ?? elementAccess.expression.getEnd())}.splice(${sourceFile.text.slice(openBracket?.getEnd() ?? elementAccess.argumentExpression.getStart(sourceFile), closeBracket?.getStart(sourceFile) ?? elementAccess.argumentExpression.getEnd())}, 1)`;
|
|
11
|
-
}
|
|
12
|
-
var arrayElementDeletions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
13
|
-
about: {
|
|
14
|
-
description: "Reports using the `delete` operator on array values.",
|
|
15
|
-
id: "arrayElementDeletions",
|
|
16
|
-
presets: ["logical", "logicalStrict"]
|
|
17
|
-
},
|
|
18
|
-
messages: { noArrayDelete: {
|
|
19
|
-
primary: "Avoid using the `delete` operator on arrays.",
|
|
20
|
-
secondary: ["Using `delete` on an array element removes it but leaves an empty slot, which can lead to unexpected behavior.", "The array's `length` property is not affected, and the element becomes `undefined` with a hole in the array."],
|
|
21
|
-
suggestions: ["Use `Array#splice()` to remove elements."]
|
|
22
|
-
} },
|
|
23
|
-
setup(context) {
|
|
24
|
-
return { visitors: { DeleteExpression: (node, { sourceFile, typeChecker }) => {
|
|
25
|
-
if (!ts$1.isElementAccessExpression(node.expression) || !isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker)) return;
|
|
26
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
27
|
-
const spliceText = buildSpliceReplacement(node, node.expression, sourceFile);
|
|
28
|
-
context.report({
|
|
29
|
-
message: "noArrayDelete",
|
|
30
|
-
range,
|
|
31
|
-
suggestions: [{
|
|
32
|
-
id: "useSplice",
|
|
33
|
-
range,
|
|
34
|
-
text: spliceText
|
|
35
|
-
}]
|
|
36
|
-
});
|
|
37
|
-
} } };
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
//#endregion
|
|
41
|
-
export { arrayElementDeletions_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports array methods with callbacks that will never be invoked on arrays with empty slots.";
|
|
3
|
-
readonly id: "arrayEmptyCallbackSlots";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "neverInvoked", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticNumberValue, getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arrayEmptyCallbackSlots.ts
|
|
5
|
-
function hasCallbackArgument(callExpression) {
|
|
6
|
-
if (!callExpression.arguments.length) return false;
|
|
7
|
-
const firstArgument = callExpression.arguments[0];
|
|
8
|
-
return ts$1.isArrowFunction(firstArgument) || ts$1.isFunctionExpression(firstArgument) || ts$1.isIdentifier(firstArgument) && firstArgument.text !== "undefined";
|
|
9
|
-
}
|
|
10
|
-
var arrayEmptyCallbackSlots_default = ruleCreator.createRule(typescriptLanguage, {
|
|
11
|
-
about: {
|
|
12
|
-
description: "Reports array methods with callbacks that will never be invoked on arrays with empty slots.",
|
|
13
|
-
id: "arrayEmptyCallbackSlots",
|
|
14
|
-
presets: ["logical", "logicalStrict"]
|
|
15
|
-
},
|
|
16
|
-
messages: { neverInvoked: {
|
|
17
|
-
primary: "This callback will not be invoked.",
|
|
18
|
-
secondary: ["When the Array constructor is called with a single number argument, it creates an array with empty slots (not actual undefined values).", "Callback methods like `map`, `filter`, `forEach`, etc. skip empty slots, so the callback will never run."],
|
|
19
|
-
suggestions: ["Use `Array.from({ length: n }, callback)` instead.", "Use `new Array(n).fill(undefined).map(callback)` to fill slots first."]
|
|
20
|
-
} },
|
|
21
|
-
setup(context) {
|
|
22
|
-
return { visitors: { CallExpression: (node, { program, sourceFile, typeChecker }) => {
|
|
23
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
24
|
-
const objectExpression = node.expression.expression;
|
|
25
|
-
if (!ts$1.isNewExpression(objectExpression) || !ts$1.isIdentifier(objectExpression.expression) || !isGlobalDeclarationOfName(objectExpression.expression, "Array", typeChecker, program)) return;
|
|
26
|
-
const args = objectExpression.arguments;
|
|
27
|
-
if (args?.length !== 1) return;
|
|
28
|
-
const firstArgument = args[0];
|
|
29
|
-
if (getStaticNumberValue(firstArgument) === void 0 || !hasCallbackArgument(node)) return;
|
|
30
|
-
context.report({
|
|
31
|
-
message: "neverInvoked",
|
|
32
|
-
range: getTSNodeRange(node.expression.name, sourceFile)
|
|
33
|
-
});
|
|
34
|
-
} } };
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
//#endregion
|
|
38
|
-
export { arrayEmptyCallbackSlots_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports inconsistent styles for checking element existence using index methods.";
|
|
3
|
-
readonly id: "arrayExistenceChecksConsistency";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferEqualsMinusOne" | "preferNotEqualsMinusOne", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,84 +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/arrayExistenceChecksConsistency.ts
|
|
5
|
-
const indexMethods = /* @__PURE__ */ new Set([
|
|
6
|
-
"findIndex",
|
|
7
|
-
"findLastIndex",
|
|
8
|
-
"indexOf",
|
|
9
|
-
"lastIndexOf"
|
|
10
|
-
]);
|
|
11
|
-
var arrayExistenceChecksConsistency_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports inconsistent styles for checking element existence using index methods.",
|
|
14
|
-
id: "arrayExistenceChecksConsistency",
|
|
15
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
16
|
-
},
|
|
17
|
-
messages: {
|
|
18
|
-
preferEqualsMinusOne: {
|
|
19
|
-
primary: "Prefer `{{ replacement }}` over `{{ original }}` to check for non-existence.",
|
|
20
|
-
secondary: ["Using `=== -1` is clearer and more consistent than `< 0`.", "Index methods return -1 when an element is not found, so checking against -1 is more explicit."],
|
|
21
|
-
suggestions: ["Replace with `{{ replacement }}`."]
|
|
22
|
-
},
|
|
23
|
-
preferNotEqualsMinusOne: {
|
|
24
|
-
primary: "Prefer `{{ replacement }}` over `{{ original }}` to check for existence.",
|
|
25
|
-
secondary: ["Using `!== -1` is clearer and more consistent than `>= 0` or `> -1`.", "Index methods return -1 when an element is not found, so checking against -1 is more explicit."],
|
|
26
|
-
suggestions: ["Replace with `{{ replacement }}`."]
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
setup(context) {
|
|
30
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
31
|
-
if (!isComparisonOperator(node.operatorToken.kind) || !isIndexMethodCall(node.left)) return;
|
|
32
|
-
const numberValue = getNumericLiteralValue(node.right);
|
|
33
|
-
if (numberValue === void 0) return;
|
|
34
|
-
const issue = detectIssue(node.operatorToken.kind, numberValue);
|
|
35
|
-
if (!issue) return;
|
|
36
|
-
const indexCallText = node.left.getText(sourceFile);
|
|
37
|
-
const original = `${indexCallText} ${getOperatorText(node.operatorToken.kind)} ${numberValue}`;
|
|
38
|
-
const replacement = `${indexCallText} ${issue[1]} -1`;
|
|
39
|
-
context.report({
|
|
40
|
-
data: {
|
|
41
|
-
original,
|
|
42
|
-
replacement
|
|
43
|
-
},
|
|
44
|
-
fix: {
|
|
45
|
-
range: getTSNodeRange(node, sourceFile),
|
|
46
|
-
text: replacement
|
|
47
|
-
},
|
|
48
|
-
message: issue[0],
|
|
49
|
-
range: {
|
|
50
|
-
begin: node.operatorToken.getStart(sourceFile),
|
|
51
|
-
end: node.right.getEnd()
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
} } };
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
function detectIssue(operator, value) {
|
|
58
|
-
switch (operator) {
|
|
59
|
-
case ts$1.SyntaxKind.GreaterThanEqualsToken: return value === 0 && ["preferNotEqualsMinusOne", "!=="];
|
|
60
|
-
case ts$1.SyntaxKind.GreaterThanToken: return value === -1 && ["preferNotEqualsMinusOne", "!=="];
|
|
61
|
-
case ts$1.SyntaxKind.LessThanToken: return value === 0 && ["preferEqualsMinusOne", "==="];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function getNumericLiteralValue(node) {
|
|
65
|
-
if (ts$1.isNumericLiteral(node)) return Number(node.text);
|
|
66
|
-
if (ts$1.isPrefixUnaryExpression(node) && node.operator === ts$1.SyntaxKind.MinusToken && ts$1.isNumericLiteral(node.operand)) return -Number(node.operand.text);
|
|
67
|
-
}
|
|
68
|
-
function getOperatorText(kind) {
|
|
69
|
-
switch (kind) {
|
|
70
|
-
case ts$1.SyntaxKind.GreaterThanEqualsToken: return ">=";
|
|
71
|
-
case ts$1.SyntaxKind.GreaterThanToken: return ">";
|
|
72
|
-
case ts$1.SyntaxKind.LessThanEqualsToken: return "<=";
|
|
73
|
-
case ts$1.SyntaxKind.LessThanToken: return "<";
|
|
74
|
-
default: return "";
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
function isComparisonOperator(kind) {
|
|
78
|
-
return kind === ts$1.SyntaxKind.LessThanToken || kind === ts$1.SyntaxKind.LessThanEqualsToken || kind === ts$1.SyntaxKind.GreaterThanToken || kind === ts$1.SyntaxKind.GreaterThanEqualsToken;
|
|
79
|
-
}
|
|
80
|
-
function isIndexMethodCall(node) {
|
|
81
|
-
return ts$1.isCallExpression(node) && ts$1.isPropertyAccessExpression(node.expression) && indexMethods.has(node.expression.name.text) && node;
|
|
82
|
-
}
|
|
83
|
-
//#endregion
|
|
84
|
-
export { arrayExistenceChecksConsistency_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.filter()` when only the first or last matching element is needed.";
|
|
3
|
-
readonly id: "arrayFilteredFinds";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferFind" | "preferFindLast", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
3
|
-
import { getStaticNumberValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
//#region src/rules/arrayFilteredFinds.ts
|
|
6
|
-
function isArrayFilterCall(node, typeChecker) {
|
|
7
|
-
return ts$1.isCallExpression(node) && ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "filter" && !!node.arguments.length && node.arguments.length <= 2 && isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker);
|
|
8
|
-
}
|
|
9
|
-
var arrayFilteredFinds_default = ruleCreator.createRule(typescriptLanguage, {
|
|
10
|
-
about: {
|
|
11
|
-
description: "Reports using `.filter()` when only the first or last matching element is needed.",
|
|
12
|
-
id: "arrayFilteredFinds",
|
|
13
|
-
presets: ["logical", "logicalStrict"]
|
|
14
|
-
},
|
|
15
|
-
messages: {
|
|
16
|
-
preferFind: {
|
|
17
|
-
primary: "Prefer `.find()` over `.filter()[0]`.",
|
|
18
|
-
secondary: ["Using `.filter()` to get only the first matching element creates an unnecessary intermediate array.", "The `.find()` method is more efficient as it stops iteration once a match is found."],
|
|
19
|
-
suggestions: ["Replace `.filter(callback)[0]` with `.find(callback)`."]
|
|
20
|
-
},
|
|
21
|
-
preferFindLast: {
|
|
22
|
-
primary: "Prefer `.findLast()` over `.filter().pop()` or `.filter().at(-1)`.",
|
|
23
|
-
secondary: ["Using `.filter()` to get only the last matching element creates an unnecessary intermediate array.", "The `.findLast()` method is more efficient as it iterates from the end and stops once a match is found."],
|
|
24
|
-
suggestions: ["Replace `.filter(callback).pop()` or `.filter(callback).at(-1)` with `.findLast(callback)`."]
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
setup(context) {
|
|
28
|
-
return { visitors: {
|
|
29
|
-
CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
30
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
31
|
-
const methodName = node.expression.name.text;
|
|
32
|
-
const objectExpression = node.expression.expression;
|
|
33
|
-
switch (methodName) {
|
|
34
|
-
case "pop":
|
|
35
|
-
if (!node.arguments.length && isArrayFilterCall(objectExpression, typeChecker)) context.report({
|
|
36
|
-
message: "preferFindLast",
|
|
37
|
-
range: getTSNodeRange(node, sourceFile)
|
|
38
|
-
});
|
|
39
|
-
return;
|
|
40
|
-
case "shift":
|
|
41
|
-
if (!node.arguments.length && isArrayFilterCall(objectExpression, typeChecker)) context.report({
|
|
42
|
-
message: "preferFind",
|
|
43
|
-
range: getTSNodeRange(node, sourceFile)
|
|
44
|
-
});
|
|
45
|
-
return;
|
|
46
|
-
case "at": if (node.arguments.length === 1) {
|
|
47
|
-
const arg = node.arguments[0];
|
|
48
|
-
if (getStaticNumberValue(arg) === 0 && isArrayFilterCall(objectExpression, typeChecker)) {
|
|
49
|
-
context.report({
|
|
50
|
-
message: "preferFind",
|
|
51
|
-
range: getTSNodeRange(node, sourceFile)
|
|
52
|
-
});
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (getStaticNumberValue(arg) === -1 && isArrayFilterCall(objectExpression, typeChecker)) context.report({
|
|
56
|
-
message: "preferFindLast",
|
|
57
|
-
range: getTSNodeRange(node, sourceFile)
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
ElementAccessExpression: (node, { sourceFile, typeChecker }) => {
|
|
63
|
-
if (getStaticNumberValue(node.argumentExpression) === 0 && isArrayFilterCall(node.expression, typeChecker)) context.report({
|
|
64
|
-
message: "preferFind",
|
|
65
|
-
range: getTSNodeRange(node, sourceFile)
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
} };
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
//#endregion
|
|
72
|
-
export { arrayFilteredFinds_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.filter()[0]` instead of `.find()` when looking for a single element.";
|
|
3
|
-
readonly id: "arrayFinds";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferFind", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/arrayFinds.js
DELETED
|
@@ -1,39 +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/arrayFinds.ts
|
|
5
|
-
var arrayFinds_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using `.filter()[0]` instead of `.find()` when looking for a single element.",
|
|
8
|
-
id: "arrayFinds",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferFind: {
|
|
12
|
-
primary: "Prefer `.find()` over `.filter()[0]` when looking for a single element.",
|
|
13
|
-
secondary: ["Using `.find()` is more efficient because it stops searching after finding the first match.", "`.filter()[0]` unnecessarily iterates through the entire array."],
|
|
14
|
-
suggestions: ["Replace `.filter(...)[0]` with `.find(...)`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { ElementAccessExpression: (node, { sourceFile, typeChecker }) => {
|
|
18
|
-
if (!ts$1.isNumericLiteral(node.argumentExpression) || node.argumentExpression.text !== "0" || !isFilterCall(node.expression, typeChecker)) return;
|
|
19
|
-
const arrayText = node.expression.expression.expression.getText(sourceFile);
|
|
20
|
-
const filterArgumentsText = node.expression.arguments.map((arg) => arg.getText(sourceFile)).join(", ");
|
|
21
|
-
context.report({
|
|
22
|
-
fix: {
|
|
23
|
-
range: getTSNodeRange(node, sourceFile),
|
|
24
|
-
text: `${arrayText}.find(${filterArgumentsText})`
|
|
25
|
-
},
|
|
26
|
-
message: "preferFind",
|
|
27
|
-
range: {
|
|
28
|
-
begin: node.expression.expression.name.getStart(sourceFile),
|
|
29
|
-
end: node.getEnd()
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
} } };
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
function isFilterCall(node, typeChecker) {
|
|
36
|
-
return ts$1.isCallExpression(node) && ts$1.isPropertyAccessExpression(node.expression) && !!node.arguments.length && node.expression.name.text === "filter" && typeChecker.isArrayType(typeChecker.getTypeAtLocation(node.expression.expression));
|
|
37
|
-
}
|
|
38
|
-
//#endregion
|
|
39
|
-
export { arrayFinds_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.map().flat()` when `.flatMap()` can be used.";
|
|
3
|
-
readonly id: "arrayFlatMapMethods";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferFlatMap", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
3
|
-
import { getStaticNumberValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
//#region src/rules/arrayFlatMapMethods.ts
|
|
6
|
-
function isArrayMapCall(node, typeChecker) {
|
|
7
|
-
return ts$1.isCallExpression(node) && ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "map" && node.arguments.length >= 1 && isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker);
|
|
8
|
-
}
|
|
9
|
-
function isFlatCallWithDepthOne(node) {
|
|
10
|
-
switch (node.arguments.length) {
|
|
11
|
-
case 0: return true;
|
|
12
|
-
case 1: {
|
|
13
|
-
const firstArgument = node.arguments[0];
|
|
14
|
-
return getStaticNumberValue(firstArgument) === 1;
|
|
15
|
-
}
|
|
16
|
-
default: return false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
var arrayFlatMapMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
20
|
-
about: {
|
|
21
|
-
description: "Reports using `.map().flat()` when `.flatMap()` can be used.",
|
|
22
|
-
id: "arrayFlatMapMethods",
|
|
23
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
24
|
-
},
|
|
25
|
-
messages: { preferFlatMap: {
|
|
26
|
-
primary: "Prefer `.flatMap()` over `.map().flat()`.",
|
|
27
|
-
secondary: ["`.flatMap()` combines mapping and flattening in a single step, which is more concise and efficient.", "Using `.map().flat()` creates an intermediate array that is immediately discarded."],
|
|
28
|
-
suggestions: ["Replace `.map(callback).flat()` with `.flatMap(callback)`."]
|
|
29
|
-
} },
|
|
30
|
-
setup(context) {
|
|
31
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
32
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
33
|
-
if (node.expression.name.text !== "flat") return;
|
|
34
|
-
if (!isFlatCallWithDepthOne(node)) return;
|
|
35
|
-
const objectExpression = node.expression.expression;
|
|
36
|
-
if (!isArrayMapCall(objectExpression, typeChecker)) return;
|
|
37
|
-
context.report({
|
|
38
|
-
message: "preferFlatMap",
|
|
39
|
-
range: getTSNodeRange(node, sourceFile)
|
|
40
|
-
});
|
|
41
|
-
} } };
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
//#endregion
|
|
45
|
-
export { arrayFlatMapMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports legacy techniques to flatten arrays instead of using `.flat()`.";
|
|
3
|
-
readonly id: "arrayFlatMethods";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferFlat", undefined>;
|
|
9
|
-
export default _default;
|