@flint.fyi/ts 0.21.0 → 0.23.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} +1 -1
- package/dist/index.mjs +22468 -0
- package/package.json +9 -8
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -619
- package/lib/rules/accessorPairGroups.d.ts +0 -9
- package/lib/rules/accessorPairGroups.js +0 -46
- package/lib/rules/accessorPairTypes.d.ts +0 -9
- package/lib/rules/accessorPairTypes.js +0 -70
- package/lib/rules/accessorThisRecursion.d.ts +0 -9
- package/lib/rules/accessorThisRecursion.js +0 -63
- package/lib/rules/anyArguments.d.ts +0 -9
- package/lib/rules/anyArguments.js +0 -232
- package/lib/rules/anyAssignments.d.ts +0 -9
- package/lib/rules/anyAssignments.js +0 -263
- package/lib/rules/anyCalls.d.ts +0 -9
- package/lib/rules/anyCalls.js +0 -66
- package/lib/rules/anyMemberAccess.d.ts +0 -9
- package/lib/rules/anyMemberAccess.js +0 -83
- package/lib/rules/anyReturns.d.ts +0 -9
- package/lib/rules/anyReturns.js +0 -100
- package/lib/rules/arguments.d.ts +0 -9
- package/lib/rules/arguments.js +0 -36
- package/lib/rules/arrayCallbackReturns.d.ts +0 -9
- package/lib/rules/arrayCallbackReturns.js +0 -71
- package/lib/rules/arrayConstructors.d.ts +0 -9
- package/lib/rules/arrayConstructors.js +0 -45
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
- package/lib/rules/arrayElementDeletions.d.ts +0 -9
- package/lib/rules/arrayElementDeletions.js +0 -41
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
- package/lib/rules/arrayFilteredFinds.d.ts +0 -9
- package/lib/rules/arrayFilteredFinds.js +0 -72
- package/lib/rules/arrayFinds.d.ts +0 -9
- package/lib/rules/arrayFinds.js +0 -39
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMapMethods.js +0 -45
- package/lib/rules/arrayFlatMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMethods.js +0 -81
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
- package/lib/rules/arrayIncludes.d.ts +0 -9
- package/lib/rules/arrayIncludes.js +0 -51
- package/lib/rules/arrayIncludesMethods.d.ts +0 -9
- package/lib/rules/arrayIncludesMethods.js +0 -35
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
- package/lib/rules/arrayIndexOfMethods.js +0 -49
- package/lib/rules/arrayLoops.d.ts +0 -9
- package/lib/rules/arrayLoops.js +0 -34
- package/lib/rules/arrayMapIdentities.d.ts +0 -9
- package/lib/rules/arrayMapIdentities.js +0 -72
- package/lib/rules/arrayMutableReverses.d.ts +0 -9
- package/lib/rules/arrayMutableReverses.js +0 -37
- package/lib/rules/arrayMutableSorts.d.ts +0 -9
- package/lib/rules/arrayMutableSorts.js +0 -70
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
- package/lib/rules/arrayReduceTypeArguments.js +0 -62
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
- package/lib/rules/arraySomeMethods.d.ts +0 -9
- package/lib/rules/arraySomeMethods.js +0 -75
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
- package/lib/rules/arrayTypes.d.ts +0 -16
- package/lib/rules/arrayTypes.js +0 -109
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
- package/lib/rules/asConstAssertions.d.ts +0 -9
- package/lib/rules/asConstAssertions.js +0 -55
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
- package/lib/rules/assignmentOperatorShorthands.js +0 -45
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
- package/lib/rules/asyncFunctionAwaits.js +0 -53
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
- package/lib/rules/asyncPromiseExecutors.js +0 -39
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
- package/lib/rules/atAccesses.d.ts +0 -9
- package/lib/rules/atAccesses.js +0 -50
- package/lib/rules/builtinCoercions.d.ts +0 -9
- package/lib/rules/builtinCoercions.js +0 -115
- package/lib/rules/builtinConstructorNews.d.ts +0 -9
- package/lib/rules/builtinConstructorNews.js +0 -87
- package/lib/rules/caseDeclarations.d.ts +0 -9
- package/lib/rules/caseDeclarations.js +0 -38
- package/lib/rules/caseDuplicates.d.ts +0 -9
- package/lib/rules/caseDuplicates.js +0 -34
- package/lib/rules/caseFallthroughs.d.ts +0 -9
- package/lib/rules/caseFallthroughs.js +0 -74
- package/lib/rules/catchCallbackTypes.d.ts +0 -9
- package/lib/rules/catchCallbackTypes.js +0 -65
- package/lib/rules/caughtVariableNames.d.ts +0 -9
- package/lib/rules/caughtVariableNames.js +0 -38
- package/lib/rules/chainedAssignments.d.ts +0 -9
- package/lib/rules/chainedAssignments.js +0 -31
- package/lib/rules/charAtComparisons.d.ts +0 -9
- package/lib/rules/charAtComparisons.js +0 -53
- package/lib/rules/classAssignments.d.ts +0 -9
- package/lib/rules/classAssignments.js +0 -27
- package/lib/rules/classFieldDeclarations.d.ts +0 -9
- package/lib/rules/classFieldDeclarations.js +0 -38
- package/lib/rules/classLiteralProperties.d.ts +0 -9
- package/lib/rules/classLiteralProperties.js +0 -43
- package/lib/rules/classMemberDuplicates.d.ts +0 -9
- package/lib/rules/classMemberDuplicates.js +0 -69
- package/lib/rules/classMethodsThis.d.ts +0 -13
- package/lib/rules/classMethodsThis.js +0 -122
- package/lib/rules/combinedPushes.d.ts +0 -9
- package/lib/rules/combinedPushes.js +0 -54
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
- package/lib/rules/consecutiveNonNullAssertions.js +0 -37
- package/lib/rules/consoleCalls.d.ts +0 -8
- package/lib/rules/consoleCalls.js +0 -26
- package/lib/rules/constantAssignments.d.ts +0 -9
- package/lib/rules/constantAssignments.js +0 -39
- package/lib/rules/constructorGenericCalls.d.ts +0 -15
- package/lib/rules/constructorGenericCalls.js +0 -136
- package/lib/rules/constructorReturns.d.ts +0 -9
- package/lib/rules/constructorReturns.js +0 -39
- package/lib/rules/constructorSupers.d.ts +0 -9
- package/lib/rules/constructorSupers.js +0 -75
- package/lib/rules/dateConstructorClones.d.ts +0 -9
- package/lib/rules/dateConstructorClones.js +0 -35
- package/lib/rules/dateNowTimestamps.d.ts +0 -9
- package/lib/rules/dateNowTimestamps.js +0 -55
- package/lib/rules/debuggerStatements.d.ts +0 -9
- package/lib/rules/debuggerStatements.js +0 -31
- package/lib/rules/defaultCaseLast.d.ts +0 -9
- package/lib/rules/defaultCaseLast.js +0 -34
- package/lib/rules/defaultParameterLast.d.ts +0 -9
- package/lib/rules/defaultParameterLast.js +0 -40
- package/lib/rules/deprecated.d.ts +0 -9
- package/lib/rules/deprecated.js +0 -241
- package/lib/rules/destructuringConsistency.d.ts +0 -9
- package/lib/rules/destructuringConsistency.js +0 -104
- package/lib/rules/duplicateArguments.d.ts +0 -9
- package/lib/rules/duplicateArguments.js +0 -43
- package/lib/rules/dynamicDeletes.d.ts +0 -9
- package/lib/rules/dynamicDeletes.js +0 -35
- package/lib/rules/elseIfDuplicates.d.ts +0 -9
- package/lib/rules/elseIfDuplicates.js +0 -36
- package/lib/rules/elseReturns.d.ts +0 -9
- package/lib/rules/elseReturns.js +0 -65
- package/lib/rules/emptyBlocks.d.ts +0 -9
- package/lib/rules/emptyBlocks.js +0 -54
- package/lib/rules/emptyDestructures.d.ts +0 -9
- package/lib/rules/emptyDestructures.js +0 -32
- package/lib/rules/emptyEnums.d.ts +0 -9
- package/lib/rules/emptyEnums.js +0 -28
- package/lib/rules/emptyExports.d.ts +0 -9
- package/lib/rules/emptyExports.js +0 -58
- package/lib/rules/emptyFiles.d.ts +0 -9
- package/lib/rules/emptyFiles.js +0 -42
- package/lib/rules/emptyFunctions.d.ts +0 -9
- package/lib/rules/emptyFunctions.js +0 -59
- package/lib/rules/emptyModuleAttributes.d.ts +0 -9
- package/lib/rules/emptyModuleAttributes.js +0 -33
- package/lib/rules/emptyObjectTypes.d.ts +0 -9
- package/lib/rules/emptyObjectTypes.js +0 -45
- package/lib/rules/emptyStaticBlocks.d.ts +0 -9
- package/lib/rules/emptyStaticBlocks.js +0 -40
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
- package/lib/rules/emptyTypeParameterLists.js +0 -29
- package/lib/rules/enumInitializers.d.ts +0 -9
- package/lib/rules/enumInitializers.js +0 -52
- package/lib/rules/enumMemberLiterals.d.ts +0 -9
- package/lib/rules/enumMemberLiterals.js +0 -37
- package/lib/rules/enumValueConsistency.d.ts +0 -9
- package/lib/rules/enumValueConsistency.js +0 -54
- package/lib/rules/enumValueDuplicates.d.ts +0 -9
- package/lib/rules/enumValueDuplicates.js +0 -43
- package/lib/rules/equalityOperatorNegations.d.ts +0 -8
- package/lib/rules/equalityOperatorNegations.js +0 -58
- package/lib/rules/equalityOperators.d.ts +0 -9
- package/lib/rules/equalityOperators.js +0 -42
- package/lib/rules/errorMessages.d.ts +0 -9
- package/lib/rules/errorMessages.js +0 -54
- package/lib/rules/errorSubclassProperties.d.ts +0 -9
- package/lib/rules/errorSubclassProperties.js +0 -142
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
- package/lib/rules/escapeSequenceCasing.d.ts +0 -9
- package/lib/rules/escapeSequenceCasing.js +0 -73
- package/lib/rules/evals.d.ts +0 -9
- package/lib/rules/evals.js +0 -29
- package/lib/rules/evolvingVariableTypes.d.ts +0 -9
- package/lib/rules/evolvingVariableTypes.js +0 -31
- package/lib/rules/exceptionAssignments.d.ts +0 -9
- package/lib/rules/exceptionAssignments.js +0 -37
- package/lib/rules/explicitAnys.d.ts +0 -9
- package/lib/rules/explicitAnys.js +0 -53
- package/lib/rules/exponentiationOperators.d.ts +0 -9
- package/lib/rules/exponentiationOperators.js +0 -32
- package/lib/rules/exportFromImports.d.ts +0 -9
- package/lib/rules/exportFromImports.js +0 -117
- package/lib/rules/exportMutables.d.ts +0 -9
- package/lib/rules/exportMutables.js +0 -31
- package/lib/rules/exportUniqueNames.d.ts +0 -9
- package/lib/rules/exportUniqueNames.js +0 -63
- package/lib/rules/extraneousClasses.d.ts +0 -15
- package/lib/rules/extraneousClasses.js +0 -109
- package/lib/rules/fetchMethodBodies.d.ts +0 -9
- package/lib/rules/fetchMethodBodies.js +0 -70
- package/lib/rules/finallyStatementSafety.d.ts +0 -9
- package/lib/rules/finallyStatementSafety.js +0 -45
- package/lib/rules/forDirections.d.ts +0 -9
- package/lib/rules/forDirections.js +0 -73
- package/lib/rules/forInArrays.d.ts +0 -9
- package/lib/rules/forInArrays.js +0 -44
- package/lib/rules/forInGuards.d.ts +0 -8
- package/lib/rules/forInGuards.js +0 -42
- package/lib/rules/functionApplySpreads.d.ts +0 -9
- package/lib/rules/functionApplySpreads.js +0 -61
- package/lib/rules/functionAssignments.d.ts +0 -9
- package/lib/rules/functionAssignments.js +0 -27
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
- package/lib/rules/functionCurryingRedundancy.js +0 -51
- package/lib/rules/functionDeclarationStyles.d.ts +0 -15
- package/lib/rules/functionDeclarationStyles.js +0 -65
- package/lib/rules/functionNameMatches.d.ts +0 -9
- package/lib/rules/functionNameMatches.js +0 -72
- package/lib/rules/functionNewCalls.d.ts +0 -9
- package/lib/rules/functionNewCalls.js +0 -40
- package/lib/rules/generatorFunctionYields.d.ts +0 -9
- package/lib/rules/generatorFunctionYields.js +0 -48
- package/lib/rules/getterReturns.d.ts +0 -9
- package/lib/rules/getterReturns.js +0 -63
- package/lib/rules/globalAssignments.d.ts +0 -9
- package/lib/rules/globalAssignments.js +0 -45
- package/lib/rules/globalObjectCalls.d.ts +0 -9
- package/lib/rules/globalObjectCalls.js +0 -40
- package/lib/rules/globalThisAliases.d.ts +0 -9
- package/lib/rules/globalThisAliases.js +0 -45
- package/lib/rules/impliedEvals.d.ts +0 -9
- package/lib/rules/impliedEvals.js +0 -128
- package/lib/rules/importEmptyBlocks.d.ts +0 -9
- package/lib/rules/importEmptyBlocks.js +0 -51
- package/lib/rules/importTypeSideEffects.d.ts +0 -9
- package/lib/rules/importTypeSideEffects.js +0 -29
- package/lib/rules/indexedObjectTypes.d.ts +0 -15
- package/lib/rules/indexedObjectTypes.js +0 -81
- package/lib/rules/instanceOfArrays.d.ts +0 -9
- package/lib/rules/instanceOfArrays.js +0 -29
- package/lib/rules/irregularWhitespaces.d.ts +0 -15
- package/lib/rules/irregularWhitespaces.js +0 -95
- package/lib/rules/isNaNComparisons.d.ts +0 -9
- package/lib/rules/isNaNComparisons.js +0 -41
- package/lib/rules/literalConstructorWrappers.d.ts +0 -9
- package/lib/rules/literalConstructorWrappers.js +0 -62
- package/lib/rules/mathMethods.d.ts +0 -9
- package/lib/rules/mathMethods.js +0 -126
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
- package/lib/rules/meaninglessVoidOperators.js +0 -37
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
- package/lib/rules/misleadingVoidExpressions.js +0 -126
- package/lib/rules/moduleSpecifierLists.d.ts +0 -9
- package/lib/rules/moduleSpecifierLists.js +0 -90
- package/lib/rules/multilineAmbiguities.d.ts +0 -9
- package/lib/rules/multilineAmbiguities.js +0 -62
- package/lib/rules/namedDefaultExports.d.ts +0 -9
- package/lib/rules/namedDefaultExports.js +0 -58
- package/lib/rules/namespaceDeclarations.d.ts +0 -13
- package/lib/rules/namespaceDeclarations.js +0 -35
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
- package/lib/rules/namespaceKeywords.d.ts +0 -9
- package/lib/rules/namespaceKeywords.js +0 -38
- package/lib/rules/nativeObjectExtensions.d.ts +0 -9
- package/lib/rules/nativeObjectExtensions.js +0 -112
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
- package/lib/rules/negativeIndexLengthMethods.js +0 -178
- package/lib/rules/negativeZeroComparisons.d.ts +0 -9
- package/lib/rules/negativeZeroComparisons.js +0 -46
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
- package/lib/rules/nestedStandaloneIfs.js +0 -103
- package/lib/rules/newDefinitions.d.ts +0 -9
- package/lib/rules/newDefinitions.js +0 -82
- package/lib/rules/newExpressions.d.ts +0 -9
- package/lib/rules/newExpressions.js +0 -36
- package/lib/rules/newNativeNonConstructors.d.ts +0 -9
- package/lib/rules/newNativeNonConstructors.js +0 -37
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
- package/lib/rules/nonNullAssertionPlacement.js +0 -92
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
- package/lib/rules/nonNullableTypeAssertions.js +0 -76
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
- package/lib/rules/nonOctalDecimalEscapes.js +0 -46
- package/lib/rules/nullishCheckStyle.d.ts +0 -20
- package/lib/rules/nullishCheckStyle.js +0 -142
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
- package/lib/rules/nullishCoalescingOperators.js +0 -321
- package/lib/rules/numberMethodRanges.d.ts +0 -9
- package/lib/rules/numberMethodRanges.js +0 -72
- package/lib/rules/numberStaticMethods.d.ts +0 -9
- package/lib/rules/numberStaticMethods.js +0 -51
- package/lib/rules/numericErasingOperations.d.ts +0 -9
- package/lib/rules/numericErasingOperations.js +0 -44
- package/lib/rules/numericLiteralParsing.d.ts +0 -9
- package/lib/rules/numericLiteralParsing.js +0 -55
- package/lib/rules/numericPrecision.d.ts +0 -9
- package/lib/rules/numericPrecision.js +0 -100
- package/lib/rules/numericSeparatorGroups.d.ts +0 -9
- package/lib/rules/numericSeparatorGroups.js +0 -99
- package/lib/rules/objectAssignSpreads.d.ts +0 -9
- package/lib/rules/objectAssignSpreads.js +0 -51
- package/lib/rules/objectCalls.d.ts +0 -9
- package/lib/rules/objectCalls.js +0 -36
- package/lib/rules/objectEntriesMethods.d.ts +0 -9
- package/lib/rules/objectEntriesMethods.js +0 -80
- package/lib/rules/objectHasOwns.d.ts +0 -9
- package/lib/rules/objectHasOwns.js +0 -48
- package/lib/rules/objectKeyDuplicates.d.ts +0 -9
- package/lib/rules/objectKeyDuplicates.js +0 -61
- package/lib/rules/objectProto.d.ts +0 -9
- package/lib/rules/objectProto.js +0 -48
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
- package/lib/rules/objectPrototypeBuiltIns.js +0 -52
- package/lib/rules/objectShorthand.d.ts +0 -9
- package/lib/rules/objectShorthand.js +0 -82
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
- package/lib/rules/objectTypeDefinitions.d.ts +0 -9
- package/lib/rules/objectTypeDefinitions.js +0 -32
- package/lib/rules/octalEscapes.d.ts +0 -9
- package/lib/rules/octalEscapes.js +0 -56
- package/lib/rules/octalNumbers.d.ts +0 -9
- package/lib/rules/octalNumbers.js +0 -53
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
- package/lib/rules/operatorAssignmentShorthand.js +0 -75
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
- package/lib/rules/overloadSignaturesAdjacent.js +0 -138
- package/lib/rules/parameterReassignments.d.ts +0 -9
- package/lib/rules/parameterReassignments.js +0 -43
- package/lib/rules/parseIntRadixes.d.ts +0 -9
- package/lib/rules/parseIntRadixes.js +0 -57
- package/lib/rules/propertyAccessNotation.d.ts +0 -12
- package/lib/rules/propertyAccessNotation.js +0 -117
- package/lib/rules/recursionOnlyArguments.d.ts +0 -9
- package/lib/rules/recursionOnlyArguments.js +0 -62
- package/lib/rules/redundantTypeConstituents.d.ts +0 -9
- package/lib/rules/redundantTypeConstituents.js +0 -275
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
- package/lib/rules/regexAllGlobalFlags.js +0 -54
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
- package/lib/rules/regexAmbiguousInvalidity.js +0 -295
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
- package/lib/rules/regexCharacterClassRanges.js +0 -135
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
- package/lib/rules/regexCharacterClassSetOperations.js +0 -79
- package/lib/rules/regexCharacterClasses.d.ts +0 -9
- package/lib/rules/regexCharacterClasses.js +0 -232
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
- package/lib/rules/regexContradictoryAssertions.js +0 -208
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
- package/lib/rules/regexControlCharacterEscapes.js +0 -128
- package/lib/rules/regexControlCharacters.d.ts +0 -9
- package/lib/rules/regexControlCharacters.js +0 -93
- package/lib/rules/regexDigitMatchers.d.ts +0 -9
- package/lib/rules/regexDigitMatchers.js +0 -178
- package/lib/rules/regexDollarEscapes.d.ts +0 -9
- package/lib/rules/regexDollarEscapes.js +0 -89
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
- package/lib/rules/regexEmptyAlternatives.js +0 -138
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
- package/lib/rules/regexEmptyCapturingGroups.js +0 -65
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
- package/lib/rules/regexEmptyCharacterClasses.js +0 -66
- package/lib/rules/regexEmptyGroups.d.ts +0 -9
- package/lib/rules/regexEmptyGroups.js +0 -64
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
- package/lib/rules/regexEmptyStringLiterals.js +0 -64
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
- package/lib/rules/regexEscapeBackspaces.js +0 -67
- package/lib/rules/regexExecutors.d.ts +0 -9
- package/lib/rules/regexExecutors.js +0 -56
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
- package/lib/rules/regexGraphemeStringLiterals.js +0 -49
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
- package/lib/rules/regexHexadecimalEscapes.js +0 -69
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
- package/lib/rules/regexIgnoreCaseFlags.js +0 -143
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
- package/lib/rules/regexInvisibleCharacters.js +0 -88
- package/lib/rules/regexLetterCasing.d.ts +0 -9
- package/lib/rules/regexLetterCasing.js +0 -184
- package/lib/rules/regexLiterals.d.ts +0 -9
- package/lib/rules/regexLiterals.js +0 -87
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexLookaroundAssertions.js +0 -161
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
- package/lib/rules/regexMatchNotation.d.ts +0 -9
- package/lib/rules/regexMatchNotation.js +0 -137
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
- package/lib/rules/regexMisleadingQuantifiers.js +0 -76
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
- package/lib/rules/regexNamedBackreferences.d.ts +0 -9
- package/lib/rules/regexNamedBackreferences.js +0 -46
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
- package/lib/rules/regexNamedCaptureGroups.js +0 -65
- package/lib/rules/regexNamedReplacements.d.ts +0 -9
- package/lib/rules/regexNamedReplacements.js +0 -91
- package/lib/rules/regexNonStandardFlags.d.ts +0 -9
- package/lib/rules/regexNonStandardFlags.js +0 -64
- package/lib/rules/regexObscureRanges.d.ts +0 -9
- package/lib/rules/regexObscureRanges.js +0 -91
- package/lib/rules/regexOctalEscapes.d.ts +0 -9
- package/lib/rules/regexOctalEscapes.js +0 -68
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
- package/lib/rules/regexPlusQuantifiers.js +0 -66
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
- package/lib/rules/regexPredefinedAssertions.js +0 -125
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
- package/lib/rules/regexQuestionQuantifiers.js +0 -102
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
- package/lib/rules/regexRepeatQuantifiers.js +0 -94
- package/lib/rules/regexResultArrayGroups.d.ts +0 -9
- package/lib/rules/regexResultArrayGroups.js +0 -185
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
- package/lib/rules/regexSetOperationOptimizations.js +0 -175
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
- package/lib/rules/regexStandaloneBackslashes.js +0 -57
- package/lib/rules/regexStarQuantifiers.d.ts +0 -9
- package/lib/rules/regexStarQuantifiers.js +0 -66
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
- package/lib/rules/regexSuperLinearBacktracking.js +0 -96
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
- package/lib/rules/regexSuperLinearMoves.js +0 -140
- package/lib/rules/regexTestMethods.d.ts +0 -9
- package/lib/rules/regexTestMethods.js +0 -81
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
- package/lib/rules/regexUnicodeEscapes.js +0 -95
- package/lib/rules/regexUnicodeFlag.d.ts +0 -8
- package/lib/rules/regexUnicodeFlag.js +0 -95
- package/lib/rules/regexUnicodeProperties.d.ts +0 -9
- package/lib/rules/regexUnicodeProperties.js +0 -131
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryAssertions.js +0 -221
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
- package/lib/rules/regexUnnecessaryEscapes.js +0 -134
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
- package/lib/rules/regexUnnecessarySetOperands.js +0 -134
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnusedCapturingGroups.js +0 -67
- package/lib/rules/regexUnusedFlags.d.ts +0 -9
- package/lib/rules/regexUnusedFlags.js +0 -114
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedQuantifiers.js +0 -61
- package/lib/rules/regexValidity.d.ts +0 -9
- package/lib/rules/regexValidity.js +0 -144
- package/lib/rules/regexWordMatchers.d.ts +0 -9
- package/lib/rules/regexWordMatchers.js +0 -144
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
- package/lib/rules/regexZeroQuantifiers.js +0 -58
- package/lib/rules/requireImports.d.ts +0 -9
- package/lib/rules/requireImports.js +0 -46
- package/lib/rules/responseJsonMethods.d.ts +0 -9
- package/lib/rules/responseJsonMethods.js +0 -49
- package/lib/rules/restrictedIdentifiers.d.ts +0 -12
- package/lib/rules/restrictedIdentifiers.js +0 -39
- package/lib/rules/restrictedImports.d.ts +0 -26
- package/lib/rules/restrictedImports.js +0 -164
- package/lib/rules/returnAssignments.d.ts +0 -9
- package/lib/rules/returnAssignments.js +0 -36
- package/lib/rules/returnThisTypes.d.ts +0 -9
- package/lib/rules/returnThisTypes.js +0 -92
- package/lib/rules/ruleCreator.d.ts +0 -2
- package/lib/rules/ruleCreator.js +0 -15
- package/lib/rules/selfAssignments.d.ts +0 -9
- package/lib/rules/selfAssignments.js +0 -27
- package/lib/rules/sequences.d.ts +0 -9
- package/lib/rules/sequences.js +0 -26
- package/lib/rules/setSizeLengthChecks.d.ts +0 -9
- package/lib/rules/setSizeLengthChecks.js +0 -46
- package/lib/rules/setterReturns.d.ts +0 -9
- package/lib/rules/setterReturns.js +0 -39
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
- package/lib/rules/shadowedRestrictedNames.js +0 -66
- package/lib/rules/singleVariableDeclarations.d.ts +0 -9
- package/lib/rules/singleVariableDeclarations.js +0 -34
- package/lib/rules/sizeComparisonOperators.d.ts +0 -15
- package/lib/rules/sizeComparisonOperators.js +0 -146
- package/lib/rules/sparseArrays.d.ts +0 -9
- package/lib/rules/sparseArrays.js +0 -41
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
- package/lib/rules/staticMemberOnlyClasses.js +0 -75
- package/lib/rules/stringCaseMismatches.d.ts +0 -9
- package/lib/rules/stringCaseMismatches.js +0 -53
- package/lib/rules/stringCodePoints.d.ts +0 -9
- package/lib/rules/stringCodePoints.js +0 -48
- package/lib/rules/stringSliceMethods.d.ts +0 -9
- package/lib/rules/stringSliceMethods.js +0 -45
- package/lib/rules/stringStartsEndsWith.d.ts +0 -9
- package/lib/rules/stringStartsEndsWith.js +0 -77
- package/lib/rules/structuredCloneMethods.d.ts +0 -9
- package/lib/rules/structuredCloneMethods.js +0 -37
- package/lib/rules/symbolDescriptions.d.ts +0 -9
- package/lib/rules/symbolDescriptions.js +0 -30
- package/lib/rules/thisAliases.d.ts +0 -9
- package/lib/rules/thisAliases.js +0 -42
- package/lib/rules/thisBeforeSuper.d.ts +0 -9
- package/lib/rules/thisBeforeSuper.js +0 -84
- package/lib/rules/throwErrors.d.ts +0 -9
- package/lib/rules/throwErrors.js +0 -59
- package/lib/rules/topLevelAwaits.d.ts +0 -9
- package/lib/rules/topLevelAwaits.js +0 -47
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
- package/lib/rules/tripleSlashReferenceValidity.js +0 -52
- package/lib/rules/tripleSlashReferences.d.ts +0 -9
- package/lib/rules/tripleSlashReferences.js +0 -32
- package/lib/rules/tsComments.d.ts +0 -21
- package/lib/rules/tsComments.js +0 -128
- package/lib/rules/tslintComments.d.ts +0 -9
- package/lib/rules/tslintComments.js +0 -34
- package/lib/rules/typeAssertionStyles.d.ts +0 -9
- package/lib/rules/typeAssertionStyles.js +0 -30
- package/lib/rules/typeImports.d.ts +0 -19
- package/lib/rules/typeImports.js +0 -281
- package/lib/rules/typeofComparisons.d.ts +0 -9
- package/lib/rules/typeofComparisons.js +0 -53
- package/lib/rules/unassignedVariables.d.ts +0 -9
- package/lib/rules/unassignedVariables.js +0 -32
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
- package/lib/rules/undefinedTypeofChecks.js +0 -39
- package/lib/rules/undefinedVariables.d.ts +0 -9
- package/lib/rules/undefinedVariables.js +0 -37
- package/lib/rules/unicodeBOMs.d.ts +0 -9
- package/lib/rules/unicodeBOMs.js +0 -37
- package/lib/rules/unnecessaryBinds.d.ts +0 -9
- package/lib/rules/unnecessaryBinds.js +0 -76
- package/lib/rules/unnecessaryBlocks.d.ts +0 -9
- package/lib/rules/unnecessaryBlocks.js +0 -58
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
- package/lib/rules/unnecessaryBooleanCasts.js +0 -56
- package/lib/rules/unnecessaryCatches.d.ts +0 -9
- package/lib/rules/unnecessaryCatches.js +0 -46
- package/lib/rules/unnecessaryComparisons.d.ts +0 -9
- package/lib/rules/unnecessaryComparisons.js +0 -291
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
- package/lib/rules/unnecessaryConcatenation.js +0 -26
- package/lib/rules/unnecessaryEscapes.d.ts +0 -9
- package/lib/rules/unnecessaryEscapes.js +0 -132
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
- package/lib/rules/unnecessaryMathClamps.js +0 -106
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
- package/lib/rules/unnecessaryNumericFractions.js +0 -48
- package/lib/rules/unnecessaryRenames.d.ts +0 -9
- package/lib/rules/unnecessaryRenames.js +0 -90
- package/lib/rules/unnecessaryTernaries.d.ts +0 -9
- package/lib/rules/unnecessaryTernaries.js +0 -86
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
- package/lib/rules/unnecessaryUseStricts.js +0 -38
- package/lib/rules/unsafeNegations.d.ts +0 -9
- package/lib/rules/unsafeNegations.js +0 -36
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
- package/lib/rules/utils/collectAccessorPairs.js +0 -27
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
- package/lib/rules/utils/countCommentsInRange.js +0 -10
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
- package/lib/rules/utils/discriminateAnyType.js +0 -36
- package/lib/rules/utils/equalityOperators.d.ts +0 -8
- package/lib/rules/utils/equalityOperators.js +0 -34
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
- package/lib/rules/utils/forEachReturnStatement.js +0 -27
- package/lib/rules/utils/formatReportedType.d.ts +0 -3
- package/lib/rules/utils/formatReportedType.js +0 -7
- package/lib/rules/utils/getConstrainedType.d.ts +0 -2
- package/lib/rules/utils/getConstrainedType.js +0 -7
- package/lib/rules/utils/getFunctionName.d.ts +0 -2
- package/lib/rules/utils/getFunctionName.js +0 -14
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
- package/lib/rules/utils/getRegExpConstruction.js +0 -25
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
- package/lib/rules/utils/getThisExpression.d.ts +0 -2
- package/lib/rules/utils/getThisExpression.js +0 -14
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -25
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
- package/lib/rules/utils/isInBooleanContext.js +0 -20
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
- package/lib/rules/utils/isTypeRecursive.js +0 -6
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
- package/lib/rules/utils/isUnsafeAssignment.js +0 -43
- package/lib/rules/utils/operators.d.ts +0 -4
- package/lib/rules/utils/operators.js +0 -33
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
- package/lib/rules/utils/parseRegexpAst.js +0 -15
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAstFull.js +0 -16
- package/lib/rules/utils/skipParentheses.d.ts +0 -2
- package/lib/rules/utils/skipParentheses.js +0 -8
- package/lib/rules/variableDeletions.d.ts +0 -9
- package/lib/rules/variableDeletions.js +0 -33
- package/lib/rules/voidOperator.d.ts +0 -9
- package/lib/rules/voidOperator.js +0 -32
- package/lib/rules/withStatements.d.ts +0 -9
- package/lib/rules/withStatements.js +0 -28
- package/lib/rules/wrapperObjects.d.ts +0 -9
- package/lib/rules/wrapperObjects.js +0 -34
- package/lib/type-utils/getSpecifierNames.d.ts +0 -2
- package/lib/type-utils/getSpecifierNames.js +0 -7
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
- package/lib/type-utils/isFromFile.d.ts +0 -2
- package/lib/type-utils/isFromFile.js +0 -11
- package/lib/type-utils/isFromPackage.d.ts +0 -2
- package/lib/type-utils/isFromPackage.js +0 -13
- package/lib/type-utils/matchesSpecifier.d.ts +0 -3
- package/lib/type-utils/matchesSpecifier.js +0 -18
- package/lib/type-utils/schemas.d.ts +0 -14
- package/lib/type-utils/schemas.js +0 -23
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/enumValueDuplicates.ts
|
|
5
|
-
var enumValueDuplicates_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports enum members with duplicate values.",
|
|
8
|
-
id: "enumValueDuplicates",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { duplicateValue: {
|
|
12
|
-
primary: "Enum member '{{ name }}' has a duplicate value '{{ value }}' which is already used by '{{ firstMember }}'.",
|
|
13
|
-
secondary: ["Duplicate enum values can lead to hard-to-track bugs since different members may be indistinguishable at runtime.", "When accessing enum members by value, only one of the duplicate members will be returned."],
|
|
14
|
-
suggestions: ["Use a unique value for each enum member.", "If duplication is intentional (e.g., for aliasing), consider using a type union instead."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { EnumDeclaration: (node, { sourceFile }) => {
|
|
18
|
-
const seenValues = /* @__PURE__ */ new Map();
|
|
19
|
-
for (const member of node.members) {
|
|
20
|
-
if (!member.initializer) continue;
|
|
21
|
-
const value = getStaticValue(member.initializer)?.value;
|
|
22
|
-
if (typeof value !== "number" && typeof value !== "string") continue;
|
|
23
|
-
const memberName = member.name.kind === SyntaxKind.Identifier ? member.name.text : member.name.getText(sourceFile);
|
|
24
|
-
const firstMember = seenValues.get(value);
|
|
25
|
-
if (firstMember === void 0) {
|
|
26
|
-
seenValues.set(value, memberName);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
context.report({
|
|
30
|
-
data: {
|
|
31
|
-
firstMember,
|
|
32
|
-
name: memberName,
|
|
33
|
-
value: String(value)
|
|
34
|
-
},
|
|
35
|
-
message: "duplicateValue",
|
|
36
|
-
range: getTSNodeRange(member, sourceFile)
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
} } };
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
//#endregion
|
|
43
|
-
export { enumValueDuplicates_default as default };
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports negated expressions on the left side of equality checks.";
|
|
3
|
-
readonly id: "equalityOperatorNegations";
|
|
4
|
-
} & {
|
|
5
|
-
readonly pluginId: string;
|
|
6
|
-
readonly url: string;
|
|
7
|
-
}, "negatedEquality", undefined>;
|
|
8
|
-
export default _default;
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/equalityOperatorNegations.ts
|
|
5
|
-
const equalityOperators = /* @__PURE__ */ new Set([
|
|
6
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
7
|
-
SyntaxKind.EqualsEqualsToken,
|
|
8
|
-
SyntaxKind.ExclamationEqualsEqualsToken,
|
|
9
|
-
SyntaxKind.ExclamationEqualsToken
|
|
10
|
-
]);
|
|
11
|
-
const operatorStrings = /* @__PURE__ */ new Map([
|
|
12
|
-
[SyntaxKind.EqualsEqualsEqualsToken, "==="],
|
|
13
|
-
[SyntaxKind.EqualsEqualsToken, "=="],
|
|
14
|
-
[SyntaxKind.ExclamationEqualsEqualsToken, "!=="],
|
|
15
|
-
[SyntaxKind.ExclamationEqualsToken, "!="]
|
|
16
|
-
]);
|
|
17
|
-
const negatedOperators = /* @__PURE__ */ new Map([
|
|
18
|
-
[SyntaxKind.EqualsEqualsEqualsToken, "!=="],
|
|
19
|
-
[SyntaxKind.EqualsEqualsToken, "!="],
|
|
20
|
-
[SyntaxKind.ExclamationEqualsEqualsToken, "==="],
|
|
21
|
-
[SyntaxKind.ExclamationEqualsToken, "=="]
|
|
22
|
-
]);
|
|
23
|
-
var equalityOperatorNegations_default = ruleCreator.createRule(typescriptLanguage, {
|
|
24
|
-
about: {
|
|
25
|
-
description: "Reports negated expressions on the left side of equality checks.",
|
|
26
|
-
id: "equalityOperatorNegations"
|
|
27
|
-
},
|
|
28
|
-
messages: { negatedEquality: {
|
|
29
|
-
primary: "Negating the left operand of '{{ operator }}' is likely a mistake.",
|
|
30
|
-
secondary: ["The logical not operator (!) applies to the left operand before the equality comparison.", "This converts the left operand to a boolean before comparing, which is rarely intended."],
|
|
31
|
-
suggestions: ["Use the opposite equality operator ('{{ suggested }}') and remove the negation."]
|
|
32
|
-
} },
|
|
33
|
-
setup(context) {
|
|
34
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
35
|
-
if (!equalityOperators.has(node.operatorToken.kind)) return;
|
|
36
|
-
const left = unwrapParenthesizedNode(node.left);
|
|
37
|
-
if (left.kind !== SyntaxKind.PrefixUnaryExpression || left.operator !== SyntaxKind.ExclamationToken) return;
|
|
38
|
-
const innerExpression = unwrapParenthesizedNode(left.operand);
|
|
39
|
-
if (innerExpression.kind === SyntaxKind.PrefixUnaryExpression && innerExpression.operator === SyntaxKind.ExclamationToken) return;
|
|
40
|
-
const begin = left.getStart(sourceFile);
|
|
41
|
-
const operator = operatorStrings.get(node.operatorToken.kind);
|
|
42
|
-
const suggested = negatedOperators.get(node.operatorToken.kind);
|
|
43
|
-
context.report({
|
|
44
|
-
data: {
|
|
45
|
-
operator,
|
|
46
|
-
suggested
|
|
47
|
-
},
|
|
48
|
-
message: "negatedEquality",
|
|
49
|
-
range: {
|
|
50
|
-
begin,
|
|
51
|
-
end: begin + 1
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
} } };
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
//#endregion
|
|
58
|
-
export { equalityOperatorNegations_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Enforces consistent use of strict equality operators (=== and !==) over loose equality operators (== and !=) for non-nullish comparisons.";
|
|
3
|
-
readonly id: "equalityOperators";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferStrictEquality", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isNullishLiteral, toEqualityOperator, toStrictOperator } from "./utils/equalityOperators.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
//#region src/rules/equalityOperators.ts
|
|
5
|
-
var equalityOperators_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Enforces consistent use of strict equality operators (=== and !==) over loose equality operators (== and !=) for non-nullish comparisons.",
|
|
8
|
-
id: "equalityOperators",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferStrictEquality: {
|
|
12
|
-
primary: "Use the more precise strict equality ('{{ strictOperator }}') instead of the loose '{{ looseOperator }}'.",
|
|
13
|
-
secondary: ["The loose equality operators '=='/'!=' perform arcane type coercion and are difficult to reason about.", "Use strict equality operators '==='/'!==' instead."],
|
|
14
|
-
suggestions: ["Replace '{{ looseOperator }}' with '{{ strictOperator }}'."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
18
|
-
const operator = toEqualityOperator(node.operatorToken.kind);
|
|
19
|
-
if (operator == null) return;
|
|
20
|
-
if (isNullishLiteral(node.left) || isNullishLiteral(node.right)) return;
|
|
21
|
-
if (operator === "==" || operator === "!=") {
|
|
22
|
-
const strictOperator = toStrictOperator(operator);
|
|
23
|
-
const operatorRange = getTSNodeRange(node.operatorToken, sourceFile);
|
|
24
|
-
context.report({
|
|
25
|
-
data: {
|
|
26
|
-
looseOperator: operator,
|
|
27
|
-
strictOperator
|
|
28
|
-
},
|
|
29
|
-
message: "preferStrictEquality",
|
|
30
|
-
range: operatorRange,
|
|
31
|
-
suggestions: [{
|
|
32
|
-
id: "useStrictOperator",
|
|
33
|
-
range: operatorRange,
|
|
34
|
-
text: strictOperator
|
|
35
|
-
}]
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
} } };
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
//#endregion
|
|
42
|
-
export { equalityOperators_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Requires a message value when creating a built-in error.";
|
|
3
|
-
readonly id: "errorMessages";
|
|
4
|
-
readonly presets: readonly ["logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingMessage", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticStringValue, getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/errorMessages.ts
|
|
5
|
-
const errorConstructors = [
|
|
6
|
-
"AggregateError",
|
|
7
|
-
"Error",
|
|
8
|
-
"EvalError",
|
|
9
|
-
"RangeError",
|
|
10
|
-
"ReferenceError",
|
|
11
|
-
"SyntaxError",
|
|
12
|
-
"TypeError",
|
|
13
|
-
"URIError"
|
|
14
|
-
];
|
|
15
|
-
function getErrorConstructorWithoutMessage(node, typeChecker, program) {
|
|
16
|
-
if (node.expression.kind !== SyntaxKind.Identifier || hasValidMessageArgument(node.arguments)) return false;
|
|
17
|
-
return errorConstructors.find((errorConstructor) => isGlobalDeclarationOfName(node.expression, errorConstructor, typeChecker, program));
|
|
18
|
-
}
|
|
19
|
-
function hasValidMessageArgument(args) {
|
|
20
|
-
if (!args?.length) return false;
|
|
21
|
-
const firstArgument = args[0];
|
|
22
|
-
return !!firstArgument && getStaticStringValue(firstArgument) !== "" && !isUndefinedLiteral(firstArgument);
|
|
23
|
-
}
|
|
24
|
-
function isUndefinedLiteral(node) {
|
|
25
|
-
return node.kind === SyntaxKind.Identifier && node.text === "undefined";
|
|
26
|
-
}
|
|
27
|
-
var errorMessages_default = ruleCreator.createRule(typescriptLanguage, {
|
|
28
|
-
about: {
|
|
29
|
-
description: "Requires a message value when creating a built-in error.",
|
|
30
|
-
id: "errorMessages",
|
|
31
|
-
presets: ["logicalStrict"]
|
|
32
|
-
},
|
|
33
|
-
messages: { missingMessage: {
|
|
34
|
-
primary: "`{{ errorConstructor }}`s created without a message are generally harder to debug.",
|
|
35
|
-
secondary: ["Error instances without messages are harder to debug because they don't explain what went wrong.", "A descriptive error message helps developers understand and fix issues more quickly."],
|
|
36
|
-
suggestions: ["Provide a string message describing what caused the error."]
|
|
37
|
-
} },
|
|
38
|
-
setup(context) {
|
|
39
|
-
function checkNode(node, { program, sourceFile, typeChecker }) {
|
|
40
|
-
const errorConstructor = getErrorConstructorWithoutMessage(node, typeChecker, program);
|
|
41
|
-
if (errorConstructor) context.report({
|
|
42
|
-
data: { errorConstructor },
|
|
43
|
-
message: "missingMessage",
|
|
44
|
-
range: getTSNodeRange(node.expression, sourceFile)
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return { visitors: {
|
|
48
|
-
CallExpression: checkNode,
|
|
49
|
-
NewExpression: checkNode
|
|
50
|
-
} };
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
//#endregion
|
|
54
|
-
export { errorMessages_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports incorrect Error subclass definitions that don't follow best practices.";
|
|
3
|
-
readonly id: "errorSubclassProperties";
|
|
4
|
-
readonly presets: readonly ["logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "invalidClassName" | "missingName" | "redundantMessage" | "useConstructorName" | "wrongName", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isErrorSubclass } from "./utils/isErrorSubclass.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts, { SyntaxKind } from "typescript";
|
|
5
|
-
//#region src/rules/errorSubclassProperties.ts
|
|
6
|
-
function analyzeConstructor(node) {
|
|
7
|
-
let constructor;
|
|
8
|
-
for (const member of node.members) if (ts.isConstructorDeclaration(member) && member.body) {
|
|
9
|
-
constructor = member;
|
|
10
|
-
break;
|
|
11
|
-
}
|
|
12
|
-
if (!constructor) return;
|
|
13
|
-
let hasSuperCall = false;
|
|
14
|
-
let superCallPassesMessage = false;
|
|
15
|
-
let hasNameAssignment = false;
|
|
16
|
-
let nameValue;
|
|
17
|
-
let hasRedundantMessageAssignment = false;
|
|
18
|
-
let superCallNode;
|
|
19
|
-
let nameAssignmentNode;
|
|
20
|
-
let messageAssignmentNode;
|
|
21
|
-
const body = constructor.body;
|
|
22
|
-
if (!body) return;
|
|
23
|
-
for (const statement of body.statements) {
|
|
24
|
-
if (!ts.isExpressionStatement(statement)) continue;
|
|
25
|
-
if (ts.isCallExpression(statement.expression) && statement.expression.expression.kind === SyntaxKind.SuperKeyword) {
|
|
26
|
-
hasSuperCall = true;
|
|
27
|
-
superCallNode = statement.expression;
|
|
28
|
-
superCallPassesMessage = !!statement.expression.arguments.length;
|
|
29
|
-
}
|
|
30
|
-
if (ts.isBinaryExpression(statement.expression) && statement.expression.operatorToken.kind === SyntaxKind.EqualsToken && ts.isPropertyAccessExpression(statement.expression.left) && statement.expression.left.expression.kind === SyntaxKind.ThisKeyword) {
|
|
31
|
-
const propName = statement.expression.left.name.text;
|
|
32
|
-
if (propName === "name") {
|
|
33
|
-
hasNameAssignment = true;
|
|
34
|
-
nameAssignmentNode = statement.expression;
|
|
35
|
-
if (ts.isStringLiteral(statement.expression.right)) nameValue = statement.expression.right.text;
|
|
36
|
-
else if (ts.isPropertyAccessExpression(statement.expression.right) && ts.isPropertyAccessExpression(statement.expression.right.expression) && statement.expression.right.expression.expression.kind === SyntaxKind.ThisKeyword && statement.expression.right.expression.name.text === "constructor" && statement.expression.right.name.text === "name") nameValue = "this.constructor.name";
|
|
37
|
-
}
|
|
38
|
-
if (propName === "message" && hasSuperCall && superCallPassesMessage) {
|
|
39
|
-
hasRedundantMessageAssignment = true;
|
|
40
|
-
messageAssignmentNode = statement.expression;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
constructor,
|
|
46
|
-
hasNameAssignment,
|
|
47
|
-
hasRedundantMessageAssignment,
|
|
48
|
-
hasSuperCall,
|
|
49
|
-
messageAssignmentNode,
|
|
50
|
-
nameAssignmentNode,
|
|
51
|
-
nameValue,
|
|
52
|
-
superCallNode,
|
|
53
|
-
superCallPassesMessage
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
function isValidErrorClassName(name) {
|
|
57
|
-
return !!name && /^[A-Z]/.test(name) && name.endsWith("Error");
|
|
58
|
-
}
|
|
59
|
-
var errorSubclassProperties_default = ruleCreator.createRule(typescriptLanguage, {
|
|
60
|
-
about: {
|
|
61
|
-
description: "Reports incorrect Error subclass definitions that don't follow best practices.",
|
|
62
|
-
id: "errorSubclassProperties",
|
|
63
|
-
presets: ["logicalStrict"]
|
|
64
|
-
},
|
|
65
|
-
messages: {
|
|
66
|
-
invalidClassName: {
|
|
67
|
-
primary: "Error subclass name '{{ name }}' should start with an uppercase letter and end with 'Error'.",
|
|
68
|
-
secondary: ["Error class names should follow the convention of being capitalized and ending with 'Error'.", "This makes it clear that the class is an error type."],
|
|
69
|
-
suggestions: ["Rename the class to end with 'Error', e.g., '{{ suggested }}'."]
|
|
70
|
-
},
|
|
71
|
-
missingName: {
|
|
72
|
-
primary: "Error subclass is missing a `this.name` assignment in the constructor.",
|
|
73
|
-
secondary: ["Without a `name` property, errors will display as `[Error: ...]` instead of `[ClassName: ...]`.", "Setting `this.name` helps identify the error type when debugging."],
|
|
74
|
-
suggestions: ["Add `this.name = 'ClassName';` to the constructor."]
|
|
75
|
-
},
|
|
76
|
-
redundantMessage: {
|
|
77
|
-
primary: "Assignment to `this.message` is redundant when the message is already passed to `super()`.",
|
|
78
|
-
secondary: ["The `super()` call automatically sets the `message` property.", "Assigning it again is unnecessary."],
|
|
79
|
-
suggestions: ["Remove the redundant `this.message` assignment."]
|
|
80
|
-
},
|
|
81
|
-
useConstructorName: {
|
|
82
|
-
primary: "Avoid using `this.constructor.name` for the error name.",
|
|
83
|
-
secondary: ["Using `this.constructor.name` will not work correctly after minification.", "Use a string literal instead to ensure the error name is preserved."],
|
|
84
|
-
suggestions: ["Use a string literal like `this.name = '{{ className }}';`."]
|
|
85
|
-
},
|
|
86
|
-
wrongName: {
|
|
87
|
-
primary: "Error subclass name property '{{ nameValue }}' should match the class name '{{ className }}'.",
|
|
88
|
-
secondary: ["The `name` property should match the class name for consistency.", "Mismatched names can cause confusion when debugging."],
|
|
89
|
-
suggestions: ["Change the name assignment to `this.name = '{{ className }}';`."]
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
setup(context) {
|
|
93
|
-
return { visitors: { ClassDeclaration: (node, { program, sourceFile, typeChecker }) => {
|
|
94
|
-
if (!isErrorSubclass(node, typeChecker, program)) return;
|
|
95
|
-
const className = node.name?.text;
|
|
96
|
-
if (!isValidErrorClassName(className)) {
|
|
97
|
-
const baseName = className ?? "Custom";
|
|
98
|
-
const suggested = baseName.endsWith("Error") ? baseName : `${baseName}Error`;
|
|
99
|
-
context.report({
|
|
100
|
-
data: {
|
|
101
|
-
name: className ?? "(anonymous)",
|
|
102
|
-
suggested
|
|
103
|
-
},
|
|
104
|
-
message: "invalidClassName",
|
|
105
|
-
range: getTSNodeRange(node.name ?? node, sourceFile)
|
|
106
|
-
});
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
const constructorInfo = analyzeConstructor(node);
|
|
110
|
-
if (!constructorInfo) return;
|
|
111
|
-
if (constructorInfo.hasRedundantMessageAssignment && constructorInfo.messageAssignmentNode) context.report({
|
|
112
|
-
message: "redundantMessage",
|
|
113
|
-
range: getTSNodeRange(constructorInfo.messageAssignmentNode, sourceFile)
|
|
114
|
-
});
|
|
115
|
-
if (!constructorInfo.hasNameAssignment) {
|
|
116
|
-
context.report({
|
|
117
|
-
message: "missingName",
|
|
118
|
-
range: getTSNodeRange(constructorInfo.constructor, sourceFile)
|
|
119
|
-
});
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (constructorInfo.nameValue === "this.constructor.name" && constructorInfo.nameAssignmentNode) {
|
|
123
|
-
context.report({
|
|
124
|
-
data: { className },
|
|
125
|
-
message: "useConstructorName",
|
|
126
|
-
range: getTSNodeRange(constructorInfo.nameAssignmentNode, sourceFile)
|
|
127
|
-
});
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (constructorInfo.nameValue && constructorInfo.nameValue !== className && constructorInfo.nameAssignmentNode) context.report({
|
|
131
|
-
data: {
|
|
132
|
-
className,
|
|
133
|
-
nameValue: constructorInfo.nameValue
|
|
134
|
-
},
|
|
135
|
-
message: "wrongName",
|
|
136
|
-
range: getTSNodeRange(constructorInfo.nameAssignmentNode, sourceFile)
|
|
137
|
-
});
|
|
138
|
-
} } };
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
//#endregion
|
|
142
|
-
export { errorSubclassProperties_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary Error.captureStackTrace() calls in Error subclass constructors.";
|
|
3
|
-
readonly id: "errorUnnecessaryCaptureStackTraces";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryCaptureStackTrace", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isErrorSubclass } from "./utils/isErrorSubclass.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts, { SyntaxKind } from "typescript";
|
|
5
|
-
//#region src/rules/errorUnnecessaryCaptureStackTraces.ts
|
|
6
|
-
function isCaptureStackTraceCall(node) {
|
|
7
|
-
if (!ts.isCallExpression(node) && !ts.isOptionalChain(node)) return false;
|
|
8
|
-
const callExpression = ts.isCallExpression(node) ? node : void 0;
|
|
9
|
-
if (!callExpression) return ts.isCallExpression(node) && isCaptureStackTraceCall(node);
|
|
10
|
-
return ts.isPropertyAccessExpression(callExpression.expression) && ts.isIdentifier(callExpression.expression.expression) && callExpression.expression.expression.text === "Error" && ts.isIdentifier(callExpression.expression.name) && callExpression.expression.name.text === "captureStackTrace";
|
|
11
|
-
}
|
|
12
|
-
function isValidSecondArgument(node, className) {
|
|
13
|
-
if (ts.isIdentifier(node)) return node.text === className;
|
|
14
|
-
if (ts.isPropertyAccessExpression(node) && node.expression.kind === SyntaxKind.ThisKeyword && ts.isIdentifier(node.name) && node.name.text === "constructor") return true;
|
|
15
|
-
if (ts.isMetaProperty(node) && node.keywordToken === SyntaxKind.NewKeyword && ts.isIdentifier(node.name) && node.name.text === "target") return true;
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
var errorUnnecessaryCaptureStackTraces_default = ruleCreator.createRule(typescriptLanguage, {
|
|
19
|
-
about: {
|
|
20
|
-
description: "Reports unnecessary Error.captureStackTrace() calls in Error subclass constructors.",
|
|
21
|
-
id: "errorUnnecessaryCaptureStackTraces",
|
|
22
|
-
presets: ["logical", "logicalStrict"]
|
|
23
|
-
},
|
|
24
|
-
messages: { unnecessaryCaptureStackTrace: {
|
|
25
|
-
primary: "Calling `Error.captureStackTrace()` is unnecessary in built-in Error subclass constructors.",
|
|
26
|
-
secondary: ["The `Error` constructor automatically calls `Error.captureStackTrace()` when extending built-in Error types.", "Calling it again is redundant and adds unnecessary code."],
|
|
27
|
-
suggestions: ["Remove the `Error.captureStackTrace()` call."]
|
|
28
|
-
} },
|
|
29
|
-
setup(context) {
|
|
30
|
-
return { visitors: { ClassDeclaration: (node, { program, sourceFile, typeChecker }) => {
|
|
31
|
-
if (!isErrorSubclass(node, typeChecker, program)) return;
|
|
32
|
-
for (const member of node.members) {
|
|
33
|
-
if (!ts.isConstructorDeclaration(member) || !member.body) continue;
|
|
34
|
-
for (const statement of member.body.statements) {
|
|
35
|
-
if (!ts.isExpressionStatement(statement) || !(ts.isCallExpression(statement.expression) || ts.isCallChain(statement.expression)) || !isCaptureStackTraceCall(statement.expression)) continue;
|
|
36
|
-
const args = statement.expression.arguments;
|
|
37
|
-
if (args.length < 1) continue;
|
|
38
|
-
if (args[0].kind !== SyntaxKind.ThisKeyword) continue;
|
|
39
|
-
if (args.length >= 2) {
|
|
40
|
-
const secondArgument = args[1];
|
|
41
|
-
if (!isValidSecondArgument(secondArgument, node.name?.text)) continue;
|
|
42
|
-
}
|
|
43
|
-
context.report({
|
|
44
|
-
message: "unnecessaryCaptureStackTrace",
|
|
45
|
-
range: getTSNodeRange(statement, sourceFile)
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
} } };
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
//#endregion
|
|
53
|
-
export { errorUnnecessaryCaptureStackTraces_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports escape sequences with lowercase hexadecimal characters.";
|
|
3
|
-
readonly id: "escapeSequenceCasing";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "useUppercase", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/escapeSequenceCasing.ts
|
|
4
|
-
const escapeCase = /(?<=(?:^|[^\\])(?:\\\\)*\\)(?:x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|u\{[\dA-Fa-f]+\}|c[a-z])/g;
|
|
5
|
-
function findLowercaseEscapeSequence(text) {
|
|
6
|
-
for (const pattern of [
|
|
7
|
-
/\\x([0-9a-f]{2})/g,
|
|
8
|
-
/\\u([0-9a-f]{4})/g,
|
|
9
|
-
/\\u\{([0-9a-f]+)\}/g,
|
|
10
|
-
/\\c([a-z])/g
|
|
11
|
-
]) {
|
|
12
|
-
let match;
|
|
13
|
-
while ((match = pattern.exec(text)) !== null) {
|
|
14
|
-
const hexPart = match[1];
|
|
15
|
-
if (hexPart && hexPart !== hexPart.toUpperCase()) {
|
|
16
|
-
const original = match[0];
|
|
17
|
-
return {
|
|
18
|
-
fixed: original.replace(escapeCase, (data) => data[0] + data.slice(1).toUpperCase()),
|
|
19
|
-
index: match.index,
|
|
20
|
-
length: original.length,
|
|
21
|
-
original
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
var escapeSequenceCasing_default = ruleCreator.createRule(typescriptLanguage, {
|
|
28
|
-
about: {
|
|
29
|
-
description: "Reports escape sequences with lowercase hexadecimal characters.",
|
|
30
|
-
id: "escapeSequenceCasing",
|
|
31
|
-
presets: ["stylisticStrict"]
|
|
32
|
-
},
|
|
33
|
-
messages: { useUppercase: {
|
|
34
|
-
primary: "Prefer uppercase characters for escape sequence '{{ original }}'.",
|
|
35
|
-
secondary: ["Uppercase hexadecimal characters in escape sequences are more readable and distinguishable from identifiers."],
|
|
36
|
-
suggestions: ["Change '{{ original }}' to '{{ fixed }}'."]
|
|
37
|
-
} },
|
|
38
|
-
setup(context) {
|
|
39
|
-
function checkNode(node, { sourceFile }) {
|
|
40
|
-
const escapeInfo = findLowercaseEscapeSequence(node.getText(sourceFile));
|
|
41
|
-
if (!escapeInfo) return;
|
|
42
|
-
const nodeStart = node.getStart(sourceFile);
|
|
43
|
-
context.report({
|
|
44
|
-
data: {
|
|
45
|
-
fixed: escapeInfo.fixed,
|
|
46
|
-
original: escapeInfo.original
|
|
47
|
-
},
|
|
48
|
-
fix: {
|
|
49
|
-
range: {
|
|
50
|
-
begin: nodeStart + escapeInfo.index,
|
|
51
|
-
end: nodeStart + escapeInfo.index + escapeInfo.length
|
|
52
|
-
},
|
|
53
|
-
text: escapeInfo.fixed
|
|
54
|
-
},
|
|
55
|
-
message: "useUppercase",
|
|
56
|
-
range: {
|
|
57
|
-
begin: nodeStart + escapeInfo.index,
|
|
58
|
-
end: nodeStart + escapeInfo.index + escapeInfo.length
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return { visitors: {
|
|
63
|
-
NoSubstitutionTemplateLiteral: checkNode,
|
|
64
|
-
StringLiteral: checkNode,
|
|
65
|
-
TemplateExpression: (node, services) => {
|
|
66
|
-
checkNode(node.head, services);
|
|
67
|
-
for (const span of node.templateSpans) checkNode(span.literal, services);
|
|
68
|
-
}
|
|
69
|
-
} };
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
//#endregion
|
|
73
|
-
export { escapeSequenceCasing_default as default };
|
package/lib/rules/evals.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports uses of the eval function.";
|
|
3
|
-
readonly id: "evals";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noEval", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/evals.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/evals.ts
|
|
4
|
-
var evals_default = ruleCreator.createRule(typescriptLanguage, {
|
|
5
|
-
about: {
|
|
6
|
-
description: "Reports uses of the eval function.",
|
|
7
|
-
id: "evals",
|
|
8
|
-
presets: ["logical", "logicalStrict"]
|
|
9
|
-
},
|
|
10
|
-
messages: { noEval: {
|
|
11
|
-
primary: "Avoid using `eval()` as it poses security and performance risks.",
|
|
12
|
-
secondary: [
|
|
13
|
-
"`eval()` executes arbitrary code, which can be exploited for code injection attacks.",
|
|
14
|
-
"It prevents JavaScript engine optimizations, making code run slower.",
|
|
15
|
-
"It makes code harder to debug and reason about."
|
|
16
|
-
],
|
|
17
|
-
suggestions: ["Use safer alternatives like `JSON.parse()` for parsing JSON data.", "Use `Function` constructor if dynamic code execution is truly necessary (though still risky)."]
|
|
18
|
-
} },
|
|
19
|
-
setup(context) {
|
|
20
|
-
return { visitors: { CallExpression: (node, { program, sourceFile, typeChecker }) => {
|
|
21
|
-
if (isGlobalDeclarationOfName(node.expression, "eval", typeChecker, program)) context.report({
|
|
22
|
-
message: "noEval",
|
|
23
|
-
range: getTSNodeRange(node.expression, sourceFile)
|
|
24
|
-
});
|
|
25
|
-
} } };
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
//#endregion
|
|
29
|
-
export { evals_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports variables declared without type annotation or initializer.";
|
|
3
|
-
readonly id: "evolvingVariableTypes";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "implicitAny", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/evolvingVariableTypes.ts
|
|
5
|
-
var evolvingVariableTypes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports variables declared without type annotation or initializer.",
|
|
8
|
-
id: "evolvingVariableTypes",
|
|
9
|
-
presets: ["stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { implicitAny: {
|
|
12
|
-
primary: "Variable '{{ name }}' has an implicit evolving 'any' type due to missing type annotation and initializer.",
|
|
13
|
-
secondary: ["Variables declared without a type annotation or initial value implicitly have the 'any' type.", "This allows any type of value to be assigned to the variable, which can make it harder to catch type-related bugs at compile time."],
|
|
14
|
-
suggestions: ["Add a type annotation to the variable declaration.", "Initialize the variable with a value so TypeScript can infer its type."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { VariableDeclaration: (node, { sourceFile }) => {
|
|
18
|
-
if (sourceFile.isDeclarationFile || node.initializer !== void 0 || node.type !== void 0 || node.name.kind !== SyntaxKind.Identifier || node.parent.kind === SyntaxKind.CatchClause || node.parent.flags & ts.NodeFlags.Const || node.parent.parent.kind === SyntaxKind.ForInStatement || node.parent.parent.kind === SyntaxKind.ForOfStatement) return;
|
|
19
|
-
context.report({
|
|
20
|
-
data: { name: node.name.text },
|
|
21
|
-
message: "implicitAny",
|
|
22
|
-
range: {
|
|
23
|
-
begin: node.name.getStart(sourceFile),
|
|
24
|
-
end: node.name.getEnd()
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
} } };
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
//#endregion
|
|
31
|
-
export { evolvingVariableTypes_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports reassigning exception parameters in catch clauses.";
|
|
3
|
-
readonly id: "exceptionAssignments";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noExAssign", undefined>;
|
|
9
|
-
export default _default;
|