@flint.fyi/ts 0.20.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} +360 -365
- package/dist/index.mjs +22467 -0
- package/package.json +10 -10
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -621
- package/lib/rules/accessorPairGroups.d.ts +0 -10
- package/lib/rules/accessorPairGroups.js +0 -48
- package/lib/rules/accessorPairTypes.d.ts +0 -10
- package/lib/rules/accessorPairTypes.js +0 -72
- package/lib/rules/accessorThisRecursion.d.ts +0 -10
- package/lib/rules/accessorThisRecursion.js +0 -65
- package/lib/rules/anyArguments.d.ts +0 -10
- package/lib/rules/anyArguments.js +0 -234
- package/lib/rules/anyAssignments.d.ts +0 -10
- package/lib/rules/anyAssignments.js +0 -265
- package/lib/rules/anyCalls.d.ts +0 -10
- package/lib/rules/anyCalls.js +0 -68
- package/lib/rules/anyMemberAccess.d.ts +0 -10
- package/lib/rules/anyMemberAccess.js +0 -85
- package/lib/rules/anyReturns.d.ts +0 -10
- package/lib/rules/anyReturns.js +0 -102
- package/lib/rules/arguments.d.ts +0 -10
- package/lib/rules/arguments.js +0 -38
- package/lib/rules/arrayCallbackReturns.d.ts +0 -10
- package/lib/rules/arrayCallbackReturns.js +0 -73
- package/lib/rules/arrayConstructors.d.ts +0 -10
- package/lib/rules/arrayConstructors.js +0 -47
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -10
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -54
- package/lib/rules/arrayElementDeletions.d.ts +0 -10
- package/lib/rules/arrayElementDeletions.js +0 -43
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -10
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -45
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -10
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -86
- package/lib/rules/arrayFilteredFinds.d.ts +0 -10
- package/lib/rules/arrayFilteredFinds.js +0 -80
- package/lib/rules/arrayFinds.d.ts +0 -10
- package/lib/rules/arrayFinds.js +0 -41
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMapMethods.js +0 -47
- package/lib/rules/arrayFlatMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMethods.js +0 -83
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -10
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -33
- package/lib/rules/arrayIncludes.d.ts +0 -10
- package/lib/rules/arrayIncludes.js +0 -59
- package/lib/rules/arrayIncludesMethods.d.ts +0 -10
- package/lib/rules/arrayIncludesMethods.js +0 -37
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -10
- package/lib/rules/arrayIndexOfMethods.js +0 -51
- package/lib/rules/arrayLoops.d.ts +0 -10
- package/lib/rules/arrayLoops.js +0 -36
- package/lib/rules/arrayMapIdentities.d.ts +0 -10
- package/lib/rules/arrayMapIdentities.js +0 -74
- package/lib/rules/arrayMutableReverses.d.ts +0 -10
- package/lib/rules/arrayMutableReverses.js +0 -39
- package/lib/rules/arrayMutableSorts.d.ts +0 -10
- package/lib/rules/arrayMutableSorts.js +0 -72
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -10
- package/lib/rules/arrayReduceTypeArguments.js +0 -64
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -10
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -51
- package/lib/rules/arraySomeMethods.d.ts +0 -10
- package/lib/rules/arraySomeMethods.js +0 -77
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -10
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -74
- package/lib/rules/arrayTypes.d.ts +0 -17
- package/lib/rules/arrayTypes.js +0 -111
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -10
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -97
- package/lib/rules/asConstAssertions.d.ts +0 -10
- package/lib/rules/asConstAssertions.js +0 -57
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -10
- package/lib/rules/assignmentOperatorShorthands.js +0 -47
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -10
- package/lib/rules/asyncFunctionAwaits.js +0 -55
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -10
- package/lib/rules/asyncPromiseExecutors.js +0 -41
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -10
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -52
- package/lib/rules/atAccesses.d.ts +0 -10
- package/lib/rules/atAccesses.js +0 -52
- package/lib/rules/builtinCoercions.d.ts +0 -10
- package/lib/rules/builtinCoercions.js +0 -117
- package/lib/rules/builtinConstructorNews.d.ts +0 -10
- package/lib/rules/builtinConstructorNews.js +0 -89
- package/lib/rules/caseDeclarations.d.ts +0 -10
- package/lib/rules/caseDeclarations.js +0 -40
- package/lib/rules/caseDuplicates.d.ts +0 -10
- package/lib/rules/caseDuplicates.js +0 -36
- package/lib/rules/caseFallthroughs.d.ts +0 -10
- package/lib/rules/caseFallthroughs.js +0 -76
- package/lib/rules/catchCallbackTypes.d.ts +0 -10
- package/lib/rules/catchCallbackTypes.js +0 -67
- package/lib/rules/caughtVariableNames.d.ts +0 -10
- package/lib/rules/caughtVariableNames.js +0 -40
- package/lib/rules/chainedAssignments.d.ts +0 -10
- package/lib/rules/chainedAssignments.js +0 -33
- package/lib/rules/charAtComparisons.d.ts +0 -10
- package/lib/rules/charAtComparisons.js +0 -58
- package/lib/rules/classAssignments.d.ts +0 -10
- package/lib/rules/classAssignments.js +0 -29
- package/lib/rules/classFieldDeclarations.d.ts +0 -10
- package/lib/rules/classFieldDeclarations.js +0 -40
- package/lib/rules/classLiteralProperties.d.ts +0 -10
- package/lib/rules/classLiteralProperties.js +0 -45
- package/lib/rules/classMemberDuplicates.d.ts +0 -10
- package/lib/rules/classMemberDuplicates.js +0 -71
- package/lib/rules/classMethodsThis.d.ts +0 -14
- package/lib/rules/classMethodsThis.js +0 -124
- package/lib/rules/combinedPushes.d.ts +0 -10
- package/lib/rules/combinedPushes.js +0 -56
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -10
- package/lib/rules/consecutiveNonNullAssertions.js +0 -39
- package/lib/rules/consoleCalls.d.ts +0 -9
- package/lib/rules/consoleCalls.js +0 -28
- package/lib/rules/constantAssignments.d.ts +0 -10
- package/lib/rules/constantAssignments.js +0 -41
- package/lib/rules/constructorGenericCalls.d.ts +0 -16
- package/lib/rules/constructorGenericCalls.js +0 -138
- package/lib/rules/constructorReturns.d.ts +0 -10
- package/lib/rules/constructorReturns.js +0 -41
- package/lib/rules/constructorSupers.d.ts +0 -10
- package/lib/rules/constructorSupers.js +0 -77
- package/lib/rules/dateConstructorClones.d.ts +0 -10
- package/lib/rules/dateConstructorClones.js +0 -37
- package/lib/rules/dateNowTimestamps.d.ts +0 -10
- package/lib/rules/dateNowTimestamps.js +0 -57
- package/lib/rules/debuggerStatements.d.ts +0 -10
- package/lib/rules/debuggerStatements.js +0 -33
- package/lib/rules/defaultCaseLast.d.ts +0 -10
- package/lib/rules/defaultCaseLast.js +0 -36
- package/lib/rules/defaultParameterLast.d.ts +0 -10
- package/lib/rules/defaultParameterLast.js +0 -42
- package/lib/rules/deprecated.d.ts +0 -10
- package/lib/rules/deprecated.js +0 -243
- package/lib/rules/destructuringConsistency.d.ts +0 -10
- package/lib/rules/destructuringConsistency.js +0 -112
- package/lib/rules/duplicateArguments.d.ts +0 -10
- package/lib/rules/duplicateArguments.js +0 -45
- package/lib/rules/dynamicDeletes.d.ts +0 -10
- package/lib/rules/dynamicDeletes.js +0 -37
- package/lib/rules/elseIfDuplicates.d.ts +0 -10
- package/lib/rules/elseIfDuplicates.js +0 -38
- package/lib/rules/elseReturns.d.ts +0 -10
- package/lib/rules/elseReturns.js +0 -67
- package/lib/rules/emptyBlocks.d.ts +0 -10
- package/lib/rules/emptyBlocks.js +0 -56
- package/lib/rules/emptyDestructures.d.ts +0 -10
- package/lib/rules/emptyDestructures.js +0 -34
- package/lib/rules/emptyEnums.d.ts +0 -10
- package/lib/rules/emptyEnums.js +0 -30
- package/lib/rules/emptyExports.d.ts +0 -10
- package/lib/rules/emptyExports.js +0 -60
- package/lib/rules/emptyFiles.d.ts +0 -10
- package/lib/rules/emptyFiles.js +0 -44
- package/lib/rules/emptyFunctions.d.ts +0 -10
- package/lib/rules/emptyFunctions.js +0 -61
- package/lib/rules/emptyModuleAttributes.d.ts +0 -10
- package/lib/rules/emptyModuleAttributes.js +0 -35
- package/lib/rules/emptyObjectTypes.d.ts +0 -10
- package/lib/rules/emptyObjectTypes.js +0 -47
- package/lib/rules/emptyStaticBlocks.d.ts +0 -10
- package/lib/rules/emptyStaticBlocks.js +0 -42
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -10
- package/lib/rules/emptyTypeParameterLists.js +0 -31
- package/lib/rules/enumInitializers.d.ts +0 -10
- package/lib/rules/enumInitializers.js +0 -54
- package/lib/rules/enumMemberLiterals.d.ts +0 -10
- package/lib/rules/enumMemberLiterals.js +0 -39
- package/lib/rules/enumValueConsistency.d.ts +0 -10
- package/lib/rules/enumValueConsistency.js +0 -56
- package/lib/rules/enumValueDuplicates.d.ts +0 -10
- package/lib/rules/enumValueDuplicates.js +0 -60
- package/lib/rules/equalityOperatorNegations.d.ts +0 -9
- package/lib/rules/equalityOperatorNegations.js +0 -60
- package/lib/rules/equalityOperators.d.ts +0 -10
- package/lib/rules/equalityOperators.js +0 -44
- package/lib/rules/errorMessages.d.ts +0 -10
- package/lib/rules/errorMessages.js +0 -60
- package/lib/rules/errorSubclassProperties.d.ts +0 -10
- package/lib/rules/errorSubclassProperties.js +0 -144
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -10
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -55
- package/lib/rules/escapeSequenceCasing.d.ts +0 -10
- package/lib/rules/escapeSequenceCasing.js +0 -75
- package/lib/rules/evals.d.ts +0 -10
- package/lib/rules/evals.js +0 -31
- package/lib/rules/evolvingVariableTypes.d.ts +0 -10
- package/lib/rules/evolvingVariableTypes.js +0 -33
- package/lib/rules/exceptionAssignments.d.ts +0 -10
- package/lib/rules/exceptionAssignments.js +0 -39
- package/lib/rules/explicitAnys.d.ts +0 -10
- package/lib/rules/explicitAnys.js +0 -55
- package/lib/rules/exponentiationOperators.d.ts +0 -10
- package/lib/rules/exponentiationOperators.js +0 -34
- package/lib/rules/exportFromImports.d.ts +0 -10
- package/lib/rules/exportFromImports.js +0 -119
- package/lib/rules/exportMutables.d.ts +0 -10
- package/lib/rules/exportMutables.js +0 -33
- package/lib/rules/exportUniqueNames.d.ts +0 -10
- package/lib/rules/exportUniqueNames.js +0 -65
- package/lib/rules/extraneousClasses.d.ts +0 -16
- package/lib/rules/extraneousClasses.js +0 -111
- package/lib/rules/fetchMethodBodies.d.ts +0 -10
- package/lib/rules/fetchMethodBodies.js +0 -72
- package/lib/rules/finallyStatementSafety.d.ts +0 -10
- package/lib/rules/finallyStatementSafety.js +0 -47
- package/lib/rules/forDirections.d.ts +0 -10
- package/lib/rules/forDirections.js +0 -75
- package/lib/rules/forInArrays.d.ts +0 -10
- package/lib/rules/forInArrays.js +0 -46
- package/lib/rules/forInGuards.d.ts +0 -9
- package/lib/rules/forInGuards.js +0 -44
- package/lib/rules/functionApplySpreads.d.ts +0 -10
- package/lib/rules/functionApplySpreads.js +0 -63
- package/lib/rules/functionAssignments.d.ts +0 -10
- package/lib/rules/functionAssignments.js +0 -29
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -10
- package/lib/rules/functionCurryingRedundancy.js +0 -53
- package/lib/rules/functionDeclarationStyles.d.ts +0 -16
- package/lib/rules/functionDeclarationStyles.js +0 -67
- package/lib/rules/functionNameMatches.d.ts +0 -10
- package/lib/rules/functionNameMatches.js +0 -74
- package/lib/rules/functionNewCalls.d.ts +0 -10
- package/lib/rules/functionNewCalls.js +0 -42
- package/lib/rules/generatorFunctionYields.d.ts +0 -10
- package/lib/rules/generatorFunctionYields.js +0 -50
- package/lib/rules/getterReturns.d.ts +0 -10
- package/lib/rules/getterReturns.js +0 -65
- package/lib/rules/globalAssignments.d.ts +0 -10
- package/lib/rules/globalAssignments.js +0 -47
- package/lib/rules/globalObjectCalls.d.ts +0 -10
- package/lib/rules/globalObjectCalls.js +0 -42
- package/lib/rules/globalThisAliases.d.ts +0 -10
- package/lib/rules/globalThisAliases.js +0 -47
- package/lib/rules/impliedEvals.d.ts +0 -10
- package/lib/rules/impliedEvals.js +0 -130
- package/lib/rules/importEmptyBlocks.d.ts +0 -10
- package/lib/rules/importEmptyBlocks.js +0 -53
- package/lib/rules/importTypeSideEffects.d.ts +0 -10
- package/lib/rules/importTypeSideEffects.js +0 -31
- package/lib/rules/indexedObjectTypes.d.ts +0 -16
- package/lib/rules/indexedObjectTypes.js +0 -83
- package/lib/rules/instanceOfArrays.d.ts +0 -10
- package/lib/rules/instanceOfArrays.js +0 -31
- package/lib/rules/irregularWhitespaces.d.ts +0 -16
- package/lib/rules/irregularWhitespaces.js +0 -97
- package/lib/rules/isNaNComparisons.d.ts +0 -10
- package/lib/rules/isNaNComparisons.js +0 -43
- package/lib/rules/literalConstructorWrappers.d.ts +0 -10
- package/lib/rules/literalConstructorWrappers.js +0 -64
- package/lib/rules/mathMethods.d.ts +0 -10
- package/lib/rules/mathMethods.js +0 -128
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -10
- package/lib/rules/meaninglessVoidOperators.js +0 -39
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -10
- package/lib/rules/misleadingVoidExpressions.js +0 -128
- package/lib/rules/moduleSpecifierLists.d.ts +0 -10
- package/lib/rules/moduleSpecifierLists.js +0 -92
- package/lib/rules/multilineAmbiguities.d.ts +0 -10
- package/lib/rules/multilineAmbiguities.js +0 -64
- package/lib/rules/namedDefaultExports.d.ts +0 -10
- package/lib/rules/namedDefaultExports.js +0 -60
- package/lib/rules/namespaceDeclarations.d.ts +0 -14
- package/lib/rules/namespaceDeclarations.js +0 -37
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -10
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -40
- package/lib/rules/namespaceKeywords.d.ts +0 -10
- package/lib/rules/namespaceKeywords.js +0 -40
- package/lib/rules/nativeObjectExtensions.d.ts +0 -10
- package/lib/rules/nativeObjectExtensions.js +0 -114
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -10
- package/lib/rules/negativeIndexLengthMethods.js +0 -180
- package/lib/rules/negativeZeroComparisons.d.ts +0 -10
- package/lib/rules/negativeZeroComparisons.js +0 -48
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -10
- package/lib/rules/nestedStandaloneIfs.js +0 -105
- package/lib/rules/newDefinitions.d.ts +0 -10
- package/lib/rules/newDefinitions.js +0 -84
- package/lib/rules/newExpressions.d.ts +0 -10
- package/lib/rules/newExpressions.js +0 -38
- package/lib/rules/newNativeNonConstructors.d.ts +0 -10
- package/lib/rules/newNativeNonConstructors.js +0 -39
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -10
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -63
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -10
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -69
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -10
- package/lib/rules/nonNullAssertionPlacement.js +0 -94
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -10
- package/lib/rules/nonNullableTypeAssertions.js +0 -78
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -10
- package/lib/rules/nonOctalDecimalEscapes.js +0 -48
- package/lib/rules/nullishCheckStyle.d.ts +0 -21
- package/lib/rules/nullishCheckStyle.js +0 -144
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -22
- package/lib/rules/nullishCoalescingOperators.js +0 -323
- package/lib/rules/numberMethodRanges.d.ts +0 -10
- package/lib/rules/numberMethodRanges.js +0 -74
- package/lib/rules/numberStaticMethods.d.ts +0 -10
- package/lib/rules/numberStaticMethods.js +0 -53
- package/lib/rules/numericErasingOperations.d.ts +0 -10
- package/lib/rules/numericErasingOperations.js +0 -46
- package/lib/rules/numericLiteralParsing.d.ts +0 -10
- package/lib/rules/numericLiteralParsing.js +0 -66
- package/lib/rules/numericPrecision.d.ts +0 -10
- package/lib/rules/numericPrecision.js +0 -102
- package/lib/rules/numericSeparatorGroups.d.ts +0 -10
- package/lib/rules/numericSeparatorGroups.js +0 -101
- package/lib/rules/objectAssignSpreads.d.ts +0 -10
- package/lib/rules/objectAssignSpreads.js +0 -53
- package/lib/rules/objectCalls.d.ts +0 -10
- package/lib/rules/objectCalls.js +0 -38
- package/lib/rules/objectEntriesMethods.d.ts +0 -10
- package/lib/rules/objectEntriesMethods.js +0 -82
- package/lib/rules/objectHasOwns.d.ts +0 -10
- package/lib/rules/objectHasOwns.js +0 -50
- package/lib/rules/objectKeyDuplicates.d.ts +0 -10
- package/lib/rules/objectKeyDuplicates.js +0 -63
- package/lib/rules/objectProto.d.ts +0 -10
- package/lib/rules/objectProto.js +0 -50
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -10
- package/lib/rules/objectPrototypeBuiltIns.js +0 -54
- package/lib/rules/objectShorthand.d.ts +0 -10
- package/lib/rules/objectShorthand.js +0 -84
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -10
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -43
- package/lib/rules/objectTypeDefinitions.d.ts +0 -10
- package/lib/rules/objectTypeDefinitions.js +0 -34
- package/lib/rules/octalEscapes.d.ts +0 -10
- package/lib/rules/octalEscapes.js +0 -58
- package/lib/rules/octalNumbers.d.ts +0 -10
- package/lib/rules/octalNumbers.js +0 -55
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -10
- package/lib/rules/operatorAssignmentShorthand.js +0 -77
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -10
- package/lib/rules/overloadSignaturesAdjacent.js +0 -140
- package/lib/rules/parameterReassignments.d.ts +0 -10
- package/lib/rules/parameterReassignments.js +0 -45
- package/lib/rules/parseIntRadixes.d.ts +0 -10
- package/lib/rules/parseIntRadixes.js +0 -62
- package/lib/rules/propertyAccessNotation.d.ts +0 -13
- package/lib/rules/propertyAccessNotation.js +0 -119
- package/lib/rules/recursionOnlyArguments.d.ts +0 -10
- package/lib/rules/recursionOnlyArguments.js +0 -71
- package/lib/rules/redundantTypeConstituents.d.ts +0 -10
- package/lib/rules/redundantTypeConstituents.js +0 -277
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -10
- package/lib/rules/regexAllGlobalFlags.js +0 -56
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -10
- package/lib/rules/regexAmbiguousInvalidity.js +0 -297
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -10
- package/lib/rules/regexCharacterClassRanges.js +0 -137
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -10
- package/lib/rules/regexCharacterClassSetOperations.js +0 -81
- package/lib/rules/regexCharacterClasses.d.ts +0 -10
- package/lib/rules/regexCharacterClasses.js +0 -234
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -10
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -52
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -10
- package/lib/rules/regexContradictoryAssertions.js +0 -210
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -10
- package/lib/rules/regexControlCharacterEscapes.js +0 -130
- package/lib/rules/regexControlCharacters.d.ts +0 -10
- package/lib/rules/regexControlCharacters.js +0 -95
- package/lib/rules/regexDigitMatchers.d.ts +0 -10
- package/lib/rules/regexDigitMatchers.js +0 -180
- package/lib/rules/regexDollarEscapes.d.ts +0 -10
- package/lib/rules/regexDollarEscapes.js +0 -91
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -10
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -128
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -10
- package/lib/rules/regexEmptyAlternatives.js +0 -140
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -10
- package/lib/rules/regexEmptyCapturingGroups.js +0 -67
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -10
- package/lib/rules/regexEmptyCharacterClasses.js +0 -68
- package/lib/rules/regexEmptyGroups.d.ts +0 -10
- package/lib/rules/regexEmptyGroups.js +0 -66
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -92
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -10
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -68
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -10
- package/lib/rules/regexEmptyStringLiterals.js +0 -66
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -10
- package/lib/rules/regexEscapeBackspaces.js +0 -69
- package/lib/rules/regexExecutors.d.ts +0 -10
- package/lib/rules/regexExecutors.js +0 -58
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -10
- package/lib/rules/regexGraphemeStringLiterals.js +0 -51
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -10
- package/lib/rules/regexHexadecimalEscapes.js +0 -71
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -10
- package/lib/rules/regexIgnoreCaseFlags.js +0 -145
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -10
- package/lib/rules/regexInvisibleCharacters.js +0 -90
- package/lib/rules/regexLetterCasing.d.ts +0 -10
- package/lib/rules/regexLetterCasing.js +0 -186
- package/lib/rules/regexLiterals.d.ts +0 -10
- package/lib/rules/regexLiterals.js +0 -92
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexLookaroundAssertions.js +0 -163
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -10
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -94
- package/lib/rules/regexMatchNotation.d.ts +0 -10
- package/lib/rules/regexMatchNotation.js +0 -139
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -10
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -229
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -10
- package/lib/rules/regexMisleadingQuantifiers.js +0 -78
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -10
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -203
- package/lib/rules/regexNamedBackreferences.d.ts +0 -10
- package/lib/rules/regexNamedBackreferences.js +0 -48
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -9
- package/lib/rules/regexNamedCaptureGroups.js +0 -67
- package/lib/rules/regexNamedReplacements.d.ts +0 -10
- package/lib/rules/regexNamedReplacements.js +0 -93
- package/lib/rules/regexNonStandardFlags.d.ts +0 -10
- package/lib/rules/regexNonStandardFlags.js +0 -66
- package/lib/rules/regexObscureRanges.d.ts +0 -10
- package/lib/rules/regexObscureRanges.js +0 -93
- package/lib/rules/regexOctalEscapes.d.ts +0 -10
- package/lib/rules/regexOctalEscapes.js +0 -70
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -10
- package/lib/rules/regexPlusQuantifiers.js +0 -68
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -10
- package/lib/rules/regexPredefinedAssertions.js +0 -127
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -10
- package/lib/rules/regexQuestionQuantifiers.js +0 -104
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -10
- package/lib/rules/regexRepeatQuantifiers.js +0 -96
- package/lib/rules/regexResultArrayGroups.d.ts +0 -10
- package/lib/rules/regexResultArrayGroups.js +0 -187
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -10
- package/lib/rules/regexSetOperationOptimizations.js +0 -177
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -10
- package/lib/rules/regexStandaloneBackslashes.js +0 -59
- package/lib/rules/regexStarQuantifiers.d.ts +0 -10
- package/lib/rules/regexStarQuantifiers.js +0 -68
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -10
- package/lib/rules/regexSuperLinearBacktracking.js +0 -98
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -10
- package/lib/rules/regexSuperLinearMoves.js +0 -142
- package/lib/rules/regexTestMethods.d.ts +0 -10
- package/lib/rules/regexTestMethods.js +0 -83
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -10
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -107
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeEscapes.js +0 -97
- package/lib/rules/regexUnicodeFlag.d.ts +0 -9
- package/lib/rules/regexUnicodeFlag.js +0 -97
- package/lib/rules/regexUnicodeProperties.d.ts +0 -10
- package/lib/rules/regexUnicodeProperties.js +0 -133
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryAssertions.js +0 -223
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -125
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -74
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -108
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -118
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -144
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -10
- package/lib/rules/regexUnnecessaryEscapes.js +0 -136
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -80
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -198
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -93
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -104
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -69
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -137
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -123
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -10
- package/lib/rules/regexUnnecessarySetOperands.js +0 -136
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnusedCapturingGroups.js +0 -69
- package/lib/rules/regexUnusedFlags.d.ts +0 -10
- package/lib/rules/regexUnusedFlags.js +0 -116
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -63
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedQuantifiers.js +0 -63
- package/lib/rules/regexValidity.d.ts +0 -10
- package/lib/rules/regexValidity.js +0 -146
- package/lib/rules/regexWordMatchers.d.ts +0 -10
- package/lib/rules/regexWordMatchers.js +0 -146
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -10
- package/lib/rules/regexZeroQuantifiers.js +0 -60
- package/lib/rules/requireImports.d.ts +0 -10
- package/lib/rules/requireImports.js +0 -48
- package/lib/rules/responseJsonMethods.d.ts +0 -10
- package/lib/rules/responseJsonMethods.js +0 -51
- package/lib/rules/restrictedIdentifiers.d.ts +0 -13
- package/lib/rules/restrictedIdentifiers.js +0 -41
- package/lib/rules/restrictedImports.d.ts +0 -27
- package/lib/rules/restrictedImports.js +0 -166
- package/lib/rules/returnAssignments.d.ts +0 -10
- package/lib/rules/returnAssignments.js +0 -38
- package/lib/rules/returnThisTypes.d.ts +0 -10
- package/lib/rules/returnThisTypes.js +0 -94
- package/lib/rules/ruleCreator.d.ts +0 -3
- package/lib/rules/ruleCreator.js +0 -17
- package/lib/rules/selfAssignments.d.ts +0 -10
- package/lib/rules/selfAssignments.js +0 -29
- package/lib/rules/sequences.d.ts +0 -10
- package/lib/rules/sequences.js +0 -28
- package/lib/rules/setSizeLengthChecks.d.ts +0 -10
- package/lib/rules/setSizeLengthChecks.js +0 -48
- package/lib/rules/setterReturns.d.ts +0 -10
- package/lib/rules/setterReturns.js +0 -41
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -10
- package/lib/rules/shadowedRestrictedNames.js +0 -68
- package/lib/rules/singleVariableDeclarations.d.ts +0 -10
- package/lib/rules/singleVariableDeclarations.js +0 -36
- package/lib/rules/sizeComparisonOperators.d.ts +0 -16
- package/lib/rules/sizeComparisonOperators.js +0 -148
- package/lib/rules/sparseArrays.d.ts +0 -10
- package/lib/rules/sparseArrays.js +0 -43
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -10
- package/lib/rules/staticMemberOnlyClasses.js +0 -77
- package/lib/rules/stringCaseMismatches.d.ts +0 -10
- package/lib/rules/stringCaseMismatches.js +0 -58
- package/lib/rules/stringCodePoints.d.ts +0 -10
- package/lib/rules/stringCodePoints.js +0 -50
- package/lib/rules/stringSliceMethods.d.ts +0 -10
- package/lib/rules/stringSliceMethods.js +0 -47
- package/lib/rules/stringStartsEndsWith.d.ts +0 -10
- package/lib/rules/stringStartsEndsWith.js +0 -79
- package/lib/rules/structuredCloneMethods.d.ts +0 -10
- package/lib/rules/structuredCloneMethods.js +0 -39
- package/lib/rules/symbolDescriptions.d.ts +0 -10
- package/lib/rules/symbolDescriptions.js +0 -32
- package/lib/rules/thisAliases.d.ts +0 -10
- package/lib/rules/thisAliases.js +0 -44
- package/lib/rules/thisBeforeSuper.d.ts +0 -10
- package/lib/rules/thisBeforeSuper.js +0 -86
- package/lib/rules/throwErrors.d.ts +0 -10
- package/lib/rules/throwErrors.js +0 -61
- package/lib/rules/topLevelAwaits.d.ts +0 -10
- package/lib/rules/topLevelAwaits.js +0 -49
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -10
- package/lib/rules/tripleSlashReferenceValidity.js +0 -54
- package/lib/rules/tripleSlashReferences.d.ts +0 -10
- package/lib/rules/tripleSlashReferences.js +0 -34
- package/lib/rules/tsComments.d.ts +0 -22
- package/lib/rules/tsComments.js +0 -130
- package/lib/rules/tslintComments.d.ts +0 -10
- package/lib/rules/tslintComments.js +0 -36
- package/lib/rules/typeAssertionStyles.d.ts +0 -10
- package/lib/rules/typeAssertionStyles.js +0 -32
- package/lib/rules/typeImports.d.ts +0 -20
- package/lib/rules/typeImports.js +0 -283
- package/lib/rules/typeofComparisons.d.ts +0 -10
- package/lib/rules/typeofComparisons.js +0 -58
- package/lib/rules/unassignedVariables.d.ts +0 -10
- package/lib/rules/unassignedVariables.js +0 -34
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -10
- package/lib/rules/undefinedTypeofChecks.js +0 -41
- package/lib/rules/undefinedVariables.d.ts +0 -10
- package/lib/rules/undefinedVariables.js +0 -39
- package/lib/rules/unicodeBOMs.d.ts +0 -10
- package/lib/rules/unicodeBOMs.js +0 -39
- package/lib/rules/unnecessaryBinds.d.ts +0 -10
- package/lib/rules/unnecessaryBinds.js +0 -78
- package/lib/rules/unnecessaryBlocks.d.ts +0 -10
- package/lib/rules/unnecessaryBlocks.js +0 -60
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -10
- package/lib/rules/unnecessaryBooleanCasts.js +0 -58
- package/lib/rules/unnecessaryCatches.d.ts +0 -10
- package/lib/rules/unnecessaryCatches.js +0 -48
- package/lib/rules/unnecessaryComparisons.d.ts +0 -10
- package/lib/rules/unnecessaryComparisons.js +0 -300
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -10
- package/lib/rules/unnecessaryConcatenation.js +0 -28
- package/lib/rules/unnecessaryEscapes.d.ts +0 -10
- package/lib/rules/unnecessaryEscapes.js +0 -134
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -10
- package/lib/rules/unnecessaryMathClamps.js +0 -114
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -10
- package/lib/rules/unnecessaryNumericFractions.js +0 -50
- package/lib/rules/unnecessaryRenames.d.ts +0 -10
- package/lib/rules/unnecessaryRenames.js +0 -92
- package/lib/rules/unnecessaryTernaries.d.ts +0 -10
- package/lib/rules/unnecessaryTernaries.js +0 -88
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -10
- package/lib/rules/unnecessaryUseStricts.js +0 -40
- package/lib/rules/unsafeNegations.d.ts +0 -10
- package/lib/rules/unsafeNegations.js +0 -38
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -12
- package/lib/rules/utils/collectAccessorPairs.js +0 -29
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -3
- package/lib/rules/utils/countCommentsInRange.js +0 -12
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -16
- package/lib/rules/utils/discriminateAnyType.js +0 -38
- package/lib/rules/utils/equalityOperators.d.ts +0 -9
- package/lib/rules/utils/equalityOperators.js +0 -36
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -3
- package/lib/rules/utils/forEachReturnStatement.js +0 -29
- package/lib/rules/utils/formatReportedType.d.ts +0 -4
- package/lib/rules/utils/formatReportedType.js +0 -9
- package/lib/rules/utils/getConstrainedType.d.ts +0 -3
- package/lib/rules/utils/getConstrainedType.js +0 -9
- package/lib/rules/utils/getFunctionName.d.ts +0 -3
- package/lib/rules/utils/getFunctionName.js +0 -16
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -10
- package/lib/rules/utils/getRegExpConstruction.js +0 -26
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -7
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -13
- package/lib/rules/utils/getThisExpression.d.ts +0 -3
- package/lib/rules/utils/getThisExpression.js +0 -16
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -3
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -13
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -3
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -33
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -4
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -29
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -27
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -3
- package/lib/rules/utils/isInBooleanContext.js +0 -22
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -3
- package/lib/rules/utils/isTypeRecursive.js +0 -8
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -15
- package/lib/rules/utils/isUnsafeAssignment.js +0 -45
- package/lib/rules/utils/operators.d.ts +0 -5
- package/lib/rules/utils/operators.js +0 -35
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAst.js +0 -17
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -3
- package/lib/rules/utils/parseRegexpAstFull.js +0 -18
- package/lib/rules/utils/skipParentheses.d.ts +0 -3
- package/lib/rules/utils/skipParentheses.js +0 -10
- package/lib/rules/variableDeletions.d.ts +0 -10
- package/lib/rules/variableDeletions.js +0 -35
- package/lib/rules/voidOperator.d.ts +0 -10
- package/lib/rules/voidOperator.js +0 -34
- package/lib/rules/withStatements.d.ts +0 -10
- package/lib/rules/withStatements.js +0 -30
- package/lib/rules/wrapperObjects.d.ts +0 -10
- package/lib/rules/wrapperObjects.js +0 -36
- package/lib/type-utils/getSpecifierNames.d.ts +0 -3
- package/lib/type-utils/getSpecifierNames.js +0 -9
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -3
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -14
- package/lib/type-utils/isFromFile.d.ts +0 -3
- package/lib/type-utils/isFromFile.js +0 -13
- package/lib/type-utils/isFromPackage.d.ts +0 -3
- package/lib/type-utils/isFromPackage.js +0 -16
- package/lib/type-utils/matchesSpecifier.d.ts +0 -4
- package/lib/type-utils/matchesSpecifier.js +0 -20
- package/lib/type-utils/schemas.d.ts +0 -15
- package/lib/type-utils/schemas.js +0 -25
|
@@ -1,78 +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/unnecessaryBinds.ts
|
|
5
|
-
function containsThis(node) {
|
|
6
|
-
if (node.kind === ts.SyntaxKind.ThisKeyword) return true;
|
|
7
|
-
if (ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isArrowFunction(node)) return false;
|
|
8
|
-
let found = false;
|
|
9
|
-
node.forEachChild((child) => {
|
|
10
|
-
if (containsThis(child)) found = true;
|
|
11
|
-
});
|
|
12
|
-
return found;
|
|
13
|
-
}
|
|
14
|
-
function isStaticValue(node) {
|
|
15
|
-
if (ts.isParenthesizedExpression(node)) return isStaticValue(node.expression);
|
|
16
|
-
if (ts.isPrefixUnaryExpression(node)) return isStaticValue(node.operand);
|
|
17
|
-
if (ts.isIdentifier(node)) return true;
|
|
18
|
-
if (ts.isPropertyAccessExpression(node)) return isStaticValue(node.expression);
|
|
19
|
-
if (ts.isElementAccessExpression(node)) return isStaticValue(node.expression) && isStaticValue(node.argumentExpression);
|
|
20
|
-
return node.kind === ts.SyntaxKind.ThisKeyword || node.kind === ts.SyntaxKind.SuperKeyword || node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword || node.kind === ts.SyntaxKind.NullKeyword || ts.isBigIntLiteral(node) || ts.isNumericLiteral(node) || ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node) || node.kind === ts.SyntaxKind.RegularExpressionLiteral;
|
|
21
|
-
}
|
|
22
|
-
function unwrapParentheses(node) {
|
|
23
|
-
while (ts.isParenthesizedExpression(node)) node = node.expression;
|
|
24
|
-
return node;
|
|
25
|
-
}
|
|
26
|
-
var unnecessaryBinds_default = ruleCreator.createRule(typescriptLanguage, {
|
|
27
|
-
about: {
|
|
28
|
-
description: "Reports unnecessary `.bind()` calls.",
|
|
29
|
-
id: "unnecessaryBinds",
|
|
30
|
-
presets: ["logical"]
|
|
31
|
-
},
|
|
32
|
-
messages: {
|
|
33
|
-
arrowBind: {
|
|
34
|
-
primary: "`.bind()` has no effect on arrow functions.",
|
|
35
|
-
secondary: ["Arrow functions have lexical 'this' binding.", "Calling .bind() on an arrow function has no effect."],
|
|
36
|
-
suggestions: ["Remove the `.bind()` call.", "Change the arrow function to a `function` that uses `this`"]
|
|
37
|
-
},
|
|
38
|
-
unnecessaryBinds: {
|
|
39
|
-
primary: "This `.bind()` call is unnecessary because the function does not use `this`.",
|
|
40
|
-
secondary: ["This function does not use `this`.", "`.bind()`'s purpose is to bind `this`, so using it on this function doesn't change anything."],
|
|
41
|
-
suggestions: ["Remove the `.bind()` call.", "Change the function to use `this` if that was intended."]
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
setup(context) {
|
|
45
|
-
return { visitors: { CallExpression(node, { sourceFile }) {
|
|
46
|
-
if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "bind" || node.arguments.length !== 1) return;
|
|
47
|
-
const boundArgument = node.arguments[0];
|
|
48
|
-
const boundFunction = unwrapParentheses(node.expression.expression);
|
|
49
|
-
const fix = isStaticValue(boundArgument) ? {
|
|
50
|
-
range: getTSNodeRange(node, sourceFile),
|
|
51
|
-
text: node.expression.expression.getText(sourceFile)
|
|
52
|
-
} : void 0;
|
|
53
|
-
if (ts.isArrowFunction(boundFunction)) {
|
|
54
|
-
context.report({
|
|
55
|
-
fix,
|
|
56
|
-
message: "arrowBind",
|
|
57
|
-
range: {
|
|
58
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
59
|
-
end: node.end
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (ts.isFunctionExpression(boundFunction) && !containsThis(boundFunction.body)) context.report({
|
|
65
|
-
fix,
|
|
66
|
-
message: "unnecessaryBinds",
|
|
67
|
-
range: {
|
|
68
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
69
|
-
end: node.end
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
} } };
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
//#endregion
|
|
76
|
-
export { unnecessaryBinds_default as default };
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=unnecessaryBinds.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports standalone block statements that don't create a meaningful scope.";
|
|
3
|
-
readonly id: "unnecessaryBlocks";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryBlock", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryBlocks.d.ts.map
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
import { isNodeFlagSet } from "ts-api-utils";
|
|
5
|
-
//#region src/rules/unnecessaryBlocks.ts
|
|
6
|
-
function isUsingVariableStatement(node) {
|
|
7
|
-
return node.kind === SyntaxKind.VariableStatement && isNodeFlagSet(node.declarationList, ts.NodeFlags.Using);
|
|
8
|
-
}
|
|
9
|
-
function isValidBlock(node) {
|
|
10
|
-
switch (node.parent.kind) {
|
|
11
|
-
case SyntaxKind.ArrowFunction:
|
|
12
|
-
case SyntaxKind.CaseClause:
|
|
13
|
-
case SyntaxKind.CatchClause:
|
|
14
|
-
case SyntaxKind.Constructor:
|
|
15
|
-
case SyntaxKind.DefaultClause:
|
|
16
|
-
case SyntaxKind.DoStatement:
|
|
17
|
-
case SyntaxKind.ForInStatement:
|
|
18
|
-
case SyntaxKind.ForOfStatement:
|
|
19
|
-
case SyntaxKind.ForStatement:
|
|
20
|
-
case SyntaxKind.FunctionDeclaration:
|
|
21
|
-
case SyntaxKind.FunctionExpression:
|
|
22
|
-
case SyntaxKind.GetAccessor:
|
|
23
|
-
case SyntaxKind.IfStatement:
|
|
24
|
-
case SyntaxKind.LabeledStatement:
|
|
25
|
-
case SyntaxKind.MethodDeclaration:
|
|
26
|
-
case SyntaxKind.ModuleBlock:
|
|
27
|
-
case SyntaxKind.SetAccessor:
|
|
28
|
-
case SyntaxKind.TryStatement:
|
|
29
|
-
case SyntaxKind.WhileStatement:
|
|
30
|
-
case SyntaxKind.WithStatement: return true;
|
|
31
|
-
default: return node.statements.some(isUsingVariableStatement);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
var unnecessaryBlocks_default = ruleCreator.createRule(typescriptLanguage, {
|
|
35
|
-
about: {
|
|
36
|
-
description: "Reports standalone block statements that don't create a meaningful scope.",
|
|
37
|
-
id: "unnecessaryBlocks",
|
|
38
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
39
|
-
},
|
|
40
|
-
messages: { unnecessaryBlock: {
|
|
41
|
-
primary: "This standalone block statement is unnecessary and doesn't change any variable scopes.",
|
|
42
|
-
secondary: ["Standalone block statements that aren't part of control flow (if/else, loops, switch) or don't create a meaningful lexical scope can be confusing and should be avoided.", "In modern JavaScript and TypeScript, blocks primarily serve to create lexical scope for `let` and `const` variables, but this is often better achieved through other means."],
|
|
43
|
-
suggestions: ["Remove the block statement and move its contents to the parent scope.", "If you need lexical scoping, consider using an IIFE (Immediately Invoked Function Expression) or extracting to a separate function."]
|
|
44
|
-
} },
|
|
45
|
-
setup(context) {
|
|
46
|
-
return { visitors: { Block: (node, { sourceFile }) => {
|
|
47
|
-
if (!isValidBlock(node)) context.report({
|
|
48
|
-
message: "unnecessaryBlock",
|
|
49
|
-
range: {
|
|
50
|
-
begin: node.getStart(sourceFile),
|
|
51
|
-
end: node.getStart(sourceFile) + 1
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
} } };
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
//#endregion
|
|
58
|
-
export { unnecessaryBlocks_default as default };
|
|
59
|
-
|
|
60
|
-
//# sourceMappingURL=unnecessaryBlocks.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary boolean casts.";
|
|
3
|
-
readonly id: "unnecessaryBooleanCasts";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessary", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryBooleanCasts.d.ts.map
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isInBooleanContext } from "./utils/isInBooleanContext.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts from "typescript";
|
|
5
|
-
//#region src/rules/unnecessaryBooleanCasts.ts
|
|
6
|
-
function getNodeText(node, sourceFile) {
|
|
7
|
-
return sourceFile.text.slice(node.getStart(sourceFile), node.getEnd());
|
|
8
|
-
}
|
|
9
|
-
function isBooleanCall(node) {
|
|
10
|
-
return ts.isIdentifier(node.expression) && node.expression.text === "Boolean";
|
|
11
|
-
}
|
|
12
|
-
function isDoubleNegation(node) {
|
|
13
|
-
if (node.operator !== ts.SyntaxKind.ExclamationToken) return false;
|
|
14
|
-
const operand = node.operand;
|
|
15
|
-
if (ts.isPrefixUnaryExpression(operand) && operand.operator === ts.SyntaxKind.ExclamationToken) return true;
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
var unnecessaryBooleanCasts_default = ruleCreator.createRule(typescriptLanguage, {
|
|
19
|
-
about: {
|
|
20
|
-
description: "Reports unnecessary boolean casts.",
|
|
21
|
-
id: "unnecessaryBooleanCasts",
|
|
22
|
-
presets: ["logical"]
|
|
23
|
-
},
|
|
24
|
-
messages: { unnecessary: {
|
|
25
|
-
primary: "Casting this value to a boolean is unnecessary in this context.",
|
|
26
|
-
secondary: ["The value is already in a boolean context.", "Using `{{ cast }}` to cast it does not change program behavior."],
|
|
27
|
-
suggestions: ["Remove the `{{ cast }}` call."]
|
|
28
|
-
} },
|
|
29
|
-
setup(context) {
|
|
30
|
-
function reportCast(cast, outer, inner, sourceFile) {
|
|
31
|
-
const range = getTSNodeRange(outer, sourceFile);
|
|
32
|
-
context.report({
|
|
33
|
-
data: { cast },
|
|
34
|
-
fix: {
|
|
35
|
-
range,
|
|
36
|
-
text: getNodeText(inner, sourceFile)
|
|
37
|
-
},
|
|
38
|
-
message: "unnecessary",
|
|
39
|
-
range
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return { visitors: {
|
|
43
|
-
CallExpression(node, { sourceFile }) {
|
|
44
|
-
if (!isBooleanCall(node) || !isInBooleanContext(node)) return;
|
|
45
|
-
const argument = node.arguments[0];
|
|
46
|
-
reportCast("Boolean()", node, argument, sourceFile);
|
|
47
|
-
},
|
|
48
|
-
PrefixUnaryExpression(node, { sourceFile }) {
|
|
49
|
-
if (!isDoubleNegation(node) || !isInBooleanContext(node)) return;
|
|
50
|
-
reportCast("!!", node, node.operand.operand, sourceFile);
|
|
51
|
-
}
|
|
52
|
-
} };
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
//#endregion
|
|
56
|
-
export { unnecessaryBooleanCasts_default as default };
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=unnecessaryBooleanCasts.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports catch clauses that only rethrow the caught error without modification.";
|
|
3
|
-
readonly id: "unnecessaryCatches";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryCatch", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryCatches.d.ts.map
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryCatches.ts
|
|
5
|
-
var unnecessaryCatches_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports catch clauses that only rethrow the caught error without modification.",
|
|
8
|
-
id: "unnecessaryCatches",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { unnecessaryCatch: {
|
|
12
|
-
primary: "This catch clause is unnecessary, as it only rethrows the exception without modification.",
|
|
13
|
-
secondary: ["A catch clause that only rethrows the caught error adds no value and creates unnecessary code complexity.", "Removing such catch clauses allows errors to propagate naturally without the overhead of an unnecessary try-catch block."],
|
|
14
|
-
suggestions: ["Remove the try-catch block if the catch clause only rethrows the error, or add meaningful error handling logic to the catch clause."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { CatchClause: (node, { sourceFile }) => {
|
|
18
|
-
if (!node.variableDeclaration) return;
|
|
19
|
-
const statements = node.block.statements;
|
|
20
|
-
if (statements.length !== 1) return;
|
|
21
|
-
const statement = statements[0];
|
|
22
|
-
if (statement.kind !== SyntaxKind.ThrowStatement) return;
|
|
23
|
-
const catchVariable = node.variableDeclaration.name;
|
|
24
|
-
const thrownExpression = statement.expression;
|
|
25
|
-
if (catchVariable.kind !== SyntaxKind.Identifier || thrownExpression.kind !== SyntaxKind.Identifier) return;
|
|
26
|
-
if (catchVariable.text !== thrownExpression.text) return;
|
|
27
|
-
const range = {
|
|
28
|
-
begin: node.getStart(sourceFile),
|
|
29
|
-
end: node.getStart(sourceFile) + 5
|
|
30
|
-
};
|
|
31
|
-
context.report({
|
|
32
|
-
fix: {
|
|
33
|
-
range: {
|
|
34
|
-
begin: node.parent.tryBlock.getEnd(),
|
|
35
|
-
end: node.getEnd()
|
|
36
|
-
},
|
|
37
|
-
text: ""
|
|
38
|
-
},
|
|
39
|
-
message: "unnecessaryCatch",
|
|
40
|
-
range
|
|
41
|
-
});
|
|
42
|
-
} } };
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
//#endregion
|
|
46
|
-
export { unnecessaryCatches_default as default };
|
|
47
|
-
|
|
48
|
-
//# sourceMappingURL=unnecessaryCatches.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports comparisons that are always true, always false, or can be simplified.";
|
|
3
|
-
readonly id: "unnecessaryComparisons";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "impossibleRange" | "ineffectiveCheck" | "redundantComparison" | "selfComparison", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryComparisons.d.ts.map
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isComparisonOperator } from "./utils/operators.js";
|
|
3
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
4
|
-
import { SyntaxKind } from "typescript";
|
|
5
|
-
//#region src/rules/unnecessaryComparisons.ts
|
|
6
|
-
function checkImpossibleRange(comparisons, sourceFile) {
|
|
7
|
-
for (const [i, a] of comparisons.entries()) for (const b of comparisons.slice(i + 1)) {
|
|
8
|
-
if (a.numericValue === null || b.numericValue === null) continue;
|
|
9
|
-
if (!hasSameTokens(a.variable, b.variable, sourceFile)) continue;
|
|
10
|
-
let lowerBound;
|
|
11
|
-
let upperBound;
|
|
12
|
-
if (a.direction === "upper" && b.direction === "lower") {
|
|
13
|
-
upperBound = a;
|
|
14
|
-
lowerBound = b;
|
|
15
|
-
} else if (a.direction === "lower" && b.direction === "upper") {
|
|
16
|
-
upperBound = b;
|
|
17
|
-
lowerBound = a;
|
|
18
|
-
}
|
|
19
|
-
if (!upperBound || !lowerBound) continue;
|
|
20
|
-
const upper = upperBound.numericValue;
|
|
21
|
-
const lower = lowerBound.numericValue;
|
|
22
|
-
if (upper === null || lower === null) continue;
|
|
23
|
-
if (upper < lower) return {
|
|
24
|
-
lowerBound,
|
|
25
|
-
upperBound
|
|
26
|
-
};
|
|
27
|
-
if (upper === lower) {
|
|
28
|
-
if (upperBound.isStrict || lowerBound.isStrict) return {
|
|
29
|
-
lowerBound,
|
|
30
|
-
upperBound
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
function checkIneffectiveChecks(comparisons, sourceFile) {
|
|
37
|
-
for (const [i, a] of comparisons.entries()) for (const b of comparisons.slice(i + 1)) {
|
|
38
|
-
if (a.numericValue === null || b.numericValue === null) continue;
|
|
39
|
-
if (!hasSameTokens(a.variable, b.variable, sourceFile)) continue;
|
|
40
|
-
if (a.direction !== b.direction) continue;
|
|
41
|
-
if (a.direction === "upper") {
|
|
42
|
-
if (a.numericValue < b.numericValue) return {
|
|
43
|
-
stronger: a,
|
|
44
|
-
weaker: b
|
|
45
|
-
};
|
|
46
|
-
if (b.numericValue < a.numericValue) return {
|
|
47
|
-
stronger: b,
|
|
48
|
-
weaker: a
|
|
49
|
-
};
|
|
50
|
-
if (a.numericValue === b.numericValue) {
|
|
51
|
-
if (a.isStrict && !b.isStrict) return {
|
|
52
|
-
stronger: a,
|
|
53
|
-
weaker: b
|
|
54
|
-
};
|
|
55
|
-
if (!a.isStrict && b.isStrict) return {
|
|
56
|
-
stronger: b,
|
|
57
|
-
weaker: a
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
if (a.direction === "lower") {
|
|
62
|
-
if (a.numericValue > b.numericValue) return {
|
|
63
|
-
stronger: a,
|
|
64
|
-
weaker: b
|
|
65
|
-
};
|
|
66
|
-
if (b.numericValue > a.numericValue) return {
|
|
67
|
-
stronger: b,
|
|
68
|
-
weaker: a
|
|
69
|
-
};
|
|
70
|
-
if (a.numericValue === b.numericValue) {
|
|
71
|
-
if (a.isStrict && !b.isStrict) return {
|
|
72
|
-
stronger: a,
|
|
73
|
-
weaker: b
|
|
74
|
-
};
|
|
75
|
-
if (!a.isStrict && b.isStrict) return {
|
|
76
|
-
stronger: b,
|
|
77
|
-
weaker: a
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
function checkRedundantOrComparison(comparisons, sourceFile) {
|
|
85
|
-
for (const [index, a] of comparisons.entries()) for (const b of comparisons.slice(index + 1)) {
|
|
86
|
-
if (!hasSameTokens(a.variable, b.variable, sourceFile) || !hasSameTokens(a.node.left, b.node.left, sourceFile) || !hasSameTokens(a.node.right, b.node.right, sourceFile)) {
|
|
87
|
-
if (!hasSameTokens(a.node.left, b.node.right, sourceFile) || !hasSameTokens(a.node.right, b.node.left, sourceFile)) continue;
|
|
88
|
-
}
|
|
89
|
-
const suggestion = getSimplifiedOperator(a.operatorKind, b.operatorKind);
|
|
90
|
-
if (suggestion) return {
|
|
91
|
-
first: a,
|
|
92
|
-
second: b,
|
|
93
|
-
suggestion
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
function collectComparisonsFromChain(node, operatorKind) {
|
|
99
|
-
const results = [];
|
|
100
|
-
function traverse(expr) {
|
|
101
|
-
const unwrapped = unwrapParenthesizedNode(expr);
|
|
102
|
-
if (unwrapped.kind !== SyntaxKind.BinaryExpression) return;
|
|
103
|
-
if (unwrapped.operatorToken.kind === operatorKind) {
|
|
104
|
-
traverse(unwrapped.left);
|
|
105
|
-
traverse(unwrapped.right);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
const info = extractComparisonInfo(unwrapped);
|
|
109
|
-
if (info) results.push(info);
|
|
110
|
-
}
|
|
111
|
-
traverse(node);
|
|
112
|
-
return results;
|
|
113
|
-
}
|
|
114
|
-
function extractComparisonInfo(node) {
|
|
115
|
-
if (!isComparisonOperator(node.operatorToken)) return null;
|
|
116
|
-
const leftNumeric = extractNumericLiteral(node.left);
|
|
117
|
-
const rightNumeric = extractNumericLiteral(node.right);
|
|
118
|
-
if (leftNumeric !== null && rightNumeric !== null || leftNumeric === null && rightNumeric === null) {
|
|
119
|
-
if (leftNumeric === null && rightNumeric === null) return {
|
|
120
|
-
direction: getComparisonDirection(node.operatorToken.kind),
|
|
121
|
-
isStrict: isStrictComparison(node.operatorToken.kind),
|
|
122
|
-
node,
|
|
123
|
-
numericValue: null,
|
|
124
|
-
operatorKind: node.operatorToken.kind,
|
|
125
|
-
variable: node.left
|
|
126
|
-
};
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
if (leftNumeric !== null) return {
|
|
130
|
-
direction: flipDirection(getComparisonDirection(node.operatorToken.kind)),
|
|
131
|
-
isStrict: isStrictComparison(node.operatorToken.kind),
|
|
132
|
-
node,
|
|
133
|
-
numericValue: leftNumeric,
|
|
134
|
-
operatorKind: flipOperator(node.operatorToken.kind),
|
|
135
|
-
variable: node.right
|
|
136
|
-
};
|
|
137
|
-
return {
|
|
138
|
-
direction: getComparisonDirection(node.operatorToken.kind),
|
|
139
|
-
isStrict: isStrictComparison(node.operatorToken.kind),
|
|
140
|
-
node,
|
|
141
|
-
numericValue: rightNumeric,
|
|
142
|
-
operatorKind: node.operatorToken.kind,
|
|
143
|
-
variable: node.left
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
function extractNumericLiteral(node) {
|
|
147
|
-
const unwrapped = unwrapParenthesizedNode(node);
|
|
148
|
-
if (unwrapped.kind === SyntaxKind.NumericLiteral) return Number(unwrapped.text);
|
|
149
|
-
if (unwrapped.kind === SyntaxKind.PrefixUnaryExpression && unwrapped.operator === SyntaxKind.MinusToken && unwrapped.operand.kind === SyntaxKind.NumericLiteral) return -Number(unwrapped.operand.text);
|
|
150
|
-
if (unwrapped.kind === SyntaxKind.PrefixUnaryExpression && unwrapped.operator === SyntaxKind.PlusToken && unwrapped.operand.kind === SyntaxKind.NumericLiteral) return Number(unwrapped.operand.text);
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
function flipDirection(direction) {
|
|
154
|
-
switch (direction) {
|
|
155
|
-
case "lower": return "upper";
|
|
156
|
-
case "upper": return "lower";
|
|
157
|
-
default: return direction;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
function flipOperator(operatorKind) {
|
|
161
|
-
switch (operatorKind) {
|
|
162
|
-
case SyntaxKind.GreaterThanEqualsToken: return SyntaxKind.LessThanEqualsToken;
|
|
163
|
-
case SyntaxKind.GreaterThanToken: return SyntaxKind.LessThanToken;
|
|
164
|
-
case SyntaxKind.LessThanEqualsToken: return SyntaxKind.GreaterThanEqualsToken;
|
|
165
|
-
case SyntaxKind.LessThanToken: return SyntaxKind.GreaterThanToken;
|
|
166
|
-
default: return operatorKind;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
function formatComparison(info, sourceFile) {
|
|
170
|
-
return info.node.getText(sourceFile);
|
|
171
|
-
}
|
|
172
|
-
function getComparisonDirection(operatorKind) {
|
|
173
|
-
switch (operatorKind) {
|
|
174
|
-
case SyntaxKind.EqualsEqualsEqualsToken:
|
|
175
|
-
case SyntaxKind.EqualsEqualsToken: return "equality";
|
|
176
|
-
case SyntaxKind.ExclamationEqualsEqualsToken:
|
|
177
|
-
case SyntaxKind.ExclamationEqualsToken: return "inequality";
|
|
178
|
-
case SyntaxKind.GreaterThanEqualsToken:
|
|
179
|
-
case SyntaxKind.GreaterThanToken: return "lower";
|
|
180
|
-
case SyntaxKind.LessThanEqualsToken:
|
|
181
|
-
case SyntaxKind.LessThanToken: return "upper";
|
|
182
|
-
default: return "equality";
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
function getSimplifiedOperator(op1, op2) {
|
|
186
|
-
const pairs = [
|
|
187
|
-
[
|
|
188
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
189
|
-
SyntaxKind.LessThanToken,
|
|
190
|
-
"<="
|
|
191
|
-
],
|
|
192
|
-
[
|
|
193
|
-
SyntaxKind.EqualsEqualsToken,
|
|
194
|
-
SyntaxKind.LessThanToken,
|
|
195
|
-
"<="
|
|
196
|
-
],
|
|
197
|
-
[
|
|
198
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
199
|
-
SyntaxKind.GreaterThanToken,
|
|
200
|
-
">="
|
|
201
|
-
],
|
|
202
|
-
[
|
|
203
|
-
SyntaxKind.EqualsEqualsToken,
|
|
204
|
-
SyntaxKind.GreaterThanToken,
|
|
205
|
-
">="
|
|
206
|
-
]
|
|
207
|
-
];
|
|
208
|
-
for (const [a, b, result] of pairs) if (op1 === a && op2 === b || op1 === b && op2 === a) return result;
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
function isStrictComparison(operatorKind) {
|
|
212
|
-
return operatorKind === SyntaxKind.LessThanToken || operatorKind === SyntaxKind.GreaterThanToken;
|
|
213
|
-
}
|
|
214
|
-
var unnecessaryComparisons_default = ruleCreator.createRule(typescriptLanguage, {
|
|
215
|
-
about: {
|
|
216
|
-
description: "Reports comparisons that are always true, always false, or can be simplified.",
|
|
217
|
-
id: "unnecessaryComparisons",
|
|
218
|
-
presets: ["logical", "logicalStrict"]
|
|
219
|
-
},
|
|
220
|
-
messages: {
|
|
221
|
-
impossibleRange: {
|
|
222
|
-
primary: "This range comparison can never be true.",
|
|
223
|
-
secondary: ["The upper bound {{ upperBound }} and lower bound {{ lowerBound }} create an impossible range.", "No value can satisfy both conditions simultaneously."],
|
|
224
|
-
suggestions: ["Check if the comparison operators or values are correct.", "This may indicate swapped values or operators."]
|
|
225
|
-
},
|
|
226
|
-
ineffectiveCheck: {
|
|
227
|
-
primary: "The check `{{ weaker }}` is redundant when `{{ stronger }}` is also checked.",
|
|
228
|
-
secondary: ["When `{{ stronger }}` is true, `{{ weaker }}` is automatically satisfied."],
|
|
229
|
-
suggestions: ["Remove the redundant check `{{ weaker }}`."]
|
|
230
|
-
},
|
|
231
|
-
redundantComparison: {
|
|
232
|
-
primary: "This comparison can be simplified to `{{ suggestion }}`.",
|
|
233
|
-
secondary: ["The combined comparisons are equivalent to a single `{{ suggestion }}` comparison."],
|
|
234
|
-
suggestions: ["Replace with a single `{{ suggestion }}` comparison for clearer intent."]
|
|
235
|
-
},
|
|
236
|
-
selfComparison: {
|
|
237
|
-
primary: "Comparing a value to itself is unnecessary and likely indicates a logic error.",
|
|
238
|
-
secondary: ["Self-comparisons always evaluate to the same result for a given operator.", "This pattern often indicates a copy-paste error or typo where different variables were intended."],
|
|
239
|
-
suggestions: ["Verify that you intended to compare two different values."]
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
setup(context) {
|
|
243
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
244
|
-
if (isComparisonOperator(node.operatorToken) && hasSameTokens(node.left, node.right, sourceFile)) {
|
|
245
|
-
context.report({
|
|
246
|
-
message: "selfComparison",
|
|
247
|
-
range: getTSNodeRange(node, sourceFile)
|
|
248
|
-
});
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
if (node.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken) {
|
|
252
|
-
const comparisons = collectComparisonsFromChain(node, SyntaxKind.AmpersandAmpersandToken);
|
|
253
|
-
if (comparisons.length >= 2) {
|
|
254
|
-
const impossibleRange = checkImpossibleRange(comparisons, sourceFile);
|
|
255
|
-
if (impossibleRange) {
|
|
256
|
-
context.report({
|
|
257
|
-
data: {
|
|
258
|
-
lowerBound: formatComparison(impossibleRange.lowerBound, sourceFile),
|
|
259
|
-
upperBound: formatComparison(impossibleRange.upperBound, sourceFile)
|
|
260
|
-
},
|
|
261
|
-
message: "impossibleRange",
|
|
262
|
-
range: getTSNodeRange(node, sourceFile)
|
|
263
|
-
});
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
const ineffective = checkIneffectiveChecks(comparisons, sourceFile);
|
|
267
|
-
if (ineffective) {
|
|
268
|
-
context.report({
|
|
269
|
-
data: {
|
|
270
|
-
stronger: formatComparison(ineffective.stronger, sourceFile),
|
|
271
|
-
weaker: formatComparison(ineffective.weaker, sourceFile)
|
|
272
|
-
},
|
|
273
|
-
message: "ineffectiveCheck",
|
|
274
|
-
range: getTSNodeRange(ineffective.weaker.node, sourceFile)
|
|
275
|
-
});
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
if (node.operatorToken.kind === SyntaxKind.BarBarToken) {
|
|
281
|
-
const comparisons = collectComparisonsFromChain(node, SyntaxKind.BarBarToken);
|
|
282
|
-
if (comparisons.length >= 2) {
|
|
283
|
-
const redundant = checkRedundantOrComparison(comparisons, sourceFile);
|
|
284
|
-
if (redundant) {
|
|
285
|
-
context.report({
|
|
286
|
-
data: { suggestion: redundant.suggestion },
|
|
287
|
-
message: "redundantComparison",
|
|
288
|
-
range: getTSNodeRange(node, sourceFile)
|
|
289
|
-
});
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
} } };
|
|
295
|
-
}
|
|
296
|
-
});
|
|
297
|
-
//#endregion
|
|
298
|
-
export { unnecessaryComparisons_default as default };
|
|
299
|
-
|
|
300
|
-
//# sourceMappingURL=unnecessaryComparisons.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports string concatenation using the + operator when both operands are string literals.";
|
|
3
|
-
readonly id: "unnecessaryConcatenation";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryConcatenation", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryConcatenation.d.ts.map
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryConcatenation.ts
|
|
5
|
-
var unnecessaryConcatenation_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports string concatenation using the + operator when both operands are string literals.",
|
|
8
|
-
id: "unnecessaryConcatenation",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { unnecessaryConcatenation: {
|
|
12
|
-
primary: "This string concatenation can be streamlined into a single string literal.",
|
|
13
|
-
secondary: ["Concatenating string literals with the + operator is unnecessary and reduces code readability.", "String literals can be combined into a single literal, which is clearer and potentially more performant."],
|
|
14
|
-
suggestions: ["Combine the string literals into a single string literal."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
18
|
-
if (node.operatorToken.kind === SyntaxKind.PlusToken && node.left.kind === SyntaxKind.StringLiteral && node.right.kind === SyntaxKind.StringLiteral) context.report({
|
|
19
|
-
message: "unnecessaryConcatenation",
|
|
20
|
-
range: getTSNodeRange(node.operatorToken, sourceFile)
|
|
21
|
-
});
|
|
22
|
-
} } };
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
//#endregion
|
|
26
|
-
export { unnecessaryConcatenation_default as default };
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=unnecessaryConcatenation.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary escape sequences in string literals and template strings.";
|
|
3
|
-
readonly id: "unnecessaryEscapes";
|
|
4
|
-
readonly presets: readonly ["stylistic"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessary", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=unnecessaryEscapes.d.ts.map
|