@flint.fyi/ts 0.21.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} +1 -1
- package/dist/index.mjs +22467 -0
- package/package.json +8 -7
- 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,39 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclaration, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
5
|
-
//#region src/rules/asyncPromiseExecutors.ts
|
|
6
|
-
var asyncPromiseExecutors_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports using async functions as Promise executor functions.",
|
|
9
|
-
id: "asyncPromiseExecutors",
|
|
10
|
-
presets: ["logical", "logicalStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { asyncPromiseExecutor: {
|
|
13
|
-
primary: "Async Promise executor functions are not able to properly catch thrown errors and often indicate unnecessarily complex logic.",
|
|
14
|
-
secondary: [
|
|
15
|
-
"The Promise executor function is called synchronously by the Promise constructor.",
|
|
16
|
-
"If an async function is used as a Promise executor, thrown errors will not be caught by the Promise and will instead result in unhandled rejections.",
|
|
17
|
-
"Additionally, if a Promise executor function is using `await`, there's probably no need to use the `new Promise` constructor."
|
|
18
|
-
],
|
|
19
|
-
suggestions: ["Remove the `async` keyword from the executor function.", "If you need to use `await` inside the Promise, consider restructuring your code to avoid the Promise constructor."]
|
|
20
|
-
} },
|
|
21
|
-
setup(context) {
|
|
22
|
-
return { visitors: { NewExpression: (node, { program, sourceFile, typeChecker }) => {
|
|
23
|
-
if (!isGlobalDeclaration(node.expression, typeChecker, program) || !node.arguments?.length) return;
|
|
24
|
-
const executor = nullThrows(node.arguments[0], "Expected there to be a promise executor!");
|
|
25
|
-
if (executor.kind !== SyntaxKind.FunctionExpression && executor.kind !== SyntaxKind.ArrowFunction) return;
|
|
26
|
-
const asyncModifier = executor.modifiers?.find((mod) => mod.kind === SyntaxKind.AsyncKeyword);
|
|
27
|
-
if (!asyncModifier) return;
|
|
28
|
-
context.report({
|
|
29
|
-
message: "asyncPromiseExecutor",
|
|
30
|
-
range: {
|
|
31
|
-
begin: asyncModifier.getStart(sourceFile),
|
|
32
|
-
end: asyncModifier.getEnd()
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
} } };
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
//#endregion
|
|
39
|
-
export { asyncPromiseExecutors_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary `Promise.resolve()` or `Promise.reject()` in async contexts.";
|
|
3
|
-
readonly id: "asyncUnnecessaryPromiseWrappers";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryReject" | "unnecessaryResolve", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/asyncUnnecessaryPromiseWrappers.ts
|
|
5
|
-
var asyncUnnecessaryPromiseWrappers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports unnecessary `Promise.resolve()` or `Promise.reject()` in async contexts.",
|
|
8
|
-
id: "asyncUnnecessaryPromiseWrappers",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: {
|
|
12
|
-
unnecessaryReject: {
|
|
13
|
-
primary: "Errors can be thrown directly instead of wrapping in `Promise.reject()`.",
|
|
14
|
-
secondary: ["In async functions, thrown errors are automatically converted to rejected promises.", "Using `Promise.reject()` is unnecessary and less idiomatic."],
|
|
15
|
-
suggestions: ["Throw the error directly instead of using `Promise.reject()`."]
|
|
16
|
-
},
|
|
17
|
-
unnecessaryResolve: {
|
|
18
|
-
primary: "Return values in async functions are already wrapped in a `Promise`.",
|
|
19
|
-
secondary: ["Wrapping a value in `Promise.resolve()` is unnecessary in async functions.", "This adds extra code without changing the behavior."],
|
|
20
|
-
suggestions: ["Return the value directly instead of wrapping it."]
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
setup(context) {
|
|
24
|
-
return { visitors: { ArrowFunction: (node, { sourceFile }) => {
|
|
25
|
-
if (!isAsyncFunction(node) || !ts$1.isCallExpression(node.body)) return;
|
|
26
|
-
const message = getMessageForBody(node.body);
|
|
27
|
-
if (!message) return;
|
|
28
|
-
context.report({
|
|
29
|
-
message,
|
|
30
|
-
range: {
|
|
31
|
-
begin: node.body.getStart(sourceFile),
|
|
32
|
-
end: node.body.getEnd()
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
} } };
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
function getMessageForBody(node) {
|
|
39
|
-
if (!ts$1.isPropertyAccessExpression(node.expression) || !ts$1.isIdentifier(node.expression.expression) || node.expression.expression.text !== "Promise") return;
|
|
40
|
-
switch (node.expression.name.text) {
|
|
41
|
-
case "reject": return "unnecessaryReject";
|
|
42
|
-
case "resolve": return "unnecessaryResolve";
|
|
43
|
-
default: return;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function isAsyncFunction(node) {
|
|
47
|
-
return node.modifiers?.some((modifier) => modifier.kind === ts$1.SyntaxKind.AsyncKeyword);
|
|
48
|
-
}
|
|
49
|
-
//#endregion
|
|
50
|
-
export { asyncUnnecessaryPromiseWrappers_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer using .at() for accessing elements at negative indices.";
|
|
3
|
-
readonly id: "atAccesses";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferAt", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/atAccesses.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/atAccesses.ts
|
|
6
|
-
var atAccesses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Prefer using .at() for accessing elements at negative indices.",
|
|
9
|
-
id: "atAccesses",
|
|
10
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
11
|
-
},
|
|
12
|
-
messages: { preferAt: {
|
|
13
|
-
primary: "Prefer using .at() with a negative index instead of calculating length minus an offset.",
|
|
14
|
-
secondary: ["The .at() method provides a cleaner way to access elements from the end of an array or string.", "Using .at(-1) is more readable than array[array.length - 1]."],
|
|
15
|
-
suggestions: ["Use .at() with a negative index to access elements from the end."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
return { visitors: { ElementAccessExpression: (node, { sourceFile }) => {
|
|
19
|
-
if (!isLeftHandSide(node) && isLengthMinusAccess(node, sourceFile)) context.report({
|
|
20
|
-
message: "preferAt",
|
|
21
|
-
range: getTSNodeRange(node, sourceFile)
|
|
22
|
-
});
|
|
23
|
-
} } };
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
function isLeftHandSide(node) {
|
|
27
|
-
switch (node.parent.kind) {
|
|
28
|
-
case ts$1.SyntaxKind.ArrayLiteralExpression: return ts$1.isBinaryExpression(node.parent.parent) && tsutils.isAssignmentKind(node.parent.parent.operatorToken.kind) && node.parent.parent.left === node.parent;
|
|
29
|
-
case ts$1.SyntaxKind.BinaryExpression: return tsutils.isAssignmentKind(node.parent.operatorToken.kind) && node.parent.left === node;
|
|
30
|
-
case ts$1.SyntaxKind.DeleteExpression: return true;
|
|
31
|
-
case ts$1.SyntaxKind.PostfixUnaryExpression:
|
|
32
|
-
case ts$1.SyntaxKind.PrefixUnaryExpression: return node.parent.operand === node;
|
|
33
|
-
case ts$1.SyntaxKind.PropertyAssignment:
|
|
34
|
-
case ts$1.SyntaxKind.ShorthandPropertyAssignment: return node.parent.parent.parent.kind === ts$1.SyntaxKind.BinaryExpression && tsutils.isAssignmentKind(node.parent.parent.parent.operatorToken.kind) && node.parent.parent.parent.left === node.parent.parent;
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
function isLengthMinusAccess(node, sourceFile) {
|
|
39
|
-
const argument = unwrapParenthesizedNode(node.argumentExpression);
|
|
40
|
-
if (!ts$1.isBinaryExpression(argument) || argument.operatorToken.kind !== ts$1.SyntaxKind.MinusToken) return false;
|
|
41
|
-
const left = unwrapParenthesizedNode(argument.left);
|
|
42
|
-
if (!ts$1.isPropertyAccessExpression(left) || left.name.text !== "length" || !hasSameTokens(left.expression, node.expression, sourceFile)) return false;
|
|
43
|
-
const right = unwrapParenthesizedNode(argument.right);
|
|
44
|
-
if (!ts$1.isNumericLiteral(right)) return false;
|
|
45
|
-
const offset = Number(right.text);
|
|
46
|
-
if (!Number.isInteger(offset) || offset <= 0) return false;
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
//#endregion
|
|
50
|
-
export { atAccesses_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports functions that wrap native coercion functions like `String`, `Number`, `BigInt`, `Boolean`, or `Symbol`.";
|
|
3
|
-
readonly id: "builtinCoercions";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "useBuiltin", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/builtinCoercions.ts
|
|
5
|
-
const nativeCoercionFunctions = /* @__PURE__ */ new Set([
|
|
6
|
-
"BigInt",
|
|
7
|
-
"Boolean",
|
|
8
|
-
"Number",
|
|
9
|
-
"String",
|
|
10
|
-
"Symbol"
|
|
11
|
-
]);
|
|
12
|
-
const arrayMethodsWithBooleanCallback = /* @__PURE__ */ new Set([
|
|
13
|
-
"every",
|
|
14
|
-
"filter",
|
|
15
|
-
"find",
|
|
16
|
-
"findIndex",
|
|
17
|
-
"findLast",
|
|
18
|
-
"findLastIndex",
|
|
19
|
-
"some"
|
|
20
|
-
]);
|
|
21
|
-
var builtinCoercions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
22
|
-
about: {
|
|
23
|
-
description: "Reports functions that wrap native coercion functions like `String`, `Number`, `BigInt`, `Boolean`, or `Symbol`.",
|
|
24
|
-
id: "builtinCoercions",
|
|
25
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
26
|
-
},
|
|
27
|
-
messages: { useBuiltin: {
|
|
28
|
-
primary: "Prefer using `{{ coercionFunction }}` directly instead of wrapping it in a function.",
|
|
29
|
-
secondary: ["Wrapping a native coercion function in another function adds unnecessary indirection.", "Using the built-in function directly is more concise and expresses intent more clearly."],
|
|
30
|
-
suggestions: ["Replace this function with `{{ coercionFunction }}`."]
|
|
31
|
-
} },
|
|
32
|
-
setup(context) {
|
|
33
|
-
function checkFunction(node, { sourceFile }) {
|
|
34
|
-
const problem = getFunctionProblem(node, sourceFile);
|
|
35
|
-
if (problem) context.report(problem);
|
|
36
|
-
}
|
|
37
|
-
return { visitors: {
|
|
38
|
-
ArrowFunction: checkFunction,
|
|
39
|
-
FunctionExpression: checkFunction
|
|
40
|
-
} };
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
function blockReturnsIdentifier(block, parameterName) {
|
|
44
|
-
if (block.statements.length !== 1) return false;
|
|
45
|
-
const statement = block.statements[0];
|
|
46
|
-
if (!statement || !ts$1.isReturnStatement(statement) || !statement.expression) return false;
|
|
47
|
-
return expressionMatchesName(statement.expression, parameterName);
|
|
48
|
-
}
|
|
49
|
-
function expressionMatchesName(expression, name) {
|
|
50
|
-
const unwrapped = ts$1.isParenthesizedExpression(expression) ? expression.expression : expression;
|
|
51
|
-
return ts$1.isIdentifier(unwrapped) && unwrapped.text === name;
|
|
52
|
-
}
|
|
53
|
-
function getCoercionCallName(expression, parameterName) {
|
|
54
|
-
if (!ts$1.isCallExpression(expression) || !ts$1.isIdentifier(expression.expression)) return;
|
|
55
|
-
const calleeName = expression.expression.text;
|
|
56
|
-
if (!nativeCoercionFunctions.has(calleeName) || expression.arguments.length !== 1) return;
|
|
57
|
-
const argument = expression.arguments[0];
|
|
58
|
-
if (!argument || !ts$1.isIdentifier(argument) || argument.text !== parameterName) return;
|
|
59
|
-
return calleeName;
|
|
60
|
-
}
|
|
61
|
-
function getCoercionWrapperProblem(node, parameterName, sourceFile) {
|
|
62
|
-
if (node.parameters.length !== 1) return;
|
|
63
|
-
const coercionFunction = getWrappedCoercionFunction(node, parameterName);
|
|
64
|
-
if (!coercionFunction) return;
|
|
65
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
66
|
-
return {
|
|
67
|
-
data: { coercionFunction },
|
|
68
|
-
fix: {
|
|
69
|
-
range,
|
|
70
|
-
text: coercionFunction
|
|
71
|
-
},
|
|
72
|
-
message: "useBuiltin",
|
|
73
|
-
range
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function getFunctionProblem(node, sourceFile) {
|
|
77
|
-
const soleParameterText = getSoleParameterText(node);
|
|
78
|
-
if (!soleParameterText) return;
|
|
79
|
-
return getIdentityCallbackProblem(node, soleParameterText, sourceFile) ?? getCoercionWrapperProblem(node, soleParameterText, sourceFile);
|
|
80
|
-
}
|
|
81
|
-
function getIdentityCallbackProblem(node, soleParameterText, sourceFile) {
|
|
82
|
-
if (!isIdentityFunction(node, soleParameterText) || !isArrayMethodCallback(node)) return;
|
|
83
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
84
|
-
return {
|
|
85
|
-
data: { coercionFunction: "Boolean" },
|
|
86
|
-
fix: {
|
|
87
|
-
range,
|
|
88
|
-
text: "Boolean"
|
|
89
|
-
},
|
|
90
|
-
message: "useBuiltin",
|
|
91
|
-
range
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
function getSoleParameterText(node) {
|
|
95
|
-
if (node.parameters.length !== 1) return;
|
|
96
|
-
const parameter = node.parameters[0];
|
|
97
|
-
if (!parameter || !ts$1.isIdentifier(parameter.name)) return;
|
|
98
|
-
return parameter.name.text;
|
|
99
|
-
}
|
|
100
|
-
function getWrappedCoercionFunction(node, parameterName) {
|
|
101
|
-
if (node.kind === ts$1.SyntaxKind.ArrowFunction && !ts$1.isBlock(node.body)) return getCoercionCallName(node.body, parameterName);
|
|
102
|
-
if (!ts$1.isBlock(node.body) || node.body.statements.length !== 1) return;
|
|
103
|
-
const statement = node.body.statements[0];
|
|
104
|
-
if (!statement || !ts$1.isReturnStatement(statement) || !statement.expression) return;
|
|
105
|
-
return getCoercionCallName(statement.expression, parameterName);
|
|
106
|
-
}
|
|
107
|
-
function isArrayMethodCallback(node) {
|
|
108
|
-
return ts$1.isCallExpression(node.parent) && node.parent.arguments[0] === node && ts$1.isPropertyAccessExpression(node.parent.expression) && arrayMethodsWithBooleanCallback.has(node.parent.expression.name.text);
|
|
109
|
-
}
|
|
110
|
-
function isIdentityFunction(node, soleParameterText) {
|
|
111
|
-
if (node.kind === ts$1.SyntaxKind.ArrowFunction && !ts$1.isBlock(node.body)) return expressionMatchesName(node.body, soleParameterText);
|
|
112
|
-
return ts$1.isBlock(node.body) && blockReturnsIdentifier(node.body, soleParameterText);
|
|
113
|
-
}
|
|
114
|
-
//#endregion
|
|
115
|
-
export { builtinCoercions_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Enforces using new for constructors that require it, and disallows new for primitive coercion functions.";
|
|
3
|
-
readonly id: "builtinConstructorNews";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "disallowedNew" | "missingNew", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/builtinConstructorNews.ts
|
|
5
|
-
const requiresNew = /* @__PURE__ */ new Set([
|
|
6
|
-
"Array",
|
|
7
|
-
"ArrayBuffer",
|
|
8
|
-
"BigInt64Array",
|
|
9
|
-
"BigUint64Array",
|
|
10
|
-
"DataView",
|
|
11
|
-
"Date",
|
|
12
|
-
"Error",
|
|
13
|
-
"FinalizationRegistry",
|
|
14
|
-
"Float16Array",
|
|
15
|
-
"Float32Array",
|
|
16
|
-
"Float64Array",
|
|
17
|
-
"Function",
|
|
18
|
-
"Int8Array",
|
|
19
|
-
"Int16Array",
|
|
20
|
-
"Int32Array",
|
|
21
|
-
"Map",
|
|
22
|
-
"Object",
|
|
23
|
-
"Promise",
|
|
24
|
-
"Proxy",
|
|
25
|
-
"RegExp",
|
|
26
|
-
"Set",
|
|
27
|
-
"SharedArrayBuffer",
|
|
28
|
-
"Uint8Array",
|
|
29
|
-
"Uint8ClampedArray",
|
|
30
|
-
"Uint16Array",
|
|
31
|
-
"Uint32Array",
|
|
32
|
-
"WeakMap",
|
|
33
|
-
"WeakRef",
|
|
34
|
-
"WeakSet"
|
|
35
|
-
]);
|
|
36
|
-
const disallowsNew = /* @__PURE__ */ new Set([
|
|
37
|
-
"BigInt",
|
|
38
|
-
"Boolean",
|
|
39
|
-
"Number",
|
|
40
|
-
"String",
|
|
41
|
-
"Symbol"
|
|
42
|
-
]);
|
|
43
|
-
var builtinConstructorNews_default = ruleCreator.createRule(typescriptLanguage, {
|
|
44
|
-
about: {
|
|
45
|
-
description: "Enforces using new for constructors that require it, and disallows new for primitive coercion functions.",
|
|
46
|
-
id: "builtinConstructorNews",
|
|
47
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
48
|
-
},
|
|
49
|
-
messages: {
|
|
50
|
-
disallowedNew: {
|
|
51
|
-
primary: "Use {{ name }}() without new to coerce values to primitives.",
|
|
52
|
-
secondary: ["Using `new` with `{{ name }}` creates an object wrapper around the primitive value.", "Object wrappers can cause unexpected behavior in comparisons and type checks."],
|
|
53
|
-
suggestions: ["Remove `new` to use {{ name }} as a coercion function."]
|
|
54
|
-
},
|
|
55
|
-
missingNew: {
|
|
56
|
-
primary: "Use new {{ name }}() to create instances.",
|
|
57
|
-
secondary: ["Built-in constructors like `{{ name }}` should be called with `new` for consistency.", "While some constructors work without `new`, using `new` makes the intent clearer."],
|
|
58
|
-
suggestions: ["Add `new` before {{ name }}()."]
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
setup(context) {
|
|
62
|
-
function checkNode(node, namesToReport, message, { program, sourceFile, typeChecker }) {
|
|
63
|
-
if (!ts$1.isIdentifier(node.expression)) return;
|
|
64
|
-
const name = node.expression.text;
|
|
65
|
-
if (!namesToReport.has(name)) return;
|
|
66
|
-
if (!isGlobalDeclarationOfName(node.expression, name, typeChecker, program)) return;
|
|
67
|
-
context.report({
|
|
68
|
-
data: { name },
|
|
69
|
-
message,
|
|
70
|
-
range: {
|
|
71
|
-
begin: node.getStart(sourceFile),
|
|
72
|
-
end: node.expression.getEnd()
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
return { visitors: {
|
|
77
|
-
CallExpression: (node, services) => {
|
|
78
|
-
checkNode(node, requiresNew, "missingNew", services);
|
|
79
|
-
},
|
|
80
|
-
NewExpression: (node, services) => {
|
|
81
|
-
checkNode(node, disallowsNew, "disallowedNew", services);
|
|
82
|
-
}
|
|
83
|
-
} };
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
//#endregion
|
|
87
|
-
export { builtinConstructorNews_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports lexical declarations in case clauses without wrapping them in blocks.";
|
|
3
|
-
readonly id: "caseDeclarations";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unexpectedLexicalDeclaration", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
//#region src/rules/caseDeclarations.ts
|
|
6
|
-
var caseDeclarations_default = ruleCreator.createRule(typescriptLanguage, {
|
|
7
|
-
about: {
|
|
8
|
-
description: "Reports lexical declarations in case clauses without wrapping them in blocks.",
|
|
9
|
-
id: "caseDeclarations",
|
|
10
|
-
presets: ["javascript"]
|
|
11
|
-
},
|
|
12
|
-
messages: { unexpectedLexicalDeclaration: {
|
|
13
|
-
primary: "Variables declared in case clauses without braces leak into the surrounding scope.",
|
|
14
|
-
secondary: ["Lexical declarations (let, const, function, class) are scoped to the entire switch statement, not just the case clause where they are declared.", "This can lead to unexpected behavior when the same variable name is used in multiple case clauses, as they will conflict in the same scope."],
|
|
15
|
-
suggestions: ["Wrap the case clause contents in curly braces {} to create a block scope."]
|
|
16
|
-
} },
|
|
17
|
-
setup(context) {
|
|
18
|
-
function getLexicalDeclaration(statements, sourceFile) {
|
|
19
|
-
for (const statement of statements) {
|
|
20
|
-
if (statement.kind === SyntaxKind.VariableStatement && tsutils.isNodeFlagSet(statement.declarationList, ts.NodeFlags.Let | ts.NodeFlags.Const)) return statement.declarationList.getChildAt(0, sourceFile);
|
|
21
|
-
if (statement.kind === SyntaxKind.ClassDeclaration || statement.kind === SyntaxKind.FunctionDeclaration) return statement.getChildAt(0, sourceFile);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function checkClause(node, { sourceFile }) {
|
|
25
|
-
const declarationNode = getLexicalDeclaration(node.statements, sourceFile);
|
|
26
|
-
if (declarationNode) context.report({
|
|
27
|
-
message: "unexpectedLexicalDeclaration",
|
|
28
|
-
range: getTSNodeRange(declarationNode, sourceFile)
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return { visitors: {
|
|
32
|
-
CaseClause: checkClause,
|
|
33
|
-
DefaultClause: checkClause
|
|
34
|
-
} };
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
//#endregion
|
|
38
|
-
export { caseDeclarations_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports switch statements with duplicate case clause test expressions.";
|
|
3
|
-
readonly id: "caseDuplicates";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "duplicateCase", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { hasSameTokens, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/caseDuplicates.ts
|
|
5
|
-
var caseDuplicates_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports switch statements with duplicate case clause test expressions.",
|
|
8
|
-
id: "caseDuplicates",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { duplicateCase: {
|
|
12
|
-
primary: "This case duplicates a previous case, so it will never be reached.",
|
|
13
|
-
secondary: ["Having duplicate case clauses in a switch statement is a logic error.", "The second case clause will never be reached because the first matching case will always execute first."],
|
|
14
|
-
suggestions: ["Remove the duplicate case clause or modify its test expression to be unique."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { SwitchStatement: (node, { sourceFile }) => {
|
|
18
|
-
const seenCases = [];
|
|
19
|
-
for (const clause of node.caseBlock.clauses) {
|
|
20
|
-
if (clause.kind !== SyntaxKind.CaseClause) continue;
|
|
21
|
-
if (seenCases.some((seenCase) => hasSameTokens(seenCase, clause.expression, sourceFile))) context.report({
|
|
22
|
-
message: "duplicateCase",
|
|
23
|
-
range: {
|
|
24
|
-
begin: clause.getStart(sourceFile),
|
|
25
|
-
end: clause.expression.getEnd()
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
else seenCases.push(clause.expression);
|
|
29
|
-
}
|
|
30
|
-
} } };
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
//#endregion
|
|
34
|
-
export { caseDuplicates_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports switch case clauses that fall through unexpectedly.";
|
|
3
|
-
readonly id: "caseFallthroughs";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unexpectedFallthrough", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/caseFallthroughs.ts
|
|
5
|
-
const fallthroughCommentPattern = /falls?\s*through/i;
|
|
6
|
-
function endsWithTerminatingStatement(statements) {
|
|
7
|
-
return !!statements.length && isTerminatingStatement(statements.at(-1));
|
|
8
|
-
}
|
|
9
|
-
function hasFallthroughComment(clause, nextClause, sourceFile) {
|
|
10
|
-
const sourceText = sourceFile.getFullText();
|
|
11
|
-
const commentRanges = ts$1.getLeadingCommentRanges(sourceText, nextClause.getFullStart());
|
|
12
|
-
if (commentRanges) for (const range of commentRanges) {
|
|
13
|
-
const comment = sourceText.slice(range.pos, range.end);
|
|
14
|
-
if (fallthroughCommentPattern.test(comment)) return true;
|
|
15
|
-
}
|
|
16
|
-
const trailingRanges = ts$1.getTrailingCommentRanges(sourceText, clause.getEnd());
|
|
17
|
-
if (trailingRanges) for (const range of trailingRanges) {
|
|
18
|
-
const comment = sourceText.slice(range.pos, range.end);
|
|
19
|
-
if (fallthroughCommentPattern.test(comment)) return true;
|
|
20
|
-
}
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
function isTerminatingStatement(node) {
|
|
24
|
-
switch (node.kind) {
|
|
25
|
-
case ts$1.SyntaxKind.Block: return endsWithTerminatingStatement(node.statements);
|
|
26
|
-
case ts$1.SyntaxKind.BreakStatement:
|
|
27
|
-
case ts$1.SyntaxKind.ContinueStatement:
|
|
28
|
-
case ts$1.SyntaxKind.ReturnStatement:
|
|
29
|
-
case ts$1.SyntaxKind.ThrowStatement: return true;
|
|
30
|
-
case ts$1.SyntaxKind.IfStatement: return !!node.elseStatement && isTerminatingStatement(node.thenStatement) && isTerminatingStatement(node.elseStatement);
|
|
31
|
-
case ts$1.SyntaxKind.SwitchStatement: return node.caseBlock.clauses.some(ts$1.isDefaultClause) && node.caseBlock.clauses.every((clause) => !clause.statements.length || endsWithTerminatingStatement(clause.statements));
|
|
32
|
-
case ts$1.SyntaxKind.TryStatement:
|
|
33
|
-
if (node.finallyBlock) return endsWithTerminatingStatement(node.finallyBlock.statements);
|
|
34
|
-
if (!node.catchClause) return endsWithTerminatingStatement(node.tryBlock.statements);
|
|
35
|
-
return endsWithTerminatingStatement(node.tryBlock.statements) && endsWithTerminatingStatement(node.catchClause.block.statements);
|
|
36
|
-
default: return false;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
var caseFallthroughs_default = ruleCreator.createRule(typescriptLanguage, {
|
|
40
|
-
about: {
|
|
41
|
-
description: "Reports switch case clauses that fall through unexpectedly.",
|
|
42
|
-
id: "caseFallthroughs",
|
|
43
|
-
presets: ["logical", "logicalStrict"]
|
|
44
|
-
},
|
|
45
|
-
messages: { unexpectedFallthrough: {
|
|
46
|
-
primary: "This case falls through to the next case without a break, return, or throw statement.",
|
|
47
|
-
secondary: ["Fallthrough in switch statements is often unintentional and can lead to bugs.", "If fallthrough is intentional, add a comment containing 'falls through' to indicate this."],
|
|
48
|
-
suggestions: [
|
|
49
|
-
"Add a `break` statement at the end of this case.",
|
|
50
|
-
"Add a `return` or `throw` statement if appropriate.",
|
|
51
|
-
"If fallthrough is intentional, add a `// falls through` comment."
|
|
52
|
-
]
|
|
53
|
-
} },
|
|
54
|
-
setup(context) {
|
|
55
|
-
return { visitors: { SwitchStatement: (node, { sourceFile }) => {
|
|
56
|
-
for (let i = 0; i < node.caseBlock.clauses.length - 1; i++) {
|
|
57
|
-
const clause = node.caseBlock.clauses[i];
|
|
58
|
-
if (!clause) continue;
|
|
59
|
-
const nextClause = node.caseBlock.clauses[i + 1];
|
|
60
|
-
if (!clause.statements.length || endsWithTerminatingStatement(clause.statements) || hasFallthroughComment(clause, nextClause, sourceFile)) continue;
|
|
61
|
-
const caseKeyword = ts$1.isCaseClause(clause) ? "case" : "default";
|
|
62
|
-
context.report({
|
|
63
|
-
message: "unexpectedFallthrough",
|
|
64
|
-
range: {
|
|
65
|
-
begin: clause.getStart(sourceFile),
|
|
66
|
-
end: clause.getStart(sourceFile) + caseKeyword.length
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
} } };
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
//#endregion
|
|
74
|
-
export { caseFallthroughs_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports `Promise` catch callback parameters that are not typed as unknown.";
|
|
3
|
-
readonly id: "catchCallbackTypes";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferUnknown", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { declarationIncludesGlobal, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import { TypeFlags, isFunctionLike, isInterfaceDeclaration, isPropertyAccessExpression } from "typescript";
|
|
5
|
-
import * as tsutils from "ts-api-utils";
|
|
6
|
-
//#region src/rules/catchCallbackTypes.ts
|
|
7
|
-
var catchCallbackTypes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
8
|
-
about: {
|
|
9
|
-
description: "Reports `Promise` catch callback parameters that are not typed as unknown.",
|
|
10
|
-
id: "catchCallbackTypes",
|
|
11
|
-
presets: ["logical", "logicalStrict"]
|
|
12
|
-
},
|
|
13
|
-
messages: { preferUnknown: {
|
|
14
|
-
primary: "The catch callback parameter should be typed as the safer `unknown` instead of `any`.",
|
|
15
|
-
secondary: [
|
|
16
|
-
"TypeScript's `useUnknownInCatchVariables` option only affects synchronous catch clauses, not Promise callbacks.",
|
|
17
|
-
"Promise rejection values can be anything, so using `unknown` forces proper type narrowing before use.",
|
|
18
|
-
"Using `any` in catch callbacks undermines type safety and can lead to runtime errors."
|
|
19
|
-
],
|
|
20
|
-
suggestions: ["Add an explicit `: unknown` type annotation to the callback parameter."]
|
|
21
|
-
} },
|
|
22
|
-
setup(context) {
|
|
23
|
-
function isGlobalPromiseType(type, program) {
|
|
24
|
-
const symbol = type.getSymbol();
|
|
25
|
-
if (symbol?.getName() !== "Promise") return false;
|
|
26
|
-
const declarations = symbol.getDeclarations();
|
|
27
|
-
if (!declarations) return false;
|
|
28
|
-
return declarations.some((declaration) => isInterfaceDeclaration(declaration) && declaration.name.text === "Promise" && declarationIncludesGlobal(declaration, program));
|
|
29
|
-
}
|
|
30
|
-
function isCatchOrThenCallback(node, typeChecker, program) {
|
|
31
|
-
if (!isPropertyAccessExpression(node.expression)) return;
|
|
32
|
-
const methodName = node.expression.name.text;
|
|
33
|
-
if (methodName !== "catch" && methodName !== "then") return;
|
|
34
|
-
if (!isGlobalPromiseType(getConstrainedTypeAtLocation(node.expression.expression, typeChecker), program)) return;
|
|
35
|
-
return methodName === "catch" ? "catch" : "then";
|
|
36
|
-
}
|
|
37
|
-
function checkCallbackParameter(callback, sourceFile, typeChecker) {
|
|
38
|
-
if (!isFunctionLike(callback) || !callback.parameters.length) return;
|
|
39
|
-
const firstParameter = callback.parameters[0];
|
|
40
|
-
if (firstParameter.type) {
|
|
41
|
-
const paramType = typeChecker.getTypeFromTypeNode(firstParameter.type);
|
|
42
|
-
if (tsutils.isTypeFlagSet(paramType, TypeFlags.Unknown) || !tsutils.isTypeFlagSet(paramType, TypeFlags.Any)) return;
|
|
43
|
-
}
|
|
44
|
-
context.report({
|
|
45
|
-
message: "preferUnknown",
|
|
46
|
-
range: {
|
|
47
|
-
begin: firstParameter.name.getStart(sourceFile),
|
|
48
|
-
end: firstParameter.type ? firstParameter.type.getEnd() : firstParameter.name.getEnd()
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return { visitors: { CallExpression: (node, { program, sourceFile, typeChecker }) => {
|
|
53
|
-
switch (isCatchOrThenCallback(node, typeChecker, program)) {
|
|
54
|
-
case "catch":
|
|
55
|
-
if (node.arguments.length >= 1) checkCallbackParameter(node.arguments[0], sourceFile, typeChecker);
|
|
56
|
-
break;
|
|
57
|
-
case "then":
|
|
58
|
-
if (node.arguments.length >= 2) checkCallbackParameter(node.arguments[1], sourceFile, typeChecker);
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
} } };
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
//#endregion
|
|
65
|
-
export { catchCallbackTypes_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Enforces a consistent naming convention for catch clause error variables.";
|
|
3
|
-
readonly id: "caughtVariableNames";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferErrorName", undefined>;
|
|
9
|
-
export default _default;
|