@flint.fyi/ts 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +1 -1
- package/dist/index.mjs +22468 -0
- package/package.json +9 -8
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -619
- package/lib/rules/accessorPairGroups.d.ts +0 -9
- package/lib/rules/accessorPairGroups.js +0 -46
- package/lib/rules/accessorPairTypes.d.ts +0 -9
- package/lib/rules/accessorPairTypes.js +0 -70
- package/lib/rules/accessorThisRecursion.d.ts +0 -9
- package/lib/rules/accessorThisRecursion.js +0 -63
- package/lib/rules/anyArguments.d.ts +0 -9
- package/lib/rules/anyArguments.js +0 -232
- package/lib/rules/anyAssignments.d.ts +0 -9
- package/lib/rules/anyAssignments.js +0 -263
- package/lib/rules/anyCalls.d.ts +0 -9
- package/lib/rules/anyCalls.js +0 -66
- package/lib/rules/anyMemberAccess.d.ts +0 -9
- package/lib/rules/anyMemberAccess.js +0 -83
- package/lib/rules/anyReturns.d.ts +0 -9
- package/lib/rules/anyReturns.js +0 -100
- package/lib/rules/arguments.d.ts +0 -9
- package/lib/rules/arguments.js +0 -36
- package/lib/rules/arrayCallbackReturns.d.ts +0 -9
- package/lib/rules/arrayCallbackReturns.js +0 -71
- package/lib/rules/arrayConstructors.d.ts +0 -9
- package/lib/rules/arrayConstructors.js +0 -45
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
- package/lib/rules/arrayElementDeletions.d.ts +0 -9
- package/lib/rules/arrayElementDeletions.js +0 -41
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
- package/lib/rules/arrayFilteredFinds.d.ts +0 -9
- package/lib/rules/arrayFilteredFinds.js +0 -72
- package/lib/rules/arrayFinds.d.ts +0 -9
- package/lib/rules/arrayFinds.js +0 -39
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMapMethods.js +0 -45
- package/lib/rules/arrayFlatMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMethods.js +0 -81
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
- package/lib/rules/arrayIncludes.d.ts +0 -9
- package/lib/rules/arrayIncludes.js +0 -51
- package/lib/rules/arrayIncludesMethods.d.ts +0 -9
- package/lib/rules/arrayIncludesMethods.js +0 -35
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
- package/lib/rules/arrayIndexOfMethods.js +0 -49
- package/lib/rules/arrayLoops.d.ts +0 -9
- package/lib/rules/arrayLoops.js +0 -34
- package/lib/rules/arrayMapIdentities.d.ts +0 -9
- package/lib/rules/arrayMapIdentities.js +0 -72
- package/lib/rules/arrayMutableReverses.d.ts +0 -9
- package/lib/rules/arrayMutableReverses.js +0 -37
- package/lib/rules/arrayMutableSorts.d.ts +0 -9
- package/lib/rules/arrayMutableSorts.js +0 -70
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
- package/lib/rules/arrayReduceTypeArguments.js +0 -62
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
- package/lib/rules/arraySomeMethods.d.ts +0 -9
- package/lib/rules/arraySomeMethods.js +0 -75
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
- package/lib/rules/arrayTypes.d.ts +0 -16
- package/lib/rules/arrayTypes.js +0 -109
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
- package/lib/rules/asConstAssertions.d.ts +0 -9
- package/lib/rules/asConstAssertions.js +0 -55
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
- package/lib/rules/assignmentOperatorShorthands.js +0 -45
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
- package/lib/rules/asyncFunctionAwaits.js +0 -53
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
- package/lib/rules/asyncPromiseExecutors.js +0 -39
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
- package/lib/rules/atAccesses.d.ts +0 -9
- package/lib/rules/atAccesses.js +0 -50
- package/lib/rules/builtinCoercions.d.ts +0 -9
- package/lib/rules/builtinCoercions.js +0 -115
- package/lib/rules/builtinConstructorNews.d.ts +0 -9
- package/lib/rules/builtinConstructorNews.js +0 -87
- package/lib/rules/caseDeclarations.d.ts +0 -9
- package/lib/rules/caseDeclarations.js +0 -38
- package/lib/rules/caseDuplicates.d.ts +0 -9
- package/lib/rules/caseDuplicates.js +0 -34
- package/lib/rules/caseFallthroughs.d.ts +0 -9
- package/lib/rules/caseFallthroughs.js +0 -74
- package/lib/rules/catchCallbackTypes.d.ts +0 -9
- package/lib/rules/catchCallbackTypes.js +0 -65
- package/lib/rules/caughtVariableNames.d.ts +0 -9
- package/lib/rules/caughtVariableNames.js +0 -38
- package/lib/rules/chainedAssignments.d.ts +0 -9
- package/lib/rules/chainedAssignments.js +0 -31
- package/lib/rules/charAtComparisons.d.ts +0 -9
- package/lib/rules/charAtComparisons.js +0 -53
- package/lib/rules/classAssignments.d.ts +0 -9
- package/lib/rules/classAssignments.js +0 -27
- package/lib/rules/classFieldDeclarations.d.ts +0 -9
- package/lib/rules/classFieldDeclarations.js +0 -38
- package/lib/rules/classLiteralProperties.d.ts +0 -9
- package/lib/rules/classLiteralProperties.js +0 -43
- package/lib/rules/classMemberDuplicates.d.ts +0 -9
- package/lib/rules/classMemberDuplicates.js +0 -69
- package/lib/rules/classMethodsThis.d.ts +0 -13
- package/lib/rules/classMethodsThis.js +0 -122
- package/lib/rules/combinedPushes.d.ts +0 -9
- package/lib/rules/combinedPushes.js +0 -54
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
- package/lib/rules/consecutiveNonNullAssertions.js +0 -37
- package/lib/rules/consoleCalls.d.ts +0 -8
- package/lib/rules/consoleCalls.js +0 -26
- package/lib/rules/constantAssignments.d.ts +0 -9
- package/lib/rules/constantAssignments.js +0 -39
- package/lib/rules/constructorGenericCalls.d.ts +0 -15
- package/lib/rules/constructorGenericCalls.js +0 -136
- package/lib/rules/constructorReturns.d.ts +0 -9
- package/lib/rules/constructorReturns.js +0 -39
- package/lib/rules/constructorSupers.d.ts +0 -9
- package/lib/rules/constructorSupers.js +0 -75
- package/lib/rules/dateConstructorClones.d.ts +0 -9
- package/lib/rules/dateConstructorClones.js +0 -35
- package/lib/rules/dateNowTimestamps.d.ts +0 -9
- package/lib/rules/dateNowTimestamps.js +0 -55
- package/lib/rules/debuggerStatements.d.ts +0 -9
- package/lib/rules/debuggerStatements.js +0 -31
- package/lib/rules/defaultCaseLast.d.ts +0 -9
- package/lib/rules/defaultCaseLast.js +0 -34
- package/lib/rules/defaultParameterLast.d.ts +0 -9
- package/lib/rules/defaultParameterLast.js +0 -40
- package/lib/rules/deprecated.d.ts +0 -9
- package/lib/rules/deprecated.js +0 -241
- package/lib/rules/destructuringConsistency.d.ts +0 -9
- package/lib/rules/destructuringConsistency.js +0 -104
- package/lib/rules/duplicateArguments.d.ts +0 -9
- package/lib/rules/duplicateArguments.js +0 -43
- package/lib/rules/dynamicDeletes.d.ts +0 -9
- package/lib/rules/dynamicDeletes.js +0 -35
- package/lib/rules/elseIfDuplicates.d.ts +0 -9
- package/lib/rules/elseIfDuplicates.js +0 -36
- package/lib/rules/elseReturns.d.ts +0 -9
- package/lib/rules/elseReturns.js +0 -65
- package/lib/rules/emptyBlocks.d.ts +0 -9
- package/lib/rules/emptyBlocks.js +0 -54
- package/lib/rules/emptyDestructures.d.ts +0 -9
- package/lib/rules/emptyDestructures.js +0 -32
- package/lib/rules/emptyEnums.d.ts +0 -9
- package/lib/rules/emptyEnums.js +0 -28
- package/lib/rules/emptyExports.d.ts +0 -9
- package/lib/rules/emptyExports.js +0 -58
- package/lib/rules/emptyFiles.d.ts +0 -9
- package/lib/rules/emptyFiles.js +0 -42
- package/lib/rules/emptyFunctions.d.ts +0 -9
- package/lib/rules/emptyFunctions.js +0 -59
- package/lib/rules/emptyModuleAttributes.d.ts +0 -9
- package/lib/rules/emptyModuleAttributes.js +0 -33
- package/lib/rules/emptyObjectTypes.d.ts +0 -9
- package/lib/rules/emptyObjectTypes.js +0 -45
- package/lib/rules/emptyStaticBlocks.d.ts +0 -9
- package/lib/rules/emptyStaticBlocks.js +0 -40
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
- package/lib/rules/emptyTypeParameterLists.js +0 -29
- package/lib/rules/enumInitializers.d.ts +0 -9
- package/lib/rules/enumInitializers.js +0 -52
- package/lib/rules/enumMemberLiterals.d.ts +0 -9
- package/lib/rules/enumMemberLiterals.js +0 -37
- package/lib/rules/enumValueConsistency.d.ts +0 -9
- package/lib/rules/enumValueConsistency.js +0 -54
- package/lib/rules/enumValueDuplicates.d.ts +0 -9
- package/lib/rules/enumValueDuplicates.js +0 -43
- package/lib/rules/equalityOperatorNegations.d.ts +0 -8
- package/lib/rules/equalityOperatorNegations.js +0 -58
- package/lib/rules/equalityOperators.d.ts +0 -9
- package/lib/rules/equalityOperators.js +0 -42
- package/lib/rules/errorMessages.d.ts +0 -9
- package/lib/rules/errorMessages.js +0 -54
- package/lib/rules/errorSubclassProperties.d.ts +0 -9
- package/lib/rules/errorSubclassProperties.js +0 -142
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
- package/lib/rules/escapeSequenceCasing.d.ts +0 -9
- package/lib/rules/escapeSequenceCasing.js +0 -73
- package/lib/rules/evals.d.ts +0 -9
- package/lib/rules/evals.js +0 -29
- package/lib/rules/evolvingVariableTypes.d.ts +0 -9
- package/lib/rules/evolvingVariableTypes.js +0 -31
- package/lib/rules/exceptionAssignments.d.ts +0 -9
- package/lib/rules/exceptionAssignments.js +0 -37
- package/lib/rules/explicitAnys.d.ts +0 -9
- package/lib/rules/explicitAnys.js +0 -53
- package/lib/rules/exponentiationOperators.d.ts +0 -9
- package/lib/rules/exponentiationOperators.js +0 -32
- package/lib/rules/exportFromImports.d.ts +0 -9
- package/lib/rules/exportFromImports.js +0 -117
- package/lib/rules/exportMutables.d.ts +0 -9
- package/lib/rules/exportMutables.js +0 -31
- package/lib/rules/exportUniqueNames.d.ts +0 -9
- package/lib/rules/exportUniqueNames.js +0 -63
- package/lib/rules/extraneousClasses.d.ts +0 -15
- package/lib/rules/extraneousClasses.js +0 -109
- package/lib/rules/fetchMethodBodies.d.ts +0 -9
- package/lib/rules/fetchMethodBodies.js +0 -70
- package/lib/rules/finallyStatementSafety.d.ts +0 -9
- package/lib/rules/finallyStatementSafety.js +0 -45
- package/lib/rules/forDirections.d.ts +0 -9
- package/lib/rules/forDirections.js +0 -73
- package/lib/rules/forInArrays.d.ts +0 -9
- package/lib/rules/forInArrays.js +0 -44
- package/lib/rules/forInGuards.d.ts +0 -8
- package/lib/rules/forInGuards.js +0 -42
- package/lib/rules/functionApplySpreads.d.ts +0 -9
- package/lib/rules/functionApplySpreads.js +0 -61
- package/lib/rules/functionAssignments.d.ts +0 -9
- package/lib/rules/functionAssignments.js +0 -27
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
- package/lib/rules/functionCurryingRedundancy.js +0 -51
- package/lib/rules/functionDeclarationStyles.d.ts +0 -15
- package/lib/rules/functionDeclarationStyles.js +0 -65
- package/lib/rules/functionNameMatches.d.ts +0 -9
- package/lib/rules/functionNameMatches.js +0 -72
- package/lib/rules/functionNewCalls.d.ts +0 -9
- package/lib/rules/functionNewCalls.js +0 -40
- package/lib/rules/generatorFunctionYields.d.ts +0 -9
- package/lib/rules/generatorFunctionYields.js +0 -48
- package/lib/rules/getterReturns.d.ts +0 -9
- package/lib/rules/getterReturns.js +0 -63
- package/lib/rules/globalAssignments.d.ts +0 -9
- package/lib/rules/globalAssignments.js +0 -45
- package/lib/rules/globalObjectCalls.d.ts +0 -9
- package/lib/rules/globalObjectCalls.js +0 -40
- package/lib/rules/globalThisAliases.d.ts +0 -9
- package/lib/rules/globalThisAliases.js +0 -45
- package/lib/rules/impliedEvals.d.ts +0 -9
- package/lib/rules/impliedEvals.js +0 -128
- package/lib/rules/importEmptyBlocks.d.ts +0 -9
- package/lib/rules/importEmptyBlocks.js +0 -51
- package/lib/rules/importTypeSideEffects.d.ts +0 -9
- package/lib/rules/importTypeSideEffects.js +0 -29
- package/lib/rules/indexedObjectTypes.d.ts +0 -15
- package/lib/rules/indexedObjectTypes.js +0 -81
- package/lib/rules/instanceOfArrays.d.ts +0 -9
- package/lib/rules/instanceOfArrays.js +0 -29
- package/lib/rules/irregularWhitespaces.d.ts +0 -15
- package/lib/rules/irregularWhitespaces.js +0 -95
- package/lib/rules/isNaNComparisons.d.ts +0 -9
- package/lib/rules/isNaNComparisons.js +0 -41
- package/lib/rules/literalConstructorWrappers.d.ts +0 -9
- package/lib/rules/literalConstructorWrappers.js +0 -62
- package/lib/rules/mathMethods.d.ts +0 -9
- package/lib/rules/mathMethods.js +0 -126
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
- package/lib/rules/meaninglessVoidOperators.js +0 -37
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
- package/lib/rules/misleadingVoidExpressions.js +0 -126
- package/lib/rules/moduleSpecifierLists.d.ts +0 -9
- package/lib/rules/moduleSpecifierLists.js +0 -90
- package/lib/rules/multilineAmbiguities.d.ts +0 -9
- package/lib/rules/multilineAmbiguities.js +0 -62
- package/lib/rules/namedDefaultExports.d.ts +0 -9
- package/lib/rules/namedDefaultExports.js +0 -58
- package/lib/rules/namespaceDeclarations.d.ts +0 -13
- package/lib/rules/namespaceDeclarations.js +0 -35
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
- package/lib/rules/namespaceKeywords.d.ts +0 -9
- package/lib/rules/namespaceKeywords.js +0 -38
- package/lib/rules/nativeObjectExtensions.d.ts +0 -9
- package/lib/rules/nativeObjectExtensions.js +0 -112
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
- package/lib/rules/negativeIndexLengthMethods.js +0 -178
- package/lib/rules/negativeZeroComparisons.d.ts +0 -9
- package/lib/rules/negativeZeroComparisons.js +0 -46
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
- package/lib/rules/nestedStandaloneIfs.js +0 -103
- package/lib/rules/newDefinitions.d.ts +0 -9
- package/lib/rules/newDefinitions.js +0 -82
- package/lib/rules/newExpressions.d.ts +0 -9
- package/lib/rules/newExpressions.js +0 -36
- package/lib/rules/newNativeNonConstructors.d.ts +0 -9
- package/lib/rules/newNativeNonConstructors.js +0 -37
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
- package/lib/rules/nonNullAssertionPlacement.js +0 -92
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
- package/lib/rules/nonNullableTypeAssertions.js +0 -76
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
- package/lib/rules/nonOctalDecimalEscapes.js +0 -46
- package/lib/rules/nullishCheckStyle.d.ts +0 -20
- package/lib/rules/nullishCheckStyle.js +0 -142
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
- package/lib/rules/nullishCoalescingOperators.js +0 -321
- package/lib/rules/numberMethodRanges.d.ts +0 -9
- package/lib/rules/numberMethodRanges.js +0 -72
- package/lib/rules/numberStaticMethods.d.ts +0 -9
- package/lib/rules/numberStaticMethods.js +0 -51
- package/lib/rules/numericErasingOperations.d.ts +0 -9
- package/lib/rules/numericErasingOperations.js +0 -44
- package/lib/rules/numericLiteralParsing.d.ts +0 -9
- package/lib/rules/numericLiteralParsing.js +0 -55
- package/lib/rules/numericPrecision.d.ts +0 -9
- package/lib/rules/numericPrecision.js +0 -100
- package/lib/rules/numericSeparatorGroups.d.ts +0 -9
- package/lib/rules/numericSeparatorGroups.js +0 -99
- package/lib/rules/objectAssignSpreads.d.ts +0 -9
- package/lib/rules/objectAssignSpreads.js +0 -51
- package/lib/rules/objectCalls.d.ts +0 -9
- package/lib/rules/objectCalls.js +0 -36
- package/lib/rules/objectEntriesMethods.d.ts +0 -9
- package/lib/rules/objectEntriesMethods.js +0 -80
- package/lib/rules/objectHasOwns.d.ts +0 -9
- package/lib/rules/objectHasOwns.js +0 -48
- package/lib/rules/objectKeyDuplicates.d.ts +0 -9
- package/lib/rules/objectKeyDuplicates.js +0 -61
- package/lib/rules/objectProto.d.ts +0 -9
- package/lib/rules/objectProto.js +0 -48
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
- package/lib/rules/objectPrototypeBuiltIns.js +0 -52
- package/lib/rules/objectShorthand.d.ts +0 -9
- package/lib/rules/objectShorthand.js +0 -82
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
- package/lib/rules/objectTypeDefinitions.d.ts +0 -9
- package/lib/rules/objectTypeDefinitions.js +0 -32
- package/lib/rules/octalEscapes.d.ts +0 -9
- package/lib/rules/octalEscapes.js +0 -56
- package/lib/rules/octalNumbers.d.ts +0 -9
- package/lib/rules/octalNumbers.js +0 -53
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
- package/lib/rules/operatorAssignmentShorthand.js +0 -75
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
- package/lib/rules/overloadSignaturesAdjacent.js +0 -138
- package/lib/rules/parameterReassignments.d.ts +0 -9
- package/lib/rules/parameterReassignments.js +0 -43
- package/lib/rules/parseIntRadixes.d.ts +0 -9
- package/lib/rules/parseIntRadixes.js +0 -57
- package/lib/rules/propertyAccessNotation.d.ts +0 -12
- package/lib/rules/propertyAccessNotation.js +0 -117
- package/lib/rules/recursionOnlyArguments.d.ts +0 -9
- package/lib/rules/recursionOnlyArguments.js +0 -62
- package/lib/rules/redundantTypeConstituents.d.ts +0 -9
- package/lib/rules/redundantTypeConstituents.js +0 -275
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
- package/lib/rules/regexAllGlobalFlags.js +0 -54
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
- package/lib/rules/regexAmbiguousInvalidity.js +0 -295
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
- package/lib/rules/regexCharacterClassRanges.js +0 -135
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
- package/lib/rules/regexCharacterClassSetOperations.js +0 -79
- package/lib/rules/regexCharacterClasses.d.ts +0 -9
- package/lib/rules/regexCharacterClasses.js +0 -232
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
- package/lib/rules/regexContradictoryAssertions.js +0 -208
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
- package/lib/rules/regexControlCharacterEscapes.js +0 -128
- package/lib/rules/regexControlCharacters.d.ts +0 -9
- package/lib/rules/regexControlCharacters.js +0 -93
- package/lib/rules/regexDigitMatchers.d.ts +0 -9
- package/lib/rules/regexDigitMatchers.js +0 -178
- package/lib/rules/regexDollarEscapes.d.ts +0 -9
- package/lib/rules/regexDollarEscapes.js +0 -89
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
- package/lib/rules/regexEmptyAlternatives.js +0 -138
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
- package/lib/rules/regexEmptyCapturingGroups.js +0 -65
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
- package/lib/rules/regexEmptyCharacterClasses.js +0 -66
- package/lib/rules/regexEmptyGroups.d.ts +0 -9
- package/lib/rules/regexEmptyGroups.js +0 -64
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
- package/lib/rules/regexEmptyStringLiterals.js +0 -64
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
- package/lib/rules/regexEscapeBackspaces.js +0 -67
- package/lib/rules/regexExecutors.d.ts +0 -9
- package/lib/rules/regexExecutors.js +0 -56
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
- package/lib/rules/regexGraphemeStringLiterals.js +0 -49
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
- package/lib/rules/regexHexadecimalEscapes.js +0 -69
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
- package/lib/rules/regexIgnoreCaseFlags.js +0 -143
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
- package/lib/rules/regexInvisibleCharacters.js +0 -88
- package/lib/rules/regexLetterCasing.d.ts +0 -9
- package/lib/rules/regexLetterCasing.js +0 -184
- package/lib/rules/regexLiterals.d.ts +0 -9
- package/lib/rules/regexLiterals.js +0 -87
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexLookaroundAssertions.js +0 -161
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
- package/lib/rules/regexMatchNotation.d.ts +0 -9
- package/lib/rules/regexMatchNotation.js +0 -137
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
- package/lib/rules/regexMisleadingQuantifiers.js +0 -76
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
- package/lib/rules/regexNamedBackreferences.d.ts +0 -9
- package/lib/rules/regexNamedBackreferences.js +0 -46
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
- package/lib/rules/regexNamedCaptureGroups.js +0 -65
- package/lib/rules/regexNamedReplacements.d.ts +0 -9
- package/lib/rules/regexNamedReplacements.js +0 -91
- package/lib/rules/regexNonStandardFlags.d.ts +0 -9
- package/lib/rules/regexNonStandardFlags.js +0 -64
- package/lib/rules/regexObscureRanges.d.ts +0 -9
- package/lib/rules/regexObscureRanges.js +0 -91
- package/lib/rules/regexOctalEscapes.d.ts +0 -9
- package/lib/rules/regexOctalEscapes.js +0 -68
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
- package/lib/rules/regexPlusQuantifiers.js +0 -66
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
- package/lib/rules/regexPredefinedAssertions.js +0 -125
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
- package/lib/rules/regexQuestionQuantifiers.js +0 -102
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
- package/lib/rules/regexRepeatQuantifiers.js +0 -94
- package/lib/rules/regexResultArrayGroups.d.ts +0 -9
- package/lib/rules/regexResultArrayGroups.js +0 -185
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
- package/lib/rules/regexSetOperationOptimizations.js +0 -175
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
- package/lib/rules/regexStandaloneBackslashes.js +0 -57
- package/lib/rules/regexStarQuantifiers.d.ts +0 -9
- package/lib/rules/regexStarQuantifiers.js +0 -66
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
- package/lib/rules/regexSuperLinearBacktracking.js +0 -96
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
- package/lib/rules/regexSuperLinearMoves.js +0 -140
- package/lib/rules/regexTestMethods.d.ts +0 -9
- package/lib/rules/regexTestMethods.js +0 -81
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
- package/lib/rules/regexUnicodeEscapes.js +0 -95
- package/lib/rules/regexUnicodeFlag.d.ts +0 -8
- package/lib/rules/regexUnicodeFlag.js +0 -95
- package/lib/rules/regexUnicodeProperties.d.ts +0 -9
- package/lib/rules/regexUnicodeProperties.js +0 -131
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryAssertions.js +0 -221
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
- package/lib/rules/regexUnnecessaryEscapes.js +0 -134
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
- package/lib/rules/regexUnnecessarySetOperands.js +0 -134
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnusedCapturingGroups.js +0 -67
- package/lib/rules/regexUnusedFlags.d.ts +0 -9
- package/lib/rules/regexUnusedFlags.js +0 -114
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedQuantifiers.js +0 -61
- package/lib/rules/regexValidity.d.ts +0 -9
- package/lib/rules/regexValidity.js +0 -144
- package/lib/rules/regexWordMatchers.d.ts +0 -9
- package/lib/rules/regexWordMatchers.js +0 -144
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
- package/lib/rules/regexZeroQuantifiers.js +0 -58
- package/lib/rules/requireImports.d.ts +0 -9
- package/lib/rules/requireImports.js +0 -46
- package/lib/rules/responseJsonMethods.d.ts +0 -9
- package/lib/rules/responseJsonMethods.js +0 -49
- package/lib/rules/restrictedIdentifiers.d.ts +0 -12
- package/lib/rules/restrictedIdentifiers.js +0 -39
- package/lib/rules/restrictedImports.d.ts +0 -26
- package/lib/rules/restrictedImports.js +0 -164
- package/lib/rules/returnAssignments.d.ts +0 -9
- package/lib/rules/returnAssignments.js +0 -36
- package/lib/rules/returnThisTypes.d.ts +0 -9
- package/lib/rules/returnThisTypes.js +0 -92
- package/lib/rules/ruleCreator.d.ts +0 -2
- package/lib/rules/ruleCreator.js +0 -15
- package/lib/rules/selfAssignments.d.ts +0 -9
- package/lib/rules/selfAssignments.js +0 -27
- package/lib/rules/sequences.d.ts +0 -9
- package/lib/rules/sequences.js +0 -26
- package/lib/rules/setSizeLengthChecks.d.ts +0 -9
- package/lib/rules/setSizeLengthChecks.js +0 -46
- package/lib/rules/setterReturns.d.ts +0 -9
- package/lib/rules/setterReturns.js +0 -39
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
- package/lib/rules/shadowedRestrictedNames.js +0 -66
- package/lib/rules/singleVariableDeclarations.d.ts +0 -9
- package/lib/rules/singleVariableDeclarations.js +0 -34
- package/lib/rules/sizeComparisonOperators.d.ts +0 -15
- package/lib/rules/sizeComparisonOperators.js +0 -146
- package/lib/rules/sparseArrays.d.ts +0 -9
- package/lib/rules/sparseArrays.js +0 -41
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
- package/lib/rules/staticMemberOnlyClasses.js +0 -75
- package/lib/rules/stringCaseMismatches.d.ts +0 -9
- package/lib/rules/stringCaseMismatches.js +0 -53
- package/lib/rules/stringCodePoints.d.ts +0 -9
- package/lib/rules/stringCodePoints.js +0 -48
- package/lib/rules/stringSliceMethods.d.ts +0 -9
- package/lib/rules/stringSliceMethods.js +0 -45
- package/lib/rules/stringStartsEndsWith.d.ts +0 -9
- package/lib/rules/stringStartsEndsWith.js +0 -77
- package/lib/rules/structuredCloneMethods.d.ts +0 -9
- package/lib/rules/structuredCloneMethods.js +0 -37
- package/lib/rules/symbolDescriptions.d.ts +0 -9
- package/lib/rules/symbolDescriptions.js +0 -30
- package/lib/rules/thisAliases.d.ts +0 -9
- package/lib/rules/thisAliases.js +0 -42
- package/lib/rules/thisBeforeSuper.d.ts +0 -9
- package/lib/rules/thisBeforeSuper.js +0 -84
- package/lib/rules/throwErrors.d.ts +0 -9
- package/lib/rules/throwErrors.js +0 -59
- package/lib/rules/topLevelAwaits.d.ts +0 -9
- package/lib/rules/topLevelAwaits.js +0 -47
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
- package/lib/rules/tripleSlashReferenceValidity.js +0 -52
- package/lib/rules/tripleSlashReferences.d.ts +0 -9
- package/lib/rules/tripleSlashReferences.js +0 -32
- package/lib/rules/tsComments.d.ts +0 -21
- package/lib/rules/tsComments.js +0 -128
- package/lib/rules/tslintComments.d.ts +0 -9
- package/lib/rules/tslintComments.js +0 -34
- package/lib/rules/typeAssertionStyles.d.ts +0 -9
- package/lib/rules/typeAssertionStyles.js +0 -30
- package/lib/rules/typeImports.d.ts +0 -19
- package/lib/rules/typeImports.js +0 -281
- package/lib/rules/typeofComparisons.d.ts +0 -9
- package/lib/rules/typeofComparisons.js +0 -53
- package/lib/rules/unassignedVariables.d.ts +0 -9
- package/lib/rules/unassignedVariables.js +0 -32
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
- package/lib/rules/undefinedTypeofChecks.js +0 -39
- package/lib/rules/undefinedVariables.d.ts +0 -9
- package/lib/rules/undefinedVariables.js +0 -37
- package/lib/rules/unicodeBOMs.d.ts +0 -9
- package/lib/rules/unicodeBOMs.js +0 -37
- package/lib/rules/unnecessaryBinds.d.ts +0 -9
- package/lib/rules/unnecessaryBinds.js +0 -76
- package/lib/rules/unnecessaryBlocks.d.ts +0 -9
- package/lib/rules/unnecessaryBlocks.js +0 -58
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
- package/lib/rules/unnecessaryBooleanCasts.js +0 -56
- package/lib/rules/unnecessaryCatches.d.ts +0 -9
- package/lib/rules/unnecessaryCatches.js +0 -46
- package/lib/rules/unnecessaryComparisons.d.ts +0 -9
- package/lib/rules/unnecessaryComparisons.js +0 -291
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
- package/lib/rules/unnecessaryConcatenation.js +0 -26
- package/lib/rules/unnecessaryEscapes.d.ts +0 -9
- package/lib/rules/unnecessaryEscapes.js +0 -132
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
- package/lib/rules/unnecessaryMathClamps.js +0 -106
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
- package/lib/rules/unnecessaryNumericFractions.js +0 -48
- package/lib/rules/unnecessaryRenames.d.ts +0 -9
- package/lib/rules/unnecessaryRenames.js +0 -90
- package/lib/rules/unnecessaryTernaries.d.ts +0 -9
- package/lib/rules/unnecessaryTernaries.js +0 -86
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
- package/lib/rules/unnecessaryUseStricts.js +0 -38
- package/lib/rules/unsafeNegations.d.ts +0 -9
- package/lib/rules/unsafeNegations.js +0 -36
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
- package/lib/rules/utils/collectAccessorPairs.js +0 -27
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
- package/lib/rules/utils/countCommentsInRange.js +0 -10
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
- package/lib/rules/utils/discriminateAnyType.js +0 -36
- package/lib/rules/utils/equalityOperators.d.ts +0 -8
- package/lib/rules/utils/equalityOperators.js +0 -34
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
- package/lib/rules/utils/forEachReturnStatement.js +0 -27
- package/lib/rules/utils/formatReportedType.d.ts +0 -3
- package/lib/rules/utils/formatReportedType.js +0 -7
- package/lib/rules/utils/getConstrainedType.d.ts +0 -2
- package/lib/rules/utils/getConstrainedType.js +0 -7
- package/lib/rules/utils/getFunctionName.d.ts +0 -2
- package/lib/rules/utils/getFunctionName.js +0 -14
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
- package/lib/rules/utils/getRegExpConstruction.js +0 -25
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
- package/lib/rules/utils/getThisExpression.d.ts +0 -2
- package/lib/rules/utils/getThisExpression.js +0 -14
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -25
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
- package/lib/rules/utils/isInBooleanContext.js +0 -20
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
- package/lib/rules/utils/isTypeRecursive.js +0 -6
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
- package/lib/rules/utils/isUnsafeAssignment.js +0 -43
- package/lib/rules/utils/operators.d.ts +0 -4
- package/lib/rules/utils/operators.js +0 -33
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
- package/lib/rules/utils/parseRegexpAst.js +0 -15
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAstFull.js +0 -16
- package/lib/rules/utils/skipParentheses.d.ts +0 -2
- package/lib/rules/utils/skipParentheses.js +0 -8
- package/lib/rules/variableDeletions.d.ts +0 -9
- package/lib/rules/variableDeletions.js +0 -33
- package/lib/rules/voidOperator.d.ts +0 -9
- package/lib/rules/voidOperator.js +0 -32
- package/lib/rules/withStatements.d.ts +0 -9
- package/lib/rules/withStatements.js +0 -28
- package/lib/rules/wrapperObjects.d.ts +0 -9
- package/lib/rules/wrapperObjects.js +0 -34
- package/lib/type-utils/getSpecifierNames.d.ts +0 -2
- package/lib/type-utils/getSpecifierNames.js +0 -7
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
- package/lib/type-utils/isFromFile.d.ts +0 -2
- package/lib/type-utils/isFromFile.js +0 -11
- package/lib/type-utils/isFromPackage.d.ts +0 -2
- package/lib/type-utils/isFromPackage.js +0 -13
- package/lib/type-utils/matchesSpecifier.d.ts +0 -3
- package/lib/type-utils/matchesSpecifier.js +0 -18
- package/lib/type-utils/schemas.d.ts +0 -14
- package/lib/type-utils/schemas.js +0 -23
|
@@ -1,58 +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 };
|
|
@@ -1,9 +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;
|
|
@@ -1,56 +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 };
|
|
@@ -1,9 +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;
|
|
@@ -1,46 +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 };
|
|
@@ -1,9 +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;
|
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isComparisonOperator } from "./utils/operators.js";
|
|
3
|
-
import { getStaticNumberValue, 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 = getStaticNumberValue(node.left) ?? null;
|
|
117
|
-
const rightNumeric = getStaticNumberValue(node.right) ?? null;
|
|
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 flipDirection(direction) {
|
|
147
|
-
switch (direction) {
|
|
148
|
-
case "lower": return "upper";
|
|
149
|
-
case "upper": return "lower";
|
|
150
|
-
default: return direction;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
function flipOperator(operatorKind) {
|
|
154
|
-
switch (operatorKind) {
|
|
155
|
-
case SyntaxKind.GreaterThanEqualsToken: return SyntaxKind.LessThanEqualsToken;
|
|
156
|
-
case SyntaxKind.GreaterThanToken: return SyntaxKind.LessThanToken;
|
|
157
|
-
case SyntaxKind.LessThanEqualsToken: return SyntaxKind.GreaterThanEqualsToken;
|
|
158
|
-
case SyntaxKind.LessThanToken: return SyntaxKind.GreaterThanToken;
|
|
159
|
-
default: return operatorKind;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
function formatComparison(info, sourceFile) {
|
|
163
|
-
return info.node.getText(sourceFile);
|
|
164
|
-
}
|
|
165
|
-
function getComparisonDirection(operatorKind) {
|
|
166
|
-
switch (operatorKind) {
|
|
167
|
-
case SyntaxKind.EqualsEqualsEqualsToken:
|
|
168
|
-
case SyntaxKind.EqualsEqualsToken: return "equality";
|
|
169
|
-
case SyntaxKind.ExclamationEqualsEqualsToken:
|
|
170
|
-
case SyntaxKind.ExclamationEqualsToken: return "inequality";
|
|
171
|
-
case SyntaxKind.GreaterThanEqualsToken:
|
|
172
|
-
case SyntaxKind.GreaterThanToken: return "lower";
|
|
173
|
-
case SyntaxKind.LessThanEqualsToken:
|
|
174
|
-
case SyntaxKind.LessThanToken: return "upper";
|
|
175
|
-
default: return "equality";
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function getSimplifiedOperator(op1, op2) {
|
|
179
|
-
const pairs = [
|
|
180
|
-
[
|
|
181
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
182
|
-
SyntaxKind.LessThanToken,
|
|
183
|
-
"<="
|
|
184
|
-
],
|
|
185
|
-
[
|
|
186
|
-
SyntaxKind.EqualsEqualsToken,
|
|
187
|
-
SyntaxKind.LessThanToken,
|
|
188
|
-
"<="
|
|
189
|
-
],
|
|
190
|
-
[
|
|
191
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
192
|
-
SyntaxKind.GreaterThanToken,
|
|
193
|
-
">="
|
|
194
|
-
],
|
|
195
|
-
[
|
|
196
|
-
SyntaxKind.EqualsEqualsToken,
|
|
197
|
-
SyntaxKind.GreaterThanToken,
|
|
198
|
-
">="
|
|
199
|
-
]
|
|
200
|
-
];
|
|
201
|
-
for (const [a, b, result] of pairs) if (op1 === a && op2 === b || op1 === b && op2 === a) return result;
|
|
202
|
-
return null;
|
|
203
|
-
}
|
|
204
|
-
function isStrictComparison(operatorKind) {
|
|
205
|
-
return operatorKind === SyntaxKind.LessThanToken || operatorKind === SyntaxKind.GreaterThanToken;
|
|
206
|
-
}
|
|
207
|
-
var unnecessaryComparisons_default = ruleCreator.createRule(typescriptLanguage, {
|
|
208
|
-
about: {
|
|
209
|
-
description: "Reports comparisons that are always true, always false, or can be simplified.",
|
|
210
|
-
id: "unnecessaryComparisons",
|
|
211
|
-
presets: ["logical", "logicalStrict"]
|
|
212
|
-
},
|
|
213
|
-
messages: {
|
|
214
|
-
impossibleRange: {
|
|
215
|
-
primary: "This range comparison can never be true.",
|
|
216
|
-
secondary: ["The upper bound {{ upperBound }} and lower bound {{ lowerBound }} create an impossible range.", "No value can satisfy both conditions simultaneously."],
|
|
217
|
-
suggestions: ["Check if the comparison operators or values are correct.", "This may indicate swapped values or operators."]
|
|
218
|
-
},
|
|
219
|
-
ineffectiveCheck: {
|
|
220
|
-
primary: "The check `{{ weaker }}` is redundant when `{{ stronger }}` is also checked.",
|
|
221
|
-
secondary: ["When `{{ stronger }}` is true, `{{ weaker }}` is automatically satisfied."],
|
|
222
|
-
suggestions: ["Remove the redundant check `{{ weaker }}`."]
|
|
223
|
-
},
|
|
224
|
-
redundantComparison: {
|
|
225
|
-
primary: "This comparison can be simplified to `{{ suggestion }}`.",
|
|
226
|
-
secondary: ["The combined comparisons are equivalent to a single `{{ suggestion }}` comparison."],
|
|
227
|
-
suggestions: ["Replace with a single `{{ suggestion }}` comparison for clearer intent."]
|
|
228
|
-
},
|
|
229
|
-
selfComparison: {
|
|
230
|
-
primary: "Comparing a value to itself is unnecessary and likely indicates a logic error.",
|
|
231
|
-
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."],
|
|
232
|
-
suggestions: ["Verify that you intended to compare two different values."]
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
setup(context) {
|
|
236
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
237
|
-
if (isComparisonOperator(node.operatorToken) && hasSameTokens(node.left, node.right, sourceFile)) {
|
|
238
|
-
context.report({
|
|
239
|
-
message: "selfComparison",
|
|
240
|
-
range: getTSNodeRange(node, sourceFile)
|
|
241
|
-
});
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
if (node.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken) {
|
|
245
|
-
const comparisons = collectComparisonsFromChain(node, SyntaxKind.AmpersandAmpersandToken);
|
|
246
|
-
if (comparisons.length >= 2) {
|
|
247
|
-
const impossibleRange = checkImpossibleRange(comparisons, sourceFile);
|
|
248
|
-
if (impossibleRange) {
|
|
249
|
-
context.report({
|
|
250
|
-
data: {
|
|
251
|
-
lowerBound: formatComparison(impossibleRange.lowerBound, sourceFile),
|
|
252
|
-
upperBound: formatComparison(impossibleRange.upperBound, sourceFile)
|
|
253
|
-
},
|
|
254
|
-
message: "impossibleRange",
|
|
255
|
-
range: getTSNodeRange(node, sourceFile)
|
|
256
|
-
});
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
const ineffective = checkIneffectiveChecks(comparisons, sourceFile);
|
|
260
|
-
if (ineffective) {
|
|
261
|
-
context.report({
|
|
262
|
-
data: {
|
|
263
|
-
stronger: formatComparison(ineffective.stronger, sourceFile),
|
|
264
|
-
weaker: formatComparison(ineffective.weaker, sourceFile)
|
|
265
|
-
},
|
|
266
|
-
message: "ineffectiveCheck",
|
|
267
|
-
range: getTSNodeRange(ineffective.weaker.node, sourceFile)
|
|
268
|
-
});
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
if (node.operatorToken.kind === SyntaxKind.BarBarToken) {
|
|
274
|
-
const comparisons = collectComparisonsFromChain(node, SyntaxKind.BarBarToken);
|
|
275
|
-
if (comparisons.length >= 2) {
|
|
276
|
-
const redundant = checkRedundantOrComparison(comparisons, sourceFile);
|
|
277
|
-
if (redundant) {
|
|
278
|
-
context.report({
|
|
279
|
-
data: { suggestion: redundant.suggestion },
|
|
280
|
-
message: "redundantComparison",
|
|
281
|
-
range: getTSNodeRange(node, sourceFile)
|
|
282
|
-
});
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
} } };
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
//#endregion
|
|
291
|
-
export { unnecessaryComparisons_default as default };
|
|
@@ -1,9 +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;
|
|
@@ -1,26 +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 };
|
|
@@ -1,9 +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;
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/unnecessaryEscapes.ts
|
|
5
|
-
const validEscapes = /* @__PURE__ */ new Set([
|
|
6
|
-
"0",
|
|
7
|
-
"\"",
|
|
8
|
-
"'",
|
|
9
|
-
"\\",
|
|
10
|
-
"`",
|
|
11
|
-
"b",
|
|
12
|
-
"f",
|
|
13
|
-
"n",
|
|
14
|
-
"r",
|
|
15
|
-
"t",
|
|
16
|
-
"v"
|
|
17
|
-
]);
|
|
18
|
-
function findUnnecessaryEscapes(fullText, quoteCharacter) {
|
|
19
|
-
const escapes = [];
|
|
20
|
-
let startIndex = 1;
|
|
21
|
-
let endIndex = fullText.length - 1;
|
|
22
|
-
if (quoteCharacter === "`") {
|
|
23
|
-
if (fullText.endsWith("${")) endIndex = fullText.length - 2;
|
|
24
|
-
if (fullText.startsWith("}`")) startIndex = 2;
|
|
25
|
-
}
|
|
26
|
-
let index = startIndex;
|
|
27
|
-
while (index < endIndex) {
|
|
28
|
-
if (fullText[index] !== "\\") {
|
|
29
|
-
index += 1;
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
const nextCharacter = fullText[index + 1];
|
|
33
|
-
if (!nextCharacter || index + 1 >= endIndex) break;
|
|
34
|
-
if (validEscapes.has(nextCharacter)) {
|
|
35
|
-
index += 2;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
switch (nextCharacter) {
|
|
39
|
-
case "c": {
|
|
40
|
-
const characterAfterC = fullText[index + 2];
|
|
41
|
-
if (characterAfterC && /[a-z]/i.test(characterAfterC)) {
|
|
42
|
-
index += 3;
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
case "u": {
|
|
48
|
-
const afterU = fullText.slice(index + 2);
|
|
49
|
-
if (/^[\da-f]{4}/i.test(afterU)) {
|
|
50
|
-
index += 6;
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (afterU.startsWith("{")) {
|
|
54
|
-
const closeBrace = afterU.indexOf("}");
|
|
55
|
-
if (closeBrace > 1 && /^[\da-f]+$/i.test(afterU.slice(1, closeBrace))) {
|
|
56
|
-
index += 3 + closeBrace;
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
case "x":
|
|
63
|
-
if (/^[\da-f]{2}/i.test(fullText.slice(index + 2, index + 4))) {
|
|
64
|
-
index += 4;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
break;
|
|
68
|
-
default: if (/[1-9]/.test(nextCharacter)) {
|
|
69
|
-
index += 2;
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (nextCharacter !== quoteCharacter) escapes.push({
|
|
74
|
-
character: nextCharacter,
|
|
75
|
-
end: index + 2,
|
|
76
|
-
start: index
|
|
77
|
-
});
|
|
78
|
-
index += 2;
|
|
79
|
-
}
|
|
80
|
-
return escapes;
|
|
81
|
-
}
|
|
82
|
-
var unnecessaryEscapes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
83
|
-
about: {
|
|
84
|
-
description: "Reports unnecessary escape sequences in string literals and template strings.",
|
|
85
|
-
id: "unnecessaryEscapes",
|
|
86
|
-
presets: ["stylistic"]
|
|
87
|
-
},
|
|
88
|
-
messages: { unnecessary: {
|
|
89
|
-
primary: "Unnecessary escape for character '{{ character }}'.",
|
|
90
|
-
secondary: ["This character does not require escaping in this context.", "Removing the backslash makes the code clearer without changing its meaning."],
|
|
91
|
-
suggestions: ["Remove the unnecessary backslash."]
|
|
92
|
-
} },
|
|
93
|
-
setup(context) {
|
|
94
|
-
function checkNode(node, { sourceFile }) {
|
|
95
|
-
const fullText = node.getText(sourceFile);
|
|
96
|
-
let quoteChar;
|
|
97
|
-
if (node.kind === ts.SyntaxKind.StringLiteral) quoteChar = fullText.startsWith("\"") ? "\"" : "'";
|
|
98
|
-
else quoteChar = "`";
|
|
99
|
-
const escapes = findUnnecessaryEscapes(fullText, quoteChar);
|
|
100
|
-
for (const escape of escapes) {
|
|
101
|
-
const nodeStart = node.getStart(sourceFile);
|
|
102
|
-
const escapeStart = nodeStart + escape.start;
|
|
103
|
-
const escapeEnd = nodeStart + escape.end;
|
|
104
|
-
context.report({
|
|
105
|
-
data: { character: escape.character },
|
|
106
|
-
fix: {
|
|
107
|
-
range: {
|
|
108
|
-
begin: escapeStart,
|
|
109
|
-
end: escapeStart + 1
|
|
110
|
-
},
|
|
111
|
-
text: ""
|
|
112
|
-
},
|
|
113
|
-
message: "unnecessary",
|
|
114
|
-
range: {
|
|
115
|
-
begin: escapeStart,
|
|
116
|
-
end: escapeEnd
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return { visitors: {
|
|
122
|
-
NoSubstitutionTemplateLiteral: checkNode,
|
|
123
|
-
StringLiteral: checkNode,
|
|
124
|
-
TemplateExpression: (node, services) => {
|
|
125
|
-
checkNode(node.head, services);
|
|
126
|
-
for (const span of node.templateSpans) checkNode(span.literal, services);
|
|
127
|
-
}
|
|
128
|
-
} };
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
//#endregion
|
|
132
|
-
export { unnecessaryEscapes_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary Math.min and Math.max calls with constant arguments or incorrect clamping patterns.";
|
|
3
|
-
readonly id: "unnecessaryMathClamps";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "constantArguments" | "incorrectClampOrder", undefined>;
|
|
9
|
-
export default _default;
|