@flint.fyi/ts 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +1 -1
- package/dist/index.mjs +22467 -0
- package/package.json +8 -7
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -619
- package/lib/rules/accessorPairGroups.d.ts +0 -9
- package/lib/rules/accessorPairGroups.js +0 -46
- package/lib/rules/accessorPairTypes.d.ts +0 -9
- package/lib/rules/accessorPairTypes.js +0 -70
- package/lib/rules/accessorThisRecursion.d.ts +0 -9
- package/lib/rules/accessorThisRecursion.js +0 -63
- package/lib/rules/anyArguments.d.ts +0 -9
- package/lib/rules/anyArguments.js +0 -232
- package/lib/rules/anyAssignments.d.ts +0 -9
- package/lib/rules/anyAssignments.js +0 -263
- package/lib/rules/anyCalls.d.ts +0 -9
- package/lib/rules/anyCalls.js +0 -66
- package/lib/rules/anyMemberAccess.d.ts +0 -9
- package/lib/rules/anyMemberAccess.js +0 -83
- package/lib/rules/anyReturns.d.ts +0 -9
- package/lib/rules/anyReturns.js +0 -100
- package/lib/rules/arguments.d.ts +0 -9
- package/lib/rules/arguments.js +0 -36
- package/lib/rules/arrayCallbackReturns.d.ts +0 -9
- package/lib/rules/arrayCallbackReturns.js +0 -71
- package/lib/rules/arrayConstructors.d.ts +0 -9
- package/lib/rules/arrayConstructors.js +0 -45
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
- package/lib/rules/arrayElementDeletions.d.ts +0 -9
- package/lib/rules/arrayElementDeletions.js +0 -41
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
- package/lib/rules/arrayFilteredFinds.d.ts +0 -9
- package/lib/rules/arrayFilteredFinds.js +0 -72
- package/lib/rules/arrayFinds.d.ts +0 -9
- package/lib/rules/arrayFinds.js +0 -39
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMapMethods.js +0 -45
- package/lib/rules/arrayFlatMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMethods.js +0 -81
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
- package/lib/rules/arrayIncludes.d.ts +0 -9
- package/lib/rules/arrayIncludes.js +0 -51
- package/lib/rules/arrayIncludesMethods.d.ts +0 -9
- package/lib/rules/arrayIncludesMethods.js +0 -35
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
- package/lib/rules/arrayIndexOfMethods.js +0 -49
- package/lib/rules/arrayLoops.d.ts +0 -9
- package/lib/rules/arrayLoops.js +0 -34
- package/lib/rules/arrayMapIdentities.d.ts +0 -9
- package/lib/rules/arrayMapIdentities.js +0 -72
- package/lib/rules/arrayMutableReverses.d.ts +0 -9
- package/lib/rules/arrayMutableReverses.js +0 -37
- package/lib/rules/arrayMutableSorts.d.ts +0 -9
- package/lib/rules/arrayMutableSorts.js +0 -70
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
- package/lib/rules/arrayReduceTypeArguments.js +0 -62
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
- package/lib/rules/arraySomeMethods.d.ts +0 -9
- package/lib/rules/arraySomeMethods.js +0 -75
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
- package/lib/rules/arrayTypes.d.ts +0 -16
- package/lib/rules/arrayTypes.js +0 -109
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
- package/lib/rules/asConstAssertions.d.ts +0 -9
- package/lib/rules/asConstAssertions.js +0 -55
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
- package/lib/rules/assignmentOperatorShorthands.js +0 -45
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
- package/lib/rules/asyncFunctionAwaits.js +0 -53
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
- package/lib/rules/asyncPromiseExecutors.js +0 -39
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
- package/lib/rules/atAccesses.d.ts +0 -9
- package/lib/rules/atAccesses.js +0 -50
- package/lib/rules/builtinCoercions.d.ts +0 -9
- package/lib/rules/builtinCoercions.js +0 -115
- package/lib/rules/builtinConstructorNews.d.ts +0 -9
- package/lib/rules/builtinConstructorNews.js +0 -87
- package/lib/rules/caseDeclarations.d.ts +0 -9
- package/lib/rules/caseDeclarations.js +0 -38
- package/lib/rules/caseDuplicates.d.ts +0 -9
- package/lib/rules/caseDuplicates.js +0 -34
- package/lib/rules/caseFallthroughs.d.ts +0 -9
- package/lib/rules/caseFallthroughs.js +0 -74
- package/lib/rules/catchCallbackTypes.d.ts +0 -9
- package/lib/rules/catchCallbackTypes.js +0 -65
- package/lib/rules/caughtVariableNames.d.ts +0 -9
- package/lib/rules/caughtVariableNames.js +0 -38
- package/lib/rules/chainedAssignments.d.ts +0 -9
- package/lib/rules/chainedAssignments.js +0 -31
- package/lib/rules/charAtComparisons.d.ts +0 -9
- package/lib/rules/charAtComparisons.js +0 -53
- package/lib/rules/classAssignments.d.ts +0 -9
- package/lib/rules/classAssignments.js +0 -27
- package/lib/rules/classFieldDeclarations.d.ts +0 -9
- package/lib/rules/classFieldDeclarations.js +0 -38
- package/lib/rules/classLiteralProperties.d.ts +0 -9
- package/lib/rules/classLiteralProperties.js +0 -43
- package/lib/rules/classMemberDuplicates.d.ts +0 -9
- package/lib/rules/classMemberDuplicates.js +0 -69
- package/lib/rules/classMethodsThis.d.ts +0 -13
- package/lib/rules/classMethodsThis.js +0 -122
- package/lib/rules/combinedPushes.d.ts +0 -9
- package/lib/rules/combinedPushes.js +0 -54
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
- package/lib/rules/consecutiveNonNullAssertions.js +0 -37
- package/lib/rules/consoleCalls.d.ts +0 -8
- package/lib/rules/consoleCalls.js +0 -26
- package/lib/rules/constantAssignments.d.ts +0 -9
- package/lib/rules/constantAssignments.js +0 -39
- package/lib/rules/constructorGenericCalls.d.ts +0 -15
- package/lib/rules/constructorGenericCalls.js +0 -136
- package/lib/rules/constructorReturns.d.ts +0 -9
- package/lib/rules/constructorReturns.js +0 -39
- package/lib/rules/constructorSupers.d.ts +0 -9
- package/lib/rules/constructorSupers.js +0 -75
- package/lib/rules/dateConstructorClones.d.ts +0 -9
- package/lib/rules/dateConstructorClones.js +0 -35
- package/lib/rules/dateNowTimestamps.d.ts +0 -9
- package/lib/rules/dateNowTimestamps.js +0 -55
- package/lib/rules/debuggerStatements.d.ts +0 -9
- package/lib/rules/debuggerStatements.js +0 -31
- package/lib/rules/defaultCaseLast.d.ts +0 -9
- package/lib/rules/defaultCaseLast.js +0 -34
- package/lib/rules/defaultParameterLast.d.ts +0 -9
- package/lib/rules/defaultParameterLast.js +0 -40
- package/lib/rules/deprecated.d.ts +0 -9
- package/lib/rules/deprecated.js +0 -241
- package/lib/rules/destructuringConsistency.d.ts +0 -9
- package/lib/rules/destructuringConsistency.js +0 -104
- package/lib/rules/duplicateArguments.d.ts +0 -9
- package/lib/rules/duplicateArguments.js +0 -43
- package/lib/rules/dynamicDeletes.d.ts +0 -9
- package/lib/rules/dynamicDeletes.js +0 -35
- package/lib/rules/elseIfDuplicates.d.ts +0 -9
- package/lib/rules/elseIfDuplicates.js +0 -36
- package/lib/rules/elseReturns.d.ts +0 -9
- package/lib/rules/elseReturns.js +0 -65
- package/lib/rules/emptyBlocks.d.ts +0 -9
- package/lib/rules/emptyBlocks.js +0 -54
- package/lib/rules/emptyDestructures.d.ts +0 -9
- package/lib/rules/emptyDestructures.js +0 -32
- package/lib/rules/emptyEnums.d.ts +0 -9
- package/lib/rules/emptyEnums.js +0 -28
- package/lib/rules/emptyExports.d.ts +0 -9
- package/lib/rules/emptyExports.js +0 -58
- package/lib/rules/emptyFiles.d.ts +0 -9
- package/lib/rules/emptyFiles.js +0 -42
- package/lib/rules/emptyFunctions.d.ts +0 -9
- package/lib/rules/emptyFunctions.js +0 -59
- package/lib/rules/emptyModuleAttributes.d.ts +0 -9
- package/lib/rules/emptyModuleAttributes.js +0 -33
- package/lib/rules/emptyObjectTypes.d.ts +0 -9
- package/lib/rules/emptyObjectTypes.js +0 -45
- package/lib/rules/emptyStaticBlocks.d.ts +0 -9
- package/lib/rules/emptyStaticBlocks.js +0 -40
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
- package/lib/rules/emptyTypeParameterLists.js +0 -29
- package/lib/rules/enumInitializers.d.ts +0 -9
- package/lib/rules/enumInitializers.js +0 -52
- package/lib/rules/enumMemberLiterals.d.ts +0 -9
- package/lib/rules/enumMemberLiterals.js +0 -37
- package/lib/rules/enumValueConsistency.d.ts +0 -9
- package/lib/rules/enumValueConsistency.js +0 -54
- package/lib/rules/enumValueDuplicates.d.ts +0 -9
- package/lib/rules/enumValueDuplicates.js +0 -43
- package/lib/rules/equalityOperatorNegations.d.ts +0 -8
- package/lib/rules/equalityOperatorNegations.js +0 -58
- package/lib/rules/equalityOperators.d.ts +0 -9
- package/lib/rules/equalityOperators.js +0 -42
- package/lib/rules/errorMessages.d.ts +0 -9
- package/lib/rules/errorMessages.js +0 -54
- package/lib/rules/errorSubclassProperties.d.ts +0 -9
- package/lib/rules/errorSubclassProperties.js +0 -142
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
- package/lib/rules/escapeSequenceCasing.d.ts +0 -9
- package/lib/rules/escapeSequenceCasing.js +0 -73
- package/lib/rules/evals.d.ts +0 -9
- package/lib/rules/evals.js +0 -29
- package/lib/rules/evolvingVariableTypes.d.ts +0 -9
- package/lib/rules/evolvingVariableTypes.js +0 -31
- package/lib/rules/exceptionAssignments.d.ts +0 -9
- package/lib/rules/exceptionAssignments.js +0 -37
- package/lib/rules/explicitAnys.d.ts +0 -9
- package/lib/rules/explicitAnys.js +0 -53
- package/lib/rules/exponentiationOperators.d.ts +0 -9
- package/lib/rules/exponentiationOperators.js +0 -32
- package/lib/rules/exportFromImports.d.ts +0 -9
- package/lib/rules/exportFromImports.js +0 -117
- package/lib/rules/exportMutables.d.ts +0 -9
- package/lib/rules/exportMutables.js +0 -31
- package/lib/rules/exportUniqueNames.d.ts +0 -9
- package/lib/rules/exportUniqueNames.js +0 -63
- package/lib/rules/extraneousClasses.d.ts +0 -15
- package/lib/rules/extraneousClasses.js +0 -109
- package/lib/rules/fetchMethodBodies.d.ts +0 -9
- package/lib/rules/fetchMethodBodies.js +0 -70
- package/lib/rules/finallyStatementSafety.d.ts +0 -9
- package/lib/rules/finallyStatementSafety.js +0 -45
- package/lib/rules/forDirections.d.ts +0 -9
- package/lib/rules/forDirections.js +0 -73
- package/lib/rules/forInArrays.d.ts +0 -9
- package/lib/rules/forInArrays.js +0 -44
- package/lib/rules/forInGuards.d.ts +0 -8
- package/lib/rules/forInGuards.js +0 -42
- package/lib/rules/functionApplySpreads.d.ts +0 -9
- package/lib/rules/functionApplySpreads.js +0 -61
- package/lib/rules/functionAssignments.d.ts +0 -9
- package/lib/rules/functionAssignments.js +0 -27
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
- package/lib/rules/functionCurryingRedundancy.js +0 -51
- package/lib/rules/functionDeclarationStyles.d.ts +0 -15
- package/lib/rules/functionDeclarationStyles.js +0 -65
- package/lib/rules/functionNameMatches.d.ts +0 -9
- package/lib/rules/functionNameMatches.js +0 -72
- package/lib/rules/functionNewCalls.d.ts +0 -9
- package/lib/rules/functionNewCalls.js +0 -40
- package/lib/rules/generatorFunctionYields.d.ts +0 -9
- package/lib/rules/generatorFunctionYields.js +0 -48
- package/lib/rules/getterReturns.d.ts +0 -9
- package/lib/rules/getterReturns.js +0 -63
- package/lib/rules/globalAssignments.d.ts +0 -9
- package/lib/rules/globalAssignments.js +0 -45
- package/lib/rules/globalObjectCalls.d.ts +0 -9
- package/lib/rules/globalObjectCalls.js +0 -40
- package/lib/rules/globalThisAliases.d.ts +0 -9
- package/lib/rules/globalThisAliases.js +0 -45
- package/lib/rules/impliedEvals.d.ts +0 -9
- package/lib/rules/impliedEvals.js +0 -128
- package/lib/rules/importEmptyBlocks.d.ts +0 -9
- package/lib/rules/importEmptyBlocks.js +0 -51
- package/lib/rules/importTypeSideEffects.d.ts +0 -9
- package/lib/rules/importTypeSideEffects.js +0 -29
- package/lib/rules/indexedObjectTypes.d.ts +0 -15
- package/lib/rules/indexedObjectTypes.js +0 -81
- package/lib/rules/instanceOfArrays.d.ts +0 -9
- package/lib/rules/instanceOfArrays.js +0 -29
- package/lib/rules/irregularWhitespaces.d.ts +0 -15
- package/lib/rules/irregularWhitespaces.js +0 -95
- package/lib/rules/isNaNComparisons.d.ts +0 -9
- package/lib/rules/isNaNComparisons.js +0 -41
- package/lib/rules/literalConstructorWrappers.d.ts +0 -9
- package/lib/rules/literalConstructorWrappers.js +0 -62
- package/lib/rules/mathMethods.d.ts +0 -9
- package/lib/rules/mathMethods.js +0 -126
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
- package/lib/rules/meaninglessVoidOperators.js +0 -37
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
- package/lib/rules/misleadingVoidExpressions.js +0 -126
- package/lib/rules/moduleSpecifierLists.d.ts +0 -9
- package/lib/rules/moduleSpecifierLists.js +0 -90
- package/lib/rules/multilineAmbiguities.d.ts +0 -9
- package/lib/rules/multilineAmbiguities.js +0 -62
- package/lib/rules/namedDefaultExports.d.ts +0 -9
- package/lib/rules/namedDefaultExports.js +0 -58
- package/lib/rules/namespaceDeclarations.d.ts +0 -13
- package/lib/rules/namespaceDeclarations.js +0 -35
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
- package/lib/rules/namespaceKeywords.d.ts +0 -9
- package/lib/rules/namespaceKeywords.js +0 -38
- package/lib/rules/nativeObjectExtensions.d.ts +0 -9
- package/lib/rules/nativeObjectExtensions.js +0 -112
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
- package/lib/rules/negativeIndexLengthMethods.js +0 -178
- package/lib/rules/negativeZeroComparisons.d.ts +0 -9
- package/lib/rules/negativeZeroComparisons.js +0 -46
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
- package/lib/rules/nestedStandaloneIfs.js +0 -103
- package/lib/rules/newDefinitions.d.ts +0 -9
- package/lib/rules/newDefinitions.js +0 -82
- package/lib/rules/newExpressions.d.ts +0 -9
- package/lib/rules/newExpressions.js +0 -36
- package/lib/rules/newNativeNonConstructors.d.ts +0 -9
- package/lib/rules/newNativeNonConstructors.js +0 -37
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
- package/lib/rules/nonNullAssertionPlacement.js +0 -92
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
- package/lib/rules/nonNullableTypeAssertions.js +0 -76
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
- package/lib/rules/nonOctalDecimalEscapes.js +0 -46
- package/lib/rules/nullishCheckStyle.d.ts +0 -20
- package/lib/rules/nullishCheckStyle.js +0 -142
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
- package/lib/rules/nullishCoalescingOperators.js +0 -321
- package/lib/rules/numberMethodRanges.d.ts +0 -9
- package/lib/rules/numberMethodRanges.js +0 -72
- package/lib/rules/numberStaticMethods.d.ts +0 -9
- package/lib/rules/numberStaticMethods.js +0 -51
- package/lib/rules/numericErasingOperations.d.ts +0 -9
- package/lib/rules/numericErasingOperations.js +0 -44
- package/lib/rules/numericLiteralParsing.d.ts +0 -9
- package/lib/rules/numericLiteralParsing.js +0 -55
- package/lib/rules/numericPrecision.d.ts +0 -9
- package/lib/rules/numericPrecision.js +0 -100
- package/lib/rules/numericSeparatorGroups.d.ts +0 -9
- package/lib/rules/numericSeparatorGroups.js +0 -99
- package/lib/rules/objectAssignSpreads.d.ts +0 -9
- package/lib/rules/objectAssignSpreads.js +0 -51
- package/lib/rules/objectCalls.d.ts +0 -9
- package/lib/rules/objectCalls.js +0 -36
- package/lib/rules/objectEntriesMethods.d.ts +0 -9
- package/lib/rules/objectEntriesMethods.js +0 -80
- package/lib/rules/objectHasOwns.d.ts +0 -9
- package/lib/rules/objectHasOwns.js +0 -48
- package/lib/rules/objectKeyDuplicates.d.ts +0 -9
- package/lib/rules/objectKeyDuplicates.js +0 -61
- package/lib/rules/objectProto.d.ts +0 -9
- package/lib/rules/objectProto.js +0 -48
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
- package/lib/rules/objectPrototypeBuiltIns.js +0 -52
- package/lib/rules/objectShorthand.d.ts +0 -9
- package/lib/rules/objectShorthand.js +0 -82
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
- package/lib/rules/objectTypeDefinitions.d.ts +0 -9
- package/lib/rules/objectTypeDefinitions.js +0 -32
- package/lib/rules/octalEscapes.d.ts +0 -9
- package/lib/rules/octalEscapes.js +0 -56
- package/lib/rules/octalNumbers.d.ts +0 -9
- package/lib/rules/octalNumbers.js +0 -53
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
- package/lib/rules/operatorAssignmentShorthand.js +0 -75
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
- package/lib/rules/overloadSignaturesAdjacent.js +0 -138
- package/lib/rules/parameterReassignments.d.ts +0 -9
- package/lib/rules/parameterReassignments.js +0 -43
- package/lib/rules/parseIntRadixes.d.ts +0 -9
- package/lib/rules/parseIntRadixes.js +0 -57
- package/lib/rules/propertyAccessNotation.d.ts +0 -12
- package/lib/rules/propertyAccessNotation.js +0 -117
- package/lib/rules/recursionOnlyArguments.d.ts +0 -9
- package/lib/rules/recursionOnlyArguments.js +0 -62
- package/lib/rules/redundantTypeConstituents.d.ts +0 -9
- package/lib/rules/redundantTypeConstituents.js +0 -275
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
- package/lib/rules/regexAllGlobalFlags.js +0 -54
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
- package/lib/rules/regexAmbiguousInvalidity.js +0 -295
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
- package/lib/rules/regexCharacterClassRanges.js +0 -135
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
- package/lib/rules/regexCharacterClassSetOperations.js +0 -79
- package/lib/rules/regexCharacterClasses.d.ts +0 -9
- package/lib/rules/regexCharacterClasses.js +0 -232
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
- package/lib/rules/regexContradictoryAssertions.js +0 -208
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
- package/lib/rules/regexControlCharacterEscapes.js +0 -128
- package/lib/rules/regexControlCharacters.d.ts +0 -9
- package/lib/rules/regexControlCharacters.js +0 -93
- package/lib/rules/regexDigitMatchers.d.ts +0 -9
- package/lib/rules/regexDigitMatchers.js +0 -178
- package/lib/rules/regexDollarEscapes.d.ts +0 -9
- package/lib/rules/regexDollarEscapes.js +0 -89
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
- package/lib/rules/regexEmptyAlternatives.js +0 -138
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
- package/lib/rules/regexEmptyCapturingGroups.js +0 -65
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
- package/lib/rules/regexEmptyCharacterClasses.js +0 -66
- package/lib/rules/regexEmptyGroups.d.ts +0 -9
- package/lib/rules/regexEmptyGroups.js +0 -64
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
- package/lib/rules/regexEmptyStringLiterals.js +0 -64
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
- package/lib/rules/regexEscapeBackspaces.js +0 -67
- package/lib/rules/regexExecutors.d.ts +0 -9
- package/lib/rules/regexExecutors.js +0 -56
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
- package/lib/rules/regexGraphemeStringLiterals.js +0 -49
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
- package/lib/rules/regexHexadecimalEscapes.js +0 -69
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
- package/lib/rules/regexIgnoreCaseFlags.js +0 -143
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
- package/lib/rules/regexInvisibleCharacters.js +0 -88
- package/lib/rules/regexLetterCasing.d.ts +0 -9
- package/lib/rules/regexLetterCasing.js +0 -184
- package/lib/rules/regexLiterals.d.ts +0 -9
- package/lib/rules/regexLiterals.js +0 -87
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexLookaroundAssertions.js +0 -161
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
- package/lib/rules/regexMatchNotation.d.ts +0 -9
- package/lib/rules/regexMatchNotation.js +0 -137
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
- package/lib/rules/regexMisleadingQuantifiers.js +0 -76
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
- package/lib/rules/regexNamedBackreferences.d.ts +0 -9
- package/lib/rules/regexNamedBackreferences.js +0 -46
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
- package/lib/rules/regexNamedCaptureGroups.js +0 -65
- package/lib/rules/regexNamedReplacements.d.ts +0 -9
- package/lib/rules/regexNamedReplacements.js +0 -91
- package/lib/rules/regexNonStandardFlags.d.ts +0 -9
- package/lib/rules/regexNonStandardFlags.js +0 -64
- package/lib/rules/regexObscureRanges.d.ts +0 -9
- package/lib/rules/regexObscureRanges.js +0 -91
- package/lib/rules/regexOctalEscapes.d.ts +0 -9
- package/lib/rules/regexOctalEscapes.js +0 -68
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
- package/lib/rules/regexPlusQuantifiers.js +0 -66
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
- package/lib/rules/regexPredefinedAssertions.js +0 -125
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
- package/lib/rules/regexQuestionQuantifiers.js +0 -102
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
- package/lib/rules/regexRepeatQuantifiers.js +0 -94
- package/lib/rules/regexResultArrayGroups.d.ts +0 -9
- package/lib/rules/regexResultArrayGroups.js +0 -185
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
- package/lib/rules/regexSetOperationOptimizations.js +0 -175
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
- package/lib/rules/regexStandaloneBackslashes.js +0 -57
- package/lib/rules/regexStarQuantifiers.d.ts +0 -9
- package/lib/rules/regexStarQuantifiers.js +0 -66
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
- package/lib/rules/regexSuperLinearBacktracking.js +0 -96
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
- package/lib/rules/regexSuperLinearMoves.js +0 -140
- package/lib/rules/regexTestMethods.d.ts +0 -9
- package/lib/rules/regexTestMethods.js +0 -81
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
- package/lib/rules/regexUnicodeEscapes.js +0 -95
- package/lib/rules/regexUnicodeFlag.d.ts +0 -8
- package/lib/rules/regexUnicodeFlag.js +0 -95
- package/lib/rules/regexUnicodeProperties.d.ts +0 -9
- package/lib/rules/regexUnicodeProperties.js +0 -131
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryAssertions.js +0 -221
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
- package/lib/rules/regexUnnecessaryEscapes.js +0 -134
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
- package/lib/rules/regexUnnecessarySetOperands.js +0 -134
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnusedCapturingGroups.js +0 -67
- package/lib/rules/regexUnusedFlags.d.ts +0 -9
- package/lib/rules/regexUnusedFlags.js +0 -114
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedQuantifiers.js +0 -61
- package/lib/rules/regexValidity.d.ts +0 -9
- package/lib/rules/regexValidity.js +0 -144
- package/lib/rules/regexWordMatchers.d.ts +0 -9
- package/lib/rules/regexWordMatchers.js +0 -144
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
- package/lib/rules/regexZeroQuantifiers.js +0 -58
- package/lib/rules/requireImports.d.ts +0 -9
- package/lib/rules/requireImports.js +0 -46
- package/lib/rules/responseJsonMethods.d.ts +0 -9
- package/lib/rules/responseJsonMethods.js +0 -49
- package/lib/rules/restrictedIdentifiers.d.ts +0 -12
- package/lib/rules/restrictedIdentifiers.js +0 -39
- package/lib/rules/restrictedImports.d.ts +0 -26
- package/lib/rules/restrictedImports.js +0 -164
- package/lib/rules/returnAssignments.d.ts +0 -9
- package/lib/rules/returnAssignments.js +0 -36
- package/lib/rules/returnThisTypes.d.ts +0 -9
- package/lib/rules/returnThisTypes.js +0 -92
- package/lib/rules/ruleCreator.d.ts +0 -2
- package/lib/rules/ruleCreator.js +0 -15
- package/lib/rules/selfAssignments.d.ts +0 -9
- package/lib/rules/selfAssignments.js +0 -27
- package/lib/rules/sequences.d.ts +0 -9
- package/lib/rules/sequences.js +0 -26
- package/lib/rules/setSizeLengthChecks.d.ts +0 -9
- package/lib/rules/setSizeLengthChecks.js +0 -46
- package/lib/rules/setterReturns.d.ts +0 -9
- package/lib/rules/setterReturns.js +0 -39
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
- package/lib/rules/shadowedRestrictedNames.js +0 -66
- package/lib/rules/singleVariableDeclarations.d.ts +0 -9
- package/lib/rules/singleVariableDeclarations.js +0 -34
- package/lib/rules/sizeComparisonOperators.d.ts +0 -15
- package/lib/rules/sizeComparisonOperators.js +0 -146
- package/lib/rules/sparseArrays.d.ts +0 -9
- package/lib/rules/sparseArrays.js +0 -41
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
- package/lib/rules/staticMemberOnlyClasses.js +0 -75
- package/lib/rules/stringCaseMismatches.d.ts +0 -9
- package/lib/rules/stringCaseMismatches.js +0 -53
- package/lib/rules/stringCodePoints.d.ts +0 -9
- package/lib/rules/stringCodePoints.js +0 -48
- package/lib/rules/stringSliceMethods.d.ts +0 -9
- package/lib/rules/stringSliceMethods.js +0 -45
- package/lib/rules/stringStartsEndsWith.d.ts +0 -9
- package/lib/rules/stringStartsEndsWith.js +0 -77
- package/lib/rules/structuredCloneMethods.d.ts +0 -9
- package/lib/rules/structuredCloneMethods.js +0 -37
- package/lib/rules/symbolDescriptions.d.ts +0 -9
- package/lib/rules/symbolDescriptions.js +0 -30
- package/lib/rules/thisAliases.d.ts +0 -9
- package/lib/rules/thisAliases.js +0 -42
- package/lib/rules/thisBeforeSuper.d.ts +0 -9
- package/lib/rules/thisBeforeSuper.js +0 -84
- package/lib/rules/throwErrors.d.ts +0 -9
- package/lib/rules/throwErrors.js +0 -59
- package/lib/rules/topLevelAwaits.d.ts +0 -9
- package/lib/rules/topLevelAwaits.js +0 -47
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
- package/lib/rules/tripleSlashReferenceValidity.js +0 -52
- package/lib/rules/tripleSlashReferences.d.ts +0 -9
- package/lib/rules/tripleSlashReferences.js +0 -32
- package/lib/rules/tsComments.d.ts +0 -21
- package/lib/rules/tsComments.js +0 -128
- package/lib/rules/tslintComments.d.ts +0 -9
- package/lib/rules/tslintComments.js +0 -34
- package/lib/rules/typeAssertionStyles.d.ts +0 -9
- package/lib/rules/typeAssertionStyles.js +0 -30
- package/lib/rules/typeImports.d.ts +0 -19
- package/lib/rules/typeImports.js +0 -281
- package/lib/rules/typeofComparisons.d.ts +0 -9
- package/lib/rules/typeofComparisons.js +0 -53
- package/lib/rules/unassignedVariables.d.ts +0 -9
- package/lib/rules/unassignedVariables.js +0 -32
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
- package/lib/rules/undefinedTypeofChecks.js +0 -39
- package/lib/rules/undefinedVariables.d.ts +0 -9
- package/lib/rules/undefinedVariables.js +0 -37
- package/lib/rules/unicodeBOMs.d.ts +0 -9
- package/lib/rules/unicodeBOMs.js +0 -37
- package/lib/rules/unnecessaryBinds.d.ts +0 -9
- package/lib/rules/unnecessaryBinds.js +0 -76
- package/lib/rules/unnecessaryBlocks.d.ts +0 -9
- package/lib/rules/unnecessaryBlocks.js +0 -58
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
- package/lib/rules/unnecessaryBooleanCasts.js +0 -56
- package/lib/rules/unnecessaryCatches.d.ts +0 -9
- package/lib/rules/unnecessaryCatches.js +0 -46
- package/lib/rules/unnecessaryComparisons.d.ts +0 -9
- package/lib/rules/unnecessaryComparisons.js +0 -291
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
- package/lib/rules/unnecessaryConcatenation.js +0 -26
- package/lib/rules/unnecessaryEscapes.d.ts +0 -9
- package/lib/rules/unnecessaryEscapes.js +0 -132
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
- package/lib/rules/unnecessaryMathClamps.js +0 -106
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
- package/lib/rules/unnecessaryNumericFractions.js +0 -48
- package/lib/rules/unnecessaryRenames.d.ts +0 -9
- package/lib/rules/unnecessaryRenames.js +0 -90
- package/lib/rules/unnecessaryTernaries.d.ts +0 -9
- package/lib/rules/unnecessaryTernaries.js +0 -86
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
- package/lib/rules/unnecessaryUseStricts.js +0 -38
- package/lib/rules/unsafeNegations.d.ts +0 -9
- package/lib/rules/unsafeNegations.js +0 -36
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
- package/lib/rules/utils/collectAccessorPairs.js +0 -27
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
- package/lib/rules/utils/countCommentsInRange.js +0 -10
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
- package/lib/rules/utils/discriminateAnyType.js +0 -36
- package/lib/rules/utils/equalityOperators.d.ts +0 -8
- package/lib/rules/utils/equalityOperators.js +0 -34
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
- package/lib/rules/utils/forEachReturnStatement.js +0 -27
- package/lib/rules/utils/formatReportedType.d.ts +0 -3
- package/lib/rules/utils/formatReportedType.js +0 -7
- package/lib/rules/utils/getConstrainedType.d.ts +0 -2
- package/lib/rules/utils/getConstrainedType.js +0 -7
- package/lib/rules/utils/getFunctionName.d.ts +0 -2
- package/lib/rules/utils/getFunctionName.js +0 -14
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
- package/lib/rules/utils/getRegExpConstruction.js +0 -25
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
- package/lib/rules/utils/getThisExpression.d.ts +0 -2
- package/lib/rules/utils/getThisExpression.js +0 -14
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -25
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
- package/lib/rules/utils/isInBooleanContext.js +0 -20
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
- package/lib/rules/utils/isTypeRecursive.js +0 -6
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
- package/lib/rules/utils/isUnsafeAssignment.js +0 -43
- package/lib/rules/utils/operators.d.ts +0 -4
- package/lib/rules/utils/operators.js +0 -33
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
- package/lib/rules/utils/parseRegexpAst.js +0 -15
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAstFull.js +0 -16
- package/lib/rules/utils/skipParentheses.d.ts +0 -2
- package/lib/rules/utils/skipParentheses.js +0 -8
- package/lib/rules/variableDeletions.d.ts +0 -9
- package/lib/rules/variableDeletions.js +0 -33
- package/lib/rules/voidOperator.d.ts +0 -9
- package/lib/rules/voidOperator.js +0 -32
- package/lib/rules/withStatements.d.ts +0 -9
- package/lib/rules/withStatements.js +0 -28
- package/lib/rules/wrapperObjects.d.ts +0 -9
- package/lib/rules/wrapperObjects.js +0 -34
- package/lib/type-utils/getSpecifierNames.d.ts +0 -2
- package/lib/type-utils/getSpecifierNames.js +0 -7
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
- package/lib/type-utils/isFromFile.d.ts +0 -2
- package/lib/type-utils/isFromFile.js +0 -11
- package/lib/type-utils/isFromPackage.d.ts +0 -2
- package/lib/type-utils/isFromPackage.js +0 -13
- package/lib/type-utils/matchesSpecifier.d.ts +0 -3
- package/lib/type-utils/matchesSpecifier.js +0 -18
- package/lib/type-utils/schemas.d.ts +0 -14
- package/lib/type-utils/schemas.js +0 -23
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arraySliceUnnecessaryEnd.ts
|
|
5
|
-
var arraySliceUnnecessaryEnd_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports unnecessary `end` argument in `.slice()` calls when it equals the length or is `Infinity`.",
|
|
8
|
-
id: "arraySliceUnnecessaryEnd",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { unnecessaryEnd: {
|
|
12
|
-
primary: "The `end` argument is unnecessary when slicing to the end of the array or string.",
|
|
13
|
-
secondary: ["Passing `.length` or `Infinity` as the `end` argument is unnecessary.", "The `.slice()` method defaults to the end when the second argument is omitted."],
|
|
14
|
-
suggestions: ["Remove the unnecessary `end` argument."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { CallExpression: (node, { sourceFile }) => {
|
|
18
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "slice" || node.arguments.length !== 2) return;
|
|
19
|
-
const endArgument = node.arguments[1];
|
|
20
|
-
if (!isUnnecessaryEnd(node.expression.expression, endArgument, sourceFile)) return;
|
|
21
|
-
context.report({
|
|
22
|
-
fix: {
|
|
23
|
-
range: {
|
|
24
|
-
begin: node.arguments[0].getEnd(),
|
|
25
|
-
end: endArgument.getEnd()
|
|
26
|
-
},
|
|
27
|
-
text: ""
|
|
28
|
-
},
|
|
29
|
-
message: "unnecessaryEnd",
|
|
30
|
-
range: getTSNodeRange(endArgument, sourceFile)
|
|
31
|
-
});
|
|
32
|
-
} } };
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
function isInfinity(node) {
|
|
36
|
-
switch (node.kind) {
|
|
37
|
-
case ts$1.SyntaxKind.Identifier: return node.text === "Infinity";
|
|
38
|
-
case ts$1.SyntaxKind.PropertyAccessExpression: return ts$1.isIdentifier(node.expression) && node.expression.text === "Number" && node.name.text === "POSITIVE_INFINITY";
|
|
39
|
-
default: return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function isLengthOfReceiver(receiver, endArgument, sourceFile) {
|
|
43
|
-
return ts$1.isPropertyAccessExpression(endArgument) && endArgument.name.text === "length" && hasSameTokens(receiver, endArgument.expression, sourceFile);
|
|
44
|
-
}
|
|
45
|
-
function isUnnecessaryEnd(receiver, endArgument, sourceFile) {
|
|
46
|
-
return isInfinity(endArgument) || isLengthOfReceiver(receiver, endArgument, sourceFile);
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { arraySliceUnnecessaryEnd_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports patterns that can be replaced with `.some()` for checking array element existence.";
|
|
3
|
-
readonly id: "arraySomeMethods";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferSome", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/arraySomeMethods.ts
|
|
5
|
-
var arraySomeMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports patterns that can be replaced with `.some()` for checking array element existence.",
|
|
8
|
-
id: "arraySomeMethods",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferSome: {
|
|
12
|
-
primary: "Prefer `.some()` to more cleanly check if an array contains a matching element.",
|
|
13
|
-
secondary: ["The `.some()` method is more explicit and efficient for existence checks.", "It stops iterating as soon as a match is found."],
|
|
14
|
-
suggestions: ["Replace with `.some()`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { BinaryExpression: (node, { sourceFile, typeChecker }) => {
|
|
18
|
-
const result = checkFilterLengthComparison(node, typeChecker) ?? checkFindIndexComparison(node, typeChecker);
|
|
19
|
-
if (!result) return;
|
|
20
|
-
const arrayText = result.arrayExpression.getText(sourceFile);
|
|
21
|
-
const callbackText = result.callback.getText(sourceFile);
|
|
22
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
23
|
-
context.report({
|
|
24
|
-
fix: {
|
|
25
|
-
range,
|
|
26
|
-
text: `${arrayText}.some(${callbackText})`
|
|
27
|
-
},
|
|
28
|
-
message: "preferSome",
|
|
29
|
-
range
|
|
30
|
-
});
|
|
31
|
-
} } };
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
function checkFilterLengthComparison(node, typeChecker) {
|
|
35
|
-
const lengthAccess = isNonZeroLengthCheck(node) && getLengthAccess(node);
|
|
36
|
-
return lengthAccess ? getFilterCall(lengthAccess.expression, typeChecker) : void 0;
|
|
37
|
-
}
|
|
38
|
-
function checkFindIndexComparison(node, typeChecker) {
|
|
39
|
-
return isFindIndexNegativeOneCheck(node) && ts$1.isCallExpression(node.left) && getFindIndexCall(node.left, typeChecker);
|
|
40
|
-
}
|
|
41
|
-
function getFilterCall(node, typeChecker) {
|
|
42
|
-
if (!ts$1.isCallExpression(node) || !ts$1.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "filter" || !node.arguments.length || !isArrayType(node.expression.expression, typeChecker)) return;
|
|
43
|
-
return {
|
|
44
|
-
arrayExpression: node.expression.expression,
|
|
45
|
-
callback: node.arguments[0]
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function getFindIndexCall(node, typeChecker) {
|
|
49
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || !["findIndex", "findLastIndex"].includes(node.expression.name.text) || !node.arguments.length || !isArrayType(node.expression.expression, typeChecker)) return;
|
|
50
|
-
return {
|
|
51
|
-
arrayExpression: node.expression.expression,
|
|
52
|
-
callback: node.arguments[0]
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
function getLengthAccess(node) {
|
|
56
|
-
return ts$1.isPropertyAccessExpression(node.left) && node.left.name.text === "length" && node.left;
|
|
57
|
-
}
|
|
58
|
-
function isArrayType(node, typeChecker) {
|
|
59
|
-
const type = typeChecker.getTypeAtLocation(node);
|
|
60
|
-
return typeChecker.isArrayType(type);
|
|
61
|
-
}
|
|
62
|
-
function isFindIndexNegativeOneCheck(node) {
|
|
63
|
-
if (node.operatorToken.kind !== ts$1.SyntaxKind.ExclamationEqualsEqualsToken || !ts$1.isPrefixUnaryExpression(node.right) || node.right.operator !== ts$1.SyntaxKind.MinusToken || !ts$1.isNumericLiteral(node.right.operand)) return false;
|
|
64
|
-
return node.right.operand.text === "1";
|
|
65
|
-
}
|
|
66
|
-
function isNonZeroLengthCheck(node) {
|
|
67
|
-
const { left, operatorToken, right } = node;
|
|
68
|
-
if (operatorToken.kind === ts$1.SyntaxKind.GreaterThanToken && ts$1.isNumericLiteral(right) && right.text === "0") return true;
|
|
69
|
-
if (operatorToken.kind === ts$1.SyntaxKind.ExclamationEqualsEqualsToken && ts$1.isNumericLiteral(right) && right.text === "0") return true;
|
|
70
|
-
if (operatorToken.kind === ts$1.SyntaxKind.GreaterThanEqualsToken && ts$1.isNumericLiteral(right) && right.text === "1") return true;
|
|
71
|
-
if (operatorToken.kind === ts$1.SyntaxKind.LessThanToken && ts$1.isNumericLiteral(left) && left.text === "0") return true;
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
//#endregion
|
|
75
|
-
export { arraySomeMethods_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports inconsistent types when spreading a ternary in an array literal.";
|
|
3
|
-
readonly id: "arrayTernarySpreadingConsistency";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "inconsistentTypes", 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/arrayTernarySpreadingConsistency.ts
|
|
5
|
-
var arrayTernarySpreadingConsistency_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports inconsistent types when spreading a ternary in an array literal.",
|
|
8
|
-
id: "arrayTernarySpreadingConsistency",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { inconsistentTypes: {
|
|
12
|
-
primary: "Prefer consistent types in both branches when spreading a ternary in an array.",
|
|
13
|
-
secondary: ["Mixing array and string types in ternary spread branches reduces code clarity.", "Both branches should use the same type: either arrays or strings."],
|
|
14
|
-
suggestions: ["Replace the empty string with an empty array."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { ArrayLiteralExpression: (node, { sourceFile }) => {
|
|
18
|
-
for (const element of node.elements) {
|
|
19
|
-
if (!ts$1.isSpreadElement(element) || !ts$1.isParenthesizedExpression(element.expression)) continue;
|
|
20
|
-
const inner = element.expression.expression;
|
|
21
|
-
if (!ts$1.isConditionalExpression(inner)) continue;
|
|
22
|
-
const whenTrue = unwrapParentheses(inner.whenTrue);
|
|
23
|
-
const whenFalse = unwrapParentheses(inner.whenFalse);
|
|
24
|
-
if (ts$1.isArrayLiteralExpression(whenTrue) && isStringLike(whenFalse) && isEmptyStringLike(whenFalse)) {
|
|
25
|
-
context.report({
|
|
26
|
-
fix: {
|
|
27
|
-
range: {
|
|
28
|
-
begin: whenFalse.getStart(sourceFile),
|
|
29
|
-
end: whenFalse.getEnd()
|
|
30
|
-
},
|
|
31
|
-
text: "[]"
|
|
32
|
-
},
|
|
33
|
-
message: "inconsistentTypes",
|
|
34
|
-
range: {
|
|
35
|
-
begin: whenFalse.getStart(sourceFile),
|
|
36
|
-
end: whenFalse.getEnd()
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
if (isStringLike(whenTrue) && ts$1.isArrayLiteralExpression(whenFalse) && isEmptyArray(whenFalse)) context.report({
|
|
42
|
-
fix: {
|
|
43
|
-
range: {
|
|
44
|
-
begin: whenFalse.getStart(sourceFile),
|
|
45
|
-
end: whenFalse.getEnd()
|
|
46
|
-
},
|
|
47
|
-
text: "''"
|
|
48
|
-
},
|
|
49
|
-
message: "inconsistentTypes",
|
|
50
|
-
range: {
|
|
51
|
-
begin: whenFalse.getStart(sourceFile),
|
|
52
|
-
end: whenFalse.getEnd()
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
} } };
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
function isEmptyArray(node) {
|
|
60
|
-
return ts$1.isArrayLiteralExpression(node) && !node.elements.length;
|
|
61
|
-
}
|
|
62
|
-
function isEmptyStringLike(node) {
|
|
63
|
-
return isStringLike(node) && node.text === "";
|
|
64
|
-
}
|
|
65
|
-
function isStringLike(node) {
|
|
66
|
-
return ts$1.isStringLiteral(node) || ts$1.isNoSubstitutionTemplateLiteral(node);
|
|
67
|
-
}
|
|
68
|
-
function unwrapParentheses(node) {
|
|
69
|
-
return ts$1.isParenthesizedExpression(node) ? unwrapParentheses(node.expression) : node;
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
export { arrayTernarySpreadingConsistency_default as default };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { z } from "zod/v4";
|
|
2
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
3
|
-
readonly description: "Reports array type syntax that doesn't match the configured style.";
|
|
4
|
-
readonly id: "arrayTypes";
|
|
5
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
6
|
-
} & {
|
|
7
|
-
readonly pluginId: string;
|
|
8
|
-
readonly url: string;
|
|
9
|
-
}, "preferArraySyntax" | "preferGenericSyntax" | "preferReadonlyArraySyntax" | "preferReadonlyGenericSyntax", {
|
|
10
|
-
style: z.ZodDefault<z.ZodEnum<{
|
|
11
|
-
array: "array";
|
|
12
|
-
"array-simple": "array-simple";
|
|
13
|
-
generic: "generic";
|
|
14
|
-
}>>;
|
|
15
|
-
}>;
|
|
16
|
-
export default _default;
|
package/lib/rules/arrayTypes.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclaration, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
import { z as z$1 } from "zod/v4";
|
|
5
|
-
//#region src/rules/arrayTypes.ts
|
|
6
|
-
function isSimpleType(typeNode) {
|
|
7
|
-
switch (typeNode?.kind) {
|
|
8
|
-
case ts$1.SyntaxKind.AnyKeyword:
|
|
9
|
-
case ts$1.SyntaxKind.BigIntKeyword:
|
|
10
|
-
case ts$1.SyntaxKind.BooleanKeyword:
|
|
11
|
-
case ts$1.SyntaxKind.NeverKeyword:
|
|
12
|
-
case ts$1.SyntaxKind.NumberKeyword:
|
|
13
|
-
case ts$1.SyntaxKind.ObjectKeyword:
|
|
14
|
-
case ts$1.SyntaxKind.StringKeyword:
|
|
15
|
-
case ts$1.SyntaxKind.SymbolKeyword:
|
|
16
|
-
case ts$1.SyntaxKind.TypeReference:
|
|
17
|
-
case ts$1.SyntaxKind.UndefinedKeyword:
|
|
18
|
-
case ts$1.SyntaxKind.UnknownKeyword:
|
|
19
|
-
case ts$1.SyntaxKind.VoidKeyword: return true;
|
|
20
|
-
case ts$1.SyntaxKind.ArrayType: return isSimpleType(typeNode.elementType);
|
|
21
|
-
default: return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
var arrayTypes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
25
|
-
about: {
|
|
26
|
-
description: "Reports array type syntax that doesn't match the configured style.",
|
|
27
|
-
id: "arrayTypes",
|
|
28
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
29
|
-
},
|
|
30
|
-
messages: {
|
|
31
|
-
preferArraySyntax: {
|
|
32
|
-
primary: "Prefer `T[]` over `Array<T>`.",
|
|
33
|
-
secondary: ["TypeScript provides two equivalent ways to define an array type: `T[]` and `Array<T>`.", "Using the shorthand `T[]` syntax consistently is more concise and idiomatic."],
|
|
34
|
-
suggestions: ["Replace `Array<T>` with `T[]`."]
|
|
35
|
-
},
|
|
36
|
-
preferGenericSyntax: {
|
|
37
|
-
primary: "Prefer `Array<T>` over `T[]`.",
|
|
38
|
-
secondary: ["TypeScript provides two equivalent ways to define an array type: `T[]` and `Array<T>`.", "Using the generic `Array<T>` syntax consistently can be clearer for complex types."],
|
|
39
|
-
suggestions: ["Replace `T[]` with `Array<T>`."]
|
|
40
|
-
},
|
|
41
|
-
preferReadonlyArraySyntax: {
|
|
42
|
-
primary: "Prefer `readonly T[]` over `ReadonlyArray<T>`.",
|
|
43
|
-
secondary: ["TypeScript provides two equivalent ways to define a readonly array type: `readonly T[]` and `ReadonlyArray<T>`.", "Using the shorthand `readonly T[]` syntax consistently is more concise and idiomatic."],
|
|
44
|
-
suggestions: ["Replace `ReadonlyArray<T>` with `readonly T[]`."]
|
|
45
|
-
},
|
|
46
|
-
preferReadonlyGenericSyntax: {
|
|
47
|
-
primary: "Prefer `ReadonlyArray<T>` over `readonly T[]`.",
|
|
48
|
-
secondary: ["TypeScript provides two equivalent ways to define a readonly array type: `readonly T[]` and `ReadonlyArray<T>`.", "Using the generic `ReadonlyArray<T>` syntax consistently can be clearer for complex types."],
|
|
49
|
-
suggestions: ["Replace `readonly T[]` with `ReadonlyArray<T>`."]
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
options: { style: z$1.enum([
|
|
53
|
-
"array",
|
|
54
|
-
"array-simple",
|
|
55
|
-
"generic"
|
|
56
|
-
]).default("array").describe("Which array type syntax to enforce: 'array' for `T[]`, 'generic' for `Array<T>`, or 'array-simple' for `T[]` only with simple types.") },
|
|
57
|
-
setup(context) {
|
|
58
|
-
return { visitors: {
|
|
59
|
-
ArrayType: (node, { options, sourceFile }) => {
|
|
60
|
-
if (node.parent.kind === ts$1.SyntaxKind.TypeOperator && node.parent.operator === ts$1.SyntaxKind.ReadonlyKeyword) return;
|
|
61
|
-
switch (options.style) {
|
|
62
|
-
case "array": return;
|
|
63
|
-
case "array-simple":
|
|
64
|
-
if (isSimpleType(node.elementType)) return;
|
|
65
|
-
break;
|
|
66
|
-
case "generic": break;
|
|
67
|
-
}
|
|
68
|
-
context.report({
|
|
69
|
-
message: "preferGenericSyntax",
|
|
70
|
-
range: getTSNodeRange(node, sourceFile)
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
TypeOperator: (node, { options, sourceFile }) => {
|
|
74
|
-
if (node.operator !== ts$1.SyntaxKind.ReadonlyKeyword || node.type.kind !== ts$1.SyntaxKind.ArrayType) return;
|
|
75
|
-
const arrayType = node.type;
|
|
76
|
-
switch (options.style) {
|
|
77
|
-
case "array": return;
|
|
78
|
-
case "array-simple":
|
|
79
|
-
if (isSimpleType(arrayType.elementType)) return;
|
|
80
|
-
break;
|
|
81
|
-
case "generic": break;
|
|
82
|
-
}
|
|
83
|
-
context.report({
|
|
84
|
-
message: "preferReadonlyGenericSyntax",
|
|
85
|
-
range: getTSNodeRange(node, sourceFile)
|
|
86
|
-
});
|
|
87
|
-
},
|
|
88
|
-
TypeReference: (node, { options, program, sourceFile, typeChecker }) => {
|
|
89
|
-
if (node.typeName.kind !== ts$1.SyntaxKind.Identifier || !isGlobalDeclaration(node.typeName, typeChecker, program)) return;
|
|
90
|
-
const typeName = node.typeName.text;
|
|
91
|
-
if (typeName !== "Array" && typeName !== "ReadonlyArray") return;
|
|
92
|
-
const typeArg = node.typeArguments?.[0];
|
|
93
|
-
switch (options.style) {
|
|
94
|
-
case "array": break;
|
|
95
|
-
case "array-simple":
|
|
96
|
-
if (!isSimpleType(typeArg)) return;
|
|
97
|
-
break;
|
|
98
|
-
case "generic": return;
|
|
99
|
-
}
|
|
100
|
-
context.report({
|
|
101
|
-
message: typeName === "Array" ? "preferArraySyntax" : "preferReadonlyArraySyntax",
|
|
102
|
-
range: getTSNodeRange(node, sourceFile)
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
} };
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
//#endregion
|
|
109
|
-
export { arrayTypes_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary array length checks before `.some()` or `.every()` calls.";
|
|
3
|
-
readonly id: "arrayUnnecessaryLengthChecks";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryLengthCheckEvery" | "unnecessaryLengthCheckSome", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,95 +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/arrayUnnecessaryLengthChecks.ts
|
|
5
|
-
function haveSameArrayExpression(expr1, expr2, sourceFile) {
|
|
6
|
-
return expr1.getText(sourceFile) === expr2.getText(sourceFile);
|
|
7
|
-
}
|
|
8
|
-
function isLengthNonZeroCheck(node) {
|
|
9
|
-
const { left, operatorToken, right } = node;
|
|
10
|
-
if (operatorToken.kind === ts$1.SyntaxKind.ExclamationEqualsToken || operatorToken.kind === ts$1.SyntaxKind.ExclamationEqualsEqualsToken) {
|
|
11
|
-
if (isLengthProperty(left) && isZero(right)) return { arrayExpression: left.expression };
|
|
12
|
-
if (isZero(left) && isLengthProperty(right)) return { arrayExpression: right.expression };
|
|
13
|
-
}
|
|
14
|
-
if (operatorToken.kind === ts$1.SyntaxKind.GreaterThanToken && isLengthProperty(left) && isZero(right)) return { arrayExpression: left.expression };
|
|
15
|
-
}
|
|
16
|
-
function isLengthProperty(node) {
|
|
17
|
-
return ts$1.isPropertyAccessExpression(node) && node.name.text === "length";
|
|
18
|
-
}
|
|
19
|
-
function isLengthZeroCheck(node) {
|
|
20
|
-
const { left, operatorToken, right } = node;
|
|
21
|
-
if (operatorToken.kind === ts$1.SyntaxKind.EqualsEqualsToken || operatorToken.kind === ts$1.SyntaxKind.EqualsEqualsEqualsToken) {
|
|
22
|
-
if (isLengthProperty(left) && isZero(right)) return {
|
|
23
|
-
arrayExpression: left.expression,
|
|
24
|
-
isZeroCheck: true
|
|
25
|
-
};
|
|
26
|
-
if (isZero(left) && isLengthProperty(right)) return {
|
|
27
|
-
arrayExpression: right.expression,
|
|
28
|
-
isZeroCheck: true
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
function isSomeOrEveryCall(node, methodName) {
|
|
33
|
-
if (!ts$1.isCallExpression(node)) return;
|
|
34
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
35
|
-
if (node.expression.name.text !== methodName) return;
|
|
36
|
-
return node.expression.expression;
|
|
37
|
-
}
|
|
38
|
-
function isZero(node) {
|
|
39
|
-
return ts$1.isNumericLiteral(node) && node.text === "0";
|
|
40
|
-
}
|
|
41
|
-
var arrayUnnecessaryLengthChecks_default = ruleCreator.createRule(typescriptLanguage, {
|
|
42
|
-
about: {
|
|
43
|
-
description: "Reports unnecessary array length checks before `.some()` or `.every()` calls.",
|
|
44
|
-
id: "arrayUnnecessaryLengthChecks",
|
|
45
|
-
presets: ["logical"]
|
|
46
|
-
},
|
|
47
|
-
messages: {
|
|
48
|
-
unnecessaryLengthCheckEvery: {
|
|
49
|
-
primary: "Unnecessary length check before `.every()`.",
|
|
50
|
-
secondary: ["`.every()` returns `true` for an empty array, so checking `array.length === 0` before calling `.every()` is redundant."],
|
|
51
|
-
suggestions: ["Remove the length check."]
|
|
52
|
-
},
|
|
53
|
-
unnecessaryLengthCheckSome: {
|
|
54
|
-
primary: "Unnecessary length check before `.some()`.",
|
|
55
|
-
secondary: ["`.some()` returns `false` for an empty array, so checking `array.length !== 0` or `array.length > 0` before calling `.some()` is redundant."],
|
|
56
|
-
suggestions: ["Remove the length check."]
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
setup(context) {
|
|
60
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
61
|
-
if (node.operatorToken.kind === ts$1.SyntaxKind.AmpersandAmpersandToken) {
|
|
62
|
-
const { left, right } = node;
|
|
63
|
-
if (!ts$1.isBinaryExpression(left)) return;
|
|
64
|
-
const nonZeroCheck = isLengthNonZeroCheck(left);
|
|
65
|
-
if (!nonZeroCheck) return;
|
|
66
|
-
const someArrayExpr = isSomeOrEveryCall(right, "some");
|
|
67
|
-
if (someArrayExpr && haveSameArrayExpression(nonZeroCheck.arrayExpression, someArrayExpr, sourceFile)) context.report({
|
|
68
|
-
fix: {
|
|
69
|
-
range: getTSNodeRange(node, sourceFile),
|
|
70
|
-
text: right.getText(sourceFile)
|
|
71
|
-
},
|
|
72
|
-
message: "unnecessaryLengthCheckSome",
|
|
73
|
-
range: getTSNodeRange(left, sourceFile)
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
if (node.operatorToken.kind === ts$1.SyntaxKind.BarBarToken) {
|
|
77
|
-
const { left, right } = node;
|
|
78
|
-
if (!ts$1.isBinaryExpression(left)) return;
|
|
79
|
-
const zeroCheck = isLengthZeroCheck(left);
|
|
80
|
-
if (!zeroCheck) return;
|
|
81
|
-
const everyArrayExpr = isSomeOrEveryCall(right, "every");
|
|
82
|
-
if (everyArrayExpr && haveSameArrayExpression(zeroCheck.arrayExpression, everyArrayExpr, sourceFile)) context.report({
|
|
83
|
-
fix: {
|
|
84
|
-
range: getTSNodeRange(node, sourceFile),
|
|
85
|
-
text: right.getText(sourceFile)
|
|
86
|
-
},
|
|
87
|
-
message: "unnecessaryLengthCheckEvery",
|
|
88
|
-
range: getTSNodeRange(left, sourceFile)
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
} } };
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
//#endregion
|
|
95
|
-
export { arrayUnnecessaryLengthChecks_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using explicit literal types when `as const` can be used.";
|
|
3
|
-
readonly id: "asConstAssertions";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferAsConst" | "preferAsConstAnnotation", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,55 +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/asConstAssertions.ts
|
|
5
|
-
function getTextValue(node) {
|
|
6
|
-
switch (node.kind) {
|
|
7
|
-
case ts$1.SyntaxKind.FalseKeyword: return "false";
|
|
8
|
-
case ts$1.SyntaxKind.LiteralType: return getTextValue(node.literal);
|
|
9
|
-
case ts$1.SyntaxKind.NumericLiteral: return node.text;
|
|
10
|
-
case ts$1.SyntaxKind.StringLiteral: return node.text;
|
|
11
|
-
case ts$1.SyntaxKind.TrueKeyword: return "true";
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
function isLiteralType(node) {
|
|
15
|
-
return ts$1.isLiteralTypeNode(node) && (ts$1.isStringLiteral(node.literal) || ts$1.isNumericLiteral(node.literal) || node.literal.kind === ts$1.SyntaxKind.TrueKeyword || node.literal.kind === ts$1.SyntaxKind.FalseKeyword);
|
|
16
|
-
}
|
|
17
|
-
var asConstAssertions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
18
|
-
about: {
|
|
19
|
-
description: "Reports using explicit literal types when `as const` can be used.",
|
|
20
|
-
id: "asConstAssertions",
|
|
21
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
22
|
-
},
|
|
23
|
-
messages: {
|
|
24
|
-
preferAsConst: {
|
|
25
|
-
primary: "Prefer `as const` over an explicit literal type assertion.",
|
|
26
|
-
secondary: ["`as const` tells TypeScript to infer the literal type automatically.", "This avoids repeating the literal value and is more concise."],
|
|
27
|
-
suggestions: ["Replace the explicit literal type with `as const`."]
|
|
28
|
-
},
|
|
29
|
-
preferAsConstAnnotation: {
|
|
30
|
-
primary: "Prefer `as const` over a literal type annotation.",
|
|
31
|
-
secondary: ["When the literal type matches the initializer value, use `as const` instead.", "This avoids repeating the literal value and is more concise."],
|
|
32
|
-
suggestions: ["Remove the type annotation and add `as const` to the initializer."]
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
setup(context) {
|
|
36
|
-
function compareTypes(expressionNode, typeNode, message, sourceFile) {
|
|
37
|
-
if (getTextValue(typeNode) === void 0) return;
|
|
38
|
-
if (getTextValue(expressionNode) === void 0) return;
|
|
39
|
-
context.report({
|
|
40
|
-
message,
|
|
41
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
return { visitors: {
|
|
45
|
-
AsExpression: (node, { sourceFile }) => {
|
|
46
|
-
if (isLiteralType(node.type)) compareTypes(node.expression, node.type, "preferAsConst", sourceFile);
|
|
47
|
-
},
|
|
48
|
-
VariableDeclaration: (node, { sourceFile }) => {
|
|
49
|
-
if (node.initializer && node.type && isLiteralType(node.type)) compareTypes(node.initializer, node.type, "preferAsConstAnnotation", sourceFile);
|
|
50
|
-
}
|
|
51
|
-
} };
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
//#endregion
|
|
55
|
-
export { asConstAssertions_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer logical assignment operator shorthand expressions.";
|
|
3
|
-
readonly id: "assignmentOperatorShorthands";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferShorthand", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/assignmentOperatorShorthands.ts
|
|
5
|
-
var assignmentOperatorShorthands_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Prefer logical assignment operator shorthand expressions.",
|
|
8
|
-
id: "assignmentOperatorShorthands",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferShorthand: {
|
|
12
|
-
primary: "Prefer the logical assignment operator shorthand `{{ operator }}`.",
|
|
13
|
-
secondary: ["Logical assignment operators are more concise and express the intent more clearly.", "They were introduced in ES2021 and are supported in all modern environments."],
|
|
14
|
-
suggestions: ["Use the shorthand operator `{{ operator }}`."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function getShorthand(kind) {
|
|
18
|
-
switch (kind) {
|
|
19
|
-
case ts$1.SyntaxKind.AmpersandAmpersandToken: return "&&=";
|
|
20
|
-
case ts$1.SyntaxKind.BarBarToken: return "||=";
|
|
21
|
-
case ts$1.SyntaxKind.QuestionQuestionToken: return "??=";
|
|
22
|
-
default: return;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
26
|
-
if (node.operatorToken.kind !== ts$1.SyntaxKind.EqualsToken || !ts$1.isBinaryExpression(node.right)) return;
|
|
27
|
-
const shorthand = getShorthand(node.right.operatorToken.kind);
|
|
28
|
-
if (!shorthand) return;
|
|
29
|
-
if (!hasSameTokens(node.left, node.right.left, sourceFile)) return;
|
|
30
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
31
|
-
const fixedText = `${node.left.getText(sourceFile)} ${shorthand} ${node.right.right.getText(sourceFile)}`;
|
|
32
|
-
context.report({
|
|
33
|
-
data: { operator: shorthand },
|
|
34
|
-
fix: {
|
|
35
|
-
range,
|
|
36
|
-
text: fixedText
|
|
37
|
-
},
|
|
38
|
-
message: "preferShorthand",
|
|
39
|
-
range
|
|
40
|
-
});
|
|
41
|
-
} } };
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
//#endregion
|
|
45
|
-
export { assignmentOperatorShorthands_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports async functions that do not use await.";
|
|
3
|
-
readonly id: "asyncFunctionAwaits";
|
|
4
|
-
readonly presets: readonly ["logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingAwait", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,53 +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
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/asyncFunctionAwaits.ts
|
|
6
|
-
var asyncFunctionAwaits_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports async functions that do not use await.",
|
|
9
|
-
id: "asyncFunctionAwaits",
|
|
10
|
-
presets: ["logicalStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { missingAwait: {
|
|
13
|
-
primary: "This function is marked `async` but does not contain an `await` expression or return a Promise.",
|
|
14
|
-
secondary: ["Async functions always wrap their return value in a Promise, which adds overhead if you're not using await.", "This may indicate incomplete implementation or leftover code after refactoring."],
|
|
15
|
-
suggestions: ["Add an `await` expression if you need to wait for asynchronous operations.", "Remove the `async` keyword if the function doesn't need to be asynchronous."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
function checkFunction(node, { sourceFile, typeChecker }) {
|
|
19
|
-
const asyncModifier = node.modifiers?.find((modifier) => modifier.kind === ts$1.SyntaxKind.AsyncKeyword);
|
|
20
|
-
if (!asyncModifier || node.asteriskToken || !node.body || isEmptyBody(node.body) || checkForAwait(node.body) || bodyReturnsThenable(node.body, typeChecker)) return;
|
|
21
|
-
context.report({
|
|
22
|
-
message: "missingAwait",
|
|
23
|
-
range: getTSNodeRange(asyncModifier, sourceFile)
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
return { visitors: {
|
|
27
|
-
ArrowFunction: checkFunction,
|
|
28
|
-
FunctionDeclaration: checkFunction,
|
|
29
|
-
FunctionExpression: checkFunction,
|
|
30
|
-
MethodDeclaration: checkFunction
|
|
31
|
-
} };
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
function bodyReturnsThenable(body, typeChecker) {
|
|
35
|
-
if (!ts$1.isBlock(body)) return tsutils.isThenableType(typeChecker, body);
|
|
36
|
-
function checkReturnStatements(node) {
|
|
37
|
-
if (ts$1.isReturnStatement(node) && node.expression && tsutils.isThenableType(typeChecker, node.expression)) return true;
|
|
38
|
-
if (tsutils.isFunctionScopeBoundary(node)) return false;
|
|
39
|
-
return ts$1.forEachChild(node, checkReturnStatements);
|
|
40
|
-
}
|
|
41
|
-
return ts$1.forEachChild(body, checkReturnStatements);
|
|
42
|
-
}
|
|
43
|
-
function checkForAwait(node) {
|
|
44
|
-
if (ts$1.isAwaitExpression(node)) return true;
|
|
45
|
-
if (ts$1.isForOfStatement(node) && node.awaitModifier) return true;
|
|
46
|
-
if (tsutils.isFunctionScopeBoundary(node)) return false;
|
|
47
|
-
return ts$1.forEachChild(node, checkForAwait);
|
|
48
|
-
}
|
|
49
|
-
function isEmptyBody(body) {
|
|
50
|
-
return ts$1.isBlock(body) && !body.statements.length;
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { asyncFunctionAwaits_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using async functions as Promise executor functions.";
|
|
3
|
-
readonly id: "asyncPromiseExecutors";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "asyncPromiseExecutor", undefined>;
|
|
9
|
-
export default _default;
|