@flint.fyi/ts 0.21.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib/plugin.d.ts → dist/index.d.mts} +1 -1
- package/dist/index.mjs +22468 -0
- package/package.json +9 -8
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -2
- package/lib/plugin.js +0 -619
- package/lib/rules/accessorPairGroups.d.ts +0 -9
- package/lib/rules/accessorPairGroups.js +0 -46
- package/lib/rules/accessorPairTypes.d.ts +0 -9
- package/lib/rules/accessorPairTypes.js +0 -70
- package/lib/rules/accessorThisRecursion.d.ts +0 -9
- package/lib/rules/accessorThisRecursion.js +0 -63
- package/lib/rules/anyArguments.d.ts +0 -9
- package/lib/rules/anyArguments.js +0 -232
- package/lib/rules/anyAssignments.d.ts +0 -9
- package/lib/rules/anyAssignments.js +0 -263
- package/lib/rules/anyCalls.d.ts +0 -9
- package/lib/rules/anyCalls.js +0 -66
- package/lib/rules/anyMemberAccess.d.ts +0 -9
- package/lib/rules/anyMemberAccess.js +0 -83
- package/lib/rules/anyReturns.d.ts +0 -9
- package/lib/rules/anyReturns.js +0 -100
- package/lib/rules/arguments.d.ts +0 -9
- package/lib/rules/arguments.js +0 -36
- package/lib/rules/arrayCallbackReturns.d.ts +0 -9
- package/lib/rules/arrayCallbackReturns.js +0 -71
- package/lib/rules/arrayConstructors.d.ts +0 -9
- package/lib/rules/arrayConstructors.js +0 -45
- package/lib/rules/arrayDeleteUnnecessaryCounts.d.ts +0 -9
- package/lib/rules/arrayDeleteUnnecessaryCounts.js +0 -52
- package/lib/rules/arrayElementDeletions.d.ts +0 -9
- package/lib/rules/arrayElementDeletions.js +0 -41
- package/lib/rules/arrayEmptyCallbackSlots.d.ts +0 -9
- package/lib/rules/arrayEmptyCallbackSlots.js +0 -38
- package/lib/rules/arrayExistenceChecksConsistency.d.ts +0 -9
- package/lib/rules/arrayExistenceChecksConsistency.js +0 -84
- package/lib/rules/arrayFilteredFinds.d.ts +0 -9
- package/lib/rules/arrayFilteredFinds.js +0 -72
- package/lib/rules/arrayFinds.d.ts +0 -9
- package/lib/rules/arrayFinds.js +0 -39
- package/lib/rules/arrayFlatMapMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMapMethods.js +0 -45
- package/lib/rules/arrayFlatMethods.d.ts +0 -9
- package/lib/rules/arrayFlatMethods.js +0 -81
- package/lib/rules/arrayFlatUnnecessaryDepths.d.ts +0 -9
- package/lib/rules/arrayFlatUnnecessaryDepths.js +0 -31
- package/lib/rules/arrayIncludes.d.ts +0 -9
- package/lib/rules/arrayIncludes.js +0 -51
- package/lib/rules/arrayIncludesMethods.d.ts +0 -9
- package/lib/rules/arrayIncludesMethods.js +0 -35
- package/lib/rules/arrayIndexOfMethods.d.ts +0 -9
- package/lib/rules/arrayIndexOfMethods.js +0 -49
- package/lib/rules/arrayLoops.d.ts +0 -9
- package/lib/rules/arrayLoops.js +0 -34
- package/lib/rules/arrayMapIdentities.d.ts +0 -9
- package/lib/rules/arrayMapIdentities.js +0 -72
- package/lib/rules/arrayMutableReverses.d.ts +0 -9
- package/lib/rules/arrayMutableReverses.js +0 -37
- package/lib/rules/arrayMutableSorts.d.ts +0 -9
- package/lib/rules/arrayMutableSorts.js +0 -70
- package/lib/rules/arrayReduceTypeArguments.d.ts +0 -9
- package/lib/rules/arrayReduceTypeArguments.js +0 -62
- package/lib/rules/arraySliceUnnecessaryEnd.d.ts +0 -9
- package/lib/rules/arraySliceUnnecessaryEnd.js +0 -49
- package/lib/rules/arraySomeMethods.d.ts +0 -9
- package/lib/rules/arraySomeMethods.js +0 -75
- package/lib/rules/arrayTernarySpreadingConsistency.d.ts +0 -9
- package/lib/rules/arrayTernarySpreadingConsistency.js +0 -72
- package/lib/rules/arrayTypes.d.ts +0 -16
- package/lib/rules/arrayTypes.js +0 -109
- package/lib/rules/arrayUnnecessaryLengthChecks.d.ts +0 -9
- package/lib/rules/arrayUnnecessaryLengthChecks.js +0 -95
- package/lib/rules/asConstAssertions.d.ts +0 -9
- package/lib/rules/asConstAssertions.js +0 -55
- package/lib/rules/assignmentOperatorShorthands.d.ts +0 -9
- package/lib/rules/assignmentOperatorShorthands.js +0 -45
- package/lib/rules/asyncFunctionAwaits.d.ts +0 -9
- package/lib/rules/asyncFunctionAwaits.js +0 -53
- package/lib/rules/asyncPromiseExecutors.d.ts +0 -9
- package/lib/rules/asyncPromiseExecutors.js +0 -39
- package/lib/rules/asyncUnnecessaryPromiseWrappers.d.ts +0 -9
- package/lib/rules/asyncUnnecessaryPromiseWrappers.js +0 -50
- package/lib/rules/atAccesses.d.ts +0 -9
- package/lib/rules/atAccesses.js +0 -50
- package/lib/rules/builtinCoercions.d.ts +0 -9
- package/lib/rules/builtinCoercions.js +0 -115
- package/lib/rules/builtinConstructorNews.d.ts +0 -9
- package/lib/rules/builtinConstructorNews.js +0 -87
- package/lib/rules/caseDeclarations.d.ts +0 -9
- package/lib/rules/caseDeclarations.js +0 -38
- package/lib/rules/caseDuplicates.d.ts +0 -9
- package/lib/rules/caseDuplicates.js +0 -34
- package/lib/rules/caseFallthroughs.d.ts +0 -9
- package/lib/rules/caseFallthroughs.js +0 -74
- package/lib/rules/catchCallbackTypes.d.ts +0 -9
- package/lib/rules/catchCallbackTypes.js +0 -65
- package/lib/rules/caughtVariableNames.d.ts +0 -9
- package/lib/rules/caughtVariableNames.js +0 -38
- package/lib/rules/chainedAssignments.d.ts +0 -9
- package/lib/rules/chainedAssignments.js +0 -31
- package/lib/rules/charAtComparisons.d.ts +0 -9
- package/lib/rules/charAtComparisons.js +0 -53
- package/lib/rules/classAssignments.d.ts +0 -9
- package/lib/rules/classAssignments.js +0 -27
- package/lib/rules/classFieldDeclarations.d.ts +0 -9
- package/lib/rules/classFieldDeclarations.js +0 -38
- package/lib/rules/classLiteralProperties.d.ts +0 -9
- package/lib/rules/classLiteralProperties.js +0 -43
- package/lib/rules/classMemberDuplicates.d.ts +0 -9
- package/lib/rules/classMemberDuplicates.js +0 -69
- package/lib/rules/classMethodsThis.d.ts +0 -13
- package/lib/rules/classMethodsThis.js +0 -122
- package/lib/rules/combinedPushes.d.ts +0 -9
- package/lib/rules/combinedPushes.js +0 -54
- package/lib/rules/consecutiveNonNullAssertions.d.ts +0 -9
- package/lib/rules/consecutiveNonNullAssertions.js +0 -37
- package/lib/rules/consoleCalls.d.ts +0 -8
- package/lib/rules/consoleCalls.js +0 -26
- package/lib/rules/constantAssignments.d.ts +0 -9
- package/lib/rules/constantAssignments.js +0 -39
- package/lib/rules/constructorGenericCalls.d.ts +0 -15
- package/lib/rules/constructorGenericCalls.js +0 -136
- package/lib/rules/constructorReturns.d.ts +0 -9
- package/lib/rules/constructorReturns.js +0 -39
- package/lib/rules/constructorSupers.d.ts +0 -9
- package/lib/rules/constructorSupers.js +0 -75
- package/lib/rules/dateConstructorClones.d.ts +0 -9
- package/lib/rules/dateConstructorClones.js +0 -35
- package/lib/rules/dateNowTimestamps.d.ts +0 -9
- package/lib/rules/dateNowTimestamps.js +0 -55
- package/lib/rules/debuggerStatements.d.ts +0 -9
- package/lib/rules/debuggerStatements.js +0 -31
- package/lib/rules/defaultCaseLast.d.ts +0 -9
- package/lib/rules/defaultCaseLast.js +0 -34
- package/lib/rules/defaultParameterLast.d.ts +0 -9
- package/lib/rules/defaultParameterLast.js +0 -40
- package/lib/rules/deprecated.d.ts +0 -9
- package/lib/rules/deprecated.js +0 -241
- package/lib/rules/destructuringConsistency.d.ts +0 -9
- package/lib/rules/destructuringConsistency.js +0 -104
- package/lib/rules/duplicateArguments.d.ts +0 -9
- package/lib/rules/duplicateArguments.js +0 -43
- package/lib/rules/dynamicDeletes.d.ts +0 -9
- package/lib/rules/dynamicDeletes.js +0 -35
- package/lib/rules/elseIfDuplicates.d.ts +0 -9
- package/lib/rules/elseIfDuplicates.js +0 -36
- package/lib/rules/elseReturns.d.ts +0 -9
- package/lib/rules/elseReturns.js +0 -65
- package/lib/rules/emptyBlocks.d.ts +0 -9
- package/lib/rules/emptyBlocks.js +0 -54
- package/lib/rules/emptyDestructures.d.ts +0 -9
- package/lib/rules/emptyDestructures.js +0 -32
- package/lib/rules/emptyEnums.d.ts +0 -9
- package/lib/rules/emptyEnums.js +0 -28
- package/lib/rules/emptyExports.d.ts +0 -9
- package/lib/rules/emptyExports.js +0 -58
- package/lib/rules/emptyFiles.d.ts +0 -9
- package/lib/rules/emptyFiles.js +0 -42
- package/lib/rules/emptyFunctions.d.ts +0 -9
- package/lib/rules/emptyFunctions.js +0 -59
- package/lib/rules/emptyModuleAttributes.d.ts +0 -9
- package/lib/rules/emptyModuleAttributes.js +0 -33
- package/lib/rules/emptyObjectTypes.d.ts +0 -9
- package/lib/rules/emptyObjectTypes.js +0 -45
- package/lib/rules/emptyStaticBlocks.d.ts +0 -9
- package/lib/rules/emptyStaticBlocks.js +0 -40
- package/lib/rules/emptyTypeParameterLists.d.ts +0 -9
- package/lib/rules/emptyTypeParameterLists.js +0 -29
- package/lib/rules/enumInitializers.d.ts +0 -9
- package/lib/rules/enumInitializers.js +0 -52
- package/lib/rules/enumMemberLiterals.d.ts +0 -9
- package/lib/rules/enumMemberLiterals.js +0 -37
- package/lib/rules/enumValueConsistency.d.ts +0 -9
- package/lib/rules/enumValueConsistency.js +0 -54
- package/lib/rules/enumValueDuplicates.d.ts +0 -9
- package/lib/rules/enumValueDuplicates.js +0 -43
- package/lib/rules/equalityOperatorNegations.d.ts +0 -8
- package/lib/rules/equalityOperatorNegations.js +0 -58
- package/lib/rules/equalityOperators.d.ts +0 -9
- package/lib/rules/equalityOperators.js +0 -42
- package/lib/rules/errorMessages.d.ts +0 -9
- package/lib/rules/errorMessages.js +0 -54
- package/lib/rules/errorSubclassProperties.d.ts +0 -9
- package/lib/rules/errorSubclassProperties.js +0 -142
- package/lib/rules/errorUnnecessaryCaptureStackTraces.d.ts +0 -9
- package/lib/rules/errorUnnecessaryCaptureStackTraces.js +0 -53
- package/lib/rules/escapeSequenceCasing.d.ts +0 -9
- package/lib/rules/escapeSequenceCasing.js +0 -73
- package/lib/rules/evals.d.ts +0 -9
- package/lib/rules/evals.js +0 -29
- package/lib/rules/evolvingVariableTypes.d.ts +0 -9
- package/lib/rules/evolvingVariableTypes.js +0 -31
- package/lib/rules/exceptionAssignments.d.ts +0 -9
- package/lib/rules/exceptionAssignments.js +0 -37
- package/lib/rules/explicitAnys.d.ts +0 -9
- package/lib/rules/explicitAnys.js +0 -53
- package/lib/rules/exponentiationOperators.d.ts +0 -9
- package/lib/rules/exponentiationOperators.js +0 -32
- package/lib/rules/exportFromImports.d.ts +0 -9
- package/lib/rules/exportFromImports.js +0 -117
- package/lib/rules/exportMutables.d.ts +0 -9
- package/lib/rules/exportMutables.js +0 -31
- package/lib/rules/exportUniqueNames.d.ts +0 -9
- package/lib/rules/exportUniqueNames.js +0 -63
- package/lib/rules/extraneousClasses.d.ts +0 -15
- package/lib/rules/extraneousClasses.js +0 -109
- package/lib/rules/fetchMethodBodies.d.ts +0 -9
- package/lib/rules/fetchMethodBodies.js +0 -70
- package/lib/rules/finallyStatementSafety.d.ts +0 -9
- package/lib/rules/finallyStatementSafety.js +0 -45
- package/lib/rules/forDirections.d.ts +0 -9
- package/lib/rules/forDirections.js +0 -73
- package/lib/rules/forInArrays.d.ts +0 -9
- package/lib/rules/forInArrays.js +0 -44
- package/lib/rules/forInGuards.d.ts +0 -8
- package/lib/rules/forInGuards.js +0 -42
- package/lib/rules/functionApplySpreads.d.ts +0 -9
- package/lib/rules/functionApplySpreads.js +0 -61
- package/lib/rules/functionAssignments.d.ts +0 -9
- package/lib/rules/functionAssignments.js +0 -27
- package/lib/rules/functionCurryingRedundancy.d.ts +0 -9
- package/lib/rules/functionCurryingRedundancy.js +0 -51
- package/lib/rules/functionDeclarationStyles.d.ts +0 -15
- package/lib/rules/functionDeclarationStyles.js +0 -65
- package/lib/rules/functionNameMatches.d.ts +0 -9
- package/lib/rules/functionNameMatches.js +0 -72
- package/lib/rules/functionNewCalls.d.ts +0 -9
- package/lib/rules/functionNewCalls.js +0 -40
- package/lib/rules/generatorFunctionYields.d.ts +0 -9
- package/lib/rules/generatorFunctionYields.js +0 -48
- package/lib/rules/getterReturns.d.ts +0 -9
- package/lib/rules/getterReturns.js +0 -63
- package/lib/rules/globalAssignments.d.ts +0 -9
- package/lib/rules/globalAssignments.js +0 -45
- package/lib/rules/globalObjectCalls.d.ts +0 -9
- package/lib/rules/globalObjectCalls.js +0 -40
- package/lib/rules/globalThisAliases.d.ts +0 -9
- package/lib/rules/globalThisAliases.js +0 -45
- package/lib/rules/impliedEvals.d.ts +0 -9
- package/lib/rules/impliedEvals.js +0 -128
- package/lib/rules/importEmptyBlocks.d.ts +0 -9
- package/lib/rules/importEmptyBlocks.js +0 -51
- package/lib/rules/importTypeSideEffects.d.ts +0 -9
- package/lib/rules/importTypeSideEffects.js +0 -29
- package/lib/rules/indexedObjectTypes.d.ts +0 -15
- package/lib/rules/indexedObjectTypes.js +0 -81
- package/lib/rules/instanceOfArrays.d.ts +0 -9
- package/lib/rules/instanceOfArrays.js +0 -29
- package/lib/rules/irregularWhitespaces.d.ts +0 -15
- package/lib/rules/irregularWhitespaces.js +0 -95
- package/lib/rules/isNaNComparisons.d.ts +0 -9
- package/lib/rules/isNaNComparisons.js +0 -41
- package/lib/rules/literalConstructorWrappers.d.ts +0 -9
- package/lib/rules/literalConstructorWrappers.js +0 -62
- package/lib/rules/mathMethods.d.ts +0 -9
- package/lib/rules/mathMethods.js +0 -126
- package/lib/rules/meaninglessVoidOperators.d.ts +0 -9
- package/lib/rules/meaninglessVoidOperators.js +0 -37
- package/lib/rules/misleadingVoidExpressions.d.ts +0 -9
- package/lib/rules/misleadingVoidExpressions.js +0 -126
- package/lib/rules/moduleSpecifierLists.d.ts +0 -9
- package/lib/rules/moduleSpecifierLists.js +0 -90
- package/lib/rules/multilineAmbiguities.d.ts +0 -9
- package/lib/rules/multilineAmbiguities.js +0 -62
- package/lib/rules/namedDefaultExports.d.ts +0 -9
- package/lib/rules/namedDefaultExports.js +0 -58
- package/lib/rules/namespaceDeclarations.d.ts +0 -13
- package/lib/rules/namespaceDeclarations.js +0 -35
- package/lib/rules/namespaceImplicitAmbientImports.d.ts +0 -9
- package/lib/rules/namespaceImplicitAmbientImports.js +0 -38
- package/lib/rules/namespaceKeywords.d.ts +0 -9
- package/lib/rules/namespaceKeywords.js +0 -38
- package/lib/rules/nativeObjectExtensions.d.ts +0 -9
- package/lib/rules/nativeObjectExtensions.js +0 -112
- package/lib/rules/negativeIndexLengthMethods.d.ts +0 -9
- package/lib/rules/negativeIndexLengthMethods.js +0 -178
- package/lib/rules/negativeZeroComparisons.d.ts +0 -9
- package/lib/rules/negativeZeroComparisons.js +0 -46
- package/lib/rules/nestedStandaloneIfs.d.ts +0 -9
- package/lib/rules/nestedStandaloneIfs.js +0 -103
- package/lib/rules/newDefinitions.d.ts +0 -9
- package/lib/rules/newDefinitions.js +0 -82
- package/lib/rules/newExpressions.d.ts +0 -9
- package/lib/rules/newExpressions.js +0 -36
- package/lib/rules/newNativeNonConstructors.d.ts +0 -9
- package/lib/rules/newNativeNonConstructors.js +0 -37
- package/lib/rules/nonNullAssertedNullishCoalesces.d.ts +0 -9
- package/lib/rules/nonNullAssertedNullishCoalesces.js +0 -61
- package/lib/rules/nonNullAssertedOptionalChains.d.ts +0 -9
- package/lib/rules/nonNullAssertedOptionalChains.js +0 -67
- package/lib/rules/nonNullAssertionPlacement.d.ts +0 -9
- package/lib/rules/nonNullAssertionPlacement.js +0 -92
- package/lib/rules/nonNullableTypeAssertions.d.ts +0 -9
- package/lib/rules/nonNullableTypeAssertions.js +0 -76
- package/lib/rules/nonOctalDecimalEscapes.d.ts +0 -9
- package/lib/rules/nonOctalDecimalEscapes.js +0 -46
- package/lib/rules/nullishCheckStyle.d.ts +0 -20
- package/lib/rules/nullishCheckStyle.js +0 -142
- package/lib/rules/nullishCoalescingOperators.d.ts +0 -21
- package/lib/rules/nullishCoalescingOperators.js +0 -321
- package/lib/rules/numberMethodRanges.d.ts +0 -9
- package/lib/rules/numberMethodRanges.js +0 -72
- package/lib/rules/numberStaticMethods.d.ts +0 -9
- package/lib/rules/numberStaticMethods.js +0 -51
- package/lib/rules/numericErasingOperations.d.ts +0 -9
- package/lib/rules/numericErasingOperations.js +0 -44
- package/lib/rules/numericLiteralParsing.d.ts +0 -9
- package/lib/rules/numericLiteralParsing.js +0 -55
- package/lib/rules/numericPrecision.d.ts +0 -9
- package/lib/rules/numericPrecision.js +0 -100
- package/lib/rules/numericSeparatorGroups.d.ts +0 -9
- package/lib/rules/numericSeparatorGroups.js +0 -99
- package/lib/rules/objectAssignSpreads.d.ts +0 -9
- package/lib/rules/objectAssignSpreads.js +0 -51
- package/lib/rules/objectCalls.d.ts +0 -9
- package/lib/rules/objectCalls.js +0 -36
- package/lib/rules/objectEntriesMethods.d.ts +0 -9
- package/lib/rules/objectEntriesMethods.js +0 -80
- package/lib/rules/objectHasOwns.d.ts +0 -9
- package/lib/rules/objectHasOwns.js +0 -48
- package/lib/rules/objectKeyDuplicates.d.ts +0 -9
- package/lib/rules/objectKeyDuplicates.js +0 -61
- package/lib/rules/objectProto.d.ts +0 -9
- package/lib/rules/objectProto.js +0 -48
- package/lib/rules/objectPrototypeBuiltIns.d.ts +0 -9
- package/lib/rules/objectPrototypeBuiltIns.js +0 -52
- package/lib/rules/objectShorthand.d.ts +0 -9
- package/lib/rules/objectShorthand.js +0 -82
- package/lib/rules/objectSpreadUnnecessaryFallbacks.d.ts +0 -9
- package/lib/rules/objectSpreadUnnecessaryFallbacks.js +0 -41
- package/lib/rules/objectTypeDefinitions.d.ts +0 -9
- package/lib/rules/objectTypeDefinitions.js +0 -32
- package/lib/rules/octalEscapes.d.ts +0 -9
- package/lib/rules/octalEscapes.js +0 -56
- package/lib/rules/octalNumbers.d.ts +0 -9
- package/lib/rules/octalNumbers.js +0 -53
- package/lib/rules/operatorAssignmentShorthand.d.ts +0 -9
- package/lib/rules/operatorAssignmentShorthand.js +0 -75
- package/lib/rules/overloadSignaturesAdjacent.d.ts +0 -9
- package/lib/rules/overloadSignaturesAdjacent.js +0 -138
- package/lib/rules/parameterReassignments.d.ts +0 -9
- package/lib/rules/parameterReassignments.js +0 -43
- package/lib/rules/parseIntRadixes.d.ts +0 -9
- package/lib/rules/parseIntRadixes.js +0 -57
- package/lib/rules/propertyAccessNotation.d.ts +0 -12
- package/lib/rules/propertyAccessNotation.js +0 -117
- package/lib/rules/recursionOnlyArguments.d.ts +0 -9
- package/lib/rules/recursionOnlyArguments.js +0 -62
- package/lib/rules/redundantTypeConstituents.d.ts +0 -9
- package/lib/rules/redundantTypeConstituents.js +0 -275
- package/lib/rules/regexAllGlobalFlags.d.ts +0 -9
- package/lib/rules/regexAllGlobalFlags.js +0 -54
- package/lib/rules/regexAmbiguousInvalidity.d.ts +0 -9
- package/lib/rules/regexAmbiguousInvalidity.js +0 -295
- package/lib/rules/regexCharacterClassRanges.d.ts +0 -9
- package/lib/rules/regexCharacterClassRanges.js +0 -135
- package/lib/rules/regexCharacterClassSetOperations.d.ts +0 -9
- package/lib/rules/regexCharacterClassSetOperations.js +0 -79
- package/lib/rules/regexCharacterClasses.d.ts +0 -9
- package/lib/rules/regexCharacterClasses.js +0 -232
- package/lib/rules/regexConciseCharacterClassNegations.d.ts +0 -9
- package/lib/rules/regexConciseCharacterClassNegations.js +0 -50
- package/lib/rules/regexContradictoryAssertions.d.ts +0 -9
- package/lib/rules/regexContradictoryAssertions.js +0 -208
- package/lib/rules/regexControlCharacterEscapes.d.ts +0 -9
- package/lib/rules/regexControlCharacterEscapes.js +0 -128
- package/lib/rules/regexControlCharacters.d.ts +0 -9
- package/lib/rules/regexControlCharacters.js +0 -93
- package/lib/rules/regexDigitMatchers.d.ts +0 -9
- package/lib/rules/regexDigitMatchers.js +0 -178
- package/lib/rules/regexDollarEscapes.d.ts +0 -9
- package/lib/rules/regexDollarEscapes.js +0 -89
- package/lib/rules/regexDuplicateCharacterClassCharacters.d.ts +0 -9
- package/lib/rules/regexDuplicateCharacterClassCharacters.js +0 -126
- package/lib/rules/regexEmptyAlternatives.d.ts +0 -9
- package/lib/rules/regexEmptyAlternatives.js +0 -138
- package/lib/rules/regexEmptyCapturingGroups.d.ts +0 -9
- package/lib/rules/regexEmptyCapturingGroups.js +0 -65
- package/lib/rules/regexEmptyCharacterClasses.d.ts +0 -9
- package/lib/rules/regexEmptyCharacterClasses.js +0 -66
- package/lib/rules/regexEmptyGroups.d.ts +0 -9
- package/lib/rules/regexEmptyGroups.js +0 -64
- package/lib/rules/regexEmptyLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexEmptyLazyQuantifiers.js +0 -90
- package/lib/rules/regexEmptyLookaroundsAssertions.d.ts +0 -9
- package/lib/rules/regexEmptyLookaroundsAssertions.js +0 -66
- package/lib/rules/regexEmptyStringLiterals.d.ts +0 -9
- package/lib/rules/regexEmptyStringLiterals.js +0 -64
- package/lib/rules/regexEscapeBackspaces.d.ts +0 -9
- package/lib/rules/regexEscapeBackspaces.js +0 -67
- package/lib/rules/regexExecutors.d.ts +0 -9
- package/lib/rules/regexExecutors.js +0 -56
- package/lib/rules/regexGraphemeStringLiterals.d.ts +0 -9
- package/lib/rules/regexGraphemeStringLiterals.js +0 -49
- package/lib/rules/regexHexadecimalEscapes.d.ts +0 -9
- package/lib/rules/regexHexadecimalEscapes.js +0 -69
- package/lib/rules/regexIgnoreCaseFlags.d.ts +0 -9
- package/lib/rules/regexIgnoreCaseFlags.js +0 -143
- package/lib/rules/regexInvisibleCharacters.d.ts +0 -9
- package/lib/rules/regexInvisibleCharacters.js +0 -88
- package/lib/rules/regexLetterCasing.d.ts +0 -9
- package/lib/rules/regexLetterCasing.js +0 -184
- package/lib/rules/regexLiterals.d.ts +0 -9
- package/lib/rules/regexLiterals.js +0 -87
- package/lib/rules/regexLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexLookaroundAssertions.js +0 -161
- package/lib/rules/regexLookaroundQuantifierOptimizations.d.ts +0 -9
- package/lib/rules/regexLookaroundQuantifierOptimizations.js +0 -92
- package/lib/rules/regexMatchNotation.d.ts +0 -9
- package/lib/rules/regexMatchNotation.js +0 -137
- package/lib/rules/regexMisleadingCapturingGroups.d.ts +0 -9
- package/lib/rules/regexMisleadingCapturingGroups.js +0 -227
- package/lib/rules/regexMisleadingQuantifiers.d.ts +0 -9
- package/lib/rules/regexMisleadingQuantifiers.js +0 -76
- package/lib/rules/regexMisleadingUnicodeCharacters.d.ts +0 -9
- package/lib/rules/regexMisleadingUnicodeCharacters.js +0 -201
- package/lib/rules/regexNamedBackreferences.d.ts +0 -9
- package/lib/rules/regexNamedBackreferences.js +0 -46
- package/lib/rules/regexNamedCaptureGroups.d.ts +0 -8
- package/lib/rules/regexNamedCaptureGroups.js +0 -65
- package/lib/rules/regexNamedReplacements.d.ts +0 -9
- package/lib/rules/regexNamedReplacements.js +0 -91
- package/lib/rules/regexNonStandardFlags.d.ts +0 -9
- package/lib/rules/regexNonStandardFlags.js +0 -64
- package/lib/rules/regexObscureRanges.d.ts +0 -9
- package/lib/rules/regexObscureRanges.js +0 -91
- package/lib/rules/regexOctalEscapes.d.ts +0 -9
- package/lib/rules/regexOctalEscapes.js +0 -68
- package/lib/rules/regexPlusQuantifiers.d.ts +0 -9
- package/lib/rules/regexPlusQuantifiers.js +0 -66
- package/lib/rules/regexPredefinedAssertions.d.ts +0 -9
- package/lib/rules/regexPredefinedAssertions.js +0 -125
- package/lib/rules/regexQuestionQuantifiers.d.ts +0 -9
- package/lib/rules/regexQuestionQuantifiers.js +0 -102
- package/lib/rules/regexRepeatQuantifiers.d.ts +0 -9
- package/lib/rules/regexRepeatQuantifiers.js +0 -94
- package/lib/rules/regexResultArrayGroups.d.ts +0 -9
- package/lib/rules/regexResultArrayGroups.js +0 -185
- package/lib/rules/regexSetOperationOptimizations.d.ts +0 -9
- package/lib/rules/regexSetOperationOptimizations.js +0 -175
- package/lib/rules/regexStandaloneBackslashes.d.ts +0 -9
- package/lib/rules/regexStandaloneBackslashes.js +0 -57
- package/lib/rules/regexStarQuantifiers.d.ts +0 -9
- package/lib/rules/regexStarQuantifiers.js +0 -66
- package/lib/rules/regexSuperLinearBacktracking.d.ts +0 -9
- package/lib/rules/regexSuperLinearBacktracking.js +0 -96
- package/lib/rules/regexSuperLinearMoves.d.ts +0 -9
- package/lib/rules/regexSuperLinearMoves.js +0 -140
- package/lib/rules/regexTestMethods.d.ts +0 -9
- package/lib/rules/regexTestMethods.js +0 -81
- package/lib/rules/regexUnicodeCodepointEscapes.d.ts +0 -9
- package/lib/rules/regexUnicodeCodepointEscapes.js +0 -105
- package/lib/rules/regexUnicodeEscapes.d.ts +0 -8
- package/lib/rules/regexUnicodeEscapes.js +0 -95
- package/lib/rules/regexUnicodeFlag.d.ts +0 -8
- package/lib/rules/regexUnicodeFlag.js +0 -95
- package/lib/rules/regexUnicodeProperties.d.ts +0 -9
- package/lib/rules/regexUnicodeProperties.js +0 -131
- package/lib/rules/regexUnnecessaryAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryAssertions.js +0 -221
- package/lib/rules/regexUnnecessaryBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryBackreferences.js +0 -123
- package/lib/rules/regexUnnecessaryCharacterClasses.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterClasses.js +0 -72
- package/lib/rules/regexUnnecessaryCharacterRanges.d.ts +0 -9
- package/lib/rules/regexUnnecessaryCharacterRanges.js +0 -106
- package/lib/rules/regexUnnecessaryDisjunctions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDisjunctions.js +0 -116
- package/lib/rules/regexUnnecessaryDollarReplacements.d.ts +0 -9
- package/lib/rules/regexUnnecessaryDollarReplacements.js +0 -142
- package/lib/rules/regexUnnecessaryEscapes.d.ts +0 -9
- package/lib/rules/regexUnnecessaryEscapes.js +0 -134
- package/lib/rules/regexUnnecessaryLookaroundAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryLookaroundAssertions.js +0 -78
- package/lib/rules/regexUnnecessaryNestedAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedAssertions.js +0 -196
- package/lib/rules/regexUnnecessaryNestedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNestedQuantifiers.js +0 -91
- package/lib/rules/regexUnnecessaryNonCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNonCapturingGroups.js +0 -102
- package/lib/rules/regexUnnecessaryNumericQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnnecessaryNumericQuantifiers.js +0 -67
- package/lib/rules/regexUnnecessaryOptionalAssertions.d.ts +0 -9
- package/lib/rules/regexUnnecessaryOptionalAssertions.js +0 -135
- package/lib/rules/regexUnnecessaryReferentialBackreferences.d.ts +0 -9
- package/lib/rules/regexUnnecessaryReferentialBackreferences.js +0 -121
- package/lib/rules/regexUnnecessarySetOperands.d.ts +0 -9
- package/lib/rules/regexUnnecessarySetOperands.js +0 -134
- package/lib/rules/regexUnusedCapturingGroups.d.ts +0 -9
- package/lib/rules/regexUnusedCapturingGroups.js +0 -67
- package/lib/rules/regexUnusedFlags.d.ts +0 -9
- package/lib/rules/regexUnusedFlags.js +0 -114
- package/lib/rules/regexUnusedLazyQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedLazyQuantifiers.js +0 -61
- package/lib/rules/regexUnusedQuantifiers.d.ts +0 -9
- package/lib/rules/regexUnusedQuantifiers.js +0 -61
- package/lib/rules/regexValidity.d.ts +0 -9
- package/lib/rules/regexValidity.js +0 -144
- package/lib/rules/regexWordMatchers.d.ts +0 -9
- package/lib/rules/regexWordMatchers.js +0 -144
- package/lib/rules/regexZeroQuantifiers.d.ts +0 -9
- package/lib/rules/regexZeroQuantifiers.js +0 -58
- package/lib/rules/requireImports.d.ts +0 -9
- package/lib/rules/requireImports.js +0 -46
- package/lib/rules/responseJsonMethods.d.ts +0 -9
- package/lib/rules/responseJsonMethods.js +0 -49
- package/lib/rules/restrictedIdentifiers.d.ts +0 -12
- package/lib/rules/restrictedIdentifiers.js +0 -39
- package/lib/rules/restrictedImports.d.ts +0 -26
- package/lib/rules/restrictedImports.js +0 -164
- package/lib/rules/returnAssignments.d.ts +0 -9
- package/lib/rules/returnAssignments.js +0 -36
- package/lib/rules/returnThisTypes.d.ts +0 -9
- package/lib/rules/returnThisTypes.js +0 -92
- package/lib/rules/ruleCreator.d.ts +0 -2
- package/lib/rules/ruleCreator.js +0 -15
- package/lib/rules/selfAssignments.d.ts +0 -9
- package/lib/rules/selfAssignments.js +0 -27
- package/lib/rules/sequences.d.ts +0 -9
- package/lib/rules/sequences.js +0 -26
- package/lib/rules/setSizeLengthChecks.d.ts +0 -9
- package/lib/rules/setSizeLengthChecks.js +0 -46
- package/lib/rules/setterReturns.d.ts +0 -9
- package/lib/rules/setterReturns.js +0 -39
- package/lib/rules/shadowedRestrictedNames.d.ts +0 -9
- package/lib/rules/shadowedRestrictedNames.js +0 -66
- package/lib/rules/singleVariableDeclarations.d.ts +0 -9
- package/lib/rules/singleVariableDeclarations.js +0 -34
- package/lib/rules/sizeComparisonOperators.d.ts +0 -15
- package/lib/rules/sizeComparisonOperators.js +0 -146
- package/lib/rules/sparseArrays.d.ts +0 -9
- package/lib/rules/sparseArrays.js +0 -41
- package/lib/rules/staticMemberOnlyClasses.d.ts +0 -9
- package/lib/rules/staticMemberOnlyClasses.js +0 -75
- package/lib/rules/stringCaseMismatches.d.ts +0 -9
- package/lib/rules/stringCaseMismatches.js +0 -53
- package/lib/rules/stringCodePoints.d.ts +0 -9
- package/lib/rules/stringCodePoints.js +0 -48
- package/lib/rules/stringSliceMethods.d.ts +0 -9
- package/lib/rules/stringSliceMethods.js +0 -45
- package/lib/rules/stringStartsEndsWith.d.ts +0 -9
- package/lib/rules/stringStartsEndsWith.js +0 -77
- package/lib/rules/structuredCloneMethods.d.ts +0 -9
- package/lib/rules/structuredCloneMethods.js +0 -37
- package/lib/rules/symbolDescriptions.d.ts +0 -9
- package/lib/rules/symbolDescriptions.js +0 -30
- package/lib/rules/thisAliases.d.ts +0 -9
- package/lib/rules/thisAliases.js +0 -42
- package/lib/rules/thisBeforeSuper.d.ts +0 -9
- package/lib/rules/thisBeforeSuper.js +0 -84
- package/lib/rules/throwErrors.d.ts +0 -9
- package/lib/rules/throwErrors.js +0 -59
- package/lib/rules/topLevelAwaits.d.ts +0 -9
- package/lib/rules/topLevelAwaits.js +0 -47
- package/lib/rules/tripleSlashReferenceValidity.d.ts +0 -9
- package/lib/rules/tripleSlashReferenceValidity.js +0 -52
- package/lib/rules/tripleSlashReferences.d.ts +0 -9
- package/lib/rules/tripleSlashReferences.js +0 -32
- package/lib/rules/tsComments.d.ts +0 -21
- package/lib/rules/tsComments.js +0 -128
- package/lib/rules/tslintComments.d.ts +0 -9
- package/lib/rules/tslintComments.js +0 -34
- package/lib/rules/typeAssertionStyles.d.ts +0 -9
- package/lib/rules/typeAssertionStyles.js +0 -30
- package/lib/rules/typeImports.d.ts +0 -19
- package/lib/rules/typeImports.js +0 -281
- package/lib/rules/typeofComparisons.d.ts +0 -9
- package/lib/rules/typeofComparisons.js +0 -53
- package/lib/rules/unassignedVariables.d.ts +0 -9
- package/lib/rules/unassignedVariables.js +0 -32
- package/lib/rules/undefinedTypeofChecks.d.ts +0 -9
- package/lib/rules/undefinedTypeofChecks.js +0 -39
- package/lib/rules/undefinedVariables.d.ts +0 -9
- package/lib/rules/undefinedVariables.js +0 -37
- package/lib/rules/unicodeBOMs.d.ts +0 -9
- package/lib/rules/unicodeBOMs.js +0 -37
- package/lib/rules/unnecessaryBinds.d.ts +0 -9
- package/lib/rules/unnecessaryBinds.js +0 -76
- package/lib/rules/unnecessaryBlocks.d.ts +0 -9
- package/lib/rules/unnecessaryBlocks.js +0 -58
- package/lib/rules/unnecessaryBooleanCasts.d.ts +0 -9
- package/lib/rules/unnecessaryBooleanCasts.js +0 -56
- package/lib/rules/unnecessaryCatches.d.ts +0 -9
- package/lib/rules/unnecessaryCatches.js +0 -46
- package/lib/rules/unnecessaryComparisons.d.ts +0 -9
- package/lib/rules/unnecessaryComparisons.js +0 -291
- package/lib/rules/unnecessaryConcatenation.d.ts +0 -9
- package/lib/rules/unnecessaryConcatenation.js +0 -26
- package/lib/rules/unnecessaryEscapes.d.ts +0 -9
- package/lib/rules/unnecessaryEscapes.js +0 -132
- package/lib/rules/unnecessaryMathClamps.d.ts +0 -9
- package/lib/rules/unnecessaryMathClamps.js +0 -106
- package/lib/rules/unnecessaryNumericFractions.d.ts +0 -9
- package/lib/rules/unnecessaryNumericFractions.js +0 -48
- package/lib/rules/unnecessaryRenames.d.ts +0 -9
- package/lib/rules/unnecessaryRenames.js +0 -90
- package/lib/rules/unnecessaryTernaries.d.ts +0 -9
- package/lib/rules/unnecessaryTernaries.js +0 -86
- package/lib/rules/unnecessaryUseStricts.d.ts +0 -9
- package/lib/rules/unnecessaryUseStricts.js +0 -38
- package/lib/rules/unsafeNegations.d.ts +0 -9
- package/lib/rules/unsafeNegations.js +0 -36
- package/lib/rules/utils/collectAccessorPairs.d.ts +0 -11
- package/lib/rules/utils/collectAccessorPairs.js +0 -27
- package/lib/rules/utils/countCommentsInRange.d.ts +0 -2
- package/lib/rules/utils/countCommentsInRange.js +0 -10
- package/lib/rules/utils/discriminateAnyType.d.ts +0 -15
- package/lib/rules/utils/discriminateAnyType.js +0 -36
- package/lib/rules/utils/equalityOperators.d.ts +0 -8
- package/lib/rules/utils/equalityOperators.js +0 -34
- package/lib/rules/utils/forEachReturnStatement.d.ts +0 -2
- package/lib/rules/utils/forEachReturnStatement.js +0 -27
- package/lib/rules/utils/formatReportedType.d.ts +0 -3
- package/lib/rules/utils/formatReportedType.js +0 -7
- package/lib/rules/utils/getConstrainedType.d.ts +0 -2
- package/lib/rules/utils/getConstrainedType.js +0 -7
- package/lib/rules/utils/getFunctionName.d.ts +0 -2
- package/lib/rules/utils/getFunctionName.js +0 -14
- package/lib/rules/utils/getRegExpConstruction.d.ts +0 -8
- package/lib/rules/utils/getRegExpConstruction.js +0 -25
- package/lib/rules/utils/getRegExpLiteralDetails.d.ts +0 -6
- package/lib/rules/utils/getRegExpLiteralDetails.js +0 -11
- package/lib/rules/utils/getThisExpression.d.ts +0 -2
- package/lib/rules/utils/getThisExpression.js +0 -14
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.d.ts +0 -2
- package/lib/rules/utils/isArrayOrTupleTypeAtLocation.js +0 -11
- package/lib/rules/utils/isBuiltinSymbolLike.d.ts +0 -2
- package/lib/rules/utils/isBuiltinSymbolLike.js +0 -31
- package/lib/rules/utils/isDirectEqualityCheck.d.ts +0 -3
- package/lib/rules/utils/isDirectEqualityCheck.js +0 -27
- package/lib/rules/utils/isErrorSubclass.d.ts +0 -3
- package/lib/rules/utils/isErrorSubclass.js +0 -25
- package/lib/rules/utils/isInBooleanContext.d.ts +0 -2
- package/lib/rules/utils/isInBooleanContext.js +0 -20
- package/lib/rules/utils/isTypeRecursive.d.ts +0 -2
- package/lib/rules/utils/isTypeRecursive.js +0 -6
- package/lib/rules/utils/isUnsafeAssignment.d.ts +0 -14
- package/lib/rules/utils/isUnsafeAssignment.js +0 -43
- package/lib/rules/utils/operators.d.ts +0 -4
- package/lib/rules/utils/operators.js +0 -33
- package/lib/rules/utils/parseRegexpAst.d.ts +0 -1
- package/lib/rules/utils/parseRegexpAst.js +0 -15
- package/lib/rules/utils/parseRegexpAstFull.d.ts +0 -2
- package/lib/rules/utils/parseRegexpAstFull.js +0 -16
- package/lib/rules/utils/skipParentheses.d.ts +0 -2
- package/lib/rules/utils/skipParentheses.js +0 -8
- package/lib/rules/variableDeletions.d.ts +0 -9
- package/lib/rules/variableDeletions.js +0 -33
- package/lib/rules/voidOperator.d.ts +0 -9
- package/lib/rules/voidOperator.js +0 -32
- package/lib/rules/withStatements.d.ts +0 -9
- package/lib/rules/withStatements.js +0 -28
- package/lib/rules/wrapperObjects.d.ts +0 -9
- package/lib/rules/wrapperObjects.js +0 -34
- package/lib/type-utils/getSpecifierNames.d.ts +0 -2
- package/lib/type-utils/getSpecifierNames.js +0 -7
- package/lib/type-utils/isDeclaredInModuleBlock.d.ts +0 -2
- package/lib/type-utils/isDeclaredInModuleBlock.js +0 -12
- package/lib/type-utils/isFromFile.d.ts +0 -2
- package/lib/type-utils/isFromFile.js +0 -11
- package/lib/type-utils/isFromPackage.d.ts +0 -2
- package/lib/type-utils/isFromPackage.js +0 -13
- package/lib/type-utils/matchesSpecifier.d.ts +0 -3
- package/lib/type-utils/matchesSpecifier.js +0 -18
- package/lib/type-utils/schemas.d.ts +0 -14
- package/lib/type-utils/schemas.js +0 -23
package/lib/rules/typeImports.js
DELETED
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { forEachChild, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
import { z as z$1 } from "zod/v4";
|
|
5
|
-
//#region src/rules/typeImports.ts
|
|
6
|
-
function containsDecorator(node) {
|
|
7
|
-
if (node.kind === SyntaxKind.Decorator) return true;
|
|
8
|
-
return forEachChild(node, containsDecorator) ?? false;
|
|
9
|
-
}
|
|
10
|
-
function formatWordList(words) {
|
|
11
|
-
if (words.length < 2) return words[0] ?? "";
|
|
12
|
-
const last = words.at(-1);
|
|
13
|
-
return `${words.slice(0, -1).join(", ")} and ${last}`;
|
|
14
|
-
}
|
|
15
|
-
function getImportSource(node, sourceFile) {
|
|
16
|
-
return ts.isStringLiteral(node.moduleSpecifier) ? node.moduleSpecifier.text : node.moduleSpecifier.getText(sourceFile);
|
|
17
|
-
}
|
|
18
|
-
function getImportSpecifiers(node) {
|
|
19
|
-
const importClause = node.importClause;
|
|
20
|
-
if (!importClause) return [];
|
|
21
|
-
const specifiers = [];
|
|
22
|
-
if (importClause.name) specifiers.push(importClause.name);
|
|
23
|
-
const namedBindings = importClause.namedBindings;
|
|
24
|
-
if (namedBindings) if (namedBindings.kind === ts.SyntaxKind.NamespaceImport) specifiers.push(namedBindings);
|
|
25
|
-
else specifiers.push(...namedBindings.elements);
|
|
26
|
-
return specifiers;
|
|
27
|
-
}
|
|
28
|
-
function getReferencedSymbol(typeChecker, node) {
|
|
29
|
-
const symbol = typeChecker.getSymbolAtLocation(node);
|
|
30
|
-
return symbol?.flags && (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? typeChecker.getAliasedSymbol(symbol) : symbol;
|
|
31
|
-
}
|
|
32
|
-
function getSpecifierLocal(specifier) {
|
|
33
|
-
return specifier.kind === SyntaxKind.Identifier ? specifier : specifier.name;
|
|
34
|
-
}
|
|
35
|
-
function getTypeImportFix(report, sourceFile, fixStyle) {
|
|
36
|
-
const node = report.node;
|
|
37
|
-
const importText = node.getText(sourceFile);
|
|
38
|
-
const importClause = node.importClause;
|
|
39
|
-
const namedBindings = importClause?.namedBindings;
|
|
40
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
41
|
-
if (report.valueSpecifiers.length || report.unusedSpecifiers.length) {
|
|
42
|
-
if (!importClause || importClause.name || namedBindings?.kind !== ts.SyntaxKind.NamedImports) return;
|
|
43
|
-
const typeSpecifiers = new Set(report.typeSpecifiers);
|
|
44
|
-
const remainingSpecifiers = namedBindings.elements.filter((specifier) => !typeSpecifiers.has(specifier));
|
|
45
|
-
const typeText = report.typeSpecifiers.map((specifier) => specifier.getText(sourceFile)).join(", ");
|
|
46
|
-
const remainingText = remainingSpecifiers.map((specifier) => specifier.getText(sourceFile)).join(", ");
|
|
47
|
-
const moduleText = node.moduleSpecifier.getText(sourceFile);
|
|
48
|
-
return {
|
|
49
|
-
range,
|
|
50
|
-
text: `import type { ${typeText}} from ${moduleText};\nimport { ${remainingText} } from ${moduleText};`
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
if (fixStyle === "inline-type-imports" && importClause && !importClause.name && namedBindings?.kind === ts.SyntaxKind.NamedImports) {
|
|
54
|
-
const moduleText = node.moduleSpecifier.getText(sourceFile);
|
|
55
|
-
return {
|
|
56
|
-
range,
|
|
57
|
-
text: `import { ${namedBindings.elements.map((specifier) => specifier.isTypeOnly ? specifier.getText(sourceFile) : `type ${specifier.getText(sourceFile)}`).join(", ")} } from ${moduleText};`
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
return {
|
|
61
|
-
range,
|
|
62
|
-
text: importText.replace(/^import\b/, "import type")
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
function getTypeKeywordFixRange(node, sourceFile) {
|
|
66
|
-
const range = getTypeKeywordRange(node, sourceFile);
|
|
67
|
-
if (sourceFile.text[range.end] === " ") range.end += 1;
|
|
68
|
-
return range;
|
|
69
|
-
}
|
|
70
|
-
function getTypeKeywordRange(node, sourceFile) {
|
|
71
|
-
for (const child of node.getChildren(sourceFile)) if (child.kind === SyntaxKind.TypeKeyword) {
|
|
72
|
-
const range = getTSNodeRange(child, sourceFile);
|
|
73
|
-
if (node.kind === SyntaxKind.ImportSpecifier && sourceFile.text[range.end] === " ") range.end += 1;
|
|
74
|
-
return range;
|
|
75
|
-
}
|
|
76
|
-
return getTSNodeRange(node, sourceFile);
|
|
77
|
-
}
|
|
78
|
-
function isInImportDeclaration(node) {
|
|
79
|
-
let current = node;
|
|
80
|
-
while (current) {
|
|
81
|
-
if (current.kind === SyntaxKind.ImportDeclaration) return true;
|
|
82
|
-
current = current.parent;
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
function isInlineTypeSpecifier(specifier) {
|
|
87
|
-
return specifier.kind === SyntaxKind.ImportSpecifier && specifier.isTypeOnly;
|
|
88
|
-
}
|
|
89
|
-
function isOnlyTypeReference(node) {
|
|
90
|
-
if (isTypeQueryReference(node) || isTypeOnlyExportReference(node) || isPropertySignatureComputedReference(node)) return true;
|
|
91
|
-
let current;
|
|
92
|
-
let parent = node.parent;
|
|
93
|
-
while (parent) {
|
|
94
|
-
if (parent.kind === ts.SyntaxKind.HeritageClause) return parent.token === SyntaxKind.ImplementsKeyword;
|
|
95
|
-
if (ts.isTypeAliasDeclaration(parent) || ts.isInterfaceDeclaration(parent) || ts.isTypeParameterDeclaration(parent)) return true;
|
|
96
|
-
if (ts.isTypeNode(parent) && !ts.isExpressionWithTypeArguments(parent)) return true;
|
|
97
|
-
current = parent;
|
|
98
|
-
parent = current.parent;
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
function isPropertySignatureComputedReference(node) {
|
|
103
|
-
let child = node;
|
|
104
|
-
let parent = node.parent;
|
|
105
|
-
while (parent) switch (parent.kind) {
|
|
106
|
-
case SyntaxKind.PropertySignature: return parent.name === child;
|
|
107
|
-
case SyntaxKind.ComputedPropertyName:
|
|
108
|
-
if (parent.expression !== child) return false;
|
|
109
|
-
child = parent;
|
|
110
|
-
parent = parent.parent;
|
|
111
|
-
continue;
|
|
112
|
-
case SyntaxKind.PropertyAccessExpression:
|
|
113
|
-
if (parent.expression !== child) return false;
|
|
114
|
-
child = parent;
|
|
115
|
-
parent = parent.parent;
|
|
116
|
-
continue;
|
|
117
|
-
default: return false;
|
|
118
|
-
}
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
function isTypeImportDeclaration(node) {
|
|
122
|
-
return node.importClause?.phaseModifier === SyntaxKind.TypeKeyword;
|
|
123
|
-
}
|
|
124
|
-
function isTypeOnlyExportReference(node) {
|
|
125
|
-
const parent = node.parent;
|
|
126
|
-
if (parent.kind !== SyntaxKind.ExportSpecifier) return false;
|
|
127
|
-
const exportDeclaration = parent.parent.parent;
|
|
128
|
-
return parent.name === node && exportDeclaration.isTypeOnly;
|
|
129
|
-
}
|
|
130
|
-
function isTypeQueryReference(node) {
|
|
131
|
-
let child = node;
|
|
132
|
-
let parent = node.parent;
|
|
133
|
-
while (parent) switch (parent.kind) {
|
|
134
|
-
case SyntaxKind.TypeQuery: return true;
|
|
135
|
-
case SyntaxKind.QualifiedName:
|
|
136
|
-
if (parent.left !== child) return false;
|
|
137
|
-
child = parent;
|
|
138
|
-
parent = parent.parent;
|
|
139
|
-
continue;
|
|
140
|
-
default: return false;
|
|
141
|
-
}
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
var typeImports_default = ruleCreator.createRule(typescriptLanguage, {
|
|
145
|
-
about: {
|
|
146
|
-
description: "Reports imports that do not match the configured type import style.",
|
|
147
|
-
id: "typeImports",
|
|
148
|
-
presets: ["stylistic"]
|
|
149
|
-
},
|
|
150
|
-
messages: {
|
|
151
|
-
avoidImportType: {
|
|
152
|
-
primary: "Use a regular import instead of a type-only import.",
|
|
153
|
-
secondary: ["This configuration prefers regular imports over `import type` syntax."],
|
|
154
|
-
suggestions: ["Change this type-only import to a regular import."]
|
|
155
|
-
},
|
|
156
|
-
someImportsAreOnlyTypes: {
|
|
157
|
-
primary: "Imports {{ typeImports }} are only used as types.",
|
|
158
|
-
secondary: ["These imports are only used in type positions.", "Using 'import type' improves tree-shaking and makes intent clear."],
|
|
159
|
-
suggestions: ["Change these imports to use 'import type'."]
|
|
160
|
-
},
|
|
161
|
-
typeOverValue: {
|
|
162
|
-
primary: "All imports in this declaration are only used as types. Use 'import type'.",
|
|
163
|
-
secondary: ["This import is only used in type positions.", "Using 'import type' improves tree-shaking and makes intent clear."],
|
|
164
|
-
suggestions: ["Change this declaration to use 'import type'."]
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
options: {
|
|
168
|
-
fixStyle: z$1.enum(["inline-type-imports", "separate-type-imports"]).default("inline-type-imports"),
|
|
169
|
-
prefer: z$1.enum(["no-type-imports", "type-imports"]).default("type-imports")
|
|
170
|
-
},
|
|
171
|
-
setup(context) {
|
|
172
|
-
return { visitors: { SourceFile(node, { options, program, sourceFile, typeChecker }) {
|
|
173
|
-
if (options.prefer === "no-type-imports") {
|
|
174
|
-
for (const statement of node.statements) {
|
|
175
|
-
if (!ts.isImportDeclaration(statement) || !statement.importClause) continue;
|
|
176
|
-
if (isTypeImportDeclaration(statement)) {
|
|
177
|
-
context.report({
|
|
178
|
-
fix: {
|
|
179
|
-
range: getTypeKeywordFixRange(statement.importClause, sourceFile),
|
|
180
|
-
text: ""
|
|
181
|
-
},
|
|
182
|
-
message: "avoidImportType",
|
|
183
|
-
range: getTypeKeywordRange(statement.importClause, sourceFile)
|
|
184
|
-
});
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
for (const specifier of getImportSpecifiers(statement)) {
|
|
188
|
-
if (!isInlineTypeSpecifier(specifier)) continue;
|
|
189
|
-
context.report({
|
|
190
|
-
fix: {
|
|
191
|
-
range: getTypeKeywordFixRange(specifier, sourceFile),
|
|
192
|
-
text: ""
|
|
193
|
-
},
|
|
194
|
-
message: "avoidImportType",
|
|
195
|
-
range: getTypeKeywordRange(specifier, sourceFile)
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
const compilerOptions = program.getCompilerOptions();
|
|
202
|
-
if (compilerOptions.experimentalDecorators && compilerOptions.emitDecoratorMetadata && containsDecorator(node)) return;
|
|
203
|
-
const sourceImportsMap = {};
|
|
204
|
-
const importedSpecifiers = [];
|
|
205
|
-
const references = /* @__PURE__ */ new Map();
|
|
206
|
-
for (const statement of node.statements) {
|
|
207
|
-
if (!ts.isImportDeclaration(statement) || !statement.importClause) continue;
|
|
208
|
-
const source = getImportSource(statement, sourceFile);
|
|
209
|
-
sourceImportsMap[source] ??= { reportValueImports: [] };
|
|
210
|
-
if (isTypeImportDeclaration(statement)) continue;
|
|
211
|
-
for (const specifier of getImportSpecifiers(statement)) {
|
|
212
|
-
if (isInlineTypeSpecifier(specifier)) continue;
|
|
213
|
-
const local = getSpecifierLocal(specifier);
|
|
214
|
-
const importedSpecifier = {
|
|
215
|
-
local,
|
|
216
|
-
specifier,
|
|
217
|
-
symbol: getReferencedSymbol(typeChecker, local)
|
|
218
|
-
};
|
|
219
|
-
importedSpecifiers.push(importedSpecifier);
|
|
220
|
-
references.set(importedSpecifier, []);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
function collectReferences(node) {
|
|
224
|
-
if (ts.isIdentifier(node) && !isInImportDeclaration(node)) {
|
|
225
|
-
const symbol = getReferencedSymbol(typeChecker, node);
|
|
226
|
-
const importedSpecifier = importedSpecifiers.find((specifier) => specifier.local.text === node.text && (!specifier.symbol || specifier.symbol === symbol));
|
|
227
|
-
if (importedSpecifier) references.get(importedSpecifier)?.push(node);
|
|
228
|
-
}
|
|
229
|
-
forEachChild(node, collectReferences);
|
|
230
|
-
}
|
|
231
|
-
collectReferences(node);
|
|
232
|
-
for (const statement of node.statements) {
|
|
233
|
-
if (!ts.isImportDeclaration(statement) || !statement.importClause || isTypeImportDeclaration(statement)) continue;
|
|
234
|
-
const typeSpecifiers = [];
|
|
235
|
-
const valueSpecifiers = [];
|
|
236
|
-
const unusedSpecifiers = [];
|
|
237
|
-
for (const specifier of getImportSpecifiers(statement)) {
|
|
238
|
-
if (isInlineTypeSpecifier(specifier)) continue;
|
|
239
|
-
const importedSpecifier = importedSpecifiers.find(({ specifier: found }) => found === specifier);
|
|
240
|
-
const specifierReferences = importedSpecifier ? references.get(importedSpecifier) : void 0;
|
|
241
|
-
if (!specifierReferences?.length) unusedSpecifiers.push(specifier);
|
|
242
|
-
else if (specifierReferences.every(isOnlyTypeReference)) typeSpecifiers.push(specifier);
|
|
243
|
-
else valueSpecifiers.push(specifier);
|
|
244
|
-
}
|
|
245
|
-
if (typeSpecifiers.length) {
|
|
246
|
-
const sourceImports = sourceImportsMap[getImportSource(statement, sourceFile)];
|
|
247
|
-
if (!sourceImports) continue;
|
|
248
|
-
sourceImports.reportValueImports.push({
|
|
249
|
-
node: statement,
|
|
250
|
-
typeSpecifiers,
|
|
251
|
-
unusedSpecifiers,
|
|
252
|
-
valueSpecifiers
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
for (const sourceImports of Object.values(sourceImportsMap)) {
|
|
257
|
-
if (!sourceImports.reportValueImports.length) continue;
|
|
258
|
-
for (const report of sourceImports.reportValueImports) {
|
|
259
|
-
const fix = getTypeImportFix(report, sourceFile, options.fixStyle);
|
|
260
|
-
if (!report.valueSpecifiers.length && !report.unusedSpecifiers.length && !report.node.attributes?.elements.length) {
|
|
261
|
-
context.report({
|
|
262
|
-
fix,
|
|
263
|
-
message: "typeOverValue",
|
|
264
|
-
range: getTSNodeRange(report.node, sourceFile)
|
|
265
|
-
});
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
const importNames = report.typeSpecifiers.map((specifier) => `"${getSpecifierLocal(specifier).text}"`);
|
|
269
|
-
context.report({
|
|
270
|
-
data: { typeImports: formatWordList(importNames) },
|
|
271
|
-
fix,
|
|
272
|
-
message: "someImportsAreOnlyTypes",
|
|
273
|
-
range: getTSNodeRange(report.node, sourceFile)
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
} } };
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
//#endregion
|
|
281
|
-
export { typeImports_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports typeof expressions that compare impossible string literals.";
|
|
3
|
-
readonly id: "typeofComparisons";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "invalidValue", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getStaticStringValue, getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/typeofComparisons.ts
|
|
5
|
-
const validTypeofValues = /* @__PURE__ */ new Set([
|
|
6
|
-
"bigint",
|
|
7
|
-
"boolean",
|
|
8
|
-
"function",
|
|
9
|
-
"number",
|
|
10
|
-
"object",
|
|
11
|
-
"string",
|
|
12
|
-
"symbol",
|
|
13
|
-
"undefined"
|
|
14
|
-
]);
|
|
15
|
-
function getTypeofOperand(node) {
|
|
16
|
-
return node.kind === SyntaxKind.TypeOfExpression && node.expression;
|
|
17
|
-
}
|
|
18
|
-
var typeofComparisons_default = ruleCreator.createRule(typescriptLanguage, {
|
|
19
|
-
about: {
|
|
20
|
-
description: "Reports typeof expressions that compare impossible string literals.",
|
|
21
|
-
id: "typeofComparisons",
|
|
22
|
-
presets: ["javascript"]
|
|
23
|
-
},
|
|
24
|
-
messages: { invalidValue: {
|
|
25
|
-
primary: "This string literal is not one that the typeof operator will ever produce.",
|
|
26
|
-
secondary: [
|
|
27
|
-
"The typeof operator returns one of a specific set of string values.",
|
|
28
|
-
"Comparing typeof to an invalid string is usually a typo and will never match.",
|
|
29
|
-
"The only valid values are: \"bigint\", \"boolean\", \"function\", \"number\", \"object\", \"string\", \"symbol\", and \"undefined\"."
|
|
30
|
-
],
|
|
31
|
-
suggestions: ["Check for typos and use one of the valid typeof return values."]
|
|
32
|
-
} },
|
|
33
|
-
setup(context) {
|
|
34
|
-
function checkComparison(node, sourceFile) {
|
|
35
|
-
const leftTypeofOperand = getTypeofOperand(node.left);
|
|
36
|
-
const rightTypeofOperand = getTypeofOperand(node.right);
|
|
37
|
-
let comparisonValue;
|
|
38
|
-
if (leftTypeofOperand) comparisonValue = node.right;
|
|
39
|
-
else if (rightTypeofOperand) comparisonValue = node.left;
|
|
40
|
-
else return;
|
|
41
|
-
const stringValue = getStaticStringValue(comparisonValue);
|
|
42
|
-
if (stringValue !== void 0 && !validTypeofValues.has(stringValue)) context.report({
|
|
43
|
-
message: "invalidValue",
|
|
44
|
-
range: getTSNodeRange(comparisonValue, sourceFile)
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return { visitors: { BinaryExpression: (node, { sourceFile }) => {
|
|
48
|
-
if (node.operatorToken.kind === SyntaxKind.EqualsEqualsToken || node.operatorToken.kind === SyntaxKind.EqualsEqualsEqualsToken || node.operatorToken.kind === SyntaxKind.ExclamationEqualsToken || node.operatorToken.kind === SyntaxKind.ExclamationEqualsEqualsToken) checkComparison(node, sourceFile);
|
|
49
|
-
} } };
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
//#endregion
|
|
53
|
-
export { typeofComparisons_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports variables that are declared but never assigned a value.";
|
|
3
|
-
readonly id: "unassignedVariables";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noUnassigned", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getModifyingReferences, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/unassignedVariables.ts
|
|
5
|
-
var unassignedVariables_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports variables that are declared but never assigned a value.",
|
|
8
|
-
id: "unassignedVariables",
|
|
9
|
-
presets: ["javascript"]
|
|
10
|
-
},
|
|
11
|
-
messages: { noUnassigned: {
|
|
12
|
-
primary: "Variable '{{ name }}' is declared but never assigned a value.",
|
|
13
|
-
secondary: ["Declaring a variable without ever assigning it a value means it will always be `undefined`.", "This is often a mistake, such as forgetting to initialize the variable or assign to it later."],
|
|
14
|
-
suggestions: ["Assign a value to the variable, either at declaration or before it is used.", "If the variable is meant to be `undefined`, consider making that explicit for clarity."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { VariableDeclaration: (node, { sourceFile }) => {
|
|
18
|
-
if (node.initializer || node.name.kind !== SyntaxKind.Identifier) return;
|
|
19
|
-
if (node.parent.kind === SyntaxKind.VariableDeclarationList && !!(node.parent.flags & ts.NodeFlags.Const)) return;
|
|
20
|
-
if (!getModifyingReferences(node.name, sourceFile).length) context.report({
|
|
21
|
-
data: { name: node.name.text },
|
|
22
|
-
message: "noUnassigned",
|
|
23
|
-
range: {
|
|
24
|
-
begin: node.name.getStart(sourceFile),
|
|
25
|
-
end: node.name.getEnd()
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
} } };
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
//#endregion
|
|
32
|
-
export { unassignedVariables_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports typeof undefined checks.";
|
|
3
|
-
readonly id: "undefinedTypeofChecks";
|
|
4
|
-
readonly presets: readonly ["stylistic"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "directComparison", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,39 +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/undefinedTypeofChecks.ts
|
|
5
|
-
var undefinedTypeofChecks_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports typeof undefined checks.",
|
|
8
|
-
id: "undefinedTypeofChecks",
|
|
9
|
-
presets: ["stylistic"]
|
|
10
|
-
},
|
|
11
|
-
messages: { directComparison: {
|
|
12
|
-
primary: "This `typeof` comparison can be simplified to `=== undefined`.",
|
|
13
|
-
secondary: ["Checking whether a value is `undefined` can be done either with a `typeof` check or an equality comparison.", "Both amount to the same in modern code that does not override the global `undefined` value."],
|
|
14
|
-
suggestions: ["Replace with a direct `undefined` comparison."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { BinaryExpression(node, { sourceFile }) {
|
|
18
|
-
const operator = node.operatorToken.kind;
|
|
19
|
-
if (operator !== SyntaxKind.EqualsEqualsEqualsToken && operator !== SyntaxKind.ExclamationEqualsEqualsToken && operator !== SyntaxKind.EqualsEqualsToken && operator !== SyntaxKind.ExclamationEqualsToken) return;
|
|
20
|
-
let typeofExpression;
|
|
21
|
-
if (node.left.kind === SyntaxKind.TypeOfExpression && node.right.kind === SyntaxKind.StringLiteral && node.right.text === "undefined") typeofExpression = node.left.expression;
|
|
22
|
-
else if (node.right.kind === SyntaxKind.TypeOfExpression && node.left.kind === SyntaxKind.StringLiteral && node.left.text === "undefined") typeofExpression = node.right.expression;
|
|
23
|
-
if (!typeofExpression) return;
|
|
24
|
-
const range = getTSNodeRange(node, sourceFile);
|
|
25
|
-
const expressionText = typeofExpression.getText(sourceFile);
|
|
26
|
-
const operatorText = node.operatorToken.getText(sourceFile);
|
|
27
|
-
context.report({
|
|
28
|
-
fix: {
|
|
29
|
-
range,
|
|
30
|
-
text: `${expressionText} ${operatorText} undefined`
|
|
31
|
-
},
|
|
32
|
-
message: "directComparison",
|
|
33
|
-
range
|
|
34
|
-
});
|
|
35
|
-
} } };
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
//#endregion
|
|
39
|
-
export { undefinedTypeofChecks_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using variables that are not defined.";
|
|
3
|
-
readonly id: "undefinedVariables";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "undefinedVariable", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,37 +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/undefinedVariables.ts
|
|
5
|
-
var undefinedVariables_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using variables that are not defined.",
|
|
8
|
-
id: "undefinedVariables",
|
|
9
|
-
presets: ["javascript"]
|
|
10
|
-
},
|
|
11
|
-
messages: { undefinedVariable: {
|
|
12
|
-
primary: "Variable '{{ name }}' is used but was never defined.",
|
|
13
|
-
secondary: ["Variables must be declared before they can be used.", "Using undefined variables will cause a ReferenceError at runtime."],
|
|
14
|
-
suggestions: ["Declare the variable before using it, or check if the variable name is spelled correctly."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
return { visitors: { Identifier: (node, { sourceFile, typeChecker }) => {
|
|
18
|
-
if (node.parent.kind === SyntaxKind.VariableDeclaration && node.parent.name === node) return;
|
|
19
|
-
if (node.parent.kind === SyntaxKind.Parameter && node.parent.name === node) return;
|
|
20
|
-
if ((node.parent.kind === SyntaxKind.FunctionDeclaration || node.parent.kind === SyntaxKind.ClassDeclaration || node.parent.kind === SyntaxKind.InterfaceDeclaration || node.parent.kind === SyntaxKind.TypeAliasDeclaration || node.parent.kind === SyntaxKind.EnumDeclaration || node.parent.kind === SyntaxKind.ModuleDeclaration) && node.parent.name === node) return;
|
|
21
|
-
if (node.parent.kind === SyntaxKind.ImportSpecifier || node.parent.kind === SyntaxKind.ImportClause || node.parent.kind === SyntaxKind.NamespaceImport) return;
|
|
22
|
-
if (node.parent.kind === SyntaxKind.PropertyAccessExpression && node.parent.name === node) return;
|
|
23
|
-
if (node.parent.kind === SyntaxKind.PropertyAssignment && node.parent.name === node) return;
|
|
24
|
-
if (node.parent.kind === SyntaxKind.TypeOfExpression && node.parent.expression === node) return;
|
|
25
|
-
if (!typeChecker.getSymbolAtLocation(node)) context.report({
|
|
26
|
-
data: { name: node.text },
|
|
27
|
-
message: "undefinedVariable",
|
|
28
|
-
range: {
|
|
29
|
-
begin: node.getStart(sourceFile),
|
|
30
|
-
end: node.getEnd()
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { undefinedVariables_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports files with Unicode Byte Order Marks (BOMs).";
|
|
3
|
-
readonly id: "unicodeBOMs";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noBOM", undefined>;
|
|
9
|
-
export default _default;
|
package/lib/rules/unicodeBOMs.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/unicodeBOMs.ts
|
|
4
|
-
var unicodeBOMs_default = ruleCreator.createRule(typescriptLanguage, {
|
|
5
|
-
about: {
|
|
6
|
-
description: "Reports files with Unicode Byte Order Marks (BOMs).",
|
|
7
|
-
id: "unicodeBOMs",
|
|
8
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
9
|
-
},
|
|
10
|
-
messages: { noBOM: {
|
|
11
|
-
primary: "This Unicode Byte Order Mark (BOM) is unnecessary and can cause issues with some tools.",
|
|
12
|
-
secondary: ["The Unicode BOM is a special character (U+FEFF) that can appear at the start of a file to indicate its byte order and encoding.", "While it can be useful in some contexts, it does not improve tooling portability and is not generally helpful for editors."],
|
|
13
|
-
suggestions: ["Remove the BOM from the beginning of the file."]
|
|
14
|
-
} },
|
|
15
|
-
setup(context) {
|
|
16
|
-
return { visitors: { SourceFile: (node) => {
|
|
17
|
-
if (node.getFullText().charCodeAt(0) !== 65279) return {};
|
|
18
|
-
context.report({
|
|
19
|
-
message: "noBOM",
|
|
20
|
-
range: {
|
|
21
|
-
begin: 0,
|
|
22
|
-
end: 1
|
|
23
|
-
},
|
|
24
|
-
suggestions: [{
|
|
25
|
-
id: "removeBOM",
|
|
26
|
-
range: {
|
|
27
|
-
begin: 0,
|
|
28
|
-
end: 1
|
|
29
|
-
},
|
|
30
|
-
text: ""
|
|
31
|
-
}]
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { unicodeBOMs_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary `.bind()` calls.";
|
|
3
|
-
readonly id: "unnecessaryBinds";
|
|
4
|
-
readonly presets: readonly ["logical"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryBinds" | "arrowBind", undefined>;
|
|
9
|
-
export default _default;
|
|
@@ -1,76 +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/unnecessaryBinds.ts
|
|
5
|
-
function containsThis(node) {
|
|
6
|
-
if (node.kind === ts.SyntaxKind.ThisKeyword) return true;
|
|
7
|
-
if (ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) || ts.isArrowFunction(node)) return false;
|
|
8
|
-
let found = false;
|
|
9
|
-
node.forEachChild((child) => {
|
|
10
|
-
if (containsThis(child)) found = true;
|
|
11
|
-
});
|
|
12
|
-
return found;
|
|
13
|
-
}
|
|
14
|
-
function isStaticValue(node) {
|
|
15
|
-
if (ts.isParenthesizedExpression(node)) return isStaticValue(node.expression);
|
|
16
|
-
if (ts.isPrefixUnaryExpression(node)) return isStaticValue(node.operand);
|
|
17
|
-
if (ts.isIdentifier(node)) return true;
|
|
18
|
-
if (ts.isPropertyAccessExpression(node)) return isStaticValue(node.expression);
|
|
19
|
-
if (ts.isElementAccessExpression(node)) return isStaticValue(node.expression) && isStaticValue(node.argumentExpression);
|
|
20
|
-
return node.kind === ts.SyntaxKind.ThisKeyword || node.kind === ts.SyntaxKind.SuperKeyword || node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword || node.kind === ts.SyntaxKind.NullKeyword || ts.isBigIntLiteral(node) || ts.isNumericLiteral(node) || ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node) || node.kind === ts.SyntaxKind.RegularExpressionLiteral;
|
|
21
|
-
}
|
|
22
|
-
function unwrapParentheses(node) {
|
|
23
|
-
while (ts.isParenthesizedExpression(node)) node = node.expression;
|
|
24
|
-
return node;
|
|
25
|
-
}
|
|
26
|
-
var unnecessaryBinds_default = ruleCreator.createRule(typescriptLanguage, {
|
|
27
|
-
about: {
|
|
28
|
-
description: "Reports unnecessary `.bind()` calls.",
|
|
29
|
-
id: "unnecessaryBinds",
|
|
30
|
-
presets: ["logical"]
|
|
31
|
-
},
|
|
32
|
-
messages: {
|
|
33
|
-
arrowBind: {
|
|
34
|
-
primary: "`.bind()` has no effect on arrow functions.",
|
|
35
|
-
secondary: ["Arrow functions have lexical 'this' binding.", "Calling .bind() on an arrow function has no effect."],
|
|
36
|
-
suggestions: ["Remove the `.bind()` call.", "Change the arrow function to a `function` that uses `this`"]
|
|
37
|
-
},
|
|
38
|
-
unnecessaryBinds: {
|
|
39
|
-
primary: "This `.bind()` call is unnecessary because the function does not use `this`.",
|
|
40
|
-
secondary: ["This function does not use `this`.", "`.bind()`'s purpose is to bind `this`, so using it on this function doesn't change anything."],
|
|
41
|
-
suggestions: ["Remove the `.bind()` call.", "Change the function to use `this` if that was intended."]
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
setup(context) {
|
|
45
|
-
return { visitors: { CallExpression(node, { sourceFile }) {
|
|
46
|
-
if (!ts.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "bind" || node.arguments.length !== 1) return;
|
|
47
|
-
const boundArgument = node.arguments[0];
|
|
48
|
-
const boundFunction = unwrapParentheses(node.expression.expression);
|
|
49
|
-
const fix = isStaticValue(boundArgument) ? {
|
|
50
|
-
range: getTSNodeRange(node, sourceFile),
|
|
51
|
-
text: node.expression.expression.getText(sourceFile)
|
|
52
|
-
} : void 0;
|
|
53
|
-
if (ts.isArrowFunction(boundFunction)) {
|
|
54
|
-
context.report({
|
|
55
|
-
fix,
|
|
56
|
-
message: "arrowBind",
|
|
57
|
-
range: {
|
|
58
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
59
|
-
end: node.end
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (ts.isFunctionExpression(boundFunction) && !containsThis(boundFunction.body)) context.report({
|
|
65
|
-
fix,
|
|
66
|
-
message: "unnecessaryBinds",
|
|
67
|
-
range: {
|
|
68
|
-
begin: node.expression.name.getStart(sourceFile),
|
|
69
|
-
end: node.end
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
} } };
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
//#endregion
|
|
76
|
-
export { unnecessaryBinds_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports standalone block statements that don't create a meaningful scope.";
|
|
3
|
-
readonly id: "unnecessaryBlocks";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryBlock", undefined>;
|
|
9
|
-
export default _default;
|