@flint.fyi/ts 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +360 -365
- package/dist/index.mjs +22467 -0
- package/package.json +10 -10
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -621
- package/lib/rules/accessorPairGroups.d.ts +0 -10
- package/lib/rules/accessorPairGroups.js +0 -48
- package/lib/rules/accessorPairTypes.d.ts +0 -10
- package/lib/rules/accessorPairTypes.js +0 -72
- package/lib/rules/accessorThisRecursion.d.ts +0 -10
- package/lib/rules/accessorThisRecursion.js +0 -65
- package/lib/rules/anyArguments.d.ts +0 -10
- package/lib/rules/anyArguments.js +0 -234
- package/lib/rules/anyAssignments.d.ts +0 -10
- package/lib/rules/anyAssignments.js +0 -265
- package/lib/rules/anyCalls.d.ts +0 -10
- package/lib/rules/anyCalls.js +0 -68
- package/lib/rules/anyMemberAccess.d.ts +0 -10
- package/lib/rules/anyMemberAccess.js +0 -85
- package/lib/rules/anyReturns.d.ts +0 -10
- package/lib/rules/anyReturns.js +0 -102
- package/lib/rules/arguments.d.ts +0 -10
- package/lib/rules/arguments.js +0 -38
- package/lib/rules/arrayCallbackReturns.d.ts +0 -10
- package/lib/rules/arrayCallbackReturns.js +0 -73
- package/lib/rules/arrayConstructors.d.ts +0 -10
- package/lib/rules/arrayConstructors.js +0 -47
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -10
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -54
- package/lib/rules/arrayElementDeletions.d.ts +0 -10
- package/lib/rules/arrayElementDeletions.js +0 -43
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -10
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -45
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -10
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -86
- package/lib/rules/arrayFilteredFinds.d.ts +0 -10
- package/lib/rules/arrayFilteredFinds.js +0 -80
- package/lib/rules/arrayFinds.d.ts +0 -10
- package/lib/rules/arrayFinds.js +0 -41
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMapMethods.js +0 -47
- package/lib/rules/arrayFlatMethods.d.ts +0 -10
- package/lib/rules/arrayFlatMethods.js +0 -83
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -10
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -33
- package/lib/rules/arrayIncludes.d.ts +0 -10
- package/lib/rules/arrayIncludes.js +0 -59
- package/lib/rules/arrayIncludesMethods.d.ts +0 -10
- package/lib/rules/arrayIncludesMethods.js +0 -37
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -10
- package/lib/rules/arrayIndexOfMethods.js +0 -51
- package/lib/rules/arrayLoops.d.ts +0 -10
- package/lib/rules/arrayLoops.js +0 -36
- package/lib/rules/arrayMapIdentities.d.ts +0 -10
- package/lib/rules/arrayMapIdentities.js +0 -74
- package/lib/rules/arrayMutableReverses.d.ts +0 -10
- package/lib/rules/arrayMutableReverses.js +0 -39
- package/lib/rules/arrayMutableSorts.d.ts +0 -10
- package/lib/rules/arrayMutableSorts.js +0 -72
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -10
- package/lib/rules/arrayReduceTypeArguments.js +0 -64
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -10
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -51
- package/lib/rules/arraySomeMethods.d.ts +0 -10
- package/lib/rules/arraySomeMethods.js +0 -77
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -10
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -74
- package/lib/rules/arrayTypes.d.ts +0 -17
- package/lib/rules/arrayTypes.js +0 -111
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -10
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -97
- package/lib/rules/asConstAssertions.d.ts +0 -10
- package/lib/rules/asConstAssertions.js +0 -57
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -10
- package/lib/rules/assignmentOperatorShorthands.js +0 -47
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -10
- package/lib/rules/asyncFunctionAwaits.js +0 -55
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -10
- package/lib/rules/asyncPromiseExecutors.js +0 -41
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -10
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -52
- package/lib/rules/atAccesses.d.ts +0 -10
- package/lib/rules/atAccesses.js +0 -52
- package/lib/rules/builtinCoercions.d.ts +0 -10
- package/lib/rules/builtinCoercions.js +0 -117
- package/lib/rules/builtinConstructorNews.d.ts +0 -10
- package/lib/rules/builtinConstructorNews.js +0 -89
- package/lib/rules/caseDeclarations.d.ts +0 -10
- package/lib/rules/caseDeclarations.js +0 -40
- package/lib/rules/caseDuplicates.d.ts +0 -10
- package/lib/rules/caseDuplicates.js +0 -36
- package/lib/rules/caseFallthroughs.d.ts +0 -10
- package/lib/rules/caseFallthroughs.js +0 -76
- package/lib/rules/catchCallbackTypes.d.ts +0 -10
- package/lib/rules/catchCallbackTypes.js +0 -67
- package/lib/rules/caughtVariableNames.d.ts +0 -10
- package/lib/rules/caughtVariableNames.js +0 -40
- package/lib/rules/chainedAssignments.d.ts +0 -10
- package/lib/rules/chainedAssignments.js +0 -33
- package/lib/rules/charAtComparisons.d.ts +0 -10
- package/lib/rules/charAtComparisons.js +0 -58
- package/lib/rules/classAssignments.d.ts +0 -10
- package/lib/rules/classAssignments.js +0 -29
- package/lib/rules/classFieldDeclarations.d.ts +0 -10
- package/lib/rules/classFieldDeclarations.js +0 -40
- package/lib/rules/classLiteralProperties.d.ts +0 -10
- package/lib/rules/classLiteralProperties.js +0 -45
- package/lib/rules/classMemberDuplicates.d.ts +0 -10
- package/lib/rules/classMemberDuplicates.js +0 -71
- package/lib/rules/classMethodsThis.d.ts +0 -14
- package/lib/rules/classMethodsThis.js +0 -124
- package/lib/rules/combinedPushes.d.ts +0 -10
- package/lib/rules/combinedPushes.js +0 -56
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -10
- package/lib/rules/consecutiveNonNullAssertions.js +0 -39
- package/lib/rules/consoleCalls.d.ts +0 -9
- package/lib/rules/consoleCalls.js +0 -28
- package/lib/rules/constantAssignments.d.ts +0 -10
- package/lib/rules/constantAssignments.js +0 -41
- package/lib/rules/constructorGenericCalls.d.ts +0 -16
- package/lib/rules/constructorGenericCalls.js +0 -138
- package/lib/rules/constructorReturns.d.ts +0 -10
- package/lib/rules/constructorReturns.js +0 -41
- package/lib/rules/constructorSupers.d.ts +0 -10
- package/lib/rules/constructorSupers.js +0 -77
- package/lib/rules/dateConstructorClones.d.ts +0 -10
- package/lib/rules/dateConstructorClones.js +0 -37
- package/lib/rules/dateNowTimestamps.d.ts +0 -10
- package/lib/rules/dateNowTimestamps.js +0 -57
- package/lib/rules/debuggerStatements.d.ts +0 -10
- package/lib/rules/debuggerStatements.js +0 -33
- package/lib/rules/defaultCaseLast.d.ts +0 -10
- package/lib/rules/defaultCaseLast.js +0 -36
- package/lib/rules/defaultParameterLast.d.ts +0 -10
- package/lib/rules/defaultParameterLast.js +0 -42
- package/lib/rules/deprecated.d.ts +0 -10
- package/lib/rules/deprecated.js +0 -243
- package/lib/rules/destructuringConsistency.d.ts +0 -10
- package/lib/rules/destructuringConsistency.js +0 -112
- package/lib/rules/duplicateArguments.d.ts +0 -10
- package/lib/rules/duplicateArguments.js +0 -45
- package/lib/rules/dynamicDeletes.d.ts +0 -10
- package/lib/rules/dynamicDeletes.js +0 -37
- package/lib/rules/elseIfDuplicates.d.ts +0 -10
- package/lib/rules/elseIfDuplicates.js +0 -38
- package/lib/rules/elseReturns.d.ts +0 -10
- package/lib/rules/elseReturns.js +0 -67
- package/lib/rules/emptyBlocks.d.ts +0 -10
- package/lib/rules/emptyBlocks.js +0 -56
- package/lib/rules/emptyDestructures.d.ts +0 -10
- package/lib/rules/emptyDestructures.js +0 -34
- package/lib/rules/emptyEnums.d.ts +0 -10
- package/lib/rules/emptyEnums.js +0 -30
- package/lib/rules/emptyExports.d.ts +0 -10
- package/lib/rules/emptyExports.js +0 -60
- package/lib/rules/emptyFiles.d.ts +0 -10
- package/lib/rules/emptyFiles.js +0 -44
- package/lib/rules/emptyFunctions.d.ts +0 -10
- package/lib/rules/emptyFunctions.js +0 -61
- package/lib/rules/emptyModuleAttributes.d.ts +0 -10
- package/lib/rules/emptyModuleAttributes.js +0 -35
- package/lib/rules/emptyObjectTypes.d.ts +0 -10
- package/lib/rules/emptyObjectTypes.js +0 -47
- package/lib/rules/emptyStaticBlocks.d.ts +0 -10
- package/lib/rules/emptyStaticBlocks.js +0 -42
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -10
- package/lib/rules/emptyTypeParameterLists.js +0 -31
- package/lib/rules/enumInitializers.d.ts +0 -10
- package/lib/rules/enumInitializers.js +0 -54
- package/lib/rules/enumMemberLiterals.d.ts +0 -10
- package/lib/rules/enumMemberLiterals.js +0 -39
- package/lib/rules/enumValueConsistency.d.ts +0 -10
- package/lib/rules/enumValueConsistency.js +0 -56
- package/lib/rules/enumValueDuplicates.d.ts +0 -10
- package/lib/rules/enumValueDuplicates.js +0 -60
- package/lib/rules/equalityOperatorNegations.d.ts +0 -9
- package/lib/rules/equalityOperatorNegations.js +0 -60
- package/lib/rules/equalityOperators.d.ts +0 -10
- package/lib/rules/equalityOperators.js +0 -44
- package/lib/rules/errorMessages.d.ts +0 -10
- package/lib/rules/errorMessages.js +0 -60
- package/lib/rules/errorSubclassProperties.d.ts +0 -10
- package/lib/rules/errorSubclassProperties.js +0 -144
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -10
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -55
- package/lib/rules/escapeSequenceCasing.d.ts +0 -10
- package/lib/rules/escapeSequenceCasing.js +0 -75
- package/lib/rules/evals.d.ts +0 -10
- package/lib/rules/evals.js +0 -31
- package/lib/rules/evolvingVariableTypes.d.ts +0 -10
- package/lib/rules/evolvingVariableTypes.js +0 -33
- package/lib/rules/exceptionAssignments.d.ts +0 -10
- package/lib/rules/exceptionAssignments.js +0 -39
- package/lib/rules/explicitAnys.d.ts +0 -10
- package/lib/rules/explicitAnys.js +0 -55
- package/lib/rules/exponentiationOperators.d.ts +0 -10
- package/lib/rules/exponentiationOperators.js +0 -34
- package/lib/rules/exportFromImports.d.ts +0 -10
- package/lib/rules/exportFromImports.js +0 -119
- package/lib/rules/exportMutables.d.ts +0 -10
- package/lib/rules/exportMutables.js +0 -33
- package/lib/rules/exportUniqueNames.d.ts +0 -10
- package/lib/rules/exportUniqueNames.js +0 -65
- package/lib/rules/extraneousClasses.d.ts +0 -16
- package/lib/rules/extraneousClasses.js +0 -111
- package/lib/rules/fetchMethodBodies.d.ts +0 -10
- package/lib/rules/fetchMethodBodies.js +0 -72
- package/lib/rules/finallyStatementSafety.d.ts +0 -10
- package/lib/rules/finallyStatementSafety.js +0 -47
- package/lib/rules/forDirections.d.ts +0 -10
- package/lib/rules/forDirections.js +0 -75
- package/lib/rules/forInArrays.d.ts +0 -10
- package/lib/rules/forInArrays.js +0 -46
- package/lib/rules/forInGuards.d.ts +0 -9
- package/lib/rules/forInGuards.js +0 -44
- package/lib/rules/functionApplySpreads.d.ts +0 -10
- package/lib/rules/functionApplySpreads.js +0 -63
- package/lib/rules/functionAssignments.d.ts +0 -10
- package/lib/rules/functionAssignments.js +0 -29
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -10
- package/lib/rules/functionCurryingRedundancy.js +0 -53
- package/lib/rules/functionDeclarationStyles.d.ts +0 -16
- package/lib/rules/functionDeclarationStyles.js +0 -67
- package/lib/rules/functionNameMatches.d.ts +0 -10
- package/lib/rules/functionNameMatches.js +0 -74
- package/lib/rules/functionNewCalls.d.ts +0 -10
- package/lib/rules/functionNewCalls.js +0 -42
- package/lib/rules/generatorFunctionYields.d.ts +0 -10
- package/lib/rules/generatorFunctionYields.js +0 -50
- package/lib/rules/getterReturns.d.ts +0 -10
- package/lib/rules/getterReturns.js +0 -65
- package/lib/rules/globalAssignments.d.ts +0 -10
- package/lib/rules/globalAssignments.js +0 -47
- package/lib/rules/globalObjectCalls.d.ts +0 -10
- package/lib/rules/globalObjectCalls.js +0 -42
- package/lib/rules/globalThisAliases.d.ts +0 -10
- package/lib/rules/globalThisAliases.js +0 -47
- package/lib/rules/impliedEvals.d.ts +0 -10
- package/lib/rules/impliedEvals.js +0 -130
- package/lib/rules/importEmptyBlocks.d.ts +0 -10
- package/lib/rules/importEmptyBlocks.js +0 -53
- package/lib/rules/importTypeSideEffects.d.ts +0 -10
- package/lib/rules/importTypeSideEffects.js +0 -31
- package/lib/rules/indexedObjectTypes.d.ts +0 -16
- package/lib/rules/indexedObjectTypes.js +0 -83
- package/lib/rules/instanceOfArrays.d.ts +0 -10
- package/lib/rules/instanceOfArrays.js +0 -31
- package/lib/rules/irregularWhitespaces.d.ts +0 -16
- package/lib/rules/irregularWhitespaces.js +0 -97
- package/lib/rules/isNaNComparisons.d.ts +0 -10
- package/lib/rules/isNaNComparisons.js +0 -43
- package/lib/rules/literalConstructorWrappers.d.ts +0 -10
- package/lib/rules/literalConstructorWrappers.js +0 -64
- package/lib/rules/mathMethods.d.ts +0 -10
- package/lib/rules/mathMethods.js +0 -128
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -10
- package/lib/rules/meaninglessVoidOperators.js +0 -39
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -10
- package/lib/rules/misleadingVoidExpressions.js +0 -128
- package/lib/rules/moduleSpecifierLists.d.ts +0 -10
- package/lib/rules/moduleSpecifierLists.js +0 -92
- package/lib/rules/multilineAmbiguities.d.ts +0 -10
- package/lib/rules/multilineAmbiguities.js +0 -64
- package/lib/rules/namedDefaultExports.d.ts +0 -10
- package/lib/rules/namedDefaultExports.js +0 -60
- package/lib/rules/namespaceDeclarations.d.ts +0 -14
- package/lib/rules/namespaceDeclarations.js +0 -37
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -10
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -40
- package/lib/rules/namespaceKeywords.d.ts +0 -10
- package/lib/rules/namespaceKeywords.js +0 -40
- package/lib/rules/nativeObjectExtensions.d.ts +0 -10
- package/lib/rules/nativeObjectExtensions.js +0 -114
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -10
- package/lib/rules/negativeIndexLengthMethods.js +0 -180
- package/lib/rules/negativeZeroComparisons.d.ts +0 -10
- package/lib/rules/negativeZeroComparisons.js +0 -48
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -10
- package/lib/rules/nestedStandaloneIfs.js +0 -105
- package/lib/rules/newDefinitions.d.ts +0 -10
- package/lib/rules/newDefinitions.js +0 -84
- package/lib/rules/newExpressions.d.ts +0 -10
- package/lib/rules/newExpressions.js +0 -38
- package/lib/rules/newNativeNonConstructors.d.ts +0 -10
- package/lib/rules/newNativeNonConstructors.js +0 -39
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -10
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -63
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -10
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -69
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -10
- package/lib/rules/nonNullAssertionPlacement.js +0 -94
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -10
- package/lib/rules/nonNullableTypeAssertions.js +0 -78
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -10
- package/lib/rules/nonOctalDecimalEscapes.js +0 -48
- package/lib/rules/nullishCheckStyle.d.ts +0 -21
- package/lib/rules/nullishCheckStyle.js +0 -144
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -22
- package/lib/rules/nullishCoalescingOperators.js +0 -323
- package/lib/rules/numberMethodRanges.d.ts +0 -10
- package/lib/rules/numberMethodRanges.js +0 -74
- package/lib/rules/numberStaticMethods.d.ts +0 -10
- package/lib/rules/numberStaticMethods.js +0 -53
- package/lib/rules/numericErasingOperations.d.ts +0 -10
- package/lib/rules/numericErasingOperations.js +0 -46
- package/lib/rules/numericLiteralParsing.d.ts +0 -10
- package/lib/rules/numericLiteralParsing.js +0 -66
- package/lib/rules/numericPrecision.d.ts +0 -10
- package/lib/rules/numericPrecision.js +0 -102
- package/lib/rules/numericSeparatorGroups.d.ts +0 -10
- package/lib/rules/numericSeparatorGroups.js +0 -101
- package/lib/rules/objectAssignSpreads.d.ts +0 -10
- package/lib/rules/objectAssignSpreads.js +0 -53
- package/lib/rules/objectCalls.d.ts +0 -10
- package/lib/rules/objectCalls.js +0 -38
- package/lib/rules/objectEntriesMethods.d.ts +0 -10
- package/lib/rules/objectEntriesMethods.js +0 -82
- package/lib/rules/objectHasOwns.d.ts +0 -10
- package/lib/rules/objectHasOwns.js +0 -50
- package/lib/rules/objectKeyDuplicates.d.ts +0 -10
- package/lib/rules/objectKeyDuplicates.js +0 -63
- package/lib/rules/objectProto.d.ts +0 -10
- package/lib/rules/objectProto.js +0 -50
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -10
- package/lib/rules/objectPrototypeBuiltIns.js +0 -54
- package/lib/rules/objectShorthand.d.ts +0 -10
- package/lib/rules/objectShorthand.js +0 -84
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -10
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -43
- package/lib/rules/objectTypeDefinitions.d.ts +0 -10
- package/lib/rules/objectTypeDefinitions.js +0 -34
- package/lib/rules/octalEscapes.d.ts +0 -10
- package/lib/rules/octalEscapes.js +0 -58
- package/lib/rules/octalNumbers.d.ts +0 -10
- package/lib/rules/octalNumbers.js +0 -55
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -10
- package/lib/rules/operatorAssignmentShorthand.js +0 -77
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -10
- package/lib/rules/overloadSignaturesAdjacent.js +0 -140
- package/lib/rules/parameterReassignments.d.ts +0 -10
- package/lib/rules/parameterReassignments.js +0 -45
- package/lib/rules/parseIntRadixes.d.ts +0 -10
- package/lib/rules/parseIntRadixes.js +0 -62
- package/lib/rules/propertyAccessNotation.d.ts +0 -13
- package/lib/rules/propertyAccessNotation.js +0 -119
- package/lib/rules/recursionOnlyArguments.d.ts +0 -10
- package/lib/rules/recursionOnlyArguments.js +0 -71
- package/lib/rules/redundantTypeConstituents.d.ts +0 -10
- package/lib/rules/redundantTypeConstituents.js +0 -277
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -10
- package/lib/rules/regexAllGlobalFlags.js +0 -56
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -10
- package/lib/rules/regexAmbiguousInvalidity.js +0 -297
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -10
- package/lib/rules/regexCharacterClassRanges.js +0 -137
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -10
- package/lib/rules/regexCharacterClassSetOperations.js +0 -81
- package/lib/rules/regexCharacterClasses.d.ts +0 -10
- package/lib/rules/regexCharacterClasses.js +0 -234
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -10
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -52
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -10
- package/lib/rules/regexContradictoryAssertions.js +0 -210
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -10
- package/lib/rules/regexControlCharacterEscapes.js +0 -130
- package/lib/rules/regexControlCharacters.d.ts +0 -10
- package/lib/rules/regexControlCharacters.js +0 -95
- package/lib/rules/regexDigitMatchers.d.ts +0 -10
- package/lib/rules/regexDigitMatchers.js +0 -180
- package/lib/rules/regexDollarEscapes.d.ts +0 -10
- package/lib/rules/regexDollarEscapes.js +0 -91
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -10
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -128
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -10
- package/lib/rules/regexEmptyAlternatives.js +0 -140
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -10
- package/lib/rules/regexEmptyCapturingGroups.js +0 -67
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -10
- package/lib/rules/regexEmptyCharacterClasses.js +0 -68
- package/lib/rules/regexEmptyGroups.d.ts +0 -10
- package/lib/rules/regexEmptyGroups.js +0 -66
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -92
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -10
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -68
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -10
- package/lib/rules/regexEmptyStringLiterals.js +0 -66
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -10
- package/lib/rules/regexEscapeBackspaces.js +0 -69
- package/lib/rules/regexExecutors.d.ts +0 -10
- package/lib/rules/regexExecutors.js +0 -58
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -10
- package/lib/rules/regexGraphemeStringLiterals.js +0 -51
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -10
- package/lib/rules/regexHexadecimalEscapes.js +0 -71
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -10
- package/lib/rules/regexIgnoreCaseFlags.js +0 -145
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -10
- package/lib/rules/regexInvisibleCharacters.js +0 -90
- package/lib/rules/regexLetterCasing.d.ts +0 -10
- package/lib/rules/regexLetterCasing.js +0 -186
- package/lib/rules/regexLiterals.d.ts +0 -10
- package/lib/rules/regexLiterals.js +0 -92
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexLookaroundAssertions.js +0 -163
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -10
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -94
- package/lib/rules/regexMatchNotation.d.ts +0 -10
- package/lib/rules/regexMatchNotation.js +0 -139
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -10
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -229
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -10
- package/lib/rules/regexMisleadingQuantifiers.js +0 -78
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -10
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -203
- package/lib/rules/regexNamedBackreferences.d.ts +0 -10
- package/lib/rules/regexNamedBackreferences.js +0 -48
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -9
- package/lib/rules/regexNamedCaptureGroups.js +0 -67
- package/lib/rules/regexNamedReplacements.d.ts +0 -10
- package/lib/rules/regexNamedReplacements.js +0 -93
- package/lib/rules/regexNonStandardFlags.d.ts +0 -10
- package/lib/rules/regexNonStandardFlags.js +0 -66
- package/lib/rules/regexObscureRanges.d.ts +0 -10
- package/lib/rules/regexObscureRanges.js +0 -93
- package/lib/rules/regexOctalEscapes.d.ts +0 -10
- package/lib/rules/regexOctalEscapes.js +0 -70
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -10
- package/lib/rules/regexPlusQuantifiers.js +0 -68
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -10
- package/lib/rules/regexPredefinedAssertions.js +0 -127
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -10
- package/lib/rules/regexQuestionQuantifiers.js +0 -104
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -10
- package/lib/rules/regexRepeatQuantifiers.js +0 -96
- package/lib/rules/regexResultArrayGroups.d.ts +0 -10
- package/lib/rules/regexResultArrayGroups.js +0 -187
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -10
- package/lib/rules/regexSetOperationOptimizations.js +0 -177
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -10
- package/lib/rules/regexStandaloneBackslashes.js +0 -59
- package/lib/rules/regexStarQuantifiers.d.ts +0 -10
- package/lib/rules/regexStarQuantifiers.js +0 -68
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -10
- package/lib/rules/regexSuperLinearBacktracking.js +0 -98
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -10
- package/lib/rules/regexSuperLinearMoves.js +0 -142
- package/lib/rules/regexTestMethods.d.ts +0 -10
- package/lib/rules/regexTestMethods.js +0 -83
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -10
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -107
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeEscapes.js +0 -97
- package/lib/rules/regexUnicodeFlag.d.ts +0 -9
- package/lib/rules/regexUnicodeFlag.js +0 -97
- package/lib/rules/regexUnicodeProperties.d.ts +0 -10
- package/lib/rules/regexUnicodeProperties.js +0 -133
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryAssertions.js +0 -223
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -125
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -74
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -10
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -108
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -118
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -10
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -144
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -10
- package/lib/rules/regexUnnecessaryEscapes.js +0 -136
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -80
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -198
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -93
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -104
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -69
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -10
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -137
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -10
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -123
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -10
- package/lib/rules/regexUnnecessarySetOperands.js +0 -136
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -10
- package/lib/rules/regexUnusedCapturingGroups.js +0 -69
- package/lib/rules/regexUnusedFlags.d.ts +0 -10
- package/lib/rules/regexUnusedFlags.js +0 -116
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -63
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -10
- package/lib/rules/regexUnusedQuantifiers.js +0 -63
- package/lib/rules/regexValidity.d.ts +0 -10
- package/lib/rules/regexValidity.js +0 -146
- package/lib/rules/regexWordMatchers.d.ts +0 -10
- package/lib/rules/regexWordMatchers.js +0 -146
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -10
- package/lib/rules/regexZeroQuantifiers.js +0 -60
- package/lib/rules/requireImports.d.ts +0 -10
- package/lib/rules/requireImports.js +0 -48
- package/lib/rules/responseJsonMethods.d.ts +0 -10
- package/lib/rules/responseJsonMethods.js +0 -51
- package/lib/rules/restrictedIdentifiers.d.ts +0 -13
- package/lib/rules/restrictedIdentifiers.js +0 -41
- package/lib/rules/restrictedImports.d.ts +0 -27
- package/lib/rules/restrictedImports.js +0 -166
- package/lib/rules/returnAssignments.d.ts +0 -10
- package/lib/rules/returnAssignments.js +0 -38
- package/lib/rules/returnThisTypes.d.ts +0 -10
- package/lib/rules/returnThisTypes.js +0 -94
- package/lib/rules/ruleCreator.d.ts +0 -3
- package/lib/rules/ruleCreator.js +0 -17
- package/lib/rules/selfAssignments.d.ts +0 -10
- package/lib/rules/selfAssignments.js +0 -29
- package/lib/rules/sequences.d.ts +0 -10
- package/lib/rules/sequences.js +0 -28
- package/lib/rules/setSizeLengthChecks.d.ts +0 -10
- package/lib/rules/setSizeLengthChecks.js +0 -48
- package/lib/rules/setterReturns.d.ts +0 -10
- package/lib/rules/setterReturns.js +0 -41
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -10
- package/lib/rules/shadowedRestrictedNames.js +0 -68
- package/lib/rules/singleVariableDeclarations.d.ts +0 -10
- package/lib/rules/singleVariableDeclarations.js +0 -36
- package/lib/rules/sizeComparisonOperators.d.ts +0 -16
- package/lib/rules/sizeComparisonOperators.js +0 -148
- package/lib/rules/sparseArrays.d.ts +0 -10
- package/lib/rules/sparseArrays.js +0 -43
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -10
- package/lib/rules/staticMemberOnlyClasses.js +0 -77
- package/lib/rules/stringCaseMismatches.d.ts +0 -10
- package/lib/rules/stringCaseMismatches.js +0 -58
- package/lib/rules/stringCodePoints.d.ts +0 -10
- package/lib/rules/stringCodePoints.js +0 -50
- package/lib/rules/stringSliceMethods.d.ts +0 -10
- package/lib/rules/stringSliceMethods.js +0 -47
- package/lib/rules/stringStartsEndsWith.d.ts +0 -10
- package/lib/rules/stringStartsEndsWith.js +0 -79
- package/lib/rules/structuredCloneMethods.d.ts +0 -10
- package/lib/rules/structuredCloneMethods.js +0 -39
- package/lib/rules/symbolDescriptions.d.ts +0 -10
- package/lib/rules/symbolDescriptions.js +0 -32
- package/lib/rules/thisAliases.d.ts +0 -10
- package/lib/rules/thisAliases.js +0 -44
- package/lib/rules/thisBeforeSuper.d.ts +0 -10
- package/lib/rules/thisBeforeSuper.js +0 -86
- package/lib/rules/throwErrors.d.ts +0 -10
- package/lib/rules/throwErrors.js +0 -61
- package/lib/rules/topLevelAwaits.d.ts +0 -10
- package/lib/rules/topLevelAwaits.js +0 -49
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -10
- package/lib/rules/tripleSlashReferenceValidity.js +0 -54
- package/lib/rules/tripleSlashReferences.d.ts +0 -10
- package/lib/rules/tripleSlashReferences.js +0 -34
- package/lib/rules/tsComments.d.ts +0 -22
- package/lib/rules/tsComments.js +0 -130
- package/lib/rules/tslintComments.d.ts +0 -10
- package/lib/rules/tslintComments.js +0 -36
- package/lib/rules/typeAssertionStyles.d.ts +0 -10
- package/lib/rules/typeAssertionStyles.js +0 -32
- package/lib/rules/typeImports.d.ts +0 -20
- package/lib/rules/typeImports.js +0 -283
- package/lib/rules/typeofComparisons.d.ts +0 -10
- package/lib/rules/typeofComparisons.js +0 -58
- package/lib/rules/unassignedVariables.d.ts +0 -10
- package/lib/rules/unassignedVariables.js +0 -34
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -10
- package/lib/rules/undefinedTypeofChecks.js +0 -41
- package/lib/rules/undefinedVariables.d.ts +0 -10
- package/lib/rules/undefinedVariables.js +0 -39
- package/lib/rules/unicodeBOMs.d.ts +0 -10
- package/lib/rules/unicodeBOMs.js +0 -39
- package/lib/rules/unnecessaryBinds.d.ts +0 -10
- package/lib/rules/unnecessaryBinds.js +0 -78
- package/lib/rules/unnecessaryBlocks.d.ts +0 -10
- package/lib/rules/unnecessaryBlocks.js +0 -60
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -10
- package/lib/rules/unnecessaryBooleanCasts.js +0 -58
- package/lib/rules/unnecessaryCatches.d.ts +0 -10
- package/lib/rules/unnecessaryCatches.js +0 -48
- package/lib/rules/unnecessaryComparisons.d.ts +0 -10
- package/lib/rules/unnecessaryComparisons.js +0 -300
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -10
- package/lib/rules/unnecessaryConcatenation.js +0 -28
- package/lib/rules/unnecessaryEscapes.d.ts +0 -10
- package/lib/rules/unnecessaryEscapes.js +0 -134
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -10
- package/lib/rules/unnecessaryMathClamps.js +0 -114
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -10
- package/lib/rules/unnecessaryNumericFractions.js +0 -50
- package/lib/rules/unnecessaryRenames.d.ts +0 -10
- package/lib/rules/unnecessaryRenames.js +0 -92
- package/lib/rules/unnecessaryTernaries.d.ts +0 -10
- package/lib/rules/unnecessaryTernaries.js +0 -88
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -10
- package/lib/rules/unnecessaryUseStricts.js +0 -40
- package/lib/rules/unsafeNegations.d.ts +0 -10
- package/lib/rules/unsafeNegations.js +0 -38
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -12
- package/lib/rules/utils/collectAccessorPairs.js +0 -29
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -3
- package/lib/rules/utils/countCommentsInRange.js +0 -12
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -16
- package/lib/rules/utils/discriminateAnyType.js +0 -38
- package/lib/rules/utils/equalityOperators.d.ts +0 -9
- package/lib/rules/utils/equalityOperators.js +0 -36
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -3
- package/lib/rules/utils/forEachReturnStatement.js +0 -29
- package/lib/rules/utils/formatReportedType.d.ts +0 -4
- package/lib/rules/utils/formatReportedType.js +0 -9
- package/lib/rules/utils/getConstrainedType.d.ts +0 -3
- package/lib/rules/utils/getConstrainedType.js +0 -9
- package/lib/rules/utils/getFunctionName.d.ts +0 -3
- package/lib/rules/utils/getFunctionName.js +0 -16
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -10
- package/lib/rules/utils/getRegExpConstruction.js +0 -26
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -7
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -13
- package/lib/rules/utils/getThisExpression.d.ts +0 -3
- package/lib/rules/utils/getThisExpression.js +0 -16
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -3
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -13
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -3
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -33
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -4
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -29
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -27
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -3
- package/lib/rules/utils/isInBooleanContext.js +0 -22
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -3
- package/lib/rules/utils/isTypeRecursive.js +0 -8
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -15
- package/lib/rules/utils/isUnsafeAssignment.js +0 -45
- package/lib/rules/utils/operators.d.ts +0 -5
- package/lib/rules/utils/operators.js +0 -35
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAst.js +0 -17
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -3
- package/lib/rules/utils/parseRegexpAstFull.js +0 -18
- package/lib/rules/utils/skipParentheses.d.ts +0 -3
- package/lib/rules/utils/skipParentheses.js +0 -10
- package/lib/rules/variableDeletions.d.ts +0 -10
- package/lib/rules/variableDeletions.js +0 -35
- package/lib/rules/voidOperator.d.ts +0 -10
- package/lib/rules/voidOperator.js +0 -34
- package/lib/rules/withStatements.d.ts +0 -10
- package/lib/rules/withStatements.js +0 -30
- package/lib/rules/wrapperObjects.d.ts +0 -10
- package/lib/rules/wrapperObjects.js +0 -36
- package/lib/type-utils/getSpecifierNames.d.ts +0 -3
- package/lib/type-utils/getSpecifierNames.js +0 -9
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -3
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -14
- package/lib/type-utils/isFromFile.d.ts +0 -3
- package/lib/type-utils/isFromFile.js +0 -13
- package/lib/type-utils/isFromPackage.d.ts +0 -3
- package/lib/type-utils/isFromPackage.js +0 -16
- package/lib/type-utils/matchesSpecifier.d.ts +0 -4
- package/lib/type-utils/matchesSpecifier.js +0 -20
- package/lib/type-utils/schemas.d.ts +0 -15
- package/lib/type-utils/schemas.js +0 -25
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
//#region src/rules/exportFromImports.ts
|
|
5
|
-
function getImportInfo(node, sourceFile) {
|
|
6
|
-
if (!node.importClause) return;
|
|
7
|
-
const info = {
|
|
8
|
-
declaration: node,
|
|
9
|
-
moduleSpecifier: ts.isStringLiteral(node.moduleSpecifier) ? node.moduleSpecifier.text : node.moduleSpecifier.getText(sourceFile),
|
|
10
|
-
namedImports: /* @__PURE__ */ new Map()
|
|
11
|
-
};
|
|
12
|
-
const clause = node.importClause;
|
|
13
|
-
if (clause.name) info.defaultImport = clause.name.text;
|
|
14
|
-
if (clause.namedBindings) {
|
|
15
|
-
if (ts.isNamespaceImport(clause.namedBindings)) info.namespaceImport = clause.namedBindings.name.text;
|
|
16
|
-
else if (ts.isNamedImports(clause.namedBindings)) for (const element of clause.namedBindings.elements) {
|
|
17
|
-
const importedName = element.propertyName ? element.propertyName.text : element.name.text;
|
|
18
|
-
const localName = element.name.text;
|
|
19
|
-
info.namedImports.set(localName, importedName);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return info;
|
|
23
|
-
}
|
|
24
|
-
var exportFromImports_default = ruleCreator.createRule(typescriptLanguage, {
|
|
25
|
-
about: {
|
|
26
|
-
description: "Reports imports that are re-exported and could use export...from syntax instead.",
|
|
27
|
-
id: "exportFromImports",
|
|
28
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
29
|
-
},
|
|
30
|
-
messages: {
|
|
31
|
-
preferExportDefaultFrom: {
|
|
32
|
-
primary: "Prefer `export { default } from '{{ module }}'` instead of separate import and export default.",
|
|
33
|
-
secondary: ["When re-exporting a default export, you can use `export { default } from` syntax.", "This is more concise and makes the re-export intent clearer."],
|
|
34
|
-
suggestions: ["Use `export { default } from '{{ module }}'` syntax."]
|
|
35
|
-
},
|
|
36
|
-
preferExportFrom: {
|
|
37
|
-
primary: "Prefer `export { {{ name }} } from '{{ module }}'` instead of separate import and export.",
|
|
38
|
-
secondary: ["When re-exporting from a module, it's unnecessary to import and then export.", "Using `export...from` is more concise and makes the re-export intent clearer."],
|
|
39
|
-
suggestions: ["Use `export { {{ name }} } from '{{ module }}'` syntax."]
|
|
40
|
-
},
|
|
41
|
-
preferExportNamespaceFrom: {
|
|
42
|
-
primary: "Prefer `export * as {{ name }} from '{{ module }}'` instead of separate import and export.",
|
|
43
|
-
secondary: ["When re-exporting a namespace, you can use `export * as` syntax.", "This is more concise and makes the re-export intent clearer."],
|
|
44
|
-
suggestions: ["Use `export * as {{ name }} from '{{ module }}'` syntax."]
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
setup(context) {
|
|
48
|
-
return { visitors: { SourceFile: (node, { sourceFile }) => {
|
|
49
|
-
const imports = /* @__PURE__ */ new Map();
|
|
50
|
-
const exportAssignments = [];
|
|
51
|
-
const namedExports = [];
|
|
52
|
-
for (const statement of node.statements) switch (statement.kind) {
|
|
53
|
-
case ts.SyntaxKind.ExportAssignment:
|
|
54
|
-
if (!statement.isExportEquals) exportAssignments.push(statement);
|
|
55
|
-
break;
|
|
56
|
-
case ts.SyntaxKind.ExportDeclaration:
|
|
57
|
-
if (!statement.moduleSpecifier) namedExports.push(statement);
|
|
58
|
-
break;
|
|
59
|
-
case ts.SyntaxKind.ImportDeclaration: {
|
|
60
|
-
const info = getImportInfo(statement, sourceFile);
|
|
61
|
-
if (info) {
|
|
62
|
-
if (info.defaultImport) imports.set(info.defaultImport, info);
|
|
63
|
-
for (const [localName] of info.namedImports) imports.set(localName, info);
|
|
64
|
-
if (info.namespaceImport) imports.set(info.namespaceImport, info);
|
|
65
|
-
}
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
for (const exportDeclaration of namedExports) {
|
|
70
|
-
if (!exportDeclaration.exportClause || !ts.isNamedExports(exportDeclaration.exportClause)) continue;
|
|
71
|
-
for (const element of exportDeclaration.exportClause.elements) {
|
|
72
|
-
const localName = element.propertyName ? element.propertyName.text : element.name.text;
|
|
73
|
-
const exportedName = element.name.text;
|
|
74
|
-
const importInfo = imports.get(localName);
|
|
75
|
-
if (!importInfo) continue;
|
|
76
|
-
if (importInfo.namedImports.has(localName)) context.report({
|
|
77
|
-
data: {
|
|
78
|
-
module: importInfo.moduleSpecifier,
|
|
79
|
-
name: exportedName
|
|
80
|
-
},
|
|
81
|
-
message: "preferExportFrom",
|
|
82
|
-
range: getTSNodeRange(element, sourceFile)
|
|
83
|
-
});
|
|
84
|
-
else if (importInfo.namespaceImport === localName) context.report({
|
|
85
|
-
data: {
|
|
86
|
-
module: importInfo.moduleSpecifier,
|
|
87
|
-
name: exportedName
|
|
88
|
-
},
|
|
89
|
-
message: "preferExportNamespaceFrom",
|
|
90
|
-
range: getTSNodeRange(element, sourceFile)
|
|
91
|
-
});
|
|
92
|
-
else if (importInfo.defaultImport === localName) context.report({
|
|
93
|
-
data: {
|
|
94
|
-
module: importInfo.moduleSpecifier,
|
|
95
|
-
name: exportedName
|
|
96
|
-
},
|
|
97
|
-
message: "preferExportFrom",
|
|
98
|
-
range: getTSNodeRange(element, sourceFile)
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
for (const exportAssignment of exportAssignments) {
|
|
103
|
-
if (!ts.isIdentifier(exportAssignment.expression)) continue;
|
|
104
|
-
const localName = exportAssignment.expression.text;
|
|
105
|
-
const importInfo = imports.get(localName);
|
|
106
|
-
if (importInfo?.defaultImport !== localName) continue;
|
|
107
|
-
context.report({
|
|
108
|
-
data: { module: importInfo.moduleSpecifier },
|
|
109
|
-
message: "preferExportDefaultFrom",
|
|
110
|
-
range: getTSNodeRange(exportAssignment, sourceFile)
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
} } };
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
//#endregion
|
|
117
|
-
export { exportFromImports_default as default };
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=exportFromImports.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports exporting mutable bindings (let or var).";
|
|
3
|
-
readonly id: "exportMutables";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noMutableExport", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=exportMutables.d.ts.map
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/exportMutables.ts
|
|
5
|
-
function isMutableDeclaration(node) {
|
|
6
|
-
return (node.flags & ts.NodeFlags.Let) !== 0 || (node.flags & ts.NodeFlags.Const) === 0;
|
|
7
|
-
}
|
|
8
|
-
var exportMutables_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports exporting mutable bindings (let or var).",
|
|
11
|
-
id: "exportMutables",
|
|
12
|
-
presets: ["logical", "logicalStrict"]
|
|
13
|
-
},
|
|
14
|
-
messages: { noMutableExport: {
|
|
15
|
-
primary: "Exported variable '{{ name }}' is mutable. Use const instead.",
|
|
16
|
-
secondary: ["Mutable exports can lead to confusing behavior when the value is changed after import.", "Consumers of the module may not expect the exported value to change."],
|
|
17
|
-
suggestions: ["Use const to declare the exported variable.", "If mutation is necessary, export a getter function instead."]
|
|
18
|
-
} },
|
|
19
|
-
setup(context) {
|
|
20
|
-
return { visitors: { VariableStatement: (node, { sourceFile }) => {
|
|
21
|
-
if (!isMutableDeclaration(node.declarationList) || !node.modifiers?.some((modifier) => modifier.kind === SyntaxKind.ExportKeyword)) return;
|
|
22
|
-
for (const declaration of node.declarationList.declarations) context.report({
|
|
23
|
-
data: { name: declaration.name.kind === SyntaxKind.Identifier ? declaration.name.text : declaration.name.getText(sourceFile) },
|
|
24
|
-
message: "noMutableExport",
|
|
25
|
-
range: getTSNodeRange(declaration.name, sourceFile)
|
|
26
|
-
});
|
|
27
|
-
} } };
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
//#endregion
|
|
31
|
-
export { exportMutables_default as default };
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=exportMutables.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports duplicate export names in a module.";
|
|
3
|
-
readonly id: "exportUniqueNames";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "duplicateExport", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=exportUniqueNames.d.ts.map
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/exportUniqueNames.ts
|
|
5
|
-
function hasDefaultModifier(modifiers) {
|
|
6
|
-
return modifiers?.some((mod) => mod.kind === SyntaxKind.DefaultKeyword);
|
|
7
|
-
}
|
|
8
|
-
function hasExportModifier(modifiers) {
|
|
9
|
-
return modifiers?.some((mod) => mod.kind === SyntaxKind.ExportKeyword);
|
|
10
|
-
}
|
|
11
|
-
var exportUniqueNames_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports duplicate export names in a module.",
|
|
14
|
-
id: "exportUniqueNames",
|
|
15
|
-
presets: ["javascript"]
|
|
16
|
-
},
|
|
17
|
-
messages: { duplicateExport: {
|
|
18
|
-
primary: "Duplicate export '{{ name }}' found.",
|
|
19
|
-
secondary: ["Having multiple exports with the same name creates ambiguity about which value is exported."],
|
|
20
|
-
suggestions: ["Remove or rename one of the duplicate exports."]
|
|
21
|
-
} },
|
|
22
|
-
setup(context) {
|
|
23
|
-
return { visitors: { SourceFile: (node, { sourceFile }) => {
|
|
24
|
-
const exportedNames = /* @__PURE__ */ new Map();
|
|
25
|
-
function checkAndReportDuplicate(name, node) {
|
|
26
|
-
if (exportedNames.get(name)) context.report({
|
|
27
|
-
data: { name },
|
|
28
|
-
message: "duplicateExport",
|
|
29
|
-
range: getTSNodeRange(node, sourceFile)
|
|
30
|
-
});
|
|
31
|
-
else exportedNames.set(name, node);
|
|
32
|
-
}
|
|
33
|
-
function checkClassOrFunctionDeclaration(statement) {
|
|
34
|
-
if (hasExportModifier(statement.modifiers) && !hasDefaultModifier(statement.modifiers) && statement.name) checkAndReportDuplicate(statement.name.text, statement.name);
|
|
35
|
-
}
|
|
36
|
-
function checkExportDeclaration(statement) {
|
|
37
|
-
if (statement.exportClause && ts.isNamedExports(statement.exportClause) && !statement.isTypeOnly) for (const specifier of statement.exportClause.elements) {
|
|
38
|
-
if (specifier.isTypeOnly) continue;
|
|
39
|
-
const exportedName = specifier.name.text;
|
|
40
|
-
checkAndReportDuplicate(exportedName, specifier.name);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
function checkVariableStatement(statement) {
|
|
44
|
-
if (!hasExportModifier(statement.modifiers)) return;
|
|
45
|
-
for (const declaration of statement.declarationList.declarations) if (ts.isIdentifier(declaration.name)) checkAndReportDuplicate(declaration.name.text, declaration.name);
|
|
46
|
-
}
|
|
47
|
-
for (const statement of node.statements) switch (statement.kind) {
|
|
48
|
-
case SyntaxKind.ClassDeclaration:
|
|
49
|
-
case SyntaxKind.FunctionDeclaration:
|
|
50
|
-
checkClassOrFunctionDeclaration(statement);
|
|
51
|
-
break;
|
|
52
|
-
case SyntaxKind.ExportDeclaration:
|
|
53
|
-
checkExportDeclaration(statement);
|
|
54
|
-
break;
|
|
55
|
-
case SyntaxKind.VariableStatement:
|
|
56
|
-
checkVariableStatement(statement);
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
} } };
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
//#endregion
|
|
63
|
-
export { exportUniqueNames_default as default };
|
|
64
|
-
|
|
65
|
-
//# sourceMappingURL=exportUniqueNames.js.map
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { z } from "zod/v4";
|
|
2
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
3
|
-
readonly description: "Reports classes used as static namespaces.";
|
|
4
|
-
readonly id: "extraneousClasses";
|
|
5
|
-
readonly presets: readonly ["logicalStrict"];
|
|
6
|
-
} & {
|
|
7
|
-
readonly pluginId: string;
|
|
8
|
-
readonly url: string;
|
|
9
|
-
}, "empty" | "onlyConstructor" | "onlyStatic", {
|
|
10
|
-
allowConstructorOnly: z.ZodDefault<z.ZodBoolean>;
|
|
11
|
-
allowEmpty: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
-
allowStaticOnly: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
-
allowWithDecorator: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
-
}>;
|
|
15
|
-
export default _default;
|
|
16
|
-
//# sourceMappingURL=extraneousClasses.d.ts.map
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts from "typescript";
|
|
4
|
-
import { z } from "zod/v4";
|
|
5
|
-
//#region src/rules/extraneousClasses.ts
|
|
6
|
-
function hasDecorators(node) {
|
|
7
|
-
return node.modifiers?.some(ts.isDecorator) ?? false;
|
|
8
|
-
}
|
|
9
|
-
function hasParameterProperties(constructor) {
|
|
10
|
-
return constructor.parameters.some((parameter) => parameter.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.PublicKeyword || modifier.kind === ts.SyntaxKind.PrivateKeyword || modifier.kind === ts.SyntaxKind.ProtectedKeyword || modifier.kind === ts.SyntaxKind.ReadonlyKeyword));
|
|
11
|
-
}
|
|
12
|
-
function hasStaticModifier(modifiers) {
|
|
13
|
-
return modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.StaticKeyword) ?? false;
|
|
14
|
-
}
|
|
15
|
-
function hasSuperClass(node) {
|
|
16
|
-
return node.heritageClauses?.some((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword) ?? false;
|
|
17
|
-
}
|
|
18
|
-
function isRealMember(member) {
|
|
19
|
-
return !ts.isConstructorDeclaration(member) && !ts.isClassStaticBlockDeclaration(member) && !ts.isSemicolonClassElement(member);
|
|
20
|
-
}
|
|
21
|
-
const options = {
|
|
22
|
-
allowConstructorOnly: z.boolean().default(false).describe("Whether to allow extraneous classes that contain only a constructor."),
|
|
23
|
-
allowEmpty: z.boolean().default(false).describe("Whether to allow extraneous classes that have no body (are empty)."),
|
|
24
|
-
allowStaticOnly: z.boolean().default(false).describe("Whether to allow extraneous classes that only contain static members."),
|
|
25
|
-
allowWithDecorator: z.boolean().default(false).describe("Whether to allow extraneous classes that include a decorator.")
|
|
26
|
-
};
|
|
27
|
-
var extraneousClasses_default = ruleCreator.createRule(typescriptLanguage, {
|
|
28
|
-
about: {
|
|
29
|
-
description: "Reports classes used as static namespaces.",
|
|
30
|
-
id: "extraneousClasses",
|
|
31
|
-
presets: ["logicalStrict"]
|
|
32
|
-
},
|
|
33
|
-
messages: {
|
|
34
|
-
empty: {
|
|
35
|
-
primary: "This empty class does nothing and can be removed.",
|
|
36
|
-
secondary: ["Empty classes serve no purpose and add unnecessary noise to the codebase."],
|
|
37
|
-
suggestions: ["Remove the empty class.", "Add members if you intended the class to have functionality."]
|
|
38
|
-
},
|
|
39
|
-
onlyConstructor: {
|
|
40
|
-
primary: "This class contains only a constructor and can be removed or replaced with a standalone function.",
|
|
41
|
-
secondary: ["Classes with only a constructor and no fields can be replaced with a standalone function."],
|
|
42
|
-
suggestions: ["Replace the class with a standalone function.", "Add instance properties or methods if the class needs state."]
|
|
43
|
-
},
|
|
44
|
-
onlyStatic: {
|
|
45
|
-
primary: "This class contains only static properties and can be removed or replaced with variables.",
|
|
46
|
-
secondary: ["Static-only classes can be replaced with plain objects or module exports.", "Using a class as a namespace adds unnecessary complexity."],
|
|
47
|
-
suggestions: ["Convert static methods to standalone exported functions.", "Use 'export * as namespace' to group exports if needed."]
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
options,
|
|
51
|
-
setup(context) {
|
|
52
|
-
function checkClass(node, { options, sourceFile }) {
|
|
53
|
-
if (hasSuperClass(node)) return;
|
|
54
|
-
if (options.allowWithDecorator && hasDecorators(node)) return;
|
|
55
|
-
const realMembers = node.members.filter(isRealMember);
|
|
56
|
-
const reportRange = node.name ? {
|
|
57
|
-
begin: node.name.getStart(sourceFile),
|
|
58
|
-
end: node.name.getEnd()
|
|
59
|
-
} : {
|
|
60
|
-
begin: node.getStart(sourceFile),
|
|
61
|
-
end: node.getEnd()
|
|
62
|
-
};
|
|
63
|
-
if (!realMembers.length) {
|
|
64
|
-
for (const member of node.members) if (ts.isConstructorDeclaration(member) && hasParameterProperties(member)) return;
|
|
65
|
-
if (node.members.some(ts.isConstructorDeclaration)) {
|
|
66
|
-
if (!options.allowConstructorOnly) context.report({
|
|
67
|
-
message: "onlyConstructor",
|
|
68
|
-
range: reportRange
|
|
69
|
-
});
|
|
70
|
-
} else if (!options.allowEmpty) context.report({
|
|
71
|
-
message: "empty",
|
|
72
|
-
range: reportRange
|
|
73
|
-
});
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
let onlyStatic = true;
|
|
77
|
-
let onlyConstructor = true;
|
|
78
|
-
for (const member of node.members) {
|
|
79
|
-
if (ts.isConstructorDeclaration(member)) {
|
|
80
|
-
if (hasParameterProperties(member)) {
|
|
81
|
-
onlyConstructor = false;
|
|
82
|
-
onlyStatic = false;
|
|
83
|
-
}
|
|
84
|
-
} else if (isRealMember(member)) {
|
|
85
|
-
onlyConstructor = false;
|
|
86
|
-
if (!hasStaticModifier(member.modifiers)) onlyStatic = false;
|
|
87
|
-
}
|
|
88
|
-
if (!onlyConstructor && !onlyStatic) break;
|
|
89
|
-
}
|
|
90
|
-
if (onlyConstructor) {
|
|
91
|
-
if (!options.allowConstructorOnly) context.report({
|
|
92
|
-
message: "onlyConstructor",
|
|
93
|
-
range: reportRange
|
|
94
|
-
});
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (onlyStatic && !options.allowStaticOnly) context.report({
|
|
98
|
-
message: "onlyStatic",
|
|
99
|
-
range: reportRange
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
return { visitors: {
|
|
103
|
-
ClassDeclaration: checkClass,
|
|
104
|
-
ClassExpression: checkClass
|
|
105
|
-
} };
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
//#endregion
|
|
109
|
-
export { extraneousClasses_default as default };
|
|
110
|
-
|
|
111
|
-
//# sourceMappingURL=extraneousClasses.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Disallow providing a body with GET or HEAD fetch requests.";
|
|
3
|
-
readonly id: "fetchMethodBodies";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noBody", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=fetchMethodBodies.d.ts.map
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/fetchMethodBodies.ts
|
|
5
|
-
var fetchMethodBodies_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Disallow providing a body with GET or HEAD fetch requests.",
|
|
8
|
-
id: "fetchMethodBodies",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { noBody: {
|
|
12
|
-
primary: "`body` is not allowed when the request method is `{{ method }}`.",
|
|
13
|
-
secondary: ["The Fetch API will throw a `TypeError` at runtime if a body is provided with a `{{ method }}` request."],
|
|
14
|
-
suggestions: ["Remove the `body` property from the options.", "Change the method to `POST`, `PUT`, or another method that supports request bodies."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function isUndefinedOrNull(node) {
|
|
18
|
-
return node.kind === SyntaxKind.Identifier && node.text === "undefined" || node.kind === SyntaxKind.NullKeyword;
|
|
19
|
-
}
|
|
20
|
-
function collectFetchOptions(node) {
|
|
21
|
-
let bodyName;
|
|
22
|
-
let methodText;
|
|
23
|
-
for (const property of node.properties) switch (property.kind) {
|
|
24
|
-
case SyntaxKind.PropertyAssignment:
|
|
25
|
-
if (property.name.kind !== SyntaxKind.Identifier) return;
|
|
26
|
-
switch (property.name.text) {
|
|
27
|
-
case "body":
|
|
28
|
-
if (isUndefinedOrNull(property.initializer)) return;
|
|
29
|
-
bodyName = property.name;
|
|
30
|
-
break;
|
|
31
|
-
case "method":
|
|
32
|
-
if (property.initializer.kind !== SyntaxKind.StringLiteral) return;
|
|
33
|
-
methodText = property.initializer.text;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
break;
|
|
37
|
-
case SyntaxKind.SpreadAssignment: return;
|
|
38
|
-
}
|
|
39
|
-
return {
|
|
40
|
-
bodyName,
|
|
41
|
-
methodText
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function checkFetchOptions(node, sourceFile) {
|
|
45
|
-
if (node.kind !== SyntaxKind.ObjectLiteralExpression) return;
|
|
46
|
-
const collected = collectFetchOptions(node);
|
|
47
|
-
if (!collected?.bodyName) return;
|
|
48
|
-
const method = collected.methodText?.toUpperCase() ?? "GET";
|
|
49
|
-
if (!["GET", "HEAD"].includes(method)) return;
|
|
50
|
-
context.report({
|
|
51
|
-
data: { method },
|
|
52
|
-
message: "noBody",
|
|
53
|
-
range: getTSNodeRange(collected.bodyName, sourceFile)
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
function checkNode(node, functionName, sourceFile) {
|
|
57
|
-
if (node.expression.kind === SyntaxKind.Identifier && node.expression.text === functionName && node.arguments && node.arguments.length >= 2) checkFetchOptions(node.arguments[1], sourceFile);
|
|
58
|
-
}
|
|
59
|
-
return { visitors: {
|
|
60
|
-
CallExpression: (node, { sourceFile }) => {
|
|
61
|
-
checkNode(node, "fetch", sourceFile);
|
|
62
|
-
},
|
|
63
|
-
NewExpression: (node, { sourceFile }) => {
|
|
64
|
-
checkNode(node, "Request", sourceFile);
|
|
65
|
-
}
|
|
66
|
-
} };
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
//#endregion
|
|
70
|
-
export { fetchMethodBodies_default as default };
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=fetchMethodBodies.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports control flow statements in `finally` blocks that can override control flow in `try`/`catch` blocks.";
|
|
3
|
-
readonly id: "finallyStatementSafety";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unsafeFinally", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=finallyStatementSafety.d.ts.map
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/finallyStatementSafety.ts
|
|
5
|
-
var finallyStatementSafety_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports control flow statements in `finally` blocks that can override control flow in `try`/`catch` blocks.",
|
|
8
|
-
id: "finallyStatementSafety",
|
|
9
|
-
presets: ["logical", "logicalStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { unsafeFinally: {
|
|
12
|
-
primary: "Control flow statements in `finally` blocks misleadingly override control flow from `try`/`catch` blocks.",
|
|
13
|
-
secondary: ["Control flow statements like `break`, `continue`, `return`, and `throw` in finally blocks can override control flow statements in the try or catch blocks.", "This can lead to unexpected behavior, as the `finally` block will execute regardless of what happens in `try`/`catch`, and its control flow takes precedence."],
|
|
14
|
-
suggestions: ["Move the control flow statement out of the `finally` block.", "Remove the control flow statement if the `finally` block is only used for cleanup operations."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { TryStatement: (node, { sourceFile }) => {
|
|
18
|
-
if (!node.finallyBlock) return;
|
|
19
|
-
function checkStatement(statement) {
|
|
20
|
-
if (statement.kind === SyntaxKind.ReturnStatement || statement.kind === SyntaxKind.ThrowStatement || statement.kind === SyntaxKind.BreakStatement || statement.kind === SyntaxKind.ContinueStatement) {
|
|
21
|
-
const firstToken = statement.getFirstToken(sourceFile);
|
|
22
|
-
if (!firstToken) return;
|
|
23
|
-
context.report({
|
|
24
|
-
message: "unsafeFinally",
|
|
25
|
-
range: {
|
|
26
|
-
begin: statement.getStart(sourceFile),
|
|
27
|
-
end: statement.getStart(sourceFile) + firstToken.getText().length
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
if (statement.kind === SyntaxKind.Block) statement.statements.forEach(checkStatement);
|
|
32
|
-
else if (statement.kind === SyntaxKind.IfStatement) {
|
|
33
|
-
checkStatement(statement.thenStatement);
|
|
34
|
-
if (statement.elseStatement) checkStatement(statement.elseStatement);
|
|
35
|
-
} else if (statement.kind === SyntaxKind.SwitchStatement) statement.caseBlock.clauses.forEach((clause) => {
|
|
36
|
-
clause.statements.forEach(checkStatement);
|
|
37
|
-
});
|
|
38
|
-
else if (statement.kind === SyntaxKind.LabeledStatement) checkStatement(statement.statement);
|
|
39
|
-
}
|
|
40
|
-
checkStatement(node.finallyBlock);
|
|
41
|
-
} } };
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
//#endregion
|
|
45
|
-
export { finallyStatementSafety_default as default };
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=finallyStatementSafety.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports for loops with counter variables that move in the wrong direction.";
|
|
3
|
-
readonly id: "forDirections";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "wrongDirection", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=forDirections.d.ts.map
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/forDirections.ts
|
|
5
|
-
function getConditionDirection(condition, counterName) {
|
|
6
|
-
if (condition.kind !== SyntaxKind.BinaryExpression) return;
|
|
7
|
-
const leftName = getCounterName(condition.left);
|
|
8
|
-
const rightName = getCounterName(condition.right);
|
|
9
|
-
if (!leftName && !rightName) return condition.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken ? getConditionDirection(condition.left, counterName) ?? getConditionDirection(condition.right, counterName) : void 0;
|
|
10
|
-
const isCounterLeft = leftName === counterName;
|
|
11
|
-
if (!isCounterLeft && !(rightName === counterName)) return;
|
|
12
|
-
const { operatorToken } = condition;
|
|
13
|
-
if (isCounterLeft) {
|
|
14
|
-
if (operatorToken.kind === SyntaxKind.LessThanToken || operatorToken.kind === SyntaxKind.LessThanEqualsToken) return 1;
|
|
15
|
-
if (operatorToken.kind === SyntaxKind.GreaterThanToken || operatorToken.kind === SyntaxKind.GreaterThanEqualsToken) return -1;
|
|
16
|
-
} else {
|
|
17
|
-
if (operatorToken.kind === SyntaxKind.LessThanToken || operatorToken.kind === SyntaxKind.LessThanEqualsToken) return -1;
|
|
18
|
-
if (operatorToken.kind === SyntaxKind.GreaterThanToken || operatorToken.kind === SyntaxKind.GreaterThanEqualsToken) return 1;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function getCounterName(node) {
|
|
22
|
-
return node.kind === SyntaxKind.Identifier ? node.text : void 0;
|
|
23
|
-
}
|
|
24
|
-
function getIncrementorDirection(incrementor) {
|
|
25
|
-
if (incrementor.kind === SyntaxKind.PostfixUnaryExpression || incrementor.kind === SyntaxKind.PrefixUnaryExpression) switch (incrementor.operator) {
|
|
26
|
-
case SyntaxKind.MinusMinusToken: return -1;
|
|
27
|
-
case SyntaxKind.PlusPlusToken: return 1;
|
|
28
|
-
default: return;
|
|
29
|
-
}
|
|
30
|
-
if (incrementor.kind === SyntaxKind.BinaryExpression) {
|
|
31
|
-
const { operatorToken, right } = incrementor;
|
|
32
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken || operatorToken.kind === SyntaxKind.MinusEqualsToken) {
|
|
33
|
-
if (right.kind === SyntaxKind.NumericLiteral) {
|
|
34
|
-
const value = Number(right.text);
|
|
35
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken) return value > 0 ? 1 : value < 0 ? -1 : 0;
|
|
36
|
-
return value > 0 ? -1 : value < 0 ? 1 : 0;
|
|
37
|
-
}
|
|
38
|
-
if (right.kind === SyntaxKind.PrefixUnaryExpression && right.operator === SyntaxKind.MinusToken && right.operand.kind === SyntaxKind.NumericLiteral) {
|
|
39
|
-
const value = Number(right.operand.text);
|
|
40
|
-
if (operatorToken.kind === SyntaxKind.PlusEqualsToken) return value > 0 ? -1 : 1;
|
|
41
|
-
return value > 0 ? 1 : -1;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
var forDirections_default = ruleCreator.createRule(typescriptLanguage, {
|
|
47
|
-
about: {
|
|
48
|
-
description: "Reports for loops with counter variables that move in the wrong direction.",
|
|
49
|
-
id: "forDirections",
|
|
50
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
51
|
-
},
|
|
52
|
-
messages: { wrongDirection: {
|
|
53
|
-
primary: "The update moves the counter in the wrong direction for this loop condition.",
|
|
54
|
-
secondary: ["A for loop with a counter that moves in the wrong direction relative to its stop condition will run infinitely or never execute.", "When the counter increases but the condition expects it to decrease (or vice versa), the loop logic is incorrect."],
|
|
55
|
-
suggestions: ["Verify the loop counter update direction matches the condition."]
|
|
56
|
-
} },
|
|
57
|
-
setup(context) {
|
|
58
|
-
return { visitors: { ForStatement: (node, { sourceFile }) => {
|
|
59
|
-
if (!node.condition || !node.incrementor || node.initializer?.kind !== SyntaxKind.VariableDeclarationList) return;
|
|
60
|
-
const declaration = node.initializer.declarations.at(0);
|
|
61
|
-
if (declaration?.name.kind !== SyntaxKind.Identifier) return;
|
|
62
|
-
const updateDirection = getIncrementorDirection(node.incrementor);
|
|
63
|
-
if (!updateDirection) return;
|
|
64
|
-
const conditionDirection = getConditionDirection(node.condition, declaration.name.text);
|
|
65
|
-
if (conditionDirection && conditionDirection !== updateDirection) context.report({
|
|
66
|
-
message: "wrongDirection",
|
|
67
|
-
range: getTSNodeRange(node.incrementor, sourceFile)
|
|
68
|
-
});
|
|
69
|
-
} } };
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
//#endregion
|
|
73
|
-
export { forDirections_default as default };
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=forDirections.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports iterating over an array with a for-in loop.";
|
|
3
|
-
readonly id: "forInArrays";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "forIn", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=forInArrays.d.ts.map
|
package/lib/rules/forInArrays.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { isTypeRecursive } from "./utils/isTypeRecursive.js";
|
|
4
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import ts from "typescript";
|
|
6
|
-
import * as tsutils from "ts-api-utils";
|
|
7
|
-
//#region src/rules/forInArrays.ts
|
|
8
|
-
var forInArrays_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports iterating over an array with a for-in loop.",
|
|
11
|
-
id: "forInArrays",
|
|
12
|
-
presets: ["logical", "logicalStrict"]
|
|
13
|
-
},
|
|
14
|
-
messages: { forIn: {
|
|
15
|
-
primary: "For-in loops over arrays have surprising behavior that often leads to bugs.",
|
|
16
|
-
secondary: [
|
|
17
|
-
"A for-in loop (`for (const i in o)`) iterates over all enumerable properties of an object, including those that are not array indices.",
|
|
18
|
-
"This can lead to unexpected behavior when used with arrays, as it may include properties that are not part of the array's numeric indices.",
|
|
19
|
-
"It also returns the index key (`i`) as a string, which is not the expected numeric type for array indices."
|
|
20
|
-
],
|
|
21
|
-
suggestions: ["Use a construct more suited for arrays, such as a for-of loop (`for (const i of o)`)."]
|
|
22
|
-
} },
|
|
23
|
-
setup(context) {
|
|
24
|
-
function hasNumberLikeLength(type, typeChecker) {
|
|
25
|
-
const lengthProperty = type.getProperty("length");
|
|
26
|
-
if (lengthProperty == null) return false;
|
|
27
|
-
return tsutils.isTypeFlagSet(typeChecker.getTypeOfSymbol(lengthProperty), ts.TypeFlags.NumberLike);
|
|
28
|
-
}
|
|
29
|
-
function isArrayLike(type, typeChecker) {
|
|
30
|
-
return isTypeRecursive(type, (t) => t.getNumberIndexType() != null && hasNumberLikeLength(t, typeChecker));
|
|
31
|
-
}
|
|
32
|
-
return { visitors: { ForInStatement: (node, { sourceFile, typeChecker }) => {
|
|
33
|
-
if (isArrayLike(getConstrainedTypeAtLocation(node.expression, typeChecker), typeChecker)) context.report({
|
|
34
|
-
message: "forIn",
|
|
35
|
-
range: {
|
|
36
|
-
begin: node.getStart(sourceFile),
|
|
37
|
-
end: node.statement.getStart(sourceFile) - 1
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
} } };
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
//#endregion
|
|
44
|
-
export { forInArrays_default as default };
|
|
45
|
-
|
|
46
|
-
//# sourceMappingURL=forInArrays.js.map
|