@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,265 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { AnyType, discriminateAnyType } from "./utils/discriminateAnyType.js";
|
|
3
|
-
import { formatReportedType } from "./utils/formatReportedType.js";
|
|
4
|
-
import { isUnsafeAssignment } from "./utils/isUnsafeAssignment.js";
|
|
5
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
6
|
-
import * as ts$1 from "typescript";
|
|
7
|
-
import * as tsutils from "ts-api-utils";
|
|
8
|
-
//#region src/rules/anyAssignments.ts
|
|
9
|
-
function isTypeAny(type) {
|
|
10
|
-
return tsutils.isTypeFlagSet(type, ts$1.TypeFlags.Any) && !tsutils.isIntrinsicErrorType(type);
|
|
11
|
-
}
|
|
12
|
-
function isTypeAnyArray(type, checker) {
|
|
13
|
-
if (!checker.isArrayType(type)) return false;
|
|
14
|
-
const elementType = checker.getTypeArguments(type)[0];
|
|
15
|
-
return elementType !== void 0 && isTypeAny(elementType);
|
|
16
|
-
}
|
|
17
|
-
function isTypeAnyOrUnknown(type) {
|
|
18
|
-
return tsutils.isTypeFlagSet(type, ts$1.TypeFlags.Any | ts$1.TypeFlags.Unknown);
|
|
19
|
-
}
|
|
20
|
-
var anyAssignments_default = ruleCreator.createRule(typescriptLanguage, {
|
|
21
|
-
about: {
|
|
22
|
-
description: "Reports assigning a value with type `any` to variables and properties.",
|
|
23
|
-
id: "anyAssignments",
|
|
24
|
-
presets: ["logical", "logicalStrict"]
|
|
25
|
-
},
|
|
26
|
-
messages: {
|
|
27
|
-
unsafeArrayDestructure: {
|
|
28
|
-
primary: "Unsafe array destructuring of a value of type {{ type }}.",
|
|
29
|
-
secondary: ["Destructuring an `any[]` array defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
30
|
-
suggestions: ["Ensure the array has a well-defined, specific element type."]
|
|
31
|
-
},
|
|
32
|
-
unsafeArrayPatternFromTuple: {
|
|
33
|
-
primary: "Unsafe array destructuring of a tuple element with type {{ type }}.",
|
|
34
|
-
secondary: ["Destructuring a tuple with `any` elements defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
35
|
-
suggestions: ["Ensure the tuple has well-defined, specific element types."]
|
|
36
|
-
},
|
|
37
|
-
unsafeArraySpread: {
|
|
38
|
-
primary: "Unsafe spread of type `{{ sender }}` into array of type `{{ receiver }}`.",
|
|
39
|
-
secondary: ["Spreading an `any[]` into a typed array defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
40
|
-
suggestions: ["Ensure the spread array has compatible element types."]
|
|
41
|
-
},
|
|
42
|
-
unsafeAssignment: {
|
|
43
|
-
primary: "Unsafe assignment of a value of type `{{ type }}`.",
|
|
44
|
-
secondary: ["Assigning a value of type `any` or a similar unsafe type defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
45
|
-
suggestions: ["Ensure the assigned value has a well-defined, specific type."]
|
|
46
|
-
},
|
|
47
|
-
unsafeAssignmentToVariable: {
|
|
48
|
-
primary: "Unsafe assignment of type `{{ sender }}` to variable of type `{{ receiver }}`.",
|
|
49
|
-
secondary: ["The variable's declared type does not safely accept the value being assigned.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
50
|
-
suggestions: ["Adjust the type of the variable to match the assigned value, if appropriate.", "Otherwise, refine the assigned value to ensure it matches the expected type."]
|
|
51
|
-
},
|
|
52
|
-
unsafeObjectPattern: {
|
|
53
|
-
primary: "Unsafe object destructuring of a property with type {{ type }}.",
|
|
54
|
-
secondary: ["Destructuring an object with `any` properties defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
55
|
-
suggestions: ["Ensure the object has well-defined, specific property types."]
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
setup(context) {
|
|
59
|
-
function checkArrayDestructureWorker(pattern, senderType, sourceFile, typeChecker) {
|
|
60
|
-
if (isTypeAnyArray(senderType, typeChecker)) {
|
|
61
|
-
context.report({
|
|
62
|
-
data: { type: "`any[]`" },
|
|
63
|
-
message: "unsafeArrayDestructure",
|
|
64
|
-
range: {
|
|
65
|
-
begin: pattern.getStart(sourceFile),
|
|
66
|
-
end: pattern.getEnd()
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
if (!typeChecker.isTupleType(senderType)) return false;
|
|
72
|
-
const tupleElements = typeChecker.getTypeArguments(senderType);
|
|
73
|
-
let didReport = false;
|
|
74
|
-
for (let i = 0; i < pattern.elements.length; i++) {
|
|
75
|
-
const element = pattern.elements[i];
|
|
76
|
-
if (!element || ts$1.isOmittedExpression(element)) continue;
|
|
77
|
-
if (element.dotDotDotToken) continue;
|
|
78
|
-
const elementType = tupleElements[i];
|
|
79
|
-
if (!elementType) continue;
|
|
80
|
-
const name = element.name;
|
|
81
|
-
if (isTypeAny(elementType)) {
|
|
82
|
-
context.report({
|
|
83
|
-
data: { type: "`any`" },
|
|
84
|
-
message: "unsafeArrayPatternFromTuple",
|
|
85
|
-
range: {
|
|
86
|
-
begin: name.getStart(sourceFile),
|
|
87
|
-
end: name.getEnd()
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
didReport = true;
|
|
91
|
-
} else if (ts$1.isArrayBindingPattern(name)) didReport = checkArrayDestructureWorker(name, elementType, sourceFile, typeChecker) || didReport;
|
|
92
|
-
else if (ts$1.isObjectBindingPattern(name)) didReport = checkObjectDestructureWorker(name, elementType, sourceFile, typeChecker) || didReport;
|
|
93
|
-
}
|
|
94
|
-
return didReport;
|
|
95
|
-
}
|
|
96
|
-
function checkObjectDestructureWorker(pattern, senderType, sourceFile, typeChecker) {
|
|
97
|
-
let didReport = false;
|
|
98
|
-
for (const element of pattern.elements) {
|
|
99
|
-
if (element.dotDotDotToken) continue;
|
|
100
|
-
let key;
|
|
101
|
-
const propertyName = element.propertyName ?? element.name;
|
|
102
|
-
if (ts$1.isIdentifier(propertyName) || ts$1.isStringLiteral(propertyName) || ts$1.isNumericLiteral(propertyName)) key = propertyName.text;
|
|
103
|
-
else if (ts$1.isComputedPropertyName(propertyName)) {
|
|
104
|
-
const expression = propertyName.expression;
|
|
105
|
-
if (ts$1.isStringLiteral(expression) || ts$1.isNoSubstitutionTemplateLiteral(expression)) key = expression.text;
|
|
106
|
-
}
|
|
107
|
-
if (key === void 0) continue;
|
|
108
|
-
const propertySymbol = senderType.getProperty(key);
|
|
109
|
-
if (!propertySymbol) continue;
|
|
110
|
-
const propertyType = typeChecker.getTypeOfSymbolAtLocation(propertySymbol, pattern);
|
|
111
|
-
const name = element.name;
|
|
112
|
-
if (isTypeAny(propertyType)) {
|
|
113
|
-
context.report({
|
|
114
|
-
data: { type: "`any`" },
|
|
115
|
-
message: "unsafeObjectPattern",
|
|
116
|
-
range: {
|
|
117
|
-
begin: name.getStart(sourceFile),
|
|
118
|
-
end: name.getEnd()
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
didReport = true;
|
|
122
|
-
} else if (ts$1.isArrayBindingPattern(name)) didReport = checkArrayDestructureWorker(name, propertyType, sourceFile, typeChecker) || didReport;
|
|
123
|
-
else if (ts$1.isObjectBindingPattern(name)) didReport = checkObjectDestructureWorker(name, propertyType, sourceFile, typeChecker) || didReport;
|
|
124
|
-
}
|
|
125
|
-
return didReport;
|
|
126
|
-
}
|
|
127
|
-
function checkArrayDestructure(pattern, senderType, sourceFile, typeChecker) {
|
|
128
|
-
return checkArrayDestructureWorker(pattern, senderType, sourceFile, typeChecker);
|
|
129
|
-
}
|
|
130
|
-
function checkObjectDestructure(pattern, senderType, sourceFile, typeChecker) {
|
|
131
|
-
return checkObjectDestructureWorker(pattern, senderType, sourceFile, typeChecker);
|
|
132
|
-
}
|
|
133
|
-
function checkAssignment(initializerType, declaredType, initializer, reportNode, sourceFile, typeChecker) {
|
|
134
|
-
if (tsutils.isIntrinsicErrorType(initializerType)) return false;
|
|
135
|
-
const anyType = discriminateAnyType(initializerType, typeChecker, initializer);
|
|
136
|
-
if (declaredType === void 0) {
|
|
137
|
-
if (anyType !== AnyType.Safe) {
|
|
138
|
-
context.report({
|
|
139
|
-
data: { type: anyType },
|
|
140
|
-
message: "unsafeAssignment",
|
|
141
|
-
range: {
|
|
142
|
-
begin: reportNode.getStart(sourceFile),
|
|
143
|
-
end: reportNode.getEnd()
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
if (isTypeAnyOrUnknown(declaredType)) return false;
|
|
151
|
-
const result = isUnsafeAssignment(initializerType, declaredType, initializer);
|
|
152
|
-
if (!result) return false;
|
|
153
|
-
context.report({
|
|
154
|
-
data: {
|
|
155
|
-
receiver: formatReportedType(result.receiver, typeChecker),
|
|
156
|
-
sender: formatReportedType(result.sender, typeChecker)
|
|
157
|
-
},
|
|
158
|
-
message: "unsafeAssignmentToVariable",
|
|
159
|
-
range: {
|
|
160
|
-
begin: reportNode.getStart(sourceFile),
|
|
161
|
-
end: reportNode.getEnd()
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
return { visitors: {
|
|
167
|
-
ArrayLiteralExpression: (node, { sourceFile, typeChecker }) => {
|
|
168
|
-
for (const element of node.elements) {
|
|
169
|
-
if (!ts$1.isSpreadElement(element)) continue;
|
|
170
|
-
const spreadType = typeChecker.getTypeAtLocation(element.expression);
|
|
171
|
-
if (!typeChecker.isArrayType(spreadType)) continue;
|
|
172
|
-
const spreadElementType = typeChecker.getTypeArguments(spreadType)[0];
|
|
173
|
-
if (!spreadElementType || !isTypeAny(spreadElementType)) continue;
|
|
174
|
-
const parentType = typeChecker.getContextualType(node);
|
|
175
|
-
if (!parentType || !typeChecker.isArrayType(parentType)) continue;
|
|
176
|
-
const parentElementType = typeChecker.getTypeArguments(parentType)[0];
|
|
177
|
-
if (!parentElementType || isTypeAnyOrUnknown(parentElementType)) continue;
|
|
178
|
-
context.report({
|
|
179
|
-
data: {
|
|
180
|
-
receiver: typeChecker.typeToString(parentType),
|
|
181
|
-
sender: typeChecker.typeToString(spreadType)
|
|
182
|
-
},
|
|
183
|
-
message: "unsafeArraySpread",
|
|
184
|
-
range: {
|
|
185
|
-
begin: element.getStart(sourceFile),
|
|
186
|
-
end: element.getEnd()
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
Parameter: (node, { sourceFile, typeChecker }) => {
|
|
192
|
-
if (!node.initializer) return;
|
|
193
|
-
const initializerType = typeChecker.getTypeAtLocation(node.initializer);
|
|
194
|
-
if (ts$1.isArrayBindingPattern(node.name)) {
|
|
195
|
-
checkArrayDestructure(node.name, initializerType, sourceFile, typeChecker);
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
if (ts$1.isObjectBindingPattern(node.name)) {
|
|
199
|
-
checkObjectDestructure(node.name, initializerType, sourceFile, typeChecker);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
checkAssignment(initializerType, node.type ? typeChecker.getTypeAtLocation(node.name) : void 0, node.initializer, node, sourceFile, typeChecker);
|
|
203
|
-
},
|
|
204
|
-
PropertyAssignment: (node, { sourceFile, typeChecker }) => {
|
|
205
|
-
if (!isTypeAny(typeChecker.getTypeAtLocation(node.initializer))) return;
|
|
206
|
-
if (!ts$1.isObjectLiteralExpression(node.parent)) return;
|
|
207
|
-
const contextualType = typeChecker.getContextualType(node.parent);
|
|
208
|
-
if (!contextualType) return;
|
|
209
|
-
let key;
|
|
210
|
-
if (ts$1.isIdentifier(node.name) || ts$1.isStringLiteral(node.name) || ts$1.isNumericLiteral(node.name)) key = node.name.text;
|
|
211
|
-
if (key === void 0) return;
|
|
212
|
-
const propertySymbol = contextualType.getProperty(key);
|
|
213
|
-
if (!propertySymbol) return;
|
|
214
|
-
if (isTypeAnyOrUnknown(typeChecker.getTypeOfSymbolAtLocation(propertySymbol, node))) return;
|
|
215
|
-
context.report({
|
|
216
|
-
data: { type: "any" },
|
|
217
|
-
message: "unsafeAssignment",
|
|
218
|
-
range: {
|
|
219
|
-
begin: node.getStart(sourceFile),
|
|
220
|
-
end: node.getEnd()
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
},
|
|
224
|
-
PropertyDeclaration: (node, { sourceFile, typeChecker }) => {
|
|
225
|
-
if (!node.initializer) return;
|
|
226
|
-
checkAssignment(typeChecker.getTypeAtLocation(node.initializer), node.type ? typeChecker.getTypeAtLocation(node.name) : void 0, node.initializer, node, sourceFile, typeChecker);
|
|
227
|
-
},
|
|
228
|
-
ShorthandPropertyAssignment: (node, { sourceFile, typeChecker }) => {
|
|
229
|
-
if (!isTypeAny(typeChecker.getTypeAtLocation(node.name))) return;
|
|
230
|
-
const parent = node.parent;
|
|
231
|
-
if (!ts$1.isObjectLiteralExpression(parent)) return;
|
|
232
|
-
const contextualType = typeChecker.getContextualType(parent);
|
|
233
|
-
if (!contextualType) return;
|
|
234
|
-
const propertySymbol = contextualType.getProperty(node.name.text);
|
|
235
|
-
if (!propertySymbol) return;
|
|
236
|
-
if (isTypeAnyOrUnknown(typeChecker.getTypeOfSymbolAtLocation(propertySymbol, node))) return;
|
|
237
|
-
context.report({
|
|
238
|
-
data: { type: "any" },
|
|
239
|
-
message: "unsafeAssignment",
|
|
240
|
-
range: {
|
|
241
|
-
begin: node.getStart(sourceFile),
|
|
242
|
-
end: node.getEnd()
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
},
|
|
246
|
-
VariableDeclaration: (node, { sourceFile, typeChecker }) => {
|
|
247
|
-
if (!node.initializer) return;
|
|
248
|
-
const initializerType = typeChecker.getTypeAtLocation(node.initializer);
|
|
249
|
-
if (ts$1.isArrayBindingPattern(node.name)) {
|
|
250
|
-
checkArrayDestructure(node.name, initializerType, sourceFile, typeChecker);
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (ts$1.isObjectBindingPattern(node.name)) {
|
|
254
|
-
checkObjectDestructure(node.name, initializerType, sourceFile, typeChecker);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
checkAssignment(initializerType, node.type ? typeChecker.getTypeAtLocation(node.name) : void 0, node.initializer, node, sourceFile, typeChecker);
|
|
258
|
-
}
|
|
259
|
-
} };
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
//#endregion
|
|
263
|
-
export { anyAssignments_default as default };
|
|
264
|
-
|
|
265
|
-
//# sourceMappingURL=anyAssignments.js.map
|
package/lib/rules/anyCalls.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports calling a value with type `any`.";
|
|
3
|
-
readonly id: "anyCalls";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unsafeCall" | "unsafeNew" | "unsafeTemplateTag", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=anyCalls.d.ts.map
|
package/lib/rules/anyCalls.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { isBuiltinSymbolLike } from "./utils/isBuiltinSymbolLike.js";
|
|
4
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import * as ts$1 from "typescript";
|
|
6
|
-
import * as tsutils from "ts-api-utils";
|
|
7
|
-
//#region src/rules/anyCalls.ts
|
|
8
|
-
var anyCalls_default = ruleCreator.createRule(typescriptLanguage, {
|
|
9
|
-
about: {
|
|
10
|
-
description: "Reports calling a value with type `any`.",
|
|
11
|
-
id: "anyCalls",
|
|
12
|
-
presets: ["logical", "logicalStrict"]
|
|
13
|
-
},
|
|
14
|
-
messages: {
|
|
15
|
-
unsafeCall: {
|
|
16
|
-
primary: "Unsafe call of {{ type }} typed value.",
|
|
17
|
-
secondary: ["Calling a value typed as `any` or `Function` bypasses TypeScript's type checking.", "TypeScript cannot verify that the value is actually a function, what parameters it expects, or what it returns."],
|
|
18
|
-
suggestions: ["Ensure the called value has a well-defined function type."]
|
|
19
|
-
},
|
|
20
|
-
unsafeNew: {
|
|
21
|
-
primary: "Unsafe construction of {{ type }} typed value.",
|
|
22
|
-
secondary: ["Constructing a value typed as `any` or `Function` bypasses TypeScript's type checking.", "TypeScript cannot verify that the value is actually a constructor, what parameters it expects, or what it returns."],
|
|
23
|
-
suggestions: ["Ensure the constructed value has a well-defined constructor type."]
|
|
24
|
-
},
|
|
25
|
-
unsafeTemplateTag: {
|
|
26
|
-
primary: "Unsafe use of {{ type }} typed template tag.",
|
|
27
|
-
secondary: ["Using a value typed as `any` or `Function` as a template tag bypasses TypeScript's type checking.", "TypeScript cannot verify that the value is a valid template tag function."],
|
|
28
|
-
suggestions: ["Ensure the template tag has a well-defined function type."]
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
setup(context) {
|
|
32
|
-
function checkNode(node, { program, sourceFile, typeChecker }, message, allowVoid) {
|
|
33
|
-
const type = getConstrainedTypeAtLocation(node, typeChecker);
|
|
34
|
-
if (tsutils.isTypeFlagSet(type, ts$1.TypeFlags.Any)) {
|
|
35
|
-
if (tsutils.isIntrinsicErrorType(type)) return;
|
|
36
|
-
context.report({
|
|
37
|
-
data: { type: "`any`" },
|
|
38
|
-
message,
|
|
39
|
-
range: getTSNodeRange(node, sourceFile)
|
|
40
|
-
});
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
if (!isBuiltinSymbolLike(program, type, "Function") || type.getConstructSignatures().length) return;
|
|
44
|
-
const callSignatures = type.getCallSignatures();
|
|
45
|
-
if (callSignatures.length && (!allowVoid || callSignatures.some((signature) => !tsutils.isIntrinsicVoidType(signature.getReturnType())))) return;
|
|
46
|
-
context.report({
|
|
47
|
-
data: { type: "`Function`" },
|
|
48
|
-
message,
|
|
49
|
-
range: getTSNodeRange(node, sourceFile)
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
return { visitors: {
|
|
53
|
-
CallExpression: (node, services) => {
|
|
54
|
-
if (node.expression.kind !== ts$1.SyntaxKind.ImportKeyword) checkNode(node.expression, services, "unsafeCall");
|
|
55
|
-
},
|
|
56
|
-
NewExpression: (node, services) => {
|
|
57
|
-
checkNode(node.expression, services, "unsafeNew", true);
|
|
58
|
-
},
|
|
59
|
-
TaggedTemplateExpression: (node, services) => {
|
|
60
|
-
checkNode(node.tag, services, "unsafeTemplateTag");
|
|
61
|
-
}
|
|
62
|
-
} };
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
//#endregion
|
|
66
|
-
export { anyCalls_default as default };
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=anyCalls.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports member access on a value with type `any`.";
|
|
3
|
-
readonly id: "anyMemberAccess";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unsafeComputedMemberAccess" | "unsafeMemberAccess", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=anyMemberAccess.d.ts.map
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
import * as tsutils from "ts-api-utils";
|
|
6
|
-
//#region src/rules/anyMemberAccess.ts
|
|
7
|
-
var anyMemberAccess_default = ruleCreator.createRule(typescriptLanguage, {
|
|
8
|
-
about: {
|
|
9
|
-
description: "Reports member access on a value with type `any`.",
|
|
10
|
-
id: "anyMemberAccess",
|
|
11
|
-
presets: ["logical", "logicalStrict"]
|
|
12
|
-
},
|
|
13
|
-
messages: {
|
|
14
|
-
unsafeComputedMemberAccess: {
|
|
15
|
-
primary: "Computed key is {{ type }} typed.",
|
|
16
|
-
secondary: ["Using a value typed as `any` as a computed property key bypasses TypeScript's type checking.", "TypeScript cannot verify that the key is valid for the object being accessed."],
|
|
17
|
-
suggestions: ["Ensure the computed key has a well-defined type."]
|
|
18
|
-
},
|
|
19
|
-
unsafeMemberAccess: {
|
|
20
|
-
primary: "Unsafe member access on {{ type }} typed value.",
|
|
21
|
-
secondary: ["Accessing a member of a value typed as `any` bypasses TypeScript's type checking.", "TypeScript cannot verify that the member exists or what type it has."],
|
|
22
|
-
suggestions: ["Ensure the accessed value has a well-defined type with known properties."]
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
setup(context) {
|
|
26
|
-
const reportedChains = /* @__PURE__ */ new WeakSet();
|
|
27
|
-
function isInHeritageClause(node) {
|
|
28
|
-
let current = node.parent;
|
|
29
|
-
while (current) {
|
|
30
|
-
if (ts$1.isHeritageClause(current)) return true;
|
|
31
|
-
current = current.parent;
|
|
32
|
-
}
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
function findRootAnyAccess(node, typeChecker) {
|
|
36
|
-
const objectType = getConstrainedTypeAtLocation(node.expression, typeChecker);
|
|
37
|
-
if (!tsutils.isTypeFlagSet(objectType, ts$1.TypeFlags.Any)) return;
|
|
38
|
-
if (ts$1.isPropertyAccessExpression(node.expression) || ts$1.isElementAccessExpression(node.expression)) {
|
|
39
|
-
const deeper = findRootAnyAccess(node.expression, typeChecker);
|
|
40
|
-
if (deeper) return deeper;
|
|
41
|
-
}
|
|
42
|
-
return node;
|
|
43
|
-
}
|
|
44
|
-
function markChainAsReported(node) {
|
|
45
|
-
reportedChains.add(node);
|
|
46
|
-
if (ts$1.isPropertyAccessExpression(node.expression) || ts$1.isElementAccessExpression(node.expression)) markChainAsReported(node.expression);
|
|
47
|
-
}
|
|
48
|
-
function checkMemberExpression(node, sourceFile, typeChecker) {
|
|
49
|
-
if (reportedChains.has(node) || isInHeritageClause(node)) return;
|
|
50
|
-
const rootAccess = findRootAnyAccess(node, typeChecker);
|
|
51
|
-
if (!rootAccess) return;
|
|
52
|
-
markChainAsReported(node);
|
|
53
|
-
const objectType = getConstrainedTypeAtLocation(rootAccess.expression, typeChecker);
|
|
54
|
-
const reportNode = rootAccess.kind === ts$1.SyntaxKind.PropertyAccessExpression ? rootAccess.name : rootAccess.argumentExpression;
|
|
55
|
-
context.report({
|
|
56
|
-
data: { type: tsutils.isIntrinsicErrorType(objectType) ? "`error`" : "`any`" },
|
|
57
|
-
message: "unsafeMemberAccess",
|
|
58
|
-
range: getTSNodeRange(reportNode, sourceFile)
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function checkComputedKey(node, sourceFile, typeChecker) {
|
|
62
|
-
const keyNode = node.argumentExpression;
|
|
63
|
-
if (ts$1.isStringLiteral(keyNode) || ts$1.isNumericLiteral(keyNode) || ts$1.isNoSubstitutionTemplateLiteral(keyNode)) return;
|
|
64
|
-
const keyType = getConstrainedTypeAtLocation(keyNode, typeChecker);
|
|
65
|
-
if (tsutils.isTypeFlagSet(keyType, ts$1.TypeFlags.Any)) context.report({
|
|
66
|
-
data: { type: tsutils.isIntrinsicErrorType(keyType) ? "`error`" : "`any`" },
|
|
67
|
-
message: "unsafeComputedMemberAccess",
|
|
68
|
-
range: getTSNodeRange(keyNode, sourceFile)
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return { visitors: {
|
|
72
|
-
ElementAccessExpression: (node, { sourceFile, typeChecker }) => {
|
|
73
|
-
checkMemberExpression(node, sourceFile, typeChecker);
|
|
74
|
-
checkComputedKey(node, sourceFile, typeChecker);
|
|
75
|
-
},
|
|
76
|
-
PropertyAccessExpression: (node, { sourceFile, typeChecker }) => {
|
|
77
|
-
checkMemberExpression(node, sourceFile, typeChecker);
|
|
78
|
-
}
|
|
79
|
-
} };
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
//#endregion
|
|
83
|
-
export { anyMemberAccess_default as default };
|
|
84
|
-
|
|
85
|
-
//# sourceMappingURL=anyMemberAccess.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports returning a value with type `any` from a function.";
|
|
3
|
-
readonly id: "anyReturns";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unsafeReturn" | "unsafeReturnAssignment" | "unsafeReturnThis", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=anyReturns.d.ts.map
|
package/lib/rules/anyReturns.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { AnyType, discriminateAnyType } from "./utils/discriminateAnyType.js";
|
|
3
|
-
import { isUnsafeAssignment } from "./utils/isUnsafeAssignment.js";
|
|
4
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
5
|
-
import { getThisExpression } from "./utils/getThisExpression.js";
|
|
6
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
7
|
-
import ts, { SyntaxKind } from "typescript";
|
|
8
|
-
import * as tsutils from "ts-api-utils";
|
|
9
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
10
|
-
//#region src/rules/anyReturns.ts
|
|
11
|
-
var anyReturns_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports returning a value with type `any` from a function.",
|
|
14
|
-
id: "anyReturns",
|
|
15
|
-
presets: ["logical", "logicalStrict"]
|
|
16
|
-
},
|
|
17
|
-
messages: {
|
|
18
|
-
unsafeReturn: {
|
|
19
|
-
primary: "Unsafe return of a value of type `{{ type }}`.",
|
|
20
|
-
secondary: ["Returning a value of type `any` or a similar unsafe type defeats TypeScript's type safety guarantees.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
21
|
-
suggestions: ["Ensure the returned value has a well-defined, specific type."]
|
|
22
|
-
},
|
|
23
|
-
unsafeReturnAssignment: {
|
|
24
|
-
primary: "Unsafe return of type `{{ sender }}` from function with return type `{{ receiver }}`.",
|
|
25
|
-
secondary: ["The function's declared return type does not safely accept the value being returned.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
26
|
-
suggestions: ["Adjust the return type of the function to match the returned value, if appropriate.", "Otherwise, refine the returned value to ensure it matches the expected return type."]
|
|
27
|
-
},
|
|
28
|
-
unsafeReturnThis: {
|
|
29
|
-
primary: "Unsafe return of a value of type `{{ type }}`. `this` is typed as `any`.",
|
|
30
|
-
secondary: ["Returning `this` when it is implicitly typed as `any` introduces type-unsafe behavior.", "This can allow unexpected types to propagate through your codebase, potentially causing runtime errors."],
|
|
31
|
-
suggestions: ["Enable the `noImplicitThis` compiler option to enforce explicit `this` types.", "Add an explicit `this` parameter to the function to clarify its type."]
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
setup(context) {
|
|
35
|
-
function checkReturn(returnNode, reportingNode, { program, sourceFile, typeChecker }) {
|
|
36
|
-
const type = typeChecker.getTypeAtLocation(returnNode);
|
|
37
|
-
const functionNode = ts.findAncestor(returnNode, tsutils.isFunctionLikeDeclaration);
|
|
38
|
-
if (!functionNode) return;
|
|
39
|
-
const returnNodeType = getConstrainedTypeAtLocation(returnNode, typeChecker);
|
|
40
|
-
const anyType = tsutils.isIntrinsicErrorType(returnNodeType) ? AnyType.Error : discriminateAnyType(type, typeChecker, returnNode);
|
|
41
|
-
let functionType = functionNode.kind === SyntaxKind.FunctionExpression || functionNode.kind === SyntaxKind.ArrowFunction ? typeChecker.getContextualType(functionNode) : typeChecker.getTypeAtLocation(functionNode);
|
|
42
|
-
functionType ??= typeChecker.getTypeAtLocation(functionNode);
|
|
43
|
-
const callSignatures = tsutils.getCallSignaturesOfType(functionType);
|
|
44
|
-
if (functionNode.type) for (const signature of callSignatures) {
|
|
45
|
-
const signatureReturnType = signature.getReturnType();
|
|
46
|
-
if (returnNodeType === signatureReturnType || tsutils.isTypeFlagSet(signatureReturnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) return;
|
|
47
|
-
if (tsutils.includesModifier(functionNode.modifiers, SyntaxKind.AsyncKeyword)) {
|
|
48
|
-
const awaitedSignatureReturnType = typeChecker.getAwaitedType(signatureReturnType);
|
|
49
|
-
if (typeChecker.getAwaitedType(returnNodeType) === awaitedSignatureReturnType || awaitedSignatureReturnType && tsutils.isTypeFlagSet(awaitedSignatureReturnType, ts.TypeFlags.Any | ts.TypeFlags.Unknown)) return;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (anyType !== AnyType.Safe) {
|
|
53
|
-
for (const signature of callSignatures) {
|
|
54
|
-
const functionReturnType = signature.getReturnType();
|
|
55
|
-
if ((anyType === AnyType.Any || anyType === AnyType.Error) && tsutils.isTypeFlagSet(functionReturnType, ts.TypeFlags.Unknown)) return;
|
|
56
|
-
if (anyType === AnyType.AnyArray && typeChecker.isArrayType(functionReturnType) && tsutils.isTypeFlagSet(nullThrows(typeChecker.getTypeArguments(functionReturnType)[0], "Array type should have at least one type argument"), ts.TypeFlags.Unknown)) return;
|
|
57
|
-
const awaitedType = typeChecker.getAwaitedType(functionReturnType);
|
|
58
|
-
if (awaitedType && anyType === AnyType.PromiseAny && tsutils.isTypeFlagSet(awaitedType, ts.TypeFlags.Unknown)) return;
|
|
59
|
-
}
|
|
60
|
-
if (anyType === AnyType.PromiseAny && !tsutils.includesModifier(functionNode.modifiers, SyntaxKind.AsyncKeyword)) return;
|
|
61
|
-
let message = "unsafeReturn";
|
|
62
|
-
if (!tsutils.isStrictCompilerOptionEnabled(program.getCompilerOptions(), "noImplicitThis")) {
|
|
63
|
-
const thisExpression = getThisExpression(returnNode);
|
|
64
|
-
if (thisExpression && tsutils.isTypeFlagSet(getConstrainedTypeAtLocation(thisExpression, typeChecker), ts.TypeFlags.Any)) message = "unsafeReturnThis";
|
|
65
|
-
}
|
|
66
|
-
context.report({
|
|
67
|
-
data: { type: anyType },
|
|
68
|
-
message,
|
|
69
|
-
range: getTSNodeRange(reportingNode, sourceFile)
|
|
70
|
-
});
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const signature = functionType.getCallSignatures().at(0);
|
|
74
|
-
if (signature) {
|
|
75
|
-
const result = isUnsafeAssignment(returnNodeType, signature.getReturnType(), returnNode);
|
|
76
|
-
if (!result) return;
|
|
77
|
-
const { receiver, sender } = result;
|
|
78
|
-
context.report({
|
|
79
|
-
data: {
|
|
80
|
-
receiver: typeChecker.typeToString(receiver),
|
|
81
|
-
sender: typeChecker.typeToString(sender)
|
|
82
|
-
},
|
|
83
|
-
message: "unsafeReturnAssignment",
|
|
84
|
-
range: getTSNodeRange(reportingNode, sourceFile)
|
|
85
|
-
});
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return { visitors: {
|
|
90
|
-
ArrowFunction: (node, fileService) => {
|
|
91
|
-
if (node.body.kind !== SyntaxKind.Block) checkReturn(node.body, node.body, fileService);
|
|
92
|
-
},
|
|
93
|
-
ReturnStatement: (node, fileService) => {
|
|
94
|
-
if (node.expression != null) checkReturn(node.expression, node, fileService);
|
|
95
|
-
}
|
|
96
|
-
} };
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
//#endregion
|
|
100
|
-
export { anyReturns_default as default };
|
|
101
|
-
|
|
102
|
-
//# sourceMappingURL=anyReturns.js.map
|
package/lib/rules/arguments.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the arguments object instead of rest parameters.";
|
|
3
|
-
readonly id: "arguments";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferRestParameters", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=arguments.d.ts.map
|
package/lib/rules/arguments.js
DELETED
|
@@ -1,38 +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/arguments.ts
|
|
5
|
-
function isNonArrowFunctionBoundary(node) {
|
|
6
|
-
if (ts$1.isArrowFunction(node)) return "quit";
|
|
7
|
-
return ts$1.isFunctionDeclaration(node) || ts$1.isFunctionExpression(node) || ts$1.isMethodDeclaration(node) || ts$1.isGetAccessorDeclaration(node) || ts$1.isSetAccessorDeclaration(node) || ts$1.isConstructorDeclaration(node);
|
|
8
|
-
}
|
|
9
|
-
var arguments_default = ruleCreator.createRule(typescriptLanguage, {
|
|
10
|
-
about: {
|
|
11
|
-
description: "Reports using the arguments object instead of rest parameters.",
|
|
12
|
-
id: "arguments",
|
|
13
|
-
presets: ["logical", "logicalStrict"]
|
|
14
|
-
},
|
|
15
|
-
messages: { preferRestParameters: {
|
|
16
|
-
primary: "Use rest parameters instead of the `arguments` object.",
|
|
17
|
-
secondary: ["The `arguments` object is an array-like object that doesn't have Array methods like `map`, `filter`, or `forEach`.", "Rest parameters provide a real Array, making it easier to work with variadic functions."],
|
|
18
|
-
suggestions: ["Replace usage of `arguments` with a rest parameter like `...args`."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { Identifier: (node, { sourceFile, typeChecker }) => {
|
|
22
|
-
if (node.text !== "arguments") return;
|
|
23
|
-
const { parent } = node;
|
|
24
|
-
if ((ts$1.isPropertyAccessExpression(parent) || ts$1.isPropertyAssignment(parent) || ts$1.isShorthandPropertyAssignment(parent) || ts$1.isParameter(parent) || ts$1.isVariableDeclaration(parent) || ts$1.isPropertyDeclaration(parent) || ts$1.isBindingElement(parent) || ts$1.isPropertySignature(parent)) && parent.name === node) return;
|
|
25
|
-
if (!ts$1.findAncestor(node, isNonArrowFunctionBoundary)) return;
|
|
26
|
-
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
27
|
-
if (!symbol || symbol.getDeclarations()?.some((declaration) => ts$1.isParameter(declaration) || ts$1.isVariableDeclaration(declaration) || ts$1.isPropertyDeclaration(declaration) || ts$1.isBindingElement(declaration))) return;
|
|
28
|
-
context.report({
|
|
29
|
-
message: "preferRestParameters",
|
|
30
|
-
range: getTSNodeRange(node, sourceFile)
|
|
31
|
-
});
|
|
32
|
-
} } };
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
//#endregion
|
|
36
|
-
export { arguments_default as default };
|
|
37
|
-
|
|
38
|
-
//# sourceMappingURL=arguments.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports missing return statements in callbacks of array methods.";
|
|
3
|
-
readonly id: "arrayCallbackReturns";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "missingReturn", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=arrayCallbackReturns.d.ts.map
|