@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,106 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticNumberValue, getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryMathClamps.ts
|
|
5
|
-
function getMathMethodInfo(node, typeChecker, program) {
|
|
6
|
-
const unwrapped = unwrapParenthesizedNode(node);
|
|
7
|
-
if (unwrapped.kind !== SyntaxKind.CallExpression || unwrapped.questionDotToken || unwrapped.arguments.length < 1 || unwrapped.arguments.some((arg) => arg.kind === SyntaxKind.SpreadElement)) return;
|
|
8
|
-
if (isMathMethod(unwrapped.expression, "min", typeChecker, program)) return {
|
|
9
|
-
arguments: Array.from(unwrapped.arguments),
|
|
10
|
-
method: "min",
|
|
11
|
-
node: unwrapped
|
|
12
|
-
};
|
|
13
|
-
if (isMathMethod(unwrapped.expression, "max", typeChecker, program)) return {
|
|
14
|
-
arguments: Array.from(unwrapped.arguments),
|
|
15
|
-
method: "max",
|
|
16
|
-
node: unwrapped
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function isMathMethod(node, methodName, typeChecker, program) {
|
|
20
|
-
return node.kind === SyntaxKind.PropertyAccessExpression && !node.questionDotToken && node.name.kind === SyntaxKind.Identifier && node.name.text === methodName && node.expression.kind === SyntaxKind.Identifier && isGlobalDeclarationOfName(node.expression, "Math", typeChecker, program);
|
|
21
|
-
}
|
|
22
|
-
var unnecessaryMathClamps_default = ruleCreator.createRule(typescriptLanguage, {
|
|
23
|
-
about: {
|
|
24
|
-
description: "Reports unnecessary Math.min and Math.max calls with constant arguments or incorrect clamping patterns.",
|
|
25
|
-
id: "unnecessaryMathClamps",
|
|
26
|
-
presets: ["logical"]
|
|
27
|
-
},
|
|
28
|
-
messages: {
|
|
29
|
-
constantArguments: {
|
|
30
|
-
primary: "This `Math.{{ method }}` with all constant arguments will always return `{{ result }}`.",
|
|
31
|
-
secondary: ["When all arguments to `Math.{{ method }}` are constants, the result is always the same value.", "You can replace this call with the constant `{{ result }}` directly."],
|
|
32
|
-
suggestions: ["Replace with the constant value `{{ result }}`."]
|
|
33
|
-
},
|
|
34
|
-
incorrectClampOrder: {
|
|
35
|
-
primary: "Incorrect clamping pattern: `Math.{{ outerMethod }}({{ min }}, Math.{{ innerMethod }}({{ max }}, x))` should be `Math.min({{ max }}, Math.max({{ min }}, x))`.",
|
|
36
|
-
secondary: ["To clamp a value between a minimum and maximum, use `Math.min(max, Math.max(min, value))`.", "The current pattern will not correctly constrain the value to the intended range."],
|
|
37
|
-
suggestions: ["Use the correct clamping pattern: `Math.min(max, Math.max(min, value))`."]
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
setup(context) {
|
|
41
|
-
return { visitors: { CallExpression: (node, { program, sourceFile, typeChecker }) => {
|
|
42
|
-
const outerInfo = getMathMethodInfo(node, typeChecker, program);
|
|
43
|
-
if (!outerInfo) return;
|
|
44
|
-
const numericValues = [];
|
|
45
|
-
let allNumeric = true;
|
|
46
|
-
for (const arg of outerInfo.arguments) {
|
|
47
|
-
const value = getStaticNumberValue(arg);
|
|
48
|
-
if (value === void 0) {
|
|
49
|
-
allNumeric = false;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
numericValues.push(value);
|
|
53
|
-
}
|
|
54
|
-
if (allNumeric) {
|
|
55
|
-
const result = outerInfo.method === "min" ? Math.min(...numericValues) : Math.max(...numericValues);
|
|
56
|
-
context.report({
|
|
57
|
-
data: {
|
|
58
|
-
method: outerInfo.method,
|
|
59
|
-
result: String(result)
|
|
60
|
-
},
|
|
61
|
-
message: "constantArguments",
|
|
62
|
-
range: getTSNodeRange(node, sourceFile)
|
|
63
|
-
});
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (outerInfo.arguments.length === 2) {
|
|
67
|
-
const firstArgument = outerInfo.arguments[0];
|
|
68
|
-
const secondArgument = outerInfo.arguments[1];
|
|
69
|
-
const innerInfo = getMathMethodInfo(secondArgument, typeChecker, program);
|
|
70
|
-
if (innerInfo && innerInfo.method !== outerInfo.method && innerInfo.arguments.length === 2) {
|
|
71
|
-
const innerFirstArg = innerInfo.arguments[0];
|
|
72
|
-
const innerSecondArg = innerInfo.arguments[1];
|
|
73
|
-
if (!innerFirstArg || !innerSecondArg) return;
|
|
74
|
-
const outerConstant = getStaticNumberValue(firstArgument);
|
|
75
|
-
const innerConstantFirst = getStaticNumberValue(innerFirstArg);
|
|
76
|
-
const innerConstantSecond = getStaticNumberValue(innerSecondArg);
|
|
77
|
-
if (outerInfo.method === "max" && innerInfo.method === "min" && outerConstant !== void 0 && innerConstantFirst !== void 0 && outerConstant < innerConstantFirst) {
|
|
78
|
-
context.report({
|
|
79
|
-
data: {
|
|
80
|
-
innerMethod: innerInfo.method,
|
|
81
|
-
max: String(innerConstantFirst),
|
|
82
|
-
min: String(outerConstant),
|
|
83
|
-
outerMethod: outerInfo.method
|
|
84
|
-
},
|
|
85
|
-
message: "incorrectClampOrder",
|
|
86
|
-
range: getTSNodeRange(node, sourceFile)
|
|
87
|
-
});
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
if (outerInfo.method === "max" && innerInfo.method === "min" && outerConstant !== void 0 && innerConstantSecond !== void 0 && outerConstant < innerConstantSecond) context.report({
|
|
91
|
-
data: {
|
|
92
|
-
innerMethod: innerInfo.method,
|
|
93
|
-
max: String(innerConstantSecond),
|
|
94
|
-
min: String(outerConstant),
|
|
95
|
-
outerMethod: outerInfo.method
|
|
96
|
-
},
|
|
97
|
-
message: "incorrectClampOrder",
|
|
98
|
-
range: getTSNodeRange(node, sourceFile)
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} } };
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
//#endregion
|
|
106
|
-
export { unnecessaryMathClamps_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports numeric literals with unnecessary zero fractions or dangling dots.";
|
|
3
|
-
readonly id: "unnecessaryNumericFractions";
|
|
4
|
-
readonly presets: readonly ["stylistic"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "danglingDot" | "zeroFraction", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/unnecessaryNumericFractions.ts
|
|
4
|
-
var unnecessaryNumericFractions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
5
|
-
about: {
|
|
6
|
-
description: "Reports numeric literals with unnecessary zero fractions or dangling dots.",
|
|
7
|
-
id: "unnecessaryNumericFractions",
|
|
8
|
-
presets: ["stylistic"]
|
|
9
|
-
},
|
|
10
|
-
messages: {
|
|
11
|
-
danglingDot: {
|
|
12
|
-
primary: "Prefer `{{ fixed }}` over `{{ raw }}` to avoid a dangling dot.",
|
|
13
|
-
secondary: ["Numeric literals with dangling dots (e.g., `1.`) are harder to read and can be confusing.", "The dot doesn't add any precision information to the number."],
|
|
14
|
-
suggestions: ["Remove the dangling dot from the numeric literal."]
|
|
15
|
-
},
|
|
16
|
-
zeroFraction: {
|
|
17
|
-
primary: "Prefer `{{ fixed }}` over `{{ raw }}` to avoid an unnecessary zero fraction.",
|
|
18
|
-
secondary: ["Numeric literals with zero fractions (e.g., `1.0`) are unnecessarily verbose.", "The zero fraction doesn't add any precision information to the number."],
|
|
19
|
-
suggestions: ["Remove the zero fraction from the numeric literal."]
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
setup(context) {
|
|
23
|
-
return { visitors: { NumericLiteral: (node, { sourceFile }) => {
|
|
24
|
-
const raw = node.getText(sourceFile);
|
|
25
|
-
const match = /^([\d_]*)(\.[\d_]*)(?:e[+-]?\d+)?$/.exec(raw);
|
|
26
|
-
if (!match) return;
|
|
27
|
-
const before = match[1];
|
|
28
|
-
const dotAndFractions = match[2];
|
|
29
|
-
const after = raw.slice(before.length + dotAndFractions.length);
|
|
30
|
-
const fixed = (before + dotAndFractions.replace(/[0_]+$/, "").replace(/\.$/, "") || "0") + after;
|
|
31
|
-
if (fixed === raw) return;
|
|
32
|
-
context.report({
|
|
33
|
-
data: {
|
|
34
|
-
fixed,
|
|
35
|
-
raw
|
|
36
|
-
},
|
|
37
|
-
fix: {
|
|
38
|
-
range: getTSNodeRange(node, sourceFile),
|
|
39
|
-
text: fixed
|
|
40
|
-
},
|
|
41
|
-
message: dotAndFractions === "." ? "danglingDot" : "zeroFraction",
|
|
42
|
-
range: getTSNodeRange(node, sourceFile)
|
|
43
|
-
});
|
|
44
|
-
} } };
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { unnecessaryNumericFractions_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Renames that don't change the identifier name are unnecessary.";
|
|
3
|
-
readonly id: "unnecessaryRenames";
|
|
4
|
-
readonly presets: readonly ["stylistic"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryRename", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { countCommentsInRange } from "./utils/countCommentsInRange.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts from "typescript";
|
|
5
|
-
//#region src/rules/unnecessaryRenames.ts
|
|
6
|
-
function getModuleNameText(node) {
|
|
7
|
-
if (!node) return;
|
|
8
|
-
if (ts.isIdentifier(node) || ts.isStringLiteral(node)) return node.text;
|
|
9
|
-
}
|
|
10
|
-
function getPropertyAssignmentTargetInfo(node) {
|
|
11
|
-
if (node.initializer.kind === ts.SyntaxKind.BinaryExpression && node.initializer.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
|
|
12
|
-
const targetParent = node.initializer.left;
|
|
13
|
-
return {
|
|
14
|
-
parenthesizesTarget: targetParent.kind === ts.SyntaxKind.ParenthesizedExpression,
|
|
15
|
-
replacementNode: node.initializer,
|
|
16
|
-
targetNode: unwrapParenthesizedNode(targetParent)
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const targetNode = unwrapParenthesizedNode(node.initializer);
|
|
20
|
-
return {
|
|
21
|
-
parenthesizesTarget: false,
|
|
22
|
-
replacementNode: targetNode,
|
|
23
|
-
targetNode
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
var unnecessaryRenames_default = ruleCreator.createRule(typescriptLanguage, {
|
|
27
|
-
about: {
|
|
28
|
-
description: "Renames that don't change the identifier name are unnecessary.",
|
|
29
|
-
id: "unnecessaryRenames",
|
|
30
|
-
presets: ["stylistic"]
|
|
31
|
-
},
|
|
32
|
-
messages: { unnecessaryRename: {
|
|
33
|
-
primary: "Renaming to the same identifier name is unnecessary.",
|
|
34
|
-
secondary: ["Using the same name for both the source and target is redundant.", "Remove the rename and use the shorthand syntax instead."],
|
|
35
|
-
suggestions: ["Remove the unnecessary rename."]
|
|
36
|
-
} },
|
|
37
|
-
setup(context) {
|
|
38
|
-
function reportUnnecessaryRename(node, parenthesizesTarget, replacementRange, sourceFile) {
|
|
39
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
40
|
-
const shouldSkipFix = parenthesizesTarget || countCommentsInRange(sourceFile.text, range) > countCommentsInRange(sourceFile.text, replacementRange);
|
|
41
|
-
context.report({
|
|
42
|
-
fix: shouldSkipFix ? void 0 : {
|
|
43
|
-
range,
|
|
44
|
-
text: sourceFile.text.slice(replacementRange.begin, replacementRange.end)
|
|
45
|
-
},
|
|
46
|
-
message: "unnecessaryRename",
|
|
47
|
-
range
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
function checkExportOrImportSpecifier(original, rangeNode, sourceFile) {
|
|
51
|
-
if (getModuleNameText(original.propertyName) !== getModuleNameText(original.name)) return;
|
|
52
|
-
reportUnnecessaryRename(original, false, getTSNodeRange(rangeNode, sourceFile), sourceFile);
|
|
53
|
-
}
|
|
54
|
-
function checkObjectLiteralDestructuring(node, sourceFile) {
|
|
55
|
-
for (const property of node.properties) {
|
|
56
|
-
if (!ts.isPropertyAssignment(property) || property.name.kind === ts.SyntaxKind.ComputedPropertyName) continue;
|
|
57
|
-
const { parenthesizesTarget, replacementNode, targetNode } = getPropertyAssignmentTargetInfo(property);
|
|
58
|
-
if (ts.isObjectLiteralExpression(targetNode)) {
|
|
59
|
-
checkObjectLiteralDestructuring(targetNode, sourceFile);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
if (targetNode.kind !== ts.SyntaxKind.Identifier) continue;
|
|
63
|
-
if (getModuleNameText(property.name) !== targetNode.text) continue;
|
|
64
|
-
reportUnnecessaryRename(property, parenthesizesTarget, getTSNodeRange(replacementNode, sourceFile), sourceFile);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return { visitors: {
|
|
68
|
-
BinaryExpression: (node, { sourceFile }) => {
|
|
69
|
-
if (node.operatorToken.kind !== ts.SyntaxKind.EqualsToken) return;
|
|
70
|
-
const left = unwrapParenthesizedNode(node.left);
|
|
71
|
-
if (left.kind !== ts.SyntaxKind.ObjectLiteralExpression) return;
|
|
72
|
-
checkObjectLiteralDestructuring(left, sourceFile);
|
|
73
|
-
},
|
|
74
|
-
BindingElement: (node, { sourceFile }) => {
|
|
75
|
-
if (node.propertyName?.kind !== ts.SyntaxKind.ComputedPropertyName && node.name.kind === ts.SyntaxKind.Identifier && getModuleNameText(node.propertyName) === getModuleNameText(node.name)) reportUnnecessaryRename(node, false, {
|
|
76
|
-
begin: node.name.getStart(sourceFile),
|
|
77
|
-
end: node.getEnd()
|
|
78
|
-
}, sourceFile);
|
|
79
|
-
},
|
|
80
|
-
ExportSpecifier: (node, { sourceFile }) => {
|
|
81
|
-
if (node.propertyName) checkExportOrImportSpecifier(node, node.propertyName, sourceFile);
|
|
82
|
-
},
|
|
83
|
-
ImportSpecifier: (node, { sourceFile }) => {
|
|
84
|
-
checkExportOrImportSpecifier(node, node.name, sourceFile);
|
|
85
|
-
}
|
|
86
|
-
} };
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
//#endregion
|
|
90
|
-
export { unnecessaryRenames_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports ternary expressions that can be simplified to boolean expressions or logical operators";
|
|
3
|
-
readonly id: "unnecessaryTernaries";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryBooleanTernary" | "unnecessaryLogicalTernary", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryTernaries.ts
|
|
5
|
-
function getNodeText(node, sourceFile) {
|
|
6
|
-
return sourceFile.text.slice(node.getStart(sourceFile), node.getEnd());
|
|
7
|
-
}
|
|
8
|
-
var unnecessaryTernaries_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports ternary expressions that can be simplified to boolean expressions or logical operators",
|
|
11
|
-
id: "unnecessaryTernaries",
|
|
12
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
unnecessaryBooleanTernary: {
|
|
16
|
-
primary: "This ternary expression can be simplified to a boolean expression.",
|
|
17
|
-
secondary: ["Using a ternary to return true or false based on a condition is redundant.", "The condition itself already evaluates to a boolean value."],
|
|
18
|
-
suggestions: ["Simplify to a boolean expression."]
|
|
19
|
-
},
|
|
20
|
-
unnecessaryLogicalTernary: {
|
|
21
|
-
primary: "This ternary expression can be simplified to a logical operator.",
|
|
22
|
-
secondary: ["Using a ternary where the consequent matches the condition is redundant.", "A logical OR operator (`||`) expresses the same logic more clearly."],
|
|
23
|
-
suggestions: ["Replace with logical OR operator."]
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
setup(context) {
|
|
27
|
-
return { visitors: { ConditionalExpression(node, { sourceFile }) {
|
|
28
|
-
const { condition, whenFalse, whenTrue } = node;
|
|
29
|
-
if (whenTrue.kind === ts.SyntaxKind.TrueKeyword && whenFalse.kind === ts.SyntaxKind.FalseKeyword) {
|
|
30
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
31
|
-
context.report({
|
|
32
|
-
fix: {
|
|
33
|
-
range,
|
|
34
|
-
text: getNodeText(condition, sourceFile)
|
|
35
|
-
},
|
|
36
|
-
message: "unnecessaryBooleanTernary",
|
|
37
|
-
range
|
|
38
|
-
});
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (whenTrue.kind === ts.SyntaxKind.FalseKeyword && whenFalse.kind === ts.SyntaxKind.TrueKeyword) {
|
|
42
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
43
|
-
const conditionText = getNodeText(condition, sourceFile);
|
|
44
|
-
const negatedCondition = ts.isBinaryExpression(condition) || ts.isConditionalExpression(condition) ? `!(${conditionText})` : `!${conditionText}`;
|
|
45
|
-
context.report({
|
|
46
|
-
fix: {
|
|
47
|
-
range,
|
|
48
|
-
text: negatedCondition
|
|
49
|
-
},
|
|
50
|
-
message: "unnecessaryBooleanTernary",
|
|
51
|
-
range
|
|
52
|
-
});
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (hasSameTokens(condition, whenTrue, sourceFile)) {
|
|
56
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
57
|
-
const conditionText = getNodeText(condition, sourceFile);
|
|
58
|
-
const alternateText = getNodeText(whenFalse, sourceFile);
|
|
59
|
-
context.report({
|
|
60
|
-
fix: {
|
|
61
|
-
range,
|
|
62
|
-
text: `${conditionText} || ${alternateText}`
|
|
63
|
-
},
|
|
64
|
-
message: "unnecessaryLogicalTernary",
|
|
65
|
-
range
|
|
66
|
-
});
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (ts.isPrefixUnaryExpression(condition) && condition.operator === ts.SyntaxKind.ExclamationToken && hasSameTokens(condition.operand, whenFalse, sourceFile)) {
|
|
70
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
71
|
-
const operandText = getNodeText(condition.operand, sourceFile);
|
|
72
|
-
const alternateText = getNodeText(whenTrue, sourceFile);
|
|
73
|
-
context.report({
|
|
74
|
-
fix: {
|
|
75
|
-
range,
|
|
76
|
-
text: `${operandText} || ${alternateText}`
|
|
77
|
-
},
|
|
78
|
-
message: "unnecessaryLogicalTernary",
|
|
79
|
-
range
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
} } };
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
//#endregion
|
|
86
|
-
export { unnecessaryTernaries_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary \"use strict\" directives in ES modules and classes.";
|
|
3
|
-
readonly id: "unnecessaryUseStricts";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryUseStrict", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryUseStricts.ts
|
|
5
|
-
var unnecessaryUseStricts_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports unnecessary \"use strict\" directives in ES modules and classes.",
|
|
8
|
-
id: "unnecessaryUseStricts",
|
|
9
|
-
presets: ["logical"]
|
|
10
|
-
},
|
|
11
|
-
messages: { unnecessaryUseStrict: {
|
|
12
|
-
primary: "This `\"use strict\"` directive is redundant and can be safely removed.",
|
|
13
|
-
secondary: ["ECMAScript modules and class bodies are automatically in strict mode.", "The `\"use strict\"` directive has no effect and is redundant."],
|
|
14
|
-
suggestions: ["Remove the `\"use strict\"` directive."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { SourceFile(node, { sourceFile }) {
|
|
18
|
-
if (!ts.isExternalModule(sourceFile)) return;
|
|
19
|
-
const firstStatement = node.statements[0];
|
|
20
|
-
if (!ts.isExpressionStatement(firstStatement) || !ts.isStringLiteral(firstStatement.expression) || firstStatement.expression.text !== "use strict") return;
|
|
21
|
-
const secondStatement = node.statements[1];
|
|
22
|
-
const fixEnd = secondStatement ? secondStatement.getStart(sourceFile) : firstStatement.getEnd();
|
|
23
|
-
context.report({
|
|
24
|
-
fix: {
|
|
25
|
-
range: {
|
|
26
|
-
begin: firstStatement.getStart(sourceFile),
|
|
27
|
-
end: fixEnd
|
|
28
|
-
},
|
|
29
|
-
text: ""
|
|
30
|
-
},
|
|
31
|
-
message: "unnecessaryUseStrict",
|
|
32
|
-
range: getTSNodeRange(firstStatement, sourceFile)
|
|
33
|
-
});
|
|
34
|
-
} } };
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
//#endregion
|
|
38
|
-
export { unnecessaryUseStricts_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports negating the left operand of `in` or `instanceof` relations.";
|
|
3
|
-
readonly id: "unsafeNegations";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferNegatingRelation", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/unsafeNegations.ts
|
|
5
|
-
const operatorStrings = /* @__PURE__ */ new Map([[SyntaxKind.InKeyword, "in"], [SyntaxKind.InstanceOfKeyword, "instanceof"]]);
|
|
6
|
-
var unsafeNegations_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports negating the left operand of `in` or `instanceof` relations.",
|
|
9
|
-
id: "unsafeNegations",
|
|
10
|
-
presets: ["javascript"]
|
|
11
|
-
},
|
|
12
|
-
messages: { preferNegatingRelation: {
|
|
13
|
-
primary: "This negation applies before the `{{ operator }}` operator.",
|
|
14
|
-
secondary: ["The logical not operator (!) has higher precedence than `in` and `instanceof`.", "Write `!(left in right)` or `!(left instanceof Right)` to negate the relation as intended."],
|
|
15
|
-
suggestions: ["Wrap the relation in parentheses and negate it."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
19
|
-
const operator = operatorStrings.get(node.operatorToken.kind);
|
|
20
|
-
if (!operator) return;
|
|
21
|
-
const left = unwrapParenthesizedNode(node.left);
|
|
22
|
-
if (left.kind !== SyntaxKind.PrefixUnaryExpression || left.operator !== SyntaxKind.ExclamationToken) return;
|
|
23
|
-
const begin = left.getStart(sourceFile);
|
|
24
|
-
context.report({
|
|
25
|
-
data: { operator },
|
|
26
|
-
message: "preferNegatingRelation",
|
|
27
|
-
range: {
|
|
28
|
-
begin,
|
|
29
|
-
end: begin + 1
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
} } };
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
//#endregion
|
|
36
|
-
export { unsafeNegations_default as default };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
import type { AST } from "@flint.fyi/typescript-language";
|
|
3
|
-
export interface AccessorInfo {
|
|
4
|
-
index: number;
|
|
5
|
-
node: AST.GetAccessorDeclaration | AST.SetAccessorDeclaration;
|
|
6
|
-
}
|
|
7
|
-
export interface AccessorPair {
|
|
8
|
-
getter?: AccessorInfo;
|
|
9
|
-
setter?: AccessorInfo;
|
|
10
|
-
}
|
|
11
|
-
export declare function collectAccessorPairs(members: ts.NodeArray<AST.AnyNode>, sourceFile: AST.SourceFile): Map<string, AccessorPair>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
//#region src/rules/utils/collectAccessorPairs.ts
|
|
3
|
-
function collectAccessorPairs(members, sourceFile) {
|
|
4
|
-
const pairs = /* @__PURE__ */ new Map();
|
|
5
|
-
members.forEach((member, index) => {
|
|
6
|
-
if (member.kind !== ts.SyntaxKind.GetAccessor && member.kind !== ts.SyntaxKind.SetAccessor) return;
|
|
7
|
-
const name = getPropertyName(member, sourceFile);
|
|
8
|
-
let pair = pairs.get(name);
|
|
9
|
-
if (!pair) {
|
|
10
|
-
pair = {};
|
|
11
|
-
pairs.set(name, pair);
|
|
12
|
-
}
|
|
13
|
-
const entry = {
|
|
14
|
-
index,
|
|
15
|
-
node: member
|
|
16
|
-
};
|
|
17
|
-
if (member.kind === ts.SyntaxKind.GetAccessor) pair.getter = entry;
|
|
18
|
-
else pair.setter = entry;
|
|
19
|
-
});
|
|
20
|
-
return pairs;
|
|
21
|
-
}
|
|
22
|
-
function getPropertyName(accessor, sourceFile) {
|
|
23
|
-
if (ts.isIdentifier(accessor.name) || ts.isStringLiteral(accessor.name) || ts.isNumericLiteral(accessor.name)) return accessor.name.text;
|
|
24
|
-
return accessor.name.getText(sourceFile);
|
|
25
|
-
}
|
|
26
|
-
//#endregion
|
|
27
|
-
export { collectAccessorPairs };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
//#region src/rules/utils/countCommentsInRange.ts
|
|
3
|
-
function countCommentsInRange(sourceText, { begin, end }) {
|
|
4
|
-
const scanner = ts.createScanner(ts.ScriptTarget.Latest, false, ts.LanguageVariant.Standard, sourceText.slice(begin, end));
|
|
5
|
-
let count = 0;
|
|
6
|
-
for (let token = scanner.scan(); token !== ts.SyntaxKind.EndOfFileToken; token = scanner.scan()) if (token === ts.SyntaxKind.SingleLineCommentTrivia || token === ts.SyntaxKind.MultiLineCommentTrivia) count++;
|
|
7
|
-
return count;
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { countCommentsInRange };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
import type { Checker } from "@flint.fyi/typescript-language";
|
|
3
|
-
export declare const AnyType: {
|
|
4
|
-
readonly Any: "any";
|
|
5
|
-
readonly AnyArray: "any[]";
|
|
6
|
-
readonly Error: "error";
|
|
7
|
-
readonly PromiseAny: "Promise<any>";
|
|
8
|
-
readonly Safe: "safe";
|
|
9
|
-
};
|
|
10
|
-
export type AnyType = (typeof AnyType)[keyof typeof AnyType];
|
|
11
|
-
/**
|
|
12
|
-
* @returns `AnyType.Any` if the type is `any`, `AnyType.AnyArray` if the type is `any[]` or `readonly any[]`, `AnyType.PromiseAny` if the type is `Promise<any>`,
|
|
13
|
-
* `AnyType.Error` if the type is an intrinsic error type, otherwise it returns `AnyType.Safe`.
|
|
14
|
-
*/
|
|
15
|
-
export declare function discriminateAnyType(type: ts.Type, checker: Checker, tsNode: ts.Node): AnyType;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
import * as tsutils from "ts-api-utils";
|
|
3
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
4
|
-
//#region src/rules/utils/discriminateAnyType.ts
|
|
5
|
-
const AnyType = {
|
|
6
|
-
Any: "any",
|
|
7
|
-
AnyArray: "any[]",
|
|
8
|
-
Error: "error",
|
|
9
|
-
PromiseAny: "Promise<any>",
|
|
10
|
-
Safe: "safe"
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* @returns `AnyType.Any` if the type is `any`, `AnyType.AnyArray` if the type is `any[]` or `readonly any[]`, `AnyType.PromiseAny` if the type is `Promise<any>`,
|
|
14
|
-
* `AnyType.Error` if the type is an intrinsic error type, otherwise it returns `AnyType.Safe`.
|
|
15
|
-
*/
|
|
16
|
-
function discriminateAnyType(type, checker, tsNode) {
|
|
17
|
-
return discriminateAnyTypeWorker(type, checker, tsNode, /* @__PURE__ */ new Set());
|
|
18
|
-
}
|
|
19
|
-
function discriminateAnyTypeWorker(type, checker, tsNode, visited) {
|
|
20
|
-
if (visited.has(type)) return AnyType.Safe;
|
|
21
|
-
visited.add(type);
|
|
22
|
-
if (tsutils.isTypeFlagSet(type, ts.TypeFlags.Any)) return tsutils.isIntrinsicErrorType(type) ? AnyType.Error : AnyType.Any;
|
|
23
|
-
if (checker.isArrayType(type)) {
|
|
24
|
-
const elementType = nullThrows(checker.getTypeArguments(type)[0], "Array type should have at least one type argument");
|
|
25
|
-
if (tsutils.isTypeFlagSet(elementType, ts.TypeFlags.Any) && !tsutils.isIntrinsicErrorType(elementType)) return AnyType.AnyArray;
|
|
26
|
-
}
|
|
27
|
-
for (const part of tsutils.typeConstituents(type)) if (tsutils.isThenableType(checker, tsNode, part)) {
|
|
28
|
-
const awaitedType = checker.getAwaitedType(part);
|
|
29
|
-
if (awaitedType) {
|
|
30
|
-
if (discriminateAnyTypeWorker(awaitedType, checker, tsNode, visited) === AnyType.Any && !tsutils.isIntrinsicErrorType(awaitedType)) return AnyType.PromiseAny;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return AnyType.Safe;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { AnyType, discriminateAnyType };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { SyntaxKind } from "typescript";
|
|
2
|
-
import { type AST } from "@flint.fyi/typescript-language";
|
|
3
|
-
export type EqualityOperator = "!=" | "!==" | "==" | "===";
|
|
4
|
-
export declare function isNullishLiteral(node: AST.Expression): boolean;
|
|
5
|
-
export declare function isUndefinedIdentifier(node: AST.Expression): boolean;
|
|
6
|
-
export declare function toEqualityOperator(kind: SyntaxKind): EqualityOperator | undefined;
|
|
7
|
-
export declare function toLooseOperator(operator: EqualityOperator): EqualityOperator;
|
|
8
|
-
export declare function toStrictOperator(operator: EqualityOperator): EqualityOperator;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
2
|
-
import { SyntaxKind } from "typescript";
|
|
3
|
-
//#region src/rules/utils/equalityOperators.ts
|
|
4
|
-
function isNullishLiteral(node) {
|
|
5
|
-
return isNullLiteral(node) || isUndefinedIdentifier(node);
|
|
6
|
-
}
|
|
7
|
-
function isUndefinedIdentifier(node) {
|
|
8
|
-
const unwrapped = unwrapParenthesizedNode(node);
|
|
9
|
-
return unwrapped.kind === SyntaxKind.Identifier && unwrapped.text === "undefined";
|
|
10
|
-
}
|
|
11
|
-
function toEqualityOperator(kind) {
|
|
12
|
-
switch (kind) {
|
|
13
|
-
case SyntaxKind.EqualsEqualsEqualsToken: return "===";
|
|
14
|
-
case SyntaxKind.EqualsEqualsToken: return "==";
|
|
15
|
-
case SyntaxKind.ExclamationEqualsEqualsToken: return "!==";
|
|
16
|
-
case SyntaxKind.ExclamationEqualsToken: return "!=";
|
|
17
|
-
default: return;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function toLooseOperator(operator) {
|
|
21
|
-
if (operator === "===") return "==";
|
|
22
|
-
if (operator === "!==") return "!=";
|
|
23
|
-
return operator;
|
|
24
|
-
}
|
|
25
|
-
function toStrictOperator(operator) {
|
|
26
|
-
if (operator === "==") return "===";
|
|
27
|
-
if (operator === "!=") return "!==";
|
|
28
|
-
return operator;
|
|
29
|
-
}
|
|
30
|
-
function isNullLiteral(node) {
|
|
31
|
-
return unwrapParenthesizedNode(node).kind === SyntaxKind.NullKeyword;
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { isNullishLiteral, isUndefinedIdentifier, toEqualityOperator, toLooseOperator, toStrictOperator };
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as ts$1 from "typescript";
|
|
2
|
-
//#region src/rules/utils/forEachReturnStatement.ts
|
|
3
|
-
function forEachReturnStatement(body, visitor) {
|
|
4
|
-
return traverse(body);
|
|
5
|
-
function traverse(node) {
|
|
6
|
-
switch (node.kind) {
|
|
7
|
-
case ts$1.SyntaxKind.Block:
|
|
8
|
-
case ts$1.SyntaxKind.CaseBlock:
|
|
9
|
-
case ts$1.SyntaxKind.CaseClause:
|
|
10
|
-
case ts$1.SyntaxKind.CatchClause:
|
|
11
|
-
case ts$1.SyntaxKind.DefaultClause:
|
|
12
|
-
case ts$1.SyntaxKind.DoStatement:
|
|
13
|
-
case ts$1.SyntaxKind.ForInStatement:
|
|
14
|
-
case ts$1.SyntaxKind.ForOfStatement:
|
|
15
|
-
case ts$1.SyntaxKind.ForStatement:
|
|
16
|
-
case ts$1.SyntaxKind.IfStatement:
|
|
17
|
-
case ts$1.SyntaxKind.LabeledStatement:
|
|
18
|
-
case ts$1.SyntaxKind.SwitchStatement:
|
|
19
|
-
case ts$1.SyntaxKind.TryStatement:
|
|
20
|
-
case ts$1.SyntaxKind.WhileStatement:
|
|
21
|
-
case ts$1.SyntaxKind.WithStatement: return ts$1.forEachChild(node, traverse);
|
|
22
|
-
case ts$1.SyntaxKind.ReturnStatement: return visitor(node);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//#endregion
|
|
27
|
-
export { forEachReturnStatement };
|