@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,91 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/regexDollarEscapes.ts
|
|
5
|
-
const replacementPattern = /\$(?:[$&'`]|\d{1,2}|<[^>]+>)|\$(?![$&'`\d])|.+?(?=\$|$)/gu;
|
|
6
|
-
function adjustPosition(_unescaped, escaped, unescapedPos) {
|
|
7
|
-
let escapedIndex = 0;
|
|
8
|
-
let unescapedIndex = 0;
|
|
9
|
-
while (unescapedIndex < unescapedPos && escapedIndex < escaped.length) {
|
|
10
|
-
if (escaped[escapedIndex] === "\\") escapedIndex += 2;
|
|
11
|
-
else escapedIndex += 1;
|
|
12
|
-
unescapedIndex += 1;
|
|
13
|
-
}
|
|
14
|
-
return escapedIndex;
|
|
15
|
-
}
|
|
16
|
-
function findUnescapedDollars(replacementString) {
|
|
17
|
-
const issues = [];
|
|
18
|
-
let match;
|
|
19
|
-
replacementPattern.lastIndex = 0;
|
|
20
|
-
while ((match = replacementPattern.exec(replacementString)) !== null) if (match[0] === "$") issues.push({
|
|
21
|
-
end: match.index + 1,
|
|
22
|
-
start: match.index
|
|
23
|
-
});
|
|
24
|
-
return issues;
|
|
25
|
-
}
|
|
26
|
-
function isRegExpArgument(argument, typeChecker) {
|
|
27
|
-
if (argument.kind === ts$1.SyntaxKind.RegularExpressionLiteral) return true;
|
|
28
|
-
if (argument.kind === ts$1.SyntaxKind.NewExpression || argument.kind === ts$1.SyntaxKind.CallExpression) {
|
|
29
|
-
const callOrNew = argument;
|
|
30
|
-
if (callOrNew.expression.kind === ts$1.SyntaxKind.Identifier && callOrNew.expression.text === "RegExp") return true;
|
|
31
|
-
}
|
|
32
|
-
return typeChecker.getTypeAtLocation(argument).getSymbol()?.getName() === "RegExp";
|
|
33
|
-
}
|
|
34
|
-
function isStringType(node, typeChecker) {
|
|
35
|
-
return (typeChecker.getTypeAtLocation(node).flags & ts$1.TypeFlags.StringLike) !== 0;
|
|
36
|
-
}
|
|
37
|
-
var regexDollarEscapes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
38
|
-
about: {
|
|
39
|
-
description: "Reports replacement strings with unescaped `$` that should use `$$`.",
|
|
40
|
-
id: "regexDollarEscapes",
|
|
41
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
42
|
-
},
|
|
43
|
-
messages: { unescapedDollar: {
|
|
44
|
-
primary: "This unescaped `$` is an invalid substitution pattern matcher. Use `$$` to represent a literal `$` in replacement strings.",
|
|
45
|
-
secondary: ["In `String.prototype.replace()` and `String.prototype.replaceAll()`, `$` is a special character used for substitution patterns like `$&`, `$1`, etc.", "To include a literal `$` in the replacement, escape it as `$$`."],
|
|
46
|
-
suggestions: ["Escape the `$` as `$$` if it is meant to be output as a `$`.", "Correct the substitution pattern if it is meant to be used as one."]
|
|
47
|
-
} },
|
|
48
|
-
setup(context) {
|
|
49
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
50
|
-
if (node.expression.kind !== ts$1.SyntaxKind.PropertyAccessExpression) return;
|
|
51
|
-
const propertyAccess = node.expression;
|
|
52
|
-
const methodName = propertyAccess.name.text;
|
|
53
|
-
if (methodName !== "replace" && methodName !== "replaceAll") return;
|
|
54
|
-
const args = node.arguments;
|
|
55
|
-
if (args.length < 2) return;
|
|
56
|
-
const regexpArgument = args[0];
|
|
57
|
-
const stringLiteral = args[1];
|
|
58
|
-
if (!isRegExpArgument(regexpArgument, typeChecker) || !isStringType(propertyAccess.expression, typeChecker) || stringLiteral.kind !== ts$1.SyntaxKind.StringLiteral) return;
|
|
59
|
-
const replacementValue = stringLiteral.text;
|
|
60
|
-
const issues = findUnescapedDollars(replacementValue);
|
|
61
|
-
if (!issues.length) return;
|
|
62
|
-
const stringStart = stringLiteral.getStart(sourceFile);
|
|
63
|
-
const rawText = stringLiteral.getText(sourceFile);
|
|
64
|
-
const quote = rawText[0];
|
|
65
|
-
for (const issue of issues) {
|
|
66
|
-
const adjustedStart = adjustPosition(replacementValue, rawText.slice(1, -1), issue.start);
|
|
67
|
-
const adjustedEnd = adjustPosition(replacementValue, rawText.slice(1, -1), issue.end);
|
|
68
|
-
const reportStart = stringStart + 1 + adjustedStart;
|
|
69
|
-
const reportEnd = stringStart + 1 + adjustedEnd;
|
|
70
|
-
context.report({
|
|
71
|
-
fix: {
|
|
72
|
-
range: {
|
|
73
|
-
begin: reportStart,
|
|
74
|
-
end: reportEnd
|
|
75
|
-
},
|
|
76
|
-
text: quote === "`" ? "\\$\\$" : "$$"
|
|
77
|
-
},
|
|
78
|
-
message: "unescapedDollar",
|
|
79
|
-
range: {
|
|
80
|
-
begin: reportStart,
|
|
81
|
-
end: reportEnd
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
} } };
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
//#endregion
|
|
89
|
-
export { regexDollarEscapes_default as default };
|
|
90
|
-
|
|
91
|
-
//# sourceMappingURL=regexDollarEscapes.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports duplicate characters in regular expression character classes.";
|
|
3
|
-
readonly id: "regexDuplicateCharacterClassCharacters";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "duplicate" | "includedInRange", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexDuplicateCharacterClassCharacters.d.ts.map
|
|
@@ -1,128 +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 { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
//#region src/rules/regexDuplicateCharacterClassCharacters.ts
|
|
7
|
-
function adjustPositionForEscapes(escaped, unescapedPos) {
|
|
8
|
-
let escapedIndex = 0;
|
|
9
|
-
let unescapedIndex = 0;
|
|
10
|
-
while (unescapedIndex < unescapedPos && escapedIndex < escaped.length) {
|
|
11
|
-
if (escaped[escapedIndex] === "\\" && escaped[escapedIndex + 1] === "\\") escapedIndex += 2;
|
|
12
|
-
else escapedIndex += 1;
|
|
13
|
-
unescapedIndex += 1;
|
|
14
|
-
}
|
|
15
|
-
return escapedIndex;
|
|
16
|
-
}
|
|
17
|
-
function findDuplicatesInCharacterClass(characterClass) {
|
|
18
|
-
const issues = [];
|
|
19
|
-
const seenCharacters = /* @__PURE__ */ new Map();
|
|
20
|
-
const seenRanges = [];
|
|
21
|
-
for (const element of characterClass.elements) switch (element.type) {
|
|
22
|
-
case "Character": {
|
|
23
|
-
const existing = seenCharacters.get(element.value);
|
|
24
|
-
if (existing) issues.push({
|
|
25
|
-
duplicate: element,
|
|
26
|
-
end: element.end,
|
|
27
|
-
original: existing,
|
|
28
|
-
start: element.start
|
|
29
|
-
});
|
|
30
|
-
else seenCharacters.set(element.value, element);
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
case "CharacterClassRange": {
|
|
34
|
-
const duplicateRange = seenRanges.find((range) => range.min.value === element.min.value && range.max.value === element.max.value);
|
|
35
|
-
if (duplicateRange) issues.push({
|
|
36
|
-
duplicate: element,
|
|
37
|
-
end: element.end,
|
|
38
|
-
original: duplicateRange,
|
|
39
|
-
start: element.start
|
|
40
|
-
});
|
|
41
|
-
else seenRanges.push(element);
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
for (const [value, element] of seenCharacters) for (const range of seenRanges) if (value >= range.min.value && value <= range.max.value) {
|
|
46
|
-
if (!issues.some((issue) => issue.duplicate === element)) issues.push({
|
|
47
|
-
duplicate: element,
|
|
48
|
-
end: element.end,
|
|
49
|
-
original: range,
|
|
50
|
-
start: element.start
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
return issues;
|
|
54
|
-
}
|
|
55
|
-
function findIssues(pattern, flags) {
|
|
56
|
-
const issues = [];
|
|
57
|
-
let ast;
|
|
58
|
-
try {
|
|
59
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
60
|
-
} catch {
|
|
61
|
-
return issues;
|
|
62
|
-
}
|
|
63
|
-
visitRegExpAST(ast, { onCharacterClassEnter(ccNode) {
|
|
64
|
-
const duplicates = findDuplicatesInCharacterClass(ccNode);
|
|
65
|
-
issues.push(...duplicates);
|
|
66
|
-
} });
|
|
67
|
-
return issues;
|
|
68
|
-
}
|
|
69
|
-
var regexDuplicateCharacterClassCharacters_default = ruleCreator.createRule(typescriptLanguage, {
|
|
70
|
-
about: {
|
|
71
|
-
description: "Reports duplicate characters in regular expression character classes.",
|
|
72
|
-
id: "regexDuplicateCharacterClassCharacters",
|
|
73
|
-
presets: ["logical", "logicalStrict"]
|
|
74
|
-
},
|
|
75
|
-
messages: {
|
|
76
|
-
duplicate: {
|
|
77
|
-
primary: "Duplicate character '{{ character }}' in character class.",
|
|
78
|
-
secondary: ["This character appears multiple times in the character class and only one occurrence is needed."],
|
|
79
|
-
suggestions: ["Remove the duplicate character."]
|
|
80
|
-
},
|
|
81
|
-
includedInRange: {
|
|
82
|
-
primary: "Character '{{ character }}' is already included in range '{{ range }}'.",
|
|
83
|
-
secondary: ["This character is redundant because it falls within the specified range."],
|
|
84
|
-
suggestions: ["Remove the redundant character."]
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
setup(context) {
|
|
88
|
-
function checkPattern(flags, pattern, start) {
|
|
89
|
-
const issues = findIssues(pattern, flags);
|
|
90
|
-
for (const issue of issues) {
|
|
91
|
-
const isCharacterInRange = issue.duplicate.type === "Character" && issue.original.type === "CharacterClassRange";
|
|
92
|
-
const adjustedStart = adjustPositionForEscapes(pattern, issue.start - 1);
|
|
93
|
-
const adjustedEnd = adjustPositionForEscapes(pattern, issue.end - 1);
|
|
94
|
-
const [message, range] = isCharacterInRange ? ["includedInRange", issue.original.raw] : ["duplicate", ""];
|
|
95
|
-
context.report({
|
|
96
|
-
data: {
|
|
97
|
-
character: issue.duplicate.raw,
|
|
98
|
-
range
|
|
99
|
-
},
|
|
100
|
-
message,
|
|
101
|
-
range: {
|
|
102
|
-
begin: start + 1 + adjustedStart,
|
|
103
|
-
end: start + 1 + adjustedEnd
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function checkRegExpConstructor(node, services) {
|
|
109
|
-
const construction = getRegExpConstruction(node, services);
|
|
110
|
-
if (!construction) return;
|
|
111
|
-
const patternUnescaped = construction.pattern.replace(/\\\\/g, "\\");
|
|
112
|
-
checkPattern(construction.flags, patternUnescaped, construction.start);
|
|
113
|
-
}
|
|
114
|
-
function checkRegexLiteral(node, services) {
|
|
115
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
116
|
-
checkPattern(details.flags, details.pattern, details.start - 1);
|
|
117
|
-
}
|
|
118
|
-
return { visitors: {
|
|
119
|
-
CallExpression: checkRegExpConstructor,
|
|
120
|
-
NewExpression: checkRegExpConstructor,
|
|
121
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
122
|
-
} };
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
//#endregion
|
|
126
|
-
export { regexDuplicateCharacterClassCharacters_default as default };
|
|
127
|
-
|
|
128
|
-
//# sourceMappingURL=regexDuplicateCharacterClassCharacters.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports empty alternatives in regular expressions that may indicate a mistake.";
|
|
3
|
-
readonly id: "regexEmptyAlternatives";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyAlternative", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyAlternatives.d.ts.map
|
|
@@ -1,140 +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
|
-
//#region src/rules/regexEmptyAlternatives.ts
|
|
6
|
-
function findEmptyAlternativesInGroup(pattern, groupStart, groupEnd, results) {
|
|
7
|
-
let contentStart = groupStart;
|
|
8
|
-
if ([
|
|
9
|
-
"?!",
|
|
10
|
-
"?:",
|
|
11
|
-
"?="
|
|
12
|
-
].includes(pattern.slice(groupStart, groupStart + 2)) || ["?<!", "?<="].includes(pattern.slice(groupStart, groupStart + 3))) if (pattern.slice(groupStart, groupStart + 3).startsWith("?<")) contentStart = groupStart + 3;
|
|
13
|
-
else contentStart = groupStart + 2;
|
|
14
|
-
else if (pattern[groupStart] === "?" && pattern[groupStart + 1] === "<") {
|
|
15
|
-
const closeAngle = pattern.indexOf(">", groupStart + 2);
|
|
16
|
-
if (closeAngle !== -1 && closeAngle < groupEnd) contentStart = closeAngle + 1;
|
|
17
|
-
}
|
|
18
|
-
const pipePositions = [];
|
|
19
|
-
for (let i = contentStart; i < groupEnd; i++) switch (pattern[i]) {
|
|
20
|
-
case "(": {
|
|
21
|
-
const parenthesisEnd = findMatchingParenthesis(pattern, i);
|
|
22
|
-
if (parenthesisEnd !== -1) {
|
|
23
|
-
findEmptyAlternativesInGroup(pattern, i + 1, parenthesisEnd, results);
|
|
24
|
-
i = parenthesisEnd;
|
|
25
|
-
}
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
case "\\":
|
|
29
|
-
i++;
|
|
30
|
-
break;
|
|
31
|
-
case "|":
|
|
32
|
-
pipePositions.push(i);
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
if (!pipePositions.length) return;
|
|
36
|
-
const alternativeBoundaries = [];
|
|
37
|
-
let currentStart = contentStart;
|
|
38
|
-
for (const pipePos of pipePositions) {
|
|
39
|
-
alternativeBoundaries.push({
|
|
40
|
-
end: pipePos,
|
|
41
|
-
start: currentStart
|
|
42
|
-
});
|
|
43
|
-
currentStart = pipePos + 1;
|
|
44
|
-
}
|
|
45
|
-
alternativeBoundaries.push({
|
|
46
|
-
end: groupEnd,
|
|
47
|
-
start: currentStart
|
|
48
|
-
});
|
|
49
|
-
for (let i = 0; i < alternativeBoundaries.length; i++) {
|
|
50
|
-
const boundary = alternativeBoundaries[i];
|
|
51
|
-
if (!boundary) continue;
|
|
52
|
-
const { end, start } = boundary;
|
|
53
|
-
if (isAlternativeEmpty(pattern, start, end)) {
|
|
54
|
-
const isLast = i === alternativeBoundaries.length - 1;
|
|
55
|
-
const lastPipePosition = pipePositions.at(-1);
|
|
56
|
-
if (isLast && lastPipePosition === void 0) continue;
|
|
57
|
-
results.push(isLast ? lastPipePosition : start);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function findEmptyAlternativeStarts(pattern) {
|
|
62
|
-
const emptyAlternativeStarts = [];
|
|
63
|
-
findEmptyAlternativesInGroup(pattern, 0, pattern.length, emptyAlternativeStarts);
|
|
64
|
-
return emptyAlternativeStarts;
|
|
65
|
-
}
|
|
66
|
-
function findMatchingParenthesis(pattern, openIndex) {
|
|
67
|
-
let depth = 1;
|
|
68
|
-
let charClassDepth = 0;
|
|
69
|
-
for (let i = openIndex + 1; i < pattern.length; i++) {
|
|
70
|
-
const char = pattern[i];
|
|
71
|
-
if (char === "\\") {
|
|
72
|
-
i++;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (charClassDepth > 0) {
|
|
76
|
-
if (char === "]") charClassDepth--;
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
if (char === "[") {
|
|
80
|
-
charClassDepth++;
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
if (char === "(") depth++;
|
|
84
|
-
else if (char === ")") {
|
|
85
|
-
depth--;
|
|
86
|
-
if (depth === 0) return i;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return -1;
|
|
90
|
-
}
|
|
91
|
-
function isAlternativeEmpty(pattern, start, end) {
|
|
92
|
-
for (let i = start; i < end; i++) if (pattern[i].trim() !== "") return false;
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
var regexEmptyAlternatives_default = ruleCreator.createRule(typescriptLanguage, {
|
|
96
|
-
about: {
|
|
97
|
-
description: "Reports empty alternatives in regular expressions that may indicate a mistake.",
|
|
98
|
-
id: "regexEmptyAlternatives",
|
|
99
|
-
presets: ["logical", "logicalStrict"]
|
|
100
|
-
},
|
|
101
|
-
messages: { emptyAlternative: {
|
|
102
|
-
primary: "Empty alternative in regular expression may be a mistake.",
|
|
103
|
-
secondary: ["Empty alternatives match zero characters and are often unintentional.", "If intentional, consider using a quantifier like `?` instead."],
|
|
104
|
-
suggestions: ["Remove the empty alternative or use a quantifier."]
|
|
105
|
-
} },
|
|
106
|
-
setup(context) {
|
|
107
|
-
function checkRegexLiteral(node, services) {
|
|
108
|
-
const { pattern, start } = getRegExpLiteralDetails(node, services);
|
|
109
|
-
const emptyAlternativeStarts = findEmptyAlternativeStarts(pattern);
|
|
110
|
-
for (const alternativeStart of emptyAlternativeStarts) context.report({
|
|
111
|
-
message: "emptyAlternative",
|
|
112
|
-
range: {
|
|
113
|
-
begin: start + alternativeStart,
|
|
114
|
-
end: start + alternativeStart + 1
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
function checkRegExpConstructor(node, services) {
|
|
119
|
-
const construction = getRegExpConstruction(node, services);
|
|
120
|
-
if (!construction) return;
|
|
121
|
-
const emptyAlternativeStarts = findEmptyAlternativeStarts(construction.pattern);
|
|
122
|
-
for (const alternativeStart of emptyAlternativeStarts) context.report({
|
|
123
|
-
message: "emptyAlternative",
|
|
124
|
-
range: {
|
|
125
|
-
begin: construction.start + 1 + alternativeStart,
|
|
126
|
-
end: construction.start + 1 + alternativeStart + 1
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
return { visitors: {
|
|
131
|
-
CallExpression: checkRegExpConstructor,
|
|
132
|
-
NewExpression: checkRegExpConstructor,
|
|
133
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
134
|
-
} };
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
//#endregion
|
|
138
|
-
export { regexEmptyAlternatives_default as default };
|
|
139
|
-
|
|
140
|
-
//# sourceMappingURL=regexEmptyAlternatives.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports capturing groups that only capture empty strings.";
|
|
3
|
-
readonly id: "regexEmptyCapturingGroups";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyCapture", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyCapturingGroups.d.ts.map
|
|
@@ -1,67 +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 { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
import { isZeroLength } from "regexp-ast-analysis";
|
|
7
|
-
//#region src/rules/regexEmptyCapturingGroups.ts
|
|
8
|
-
function findEmptyCapturingGroups(pattern, flags) {
|
|
9
|
-
const results = [];
|
|
10
|
-
let ast;
|
|
11
|
-
try {
|
|
12
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
13
|
-
} catch {
|
|
14
|
-
return results;
|
|
15
|
-
}
|
|
16
|
-
visitRegExpAST(ast, { onCapturingGroupEnter(node) {
|
|
17
|
-
if (node.name) return;
|
|
18
|
-
if (isZeroLength(node, ast.flags)) results.push(node);
|
|
19
|
-
} });
|
|
20
|
-
return results;
|
|
21
|
-
}
|
|
22
|
-
var regexEmptyCapturingGroups_default = ruleCreator.createRule(typescriptLanguage, {
|
|
23
|
-
about: {
|
|
24
|
-
description: "Reports capturing groups that only capture empty strings.",
|
|
25
|
-
id: "regexEmptyCapturingGroups",
|
|
26
|
-
presets: ["logical", "logicalStrict"]
|
|
27
|
-
},
|
|
28
|
-
messages: { emptyCapture: {
|
|
29
|
-
primary: "This capturing group captures only empty strings.",
|
|
30
|
-
secondary: ["This capturing group will only ever match zero-length text.", "It may indicate a mistake in the pattern."],
|
|
31
|
-
suggestions: ["Add content to the capturing group.", "Convert the capturing group to a non-capturing group."]
|
|
32
|
-
} },
|
|
33
|
-
setup(context) {
|
|
34
|
-
function checkRegexLiteral(node, services) {
|
|
35
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
36
|
-
const emptyGroups = findEmptyCapturingGroups(pattern, flags);
|
|
37
|
-
for (const group of emptyGroups) context.report({
|
|
38
|
-
message: "emptyCapture",
|
|
39
|
-
range: {
|
|
40
|
-
begin: start + group.start - 1,
|
|
41
|
-
end: start + group.end - 1
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
function checkRegExpConstructor(node, services) {
|
|
46
|
-
const construction = getRegExpConstruction(node, services);
|
|
47
|
-
if (!construction) return;
|
|
48
|
-
const emptyGroups = findEmptyCapturingGroups(construction.pattern.replace(/\\\\/g, "\\"), construction.flags);
|
|
49
|
-
for (const group of emptyGroups) context.report({
|
|
50
|
-
message: "emptyCapture",
|
|
51
|
-
range: {
|
|
52
|
-
begin: construction.start + group.start,
|
|
53
|
-
end: construction.start + group.end
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return { visitors: {
|
|
58
|
-
CallExpression: checkRegExpConstructor,
|
|
59
|
-
NewExpression: checkRegExpConstructor,
|
|
60
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
61
|
-
} };
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
//#endregion
|
|
65
|
-
export { regexEmptyCapturingGroups_default as default };
|
|
66
|
-
|
|
67
|
-
//# sourceMappingURL=regexEmptyCapturingGroups.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports character classes that match no characters.";
|
|
3
|
-
readonly id: "regexEmptyCharacterClasses";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "empty", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyCharacterClasses.d.ts.map
|
|
@@ -1,68 +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 { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
//#region src/rules/regexEmptyCharacterClasses.ts
|
|
7
|
-
function characterClassIsEmpty(node) {
|
|
8
|
-
return !node.negate && !node.elements.length;
|
|
9
|
-
}
|
|
10
|
-
function findEmptyCharacterClasses(pattern, flags) {
|
|
11
|
-
const results = [];
|
|
12
|
-
let ast;
|
|
13
|
-
try {
|
|
14
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
15
|
-
} catch {
|
|
16
|
-
return results;
|
|
17
|
-
}
|
|
18
|
-
visitRegExpAST(ast, { onCharacterClassEnter(node) {
|
|
19
|
-
if (characterClassIsEmpty(node)) results.push(node);
|
|
20
|
-
} });
|
|
21
|
-
return results;
|
|
22
|
-
}
|
|
23
|
-
var regexEmptyCharacterClasses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
24
|
-
about: {
|
|
25
|
-
description: "Reports character classes that match no characters.",
|
|
26
|
-
id: "regexEmptyCharacterClasses",
|
|
27
|
-
presets: ["logical", "logicalStrict"]
|
|
28
|
-
},
|
|
29
|
-
messages: { empty: {
|
|
30
|
-
primary: "This character class matches no characters because it is empty.",
|
|
31
|
-
secondary: ["An empty character class `[]` never matches anything.", "This often indicates a mistake in the regular expression."],
|
|
32
|
-
suggestions: ["Add characters to the class if it's meant to capture any.", "Remove the class if it is unintended."]
|
|
33
|
-
} },
|
|
34
|
-
setup(context) {
|
|
35
|
-
function checkRegexLiteral(node, services) {
|
|
36
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
37
|
-
const emptyClasses = findEmptyCharacterClasses(pattern, flags);
|
|
38
|
-
for (const charClass of emptyClasses) context.report({
|
|
39
|
-
message: "empty",
|
|
40
|
-
range: {
|
|
41
|
-
begin: start + charClass.start - 1,
|
|
42
|
-
end: start + charClass.end - 1
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function checkRegExpConstructor(node, services) {
|
|
47
|
-
const construction = getRegExpConstruction(node, services);
|
|
48
|
-
if (!construction) return;
|
|
49
|
-
const emptyClasses = findEmptyCharacterClasses(construction.pattern.replace(/\\\\/g, "\\"), construction.flags);
|
|
50
|
-
for (const charClass of emptyClasses) context.report({
|
|
51
|
-
message: "empty",
|
|
52
|
-
range: {
|
|
53
|
-
begin: construction.start + charClass.start,
|
|
54
|
-
end: construction.start + charClass.end
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
return { visitors: {
|
|
59
|
-
CallExpression: checkRegExpConstructor,
|
|
60
|
-
NewExpression: checkRegExpConstructor,
|
|
61
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
62
|
-
} };
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
//#endregion
|
|
66
|
-
export { regexEmptyCharacterClasses_default as default };
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=regexEmptyCharacterClasses.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports empty groups in regular expressions.";
|
|
3
|
-
readonly id: "regexEmptyGroups";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyGroup", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyGroups.d.ts.map
|
|
@@ -1,66 +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/regexEmptyGroups.ts
|
|
8
|
-
function isEmptyGroup(group) {
|
|
9
|
-
return group.alternatives.every((alternative) => !alternative.elements.length);
|
|
10
|
-
}
|
|
11
|
-
var regexEmptyGroups_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports empty groups in regular expressions.",
|
|
14
|
-
id: "regexEmptyGroups",
|
|
15
|
-
presets: ["logical", "logicalStrict"]
|
|
16
|
-
},
|
|
17
|
-
messages: { emptyGroup: {
|
|
18
|
-
primary: "Empty {{ kind }} `{{ raw }}` matches nothing.",
|
|
19
|
-
secondary: ["Empty groups match the empty string and have no effect on the regex."],
|
|
20
|
-
suggestions: ["Remove the empty group.", "Replace the empty group with a non-capturing group."]
|
|
21
|
-
} },
|
|
22
|
-
setup(context) {
|
|
23
|
-
function reportEmptyGroup(group, kind, start) {
|
|
24
|
-
if (isEmptyGroup(group)) context.report({
|
|
25
|
-
data: {
|
|
26
|
-
kind,
|
|
27
|
-
raw: group.raw
|
|
28
|
-
},
|
|
29
|
-
message: "emptyGroup",
|
|
30
|
-
range: {
|
|
31
|
-
begin: start + group.start,
|
|
32
|
-
end: start + group.end
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
37
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
38
|
-
if (!regexpAst) return;
|
|
39
|
-
visitRegExpAST(regexpAst, {
|
|
40
|
-
onCapturingGroupEnter(group) {
|
|
41
|
-
reportEmptyGroup(group, "capturing group", patternStart);
|
|
42
|
-
},
|
|
43
|
-
onGroupEnter(group) {
|
|
44
|
-
reportEmptyGroup(group, "non-capturing group", patternStart);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
function checkRegexLiteral(node, services) {
|
|
49
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
50
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
51
|
-
}
|
|
52
|
-
function checkRegExpConstructor(node, services) {
|
|
53
|
-
const construction = getRegExpConstruction(node, services);
|
|
54
|
-
if (construction) checkPattern(construction.pattern, construction.start + 1, construction.flags);
|
|
55
|
-
}
|
|
56
|
-
return { visitors: {
|
|
57
|
-
CallExpression: checkRegExpConstructor,
|
|
58
|
-
NewExpression: checkRegExpConstructor,
|
|
59
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
60
|
-
} };
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
//#endregion
|
|
64
|
-
export { regexEmptyGroups_default as default };
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=regexEmptyGroups.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports lazy quantifiers at the end of regular expressions.";
|
|
3
|
-
readonly id: "regexEmptyLazyQuantifiers";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "uselessElement" | "uselessQuantifier" | "uselessRange", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyLazyQuantifiers.d.ts.map
|