@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,92 +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/regexEmptyLazyQuantifiers.ts
|
|
8
|
-
function* extractLazyEndQuantifiers(alternatives) {
|
|
9
|
-
for (const { elements } of alternatives) {
|
|
10
|
-
if (!elements.length) continue;
|
|
11
|
-
const last = elements.at(-1);
|
|
12
|
-
if (!last) continue;
|
|
13
|
-
switch (last.type) {
|
|
14
|
-
case "CapturingGroup":
|
|
15
|
-
case "Group":
|
|
16
|
-
yield* extractLazyEndQuantifiers(last.alternatives);
|
|
17
|
-
break;
|
|
18
|
-
case "Quantifier":
|
|
19
|
-
if (!last.greedy && last.min !== last.max) yield last;
|
|
20
|
-
else if (last.max === 1) {
|
|
21
|
-
const element = last.element;
|
|
22
|
-
if (element.type === "Group" || element.type === "CapturingGroup") yield* extractLazyEndQuantifiers(element.alternatives);
|
|
23
|
-
}
|
|
24
|
-
break;
|
|
25
|
-
default: break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
var regexEmptyLazyQuantifiers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
30
|
-
about: {
|
|
31
|
-
description: "Reports lazy quantifiers at the end of regular expressions.",
|
|
32
|
-
id: "regexEmptyLazyQuantifiers",
|
|
33
|
-
presets: ["logical"]
|
|
34
|
-
},
|
|
35
|
-
messages: {
|
|
36
|
-
uselessElement: {
|
|
37
|
-
primary: "Lazy quantifier '{{ raw }}' at end of pattern will only match the empty string.",
|
|
38
|
-
secondary: ["Lazy quantifiers at the end of a pattern with minimum 0 will match nothing because there's nothing after them to satisfy."],
|
|
39
|
-
suggestions: ["Remove the lazy quantifier.", "Add characters after the lazy quantifier to make it useful."]
|
|
40
|
-
},
|
|
41
|
-
uselessQuantifier: {
|
|
42
|
-
primary: "Lazy quantifier '{{ raw }}' at end of pattern will always match exactly once.",
|
|
43
|
-
secondary: ["Lazy quantifiers at the end of a pattern with minimum 1 will match exactly once because there's nothing after them to satisfy."],
|
|
44
|
-
suggestions: ["Remove the lazy quantifier.", "Add characters after the lazy quantifier to make it useful."]
|
|
45
|
-
},
|
|
46
|
-
uselessRange: {
|
|
47
|
-
primary: "Lazy quantifier '{{ raw }}' at end of pattern will always match exactly {{ min }} times.",
|
|
48
|
-
secondary: ["Lazy quantifiers at the end of a pattern will match only their minimum because there's nothing after them to satisfy."],
|
|
49
|
-
suggestions: ["Remove the lazy quantifier.", "Add characters after the lazy quantifier to make it useful."]
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
setup(context) {
|
|
53
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
54
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
55
|
-
if (!regexpAst) return;
|
|
56
|
-
visitRegExpAST(regexpAst, { onPatternEnter(patternNode) {
|
|
57
|
-
for (const lazy of extractLazyEndQuantifiers(patternNode.alternatives)) {
|
|
58
|
-
const messageId = lazy.min === 0 ? "uselessElement" : lazy.min === 1 ? "uselessQuantifier" : "uselessRange";
|
|
59
|
-
context.report({
|
|
60
|
-
data: {
|
|
61
|
-
min: lazy.min,
|
|
62
|
-
raw: lazy.raw
|
|
63
|
-
},
|
|
64
|
-
message: messageId,
|
|
65
|
-
range: {
|
|
66
|
-
begin: patternStart + lazy.start,
|
|
67
|
-
end: patternStart + lazy.end
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
} });
|
|
72
|
-
}
|
|
73
|
-
function checkRegexLiteral(node, services) {
|
|
74
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
75
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
76
|
-
}
|
|
77
|
-
function checkRegExpConstructor(node, services) {
|
|
78
|
-
const construction = getRegExpConstruction(node, services);
|
|
79
|
-
if (!construction) return;
|
|
80
|
-
checkPattern(construction.pattern, construction.start + 1, construction.flags);
|
|
81
|
-
}
|
|
82
|
-
return { visitors: {
|
|
83
|
-
CallExpression: checkRegExpConstructor,
|
|
84
|
-
NewExpression: checkRegExpConstructor,
|
|
85
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
86
|
-
} };
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
//#endregion
|
|
90
|
-
export { regexEmptyLazyQuantifiers_default as default };
|
|
91
|
-
|
|
92
|
-
//# sourceMappingURL=regexEmptyLazyQuantifiers.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports empty lookahead and lookbehind assertions in regular expressions.";
|
|
3
|
-
readonly id: "regexEmptyLookaroundsAssertions";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyLookaround", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyLookaroundsAssertions.d.ts.map
|
|
@@ -1,68 +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
|
-
import { isPotentiallyEmpty } from "regexp-ast-analysis";
|
|
8
|
-
//#region src/rules/regexEmptyLookaroundsAssertions.ts
|
|
9
|
-
var regexEmptyLookaroundsAssertions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
10
|
-
about: {
|
|
11
|
-
description: "Reports empty lookahead and lookbehind assertions in regular expressions.",
|
|
12
|
-
id: "regexEmptyLookaroundsAssertions",
|
|
13
|
-
presets: ["logical", "logicalStrict"]
|
|
14
|
-
},
|
|
15
|
-
messages: { emptyLookaround: {
|
|
16
|
-
primary: "Empty {{ kind }} will trivially {{ result }} all inputs.",
|
|
17
|
-
secondary: ["Empty lookaround assertions match the empty string and will always succeed (or fail if negated) without checking anything meaningful."],
|
|
18
|
-
suggestions: []
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
function checkPattern(pattern, patternStart, flagsText) {
|
|
22
|
-
const regexpAst = parseRegexpAst(pattern, flagsText);
|
|
23
|
-
if (!regexpAst) return;
|
|
24
|
-
const flags = {
|
|
25
|
-
dotAll: flagsText.includes("s"),
|
|
26
|
-
global: flagsText.includes("g"),
|
|
27
|
-
hasIndices: flagsText.includes("d"),
|
|
28
|
-
ignoreCase: flagsText.includes("i"),
|
|
29
|
-
multiline: flagsText.includes("m"),
|
|
30
|
-
sticky: flagsText.includes("y"),
|
|
31
|
-
unicode: flagsText.includes("u"),
|
|
32
|
-
unicodeSets: flagsText.includes("v")
|
|
33
|
-
};
|
|
34
|
-
visitRegExpAST(regexpAst, { onAssertionEnter(assertion) {
|
|
35
|
-
if (assertion.kind !== "lookahead" && assertion.kind !== "lookbehind") return;
|
|
36
|
-
if (isPotentiallyEmpty(assertion.alternatives, flags)) context.report({
|
|
37
|
-
data: {
|
|
38
|
-
kind: assertion.kind,
|
|
39
|
-
result: assertion.negate ? "reject" : "accept"
|
|
40
|
-
},
|
|
41
|
-
message: "emptyLookaround",
|
|
42
|
-
range: {
|
|
43
|
-
begin: patternStart + assertion.start,
|
|
44
|
-
end: patternStart + assertion.end
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
} });
|
|
48
|
-
}
|
|
49
|
-
function checkRegexLiteral(node, services) {
|
|
50
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
51
|
-
checkPattern(pattern, start, flags);
|
|
52
|
-
}
|
|
53
|
-
function checkRegExpConstructor(node, services) {
|
|
54
|
-
const construction = getRegExpConstruction(node, services);
|
|
55
|
-
if (!construction) return;
|
|
56
|
-
checkPattern(construction.pattern.replace(/\\\\/g, "\\"), construction.start + 1, construction.flags);
|
|
57
|
-
}
|
|
58
|
-
return { visitors: {
|
|
59
|
-
CallExpression: checkRegExpConstructor,
|
|
60
|
-
NewExpression: checkRegExpConstructor,
|
|
61
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
62
|
-
} };
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
//#endregion
|
|
66
|
-
export { regexEmptyLookaroundsAssertions_default as default };
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=regexEmptyLookaroundsAssertions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports empty string literals in character classes.";
|
|
3
|
-
readonly id: "regexEmptyStringLiterals";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyStringLiteral", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEmptyStringLiterals.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 { parseRegExpLiteral, visitRegExpAST } from "@eslint-community/regexpp";
|
|
6
|
-
//#region src/rules/regexEmptyStringLiterals.ts
|
|
7
|
-
function findEmptyStringLiterals(pattern, flags) {
|
|
8
|
-
const results = [];
|
|
9
|
-
if (!flags.includes("v")) return results;
|
|
10
|
-
let ast;
|
|
11
|
-
try {
|
|
12
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
13
|
-
} catch {
|
|
14
|
-
return results;
|
|
15
|
-
}
|
|
16
|
-
visitRegExpAST(ast, { onClassStringDisjunctionEnter(node) {
|
|
17
|
-
if (node.alternatives.every((alternative) => !alternative.elements.length)) results.push(node);
|
|
18
|
-
} });
|
|
19
|
-
return results;
|
|
20
|
-
}
|
|
21
|
-
var regexEmptyStringLiterals_default = ruleCreator.createRule(typescriptLanguage, {
|
|
22
|
-
about: {
|
|
23
|
-
description: "Reports empty string literals in character classes.",
|
|
24
|
-
id: "regexEmptyStringLiterals",
|
|
25
|
-
presets: ["logical", "logicalStrict"]
|
|
26
|
-
},
|
|
27
|
-
messages: { emptyStringLiteral: {
|
|
28
|
-
primary: "This empty string literal in a character class will always match the empty string.",
|
|
29
|
-
secondary: ["The `\\q{}` string literal matches the empty string.", "This generally either does not benefit the regular expression or can cause unintended matches."],
|
|
30
|
-
suggestions: ["Remove the empty string literal if this was unintentional.", "Use a quantifier on the character class if this was intentional."]
|
|
31
|
-
} },
|
|
32
|
-
setup(context) {
|
|
33
|
-
function checkRegexLiteral(node, services) {
|
|
34
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
35
|
-
const emptyLiterals = findEmptyStringLiterals(pattern, flags);
|
|
36
|
-
for (const literal of emptyLiterals) context.report({
|
|
37
|
-
message: "emptyStringLiteral",
|
|
38
|
-
range: {
|
|
39
|
-
begin: start + literal.start - 1,
|
|
40
|
-
end: start + literal.end - 1
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
function checkRegExpConstructor(node, services) {
|
|
45
|
-
const construction = getRegExpConstruction(node, services);
|
|
46
|
-
if (!construction) return;
|
|
47
|
-
const emptyLiterals = findEmptyStringLiterals(construction.pattern.replace(/\\\\/g, "\\"), construction.flags);
|
|
48
|
-
for (const literal of emptyLiterals) context.report({
|
|
49
|
-
message: "emptyStringLiteral",
|
|
50
|
-
range: {
|
|
51
|
-
begin: construction.start + literal.start,
|
|
52
|
-
end: construction.start + literal.end
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
return { visitors: {
|
|
57
|
-
CallExpression: checkRegExpConstructor,
|
|
58
|
-
NewExpression: checkRegExpConstructor,
|
|
59
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
60
|
-
} };
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
//#endregion
|
|
64
|
-
export { regexEmptyStringLiterals_default as default };
|
|
65
|
-
|
|
66
|
-
//# sourceMappingURL=regexEmptyStringLiterals.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports escape backspace (`[\\b]`) in character classes.";
|
|
3
|
-
readonly id: "regexEscapeBackspaces";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "escapeBackspace", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexEscapeBackspaces.d.ts.map
|
|
@@ -1,69 +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/regexEscapeBackspaces.ts
|
|
7
|
-
function findEscapeBackspaces(pattern, flags) {
|
|
8
|
-
const results = [];
|
|
9
|
-
let ast;
|
|
10
|
-
try {
|
|
11
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
12
|
-
} catch {
|
|
13
|
-
return results;
|
|
14
|
-
}
|
|
15
|
-
visitRegExpAST(ast, { onCharacterEnter(node) {
|
|
16
|
-
if (node.raw === "\\b") results.push(node);
|
|
17
|
-
} });
|
|
18
|
-
return results;
|
|
19
|
-
}
|
|
20
|
-
var regexEscapeBackspaces_default = ruleCreator.createRule(typescriptLanguage, {
|
|
21
|
-
about: {
|
|
22
|
-
description: "Reports escape backspace (`[\\b]`) in character classes.",
|
|
23
|
-
id: "regexEscapeBackspaces",
|
|
24
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
25
|
-
},
|
|
26
|
-
messages: { escapeBackspace: {
|
|
27
|
-
primary: "Prefer the clearer `\\u0008` instead of `[\\b]` for backspace character.",
|
|
28
|
-
secondary: [
|
|
29
|
-
"The `\\b` inside a character class matches the backspace character (U+0008).",
|
|
30
|
-
"Outside a character class, `\\b` is a word boundary assertion.",
|
|
31
|
-
"Using `\\u0008` makes the intent clearer."
|
|
32
|
-
],
|
|
33
|
-
suggestions: ["Replace `\\b` with `\\u0008`."]
|
|
34
|
-
} },
|
|
35
|
-
setup(context) {
|
|
36
|
-
function checkRegexLiteral(node, services) {
|
|
37
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
38
|
-
const backspaces = findEscapeBackspaces(pattern, flags);
|
|
39
|
-
for (const backspace of backspaces) context.report({
|
|
40
|
-
message: "escapeBackspace",
|
|
41
|
-
range: {
|
|
42
|
-
begin: start + backspace.start - 1,
|
|
43
|
-
end: start + backspace.end - 1
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
function checkRegExpConstructor(node, services) {
|
|
48
|
-
const construction = getRegExpConstruction(node, services);
|
|
49
|
-
if (!construction) return;
|
|
50
|
-
const backspaces = findEscapeBackspaces(construction.pattern.replace(/\\\\/g, "\\"), construction.flags);
|
|
51
|
-
for (const backspace of backspaces) context.report({
|
|
52
|
-
message: "escapeBackspace",
|
|
53
|
-
range: {
|
|
54
|
-
begin: construction.start + backspace.start,
|
|
55
|
-
end: construction.start + backspace.end
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
return { visitors: {
|
|
60
|
-
CallExpression: checkRegExpConstructor,
|
|
61
|
-
NewExpression: checkRegExpConstructor,
|
|
62
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
63
|
-
} };
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
//#endregion
|
|
67
|
-
export { regexEscapeBackspaces_default as default };
|
|
68
|
-
|
|
69
|
-
//# sourceMappingURL=regexEscapeBackspaces.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports String.prototype.match calls that can be replaced with RegExp.prototype.exec.";
|
|
3
|
-
readonly id: "regexExecutors";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferExec", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexExecutors.d.ts.map
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts from "typescript";
|
|
5
|
-
//#region src/rules/regexExecutors.ts
|
|
6
|
-
function getRegexFlags(node, sourceFile) {
|
|
7
|
-
switch (node.kind) {
|
|
8
|
-
case ts.SyntaxKind.CallExpression:
|
|
9
|
-
case ts.SyntaxKind.NewExpression:
|
|
10
|
-
if (ts.isIdentifier(node.expression) && node.expression.text === "RegExp" && node.arguments) {
|
|
11
|
-
if (node.arguments.length < 2) return "";
|
|
12
|
-
const flagsArg = node.arguments[1];
|
|
13
|
-
if (ts.isStringLiteral(flagsArg)) return flagsArg.text;
|
|
14
|
-
}
|
|
15
|
-
return;
|
|
16
|
-
case ts.SyntaxKind.RegularExpressionLiteral: {
|
|
17
|
-
const text = node.getText(sourceFile);
|
|
18
|
-
const lastSlash = text.lastIndexOf("/");
|
|
19
|
-
return lastSlash >= 0 ? text.slice(lastSlash + 1) : "";
|
|
20
|
-
}
|
|
21
|
-
default: return;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
var regexExecutors_default = ruleCreator.createRule(typescriptLanguage, {
|
|
25
|
-
about: {
|
|
26
|
-
description: "Reports String.prototype.match calls that can be replaced with RegExp.prototype.exec.",
|
|
27
|
-
id: "regexExecutors",
|
|
28
|
-
presets: ["stylisticStrict"]
|
|
29
|
-
},
|
|
30
|
-
messages: { preferExec: {
|
|
31
|
-
primary: "For consistency, prefer `RegExp.prototype.exec()` over `String.prototype.match()` when not using the global flag.",
|
|
32
|
-
secondary: ["`RegExp.prototype.exec()` is functionally identical to and slightly fewer characters than `String.prototype.match()` when the regex has no global flag.", "Choosing one by default leads to more consistent and therefore more readable code."],
|
|
33
|
-
suggestions: ["Switch from `String.prototype.match()` to `RegExp.prototype.exec()`.", "Add the global flag to the regular expression."]
|
|
34
|
-
} },
|
|
35
|
-
setup(context) {
|
|
36
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
37
|
-
if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "match" || node.arguments.length < 1 || !(getConstrainedTypeAtLocation(node.expression.expression, typeChecker).flags & ts.TypeFlags.StringLike)) return;
|
|
38
|
-
const firstArgument = node.arguments[0];
|
|
39
|
-
if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
|
|
40
|
-
const flags = getRegexFlags(firstArgument, sourceFile);
|
|
41
|
-
if (flags === void 0 || flags.includes("g")) return;
|
|
42
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
43
|
-
const regexText = firstArgument.getText(sourceFile);
|
|
44
|
-
context.report({
|
|
45
|
-
fix: {
|
|
46
|
-
range,
|
|
47
|
-
text: `${regexText}.exec(${node.expression.expression.getText(sourceFile)})`
|
|
48
|
-
},
|
|
49
|
-
message: "preferExec",
|
|
50
|
-
range
|
|
51
|
-
});
|
|
52
|
-
} } };
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
//#endregion
|
|
56
|
-
export { regexExecutors_default as default };
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=regexExecutors.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports string literals inside character classes with the `v` flag that contain multiple graphemes.";
|
|
3
|
-
readonly id: "regexGraphemeStringLiterals";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "multipleGraphemes", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexGraphemeStringLiterals.d.ts.map
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
5
|
-
//#region src/rules/regexGraphemeStringLiterals.ts
|
|
6
|
-
const segmenter = new Intl.Segmenter();
|
|
7
|
-
function buildAlternativeExample(stringAlternative) {
|
|
8
|
-
return `(?:${stringAlternative.parent.alternatives.filter(isMultipleGraphemes).map((alternative) => alternative.raw).join("|")}|[...])`;
|
|
9
|
-
}
|
|
10
|
-
function isMultipleGraphemes(stringAlternative) {
|
|
11
|
-
if (stringAlternative.elements.length <= 1) return false;
|
|
12
|
-
const string = String.fromCodePoint(...stringAlternative.elements.map((element) => element.value));
|
|
13
|
-
return [...segmenter.segment(string)].length > 1;
|
|
14
|
-
}
|
|
15
|
-
var regexGraphemeStringLiterals_default = ruleCreator.createRule(typescriptLanguage, {
|
|
16
|
-
about: {
|
|
17
|
-
description: "Reports string literals inside character classes with the `v` flag that contain multiple graphemes.",
|
|
18
|
-
id: "regexGraphemeStringLiterals",
|
|
19
|
-
presets: ["stylisticStrict"]
|
|
20
|
-
},
|
|
21
|
-
messages: { multipleGraphemes: {
|
|
22
|
-
primary: "This literal contains multiple graphemes in the `\\q{}` matcher intended for single graphemes.",
|
|
23
|
-
secondary: ["The `\\q{}` syntax is designed for single extended grapheme clusters like emoji sequences.", "Using it for multiple \"graphemes\" (visual characters) is often a mistake."],
|
|
24
|
-
suggestions: ["If matching multi-character strings, consider using alternation: '{{ alternative }}'."]
|
|
25
|
-
} },
|
|
26
|
-
setup(context) {
|
|
27
|
-
return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
|
|
28
|
-
const text = node.getText(sourceFile);
|
|
29
|
-
const match = /^\/(.+)\/([dgimsuyv]*)$/.exec(text);
|
|
30
|
-
if (!match) return;
|
|
31
|
-
const [, pattern, flags] = match;
|
|
32
|
-
if (!pattern || !flags?.includes("v")) return;
|
|
33
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
34
|
-
if (!regexpAst) return;
|
|
35
|
-
const nodeRange = getTSNodeRange(node, sourceFile);
|
|
36
|
-
visitRegExpAST(regexpAst, { onStringAlternativeEnter(stringAlternative) {
|
|
37
|
-
if (!isMultipleGraphemes(stringAlternative)) return;
|
|
38
|
-
const alternative = buildAlternativeExample(stringAlternative);
|
|
39
|
-
context.report({
|
|
40
|
-
data: { alternative },
|
|
41
|
-
message: "multipleGraphemes",
|
|
42
|
-
range: nodeRange
|
|
43
|
-
});
|
|
44
|
-
} });
|
|
45
|
-
} } };
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
//#endregion
|
|
49
|
-
export { regexGraphemeStringLiterals_default as default };
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=regexGraphemeStringLiterals.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports regex character escapes that can be expressed more consistently using hexadecimal escapes.";
|
|
3
|
-
readonly id: "regexHexadecimalEscapes";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferHexEscape", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexHexadecimalEscapes.d.ts.map
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { parseRegexpAst } from "./utils/parseRegexpAst.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import { visitRegExpAST } from "@eslint-community/regexpp";
|
|
5
|
-
//#region src/rules/regexHexadecimalEscapes.ts
|
|
6
|
-
function getEscapeType(raw) {
|
|
7
|
-
if (raw.length === 1) return "literal";
|
|
8
|
-
if (!raw.startsWith("\\")) return;
|
|
9
|
-
const second = raw[1];
|
|
10
|
-
if (second === "x") return "hexadecimal";
|
|
11
|
-
if (second === "u") return "unicode";
|
|
12
|
-
if (second === "c") return "control";
|
|
13
|
-
if (second !== void 0 && second >= "0" && second <= "7") return "octal";
|
|
14
|
-
}
|
|
15
|
-
function toHexEscape(codePoint) {
|
|
16
|
-
return `\\x${codePoint.toString(16).padStart(2, "0")}`;
|
|
17
|
-
}
|
|
18
|
-
var regexHexadecimalEscapes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
19
|
-
about: {
|
|
20
|
-
description: "Reports regex character escapes that can be expressed more consistently using hexadecimal escapes.",
|
|
21
|
-
id: "regexHexadecimalEscapes",
|
|
22
|
-
presets: ["stylisticStrict"]
|
|
23
|
-
},
|
|
24
|
-
messages: { preferHexEscape: {
|
|
25
|
-
primary: "Prefer the more succinct hexadecimal escape `{{ hexEscape }}` over {{ escapeType }} escape `{{ found }}`.",
|
|
26
|
-
secondary: ["Hexadecimal escapes are more concise for characters in the 0x00-0xFF range."],
|
|
27
|
-
suggestions: ["Replace `{{ found }}` with `{{ hexEscape }}`."]
|
|
28
|
-
} },
|
|
29
|
-
setup(context) {
|
|
30
|
-
return { visitors: { RegularExpressionLiteral: (node, { sourceFile }) => {
|
|
31
|
-
const match = /^\/(.+)\/([dgimsuyv]*)$/.exec(node.text);
|
|
32
|
-
if (!match) return;
|
|
33
|
-
const [, pattern, flagsStr] = match;
|
|
34
|
-
if (!pattern) return;
|
|
35
|
-
const regexpAst = parseRegexpAst(pattern, flagsStr);
|
|
36
|
-
if (!regexpAst) return;
|
|
37
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
38
|
-
visitRegExpAST(regexpAst, { onCharacterEnter(charNode) {
|
|
39
|
-
if (charNode.value > 255) return;
|
|
40
|
-
const escapeType = getEscapeType(charNode.raw);
|
|
41
|
-
if (!escapeType) return;
|
|
42
|
-
if (escapeType === "unicode" && (charNode.raw.startsWith("\\u00") || charNode.raw.startsWith("\\u{") && charNode.value <= 255)) {
|
|
43
|
-
const hexEscape = toHexEscape(charNode.value);
|
|
44
|
-
context.report({
|
|
45
|
-
data: {
|
|
46
|
-
escapeType,
|
|
47
|
-
found: charNode.raw,
|
|
48
|
-
hexEscape
|
|
49
|
-
},
|
|
50
|
-
fix: {
|
|
51
|
-
range: {
|
|
52
|
-
begin: range.begin + 1 + charNode.start,
|
|
53
|
-
end: range.begin + 1 + charNode.end
|
|
54
|
-
},
|
|
55
|
-
text: hexEscape
|
|
56
|
-
},
|
|
57
|
-
message: "preferHexEscape",
|
|
58
|
-
range: {
|
|
59
|
-
begin: range.begin + 1 + charNode.start,
|
|
60
|
-
end: range.begin + 1 + charNode.end
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
} });
|
|
65
|
-
} } };
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
//#endregion
|
|
69
|
-
export { regexHexadecimalEscapes_default as default };
|
|
70
|
-
|
|
71
|
-
//# sourceMappingURL=regexHexadecimalEscapes.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports regex patterns that can be simplified by using the i (ignore case) flag.";
|
|
3
|
-
readonly id: "regexIgnoreCaseFlags";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "useIgnoreCase", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexIgnoreCaseFlags.d.ts.map
|