@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,121 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
4
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
5
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
7
|
-
//#region src/rules/regexUnnecessaryReferentialBackreferences.ts
|
|
8
|
-
function containsNode(ancestor, target) {
|
|
9
|
-
if (ancestor === target) return true;
|
|
10
|
-
switch (ancestor.type) {
|
|
11
|
-
case "Alternative": return ancestor.elements.some((element) => containsNode(element, target));
|
|
12
|
-
case "Assertion":
|
|
13
|
-
if (ancestor.kind === "lookahead" || ancestor.kind === "lookbehind") return ancestor.alternatives.some((alternative) => containsNode(alternative, target));
|
|
14
|
-
return false;
|
|
15
|
-
case "CapturingGroup":
|
|
16
|
-
case "Group":
|
|
17
|
-
case "Pattern": return ancestor.alternatives.some((alternative) => containsNode(alternative, target));
|
|
18
|
-
case "Quantifier": return containsNode(ancestor.element, target);
|
|
19
|
-
default: return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function getAncestors(node) {
|
|
23
|
-
const ancestors = [];
|
|
24
|
-
let current = node.parent;
|
|
25
|
-
while (current) {
|
|
26
|
-
ancestors.push(current);
|
|
27
|
-
current = current.parent;
|
|
28
|
-
}
|
|
29
|
-
return ancestors;
|
|
30
|
-
}
|
|
31
|
-
function groupCanOnlyMatchEmpty(group) {
|
|
32
|
-
return group.alternatives.every((alternative) => alternative.elements.every((element) => {
|
|
33
|
-
if (element.type === "Quantifier" && element.min === 0) return true;
|
|
34
|
-
if (element.type === "Group" || element.type === "CapturingGroup") return groupCanOnlyMatchEmpty(element);
|
|
35
|
-
if (element.type === "Assertion") return true;
|
|
36
|
-
return false;
|
|
37
|
-
}));
|
|
38
|
-
}
|
|
39
|
-
function isBackreferenceAfterGroup(group, backreference) {
|
|
40
|
-
const groupAncestors = getAncestors(group);
|
|
41
|
-
const backrefAncestors = getAncestors(backreference);
|
|
42
|
-
const commonAncestor = groupAncestors.find((ancestor) => backrefAncestors.includes(ancestor));
|
|
43
|
-
if (commonAncestor?.type !== "Alternative") return false;
|
|
44
|
-
return commonAncestor.elements.findIndex((element) => containsNode(element, group) || element === group) < commonAncestor.elements.findIndex((element) => containsNode(element, backreference) || element === backreference);
|
|
45
|
-
}
|
|
46
|
-
function isInsideLookahead(group) {
|
|
47
|
-
for (const ancestor of getAncestors(group)) if (ancestor.type === "Assertion" && ancestor.kind === "lookahead") return true;
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
function mayBeUndefinedAtBackref(group) {
|
|
51
|
-
const groupAncestors = getAncestors(group);
|
|
52
|
-
for (const ancestor of groupAncestors) {
|
|
53
|
-
if (ancestor.type === "Quantifier" && ancestor.min === 0) return true;
|
|
54
|
-
if (ancestor.type === "Alternative") {
|
|
55
|
-
const parent = ancestor.parent;
|
|
56
|
-
if (parent.type === "Group" || parent.type === "CapturingGroup" || parent.type === "Pattern") {
|
|
57
|
-
if (parent.alternatives.filter((alternative) => containsNode(alternative, group)).length < parent.alternatives.length) return true;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (ancestor.type === "Quantifier" && ancestor.max > 1) {
|
|
61
|
-
const quantifiedElement = ancestor.element;
|
|
62
|
-
if (quantifiedElement.type === "Group" || quantifiedElement.type === "CapturingGroup") {
|
|
63
|
-
if (quantifiedElement === group) continue;
|
|
64
|
-
if (quantifiedElement.alternatives.filter((alternative) => containsNode(alternative, group)).length < quantifiedElement.alternatives.length) return true;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
var regexUnnecessaryReferentialBackreferences_default = ruleCreator.createRule(typescriptLanguage, {
|
|
71
|
-
about: {
|
|
72
|
-
description: "Reports backreferences that may reference a capturing group that was not matched.",
|
|
73
|
-
id: "regexUnnecessaryReferentialBackreferences",
|
|
74
|
-
presets: ["logical"]
|
|
75
|
-
},
|
|
76
|
-
messages: { potentiallyUselessBackref: {
|
|
77
|
-
primary: "Ensure capturing group is always matched before backreference `{{ raw }}`.",
|
|
78
|
-
secondary: ["This backreference may always be empty because the referenced capturing group might not participate in the match.", "The group may be in an optional quantifier, inside an alternation where some branches don't include it, or reset in a loop."],
|
|
79
|
-
suggestions: ["Make sure the capturing group is always matched before the backreference.", "Consider restructuring the regex to ensure the group participates in the match."]
|
|
80
|
-
} },
|
|
81
|
-
setup(context) {
|
|
82
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
83
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
84
|
-
if (!regexpAst) return;
|
|
85
|
-
visitRegExpAST(regexpAst, { onBackreferenceEnter(backreference) {
|
|
86
|
-
const { resolved } = backreference;
|
|
87
|
-
const groups = Array.isArray(resolved) ? resolved : [resolved];
|
|
88
|
-
for (const group of groups) {
|
|
89
|
-
if (groupCanOnlyMatchEmpty(group) || isInsideLookahead(group) || !isBackreferenceAfterGroup(group, backreference)) continue;
|
|
90
|
-
if (mayBeUndefinedAtBackref(group)) {
|
|
91
|
-
context.report({
|
|
92
|
-
data: { raw: backreference.raw },
|
|
93
|
-
message: "potentiallyUselessBackref",
|
|
94
|
-
range: {
|
|
95
|
-
begin: patternStart + backreference.start,
|
|
96
|
-
end: patternStart + backreference.end
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} });
|
|
103
|
-
}
|
|
104
|
-
function checkRegexLiteral(node, services) {
|
|
105
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
106
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
107
|
-
}
|
|
108
|
-
function checkRegExpConstructor(node, services) {
|
|
109
|
-
const construction = getRegExpConstruction(node, services);
|
|
110
|
-
if (!construction) return;
|
|
111
|
-
checkPattern(construction.raw, construction.start + 1, construction.flags);
|
|
112
|
-
}
|
|
113
|
-
return { visitors: {
|
|
114
|
-
CallExpression: checkRegExpConstructor,
|
|
115
|
-
NewExpression: checkRegExpConstructor,
|
|
116
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
117
|
-
} };
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
//#endregion
|
|
121
|
-
export { regexUnnecessaryReferentialBackreferences_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary operands in regular expression character class set operations.";
|
|
3
|
-
readonly id: "regexUnnecessarySetOperands";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "intersectionDisjoint" | "intersectionSubset" | "subtractionDisjoint" | "subtractionSubset", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
3
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
4
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import { RegExpParser, visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
import { toUnicodeSet } from "regexp-ast-analysis";
|
|
7
|
-
//#region src/rules/regexUnnecessarySetOperands.ts
|
|
8
|
-
var regexUnnecessarySetOperands_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports unnecessary operands in regular expression character class set operations.",
|
|
11
|
-
id: "regexUnnecessarySetOperands",
|
|
12
|
-
presets: ["logical"]
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
intersectionDisjoint: {
|
|
16
|
-
primary: "This operation can be simplified: '{{ left }}' and '{{ right }}' are disjoint, so the result is always empty.",
|
|
17
|
-
secondary: ["When two sets have no common elements, their intersection is empty.", "This likely indicates a mistake in the regular expression."],
|
|
18
|
-
suggestions: ["Review the operands to ensure they share common elements.", "Remove the expression if the empty result is intentional."]
|
|
19
|
-
},
|
|
20
|
-
intersectionSubset: {
|
|
21
|
-
primary: "This operation can be simplified: '{{ subset }}' is a subset of '{{ superset }}', so the superset operand is redundant.",
|
|
22
|
-
secondary: ["When one operand is a subset of another in an intersection, the superset is redundant.", "The result is equivalent to just the subset operand."],
|
|
23
|
-
suggestions: ["Remove the redundant superset operand."]
|
|
24
|
-
},
|
|
25
|
-
subtractionDisjoint: {
|
|
26
|
-
primary: "This operation can be simplified: '{{ left }}' and '{{ right }}' are disjoint, so the subtraction has no effect.",
|
|
27
|
-
secondary: ["Subtracting a set that shares no elements with the left operand does nothing.", "The right operand can be safely removed."],
|
|
28
|
-
suggestions: ["Remove the unnecessary right operand.", "Review the operands to ensure the subtraction is meaningful."]
|
|
29
|
-
},
|
|
30
|
-
subtractionSubset: {
|
|
31
|
-
primary: "This operation can be simplified: '{{ left }}' is a subset of '{{ right }}', so the result is always empty.",
|
|
32
|
-
secondary: ["When you subtract a set that contains all elements of the left operand, the result is empty.", "This likely indicates a mistake in the regular expression."],
|
|
33
|
-
suggestions: ["Review the operands to ensure this is intentional.", "Consider using a different pattern if the empty result is unintended."]
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
setup(context) {
|
|
37
|
-
const unicodeSetsFlags = {
|
|
38
|
-
unicode: false,
|
|
39
|
-
unicodeSets: true
|
|
40
|
-
};
|
|
41
|
-
function unwrapBrackets(raw) {
|
|
42
|
-
if (raw.startsWith("[") && raw.endsWith("]")) return raw.slice(1, -1);
|
|
43
|
-
return raw;
|
|
44
|
-
}
|
|
45
|
-
function report(node, patternStart, canFix, message, data, fixText) {
|
|
46
|
-
const range = {
|
|
47
|
-
begin: patternStart + node.start,
|
|
48
|
-
end: patternStart + node.end
|
|
49
|
-
};
|
|
50
|
-
context.report({
|
|
51
|
-
data,
|
|
52
|
-
fix: canFix && fixText ? {
|
|
53
|
-
range,
|
|
54
|
-
text: fixText
|
|
55
|
-
} : void 0,
|
|
56
|
-
message,
|
|
57
|
-
range
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
function checkIntersection(node, patternStart, canFix) {
|
|
61
|
-
const leftSet = toUnicodeSet(node.left, unicodeSetsFlags);
|
|
62
|
-
const rightSet = toUnicodeSet(node.right, unicodeSetsFlags);
|
|
63
|
-
if (leftSet.isDisjointWith(rightSet)) {
|
|
64
|
-
report(node, patternStart, canFix, "intersectionDisjoint", {
|
|
65
|
-
left: node.left.raw,
|
|
66
|
-
right: node.right.raw
|
|
67
|
-
}, "^^");
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (leftSet.isSubsetOf(rightSet)) {
|
|
71
|
-
report(node, patternStart, canFix, "intersectionSubset", {
|
|
72
|
-
subset: node.left.raw,
|
|
73
|
-
superset: node.right.raw
|
|
74
|
-
}, unwrapBrackets(node.left.raw));
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (rightSet.isSubsetOf(leftSet)) report(node, patternStart, canFix, "intersectionSubset", {
|
|
78
|
-
subset: node.right.raw,
|
|
79
|
-
superset: node.left.raw
|
|
80
|
-
}, unwrapBrackets(node.right.raw));
|
|
81
|
-
}
|
|
82
|
-
function checkSubtraction(node, patternStart, canFix) {
|
|
83
|
-
const leftSet = toUnicodeSet(node.left, unicodeSetsFlags);
|
|
84
|
-
const rightSet = toUnicodeSet(node.right, unicodeSetsFlags);
|
|
85
|
-
if (leftSet.isDisjointWith(rightSet)) {
|
|
86
|
-
report(node, patternStart, canFix, "subtractionDisjoint", {
|
|
87
|
-
left: node.left.raw,
|
|
88
|
-
right: node.right.raw
|
|
89
|
-
}, unwrapBrackets(node.left.raw));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (leftSet.isSubsetOf(rightSet)) report(node, patternStart, canFix, "subtractionSubset", {
|
|
93
|
-
left: node.left.raw,
|
|
94
|
-
right: node.right.raw
|
|
95
|
-
}, "^^");
|
|
96
|
-
}
|
|
97
|
-
function checkPattern(pattern, patternStart, canFix) {
|
|
98
|
-
let regexpAst;
|
|
99
|
-
try {
|
|
100
|
-
regexpAst = new RegExpParser().parsePattern(pattern, void 0, void 0, {
|
|
101
|
-
unicode: false,
|
|
102
|
-
unicodeSets: true
|
|
103
|
-
});
|
|
104
|
-
} catch {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
visitRegExpAST(regexpAst, {
|
|
108
|
-
onClassIntersectionEnter(node) {
|
|
109
|
-
checkIntersection(node, patternStart, canFix);
|
|
110
|
-
},
|
|
111
|
-
onClassSubtractionEnter(node) {
|
|
112
|
-
checkSubtraction(node, patternStart, canFix);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
function checkRegexLiteral(node, services) {
|
|
117
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
118
|
-
if (!details.flags.includes("v")) return;
|
|
119
|
-
checkPattern(details.pattern, details.start, true);
|
|
120
|
-
}
|
|
121
|
-
function checkRegExpConstructor(node, services) {
|
|
122
|
-
const construction = getRegExpConstruction(node, services);
|
|
123
|
-
if (!construction?.flags.includes("v")) return;
|
|
124
|
-
checkPattern(construction.raw, construction.start + 1, false);
|
|
125
|
-
}
|
|
126
|
-
return { visitors: {
|
|
127
|
-
CallExpression: checkRegExpConstructor,
|
|
128
|
-
NewExpression: checkRegExpConstructor,
|
|
129
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
130
|
-
} };
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
//#endregion
|
|
134
|
-
export { regexUnnecessarySetOperands_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports capturing groups in regular expressions that are never referenced.";
|
|
3
|
-
readonly id: "regexUnusedCapturingGroups";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unusedCapture", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
4
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
5
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
7
|
-
//#region src/rules/regexUnusedCapturingGroups.ts
|
|
8
|
-
function findUnusedCapturingGroups(pattern, flags) {
|
|
9
|
-
const results = [];
|
|
10
|
-
const ast = parseRegexpAst(pattern, flags);
|
|
11
|
-
if (!ast) return results;
|
|
12
|
-
visitRegExpAST(ast, { onCapturingGroupEnter(node) {
|
|
13
|
-
if (!node.references.length) results.push(node);
|
|
14
|
-
} });
|
|
15
|
-
return results;
|
|
16
|
-
}
|
|
17
|
-
var regexUnusedCapturingGroups_default = ruleCreator.createRule(typescriptLanguage, {
|
|
18
|
-
about: {
|
|
19
|
-
description: "Reports capturing groups in regular expressions that are never referenced.",
|
|
20
|
-
id: "regexUnusedCapturingGroups",
|
|
21
|
-
presets: ["logical"]
|
|
22
|
-
},
|
|
23
|
-
messages: { unusedCapture: {
|
|
24
|
-
primary: "Capturing group `{{ raw }}` is never referenced.",
|
|
25
|
-
secondary: ["Capturing groups that are never backreferenced can be misleading by unintentionally indicating that the group should be captured.", "Non-capturing groups are generally preferred for clarity when the group does not need to be captured."],
|
|
26
|
-
suggestions: ["Convert to a non-capturing group if the capture is not needed.", "Add a backreference if the capture is needed."]
|
|
27
|
-
} },
|
|
28
|
-
setup(context) {
|
|
29
|
-
function checkPattern(pattern, flags, start) {
|
|
30
|
-
const unusedGroups = findUnusedCapturingGroups(pattern, flags);
|
|
31
|
-
for (const group of unusedGroups) {
|
|
32
|
-
const range = {
|
|
33
|
-
begin: start + 1 + group.start,
|
|
34
|
-
end: start + 1 + group.end
|
|
35
|
-
};
|
|
36
|
-
const nonCapturing = `(?:${group.alternatives.map((alt) => alt.raw).join("|")})`;
|
|
37
|
-
context.report({
|
|
38
|
-
data: { raw: group.raw },
|
|
39
|
-
message: "unusedCapture",
|
|
40
|
-
range,
|
|
41
|
-
suggestions: [{
|
|
42
|
-
id: "useNonCapturing",
|
|
43
|
-
range,
|
|
44
|
-
text: nonCapturing
|
|
45
|
-
}]
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function checkRegexLiteral(node, services) {
|
|
50
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
51
|
-
const range = getTSNodeRange(node, services.sourceFile);
|
|
52
|
-
checkPattern(details.pattern, details.flags, range.begin);
|
|
53
|
-
}
|
|
54
|
-
function checkRegExpConstructor(node, services) {
|
|
55
|
-
const construction = getRegExpConstruction(node, services);
|
|
56
|
-
if (!construction) return;
|
|
57
|
-
checkPattern(construction.raw, construction.flags, construction.start);
|
|
58
|
-
}
|
|
59
|
-
return { visitors: {
|
|
60
|
-
CallExpression: checkRegExpConstructor,
|
|
61
|
-
NewExpression: checkRegExpConstructor,
|
|
62
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
63
|
-
} };
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
//#endregion
|
|
67
|
-
export { regexUnusedCapturingGroups_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports regular expression flags that have no effect on the pattern.";
|
|
3
|
-
readonly id: "regexUnusedFlags";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unusedDotAll" | "unusedIgnoreCase" | "unusedMultiline", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
4
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
5
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import * as ts$1 from "typescript";
|
|
7
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
8
|
-
//#region src/rules/regexUnusedFlags.ts
|
|
9
|
-
function analyzePattern(pattern) {
|
|
10
|
-
const usage = {
|
|
11
|
-
hasAnchor: false,
|
|
12
|
-
hasDot: false,
|
|
13
|
-
hasLetter: false
|
|
14
|
-
};
|
|
15
|
-
visitRegExpAST(pattern, {
|
|
16
|
-
onAssertionEnter(node) {
|
|
17
|
-
if (node.kind === "start" || node.kind === "end") usage.hasAnchor = true;
|
|
18
|
-
},
|
|
19
|
-
onCharacterClassRangeEnter(node) {
|
|
20
|
-
if (rangeContainsLetter(node.min.value, node.max.value)) usage.hasLetter = true;
|
|
21
|
-
},
|
|
22
|
-
onCharacterEnter(node) {
|
|
23
|
-
if (isAsciiLetter(node.value)) usage.hasLetter = true;
|
|
24
|
-
},
|
|
25
|
-
onCharacterSetEnter(node) {
|
|
26
|
-
if (node.kind === "any") usage.hasDot = true;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
return usage;
|
|
30
|
-
}
|
|
31
|
-
function findUnusedFlags(pattern, flags) {
|
|
32
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
33
|
-
if (!regexpAst) return [];
|
|
34
|
-
const usage = analyzePattern(regexpAst);
|
|
35
|
-
const unusedFlags = [];
|
|
36
|
-
if (flags.includes("i") && !usage.hasLetter) unusedFlags.push("i");
|
|
37
|
-
if (flags.includes("m") && !usage.hasAnchor) unusedFlags.push("m");
|
|
38
|
-
if (flags.includes("s") && !usage.hasDot) unusedFlags.push("s");
|
|
39
|
-
return unusedFlags;
|
|
40
|
-
}
|
|
41
|
-
function isAsciiLetter(codePoint) {
|
|
42
|
-
return codePoint >= 65 && codePoint <= 90 || codePoint >= 97 && codePoint <= 122;
|
|
43
|
-
}
|
|
44
|
-
function rangeContainsLetter(min, max) {
|
|
45
|
-
return min <= 90 && max >= 65 || min <= 122 && max >= 97;
|
|
46
|
-
}
|
|
47
|
-
var regexUnusedFlags_default = ruleCreator.createRule(typescriptLanguage, {
|
|
48
|
-
about: {
|
|
49
|
-
description: "Reports regular expression flags that have no effect on the pattern.",
|
|
50
|
-
id: "regexUnusedFlags",
|
|
51
|
-
presets: ["logical"]
|
|
52
|
-
},
|
|
53
|
-
messages: {
|
|
54
|
-
unusedDotAll: {
|
|
55
|
-
primary: "The `s` flag has no effect because the pattern contains no dots.",
|
|
56
|
-
secondary: ["The dotAll flag only affects the . metacharacter."],
|
|
57
|
-
suggestions: ["Remove the 's' flag."]
|
|
58
|
-
},
|
|
59
|
-
unusedIgnoreCase: {
|
|
60
|
-
primary: "The `i` flag has no effect because the pattern contains no letters.",
|
|
61
|
-
secondary: ["The ignoreCase flag only affects matching of ASCII letters (A-Za-z)."],
|
|
62
|
-
suggestions: ["Remove the 'i' flag."]
|
|
63
|
-
},
|
|
64
|
-
unusedMultiline: {
|
|
65
|
-
primary: "The `m` flag has no effect because the pattern contains no line anchors.",
|
|
66
|
-
secondary: ["The multiline flag only affects the ^ and $ anchors."],
|
|
67
|
-
suggestions: ["Remove the 'm' flag."]
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
setup(context) {
|
|
71
|
-
function reportUnusedFlags(unusedFlags, flags, flagsStart) {
|
|
72
|
-
for (const flag of unusedFlags) {
|
|
73
|
-
const flagIndex = flags.indexOf(flag);
|
|
74
|
-
const message = flag === "i" ? "unusedIgnoreCase" : flag === "m" ? "unusedMultiline" : "unusedDotAll";
|
|
75
|
-
const range = {
|
|
76
|
-
begin: flagsStart + flagIndex,
|
|
77
|
-
end: flagsStart + flagIndex + 1
|
|
78
|
-
};
|
|
79
|
-
context.report({
|
|
80
|
-
fix: {
|
|
81
|
-
range,
|
|
82
|
-
text: ""
|
|
83
|
-
},
|
|
84
|
-
message,
|
|
85
|
-
range
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function checkRegexLiteral(node, services) {
|
|
90
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
91
|
-
const unusedFlags = findUnusedFlags(details.pattern, details.flags);
|
|
92
|
-
if (!unusedFlags.length) return;
|
|
93
|
-
const flagsStart = details.start + node.text.length - details.flags.length - 1;
|
|
94
|
-
reportUnusedFlags(unusedFlags, details.flags, flagsStart);
|
|
95
|
-
}
|
|
96
|
-
function checkRegExpConstructor(node, services) {
|
|
97
|
-
const construction = getRegExpConstruction(node, services);
|
|
98
|
-
if (!construction || construction.args.length < 2) return;
|
|
99
|
-
const unusedFlags = findUnusedFlags(construction.raw, construction.flags);
|
|
100
|
-
if (!unusedFlags.length) return;
|
|
101
|
-
const secondArgument = construction.args[1];
|
|
102
|
-
if (secondArgument.kind !== ts$1.SyntaxKind.StringLiteral) return;
|
|
103
|
-
const flagsStart = secondArgument.getStart(services.sourceFile) + 1;
|
|
104
|
-
reportUnusedFlags(unusedFlags, construction.flags, flagsStart);
|
|
105
|
-
}
|
|
106
|
-
return { visitors: {
|
|
107
|
-
CallExpression: checkRegExpConstructor,
|
|
108
|
-
NewExpression: checkRegExpConstructor,
|
|
109
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
110
|
-
} };
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
//#endregion
|
|
114
|
-
export { regexUnusedFlags_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports lazy quantifiers that have no effect because the quantifier is constant.";
|
|
3
|
-
readonly id: "regexUnusedLazyQuantifiers";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "uselessLazy", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
4
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
5
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
7
|
-
//#region src/rules/regexUnusedLazyQuantifiers.ts
|
|
8
|
-
var regexUnusedLazyQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports lazy quantifiers that have no effect because the quantifier is constant.",
|
|
11
|
-
id: "regexUnusedLazyQuantifiers",
|
|
12
|
-
presets: ["logical"]
|
|
13
|
-
},
|
|
14
|
-
messages: { uselessLazy: {
|
|
15
|
-
primary: "Lazy quantifier `{{ raw }}` has no effect because the quantifier matches exactly {{ count }} time(s).",
|
|
16
|
-
secondary: ["When a quantifier has fixed bounds (min equals max), there is no choice in how many times to match, so lazy vs greedy is irrelevant."],
|
|
17
|
-
suggestions: ["Remove the '?' to use the greedy form."]
|
|
18
|
-
} },
|
|
19
|
-
setup(context) {
|
|
20
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
21
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
22
|
-
if (!regexpAst) return;
|
|
23
|
-
visitRegExpAST(regexpAst, { onQuantifierEnter(node) {
|
|
24
|
-
if (!node.greedy && node.min === node.max) {
|
|
25
|
-
const range = {
|
|
26
|
-
begin: patternStart + node.start,
|
|
27
|
-
end: patternStart + node.end
|
|
28
|
-
};
|
|
29
|
-
context.report({
|
|
30
|
-
data: {
|
|
31
|
-
count: node.min,
|
|
32
|
-
raw: node.raw
|
|
33
|
-
},
|
|
34
|
-
fix: {
|
|
35
|
-
range,
|
|
36
|
-
text: node.raw.slice(0, -1)
|
|
37
|
-
},
|
|
38
|
-
message: "uselessLazy",
|
|
39
|
-
range
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
} });
|
|
43
|
-
}
|
|
44
|
-
function checkRegexLiteral(node, services) {
|
|
45
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
46
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
47
|
-
}
|
|
48
|
-
function checkRegExpConstructor(node, services) {
|
|
49
|
-
const construction = getRegExpConstruction(node, services);
|
|
50
|
-
if (!construction) return;
|
|
51
|
-
checkPattern(construction.pattern, construction.start + 1, construction.flags);
|
|
52
|
-
}
|
|
53
|
-
return { visitors: {
|
|
54
|
-
CallExpression: checkRegExpConstructor,
|
|
55
|
-
NewExpression: checkRegExpConstructor,
|
|
56
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
57
|
-
} };
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
//#endregion
|
|
61
|
-
export { regexUnusedLazyQuantifiers_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports quantifiers that match exactly once, making them unnecessary.";
|
|
3
|
-
readonly id: "regexUnusedQuantifiers";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "uselessQuantifier", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpConstruction } from "./utils/getRegExpConstruction.js";
|
|
4
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
5
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
7
|
-
//#region src/rules/regexUnusedQuantifiers.ts
|
|
8
|
-
var regexUnusedQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports quantifiers that match exactly once, making them unnecessary.",
|
|
11
|
-
id: "regexUnusedQuantifiers",
|
|
12
|
-
presets: ["logical"]
|
|
13
|
-
},
|
|
14
|
-
messages: { uselessQuantifier: {
|
|
15
|
-
primary: "Quantifier `{{ raw }}` is unnecessary because it matches exactly once.",
|
|
16
|
-
secondary: ["A quantifier that matches exactly once can be removed without changing the pattern's behavior."],
|
|
17
|
-
suggestions: ["Remove the quantifier if one match is all that is needed.", "Change the quantifier if multiple matches are intended."]
|
|
18
|
-
} },
|
|
19
|
-
setup(context) {
|
|
20
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
21
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
22
|
-
if (!regexpAst) return;
|
|
23
|
-
visitRegExpAST(regexpAst, { onQuantifierEnter(node) {
|
|
24
|
-
if (node.min === 1 && node.max === 1) {
|
|
25
|
-
const quantifierStart = node.element.end;
|
|
26
|
-
context.report({
|
|
27
|
-
data: { raw: node.raw },
|
|
28
|
-
fix: {
|
|
29
|
-
range: {
|
|
30
|
-
begin: patternStart + quantifierStart,
|
|
31
|
-
end: patternStart + node.end
|
|
32
|
-
},
|
|
33
|
-
text: ""
|
|
34
|
-
},
|
|
35
|
-
message: "uselessQuantifier",
|
|
36
|
-
range: {
|
|
37
|
-
begin: patternStart + node.start,
|
|
38
|
-
end: patternStart + node.end
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
} });
|
|
43
|
-
}
|
|
44
|
-
function checkRegexLiteral(node, services) {
|
|
45
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
46
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
47
|
-
}
|
|
48
|
-
function checkRegExpConstructor(node, services) {
|
|
49
|
-
const construction = getRegExpConstruction(node, services);
|
|
50
|
-
if (!construction) return;
|
|
51
|
-
checkPattern(construction.pattern, construction.start + 1, construction.flags);
|
|
52
|
-
}
|
|
53
|
-
return { visitors: {
|
|
54
|
-
CallExpression: checkRegExpConstructor,
|
|
55
|
-
NewExpression: checkRegExpConstructor,
|
|
56
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
57
|
-
} };
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
//#endregion
|
|
61
|
-
export { regexUnusedQuantifiers_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports invalid regular expressions.";
|
|
3
|
-
readonly id: "regexValidity";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "conflictingFlags" | "duplicateFlag" | "invalidFlag" | "invalidPattern", undefined>;
|
|
9
|
-
export default _default;
|