@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,81 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { skipParentheses } from "./utils/skipParentheses.js";
|
|
3
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import * as ts$1 from "typescript";
|
|
6
|
-
//#region src/rules/arrayFlatMethods.ts
|
|
7
|
-
function isConcatApply(node, typeChecker) {
|
|
8
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "apply") return false;
|
|
9
|
-
const callExpression = node.expression.expression;
|
|
10
|
-
if (!ts$1.isPropertyAccessExpression(callExpression) || callExpression.name.text !== "concat") return false;
|
|
11
|
-
const concatObject = callExpression.expression;
|
|
12
|
-
const isEmptyArrayConcat = isEmptyArrayLiteral(concatObject);
|
|
13
|
-
const isArrayPrototypeConcat = ts$1.isPropertyAccessExpression(concatObject) && ts$1.isIdentifier(concatObject.expression) && concatObject.expression.text === "Array" && concatObject.name.text === "prototype";
|
|
14
|
-
if (!isEmptyArrayConcat && !isArrayPrototypeConcat || node.arguments.length !== 2) return false;
|
|
15
|
-
const firstArg = node.arguments[0];
|
|
16
|
-
if (!isEmptyArrayLiteral(firstArg)) return false;
|
|
17
|
-
const secondArg = node.arguments[1];
|
|
18
|
-
if (!secondArg) return false;
|
|
19
|
-
return isArrayOrTupleTypeAtLocation(secondArg, typeChecker);
|
|
20
|
-
}
|
|
21
|
-
function isConcatCall(node, typeChecker) {
|
|
22
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "call") return false;
|
|
23
|
-
const callExpression = node.expression.expression;
|
|
24
|
-
if (!ts$1.isPropertyAccessExpression(callExpression) || callExpression.name.text !== "concat") return false;
|
|
25
|
-
const concatObject = callExpression.expression;
|
|
26
|
-
if (!ts$1.isPropertyAccessExpression(concatObject) || !ts$1.isIdentifier(concatObject.expression) || concatObject.expression.text !== "Array" || concatObject.name.text !== "prototype") return false;
|
|
27
|
-
if (node.arguments.length !== 2) return false;
|
|
28
|
-
const firstArg = node.arguments[0];
|
|
29
|
-
if (!isEmptyArrayLiteral(firstArg)) return false;
|
|
30
|
-
const secondArg = node.arguments[1];
|
|
31
|
-
if (!ts$1.isSpreadElement(secondArg)) return false;
|
|
32
|
-
return isArrayOrTupleTypeAtLocation(secondArg.expression, typeChecker);
|
|
33
|
-
}
|
|
34
|
-
function isConcatSpread(node, typeChecker) {
|
|
35
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "concat") return false;
|
|
36
|
-
const object = node.expression.expression;
|
|
37
|
-
if (!isEmptyArrayLiteral(object)) return false;
|
|
38
|
-
if (node.arguments.length !== 1) return false;
|
|
39
|
-
const arg = node.arguments[0];
|
|
40
|
-
if (!arg || !ts$1.isSpreadElement(arg)) return false;
|
|
41
|
-
return isArrayOrTupleTypeAtLocation(arg.expression, typeChecker);
|
|
42
|
-
}
|
|
43
|
-
function isEmptyArrayLiteral(node) {
|
|
44
|
-
return ts$1.isArrayLiteralExpression(node) && !node.elements.length;
|
|
45
|
-
}
|
|
46
|
-
function isIdentityArrowFunction(node) {
|
|
47
|
-
const expression = skipParentheses(node);
|
|
48
|
-
if (!ts$1.isArrowFunction(expression) || expression.parameters.length !== 1) return false;
|
|
49
|
-
const param = expression.parameters[0];
|
|
50
|
-
if (!ts$1.isIdentifier(param.name)) return false;
|
|
51
|
-
const body = skipParentheses(expression.body);
|
|
52
|
-
return body.kind === ts$1.SyntaxKind.Identifier && body.text === param.name.text;
|
|
53
|
-
}
|
|
54
|
-
function isIdentityFlatMapCall(node, typeChecker) {
|
|
55
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "flatMap" || node.arguments.length !== 1) return false;
|
|
56
|
-
const arg = node.arguments[0];
|
|
57
|
-
if (!isIdentityArrowFunction(arg)) return false;
|
|
58
|
-
return isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker);
|
|
59
|
-
}
|
|
60
|
-
var arrayFlatMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
61
|
-
about: {
|
|
62
|
-
description: "Reports legacy techniques to flatten arrays instead of using `.flat()`.",
|
|
63
|
-
id: "arrayFlatMethods",
|
|
64
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
65
|
-
},
|
|
66
|
-
messages: { preferFlat: {
|
|
67
|
-
primary: "Prefer `.flat()` over legacy array flattening techniques.",
|
|
68
|
-
secondary: ["ES2019 introduced `Array.prototype.flat()` as the standard way to flatten arrays.", "Using modern array methods improves code readability and consistency."],
|
|
69
|
-
suggestions: ["Replace this with `.flat()`."]
|
|
70
|
-
} },
|
|
71
|
-
setup(context) {
|
|
72
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
73
|
-
if (isIdentityFlatMapCall(node, typeChecker) || isConcatSpread(node, typeChecker) || isConcatApply(node, typeChecker) || isConcatCall(node, typeChecker)) context.report({
|
|
74
|
-
message: "preferFlat",
|
|
75
|
-
range: getTSNodeRange(node, sourceFile)
|
|
76
|
-
});
|
|
77
|
-
} } };
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
//#endregion
|
|
81
|
-
export { arrayFlatMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `1` as the depth argument of `.flat()` since it is the default.";
|
|
3
|
-
readonly id: "arrayFlatUnnecessaryDepths";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryDepth", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,31 +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/arrayFlatUnnecessaryDepths.ts
|
|
6
|
-
var arrayFlatUnnecessaryDepths_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports using `1` as the depth argument of `.flat()` since it is the default.",
|
|
9
|
-
id: "arrayFlatUnnecessaryDepths",
|
|
10
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { unnecessaryDepth: {
|
|
13
|
-
primary: "Unnecessary depth argument of `1` in `.flat()` call.",
|
|
14
|
-
secondary: ["The default depth for `.flat()` is `1`, so passing it explicitly is redundant."],
|
|
15
|
-
suggestions: ["Remove the depth argument."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
19
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "flat" || node.arguments.length !== 1) return;
|
|
20
|
-
const arg = node.arguments[0];
|
|
21
|
-
if (getStaticNumberValue(arg) !== 1) return;
|
|
22
|
-
if (!isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker)) return;
|
|
23
|
-
context.report({
|
|
24
|
-
message: "unnecessaryDepth",
|
|
25
|
-
range: getTSNodeRange(arg, sourceFile)
|
|
26
|
-
});
|
|
27
|
-
} } };
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
//#endregion
|
|
31
|
-
export { arrayFlatUnnecessaryDepths_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.indexOf()` comparisons that can be replaced with `.includes()`.";
|
|
3
|
-
readonly id: "arrayIncludes";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferIncludes", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getStaticNumberValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
//#region src/rules/arrayIncludes.ts
|
|
6
|
-
function hasIncludesMethod(node, typeChecker) {
|
|
7
|
-
const includesProperty = getConstrainedTypeAtLocation(node, typeChecker).getProperty("includes");
|
|
8
|
-
return includesProperty && !!typeChecker.getTypeOfSymbol(includesProperty).getCallSignatures().length;
|
|
9
|
-
}
|
|
10
|
-
function isIndexOfCall(node) {
|
|
11
|
-
return ts$1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "indexOf";
|
|
12
|
-
}
|
|
13
|
-
function isIndexOfComparison(node, typeChecker) {
|
|
14
|
-
const { left, operatorToken, right } = node;
|
|
15
|
-
let indexOfAndValue;
|
|
16
|
-
if (ts$1.isCallExpression(left) && isIndexOfCall(left)) indexOfAndValue = [left, right];
|
|
17
|
-
else if (ts$1.isCallExpression(right) && isIndexOfCall(right)) indexOfAndValue = [right, left];
|
|
18
|
-
if (!indexOfAndValue) return;
|
|
19
|
-
const [indexOfCall, comparedValue] = indexOfAndValue;
|
|
20
|
-
if (!ts$1.isPropertyAccessExpression(indexOfCall.expression) || !hasIncludesMethod(indexOfCall.expression.expression, typeChecker)) return;
|
|
21
|
-
const kind = operatorToken.kind;
|
|
22
|
-
const comparedNumber = getStaticNumberValue(comparedValue);
|
|
23
|
-
const indexOfOnLeft = ts$1.isCallExpression(left);
|
|
24
|
-
return (comparedNumber === -1 && (kind === ts$1.SyntaxKind.ExclamationEqualsToken || kind === ts$1.SyntaxKind.ExclamationEqualsEqualsToken || kind === ts$1.SyntaxKind.EqualsEqualsToken || kind === ts$1.SyntaxKind.EqualsEqualsEqualsToken || indexOfOnLeft && kind === ts$1.SyntaxKind.GreaterThanToken || !indexOfOnLeft && kind === ts$1.SyntaxKind.LessThanToken) || comparedNumber === 0 && (indexOfOnLeft && kind === ts$1.SyntaxKind.GreaterThanEqualsToken || !indexOfOnLeft && kind === ts$1.SyntaxKind.LessThanEqualsToken)) && {
|
|
25
|
-
indexOfCall,
|
|
26
|
-
node
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
var arrayIncludes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
30
|
-
about: {
|
|
31
|
-
description: "Reports using `.indexOf()` comparisons that can be replaced with `.includes()`.",
|
|
32
|
-
id: "arrayIncludes",
|
|
33
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
34
|
-
},
|
|
35
|
-
messages: { preferIncludes: {
|
|
36
|
-
primary: "Prefer the cleaner `.includes()` over `.indexOf()` with a binary comparison.",
|
|
37
|
-
secondary: ["Using `.includes()` is more readable and expressive than comparing `.indexOf()` against `-1` or `0`.", "ES2015 added `String.prototype.includes()` and ES2016 added `Array.prototype.includes()` for this purpose."],
|
|
38
|
-
suggestions: ["Replace the `.indexOf()` comparison with `.includes()`."]
|
|
39
|
-
} },
|
|
40
|
-
setup(context) {
|
|
41
|
-
return { visitors: { BinaryExpression: (node, { sourceFile, typeChecker }) => {
|
|
42
|
-
const result = isIndexOfComparison(node, typeChecker);
|
|
43
|
-
if (result) context.report({
|
|
44
|
-
message: "preferIncludes",
|
|
45
|
-
range: getTSNodeRange(result.node, sourceFile)
|
|
46
|
-
});
|
|
47
|
-
} } };
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
//#endregion
|
|
51
|
-
export { arrayIncludes_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `Array#some()` with simple equality checks that can be replaced with `.includes()`.";
|
|
3
|
-
readonly id: "arrayIncludesMethods";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferIncludes", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
3
|
-
import { isDirectEqualityCheck } from "./utils/isDirectEqualityCheck.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import * as ts$1 from "typescript";
|
|
6
|
-
//#region src/rules/arrayIncludesMethods.ts
|
|
7
|
-
function isSomeWithDirectEquality(node, typeChecker) {
|
|
8
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "some" || node.arguments.length !== 1) return false;
|
|
9
|
-
const callback = node.arguments[0];
|
|
10
|
-
if (!ts$1.isArrowFunction(callback) && !ts$1.isFunctionExpression(callback) || callback.parameters.length !== 1) return false;
|
|
11
|
-
const firstParameter = callback.parameters[0];
|
|
12
|
-
return firstParameter.name.kind === ts$1.SyntaxKind.Identifier && isDirectEqualityCheck(callback, [ts$1.SyntaxKind.EqualsEqualsToken, ts$1.SyntaxKind.EqualsEqualsEqualsToken], firstParameter.name.text) && isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker);
|
|
13
|
-
}
|
|
14
|
-
var arrayIncludesMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
15
|
-
about: {
|
|
16
|
-
description: "Reports using `Array#some()` with simple equality checks that can be replaced with `.includes()`.",
|
|
17
|
-
id: "arrayIncludesMethods",
|
|
18
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
19
|
-
},
|
|
20
|
-
messages: { preferIncludes: {
|
|
21
|
-
primary: "Prefer `.includes()` over `.some()` with a simple equality check.",
|
|
22
|
-
secondary: ["`Array.prototype.some()` is intended for more complex predicate checks.", "For simple equality checks, `.includes()` is more readable and expressive."],
|
|
23
|
-
suggestions: ["Replace `.some(x => x === value)` with `.includes(value)`."]
|
|
24
|
-
} },
|
|
25
|
-
setup(context) {
|
|
26
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
27
|
-
if (isSomeWithDirectEquality(node, typeChecker)) context.report({
|
|
28
|
-
message: "preferIncludes",
|
|
29
|
-
range: getTSNodeRange(node, sourceFile)
|
|
30
|
-
});
|
|
31
|
-
} } };
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
//#endregion
|
|
35
|
-
export { arrayIncludesMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.findIndex()` or `.findLastIndex()` with simple equality checks that can be replaced with `.indexOf()` or `.lastIndexOf()`.";
|
|
3
|
-
readonly id: "arrayIndexOfMethods";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferIndexOf" | "preferLastIndexOf", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
3
|
-
import { isDirectEqualityCheck } from "./utils/isDirectEqualityCheck.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import * as ts$1 from "typescript";
|
|
6
|
-
//#region src/rules/arrayIndexOfMethods.ts
|
|
7
|
-
function isFindIndexWithDirectEquality(node, typeChecker) {
|
|
8
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
9
|
-
const methodName = node.expression.name.text;
|
|
10
|
-
if (methodName !== "findIndex" && methodName !== "findLastIndex" || node.arguments.length !== 1) return;
|
|
11
|
-
const callback = node.arguments[0];
|
|
12
|
-
if (!ts$1.isArrowFunction(callback) && !ts$1.isFunctionExpression(callback) || callback.parameters.length !== 1) return;
|
|
13
|
-
const firstParameter = callback.parameters[0];
|
|
14
|
-
if (firstParameter.name.kind !== ts$1.SyntaxKind.Identifier || !isDirectEqualityCheck(callback, [ts$1.SyntaxKind.EqualsEqualsEqualsToken], firstParameter.name.text) || !isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker)) return;
|
|
15
|
-
return {
|
|
16
|
-
methodName,
|
|
17
|
-
node
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
var arrayIndexOfMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
21
|
-
about: {
|
|
22
|
-
description: "Reports using `.findIndex()` or `.findLastIndex()` with simple equality checks that can be replaced with `.indexOf()` or `.lastIndexOf()`.",
|
|
23
|
-
id: "arrayIndexOfMethods",
|
|
24
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
25
|
-
},
|
|
26
|
-
messages: {
|
|
27
|
-
preferIndexOf: {
|
|
28
|
-
primary: "Prefer `.indexOf()` over `.findIndex()` with a simple equality check.",
|
|
29
|
-
secondary: ["`.findIndex()` is intended for more complex predicate checks.", "For simple equality checks, `.indexOf()` is more readable."],
|
|
30
|
-
suggestions: ["Replace `.findIndex(x => x === value)` with `.indexOf(value)`."]
|
|
31
|
-
},
|
|
32
|
-
preferLastIndexOf: {
|
|
33
|
-
primary: "Prefer `.lastIndexOf()` over `.findLastIndex()` with a simple equality check.",
|
|
34
|
-
secondary: ["`.findLastIndex()` is intended for more complex predicate checks.", "For simple equality checks, `.lastIndexOf()` is more readable."],
|
|
35
|
-
suggestions: ["Replace `.findLastIndex(x => x === value)` with `.lastIndexOf(value)`."]
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
setup(context) {
|
|
39
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
40
|
-
const result = isFindIndexWithDirectEquality(node, typeChecker);
|
|
41
|
-
if (result) context.report({
|
|
42
|
-
message: result.methodName === "findIndex" ? "preferIndexOf" : "preferLastIndexOf",
|
|
43
|
-
range: getTSNodeRange(result.node, sourceFile)
|
|
44
|
-
});
|
|
45
|
-
} } };
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
//#endregion
|
|
49
|
-
export { arrayIndexOfMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.forEach()` when a for-of loop can be used.";
|
|
3
|
-
readonly id: "arrayLoops";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferForOf", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/arrayLoops.js
DELETED
|
@@ -1,34 +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/arrayLoops.ts
|
|
6
|
-
function isForEachCall(node) {
|
|
7
|
-
return node.expression.kind === ts$1.SyntaxKind.PropertyAccessExpression && node.expression.name.text === "forEach" && node.arguments.length >= 1;
|
|
8
|
-
}
|
|
9
|
-
var arrayLoops_default = ruleCreator.createRule(typescriptLanguage, {
|
|
10
|
-
about: {
|
|
11
|
-
description: "Reports using `.forEach()` when a for-of loop can be used.",
|
|
12
|
-
id: "arrayLoops",
|
|
13
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
14
|
-
},
|
|
15
|
-
messages: { preferForOf: {
|
|
16
|
-
primary: "Prefer a more direct for-of loop over `.forEach()`.",
|
|
17
|
-
secondary: [
|
|
18
|
-
"for-of loops are often more readable and offer benefits over `.forEach()`.",
|
|
19
|
-
"for-of allows using `break` to exit early, `continue` to skip iterations, and `return` to exit the containing function.",
|
|
20
|
-
"TypeScript type narrowing works better inside for-of loops since no function boundary is crossed."
|
|
21
|
-
],
|
|
22
|
-
suggestions: ["Replace `.forEach(callback)` with a for-of loop."]
|
|
23
|
-
} },
|
|
24
|
-
setup(context) {
|
|
25
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
26
|
-
if (isForEachCall(node) && isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker)) context.report({
|
|
27
|
-
message: "preferForOf",
|
|
28
|
-
range: getTSNodeRange(node, sourceFile)
|
|
29
|
-
});
|
|
30
|
-
} } };
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
//#endregion
|
|
34
|
-
export { arrayLoops_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `.flatMap()` with an identity function that returns its argument unchanged.";
|
|
3
|
-
readonly id: "arrayMapIdentities";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "identityFlatMap", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arrayMapIdentities.ts
|
|
5
|
-
var arrayMapIdentities_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using `.flatMap()` with an identity function that returns its argument unchanged.",
|
|
8
|
-
id: "arrayMapIdentities",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { identityFlatMap: {
|
|
12
|
-
primary: "Prefer `.flat()` over `.flatMap()` when the callback returns its argument unchanged.",
|
|
13
|
-
secondary: ["Using an identity function with `.flatMap()` is equivalent to calling `.flat()`.", "Using `.flat()` is more concise and expresses intent more clearly."],
|
|
14
|
-
suggestions: ["Replace `.flatMap(...)` with `.flat()`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { CallExpression: (node, { sourceFile }) => {
|
|
18
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "flatMap" || node.arguments.length !== 1) return;
|
|
19
|
-
const callback = node.arguments[0];
|
|
20
|
-
if (!isIdentityFunction(callback)) return;
|
|
21
|
-
const objectText = node.expression.expression.getText(sourceFile);
|
|
22
|
-
context.report({
|
|
23
|
-
fix: {
|
|
24
|
-
range: {
|
|
25
|
-
begin: node.getStart(sourceFile),
|
|
26
|
-
end: node.getEnd()
|
|
27
|
-
},
|
|
28
|
-
text: `${objectText}.flat()`
|
|
29
|
-
},
|
|
30
|
-
message: "identityFlatMap",
|
|
31
|
-
range: {
|
|
32
|
-
begin: node.expression.name.getStart(sourceFile) - 1,
|
|
33
|
-
end: node.getEnd()
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
} } };
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
function blockReturnsIdentifier(block, parameterName) {
|
|
40
|
-
if (block.statements.length !== 1) return false;
|
|
41
|
-
const statement = block.statements[0];
|
|
42
|
-
if (!ts$1.isReturnStatement(statement) || !statement.expression) return false;
|
|
43
|
-
return expressionMatchesName(statement.expression, parameterName);
|
|
44
|
-
}
|
|
45
|
-
function expressionMatchesName(expression, name) {
|
|
46
|
-
const unwrapped = ts$1.isParenthesizedExpression(expression) ? expression.expression : expression;
|
|
47
|
-
return ts$1.isIdentifier(unwrapped) && unwrapped.text === name;
|
|
48
|
-
}
|
|
49
|
-
function getSingleParameterName(parameters) {
|
|
50
|
-
if (parameters.length !== 1) return;
|
|
51
|
-
const parameter = parameters[0];
|
|
52
|
-
if (!ts$1.isIdentifier(parameter.name)) return;
|
|
53
|
-
return parameter.name.text;
|
|
54
|
-
}
|
|
55
|
-
function isIdentityArrowFunction(node) {
|
|
56
|
-
const parameterName = getSingleParameterName(node.parameters);
|
|
57
|
-
if (!parameterName) return false;
|
|
58
|
-
if (ts$1.isBlock(node.body)) return blockReturnsIdentifier(node.body, parameterName);
|
|
59
|
-
return expressionMatchesName(node.body, parameterName);
|
|
60
|
-
}
|
|
61
|
-
function isIdentityFunction(node) {
|
|
62
|
-
if (ts$1.isArrowFunction(node)) return isIdentityArrowFunction(node);
|
|
63
|
-
if (ts$1.isFunctionExpression(node)) return isIdentityFunctionExpression(node);
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
function isIdentityFunctionExpression(node) {
|
|
67
|
-
const parameterName = getSingleParameterName(node.parameters);
|
|
68
|
-
if (!parameterName) return false;
|
|
69
|
-
return blockReturnsIdentifier(node.body, parameterName);
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
export { arrayMapIdentities_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports `.reverse()` calls on arrays that mutate the original array.";
|
|
3
|
-
readonly id: "arrayMutableReverses";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferToReversed", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isBuiltinArrayMethod, isInlineArrayCreation, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/arrayMutableReverses.ts
|
|
4
|
-
var arrayMutableReverses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
5
|
-
about: {
|
|
6
|
-
description: "Reports `.reverse()` calls on arrays that mutate the original array.",
|
|
7
|
-
id: "arrayMutableReverses",
|
|
8
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
9
|
-
},
|
|
10
|
-
messages: { preferToReversed: {
|
|
11
|
-
primary: "Use `.toReversed()` instead of `.reverse()` to avoid mutating the original array.",
|
|
12
|
-
secondary: ["The `.reverse()` method mutates the array in place.", "The `.toReversed()` method returns a new reversed array without modifying the original."],
|
|
13
|
-
suggestions: ["Replace `.reverse()` with `.toReversed()`."]
|
|
14
|
-
} },
|
|
15
|
-
setup(context) {
|
|
16
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
17
|
-
if (!isBuiltinArrayMethod("reverse", node, typeChecker) || isInlineArrayCreation(node.expression.expression)) return;
|
|
18
|
-
const arrayText = node.expression.expression.getText(sourceFile);
|
|
19
|
-
context.report({
|
|
20
|
-
fix: {
|
|
21
|
-
range: {
|
|
22
|
-
begin: node.getStart(sourceFile),
|
|
23
|
-
end: node.getEnd()
|
|
24
|
-
},
|
|
25
|
-
text: `${arrayText}.toReversed()`
|
|
26
|
-
},
|
|
27
|
-
message: "preferToReversed",
|
|
28
|
-
range: {
|
|
29
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
30
|
-
end: node.getEnd()
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { arrayMutableReverses_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports `.sort()` calls on arrays that mutate the original array.";
|
|
3
|
-
readonly id: "arrayMutableSorts";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferToSorted", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isBuiltinArrayMethod, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arrayMutableSorts.ts
|
|
5
|
-
const methodsReturningNewArray = /* @__PURE__ */ new Set([
|
|
6
|
-
"concat",
|
|
7
|
-
"entries",
|
|
8
|
-
"filter",
|
|
9
|
-
"flat",
|
|
10
|
-
"flatMap",
|
|
11
|
-
"from",
|
|
12
|
-
"keys",
|
|
13
|
-
"map",
|
|
14
|
-
"of",
|
|
15
|
-
"slice",
|
|
16
|
-
"split",
|
|
17
|
-
"values"
|
|
18
|
-
]);
|
|
19
|
-
const objectStaticMethods = /* @__PURE__ */ new Set([
|
|
20
|
-
"entries",
|
|
21
|
-
"keys",
|
|
22
|
-
"values"
|
|
23
|
-
]);
|
|
24
|
-
function isInlineArrayCreation$1(node) {
|
|
25
|
-
if (ts$1.isArrayLiteralExpression(node)) return true;
|
|
26
|
-
if (ts$1.isParenthesizedExpression(node)) return isInlineArrayCreation$1(node.expression);
|
|
27
|
-
if (ts$1.isCallExpression(node)) {
|
|
28
|
-
if (ts$1.isPropertyAccessExpression(node.expression)) {
|
|
29
|
-
const methodName = node.expression.name.text;
|
|
30
|
-
if (ts$1.isIdentifier(node.expression.expression) && node.expression.expression.text === "Object" && objectStaticMethods.has(methodName)) return true;
|
|
31
|
-
if (ts$1.isIdentifier(node.expression.expression) && node.expression.expression.text === "Array" && (methodName === "from" || methodName === "of")) return true;
|
|
32
|
-
if (methodsReturningNewArray.has(methodName)) return true;
|
|
33
|
-
}
|
|
34
|
-
if (ts$1.isIdentifier(node.expression) && node.expression.text === "Array" && ts$1.isNewExpression(node.parent)) return true;
|
|
35
|
-
}
|
|
36
|
-
if (ts$1.isNewExpression(node) && ts$1.isIdentifier(node.expression) && node.expression.text === "Array") return true;
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
var arrayMutableSorts_default = ruleCreator.createRule(typescriptLanguage, {
|
|
40
|
-
about: {
|
|
41
|
-
description: "Reports `.sort()` calls on arrays that mutate the original array.",
|
|
42
|
-
id: "arrayMutableSorts",
|
|
43
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
44
|
-
},
|
|
45
|
-
messages: { preferToSorted: {
|
|
46
|
-
primary: "Use `.toSorted()` instead of `.sort()` to avoid mutating the original array.",
|
|
47
|
-
secondary: ["The `.sort()` method mutates the array in place.", "The `.toSorted()` method returns a new sorted array without modifying the original."],
|
|
48
|
-
suggestions: ["Replace `.sort()` with `.toSorted()`."]
|
|
49
|
-
} },
|
|
50
|
-
setup(context) {
|
|
51
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
52
|
-
if (!isBuiltinArrayMethod("sort", node, typeChecker) || isInlineArrayCreation$1(node.expression.expression)) return;
|
|
53
|
-
const arrayText = node.expression.expression.getText(sourceFile);
|
|
54
|
-
const argumentsText = node.arguments.length ? node.arguments.map((arg) => arg.getText(sourceFile)).join(", ") : "";
|
|
55
|
-
context.report({
|
|
56
|
-
fix: {
|
|
57
|
-
range: getTSNodeRange(node, sourceFile),
|
|
58
|
-
text: `${arrayText}.toSorted(${argumentsText})`
|
|
59
|
-
},
|
|
60
|
-
message: "preferToSorted",
|
|
61
|
-
range: {
|
|
62
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
63
|
-
end: node.getEnd()
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
} } };
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
//#endregion
|
|
70
|
-
export { arrayMutableSorts_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports `Array#reduce` calls using type assertions on initial values instead of type arguments.";
|
|
3
|
-
readonly id: "arrayReduceTypeArguments";
|
|
4
|
-
readonly presets: readonly ["logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferTypeParameter", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,62 +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 ts from "typescript";
|
|
5
|
-
//#region src/rules/arrayReduceTypeArguments.ts
|
|
6
|
-
function isTypeAssertion(node) {
|
|
7
|
-
return node.kind === ts.SyntaxKind.AsExpression || node.kind === ts.SyntaxKind.TypeAssertionExpression;
|
|
8
|
-
}
|
|
9
|
-
var arrayReduceTypeArguments_default = ruleCreator.createRule(typescriptLanguage, {
|
|
10
|
-
about: {
|
|
11
|
-
description: "Reports `Array#reduce` calls using type assertions on initial values instead of type arguments.",
|
|
12
|
-
id: "arrayReduceTypeArguments",
|
|
13
|
-
presets: ["logicalStrict"]
|
|
14
|
-
},
|
|
15
|
-
messages: { preferTypeParameter: {
|
|
16
|
-
primary: "Using a type assertion on a reducer's initial value is less type-safe than providing a type parameter.",
|
|
17
|
-
secondary: ["Using `Array#reduce<T>` with a type parameter is clearer than asserting the initial value type.", "This avoids unnecessary type assertions and keeps generic inference consistent."],
|
|
18
|
-
suggestions: ["Replace the type assertion with a type parameter on `reduce`."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
22
|
-
if (!ts.isPropertyAccessExpression(node.expression) && !ts.isElementAccessExpression(node.expression)) return;
|
|
23
|
-
if ((ts.isPropertyAccessExpression(node.expression) ? node.expression.name.text : ts.isStringLiteral(node.expression.argumentExpression) ? node.expression.argumentExpression.text : void 0) !== "reduce" || node.arguments.length < 2) return;
|
|
24
|
-
const secondArg = node.arguments[1];
|
|
25
|
-
if (!isTypeAssertion(secondArg)) return;
|
|
26
|
-
if (!isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker)) return;
|
|
27
|
-
const initializerType = typeChecker.getTypeAtLocation(secondArg.expression);
|
|
28
|
-
const assertedType = typeChecker.getTypeAtLocation(secondArg.type);
|
|
29
|
-
if (!typeChecker.isTypeAssignableTo(initializerType, assertedType)) return;
|
|
30
|
-
const typeAnnotationText = secondArg.type.getText(sourceFile);
|
|
31
|
-
const fixes = [];
|
|
32
|
-
if (!node.typeArguments) fixes.push({
|
|
33
|
-
range: {
|
|
34
|
-
begin: node.expression.getEnd(),
|
|
35
|
-
end: node.expression.getEnd()
|
|
36
|
-
},
|
|
37
|
-
text: `<${typeAnnotationText}>`
|
|
38
|
-
});
|
|
39
|
-
if (secondArg.kind === ts.SyntaxKind.AsExpression) fixes.push({
|
|
40
|
-
range: {
|
|
41
|
-
begin: secondArg.expression.getEnd(),
|
|
42
|
-
end: secondArg.getEnd()
|
|
43
|
-
},
|
|
44
|
-
text: ""
|
|
45
|
-
});
|
|
46
|
-
else fixes.push({
|
|
47
|
-
range: {
|
|
48
|
-
begin: secondArg.getStart(sourceFile),
|
|
49
|
-
end: secondArg.expression.getStart(sourceFile)
|
|
50
|
-
},
|
|
51
|
-
text: ""
|
|
52
|
-
});
|
|
53
|
-
context.report({
|
|
54
|
-
fix: fixes,
|
|
55
|
-
message: "preferTypeParameter",
|
|
56
|
-
range: getTSNodeRange(secondArg, sourceFile)
|
|
57
|
-
});
|
|
58
|
-
} } };
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
//#endregion
|
|
62
|
-
export { arrayReduceTypeArguments_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary `end` argument in `.slice()` calls when it equals the length or is `Infinity`.";
|
|
3
|
-
readonly id: "arraySliceUnnecessaryEnd";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryEnd", undefined>;
|
|
9
|
-
export default _default;
|