@flint.fyi/ts 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +360 -365
- package/dist/index.mjs +22467 -0
- package/package.json +10 -10
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -621
- package/lib/rules/accessorPairGroups.d.ts +0 -10
- package/lib/rules/accessorPairGroups.js +0 -48
- package/lib/rules/accessorPairTypes.d.ts +0 -10
- package/lib/rules/accessorPairTypes.js +0 -72
- package/lib/rules/accessorThisRecursion.d.ts +0 -10
- package/lib/rules/accessorThisRecursion.js +0 -65
- package/lib/rules/anyArguments.d.ts +0 -10
- package/lib/rules/anyArguments.js +0 -234
- package/lib/rules/anyAssignments.d.ts +0 -10
- package/lib/rules/anyAssignments.js +0 -265
- package/lib/rules/anyCalls.d.ts +0 -10
- package/lib/rules/anyCalls.js +0 -68
- package/lib/rules/anyMemberAccess.d.ts +0 -10
- package/lib/rules/anyMemberAccess.js +0 -85
- package/lib/rules/anyReturns.d.ts +0 -10
- package/lib/rules/anyReturns.js +0 -102
- package/lib/rules/arguments.d.ts +0 -10
- package/lib/rules/arguments.js +0 -38
- package/lib/rules/arrayCallbackReturns.d.ts +0 -10
- package/lib/rules/arrayCallbackReturns.js +0 -73
- package/lib/rules/arrayConstructors.d.ts +0 -10
- package/lib/rules/arrayConstructors.js +0 -47
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -10
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -54
- package/lib/rules/arrayElementDeletions.d.ts +0 -10
- package/lib/rules/arrayElementDeletions.js +0 -43
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -10
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -45
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -10
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -86
- package/lib/rules/arrayFilteredFinds.d.ts +0 -10
- package/lib/rules/arrayFilteredFinds.js +0 -80
- package/lib/rules/arrayFinds.d.ts +0 -10
- package/lib/rules/arrayFinds.js +0 -41
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMapMethods.js +0 -47
- package/lib/rules/arrayFlatMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMethods.js +0 -83
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -10
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -33
- package/lib/rules/arrayIncludes.d.ts +0 -10
- package/lib/rules/arrayIncludes.js +0 -59
- package/lib/rules/arrayIncludesMethods.d.ts +0 -10
- package/lib/rules/arrayIncludesMethods.js +0 -37
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -10
- package/lib/rules/arrayIndexOfMethods.js +0 -51
- package/lib/rules/arrayLoops.d.ts +0 -10
- package/lib/rules/arrayLoops.js +0 -36
- package/lib/rules/arrayMapIdentities.d.ts +0 -10
- package/lib/rules/arrayMapIdentities.js +0 -74
- package/lib/rules/arrayMutableReverses.d.ts +0 -10
- package/lib/rules/arrayMutableReverses.js +0 -39
- package/lib/rules/arrayMutableSorts.d.ts +0 -10
- package/lib/rules/arrayMutableSorts.js +0 -72
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -10
- package/lib/rules/arrayReduceTypeArguments.js +0 -64
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -10
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -51
- package/lib/rules/arraySomeMethods.d.ts +0 -10
- package/lib/rules/arraySomeMethods.js +0 -77
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -10
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -74
- package/lib/rules/arrayTypes.d.ts +0 -17
- package/lib/rules/arrayTypes.js +0 -111
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -10
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -97
- package/lib/rules/asConstAssertions.d.ts +0 -10
- package/lib/rules/asConstAssertions.js +0 -57
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -10
- package/lib/rules/assignmentOperatorShorthands.js +0 -47
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -10
- package/lib/rules/asyncFunctionAwaits.js +0 -55
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -10
- package/lib/rules/asyncPromiseExecutors.js +0 -41
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -10
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -52
- package/lib/rules/atAccesses.d.ts +0 -10
- package/lib/rules/atAccesses.js +0 -52
- package/lib/rules/builtinCoercions.d.ts +0 -10
- package/lib/rules/builtinCoercions.js +0 -117
- package/lib/rules/builtinConstructorNews.d.ts +0 -10
- package/lib/rules/builtinConstructorNews.js +0 -89
- package/lib/rules/caseDeclarations.d.ts +0 -10
- package/lib/rules/caseDeclarations.js +0 -40
- package/lib/rules/caseDuplicates.d.ts +0 -10
- package/lib/rules/caseDuplicates.js +0 -36
- package/lib/rules/caseFallthroughs.d.ts +0 -10
- package/lib/rules/caseFallthroughs.js +0 -76
- package/lib/rules/catchCallbackTypes.d.ts +0 -10
- package/lib/rules/catchCallbackTypes.js +0 -67
- package/lib/rules/caughtVariableNames.d.ts +0 -10
- package/lib/rules/caughtVariableNames.js +0 -40
- package/lib/rules/chainedAssignments.d.ts +0 -10
- package/lib/rules/chainedAssignments.js +0 -33
- package/lib/rules/charAtComparisons.d.ts +0 -10
- package/lib/rules/charAtComparisons.js +0 -58
- package/lib/rules/classAssignments.d.ts +0 -10
- package/lib/rules/classAssignments.js +0 -29
- package/lib/rules/classFieldDeclarations.d.ts +0 -10
- package/lib/rules/classFieldDeclarations.js +0 -40
- package/lib/rules/classLiteralProperties.d.ts +0 -10
- package/lib/rules/classLiteralProperties.js +0 -45
- package/lib/rules/classMemberDuplicates.d.ts +0 -10
- package/lib/rules/classMemberDuplicates.js +0 -71
- package/lib/rules/classMethodsThis.d.ts +0 -14
- package/lib/rules/classMethodsThis.js +0 -124
- package/lib/rules/combinedPushes.d.ts +0 -10
- package/lib/rules/combinedPushes.js +0 -56
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -10
- package/lib/rules/consecutiveNonNullAssertions.js +0 -39
- package/lib/rules/consoleCalls.d.ts +0 -9
- package/lib/rules/consoleCalls.js +0 -28
- package/lib/rules/constantAssignments.d.ts +0 -10
- package/lib/rules/constantAssignments.js +0 -41
- package/lib/rules/constructorGenericCalls.d.ts +0 -16
- package/lib/rules/constructorGenericCalls.js +0 -138
- package/lib/rules/constructorReturns.d.ts +0 -10
- package/lib/rules/constructorReturns.js +0 -41
- package/lib/rules/constructorSupers.d.ts +0 -10
- package/lib/rules/constructorSupers.js +0 -77
- package/lib/rules/dateConstructorClones.d.ts +0 -10
- package/lib/rules/dateConstructorClones.js +0 -37
- package/lib/rules/dateNowTimestamps.d.ts +0 -10
- package/lib/rules/dateNowTimestamps.js +0 -57
- package/lib/rules/debuggerStatements.d.ts +0 -10
- package/lib/rules/debuggerStatements.js +0 -33
- package/lib/rules/defaultCaseLast.d.ts +0 -10
- package/lib/rules/defaultCaseLast.js +0 -36
- package/lib/rules/defaultParameterLast.d.ts +0 -10
- package/lib/rules/defaultParameterLast.js +0 -42
- package/lib/rules/deprecated.d.ts +0 -10
- package/lib/rules/deprecated.js +0 -243
- package/lib/rules/destructuringConsistency.d.ts +0 -10
- package/lib/rules/destructuringConsistency.js +0 -112
- package/lib/rules/duplicateArguments.d.ts +0 -10
- package/lib/rules/duplicateArguments.js +0 -45
- package/lib/rules/dynamicDeletes.d.ts +0 -10
- package/lib/rules/dynamicDeletes.js +0 -37
- package/lib/rules/elseIfDuplicates.d.ts +0 -10
- package/lib/rules/elseIfDuplicates.js +0 -38
- package/lib/rules/elseReturns.d.ts +0 -10
- package/lib/rules/elseReturns.js +0 -67
- package/lib/rules/emptyBlocks.d.ts +0 -10
- package/lib/rules/emptyBlocks.js +0 -56
- package/lib/rules/emptyDestructures.d.ts +0 -10
- package/lib/rules/emptyDestructures.js +0 -34
- package/lib/rules/emptyEnums.d.ts +0 -10
- package/lib/rules/emptyEnums.js +0 -30
- package/lib/rules/emptyExports.d.ts +0 -10
- package/lib/rules/emptyExports.js +0 -60
- package/lib/rules/emptyFiles.d.ts +0 -10
- package/lib/rules/emptyFiles.js +0 -44
- package/lib/rules/emptyFunctions.d.ts +0 -10
- package/lib/rules/emptyFunctions.js +0 -61
- package/lib/rules/emptyModuleAttributes.d.ts +0 -10
- package/lib/rules/emptyModuleAttributes.js +0 -35
- package/lib/rules/emptyObjectTypes.d.ts +0 -10
- package/lib/rules/emptyObjectTypes.js +0 -47
- package/lib/rules/emptyStaticBlocks.d.ts +0 -10
- package/lib/rules/emptyStaticBlocks.js +0 -42
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -10
- package/lib/rules/emptyTypeParameterLists.js +0 -31
- package/lib/rules/enumInitializers.d.ts +0 -10
- package/lib/rules/enumInitializers.js +0 -54
- package/lib/rules/enumMemberLiterals.d.ts +0 -10
- package/lib/rules/enumMemberLiterals.js +0 -39
- package/lib/rules/enumValueConsistency.d.ts +0 -10
- package/lib/rules/enumValueConsistency.js +0 -56
- package/lib/rules/enumValueDuplicates.d.ts +0 -10
- package/lib/rules/enumValueDuplicates.js +0 -60
- package/lib/rules/equalityOperatorNegations.d.ts +0 -9
- package/lib/rules/equalityOperatorNegations.js +0 -60
- package/lib/rules/equalityOperators.d.ts +0 -10
- package/lib/rules/equalityOperators.js +0 -44
- package/lib/rules/errorMessages.d.ts +0 -10
- package/lib/rules/errorMessages.js +0 -60
- package/lib/rules/errorSubclassProperties.d.ts +0 -10
- package/lib/rules/errorSubclassProperties.js +0 -144
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -10
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -55
- package/lib/rules/escapeSequenceCasing.d.ts +0 -10
- package/lib/rules/escapeSequenceCasing.js +0 -75
- package/lib/rules/evals.d.ts +0 -10
- package/lib/rules/evals.js +0 -31
- package/lib/rules/evolvingVariableTypes.d.ts +0 -10
- package/lib/rules/evolvingVariableTypes.js +0 -33
- package/lib/rules/exceptionAssignments.d.ts +0 -10
- package/lib/rules/exceptionAssignments.js +0 -39
- package/lib/rules/explicitAnys.d.ts +0 -10
- package/lib/rules/explicitAnys.js +0 -55
- package/lib/rules/exponentiationOperators.d.ts +0 -10
- package/lib/rules/exponentiationOperators.js +0 -34
- package/lib/rules/exportFromImports.d.ts +0 -10
- package/lib/rules/exportFromImports.js +0 -119
- package/lib/rules/exportMutables.d.ts +0 -10
- package/lib/rules/exportMutables.js +0 -33
- package/lib/rules/exportUniqueNames.d.ts +0 -10
- package/lib/rules/exportUniqueNames.js +0 -65
- package/lib/rules/extraneousClasses.d.ts +0 -16
- package/lib/rules/extraneousClasses.js +0 -111
- package/lib/rules/fetchMethodBodies.d.ts +0 -10
- package/lib/rules/fetchMethodBodies.js +0 -72
- package/lib/rules/finallyStatementSafety.d.ts +0 -10
- package/lib/rules/finallyStatementSafety.js +0 -47
- package/lib/rules/forDirections.d.ts +0 -10
- package/lib/rules/forDirections.js +0 -75
- package/lib/rules/forInArrays.d.ts +0 -10
- package/lib/rules/forInArrays.js +0 -46
- package/lib/rules/forInGuards.d.ts +0 -9
- package/lib/rules/forInGuards.js +0 -44
- package/lib/rules/functionApplySpreads.d.ts +0 -10
- package/lib/rules/functionApplySpreads.js +0 -63
- package/lib/rules/functionAssignments.d.ts +0 -10
- package/lib/rules/functionAssignments.js +0 -29
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -10
- package/lib/rules/functionCurryingRedundancy.js +0 -53
- package/lib/rules/functionDeclarationStyles.d.ts +0 -16
- package/lib/rules/functionDeclarationStyles.js +0 -67
- package/lib/rules/functionNameMatches.d.ts +0 -10
- package/lib/rules/functionNameMatches.js +0 -74
- package/lib/rules/functionNewCalls.d.ts +0 -10
- package/lib/rules/functionNewCalls.js +0 -42
- package/lib/rules/generatorFunctionYields.d.ts +0 -10
- package/lib/rules/generatorFunctionYields.js +0 -50
- package/lib/rules/getterReturns.d.ts +0 -10
- package/lib/rules/getterReturns.js +0 -65
- package/lib/rules/globalAssignments.d.ts +0 -10
- package/lib/rules/globalAssignments.js +0 -47
- package/lib/rules/globalObjectCalls.d.ts +0 -10
- package/lib/rules/globalObjectCalls.js +0 -42
- package/lib/rules/globalThisAliases.d.ts +0 -10
- package/lib/rules/globalThisAliases.js +0 -47
- package/lib/rules/impliedEvals.d.ts +0 -10
- package/lib/rules/impliedEvals.js +0 -130
- package/lib/rules/importEmptyBlocks.d.ts +0 -10
- package/lib/rules/importEmptyBlocks.js +0 -53
- package/lib/rules/importTypeSideEffects.d.ts +0 -10
- package/lib/rules/importTypeSideEffects.js +0 -31
- package/lib/rules/indexedObjectTypes.d.ts +0 -16
- package/lib/rules/indexedObjectTypes.js +0 -83
- package/lib/rules/instanceOfArrays.d.ts +0 -10
- package/lib/rules/instanceOfArrays.js +0 -31
- package/lib/rules/irregularWhitespaces.d.ts +0 -16
- package/lib/rules/irregularWhitespaces.js +0 -97
- package/lib/rules/isNaNComparisons.d.ts +0 -10
- package/lib/rules/isNaNComparisons.js +0 -43
- package/lib/rules/literalConstructorWrappers.d.ts +0 -10
- package/lib/rules/literalConstructorWrappers.js +0 -64
- package/lib/rules/mathMethods.d.ts +0 -10
- package/lib/rules/mathMethods.js +0 -128
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -10
- package/lib/rules/meaninglessVoidOperators.js +0 -39
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -10
- package/lib/rules/misleadingVoidExpressions.js +0 -128
- package/lib/rules/moduleSpecifierLists.d.ts +0 -10
- package/lib/rules/moduleSpecifierLists.js +0 -92
- package/lib/rules/multilineAmbiguities.d.ts +0 -10
- package/lib/rules/multilineAmbiguities.js +0 -64
- package/lib/rules/namedDefaultExports.d.ts +0 -10
- package/lib/rules/namedDefaultExports.js +0 -60
- package/lib/rules/namespaceDeclarations.d.ts +0 -14
- package/lib/rules/namespaceDeclarations.js +0 -37
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -10
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -40
- package/lib/rules/namespaceKeywords.d.ts +0 -10
- package/lib/rules/namespaceKeywords.js +0 -40
- package/lib/rules/nativeObjectExtensions.d.ts +0 -10
- package/lib/rules/nativeObjectExtensions.js +0 -114
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -10
- package/lib/rules/negativeIndexLengthMethods.js +0 -180
- package/lib/rules/negativeZeroComparisons.d.ts +0 -10
- package/lib/rules/negativeZeroComparisons.js +0 -48
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -10
- package/lib/rules/nestedStandaloneIfs.js +0 -105
- package/lib/rules/newDefinitions.d.ts +0 -10
- package/lib/rules/newDefinitions.js +0 -84
- package/lib/rules/newExpressions.d.ts +0 -10
- package/lib/rules/newExpressions.js +0 -38
- package/lib/rules/newNativeNonConstructors.d.ts +0 -10
- package/lib/rules/newNativeNonConstructors.js +0 -39
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -10
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -63
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -10
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -69
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -10
- package/lib/rules/nonNullAssertionPlacement.js +0 -94
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -10
- package/lib/rules/nonNullableTypeAssertions.js +0 -78
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -10
- package/lib/rules/nonOctalDecimalEscapes.js +0 -48
- package/lib/rules/nullishCheckStyle.d.ts +0 -21
- package/lib/rules/nullishCheckStyle.js +0 -144
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -22
- package/lib/rules/nullishCoalescingOperators.js +0 -323
- package/lib/rules/numberMethodRanges.d.ts +0 -10
- package/lib/rules/numberMethodRanges.js +0 -74
- package/lib/rules/numberStaticMethods.d.ts +0 -10
- package/lib/rules/numberStaticMethods.js +0 -53
- package/lib/rules/numericErasingOperations.d.ts +0 -10
- package/lib/rules/numericErasingOperations.js +0 -46
- package/lib/rules/numericLiteralParsing.d.ts +0 -10
- package/lib/rules/numericLiteralParsing.js +0 -66
- package/lib/rules/numericPrecision.d.ts +0 -10
- package/lib/rules/numericPrecision.js +0 -102
- package/lib/rules/numericSeparatorGroups.d.ts +0 -10
- package/lib/rules/numericSeparatorGroups.js +0 -101
- package/lib/rules/objectAssignSpreads.d.ts +0 -10
- package/lib/rules/objectAssignSpreads.js +0 -53
- package/lib/rules/objectCalls.d.ts +0 -10
- package/lib/rules/objectCalls.js +0 -38
- package/lib/rules/objectEntriesMethods.d.ts +0 -10
- package/lib/rules/objectEntriesMethods.js +0 -82
- package/lib/rules/objectHasOwns.d.ts +0 -10
- package/lib/rules/objectHasOwns.js +0 -50
- package/lib/rules/objectKeyDuplicates.d.ts +0 -10
- package/lib/rules/objectKeyDuplicates.js +0 -63
- package/lib/rules/objectProto.d.ts +0 -10
- package/lib/rules/objectProto.js +0 -50
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -10
- package/lib/rules/objectPrototypeBuiltIns.js +0 -54
- package/lib/rules/objectShorthand.d.ts +0 -10
- package/lib/rules/objectShorthand.js +0 -84
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -10
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -43
- package/lib/rules/objectTypeDefinitions.d.ts +0 -10
- package/lib/rules/objectTypeDefinitions.js +0 -34
- package/lib/rules/octalEscapes.d.ts +0 -10
- package/lib/rules/octalEscapes.js +0 -58
- package/lib/rules/octalNumbers.d.ts +0 -10
- package/lib/rules/octalNumbers.js +0 -55
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -10
- package/lib/rules/operatorAssignmentShorthand.js +0 -77
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -10
- package/lib/rules/overloadSignaturesAdjacent.js +0 -140
- package/lib/rules/parameterReassignments.d.ts +0 -10
- package/lib/rules/parameterReassignments.js +0 -45
- package/lib/rules/parseIntRadixes.d.ts +0 -10
- package/lib/rules/parseIntRadixes.js +0 -62
- package/lib/rules/propertyAccessNotation.d.ts +0 -13
- package/lib/rules/propertyAccessNotation.js +0 -119
- package/lib/rules/recursionOnlyArguments.d.ts +0 -10
- package/lib/rules/recursionOnlyArguments.js +0 -71
- package/lib/rules/redundantTypeConstituents.d.ts +0 -10
- package/lib/rules/redundantTypeConstituents.js +0 -277
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -10
- package/lib/rules/regexAllGlobalFlags.js +0 -56
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -10
- package/lib/rules/regexAmbiguousInvalidity.js +0 -297
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -10
- package/lib/rules/regexCharacterClassRanges.js +0 -137
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -10
- package/lib/rules/regexCharacterClassSetOperations.js +0 -81
- package/lib/rules/regexCharacterClasses.d.ts +0 -10
- package/lib/rules/regexCharacterClasses.js +0 -234
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -10
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -52
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -10
- package/lib/rules/regexContradictoryAssertions.js +0 -210
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -10
- package/lib/rules/regexControlCharacterEscapes.js +0 -130
- package/lib/rules/regexControlCharacters.d.ts +0 -10
- package/lib/rules/regexControlCharacters.js +0 -95
- package/lib/rules/regexDigitMatchers.d.ts +0 -10
- package/lib/rules/regexDigitMatchers.js +0 -180
- package/lib/rules/regexDollarEscapes.d.ts +0 -10
- package/lib/rules/regexDollarEscapes.js +0 -91
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -10
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -128
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -10
- package/lib/rules/regexEmptyAlternatives.js +0 -140
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -10
- package/lib/rules/regexEmptyCapturingGroups.js +0 -67
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -10
- package/lib/rules/regexEmptyCharacterClasses.js +0 -68
- package/lib/rules/regexEmptyGroups.d.ts +0 -10
- package/lib/rules/regexEmptyGroups.js +0 -66
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -92
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -10
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -68
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -10
- package/lib/rules/regexEmptyStringLiterals.js +0 -66
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -10
- package/lib/rules/regexEscapeBackspaces.js +0 -69
- package/lib/rules/regexExecutors.d.ts +0 -10
- package/lib/rules/regexExecutors.js +0 -58
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -10
- package/lib/rules/regexGraphemeStringLiterals.js +0 -51
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -10
- package/lib/rules/regexHexadecimalEscapes.js +0 -71
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -10
- package/lib/rules/regexIgnoreCaseFlags.js +0 -145
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -10
- package/lib/rules/regexInvisibleCharacters.js +0 -90
- package/lib/rules/regexLetterCasing.d.ts +0 -10
- package/lib/rules/regexLetterCasing.js +0 -186
- package/lib/rules/regexLiterals.d.ts +0 -10
- package/lib/rules/regexLiterals.js +0 -92
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexLookaroundAssertions.js +0 -163
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -10
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -94
- package/lib/rules/regexMatchNotation.d.ts +0 -10
- package/lib/rules/regexMatchNotation.js +0 -139
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -10
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -229
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -10
- package/lib/rules/regexMisleadingQuantifiers.js +0 -78
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -10
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -203
- package/lib/rules/regexNamedBackreferences.d.ts +0 -10
- package/lib/rules/regexNamedBackreferences.js +0 -48
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -9
- package/lib/rules/regexNamedCaptureGroups.js +0 -67
- package/lib/rules/regexNamedReplacements.d.ts +0 -10
- package/lib/rules/regexNamedReplacements.js +0 -93
- package/lib/rules/regexNonStandardFlags.d.ts +0 -10
- package/lib/rules/regexNonStandardFlags.js +0 -66
- package/lib/rules/regexObscureRanges.d.ts +0 -10
- package/lib/rules/regexObscureRanges.js +0 -93
- package/lib/rules/regexOctalEscapes.d.ts +0 -10
- package/lib/rules/regexOctalEscapes.js +0 -70
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -10
- package/lib/rules/regexPlusQuantifiers.js +0 -68
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -10
- package/lib/rules/regexPredefinedAssertions.js +0 -127
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -10
- package/lib/rules/regexQuestionQuantifiers.js +0 -104
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -10
- package/lib/rules/regexRepeatQuantifiers.js +0 -96
- package/lib/rules/regexResultArrayGroups.d.ts +0 -10
- package/lib/rules/regexResultArrayGroups.js +0 -187
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -10
- package/lib/rules/regexSetOperationOptimizations.js +0 -177
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -10
- package/lib/rules/regexStandaloneBackslashes.js +0 -59
- package/lib/rules/regexStarQuantifiers.d.ts +0 -10
- package/lib/rules/regexStarQuantifiers.js +0 -68
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -10
- package/lib/rules/regexSuperLinearBacktracking.js +0 -98
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -10
- package/lib/rules/regexSuperLinearMoves.js +0 -142
- package/lib/rules/regexTestMethods.d.ts +0 -10
- package/lib/rules/regexTestMethods.js +0 -83
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -10
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -107
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeEscapes.js +0 -97
- package/lib/rules/regexUnicodeFlag.d.ts +0 -9
- package/lib/rules/regexUnicodeFlag.js +0 -97
- package/lib/rules/regexUnicodeProperties.d.ts +0 -10
- package/lib/rules/regexUnicodeProperties.js +0 -133
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryAssertions.js +0 -223
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -125
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -74
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -108
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -118
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -144
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -10
- package/lib/rules/regexUnnecessaryEscapes.js +0 -136
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -80
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -198
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -93
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -104
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -69
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -137
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -123
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -10
- package/lib/rules/regexUnnecessarySetOperands.js +0 -136
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnusedCapturingGroups.js +0 -69
- package/lib/rules/regexUnusedFlags.d.ts +0 -10
- package/lib/rules/regexUnusedFlags.js +0 -116
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -63
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedQuantifiers.js +0 -63
- package/lib/rules/regexValidity.d.ts +0 -10
- package/lib/rules/regexValidity.js +0 -146
- package/lib/rules/regexWordMatchers.d.ts +0 -10
- package/lib/rules/regexWordMatchers.js +0 -146
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -10
- package/lib/rules/regexZeroQuantifiers.js +0 -60
- package/lib/rules/requireImports.d.ts +0 -10
- package/lib/rules/requireImports.js +0 -48
- package/lib/rules/responseJsonMethods.d.ts +0 -10
- package/lib/rules/responseJsonMethods.js +0 -51
- package/lib/rules/restrictedIdentifiers.d.ts +0 -13
- package/lib/rules/restrictedIdentifiers.js +0 -41
- package/lib/rules/restrictedImports.d.ts +0 -27
- package/lib/rules/restrictedImports.js +0 -166
- package/lib/rules/returnAssignments.d.ts +0 -10
- package/lib/rules/returnAssignments.js +0 -38
- package/lib/rules/returnThisTypes.d.ts +0 -10
- package/lib/rules/returnThisTypes.js +0 -94
- package/lib/rules/ruleCreator.d.ts +0 -3
- package/lib/rules/ruleCreator.js +0 -17
- package/lib/rules/selfAssignments.d.ts +0 -10
- package/lib/rules/selfAssignments.js +0 -29
- package/lib/rules/sequences.d.ts +0 -10
- package/lib/rules/sequences.js +0 -28
- package/lib/rules/setSizeLengthChecks.d.ts +0 -10
- package/lib/rules/setSizeLengthChecks.js +0 -48
- package/lib/rules/setterReturns.d.ts +0 -10
- package/lib/rules/setterReturns.js +0 -41
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -10
- package/lib/rules/shadowedRestrictedNames.js +0 -68
- package/lib/rules/singleVariableDeclarations.d.ts +0 -10
- package/lib/rules/singleVariableDeclarations.js +0 -36
- package/lib/rules/sizeComparisonOperators.d.ts +0 -16
- package/lib/rules/sizeComparisonOperators.js +0 -148
- package/lib/rules/sparseArrays.d.ts +0 -10
- package/lib/rules/sparseArrays.js +0 -43
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -10
- package/lib/rules/staticMemberOnlyClasses.js +0 -77
- package/lib/rules/stringCaseMismatches.d.ts +0 -10
- package/lib/rules/stringCaseMismatches.js +0 -58
- package/lib/rules/stringCodePoints.d.ts +0 -10
- package/lib/rules/stringCodePoints.js +0 -50
- package/lib/rules/stringSliceMethods.d.ts +0 -10
- package/lib/rules/stringSliceMethods.js +0 -47
- package/lib/rules/stringStartsEndsWith.d.ts +0 -10
- package/lib/rules/stringStartsEndsWith.js +0 -79
- package/lib/rules/structuredCloneMethods.d.ts +0 -10
- package/lib/rules/structuredCloneMethods.js +0 -39
- package/lib/rules/symbolDescriptions.d.ts +0 -10
- package/lib/rules/symbolDescriptions.js +0 -32
- package/lib/rules/thisAliases.d.ts +0 -10
- package/lib/rules/thisAliases.js +0 -44
- package/lib/rules/thisBeforeSuper.d.ts +0 -10
- package/lib/rules/thisBeforeSuper.js +0 -86
- package/lib/rules/throwErrors.d.ts +0 -10
- package/lib/rules/throwErrors.js +0 -61
- package/lib/rules/topLevelAwaits.d.ts +0 -10
- package/lib/rules/topLevelAwaits.js +0 -49
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -10
- package/lib/rules/tripleSlashReferenceValidity.js +0 -54
- package/lib/rules/tripleSlashReferences.d.ts +0 -10
- package/lib/rules/tripleSlashReferences.js +0 -34
- package/lib/rules/tsComments.d.ts +0 -22
- package/lib/rules/tsComments.js +0 -130
- package/lib/rules/tslintComments.d.ts +0 -10
- package/lib/rules/tslintComments.js +0 -36
- package/lib/rules/typeAssertionStyles.d.ts +0 -10
- package/lib/rules/typeAssertionStyles.js +0 -32
- package/lib/rules/typeImports.d.ts +0 -20
- package/lib/rules/typeImports.js +0 -283
- package/lib/rules/typeofComparisons.d.ts +0 -10
- package/lib/rules/typeofComparisons.js +0 -58
- package/lib/rules/unassignedVariables.d.ts +0 -10
- package/lib/rules/unassignedVariables.js +0 -34
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -10
- package/lib/rules/undefinedTypeofChecks.js +0 -41
- package/lib/rules/undefinedVariables.d.ts +0 -10
- package/lib/rules/undefinedVariables.js +0 -39
- package/lib/rules/unicodeBOMs.d.ts +0 -10
- package/lib/rules/unicodeBOMs.js +0 -39
- package/lib/rules/unnecessaryBinds.d.ts +0 -10
- package/lib/rules/unnecessaryBinds.js +0 -78
- package/lib/rules/unnecessaryBlocks.d.ts +0 -10
- package/lib/rules/unnecessaryBlocks.js +0 -60
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -10
- package/lib/rules/unnecessaryBooleanCasts.js +0 -58
- package/lib/rules/unnecessaryCatches.d.ts +0 -10
- package/lib/rules/unnecessaryCatches.js +0 -48
- package/lib/rules/unnecessaryComparisons.d.ts +0 -10
- package/lib/rules/unnecessaryComparisons.js +0 -300
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -10
- package/lib/rules/unnecessaryConcatenation.js +0 -28
- package/lib/rules/unnecessaryEscapes.d.ts +0 -10
- package/lib/rules/unnecessaryEscapes.js +0 -134
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -10
- package/lib/rules/unnecessaryMathClamps.js +0 -114
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -10
- package/lib/rules/unnecessaryNumericFractions.js +0 -50
- package/lib/rules/unnecessaryRenames.d.ts +0 -10
- package/lib/rules/unnecessaryRenames.js +0 -92
- package/lib/rules/unnecessaryTernaries.d.ts +0 -10
- package/lib/rules/unnecessaryTernaries.js +0 -88
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -10
- package/lib/rules/unnecessaryUseStricts.js +0 -40
- package/lib/rules/unsafeNegations.d.ts +0 -10
- package/lib/rules/unsafeNegations.js +0 -38
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -12
- package/lib/rules/utils/collectAccessorPairs.js +0 -29
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -3
- package/lib/rules/utils/countCommentsInRange.js +0 -12
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -16
- package/lib/rules/utils/discriminateAnyType.js +0 -38
- package/lib/rules/utils/equalityOperators.d.ts +0 -9
- package/lib/rules/utils/equalityOperators.js +0 -36
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -3
- package/lib/rules/utils/forEachReturnStatement.js +0 -29
- package/lib/rules/utils/formatReportedType.d.ts +0 -4
- package/lib/rules/utils/formatReportedType.js +0 -9
- package/lib/rules/utils/getConstrainedType.d.ts +0 -3
- package/lib/rules/utils/getConstrainedType.js +0 -9
- package/lib/rules/utils/getFunctionName.d.ts +0 -3
- package/lib/rules/utils/getFunctionName.js +0 -16
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -10
- package/lib/rules/utils/getRegExpConstruction.js +0 -26
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -7
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -13
- package/lib/rules/utils/getThisExpression.d.ts +0 -3
- package/lib/rules/utils/getThisExpression.js +0 -16
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -3
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -13
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -3
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -33
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -4
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -29
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -27
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -3
- package/lib/rules/utils/isInBooleanContext.js +0 -22
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -3
- package/lib/rules/utils/isTypeRecursive.js +0 -8
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -15
- package/lib/rules/utils/isUnsafeAssignment.js +0 -45
- package/lib/rules/utils/operators.d.ts +0 -5
- package/lib/rules/utils/operators.js +0 -35
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAst.js +0 -17
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -3
- package/lib/rules/utils/parseRegexpAstFull.js +0 -18
- package/lib/rules/utils/skipParentheses.d.ts +0 -3
- package/lib/rules/utils/skipParentheses.js +0 -10
- package/lib/rules/variableDeletions.d.ts +0 -10
- package/lib/rules/variableDeletions.js +0 -35
- package/lib/rules/voidOperator.d.ts +0 -10
- package/lib/rules/voidOperator.js +0 -34
- package/lib/rules/withStatements.d.ts +0 -10
- package/lib/rules/withStatements.js +0 -30
- package/lib/rules/wrapperObjects.d.ts +0 -10
- package/lib/rules/wrapperObjects.js +0 -36
- package/lib/type-utils/getSpecifierNames.d.ts +0 -3
- package/lib/type-utils/getSpecifierNames.js +0 -9
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -3
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -14
- package/lib/type-utils/isFromFile.d.ts +0 -3
- package/lib/type-utils/isFromFile.js +0 -13
- package/lib/type-utils/isFromPackage.d.ts +0 -3
- package/lib/type-utils/isFromPackage.js +0 -16
- package/lib/type-utils/matchesSpecifier.d.ts +0 -4
- package/lib/type-utils/matchesSpecifier.js +0 -20
- package/lib/type-utils/schemas.d.ts +0 -15
- package/lib/type-utils/schemas.js +0 -25
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { 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/regexMisleadingQuantifiers.ts
|
|
8
|
-
function formatQuantifier(min, max, greedy) {
|
|
9
|
-
let result;
|
|
10
|
-
if (min === 0 && max === 1) result = "?";
|
|
11
|
-
else if (min === 0 && max === Infinity) result = "*";
|
|
12
|
-
else if (min === 1 && max === Infinity) result = "+";
|
|
13
|
-
else if (min === max) result = `{${min}}`;
|
|
14
|
-
else if (max === Infinity) result = `{${min},}`;
|
|
15
|
-
else result = `{${min},${max}}`;
|
|
16
|
-
return greedy ? result : `${result}?`;
|
|
17
|
-
}
|
|
18
|
-
function isPotentiallyEmpty(element) {
|
|
19
|
-
switch (element.type) {
|
|
20
|
-
case "Assertion":
|
|
21
|
-
case "Backreference": return true;
|
|
22
|
-
case "CapturingGroup":
|
|
23
|
-
case "Group": return element.alternatives.some((alt) => alt.elements.every((el) => isPotentiallyEmpty(el)));
|
|
24
|
-
case "Quantifier": return element.min === 0 || isPotentiallyEmpty(element.element);
|
|
25
|
-
default: return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
var regexMisleadingQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
29
|
-
about: {
|
|
30
|
-
description: "Reports quantifiers whose minimum implies they must match but whose element can match empty.",
|
|
31
|
-
id: "regexMisleadingQuantifiers",
|
|
32
|
-
presets: ["logical"]
|
|
33
|
-
},
|
|
34
|
-
messages: { confusing: {
|
|
35
|
-
primary: "Quantifier minimum is {{ min }} but the element can match empty. Consider using '{{ proposal }}' instead.",
|
|
36
|
-
secondary: ["This quantifier suggests it must match at least {{ min }} time(s), but the quantified element can match the empty string, so the effective minimum is 0."],
|
|
37
|
-
suggestions: ["Replace the quantifier with one that reflects the actual minimum."]
|
|
38
|
-
} },
|
|
39
|
-
setup(context) {
|
|
40
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
41
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
42
|
-
if (!regexpAst) return;
|
|
43
|
-
visitRegExpAST(regexpAst, { onQuantifierEnter(qNode) {
|
|
44
|
-
if (qNode.min <= 0 || !isPotentiallyEmpty(qNode.element)) return;
|
|
45
|
-
const proposal = formatQuantifier(0, qNode.max, qNode.greedy);
|
|
46
|
-
context.report({
|
|
47
|
-
data: {
|
|
48
|
-
min: qNode.min,
|
|
49
|
-
proposal
|
|
50
|
-
},
|
|
51
|
-
message: "confusing",
|
|
52
|
-
range: {
|
|
53
|
-
begin: patternStart + qNode.start,
|
|
54
|
-
end: patternStart + qNode.end
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
} });
|
|
58
|
-
}
|
|
59
|
-
function checkRegexLiteral(node, { sourceFile }) {
|
|
60
|
-
const details = getRegExpLiteralDetails(node, { sourceFile });
|
|
61
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
62
|
-
}
|
|
63
|
-
function checkRegExpConstructor(node, services) {
|
|
64
|
-
const construction = getRegExpConstruction(node, services);
|
|
65
|
-
if (!construction) return;
|
|
66
|
-
checkPattern(construction.pattern, construction.start + 1, construction.flags);
|
|
67
|
-
}
|
|
68
|
-
return { visitors: {
|
|
69
|
-
CallExpression: checkRegExpConstructor,
|
|
70
|
-
NewExpression: checkRegExpConstructor,
|
|
71
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
72
|
-
} };
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
//#endregion
|
|
76
|
-
export { regexMisleadingQuantifiers_default as default };
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=regexMisleadingQuantifiers.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports characters in regex character classes that appear as single visual characters but are made of multiple code points.";
|
|
3
|
-
readonly id: "regexMisleadingUnicodeCharacters";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "combiningClass" | "emojiModifier" | "regionalIndicatorSymbol" | "surrogatePair" | "surrogatePairWithoutUFlag" | "zwj", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexMisleadingUnicodeCharacters.d.ts.map
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
//#region src/rules/regexMisleadingUnicodeCharacters.ts
|
|
7
|
-
function findAllMatches(characters, hasUnicodeFlag) {
|
|
8
|
-
const matches = [];
|
|
9
|
-
if (hasUnicodeFlag) for (const nodes of findSurrogatePairs(characters)) matches.push({
|
|
10
|
-
kind: "surrogatePair",
|
|
11
|
-
nodes
|
|
12
|
-
});
|
|
13
|
-
else for (const nodes of findSurrogatePairsWithoutUFlag(characters)) matches.push({
|
|
14
|
-
kind: "surrogatePairWithoutUFlag",
|
|
15
|
-
nodes
|
|
16
|
-
});
|
|
17
|
-
for (const nodes of findCombiningClass(characters)) matches.push({
|
|
18
|
-
kind: "combiningClass",
|
|
19
|
-
nodes
|
|
20
|
-
});
|
|
21
|
-
for (const nodes of findEmojiModifiers(characters)) matches.push({
|
|
22
|
-
kind: "emojiModifier",
|
|
23
|
-
nodes
|
|
24
|
-
});
|
|
25
|
-
for (const nodes of findRegionalIndicatorSymbols(characters)) matches.push({
|
|
26
|
-
kind: "regionalIndicatorSymbol",
|
|
27
|
-
nodes
|
|
28
|
-
});
|
|
29
|
-
for (const nodes of findZeroWidthJoins(characters)) matches.push({
|
|
30
|
-
kind: "zwj",
|
|
31
|
-
nodes
|
|
32
|
-
});
|
|
33
|
-
return matches;
|
|
34
|
-
}
|
|
35
|
-
function* findCombiningClass(characters) {
|
|
36
|
-
for (const [index, char] of characters.entries()) {
|
|
37
|
-
const previous = characters[index - 1];
|
|
38
|
-
if (previous && isCombiningCharacter(char.value) && !isCombiningCharacter(previous.value)) yield [previous, char];
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
function* findEmojiModifiers(characters) {
|
|
42
|
-
for (const [index, char] of characters.entries()) {
|
|
43
|
-
const previous = characters[index - 1];
|
|
44
|
-
if (previous && isEmojiModifier(char.value) && !isEmojiModifier(previous.value)) yield [previous, char];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
function* findRegionalIndicatorSymbols(characters) {
|
|
48
|
-
for (const [index, char] of characters.entries()) {
|
|
49
|
-
const previous = characters[index - 1];
|
|
50
|
-
if (previous && isRegionalIndicatorSymbol(char.value) && isRegionalIndicatorSymbol(previous.value)) yield [previous, char];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
function* findSurrogatePairs(characters) {
|
|
54
|
-
for (const [index, char] of characters.entries()) {
|
|
55
|
-
const previous = characters[index - 1];
|
|
56
|
-
if (previous && isSurrogatePair(previous.value, char.value) && (isUnicodeCodePointEscape(previous) || isUnicodeCodePointEscape(char))) yield [previous, char];
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function* findSurrogatePairsWithoutUFlag(characters) {
|
|
60
|
-
for (const [index, char] of characters.entries()) {
|
|
61
|
-
const previous = characters[index - 1];
|
|
62
|
-
if (previous && isSurrogatePair(previous.value, char.value) && !isUnicodeCodePointEscape(previous) && !isUnicodeCodePointEscape(char)) yield [previous, char];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
function* findZeroWidthJoins(characters) {
|
|
66
|
-
let sequence;
|
|
67
|
-
for (const [index, char] of characters.entries()) {
|
|
68
|
-
const previous = characters[index - 1];
|
|
69
|
-
const next = characters[index + 1];
|
|
70
|
-
if (previous && next && char.value === 8205 && previous.value !== 8205 && next.value !== 8205) if (sequence) if (sequence.at(-1) === previous) sequence.push(char, next);
|
|
71
|
-
else {
|
|
72
|
-
yield sequence;
|
|
73
|
-
sequence = characters.slice(index - 1, index + 2);
|
|
74
|
-
}
|
|
75
|
-
else sequence = characters.slice(index - 1, index + 2);
|
|
76
|
-
}
|
|
77
|
-
if (sequence) yield sequence;
|
|
78
|
-
}
|
|
79
|
-
function getMessageId(kind) {
|
|
80
|
-
switch (kind) {
|
|
81
|
-
case "combiningClass": return "combiningClass";
|
|
82
|
-
case "emojiModifier": return "emojiModifier";
|
|
83
|
-
case "regionalIndicatorSymbol": return "regionalIndicatorSymbol";
|
|
84
|
-
case "surrogatePair": return "surrogatePair";
|
|
85
|
-
case "surrogatePairWithoutUFlag": return "surrogatePairWithoutUFlag";
|
|
86
|
-
case "zwj": return "zwj";
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function isCombiningCharacter(codePoint) {
|
|
90
|
-
return /^[\p{Mc}\p{Me}\p{Mn}]$/u.test(String.fromCodePoint(codePoint));
|
|
91
|
-
}
|
|
92
|
-
function isEmojiModifier(code) {
|
|
93
|
-
return code >= 127995 && code <= 127999;
|
|
94
|
-
}
|
|
95
|
-
function isRegionalIndicatorSymbol(code) {
|
|
96
|
-
return code >= 127462 && code <= 127487;
|
|
97
|
-
}
|
|
98
|
-
function isSurrogatePair(lead, tail) {
|
|
99
|
-
return lead >= 55296 && lead < 56320 && tail >= 56320 && tail < 57344;
|
|
100
|
-
}
|
|
101
|
-
function isUnicodeCodePointEscape(char) {
|
|
102
|
-
return /^\\u\{[\da-f]+\}$/iu.test(char.raw);
|
|
103
|
-
}
|
|
104
|
-
function* iterateCharacterSequence(nodes) {
|
|
105
|
-
let sequence = [];
|
|
106
|
-
for (const node of nodes) switch (node.type) {
|
|
107
|
-
case "Character":
|
|
108
|
-
sequence.push(node);
|
|
109
|
-
break;
|
|
110
|
-
case "CharacterClass":
|
|
111
|
-
case "CharacterSet":
|
|
112
|
-
case "ClassStringDisjunction":
|
|
113
|
-
case "ExpressionCharacterClass":
|
|
114
|
-
if (sequence.length) {
|
|
115
|
-
yield sequence;
|
|
116
|
-
sequence = [];
|
|
117
|
-
}
|
|
118
|
-
break;
|
|
119
|
-
case "CharacterClassRange":
|
|
120
|
-
sequence.push(node.min);
|
|
121
|
-
yield sequence;
|
|
122
|
-
sequence = [node.max];
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
if (sequence.length) yield sequence;
|
|
126
|
-
}
|
|
127
|
-
var regexMisleadingUnicodeCharacters_default = ruleCreator.createRule(typescriptLanguage, {
|
|
128
|
-
about: {
|
|
129
|
-
description: "Reports characters in regex character classes that appear as single visual characters but are made of multiple code points.",
|
|
130
|
-
id: "regexMisleadingUnicodeCharacters",
|
|
131
|
-
presets: ["logical", "logicalStrict"]
|
|
132
|
-
},
|
|
133
|
-
messages: {
|
|
134
|
-
combiningClass: {
|
|
135
|
-
primary: "Misleading combined character in character class.",
|
|
136
|
-
secondary: ["The base character and combining mark are matched separately, not as a single unit."],
|
|
137
|
-
suggestions: ["Match the composed character outside of a character class.", "Use Unicode normalization for the regular expression."]
|
|
138
|
-
},
|
|
139
|
-
emojiModifier: {
|
|
140
|
-
primary: "Misleading emoji with skin tone modifier in character class.",
|
|
141
|
-
secondary: ["The emoji and its modifier are matched separately, not as a single unit."],
|
|
142
|
-
suggestions: ["Match the emoji sequence outside of a character class."]
|
|
143
|
-
},
|
|
144
|
-
regionalIndicatorSymbol: {
|
|
145
|
-
primary: "Misleading regional indicator symbols (flag) in character class.",
|
|
146
|
-
secondary: ["The two regional indicator symbols are matched separately, not as a single flag."],
|
|
147
|
-
suggestions: ["Match the flag sequence outside of a character class."]
|
|
148
|
-
},
|
|
149
|
-
surrogatePair: {
|
|
150
|
-
primary: "Misleading surrogate pair in character class.",
|
|
151
|
-
secondary: ["The surrogate code points are represented with different escape types."],
|
|
152
|
-
suggestions: ["Use consistent escape sequences for both halves of the pair."]
|
|
153
|
-
},
|
|
154
|
-
surrogatePairWithoutUFlag: {
|
|
155
|
-
primary: "Misleading surrogate pair in character class without the `u` or `v` flag.",
|
|
156
|
-
secondary: ["Without the unicode flag, each half of the surrogate pair is matched separately."],
|
|
157
|
-
suggestions: ["Add the `u` flag to the regex."]
|
|
158
|
-
},
|
|
159
|
-
zwj: {
|
|
160
|
-
primary: "Misleading zero-width joiner sequence in character class.",
|
|
161
|
-
secondary: ["Characters joined with ZWJ are matched separately, not as a single unit.", "Consider matching the sequence outside of a character class."],
|
|
162
|
-
suggestions: ["Match the ZWJ sequence outside of a character class."]
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
setup(context) {
|
|
166
|
-
return { visitors: { RegularExpressionLiteral: (node, services) => {
|
|
167
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
168
|
-
const regexpAst = parseRegexpAst(details.pattern, details.flags);
|
|
169
|
-
if (!regexpAst) return;
|
|
170
|
-
const hasUnicodeFlag = details.flags.includes("u") || details.flags.includes("v");
|
|
171
|
-
const range = getTSNodeRange(node, services.sourceFile);
|
|
172
|
-
visitRegExpAST(regexpAst, { onCharacterClassEnter(characterClassNode) {
|
|
173
|
-
for (const characters of iterateCharacterSequence(characterClassNode.elements)) {
|
|
174
|
-
const matches = findAllMatches(characters, hasUnicodeFlag);
|
|
175
|
-
for (const { kind, nodes: characters } of matches) {
|
|
176
|
-
const first = characters[0];
|
|
177
|
-
const last = characters.at(-1);
|
|
178
|
-
const messageId = getMessageId(kind);
|
|
179
|
-
context.report({
|
|
180
|
-
message: messageId,
|
|
181
|
-
range: {
|
|
182
|
-
begin: range.begin + 1 + first.start,
|
|
183
|
-
end: range.begin + 1 + last.end
|
|
184
|
-
},
|
|
185
|
-
...kind === "surrogatePairWithoutUFlag" && { suggestions: [{
|
|
186
|
-
id: "addUnicodeFlag",
|
|
187
|
-
range: {
|
|
188
|
-
begin: range.end,
|
|
189
|
-
end: range.end
|
|
190
|
-
},
|
|
191
|
-
text: "u"
|
|
192
|
-
}] }
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
} });
|
|
197
|
-
} } };
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
//#endregion
|
|
201
|
-
export { regexMisleadingUnicodeCharacters_default as default };
|
|
202
|
-
|
|
203
|
-
//# sourceMappingURL=regexMisleadingUnicodeCharacters.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports backreferences that do not use the name of their referenced capturing group.";
|
|
3
|
-
readonly id: "regexNamedBackreferences";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferNamed", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexNamedBackreferences.d.ts.map
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getRegExpLiteralDetails } from "./utils/getRegExpLiteralDetails.js";
|
|
4
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
//#region src/rules/regexNamedBackreferences.ts
|
|
7
|
-
var regexNamedBackreferences_default = ruleCreator.createRule(typescriptLanguage, {
|
|
8
|
-
about: {
|
|
9
|
-
description: "Reports backreferences that do not use the name of their referenced capturing group.",
|
|
10
|
-
id: "regexNamedBackreferences",
|
|
11
|
-
presets: ["stylisticStrict"]
|
|
12
|
-
},
|
|
13
|
-
messages: { preferNamed: {
|
|
14
|
-
primary: "Prefer named backreference `\\k<{{ name }}>` over numeric backreference `{{ found }}`.",
|
|
15
|
-
secondary: ["Named backreferences are more readable and maintainable than numeric ones.", "If the capturing group has a name, the backreference should use that name."],
|
|
16
|
-
suggestions: ["Replace `{{ found }}` with `\\k<{{ name }}>`"]
|
|
17
|
-
} },
|
|
18
|
-
setup(context) {
|
|
19
|
-
return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
|
|
20
|
-
const details = getRegExpLiteralDetails(node, { sourceFile });
|
|
21
|
-
const regexpAst = parseRegexpAst(details.pattern, details.flags);
|
|
22
|
-
if (!regexpAst) return;
|
|
23
|
-
visitRegExpAST(regexpAst, { onBackreferenceEnter(backNode) {
|
|
24
|
-
if (Array.isArray(backNode.resolved) || !backNode.resolved.name || backNode.raw.startsWith("\\k<")) return;
|
|
25
|
-
const range = {
|
|
26
|
-
begin: details.start + backNode.start,
|
|
27
|
-
end: details.start + backNode.end
|
|
28
|
-
};
|
|
29
|
-
context.report({
|
|
30
|
-
data: {
|
|
31
|
-
found: backNode.raw,
|
|
32
|
-
name: backNode.resolved.name
|
|
33
|
-
},
|
|
34
|
-
fix: {
|
|
35
|
-
range,
|
|
36
|
-
text: `\\k<${backNode.resolved.name}>`
|
|
37
|
-
},
|
|
38
|
-
message: "preferNamed",
|
|
39
|
-
range
|
|
40
|
-
});
|
|
41
|
-
} });
|
|
42
|
-
} } };
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
//#endregion
|
|
46
|
-
export { regexNamedBackreferences_default as default };
|
|
47
|
-
|
|
48
|
-
//# sourceMappingURL=regexNamedBackreferences.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports capturing groups in regular expressions that do not have a name.";
|
|
3
|
-
readonly id: "regexNamedCaptureGroups";
|
|
4
|
-
} & {
|
|
5
|
-
readonly pluginId: string;
|
|
6
|
-
readonly url: string;
|
|
7
|
-
}, "preferNamed", undefined>;
|
|
8
|
-
export default _default;
|
|
9
|
-
//# sourceMappingURL=regexNamedCaptureGroups.d.ts.map
|
|
@@ -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/regexNamedCaptureGroups.ts
|
|
8
|
-
var regexNamedCaptureGroups_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports capturing groups in regular expressions that do not have a name.",
|
|
11
|
-
id: "regexNamedCaptureGroups"
|
|
12
|
-
},
|
|
13
|
-
messages: { preferNamed: {
|
|
14
|
-
primary: "Anonymous capture group `{{ group }}` should be converted to a named or non-capturing group for clarity.",
|
|
15
|
-
secondary: ["Named capture groups make regex patterns more readable and maintainable.", "If the capture is not needed, use a non-capturing group `(?:...)` instead."],
|
|
16
|
-
suggestions: ["Add a name to the capture group.", "Convert to a non-capturing group."]
|
|
17
|
-
} },
|
|
18
|
-
setup(context) {
|
|
19
|
-
function checkPattern(pattern, flags, start) {
|
|
20
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
21
|
-
if (!regexpAst) return;
|
|
22
|
-
visitRegExpAST(regexpAst, { onCapturingGroupEnter(groupNode) {
|
|
23
|
-
if (groupNode.name) return;
|
|
24
|
-
const suggestionRange = {
|
|
25
|
-
begin: start + 1 + groupNode.start + 1,
|
|
26
|
-
end: start + 1 + groupNode.start + 1
|
|
27
|
-
};
|
|
28
|
-
context.report({
|
|
29
|
-
data: { group: groupNode.raw },
|
|
30
|
-
message: "preferNamed",
|
|
31
|
-
range: {
|
|
32
|
-
begin: start + 1 + groupNode.start,
|
|
33
|
-
end: start + 1 + groupNode.end
|
|
34
|
-
},
|
|
35
|
-
suggestions: [{
|
|
36
|
-
id: "addGroupName",
|
|
37
|
-
range: suggestionRange,
|
|
38
|
-
text: "?<name>"
|
|
39
|
-
}, {
|
|
40
|
-
id: "convertToNonCapturing",
|
|
41
|
-
range: suggestionRange,
|
|
42
|
-
text: "?:"
|
|
43
|
-
}]
|
|
44
|
-
});
|
|
45
|
-
} });
|
|
46
|
-
}
|
|
47
|
-
function checkRegexLiteral(node, services) {
|
|
48
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
49
|
-
const range = getTSNodeRange(node, services.sourceFile);
|
|
50
|
-
checkPattern(details.pattern, details.flags, range.begin);
|
|
51
|
-
}
|
|
52
|
-
function checkRegExpConstructor(node, services) {
|
|
53
|
-
const construction = getRegExpConstruction(node, services);
|
|
54
|
-
if (!construction) return;
|
|
55
|
-
checkPattern(construction.raw, construction.flags, construction.start);
|
|
56
|
-
}
|
|
57
|
-
return { visitors: {
|
|
58
|
-
CallExpression: checkRegExpConstructor,
|
|
59
|
-
NewExpression: checkRegExpConstructor,
|
|
60
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
61
|
-
} };
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
//#endregion
|
|
65
|
-
export { regexNamedCaptureGroups_default as default };
|
|
66
|
-
|
|
67
|
-
//# sourceMappingURL=regexNamedCaptureGroups.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports indexed references in replacement strings that should use named references.";
|
|
3
|
-
readonly id: "regexNamedReplacements";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferNamed", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexNamedReplacements.d.ts.map
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import ts from "typescript";
|
|
6
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
7
|
-
//#region src/rules/regexNamedReplacements.ts
|
|
8
|
-
function getCapturingGroups(regexpAst) {
|
|
9
|
-
const groups = [];
|
|
10
|
-
visitRegExpAST(regexpAst, { onCapturingGroupEnter(groupNode) {
|
|
11
|
-
groups.push(groupNode);
|
|
12
|
-
} });
|
|
13
|
-
return groups;
|
|
14
|
-
}
|
|
15
|
-
function getRegexPatternAndFlags(node) {
|
|
16
|
-
if (node.kind !== ts.SyntaxKind.RegularExpressionLiteral) return;
|
|
17
|
-
const match = /^\/(.+)\/([dgimsuyv]*)$/.exec(node.text);
|
|
18
|
-
if (!match) return;
|
|
19
|
-
return {
|
|
20
|
-
flags: match[2],
|
|
21
|
-
pattern: match[1]
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function parseReplacementReferences(replacementText) {
|
|
25
|
-
const references = [];
|
|
26
|
-
const pattern = /\$(\d+)/g;
|
|
27
|
-
let match;
|
|
28
|
-
while (match = pattern.exec(replacementText)) {
|
|
29
|
-
const index = parseInt(match[1], 10);
|
|
30
|
-
if (index > 0) references.push({
|
|
31
|
-
end: match.index + match[0].length,
|
|
32
|
-
index,
|
|
33
|
-
raw: match[0],
|
|
34
|
-
start: match.index
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return references;
|
|
38
|
-
}
|
|
39
|
-
var regexNamedReplacements_default = ruleCreator.createRule(typescriptLanguage, {
|
|
40
|
-
about: {
|
|
41
|
-
description: "Reports indexed references in replacement strings that should use named references.",
|
|
42
|
-
id: "regexNamedReplacements",
|
|
43
|
-
presets: ["stylisticStrict"]
|
|
44
|
-
},
|
|
45
|
-
messages: { preferNamed: {
|
|
46
|
-
primary: "Prefer the explicit named replacement `$<{{ name }}>` over the position-specific indexed replacement `{{ found }}`.",
|
|
47
|
-
secondary: ["Named replacements are more readable and maintainable than indexed ones.", "If the capturing group has a name, the replacement should use that name."],
|
|
48
|
-
suggestions: ["Replace `{{ found }}` with `$<{{ name }}>`"]
|
|
49
|
-
} },
|
|
50
|
-
setup(context) {
|
|
51
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
52
|
-
if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "replace" && node.expression.name.text !== "replaceAll" || node.arguments.length < 2 || !(getConstrainedTypeAtLocation(node.expression.expression, typeChecker).flags & ts.TypeFlags.StringLike)) return;
|
|
53
|
-
if (!(getConstrainedTypeAtLocation(node.expression.expression, typeChecker).flags & ts.TypeFlags.StringLike)) return;
|
|
54
|
-
const regexArg = node.arguments[0];
|
|
55
|
-
const replacementArg = node.arguments[1];
|
|
56
|
-
if (!ts.isStringLiteral(replacementArg)) return;
|
|
57
|
-
const regexInfo = getRegexPatternAndFlags(regexArg);
|
|
58
|
-
if (!regexInfo) return;
|
|
59
|
-
const regexpAst = parseRegexpAst(regexInfo.pattern, regexInfo.flags);
|
|
60
|
-
if (!regexpAst) return;
|
|
61
|
-
const capturingGroups = getCapturingGroups(regexpAst);
|
|
62
|
-
if (!capturingGroups.length) return;
|
|
63
|
-
const references = parseReplacementReferences(replacementArg.text);
|
|
64
|
-
const replacementRange = getTSNodeRange(replacementArg, sourceFile);
|
|
65
|
-
for (const reference of references) {
|
|
66
|
-
const group = capturingGroups[reference.index - 1];
|
|
67
|
-
if (!group?.name) continue;
|
|
68
|
-
context.report({
|
|
69
|
-
data: {
|
|
70
|
-
found: reference.raw,
|
|
71
|
-
name: group.name
|
|
72
|
-
},
|
|
73
|
-
fix: {
|
|
74
|
-
range: {
|
|
75
|
-
begin: replacementRange.begin + 1 + reference.start,
|
|
76
|
-
end: replacementRange.begin + 1 + reference.end
|
|
77
|
-
},
|
|
78
|
-
text: `$<${group.name}>`
|
|
79
|
-
},
|
|
80
|
-
message: "preferNamed",
|
|
81
|
-
range: {
|
|
82
|
-
begin: replacementRange.begin + 1 + reference.start,
|
|
83
|
-
end: replacementRange.begin + 1 + reference.end
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
} } };
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
//#endregion
|
|
91
|
-
export { regexNamedReplacements_default as default };
|
|
92
|
-
|
|
93
|
-
//# sourceMappingURL=regexNamedReplacements.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports non-standard regular expression flags.";
|
|
3
|
-
readonly id: "regexNonStandardFlags";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unexpected", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexNonStandardFlags.d.ts.map
|
|
@@ -1,66 +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 * as ts$1 from "typescript";
|
|
6
|
-
//#region src/rules/regexNonStandardFlags.ts
|
|
7
|
-
const standardFlags = new Set([
|
|
8
|
-
"d",
|
|
9
|
-
"g",
|
|
10
|
-
"i",
|
|
11
|
-
"m",
|
|
12
|
-
"s",
|
|
13
|
-
"u",
|
|
14
|
-
"v",
|
|
15
|
-
"y"
|
|
16
|
-
]);
|
|
17
|
-
var regexNonStandardFlags_default = ruleCreator.createRule(typescriptLanguage, {
|
|
18
|
-
about: {
|
|
19
|
-
description: "Reports non-standard regular expression flags.",
|
|
20
|
-
id: "regexNonStandardFlags",
|
|
21
|
-
presets: ["logical", "logicalStrict"]
|
|
22
|
-
},
|
|
23
|
-
messages: { unexpected: {
|
|
24
|
-
primary: "Non-standard flag '{{ flag }}' is not part of the ECMAScript standard.",
|
|
25
|
-
secondary: ["Non-standard flags may not be supported in all JavaScript environments and should be avoided in production code."],
|
|
26
|
-
suggestions: ["Remove the non-standard flag."]
|
|
27
|
-
} },
|
|
28
|
-
setup(context) {
|
|
29
|
-
function checkFlags(flags, flagsStart) {
|
|
30
|
-
for (let i = 0; i < flags.length; i += 1) {
|
|
31
|
-
const flag = flags[i];
|
|
32
|
-
if (!standardFlags.has(flag)) context.report({
|
|
33
|
-
data: { flag },
|
|
34
|
-
message: "unexpected",
|
|
35
|
-
range: {
|
|
36
|
-
begin: flagsStart + i,
|
|
37
|
-
end: flagsStart + i + 1
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function checkRegexLiteral(node, services) {
|
|
43
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
44
|
-
checkFlags(details.flags, details.start + node.text.length - details.flags.length - 1);
|
|
45
|
-
}
|
|
46
|
-
function checkRegExpConstructor(node, services) {
|
|
47
|
-
const construction = getRegExpConstruction(node, services);
|
|
48
|
-
if (!construction) return;
|
|
49
|
-
const args = construction.args;
|
|
50
|
-
if (args.length < 2) return;
|
|
51
|
-
const secondArgument = args[1];
|
|
52
|
-
if (secondArgument.kind !== ts$1.SyntaxKind.StringLiteral) return;
|
|
53
|
-
const flagsStart = secondArgument.getStart(services.sourceFile) + 1;
|
|
54
|
-
checkFlags(construction.flags, flagsStart);
|
|
55
|
-
}
|
|
56
|
-
return { visitors: {
|
|
57
|
-
CallExpression: checkRegExpConstructor,
|
|
58
|
-
NewExpression: checkRegExpConstructor,
|
|
59
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
60
|
-
} };
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
//#endregion
|
|
64
|
-
export { regexNonStandardFlags_default as default };
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=regexNonStandardFlags.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports obscure character ranges in regular expressions.";
|
|
3
|
-
readonly id: "regexObscureRanges";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "obscure", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexObscureRanges.d.ts.map
|