@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,277 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/redundantTypeConstituents.ts
|
|
6
|
-
const literalToPrimitiveTypeFlags = {
|
|
7
|
-
[ts.TypeFlags.BigIntLiteral]: ts.TypeFlags.BigInt,
|
|
8
|
-
[ts.TypeFlags.BooleanLiteral]: ts.TypeFlags.Boolean,
|
|
9
|
-
[ts.TypeFlags.NumberLiteral]: ts.TypeFlags.Number,
|
|
10
|
-
[ts.TypeFlags.StringLiteral]: ts.TypeFlags.String,
|
|
11
|
-
[ts.TypeFlags.TemplateLiteral]: ts.TypeFlags.String
|
|
12
|
-
};
|
|
13
|
-
const literalTypeFlags = [
|
|
14
|
-
ts.TypeFlags.BigIntLiteral,
|
|
15
|
-
ts.TypeFlags.BooleanLiteral,
|
|
16
|
-
ts.TypeFlags.NumberLiteral,
|
|
17
|
-
ts.TypeFlags.StringLiteral,
|
|
18
|
-
ts.TypeFlags.TemplateLiteral
|
|
19
|
-
];
|
|
20
|
-
const primitiveTypeFlags = [
|
|
21
|
-
ts.TypeFlags.BigInt,
|
|
22
|
-
ts.TypeFlags.Boolean,
|
|
23
|
-
ts.TypeFlags.Number,
|
|
24
|
-
ts.TypeFlags.String
|
|
25
|
-
];
|
|
26
|
-
const primitiveTypeFlagNames = {
|
|
27
|
-
[ts.TypeFlags.BigInt]: "bigint",
|
|
28
|
-
[ts.TypeFlags.Boolean]: "boolean",
|
|
29
|
-
[ts.TypeFlags.Number]: "number",
|
|
30
|
-
[ts.TypeFlags.String]: "string"
|
|
31
|
-
};
|
|
32
|
-
function describeLiteralType(type) {
|
|
33
|
-
if (type.isStringLiteral()) return JSON.stringify(type.value);
|
|
34
|
-
if (tsutils.isBigIntLiteralType(type)) return `${type.value.negative ? "-" : ""}${type.value.base10Value}n`;
|
|
35
|
-
if (type.isLiteral()) return String(type.value);
|
|
36
|
-
if (tsutils.isIntrinsicErrorType(type) && type.aliasSymbol) return String(type.aliasSymbol.escapedName);
|
|
37
|
-
if (type.flags & ts.TypeFlags.Any) return "any";
|
|
38
|
-
if (type.flags & ts.TypeFlags.Never) return "never";
|
|
39
|
-
if (type.flags & ts.TypeFlags.Unknown) return "unknown";
|
|
40
|
-
if (tsutils.isTemplateLiteralType(type)) return "template literal type";
|
|
41
|
-
if (tsutils.isTrueLiteralType(type)) return "true";
|
|
42
|
-
if (tsutils.isFalseLiteralType(type)) return "false";
|
|
43
|
-
return "literal type";
|
|
44
|
-
}
|
|
45
|
-
function isDescendantOf(node, potentialAncestor) {
|
|
46
|
-
let current = node;
|
|
47
|
-
while (current) {
|
|
48
|
-
if (current === potentialAncestor) return true;
|
|
49
|
-
current = current.parent;
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
function isNodeInsideReturnType(node) {
|
|
54
|
-
let current = node.parent;
|
|
55
|
-
while (current) {
|
|
56
|
-
if (current.kind === ts.SyntaxKind.FunctionDeclaration || current.kind === ts.SyntaxKind.FunctionExpression || current.kind === ts.SyntaxKind.ArrowFunction || current.kind === ts.SyntaxKind.MethodDeclaration || current.kind === ts.SyntaxKind.MethodSignature || current.kind === ts.SyntaxKind.FunctionType || current.kind === ts.SyntaxKind.CallSignature || current.kind === ts.SyntaxKind.ConstructSignature || current.kind === ts.SyntaxKind.ConstructorType) return !!current.type && isDescendantOf(node, current.type);
|
|
57
|
-
current = current.parent;
|
|
58
|
-
}
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
function unionTypePartsUnlessBoolean(type) {
|
|
62
|
-
if (type.isUnion() && type.types.length === 2 && type.types[0] && type.types[1] && tsutils.isFalseLiteralType(type.types[0]) && tsutils.isTrueLiteralType(type.types[1])) return [type];
|
|
63
|
-
return tsutils.unionConstituents(type);
|
|
64
|
-
}
|
|
65
|
-
var redundantTypeConstituents_default = ruleCreator.createRule(typescriptLanguage, {
|
|
66
|
-
about: {
|
|
67
|
-
description: "Reports union and intersection type constituents that are redundant or override other types.",
|
|
68
|
-
id: "redundantTypeConstituents",
|
|
69
|
-
presets: ["logical", "logicalStrict"]
|
|
70
|
-
},
|
|
71
|
-
messages: {
|
|
72
|
-
errorTypeOverrides: {
|
|
73
|
-
primary: "{{ typeName }} is an 'error' type that acts as 'any' and overrides all other types in this {{ container }} type.",
|
|
74
|
-
secondary: ["Error types that resolve to 'any' make the entire union or intersection effectively 'any'.", "This typically indicates a type reference that TypeScript couldn't resolve."],
|
|
75
|
-
suggestions: ["Remove the redundant type constituent."]
|
|
76
|
-
},
|
|
77
|
-
literalOverridden: {
|
|
78
|
-
primary: "{{ literal }} is overridden by {{ primitive }} in this union type.",
|
|
79
|
-
secondary: ["When a primitive type like 'string' is in a union with a string literal, the literal is redundant.", "The primitive type already includes all possible literal values."],
|
|
80
|
-
suggestions: ["Remove the literal type."]
|
|
81
|
-
},
|
|
82
|
-
overridden: {
|
|
83
|
-
primary: "{{ typeName }} is overridden by other types in this {{ container }} type.",
|
|
84
|
-
secondary: ["This type constituent has no effect because it is subsumed by other types in the {{ container }}.", "Consider removing it to simplify the type."],
|
|
85
|
-
suggestions: ["Remove the redundant type."]
|
|
86
|
-
},
|
|
87
|
-
overrides: {
|
|
88
|
-
primary: "{{ typeName }} overrides all other types in this {{ container }} type.",
|
|
89
|
-
secondary: ["This type makes all other constituents in the {{ container }} redundant.", "Consider simplifying to just this type."],
|
|
90
|
-
suggestions: ["Simplify to just this type."]
|
|
91
|
-
},
|
|
92
|
-
primitiveOverridden: {
|
|
93
|
-
primary: "{{ primitive }} is overridden by {{ literal }} in this intersection type.",
|
|
94
|
-
secondary: ["When a primitive type intersects with its literal type, the result is the literal type.", "The primitive type is redundant in this intersection."],
|
|
95
|
-
suggestions: ["Remove the primitive type."]
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
setup(context) {
|
|
99
|
-
return { visitors: {
|
|
100
|
-
IntersectionType: (node, { sourceFile, typeChecker }) => {
|
|
101
|
-
const seenLiteralTypes = /* @__PURE__ */ new Map();
|
|
102
|
-
const seenPrimitiveTypes = /* @__PURE__ */ new Map();
|
|
103
|
-
const seenUnionTypes = /* @__PURE__ */ new Map();
|
|
104
|
-
for (const typeNode of node.types) {
|
|
105
|
-
const typeParts = unionTypePartsUnlessBoolean(typeChecker.getTypeAtLocation(typeNode));
|
|
106
|
-
for (const typePart of typeParts) {
|
|
107
|
-
const typeName = describeLiteralType(typePart);
|
|
108
|
-
if (typePart.flags === ts.TypeFlags.Any) {
|
|
109
|
-
context.report({
|
|
110
|
-
data: {
|
|
111
|
-
container: "intersection",
|
|
112
|
-
typeName
|
|
113
|
-
},
|
|
114
|
-
message: typeName !== "any" ? "errorTypeOverrides" : "overrides",
|
|
115
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
116
|
-
});
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
if (typePart.flags === ts.TypeFlags.Never) {
|
|
120
|
-
context.report({
|
|
121
|
-
data: {
|
|
122
|
-
container: "intersection",
|
|
123
|
-
typeName
|
|
124
|
-
},
|
|
125
|
-
message: "overrides",
|
|
126
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
127
|
-
});
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
if (typePart.flags === ts.TypeFlags.Unknown) {
|
|
131
|
-
context.report({
|
|
132
|
-
data: {
|
|
133
|
-
container: "intersection",
|
|
134
|
-
typeName
|
|
135
|
-
},
|
|
136
|
-
message: "overridden",
|
|
137
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
138
|
-
});
|
|
139
|
-
continue;
|
|
140
|
-
}
|
|
141
|
-
for (const literalTypeFlag of literalTypeFlags) if (typePart.flags === literalTypeFlag) {
|
|
142
|
-
const primitiveFlag = literalToPrimitiveTypeFlags[literalTypeFlag];
|
|
143
|
-
if (primitiveFlag) {
|
|
144
|
-
const existing = seenLiteralTypes.get(primitiveFlag);
|
|
145
|
-
if (existing) existing.push(typeName);
|
|
146
|
-
else seenLiteralTypes.set(primitiveFlag, [typeName]);
|
|
147
|
-
}
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
150
|
-
for (const primitiveTypeFlag of primitiveTypeFlags) if (typePart.flags === primitiveTypeFlag) {
|
|
151
|
-
const existing = seenPrimitiveTypes.get(primitiveTypeFlag);
|
|
152
|
-
if (existing) existing.push(typeNode);
|
|
153
|
-
else seenPrimitiveTypes.set(primitiveTypeFlag, [typeNode]);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (typeParts.length >= 2) seenUnionTypes.set(typeNode, typeParts.map((typePart) => ({
|
|
157
|
-
typeFlags: typePart.flags,
|
|
158
|
-
typeName: describeLiteralType(typePart)
|
|
159
|
-
})));
|
|
160
|
-
}
|
|
161
|
-
if (seenUnionTypes.size) {
|
|
162
|
-
for (const [typeRef, typeValues] of seenUnionTypes) {
|
|
163
|
-
let primitiveFlag;
|
|
164
|
-
for (const { typeFlags } of typeValues) {
|
|
165
|
-
const mapped = literalToPrimitiveTypeFlags[typeFlags];
|
|
166
|
-
if (mapped && seenPrimitiveTypes.has(mapped)) primitiveFlag = mapped;
|
|
167
|
-
else {
|
|
168
|
-
primitiveFlag = void 0;
|
|
169
|
-
break;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
if (primitiveFlag !== void 0) context.report({
|
|
173
|
-
data: {
|
|
174
|
-
literal: typeValues.map((v) => v.typeName).join(" | "),
|
|
175
|
-
primitive: primitiveTypeFlagNames[primitiveFlag] ?? ""
|
|
176
|
-
},
|
|
177
|
-
message: "primitiveOverridden",
|
|
178
|
-
range: getTSNodeRange(typeRef, sourceFile)
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
for (const [primitiveTypeFlag, typeNodes] of seenPrimitiveTypes) {
|
|
184
|
-
const matchedLiteralTypes = seenLiteralTypes.get(primitiveTypeFlag);
|
|
185
|
-
if (matchedLiteralTypes) for (const typeNode of typeNodes) context.report({
|
|
186
|
-
data: {
|
|
187
|
-
literal: matchedLiteralTypes.join(" | "),
|
|
188
|
-
primitive: primitiveTypeFlagNames[primitiveTypeFlag] ?? ""
|
|
189
|
-
},
|
|
190
|
-
message: "primitiveOverridden",
|
|
191
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
UnionType: (node, { sourceFile, typeChecker }) => {
|
|
196
|
-
const seenLiteralTypes = /* @__PURE__ */ new Map();
|
|
197
|
-
const seenPrimitiveTypes = /* @__PURE__ */ new Set();
|
|
198
|
-
for (const typeNode of node.types) {
|
|
199
|
-
const typeParts = unionTypePartsUnlessBoolean(typeChecker.getTypeAtLocation(typeNode));
|
|
200
|
-
for (const typePart of typeParts) {
|
|
201
|
-
const typeName = describeLiteralType(typePart);
|
|
202
|
-
if (typePart.flags === ts.TypeFlags.Any || typePart.flags === ts.TypeFlags.Unknown) {
|
|
203
|
-
context.report({
|
|
204
|
-
data: {
|
|
205
|
-
container: "union",
|
|
206
|
-
typeName
|
|
207
|
-
},
|
|
208
|
-
message: typePart.flags === ts.TypeFlags.Any && typeName !== "any" ? "errorTypeOverrides" : "overrides",
|
|
209
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
210
|
-
});
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
if (typePart.flags === ts.TypeFlags.Never && !isNodeInsideReturnType(node)) {
|
|
214
|
-
context.report({
|
|
215
|
-
data: {
|
|
216
|
-
container: "union",
|
|
217
|
-
typeName: "never"
|
|
218
|
-
},
|
|
219
|
-
message: "overridden",
|
|
220
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
221
|
-
});
|
|
222
|
-
continue;
|
|
223
|
-
}
|
|
224
|
-
for (const literalTypeFlag of literalTypeFlags) if (typePart.flags === literalTypeFlag) {
|
|
225
|
-
const primitiveFlag = literalToPrimitiveTypeFlags[literalTypeFlag];
|
|
226
|
-
if (primitiveFlag) {
|
|
227
|
-
const existing = seenLiteralTypes.get(primitiveFlag);
|
|
228
|
-
if (existing) existing.push({
|
|
229
|
-
literalValue: typeName,
|
|
230
|
-
typeNode
|
|
231
|
-
});
|
|
232
|
-
else seenLiteralTypes.set(primitiveFlag, [{
|
|
233
|
-
literalValue: typeName,
|
|
234
|
-
typeNode
|
|
235
|
-
}]);
|
|
236
|
-
}
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
for (const primitiveTypeFlag of primitiveTypeFlags) if ((typePart.flags & primitiveTypeFlag) !== 0) seenPrimitiveTypes.add(primitiveTypeFlag);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
const overriddenTypeNodes = /* @__PURE__ */ new Map();
|
|
243
|
-
for (const [primitiveTypeFlag, typeNodesWithText] of seenLiteralTypes) if (seenPrimitiveTypes.has(primitiveTypeFlag)) for (const { literalValue, typeNode } of typeNodesWithText) {
|
|
244
|
-
const existing = overriddenTypeNodes.get(typeNode);
|
|
245
|
-
if (existing) existing.push({
|
|
246
|
-
literalValue,
|
|
247
|
-
primitiveTypeFlag
|
|
248
|
-
});
|
|
249
|
-
else overriddenTypeNodes.set(typeNode, [{
|
|
250
|
-
literalValue,
|
|
251
|
-
primitiveTypeFlag
|
|
252
|
-
}]);
|
|
253
|
-
}
|
|
254
|
-
for (const [typeNode, typeFlagsWithText] of overriddenTypeNodes) {
|
|
255
|
-
const grouped = /* @__PURE__ */ new Map();
|
|
256
|
-
for (const { literalValue, primitiveTypeFlag } of typeFlagsWithText) {
|
|
257
|
-
const existing = grouped.get(primitiveTypeFlag);
|
|
258
|
-
if (existing) existing.push(literalValue);
|
|
259
|
-
else grouped.set(primitiveTypeFlag, [literalValue]);
|
|
260
|
-
}
|
|
261
|
-
for (const [primitiveTypeFlag, literals] of grouped) context.report({
|
|
262
|
-
data: {
|
|
263
|
-
literal: literals.join(" | "),
|
|
264
|
-
primitive: primitiveTypeFlagNames[primitiveTypeFlag] ?? ""
|
|
265
|
-
},
|
|
266
|
-
message: "literalOverridden",
|
|
267
|
-
range: getTSNodeRange(typeNode, sourceFile)
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
} };
|
|
272
|
-
}
|
|
273
|
-
});
|
|
274
|
-
//#endregion
|
|
275
|
-
export { redundantTypeConstituents_default as default };
|
|
276
|
-
|
|
277
|
-
//# sourceMappingURL=redundantTypeConstituents.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports `matchAll()` and `replaceAll()` calls with regex arguments missing the global flag.";
|
|
3
|
-
readonly id: "regexAllGlobalFlags";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingGlobalFlag", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexAllGlobalFlags.d.ts.map
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/regexAllGlobalFlags.ts
|
|
5
|
-
function getRegexFlags(node, sourceFile) {
|
|
6
|
-
switch (node.kind) {
|
|
7
|
-
case ts.SyntaxKind.CallExpression:
|
|
8
|
-
case ts.SyntaxKind.NewExpression:
|
|
9
|
-
if (ts.isIdentifier(node.expression) && node.expression.text === "RegExp" && node.arguments) {
|
|
10
|
-
if (node.arguments.length < 2) return "";
|
|
11
|
-
const flagsArg = node.arguments[1];
|
|
12
|
-
if (ts.isStringLiteral(flagsArg)) return flagsArg.text;
|
|
13
|
-
}
|
|
14
|
-
return;
|
|
15
|
-
case ts.SyntaxKind.RegularExpressionLiteral: {
|
|
16
|
-
const text = node.getText(sourceFile);
|
|
17
|
-
const lastSlash = text.lastIndexOf("/");
|
|
18
|
-
return lastSlash >= 0 ? text.slice(lastSlash + 1) : "";
|
|
19
|
-
}
|
|
20
|
-
default: return;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
var regexAllGlobalFlags_default = ruleCreator.createRule(typescriptLanguage, {
|
|
24
|
-
about: {
|
|
25
|
-
description: "Reports `matchAll()` and `replaceAll()` calls with regex arguments missing the global flag.",
|
|
26
|
-
id: "regexAllGlobalFlags",
|
|
27
|
-
presets: ["logical"]
|
|
28
|
-
},
|
|
29
|
-
messages: { missingGlobalFlag: {
|
|
30
|
-
primary: "The regex argument to `{{ method }}()` requires the global (`g`) flag.",
|
|
31
|
-
secondary: ["String.prototype.{{ method }}() throws a TypeError at runtime if the regex argument lacks the global flag."],
|
|
32
|
-
suggestions: ["Add the global (g) flag to the regex."]
|
|
33
|
-
} },
|
|
34
|
-
setup(context) {
|
|
35
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
36
|
-
if (!ts.isPropertyAccessExpression(node.expression)) return;
|
|
37
|
-
const methodName = node.expression.name.text;
|
|
38
|
-
if (methodName !== "matchAll" && methodName !== "replaceAll") return;
|
|
39
|
-
const expectedArgCount = methodName === "matchAll" ? 1 : 2;
|
|
40
|
-
if (node.arguments.length < expectedArgCount) return;
|
|
41
|
-
const firstArg = node.arguments[0];
|
|
42
|
-
if (!(typeChecker.getTypeAtLocation(node.expression.expression).flags & ts.TypeFlags.StringLike)) return;
|
|
43
|
-
const flags = getRegexFlags(firstArg, sourceFile);
|
|
44
|
-
if (flags === void 0 || flags.includes("g")) return;
|
|
45
|
-
context.report({
|
|
46
|
-
data: { method: methodName },
|
|
47
|
-
message: "missingGlobalFlag",
|
|
48
|
-
range: getTSNodeRange(firstArg, sourceFile)
|
|
49
|
-
});
|
|
50
|
-
} } };
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
//#endregion
|
|
54
|
-
export { regexAllGlobalFlags_default as default };
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=regexAllGlobalFlags.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports regex patterns that use ambiguous or invalid syntax from Annex B.";
|
|
3
|
-
readonly id: "regexAmbiguousInvalidity";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "incompleteBackreference" | "incompleteEscapeSequence" | "invalidControlEscape" | "invalidPropertyEscape" | "invalidRange" | "octalEscape" | "quantifiedAssertion" | "regexMessage" | "unescapedSourceCharacter" | "uselessEscape", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexAmbiguousInvalidity.d.ts.map
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
import { RegExpParser, RegExpValidator, visitRegExpAST } from "@eslint-community/regexpp";
|
|
5
|
-
//#region src/rules/regexAmbiguousInvalidity.ts
|
|
6
|
-
const validator = new RegExpValidator({
|
|
7
|
-
ecmaVersion: 2020,
|
|
8
|
-
strict: true
|
|
9
|
-
});
|
|
10
|
-
const CHARACTER_CLASS_SYNTAX_CHARACTERS = new Set("\\/()[]{}^$.|-+*?".split(""));
|
|
11
|
-
const SYNTAX_CHARACTERS = new Set("\\/()[]{}^$.|+*?".split(""));
|
|
12
|
-
function isControlEscape(raw) {
|
|
13
|
-
return /^\\c[A-Za-z]$/u.test(raw);
|
|
14
|
-
}
|
|
15
|
-
function isEscapeSequence(raw) {
|
|
16
|
-
return isOctalEscape(raw) || isControlEscape(raw) || isHexadecimalEscape(raw) || isUnicodeEscape(raw) || isUnicodeCodePointEscape(raw);
|
|
17
|
-
}
|
|
18
|
-
function isHexadecimalEscape(raw) {
|
|
19
|
-
return /^\\x[\dA-Fa-f]{2}$/u.test(raw);
|
|
20
|
-
}
|
|
21
|
-
function isOctalEscape(raw) {
|
|
22
|
-
return /^\\[0-7]{1,3}$/u.test(raw);
|
|
23
|
-
}
|
|
24
|
-
function isUnicodeCodePointEscape(raw) {
|
|
25
|
-
return /^\\u\{[\dA-Fa-f]{1,8}\}$/u.test(raw);
|
|
26
|
-
}
|
|
27
|
-
function isUnicodeEscape(raw) {
|
|
28
|
-
return /^\\u[\dA-Fa-f]{4}$/u.test(raw);
|
|
29
|
-
}
|
|
30
|
-
function parseFlags(flagsStr) {
|
|
31
|
-
return {
|
|
32
|
-
unicode: flagsStr.includes("u"),
|
|
33
|
-
unicodeSets: flagsStr.includes("v")
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function validateRegExpPattern(pattern, flags) {
|
|
37
|
-
try {
|
|
38
|
-
validator.validatePattern(pattern, void 0, void 0, flags);
|
|
39
|
-
return null;
|
|
40
|
-
} catch (error) {
|
|
41
|
-
return error instanceof Error ? error.message : null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function checkPatternWithRegexpp(pattern, flags) {
|
|
45
|
-
if (flags.unicode || flags.unicodeSets) return [];
|
|
46
|
-
const issues = [];
|
|
47
|
-
const parser = new RegExpParser();
|
|
48
|
-
let ast;
|
|
49
|
-
try {
|
|
50
|
-
ast = parser.parsePattern(pattern, void 0, void 0, flags);
|
|
51
|
-
} catch {
|
|
52
|
-
const message = validateRegExpPattern(pattern, flags);
|
|
53
|
-
if (message) issues.push({
|
|
54
|
-
data: { message },
|
|
55
|
-
end: pattern.length,
|
|
56
|
-
message: "regexMessage",
|
|
57
|
-
start: 0
|
|
58
|
-
});
|
|
59
|
-
return issues;
|
|
60
|
-
}
|
|
61
|
-
let reported = false;
|
|
62
|
-
let hasNamedBackreference = false;
|
|
63
|
-
visitRegExpAST(ast, {
|
|
64
|
-
onBackreferenceEnter(bNode) {
|
|
65
|
-
if (typeof bNode.ref === "string") hasNamedBackreference = true;
|
|
66
|
-
},
|
|
67
|
-
onCharacterClassEnter(ccNode) {
|
|
68
|
-
for (let i = 0; i < ccNode.elements.length; i++) {
|
|
69
|
-
const current = ccNode.elements[i];
|
|
70
|
-
if (current?.type === "CharacterSet") {
|
|
71
|
-
const next = ccNode.elements[i + 1];
|
|
72
|
-
const nextNext = ccNode.elements[i + 2];
|
|
73
|
-
if (next?.raw === "-" && nextNext) {
|
|
74
|
-
issues.push({
|
|
75
|
-
data: {},
|
|
76
|
-
end: current.end,
|
|
77
|
-
message: "invalidRange",
|
|
78
|
-
start: current.start
|
|
79
|
-
});
|
|
80
|
-
reported = true;
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
const prev = ccNode.elements[i - 1];
|
|
84
|
-
const prevPrev = ccNode.elements[i - 2];
|
|
85
|
-
if (prev?.raw === "-" && prevPrev && prevPrev.type !== "CharacterClassRange") {
|
|
86
|
-
issues.push({
|
|
87
|
-
data: {},
|
|
88
|
-
end: current.end,
|
|
89
|
-
message: "invalidRange",
|
|
90
|
-
start: current.start
|
|
91
|
-
});
|
|
92
|
-
reported = true;
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
onCharacterEnter(cNode) {
|
|
99
|
-
if (cNode.raw === "\\") {
|
|
100
|
-
issues.push({
|
|
101
|
-
data: {},
|
|
102
|
-
end: cNode.end,
|
|
103
|
-
message: "invalidControlEscape",
|
|
104
|
-
start: cNode.start
|
|
105
|
-
});
|
|
106
|
-
reported = true;
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (cNode.raw === "\\u" || cNode.raw === "\\x") {
|
|
110
|
-
issues.push({
|
|
111
|
-
data: { expr: cNode.raw },
|
|
112
|
-
end: cNode.end,
|
|
113
|
-
message: "incompleteEscapeSequence",
|
|
114
|
-
start: cNode.start
|
|
115
|
-
});
|
|
116
|
-
reported = true;
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (cNode.raw === "\\p" || cNode.raw === "\\P") {
|
|
120
|
-
issues.push({
|
|
121
|
-
data: { expr: cNode.raw },
|
|
122
|
-
end: cNode.end,
|
|
123
|
-
message: "invalidPropertyEscape",
|
|
124
|
-
start: cNode.start
|
|
125
|
-
});
|
|
126
|
-
reported = true;
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (cNode.value !== 0 && isOctalEscape(cNode.raw)) {
|
|
130
|
-
issues.push({
|
|
131
|
-
data: {
|
|
132
|
-
escape: cNode.raw,
|
|
133
|
-
hex: `\\x${cNode.value.toString(16).padStart(2, "0")}`
|
|
134
|
-
},
|
|
135
|
-
end: cNode.end,
|
|
136
|
-
message: "octalEscape",
|
|
137
|
-
start: cNode.start
|
|
138
|
-
});
|
|
139
|
-
reported = true;
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const insideCharClass = cNode.parent.type === "CharacterClass" || cNode.parent.type === "CharacterClassRange";
|
|
143
|
-
if (!insideCharClass) {
|
|
144
|
-
if (cNode.raw === "\\k") {
|
|
145
|
-
issues.push({
|
|
146
|
-
data: { expr: cNode.raw },
|
|
147
|
-
end: cNode.end,
|
|
148
|
-
message: "incompleteBackreference",
|
|
149
|
-
start: cNode.start
|
|
150
|
-
});
|
|
151
|
-
reported = true;
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (cNode.raw === "{" || cNode.raw === "}" || cNode.raw === "]") {
|
|
155
|
-
issues.push({
|
|
156
|
-
data: { character: cNode.raw },
|
|
157
|
-
end: cNode.end,
|
|
158
|
-
message: "unescapedSourceCharacter",
|
|
159
|
-
start: cNode.start
|
|
160
|
-
});
|
|
161
|
-
reported = true;
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (isEscapeSequence(cNode.raw)) return;
|
|
166
|
-
if (cNode.raw.startsWith("\\")) {
|
|
167
|
-
const identity = cNode.raw.slice(1);
|
|
168
|
-
const syntaxChars = insideCharClass ? CHARACTER_CLASS_SYNTAX_CHARACTERS : SYNTAX_CHARACTERS;
|
|
169
|
-
if (cNode.value === identity.charCodeAt(0) && !syntaxChars.has(identity)) {
|
|
170
|
-
issues.push({
|
|
171
|
-
data: { escaped: identity },
|
|
172
|
-
end: cNode.end,
|
|
173
|
-
message: "uselessEscape",
|
|
174
|
-
start: cNode.start
|
|
175
|
-
});
|
|
176
|
-
reported = true;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
},
|
|
180
|
-
onQuantifierEnter(quantifierNode) {
|
|
181
|
-
if (quantifierNode.element.type === "Assertion") {
|
|
182
|
-
issues.push({
|
|
183
|
-
data: {},
|
|
184
|
-
end: quantifierNode.end,
|
|
185
|
-
message: "quantifiedAssertion",
|
|
186
|
-
start: quantifierNode.start
|
|
187
|
-
});
|
|
188
|
-
reported = true;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
if (hasNamedBackreference) return issues;
|
|
193
|
-
if (!reported) {
|
|
194
|
-
const message = validateRegExpPattern(pattern, flags);
|
|
195
|
-
if (message) issues.push({
|
|
196
|
-
data: { message },
|
|
197
|
-
end: pattern.length,
|
|
198
|
-
message: "regexMessage",
|
|
199
|
-
start: 0
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return issues;
|
|
203
|
-
}
|
|
204
|
-
var regexAmbiguousInvalidity_default = ruleCreator.createRule(typescriptLanguage, {
|
|
205
|
-
about: {
|
|
206
|
-
description: "Reports regex patterns that use ambiguous or invalid syntax from Annex B.",
|
|
207
|
-
id: "regexAmbiguousInvalidity",
|
|
208
|
-
presets: ["logical", "logicalStrict"]
|
|
209
|
-
},
|
|
210
|
-
messages: {
|
|
211
|
-
incompleteBackreference: {
|
|
212
|
-
primary: "Incomplete backreference '{{ expr }}'.",
|
|
213
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Either use a valid backreference or remove the useless escaping."],
|
|
214
|
-
suggestions: ["Complete the backreference or remove the escape."]
|
|
215
|
-
},
|
|
216
|
-
incompleteEscapeSequence: {
|
|
217
|
-
primary: "Incomplete escape sequence '{{ expr }}'.",
|
|
218
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Either use a valid escape sequence or remove the useless escaping."],
|
|
219
|
-
suggestions: ["Complete the escape sequence or remove the escape."]
|
|
220
|
-
},
|
|
221
|
-
invalidControlEscape: {
|
|
222
|
-
primary: "Invalid or incomplete control escape sequence.",
|
|
223
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Either use a valid control escape sequence or escape the standalone backslash."],
|
|
224
|
-
suggestions: ["Use a valid control escape like \\cA or escape the backslash."]
|
|
225
|
-
},
|
|
226
|
-
invalidPropertyEscape: {
|
|
227
|
-
primary: "Invalid property escape sequence '{{ expr }}'.",
|
|
228
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Either use a valid property escape sequence or remove the useless escaping."],
|
|
229
|
-
suggestions: ["Use a valid Unicode property escape like \\p{L} with the 'u' flag."]
|
|
230
|
-
},
|
|
231
|
-
invalidRange: {
|
|
232
|
-
primary: "Invalid character class range. A character set cannot be the minimum or maximum of a character class range.",
|
|
233
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Either escape the `-` or fix the character class range."],
|
|
234
|
-
suggestions: ["Escape the `-` character or reorder the character class."]
|
|
235
|
-
},
|
|
236
|
-
octalEscape: {
|
|
237
|
-
primary: "Invalid legacy octal escape sequence '{{ escape }}'. Use a hexadecimal escape instead.",
|
|
238
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Octal escapes can be confused with backreferences."],
|
|
239
|
-
suggestions: ["Replace with hexadecimal escape '{{ hex }}'."]
|
|
240
|
-
},
|
|
241
|
-
quantifiedAssertion: {
|
|
242
|
-
primary: "Assertions are not allowed to be quantified directly.",
|
|
243
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Wrap the assertion in a non-capturing group if you need to quantify it."],
|
|
244
|
-
suggestions: ["Wrap the assertion in a non-capturing group: (?:...)"]
|
|
245
|
-
},
|
|
246
|
-
regexMessage: {
|
|
247
|
-
primary: "{{ message }}.",
|
|
248
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Consider using strict regex syntax for clarity and cross-platform compatibility."],
|
|
249
|
-
suggestions: ["Fix the regex syntax error."]
|
|
250
|
-
},
|
|
251
|
-
unescapedSourceCharacter: {
|
|
252
|
-
primary: "Unescaped source character '{{ character }}' should be escaped.",
|
|
253
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Consider using strict regex syntax for clarity and cross-platform compatibility."],
|
|
254
|
-
suggestions: ["Escape the character with a backslash."]
|
|
255
|
-
},
|
|
256
|
-
uselessEscape: {
|
|
257
|
-
primary: "Useless escape '\\{{ escaped }}'.",
|
|
258
|
-
secondary: ["This regex uses syntax from ECMAScript Annex B which is ambiguous or deprecated.", "Identity escapes with non-syntax characters are forbidden in strict mode."],
|
|
259
|
-
suggestions: ["Remove the unnecessary backslash."]
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
setup(context) {
|
|
263
|
-
function reportIssues(issues, start) {
|
|
264
|
-
for (const issue of issues) context.report({
|
|
265
|
-
data: issue.data,
|
|
266
|
-
message: issue.message,
|
|
267
|
-
range: {
|
|
268
|
-
begin: start + issue.start + 1,
|
|
269
|
-
end: start + issue.end + 1
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
function checkCallOrNewExpression(node, { sourceFile, typeChecker }) {
|
|
274
|
-
if (!ts.isIdentifier(node.expression) || node.expression.text !== "RegExp" || !isGlobalDeclarationOfName(node.expression, "RegExp", typeChecker) || !node.arguments?.length) return;
|
|
275
|
-
const patternArg = node.arguments[0];
|
|
276
|
-
if (!ts.isStringLiteral(patternArg)) return;
|
|
277
|
-
const flagsArg = node.arguments[1];
|
|
278
|
-
const flags = parseFlags(flagsArg && ts.isStringLiteral(flagsArg) ? flagsArg.text : "");
|
|
279
|
-
reportIssues(checkPatternWithRegexpp(patternArg.text, flags), patternArg.getStart(sourceFile));
|
|
280
|
-
}
|
|
281
|
-
return { visitors: {
|
|
282
|
-
CallExpression: checkCallOrNewExpression,
|
|
283
|
-
NewExpression: checkCallOrNewExpression,
|
|
284
|
-
RegularExpressionLiteral: (node, { sourceFile }) => {
|
|
285
|
-
const text = node.getText(sourceFile);
|
|
286
|
-
const lastSlash = text.lastIndexOf("/");
|
|
287
|
-
if (lastSlash <= 0) return;
|
|
288
|
-
const flags = parseFlags(text.slice(lastSlash + 1));
|
|
289
|
-
reportIssues(checkPatternWithRegexpp(text.slice(1, lastSlash), flags), node.getStart(sourceFile));
|
|
290
|
-
}
|
|
291
|
-
} };
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
//#endregion
|
|
295
|
-
export { regexAmbiguousInvalidity_default as default };
|
|
296
|
-
|
|
297
|
-
//# sourceMappingURL=regexAmbiguousInvalidity.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports character class elements that can be simplified to ranges.";
|
|
3
|
-
readonly id: "regexCharacterClassRanges";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferRange", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=regexCharacterClassRanges.d.ts.map
|