@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,133 +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/regexUnicodeProperties.ts
|
|
8
|
-
function isPropertyCharacterSetWithValue(characterSet) {
|
|
9
|
-
return characterSet.kind === "property" && !!characterSet.value;
|
|
10
|
-
}
|
|
11
|
-
const scriptShortToLong = {
|
|
12
|
-
Arab: "Arabic",
|
|
13
|
-
Armn: "Armenian",
|
|
14
|
-
Beng: "Bengali",
|
|
15
|
-
Cyrl: "Cyrillic",
|
|
16
|
-
Deva: "Devanagari",
|
|
17
|
-
Geor: "Georgian",
|
|
18
|
-
Grek: "Greek",
|
|
19
|
-
Gujr: "Gujarati",
|
|
20
|
-
Guru: "Gurmukhi",
|
|
21
|
-
Hang: "Hangul",
|
|
22
|
-
Hani: "Han",
|
|
23
|
-
Hebr: "Hebrew",
|
|
24
|
-
Hira: "Hiragana",
|
|
25
|
-
Kana: "Katakana",
|
|
26
|
-
Knda: "Kannada",
|
|
27
|
-
Latn: "Latin",
|
|
28
|
-
Mlym: "Malayalam",
|
|
29
|
-
Mymr: "Myanmar",
|
|
30
|
-
Orya: "Oriya",
|
|
31
|
-
Sinh: "Sinhala",
|
|
32
|
-
Taml: "Tamil",
|
|
33
|
-
Telu: "Telugu",
|
|
34
|
-
Thai: "Thai",
|
|
35
|
-
Tibt: "Tibetan",
|
|
36
|
-
Zinh: "Inherited",
|
|
37
|
-
Zyyy: "Common",
|
|
38
|
-
Zzzz: "Unknown"
|
|
39
|
-
};
|
|
40
|
-
function getExplicitKey(raw) {
|
|
41
|
-
const match = /^\\p\{([^=]+)=/i.exec(raw);
|
|
42
|
-
return match ? match[1] : null;
|
|
43
|
-
}
|
|
44
|
-
function hasCategoryKey(explicitKey) {
|
|
45
|
-
const lower = explicitKey.toLowerCase().replace(/_/g, "");
|
|
46
|
-
return lower === "gc" || lower === "generalcategory";
|
|
47
|
-
}
|
|
48
|
-
var regexUnicodeProperties_default = ruleCreator.createRule(typescriptLanguage, {
|
|
49
|
-
about: {
|
|
50
|
-
description: "Reports inconsistent Unicode property names in regular expressions.",
|
|
51
|
-
id: "regexUnicodeProperties",
|
|
52
|
-
presets: ["stylistic"]
|
|
53
|
-
},
|
|
54
|
-
messages: {
|
|
55
|
-
preferLongScript: {
|
|
56
|
-
primary: "Use long Script property name '{{ longName }}' instead of '{{ shortName }}'.",
|
|
57
|
-
secondary: ["Long Script names are more readable and explicit."],
|
|
58
|
-
suggestions: ["Replace '{{ shortName }}' with '{{ longName }}'."]
|
|
59
|
-
},
|
|
60
|
-
unnecessaryPrefix: {
|
|
61
|
-
primary: "The '{{ key }}=' prefix is unnecessary for this Unicode property.",
|
|
62
|
-
secondary: ["Unicode properties may be expressed in several different ways.", "Including the fully-written out category prefix is a more verbose way that is not necessary."],
|
|
63
|
-
suggestions: ["Replace '{{ original }}' with '{{ replacement }}'."]
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
setup(context) {
|
|
67
|
-
function checkPattern(pattern, patternStart, flags, isStringPattern) {
|
|
68
|
-
if (!flags.includes("u") && !flags.includes("v")) return;
|
|
69
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
70
|
-
if (!regexpAst) return;
|
|
71
|
-
function reportOn(characterSet, data, replacement, message) {
|
|
72
|
-
const sourceEnd = isStringPattern ? characterSet.end + 1 : characterSet.end;
|
|
73
|
-
context.report({
|
|
74
|
-
data,
|
|
75
|
-
fix: {
|
|
76
|
-
range: {
|
|
77
|
-
begin: patternStart + characterSet.start,
|
|
78
|
-
end: patternStart + sourceEnd
|
|
79
|
-
},
|
|
80
|
-
text: isStringPattern ? replacement.replace(/\\/g, "\\\\") : replacement
|
|
81
|
-
},
|
|
82
|
-
message,
|
|
83
|
-
range: {
|
|
84
|
-
begin: patternStart + characterSet.start,
|
|
85
|
-
end: patternStart + characterSet.end
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function reportOnCategoryKey(characterSet, explicitKey) {
|
|
90
|
-
const replacement = `${characterSet.negate ? "\\P{" : "\\p{"}${characterSet.value}}`;
|
|
91
|
-
reportOn(characterSet, {
|
|
92
|
-
key: explicitKey,
|
|
93
|
-
original: characterSet.raw,
|
|
94
|
-
replacement
|
|
95
|
-
}, replacement, "unnecessaryPrefix");
|
|
96
|
-
}
|
|
97
|
-
function reportOnScriptKey(characterSet, explicitKey) {
|
|
98
|
-
const longName = scriptShortToLong[characterSet.value];
|
|
99
|
-
if (!longName) return;
|
|
100
|
-
const replacement = `${characterSet.negate ? "\\P{" : "\\p{"}${explicitKey}=${longName}}`;
|
|
101
|
-
reportOn(characterSet, {
|
|
102
|
-
longName,
|
|
103
|
-
shortName: characterSet.value
|
|
104
|
-
}, replacement, "preferLongScript");
|
|
105
|
-
}
|
|
106
|
-
visitRegExpAST(regexpAst, { onCharacterSetEnter(characterSet) {
|
|
107
|
-
if (!isPropertyCharacterSetWithValue(characterSet)) return;
|
|
108
|
-
const explicitKey = getExplicitKey(characterSet.raw);
|
|
109
|
-
if (!explicitKey) return;
|
|
110
|
-
if (hasCategoryKey(explicitKey)) reportOnCategoryKey(characterSet, explicitKey);
|
|
111
|
-
else reportOnScriptKey(characterSet, explicitKey);
|
|
112
|
-
} });
|
|
113
|
-
}
|
|
114
|
-
function checkRegexLiteral(node, services) {
|
|
115
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
116
|
-
checkPattern(details.pattern, details.start, details.flags, false);
|
|
117
|
-
}
|
|
118
|
-
function checkRegExpConstructor(node, services) {
|
|
119
|
-
const construction = getRegExpConstruction(node, services);
|
|
120
|
-
if (!construction) return;
|
|
121
|
-
checkPattern(construction.raw, construction.start + 1, construction.flags, true);
|
|
122
|
-
}
|
|
123
|
-
return { visitors: {
|
|
124
|
-
CallExpression: checkRegExpConstructor,
|
|
125
|
-
NewExpression: checkRegExpConstructor,
|
|
126
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
127
|
-
} };
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
//#endregion
|
|
131
|
-
export { regexUnicodeProperties_default as default };
|
|
132
|
-
|
|
133
|
-
//# sourceMappingURL=regexUnicodeProperties.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports assertions in regular expressions that always reject.";
|
|
3
|
-
readonly id: "regexUnnecessaryAssertions";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "endAnchor" | "negatedWordBoundary" | "startAnchor" | "wordBoundary", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexUnnecessaryAssertions.d.ts.map
|
|
@@ -1,223 +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/regexUnnecessaryAssertions.ts
|
|
6
|
-
function findUnnecessaryAssertions(pattern, doubleEscaped, flags) {
|
|
7
|
-
const findings = [];
|
|
8
|
-
const hasMultiline = flags.includes("m");
|
|
9
|
-
const wordBoundaryRegex = doubleEscaped ? /\\\\b/g : /\\b/g;
|
|
10
|
-
const negatedWordBoundaryRegex = doubleEscaped ? /\\\\B/g : /\\B/g;
|
|
11
|
-
let match;
|
|
12
|
-
while ((match = wordBoundaryRegex.exec(pattern)) !== null) {
|
|
13
|
-
const assertionStart = match.index;
|
|
14
|
-
const assertionEnd = match.index + match[0].length;
|
|
15
|
-
if (isInsideCharacterClass(pattern, assertionStart)) continue;
|
|
16
|
-
const characterBefore = getCharBeforeAssertion(pattern, assertionStart, doubleEscaped);
|
|
17
|
-
const characterAfter = getCharAfterAssertion(pattern, assertionEnd, doubleEscaped);
|
|
18
|
-
if (characterBefore === void 0 || characterAfter === void 0) continue;
|
|
19
|
-
const beforeIsWord = isWordCharacter(characterBefore);
|
|
20
|
-
const afterIsWord = isWordCharacter(characterAfter);
|
|
21
|
-
if (beforeIsWord === void 0 || afterIsWord === void 0) continue;
|
|
22
|
-
if (beforeIsWord === afterIsWord) findings.push({
|
|
23
|
-
assertionRaw: match[0],
|
|
24
|
-
end: assertionEnd,
|
|
25
|
-
start: assertionStart,
|
|
26
|
-
type: "wordBoundary",
|
|
27
|
-
wordType: beforeIsWord ? "word" : "non-word"
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
while ((match = negatedWordBoundaryRegex.exec(pattern)) !== null) {
|
|
31
|
-
const assertionStart = match.index;
|
|
32
|
-
const assertionEnd = match.index + match[0].length;
|
|
33
|
-
if (isInsideCharacterClass(pattern, assertionStart)) continue;
|
|
34
|
-
const characterBefore = getCharBeforeAssertion(pattern, assertionStart, doubleEscaped);
|
|
35
|
-
const characterAfter = getCharAfterAssertion(pattern, assertionEnd, doubleEscaped);
|
|
36
|
-
if (characterBefore === void 0 || characterAfter === void 0) continue;
|
|
37
|
-
const beforeIsWord = isWordCharacter(characterBefore);
|
|
38
|
-
const afterIsWord = isWordCharacter(characterAfter);
|
|
39
|
-
if (beforeIsWord === void 0 || afterIsWord === void 0) continue;
|
|
40
|
-
if (beforeIsWord !== afterIsWord) findings.push({
|
|
41
|
-
assertionRaw: match[0],
|
|
42
|
-
end: assertionEnd,
|
|
43
|
-
start: assertionStart,
|
|
44
|
-
type: "negatedWordBoundary"
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
if (!hasMultiline) {
|
|
48
|
-
const startAnchorRegex = doubleEscaped ? /(?<!\\)\^/g : /(?<!\\)\^/g;
|
|
49
|
-
const endAnchorRegex = doubleEscaped ? /(?<!\\)\$/g : /(?<!\\)\$/g;
|
|
50
|
-
while ((match = startAnchorRegex.exec(pattern)) !== null) {
|
|
51
|
-
const position = match.index;
|
|
52
|
-
if (isInsideCharacterClass(pattern, position)) continue;
|
|
53
|
-
if (doubleEscaped && position > 0 && pattern[position - 1] === "\\") continue;
|
|
54
|
-
if (position > 0) findings.push({
|
|
55
|
-
assertionRaw: "^",
|
|
56
|
-
end: position + 1,
|
|
57
|
-
start: position,
|
|
58
|
-
type: "startAnchor"
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
while ((match = endAnchorRegex.exec(pattern)) !== null) {
|
|
62
|
-
const position = match.index;
|
|
63
|
-
if (isInsideCharacterClass(pattern, position)) continue;
|
|
64
|
-
if (doubleEscaped && position > 0 && pattern[position - 1] === "\\") continue;
|
|
65
|
-
if (position < pattern.length - 1) findings.push({
|
|
66
|
-
assertionRaw: "$",
|
|
67
|
-
end: position + 1,
|
|
68
|
-
start: position,
|
|
69
|
-
type: "endAnchor"
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return findings;
|
|
74
|
-
}
|
|
75
|
-
function getCharacterFromEscape(escape) {
|
|
76
|
-
switch (escape) {
|
|
77
|
-
case "\\\\d":
|
|
78
|
-
case "\\d": return "0";
|
|
79
|
-
case "\\\\D":
|
|
80
|
-
case "\\D": return " ";
|
|
81
|
-
case "\\\\s":
|
|
82
|
-
case "\\s": return " ";
|
|
83
|
-
case "\\\\S":
|
|
84
|
-
case "\\S": return "a";
|
|
85
|
-
case "\\\\w":
|
|
86
|
-
case "\\w": return "a";
|
|
87
|
-
case "\\\\W":
|
|
88
|
-
case "\\W": return " ";
|
|
89
|
-
default: return;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
function getCharAfterAssertion(pattern, assertionEnd, doubleEscaped) {
|
|
93
|
-
if (assertionEnd >= pattern.length) return;
|
|
94
|
-
const remaining = pattern.slice(assertionEnd);
|
|
95
|
-
if (doubleEscaped && remaining.startsWith("\\\\")) {
|
|
96
|
-
const charResult = getCharacterFromEscape(remaining.slice(0, 3));
|
|
97
|
-
if (charResult) return charResult;
|
|
98
|
-
if (remaining.length >= 3 && remaining[2]) return remaining[2];
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (!doubleEscaped && remaining.startsWith("\\")) {
|
|
102
|
-
const twoCharEscape = remaining.slice(0, 2);
|
|
103
|
-
const charResult = getCharacterFromEscape(twoCharEscape);
|
|
104
|
-
if (charResult) return charResult;
|
|
105
|
-
if (twoCharEscape === "\\b" || twoCharEscape === "\\B" || remaining.length < 1 || !remaining[1]) return;
|
|
106
|
-
return remaining[1];
|
|
107
|
-
}
|
|
108
|
-
return remaining[0];
|
|
109
|
-
}
|
|
110
|
-
function getCharBeforeAssertion(pattern, assertionStart, doubleEscaped) {
|
|
111
|
-
if (assertionStart <= 0) return;
|
|
112
|
-
if (doubleEscaped) {
|
|
113
|
-
if (assertionStart >= 3 && pattern[assertionStart - 3] === "\\") {
|
|
114
|
-
const charResult = getCharacterFromEscape(pattern.slice(assertionStart - 3, assertionStart));
|
|
115
|
-
if (charResult) return charResult;
|
|
116
|
-
return pattern[assertionStart - 1];
|
|
117
|
-
}
|
|
118
|
-
return pattern[assertionStart - 1];
|
|
119
|
-
}
|
|
120
|
-
if (assertionStart >= 2 && pattern[assertionStart - 2] === "\\") {
|
|
121
|
-
const charResult = getCharacterFromEscape(pattern.slice(assertionStart - 2, assertionStart));
|
|
122
|
-
if (charResult) return charResult;
|
|
123
|
-
return pattern[assertionStart - 1];
|
|
124
|
-
}
|
|
125
|
-
return pattern[assertionStart - 1];
|
|
126
|
-
}
|
|
127
|
-
function isInsideCharacterClass(pattern, position) {
|
|
128
|
-
let inClass = false;
|
|
129
|
-
let escaped = false;
|
|
130
|
-
for (let index = 0; index < position; index++) {
|
|
131
|
-
const char = pattern[index];
|
|
132
|
-
if (escaped) {
|
|
133
|
-
escaped = false;
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
if (char === "\\") {
|
|
137
|
-
escaped = true;
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
if (char === "[" && !inClass) {
|
|
141
|
-
inClass = true;
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
if (char === "]" && inClass) inClass = false;
|
|
145
|
-
}
|
|
146
|
-
return inClass;
|
|
147
|
-
}
|
|
148
|
-
function isWordCharacter(character) {
|
|
149
|
-
return character ? /^\w$/.test(character) : void 0;
|
|
150
|
-
}
|
|
151
|
-
var regexUnnecessaryAssertions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
152
|
-
about: {
|
|
153
|
-
description: "Reports assertions in regular expressions that always reject.",
|
|
154
|
-
id: "regexUnnecessaryAssertions",
|
|
155
|
-
presets: ["logical"]
|
|
156
|
-
},
|
|
157
|
-
messages: {
|
|
158
|
-
endAnchor: {
|
|
159
|
-
primary: "The end anchor `$` always rejects because it is not at the end of the pattern.",
|
|
160
|
-
secondary: ["Without the `m` (multiline) flag, `$` can only match at the very end of the input string.", "Characters after `$` mean the pattern can never match."],
|
|
161
|
-
suggestions: [
|
|
162
|
-
"Remove the `$` anchor.",
|
|
163
|
-
"Move the `$` to the end of the pattern.",
|
|
164
|
-
"Add the `m` flag if you want `$` to match at line endings."
|
|
165
|
-
]
|
|
166
|
-
},
|
|
167
|
-
negatedWordBoundary: {
|
|
168
|
-
primary: "The negated word boundary `\\B` always rejects because there is a word/non-word transition.",
|
|
169
|
-
secondary: ["`\\B` asserts that the position is NOT at a word boundary.", "However, the surrounding characters already create a word/non-word transition, which is a word boundary."],
|
|
170
|
-
suggestions: ["Remove the `\\B` assertion.", "Use `\\b` if you intended to match a word boundary."]
|
|
171
|
-
},
|
|
172
|
-
startAnchor: {
|
|
173
|
-
primary: "The start anchor `^` always rejects because it is not at the start of the pattern.",
|
|
174
|
-
secondary: ["Without the `m` (multiline) flag, `^` can only match at the very beginning of the input string.", "Characters before `^` mean the pattern can never match."],
|
|
175
|
-
suggestions: [
|
|
176
|
-
"Remove the `^` anchor.",
|
|
177
|
-
"Move the `^` to the start of the pattern.",
|
|
178
|
-
"Add the `m` flag if you want `^` to match at line beginnings."
|
|
179
|
-
]
|
|
180
|
-
},
|
|
181
|
-
wordBoundary: {
|
|
182
|
-
primary: "The word boundary `\\b` always rejects because both sides are {{ type }} characters.",
|
|
183
|
-
secondary: ["`\\b` asserts that the position is at a word boundary (between a word and non-word character).", "Since both adjacent characters are {{ type }} characters, there is no boundary here."],
|
|
184
|
-
suggestions: ["Remove the `\\b` assertion.", "Use `\\B` if you intended to match inside a word."]
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
setup(context) {
|
|
188
|
-
function checkRegexLiteral(node, services) {
|
|
189
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
190
|
-
const findings = findUnnecessaryAssertions(pattern, false, flags);
|
|
191
|
-
for (const finding of findings) context.report({
|
|
192
|
-
data: { type: finding.wordType ?? "" },
|
|
193
|
-
message: finding.type,
|
|
194
|
-
range: {
|
|
195
|
-
begin: start + finding.start,
|
|
196
|
-
end: start + finding.end
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
function checkRegExpConstructor(node, services) {
|
|
201
|
-
const construction = getRegExpConstruction(node, services);
|
|
202
|
-
if (!construction) return;
|
|
203
|
-
const findings = findUnnecessaryAssertions(construction.pattern, true, construction.flags);
|
|
204
|
-
for (const finding of findings) context.report({
|
|
205
|
-
data: { type: finding.wordType ?? "" },
|
|
206
|
-
message: finding.type,
|
|
207
|
-
range: {
|
|
208
|
-
begin: construction.start + 1 + finding.start,
|
|
209
|
-
end: construction.start + 1 + finding.end
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
return { visitors: {
|
|
214
|
-
CallExpression: checkRegExpConstructor,
|
|
215
|
-
NewExpression: checkRegExpConstructor,
|
|
216
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
217
|
-
} };
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
//#endregion
|
|
221
|
-
export { regexUnnecessaryAssertions_default as default };
|
|
222
|
-
|
|
223
|
-
//# sourceMappingURL=regexUnnecessaryAssertions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports backreferences in regular expressions that will always match empty or fail.";
|
|
3
|
-
readonly id: "regexUnnecessaryBackreferences";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "nested" | "disjunctive" | "intoNegativeLookaround" | "forward" | "backward", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexUnnecessaryBackreferences.d.ts.map
|
|
@@ -1,125 +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/regexUnnecessaryBackreferences.ts
|
|
8
|
-
function getPathToRoot(node) {
|
|
9
|
-
const path = [];
|
|
10
|
-
for (let current = node; current; current = current.parent) path.push(current);
|
|
11
|
-
return path;
|
|
12
|
-
}
|
|
13
|
-
function getUselessProblem(backreference, group) {
|
|
14
|
-
const backrefPath = getPathToRoot(backreference);
|
|
15
|
-
if (backrefPath.includes(group)) return "nested";
|
|
16
|
-
const groupPath = getPathToRoot(group);
|
|
17
|
-
const backrefPathSet = new Set(backrefPath);
|
|
18
|
-
let commonAncestor;
|
|
19
|
-
let groupCut = [];
|
|
20
|
-
for (let i = 0; i < groupPath.length; i++) {
|
|
21
|
-
const node = groupPath[i];
|
|
22
|
-
if (node && backrefPathSet.has(node)) {
|
|
23
|
-
commonAncestor = node;
|
|
24
|
-
groupCut = groupPath.slice(0, i);
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (commonAncestor) {
|
|
29
|
-
const backrefCut = backrefPath.slice(0, backrefPath.indexOf(commonAncestor));
|
|
30
|
-
if (backrefCut.length && !!groupCut.length) {
|
|
31
|
-
const backrefChild = backrefCut.at(-1);
|
|
32
|
-
const groupChild = groupCut.at(-1);
|
|
33
|
-
if (backrefChild.type === "Alternative" && groupChild.type === "Alternative" && backrefChild !== groupChild) return "disjunctive";
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
if (groupCut.some(isNegativeLookaround)) return "intoNegativeLookaround";
|
|
37
|
-
if ((backrefPath.some(isLookbehind) ? "rtl" : "ltr") === "ltr") {
|
|
38
|
-
if (backreference.end <= group.start) return "forward";
|
|
39
|
-
} else if (group.end <= backreference.start) return "backward";
|
|
40
|
-
}
|
|
41
|
-
function isLookbehind(node) {
|
|
42
|
-
return node.type === "Assertion" && node.kind === "lookbehind";
|
|
43
|
-
}
|
|
44
|
-
function isNegativeLookaround(node) {
|
|
45
|
-
return node.type === "Assertion" && (node.kind === "lookahead" || node.kind === "lookbehind") && node.negate;
|
|
46
|
-
}
|
|
47
|
-
var regexUnnecessaryBackreferences_default = ruleCreator.createRule(typescriptLanguage, {
|
|
48
|
-
about: {
|
|
49
|
-
description: "Reports backreferences in regular expressions that will always match empty or fail.",
|
|
50
|
-
id: "regexUnnecessaryBackreferences",
|
|
51
|
-
presets: ["logical"]
|
|
52
|
-
},
|
|
53
|
-
messages: {
|
|
54
|
-
backward: {
|
|
55
|
-
primary: "Backreference '{{ backreference }}' will be ignored because it appears after the group '{{ group }}' in a lookbehind.",
|
|
56
|
-
secondary: ["In lookbehind assertions, matching proceeds right-to-left, so this backreference is evaluated before the group."],
|
|
57
|
-
suggestions: ["Remove the ignored backreference.", "Modify the backreference and/or group to not conflict with each other."]
|
|
58
|
-
},
|
|
59
|
-
disjunctive: {
|
|
60
|
-
primary: "Backreference '{{ backreference }}' will be ignored because it and the group '{{ group }}' are in different alternatives.",
|
|
61
|
-
secondary: ["When this backreference is evaluated, the referenced group has not participated in the match."],
|
|
62
|
-
suggestions: ["Remove the ignored backreference.", "Modify the backreference and/or group to not conflict with each other."]
|
|
63
|
-
},
|
|
64
|
-
forward: {
|
|
65
|
-
primary: "Backreference '{{ backreference }}' will be ignored because it appears before the group '{{ group }}' is defined.",
|
|
66
|
-
secondary: ["A forward reference to a group that hasn't been matched yet will always match empty."],
|
|
67
|
-
suggestions: ["Remove the ignored backreference.", "Modify the backreference and/or group to not conflict with each other."]
|
|
68
|
-
},
|
|
69
|
-
intoNegativeLookaround: {
|
|
70
|
-
primary: "Backreference '{{ backreference }}' will be ignored because the group '{{ group }}' is in a negative lookaround.",
|
|
71
|
-
secondary: ["When a negative lookaround succeeds, the groups inside it have not matched anything."],
|
|
72
|
-
suggestions: ["Remove the ignored backreference.", "Modify the backreference and/or group to not conflict with each other."]
|
|
73
|
-
},
|
|
74
|
-
nested: {
|
|
75
|
-
primary: "Backreference '{{ backreference }}' will be ignored because it is inside the group it references.",
|
|
76
|
-
secondary: ["A backreference inside its own group will always match empty since the group hasn't finished capturing yet."],
|
|
77
|
-
suggestions: ["Remove the ignored backreference.", "Modify the backreference and/or group to not conflict with each other."]
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
setup(context) {
|
|
81
|
-
function checkPattern(pattern, patternStart, flags) {
|
|
82
|
-
const regexpAst = parseRegexpAst(pattern, flags);
|
|
83
|
-
if (!regexpAst) return;
|
|
84
|
-
visitRegExpAST(regexpAst, { onBackreferenceEnter(backreference) {
|
|
85
|
-
const resolved = backreference.resolved;
|
|
86
|
-
const groups = Array.isArray(resolved) ? resolved : [resolved];
|
|
87
|
-
for (const group of groups) {
|
|
88
|
-
const problem = getUselessProblem(backreference, group);
|
|
89
|
-
if (problem) {
|
|
90
|
-
context.report({
|
|
91
|
-
data: {
|
|
92
|
-
backreference: backreference.raw,
|
|
93
|
-
group: group.raw
|
|
94
|
-
},
|
|
95
|
-
message: problem,
|
|
96
|
-
range: {
|
|
97
|
-
begin: patternStart + backreference.start,
|
|
98
|
-
end: patternStart + backreference.end
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
} });
|
|
105
|
-
}
|
|
106
|
-
function checkRegexLiteral(node, services) {
|
|
107
|
-
const details = getRegExpLiteralDetails(node, services);
|
|
108
|
-
checkPattern(details.pattern, details.start, details.flags);
|
|
109
|
-
}
|
|
110
|
-
function checkRegExpConstructor(node, services) {
|
|
111
|
-
const construction = getRegExpConstruction(node, services);
|
|
112
|
-
if (!construction) return;
|
|
113
|
-
checkPattern(construction.raw, construction.start + 1, construction.flags);
|
|
114
|
-
}
|
|
115
|
-
return { visitors: {
|
|
116
|
-
CallExpression: checkRegExpConstructor,
|
|
117
|
-
NewExpression: checkRegExpConstructor,
|
|
118
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
119
|
-
} };
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
//#endregion
|
|
123
|
-
export { regexUnnecessaryBackreferences_default as default };
|
|
124
|
-
|
|
125
|
-
//# sourceMappingURL=regexUnnecessaryBackreferences.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports character classes that wrap a single element that does not require brackets.";
|
|
3
|
-
readonly id: "regexUnnecessaryCharacterClasses";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessary", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexUnnecessaryCharacterClasses.d.ts.map
|
|
@@ -1,74 +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/regexUnnecessaryCharacterClasses.ts
|
|
7
|
-
function canUnwrapSingleElement(characterClass) {
|
|
8
|
-
if (characterClass.negate || characterClass.elements.length !== 1) return false;
|
|
9
|
-
const element = characterClass.elements[0];
|
|
10
|
-
switch (element.type) {
|
|
11
|
-
case "Character": return element.raw !== "=" && element.raw !== "\\b" && !/^\\[1-9]\d*$/.test(element.raw);
|
|
12
|
-
case "CharacterClassRange": return false;
|
|
13
|
-
default: return true;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function findUnnecessaryCharacterClasses(pattern, flags) {
|
|
17
|
-
const results = [];
|
|
18
|
-
let ast;
|
|
19
|
-
try {
|
|
20
|
-
ast = parseRegExpLiteral(new RegExp(pattern, flags));
|
|
21
|
-
} catch {
|
|
22
|
-
return results;
|
|
23
|
-
}
|
|
24
|
-
visitRegExpAST(ast, { onCharacterClassEnter(node) {
|
|
25
|
-
if (canUnwrapSingleElement(node)) results.push(node);
|
|
26
|
-
} });
|
|
27
|
-
return results;
|
|
28
|
-
}
|
|
29
|
-
var regexUnnecessaryCharacterClasses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
30
|
-
about: {
|
|
31
|
-
description: "Reports character classes that wrap a single element that does not require brackets.",
|
|
32
|
-
id: "regexUnnecessaryCharacterClasses",
|
|
33
|
-
presets: ["logical", "logicalStrict"]
|
|
34
|
-
},
|
|
35
|
-
messages: { unnecessary: {
|
|
36
|
-
primary: "This character class wraps a single element that does not require brackets.",
|
|
37
|
-
secondary: ["Brackets are used to encapsulate multiple classes of characters.", "Single-element character classes can be simplified by removing the brackets."],
|
|
38
|
-
suggestions: ["Remove the surrounding brackets from this character class."]
|
|
39
|
-
} },
|
|
40
|
-
setup(context) {
|
|
41
|
-
function checkRegexLiteral(node, services) {
|
|
42
|
-
const { flags, pattern, start } = getRegExpLiteralDetails(node, services);
|
|
43
|
-
const unnecessaryClasses = findUnnecessaryCharacterClasses(pattern, flags);
|
|
44
|
-
for (const characterClass of unnecessaryClasses) context.report({
|
|
45
|
-
message: "unnecessary",
|
|
46
|
-
range: {
|
|
47
|
-
begin: start + characterClass.start - 1,
|
|
48
|
-
end: start + characterClass.end - 1
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
function checkRegExpConstructor(node, services) {
|
|
53
|
-
const construction = getRegExpConstruction(node, services);
|
|
54
|
-
if (!construction) return;
|
|
55
|
-
const unnecessaryClasses = findUnnecessaryCharacterClasses(construction.pattern.replace(/\\\\/g, "\\"), construction.flags);
|
|
56
|
-
for (const characterClass of unnecessaryClasses) context.report({
|
|
57
|
-
message: "unnecessary",
|
|
58
|
-
range: {
|
|
59
|
-
begin: construction.start + characterClass.start,
|
|
60
|
-
end: construction.start + characterClass.end
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
return { visitors: {
|
|
65
|
-
CallExpression: checkRegExpConstructor,
|
|
66
|
-
NewExpression: checkRegExpConstructor,
|
|
67
|
-
RegularExpressionLiteral: checkRegexLiteral
|
|
68
|
-
} };
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
//#endregion
|
|
72
|
-
export { regexUnnecessaryCharacterClasses_default as default };
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=regexUnnecessaryCharacterClasses.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports character class ranges that span only one or two characters.";
|
|
3
|
-
readonly id: "regexUnnecessaryCharacterRanges";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "adjacent" | "identity", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexUnnecessaryCharacterRanges.d.ts.map
|