@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,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports ambiguous multiline expressions that could be misinterpreted.";
|
|
3
|
-
readonly id: "multilineAmbiguities";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "ambiguity", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=multilineAmbiguities.d.ts.map
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/multilineAmbiguities.ts
|
|
5
|
-
var multilineAmbiguities_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports ambiguous multiline expressions that could be misinterpreted.",
|
|
8
|
-
id: "multilineAmbiguities",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { ambiguity: {
|
|
12
|
-
primary: "This ambiguous line break before {{ after }} will be misinterpreted as a {{ interpretation }}.",
|
|
13
|
-
secondary: ["When a line ends with an expression and the next line starts with {{ after }}, it may be interpreted as a {{ interpretation }} instead of two separate statements.", "This can lead to unexpected behavior and runtime errors that are difficult to debug."],
|
|
14
|
-
suggestions: ["Add a semicolon after the first line to make it clear they are separate statements.", "Alternatively, move the {{ after }} to the same line as the first expression if a {{ interpretation }} is intended."]
|
|
15
|
-
} },
|
|
16
|
-
setup(context) {
|
|
17
|
-
function checkMultilineDelimiter(expressionEnd, delimiterStart, after, interpretation, sourceFile) {
|
|
18
|
-
const { line: expressionEndLine } = sourceFile.getLineAndCharacterOfPosition(expressionEnd);
|
|
19
|
-
const { line: delimiterLine } = sourceFile.getLineAndCharacterOfPosition(delimiterStart);
|
|
20
|
-
if (expressionEndLine < delimiterLine) context.report({
|
|
21
|
-
data: {
|
|
22
|
-
after,
|
|
23
|
-
interpretation
|
|
24
|
-
},
|
|
25
|
-
message: "ambiguity",
|
|
26
|
-
range: {
|
|
27
|
-
begin: delimiterStart,
|
|
28
|
-
end: getLineEndPosition(delimiterLine, sourceFile)
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
return { visitors: {
|
|
33
|
-
CallExpression: (node, { sourceFile }) => {
|
|
34
|
-
if (!node.arguments.length || node.questionDotToken) return;
|
|
35
|
-
const openParen = findChildToken(node, ts$1.SyntaxKind.OpenParenToken, sourceFile);
|
|
36
|
-
if (!openParen) return;
|
|
37
|
-
checkMultilineDelimiter(getExpressionEnd(node, sourceFile), openParen.getStart(sourceFile), "parentheses", "function call", sourceFile);
|
|
38
|
-
},
|
|
39
|
-
ElementAccessExpression: (node, { sourceFile }) => {
|
|
40
|
-
if (node.questionDotToken) return;
|
|
41
|
-
const openBracket = findChildToken(node, ts$1.SyntaxKind.OpenBracketToken, sourceFile);
|
|
42
|
-
if (!openBracket) return;
|
|
43
|
-
checkMultilineDelimiter(node.expression.getEnd(), openBracket.getStart(sourceFile), "brackets", "property access", sourceFile);
|
|
44
|
-
},
|
|
45
|
-
TaggedTemplateExpression: (node, { sourceFile }) => {
|
|
46
|
-
checkMultilineDelimiter(node.tag.getEnd(), node.template.getStart(sourceFile), "a template literal", "tagged template", sourceFile);
|
|
47
|
-
}
|
|
48
|
-
} };
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
function findChildToken(node, kind, sourceFile) {
|
|
52
|
-
for (const child of node.getChildren(sourceFile)) if (child.kind === kind) return child;
|
|
53
|
-
}
|
|
54
|
-
function getExpressionEnd(node, sourceFile) {
|
|
55
|
-
return (node.typeArguments && findChildToken(node, ts$1.SyntaxKind.GreaterThanToken, sourceFile))?.getEnd() ?? node.expression.getEnd();
|
|
56
|
-
}
|
|
57
|
-
function getLineEndPosition(lineNumber, sourceFile) {
|
|
58
|
-
const nextLineStart = sourceFile.getLineStarts()[lineNumber + 1];
|
|
59
|
-
return nextLineStart === void 0 ? sourceFile.getEnd() : nextLineStart - 1;
|
|
60
|
-
}
|
|
61
|
-
//#endregion
|
|
62
|
-
export { multilineAmbiguities_default as default };
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=multilineAmbiguities.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports anonymous functions and classes as the default export.";
|
|
3
|
-
readonly id: "namedDefaultExports";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "anonymousClass" | "anonymousFunction", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=namedDefaultExports.d.ts.map
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/namedDefaultExports.ts
|
|
5
|
-
function hasDefaultModifier(modifiers) {
|
|
6
|
-
return modifiers?.some((mod) => mod.kind === SyntaxKind.DefaultKeyword);
|
|
7
|
-
}
|
|
8
|
-
function hasExportModifier(modifiers) {
|
|
9
|
-
return modifiers?.some((mod) => mod.kind === SyntaxKind.ExportKeyword);
|
|
10
|
-
}
|
|
11
|
-
var namedDefaultExports_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports anonymous functions and classes as the default export.",
|
|
14
|
-
id: "namedDefaultExports",
|
|
15
|
-
presets: ["stylisticStrict"]
|
|
16
|
-
},
|
|
17
|
-
messages: {
|
|
18
|
-
anonymousClass: {
|
|
19
|
-
primary: "This default-exported class is missing an informative name.",
|
|
20
|
-
secondary: ["Named default exports improve codebase searchability by ensuring consistent identifier use for a module's default export.", "When a class is anonymous, it becomes harder to find all usages and references in the codebase."],
|
|
21
|
-
suggestions: ["Add a name to the exported class."]
|
|
22
|
-
},
|
|
23
|
-
anonymousFunction: {
|
|
24
|
-
primary: "This default-exported function is missing an informative name.",
|
|
25
|
-
secondary: ["Named default exports improve codebase searchability by ensuring consistent identifier use for a module's default export.", "When a function is anonymous, it becomes harder to find all usages and references in the codebase."],
|
|
26
|
-
suggestions: ["Add a name to the exported function.", "Assign the arrow function to a named variable, then export it."]
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
setup(context) {
|
|
30
|
-
return { visitors: {
|
|
31
|
-
ClassDeclaration: (node, { sourceFile }) => {
|
|
32
|
-
if (hasExportModifier(node.modifiers) && hasDefaultModifier(node.modifiers) && !node.name) context.report({
|
|
33
|
-
message: "anonymousClass",
|
|
34
|
-
range: getTSNodeRange(node, sourceFile)
|
|
35
|
-
});
|
|
36
|
-
},
|
|
37
|
-
ExportAssignment: (node, { sourceFile }) => {
|
|
38
|
-
if (node.isExportEquals) return;
|
|
39
|
-
if (ts.isArrowFunction(node.expression) || ts.isFunctionExpression(node.expression) && !node.expression.name) context.report({
|
|
40
|
-
message: "anonymousFunction",
|
|
41
|
-
range: getTSNodeRange(node.expression, sourceFile)
|
|
42
|
-
});
|
|
43
|
-
else if (ts.isClassExpression(node.expression) && !node.expression.name) context.report({
|
|
44
|
-
message: "anonymousClass",
|
|
45
|
-
range: getTSNodeRange(node.expression, sourceFile)
|
|
46
|
-
});
|
|
47
|
-
},
|
|
48
|
-
FunctionDeclaration: (node, { sourceFile }) => {
|
|
49
|
-
if (hasExportModifier(node.modifiers) && hasDefaultModifier(node.modifiers) && !node.name) context.report({
|
|
50
|
-
message: "anonymousFunction",
|
|
51
|
-
range: getTSNodeRange(node, sourceFile)
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
} };
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
//#endregion
|
|
58
|
-
export { namedDefaultExports_default as default };
|
|
59
|
-
|
|
60
|
-
//# sourceMappingURL=namedDefaultExports.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { z } from "zod/v4";
|
|
2
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
3
|
-
readonly description: "Reports using legacy `namespace` declarations.";
|
|
4
|
-
readonly id: "namespaceDeclarations";
|
|
5
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
6
|
-
} & {
|
|
7
|
-
readonly pluginId: string;
|
|
8
|
-
readonly url: string;
|
|
9
|
-
}, "preferModules", {
|
|
10
|
-
allowDeclarations: z.ZodDefault<z.ZodBoolean>;
|
|
11
|
-
allowDefinitionFiles: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
-
}>;
|
|
13
|
-
export default _default;
|
|
14
|
-
//# sourceMappingURL=namespaceDeclarations.d.ts.map
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
import * as tsutils from "ts-api-utils";
|
|
5
|
-
import { z } from "zod/v4";
|
|
6
|
-
//#region src/rules/namespaceDeclarations.ts
|
|
7
|
-
var namespaceDeclarations_default = ruleCreator.createRule(typescriptLanguage, {
|
|
8
|
-
about: {
|
|
9
|
-
description: "Reports using legacy `namespace` declarations.",
|
|
10
|
-
id: "namespaceDeclarations",
|
|
11
|
-
presets: ["logical", "logicalStrict"]
|
|
12
|
-
},
|
|
13
|
-
messages: { preferModules: {
|
|
14
|
-
primary: "Prefer using ECMAScript modules over legacy TypeScript namespaces.",
|
|
15
|
-
secondary: ["Namespaces are a legacy feature of TypeScript that can lead to confusion and are not compatible with ECMAScript modules."],
|
|
16
|
-
suggestions: ["Modern codebases generally use `export` and `import` statements to define and use ECMAScript modules instead."]
|
|
17
|
-
} },
|
|
18
|
-
options: {
|
|
19
|
-
allowDeclarations: z.boolean().default(false).describe("Whether to allow namespaces declared with the `declare` keyword."),
|
|
20
|
-
allowDefinitionFiles: z.boolean().default(false).describe("Whether to allow namespaces in `.d.ts` and other definition files.")
|
|
21
|
-
},
|
|
22
|
-
setup(context) {
|
|
23
|
-
return { visitors: { ModuleDeclaration: (node, { options: { allowDeclarations, allowDefinitionFiles }, sourceFile }) => {
|
|
24
|
-
if (allowDefinitionFiles && sourceFile.isDeclarationFile) return;
|
|
25
|
-
if (node.parent.kind !== SyntaxKind.SourceFile || node.name.kind !== SyntaxKind.Identifier || node.name.text === "global") return;
|
|
26
|
-
if (allowDeclarations && tsutils.includesModifier(node.modifiers, SyntaxKind.DeclareKeyword)) return;
|
|
27
|
-
context.report({
|
|
28
|
-
message: "preferModules",
|
|
29
|
-
range: getTSNodeRange(node.getChildAt(0), sourceFile)
|
|
30
|
-
});
|
|
31
|
-
} } };
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
//#endregion
|
|
35
|
-
export { namespaceDeclarations_default as default };
|
|
36
|
-
|
|
37
|
-
//# sourceMappingURL=namespaceDeclarations.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports declared namespaces that implicitly export all members.";
|
|
3
|
-
readonly id: "namespaceImplicitAmbientImports";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "implicitExports", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=namespaceImplicitAmbientImports.d.ts.map
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/namespaceImplicitAmbientImports.ts
|
|
5
|
-
function hasExportModifier(node) {
|
|
6
|
-
return !!(ts.canHaveModifiers(node) && ts.getModifiers(node)?.some((modifier) => modifier.kind === SyntaxKind.ExportKeyword));
|
|
7
|
-
}
|
|
8
|
-
function hasNamedExport(statements) {
|
|
9
|
-
return statements.some((statement) => statement.kind === SyntaxKind.ExportDeclaration && statement.exportClause?.kind === SyntaxKind.NamedExports);
|
|
10
|
-
}
|
|
11
|
-
function hasNonExportedMember(statements) {
|
|
12
|
-
return statements.some((statement) => !hasExportModifier(statement) && (statement.kind === SyntaxKind.TypeAliasDeclaration || statement.kind === SyntaxKind.InterfaceDeclaration || statement.kind === SyntaxKind.ClassDeclaration || statement.kind === SyntaxKind.EnumDeclaration || statement.kind === SyntaxKind.FunctionDeclaration || statement.kind === SyntaxKind.VariableStatement || statement.kind === SyntaxKind.ModuleDeclaration));
|
|
13
|
-
}
|
|
14
|
-
var namespaceImplicitAmbientImports_default = ruleCreator.createRule(typescriptLanguage, {
|
|
15
|
-
about: {
|
|
16
|
-
description: "Reports declared namespaces that implicitly export all members.",
|
|
17
|
-
id: "namespaceImplicitAmbientImports",
|
|
18
|
-
presets: ["stylisticStrict"]
|
|
19
|
-
},
|
|
20
|
-
messages: { implicitExports: {
|
|
21
|
-
primary: "Declared namespaces without explicit exports implicitly export all members.",
|
|
22
|
-
secondary: ["When a declared namespace has no named export statements, all its members are implicitly exported.", "This can lead to unintended exports and make it harder to understand what the namespace exposes."],
|
|
23
|
-
suggestions: ["Add an `export {};` statement to opt out of implicit exports, then explicitly export the members you intend to expose."]
|
|
24
|
-
} },
|
|
25
|
-
setup(context) {
|
|
26
|
-
return { visitors: { ModuleDeclaration: (node, { sourceFile }) => {
|
|
27
|
-
if (!node.modifiers?.some((modifier) => modifier.kind === SyntaxKind.DeclareKeyword) || node.name.kind !== SyntaxKind.Identifier || node.body?.kind !== SyntaxKind.ModuleBlock) return;
|
|
28
|
-
const statements = node.body.statements;
|
|
29
|
-
if (!statements.length || hasNamedExport(statements) || !hasNonExportedMember(statements)) return;
|
|
30
|
-
context.report({
|
|
31
|
-
message: "implicitExports",
|
|
32
|
-
range: getTSNodeRange(node, sourceFile)
|
|
33
|
-
});
|
|
34
|
-
} } };
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
//#endregion
|
|
38
|
-
export { namespaceImplicitAmbientImports_default as default };
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=namespaceImplicitAmbientImports.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using `module` keyword instead of `namespace` for TypeScript namespaces.";
|
|
3
|
-
readonly id: "namespaceKeywords";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferNamespace", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=namespaceKeywords.d.ts.map
|
|
@@ -1,40 +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/namespaceKeywords.ts
|
|
5
|
-
var namespaceKeywords_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using `module` keyword instead of `namespace` for TypeScript namespaces.",
|
|
8
|
-
id: "namespaceKeywords",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferNamespace: {
|
|
12
|
-
primary: "The `namespace` keyword is preferred over `module` for TypeScript namespaces.",
|
|
13
|
-
secondary: [
|
|
14
|
-
"TypeScript originally used the `module` keyword to declare internal modules (namespaces).",
|
|
15
|
-
"The `namespace` keyword was later introduced to avoid confusion with ES6 modules.",
|
|
16
|
-
"Using `namespace` makes it clear you are defining a TypeScript namespace, not an ES6 module."
|
|
17
|
-
],
|
|
18
|
-
suggestions: ["Replace `module` with `namespace`."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { ModuleDeclaration: (node, { sourceFile }) => {
|
|
22
|
-
if (node.name.kind === SyntaxKind.StringLiteral) return;
|
|
23
|
-
const moduleKeywordToken = node.getChildren(sourceFile).find((child) => child.kind === SyntaxKind.ModuleKeyword);
|
|
24
|
-
if (!moduleKeywordToken) return;
|
|
25
|
-
const range = getTSNodeRange(moduleKeywordToken, sourceFile);
|
|
26
|
-
context.report({
|
|
27
|
-
fix: {
|
|
28
|
-
range,
|
|
29
|
-
text: "namespace"
|
|
30
|
-
},
|
|
31
|
-
message: "preferNamespace",
|
|
32
|
-
range
|
|
33
|
-
});
|
|
34
|
-
} } };
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
//#endregion
|
|
38
|
-
export { namespaceKeywords_default as default };
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=namespaceKeywords.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports extending the prototype of native JavaScript objects.";
|
|
3
|
-
readonly id: "nativeObjectExtensions";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noExtendNative", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=nativeObjectExtensions.d.ts.map
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/nativeObjectExtensions.ts
|
|
5
|
-
const nativeConstructors = new Set([
|
|
6
|
-
"AggregateError",
|
|
7
|
-
"Array",
|
|
8
|
-
"ArrayBuffer",
|
|
9
|
-
"BigInt",
|
|
10
|
-
"BigInt64Array",
|
|
11
|
-
"BigUint64Array",
|
|
12
|
-
"Boolean",
|
|
13
|
-
"DataView",
|
|
14
|
-
"Date",
|
|
15
|
-
"Error",
|
|
16
|
-
"EvalError",
|
|
17
|
-
"FinalizationRegistry",
|
|
18
|
-
"Float16Array",
|
|
19
|
-
"Float32Array",
|
|
20
|
-
"Float64Array",
|
|
21
|
-
"Function",
|
|
22
|
-
"Int8Array",
|
|
23
|
-
"Int16Array",
|
|
24
|
-
"Int32Array",
|
|
25
|
-
"Map",
|
|
26
|
-
"Number",
|
|
27
|
-
"Object",
|
|
28
|
-
"Promise",
|
|
29
|
-
"RangeError",
|
|
30
|
-
"ReferenceError",
|
|
31
|
-
"RegExp",
|
|
32
|
-
"Set",
|
|
33
|
-
"SharedArrayBuffer",
|
|
34
|
-
"String",
|
|
35
|
-
"Symbol",
|
|
36
|
-
"SyntaxError",
|
|
37
|
-
"TypeError",
|
|
38
|
-
"Uint8Array",
|
|
39
|
-
"Uint8ClampedArray",
|
|
40
|
-
"Uint16Array",
|
|
41
|
-
"Uint32Array",
|
|
42
|
-
"URIError",
|
|
43
|
-
"WeakMap",
|
|
44
|
-
"WeakRef",
|
|
45
|
-
"WeakSet"
|
|
46
|
-
]);
|
|
47
|
-
function getPrototypeObject(node) {
|
|
48
|
-
return ts$1.isIdentifier(node.expression) && node.expression;
|
|
49
|
-
}
|
|
50
|
-
function isPrototypeAccess(node) {
|
|
51
|
-
switch (node.kind) {
|
|
52
|
-
case ts$1.SyntaxKind.ElementAccessExpression: return ts$1.isStringLiteral(node.argumentExpression) && node.argumentExpression.text === "prototype";
|
|
53
|
-
case ts$1.SyntaxKind.PropertyAccessExpression: return node.name.text === "prototype";
|
|
54
|
-
default: return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
var nativeObjectExtensions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
58
|
-
about: {
|
|
59
|
-
description: "Reports extending the prototype of native JavaScript objects.",
|
|
60
|
-
id: "nativeObjectExtensions",
|
|
61
|
-
presets: ["javascript"]
|
|
62
|
-
},
|
|
63
|
-
messages: { noExtendNative: {
|
|
64
|
-
primary: "Extending the {{ name }} prototype modifies built-in behavior that other code depends on.",
|
|
65
|
-
secondary: [
|
|
66
|
-
"Adding properties to native prototypes affects all instances of that type across the codebase.",
|
|
67
|
-
"This can cause conflicts with other libraries that expect standard prototype behavior.",
|
|
68
|
-
"Future ECMAScript versions may add methods with the same name, causing unexpected behavior."
|
|
69
|
-
],
|
|
70
|
-
suggestions: ["Create a wrapper class or utility function instead of extending the prototype.", "Use composition rather than modifying the prototype chain."]
|
|
71
|
-
} },
|
|
72
|
-
setup(context) {
|
|
73
|
-
function checkNode(node, { sourceFile, typeChecker }) {
|
|
74
|
-
if (!isPrototypeAccess(node)) return;
|
|
75
|
-
const objectIdentifier = getPrototypeObject(node);
|
|
76
|
-
if (!objectIdentifier) return;
|
|
77
|
-
const name = objectIdentifier.text;
|
|
78
|
-
if (!nativeConstructors.has(name) || !isGlobalDeclarationOfName(objectIdentifier, name, typeChecker)) return;
|
|
79
|
-
switch (node.parent.kind) {
|
|
80
|
-
case ts$1.SyntaxKind.CallExpression: {
|
|
81
|
-
if (node.parent.arguments[0] !== node) break;
|
|
82
|
-
const callee = node.parent.expression;
|
|
83
|
-
if (!ts$1.isPropertyAccessExpression(callee) || !ts$1.isIdentifier(callee.expression) || callee.expression.text !== "Object" || callee.name.text !== "defineProperty" && callee.name.text !== "defineProperties" || !isGlobalDeclarationOfName(callee.expression, "Object", typeChecker)) break;
|
|
84
|
-
context.report({
|
|
85
|
-
data: { name },
|
|
86
|
-
message: "noExtendNative",
|
|
87
|
-
range: getTSNodeRange(node.parent, sourceFile)
|
|
88
|
-
});
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
case ts$1.SyntaxKind.ElementAccessExpression:
|
|
92
|
-
case ts$1.SyntaxKind.PropertyAccessExpression: {
|
|
93
|
-
if (node.parent.expression !== node) break;
|
|
94
|
-
const grandparent = node.parent.parent;
|
|
95
|
-
if (!ts$1.isBinaryExpression(grandparent) || grandparent.operatorToken.kind !== ts$1.SyntaxKind.EqualsToken || grandparent.left !== node.parent) break;
|
|
96
|
-
context.report({
|
|
97
|
-
data: { name },
|
|
98
|
-
message: "noExtendNative",
|
|
99
|
-
range: getTSNodeRange(grandparent, sourceFile)
|
|
100
|
-
});
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return { visitors: {
|
|
106
|
-
ElementAccessExpression: checkNode,
|
|
107
|
-
PropertyAccessExpression: checkNode
|
|
108
|
-
} };
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
//#endregion
|
|
112
|
-
export { nativeObjectExtensions_default as default };
|
|
113
|
-
|
|
114
|
-
//# sourceMappingURL=nativeObjectExtensions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer negative index over `.length - index` for `at`, `slice`, `splice`, and similar methods.";
|
|
3
|
-
readonly id: "negativeIndexLengthMethods";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferNegativeIndex", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=negativeIndexLengthMethods.d.ts.map
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { isTypeRecursive } from "./utils/isTypeRecursive.js";
|
|
4
|
-
import { getTSNodeRange, hasSameTokens, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
5
|
-
import * as ts$1 from "typescript";
|
|
6
|
-
//#region src/rules/negativeIndexLengthMethods.ts
|
|
7
|
-
const typedArrayNames = new Set([
|
|
8
|
-
"BigInt64Array",
|
|
9
|
-
"BigUint64Array",
|
|
10
|
-
"Float32Array",
|
|
11
|
-
"Float64Array",
|
|
12
|
-
"Int8Array",
|
|
13
|
-
"Int16Array",
|
|
14
|
-
"Int32Array",
|
|
15
|
-
"Uint8Array",
|
|
16
|
-
"Uint8ClampedArray",
|
|
17
|
-
"Uint16Array",
|
|
18
|
-
"Uint32Array"
|
|
19
|
-
]);
|
|
20
|
-
const methodConfigurations = new Map([
|
|
21
|
-
["at", {
|
|
22
|
-
argumentIndexes: [0],
|
|
23
|
-
supportedTypes: new Set([
|
|
24
|
-
"Array",
|
|
25
|
-
"String",
|
|
26
|
-
...typedArrayNames
|
|
27
|
-
])
|
|
28
|
-
}],
|
|
29
|
-
["slice", {
|
|
30
|
-
argumentIndexes: [0, 1],
|
|
31
|
-
supportedTypes: new Set([
|
|
32
|
-
"Array",
|
|
33
|
-
"String",
|
|
34
|
-
...typedArrayNames
|
|
35
|
-
])
|
|
36
|
-
}],
|
|
37
|
-
["splice", {
|
|
38
|
-
argumentIndexes: [0],
|
|
39
|
-
supportedTypes: new Set(["Array"])
|
|
40
|
-
}],
|
|
41
|
-
["subarray", {
|
|
42
|
-
argumentIndexes: [0, 1],
|
|
43
|
-
supportedTypes: new Set(typedArrayNames)
|
|
44
|
-
}],
|
|
45
|
-
["toSpliced", {
|
|
46
|
-
argumentIndexes: [0],
|
|
47
|
-
supportedTypes: new Set(["Array"])
|
|
48
|
-
}],
|
|
49
|
-
["with", {
|
|
50
|
-
argumentIndexes: [0],
|
|
51
|
-
supportedTypes: new Set(["Array", ...typedArrayNames])
|
|
52
|
-
}]
|
|
53
|
-
]);
|
|
54
|
-
function getNegativeIndexLengthNode(node, target, sourceFile) {
|
|
55
|
-
const unwrapped = unwrapParenthesizedNode(node);
|
|
56
|
-
if (!ts$1.isBinaryExpression(unwrapped) || unwrapped.operatorToken.kind !== ts$1.SyntaxKind.MinusToken) return;
|
|
57
|
-
const right = unwrapParenthesizedNode(unwrapped.right);
|
|
58
|
-
if (!isPositiveNumericLiteral(right)) return;
|
|
59
|
-
const left = unwrapParenthesizedNode(unwrapped.left);
|
|
60
|
-
if (isLengthPropertyAccess(left, target, sourceFile)) return {
|
|
61
|
-
binaryExpression: unwrapped,
|
|
62
|
-
lengthNode: left,
|
|
63
|
-
rightOperand: right
|
|
64
|
-
};
|
|
65
|
-
return getNegativeIndexLengthNode(unwrapped.left, target, sourceFile);
|
|
66
|
-
}
|
|
67
|
-
function isLengthPropertyAccess(node, target, sourceFile) {
|
|
68
|
-
return ts$1.isPropertyAccessExpression(node) && node.name.text === "length" && hasSameTokens(node.expression, target, sourceFile);
|
|
69
|
-
}
|
|
70
|
-
function isPositiveNumericLiteral(node) {
|
|
71
|
-
if (!ts$1.isNumericLiteral(node)) return false;
|
|
72
|
-
const value = Number(node.text);
|
|
73
|
-
return Number.isInteger(value) && value > 0;
|
|
74
|
-
}
|
|
75
|
-
function isSupportedType(node, typeChecker, supportedTypes) {
|
|
76
|
-
return isTypeRecursive(getConstrainedTypeAtLocation(node, typeChecker), (constituent) => {
|
|
77
|
-
if ((constituent.flags & ts$1.TypeFlags.Any) !== 0) return true;
|
|
78
|
-
if (typeChecker.isArrayType(constituent) || typeChecker.isTupleType(constituent)) return supportedTypes.has("Array");
|
|
79
|
-
const typeName = constituent.getSymbol()?.getName();
|
|
80
|
-
if (typeName) return supportedTypes.has(typeName);
|
|
81
|
-
if (constituent.isStringLiteral() || (constituent.flags & ts$1.TypeFlags.String) !== 0) return supportedTypes.has("String");
|
|
82
|
-
return false;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
function isValidPrototypePattern(node, method) {
|
|
86
|
-
if (ts$1.isArrayLiteralExpression(node) && !node.elements.length) return true;
|
|
87
|
-
if (method === "slice" && ts$1.isStringLiteral(node) && node.text === "") return true;
|
|
88
|
-
if (!ts$1.isPropertyAccessExpression(node) || node.name.text !== "prototype") return false;
|
|
89
|
-
const object = node.expression;
|
|
90
|
-
if (!ts$1.isIdentifier(object)) return false;
|
|
91
|
-
return !!methodConfigurations.get(method)?.supportedTypes.has(object.text);
|
|
92
|
-
}
|
|
93
|
-
function parseCallExpression(node) {
|
|
94
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
95
|
-
const methodName = node.expression.name.text;
|
|
96
|
-
const receiver = node.expression.expression;
|
|
97
|
-
if (methodConfigurations.has(methodName)) return {
|
|
98
|
-
argumentNodes: node.arguments,
|
|
99
|
-
method: methodName,
|
|
100
|
-
target: receiver
|
|
101
|
-
};
|
|
102
|
-
if (methodName !== "call" && methodName !== "apply") return;
|
|
103
|
-
return parsePrototypeCall(node, methodName === "apply");
|
|
104
|
-
}
|
|
105
|
-
function parsePrototypeCall(node, isApply) {
|
|
106
|
-
if (!ts$1.isPropertyAccessExpression(node.expression)) return;
|
|
107
|
-
const callee = node.expression.expression;
|
|
108
|
-
if (!ts$1.isPropertyAccessExpression(callee)) return;
|
|
109
|
-
const method = callee.name.text;
|
|
110
|
-
if (!methodConfigurations.has(method)) return;
|
|
111
|
-
const prototypeObject = callee.expression;
|
|
112
|
-
if (!isValidPrototypePattern(prototypeObject, method)) return;
|
|
113
|
-
const [targetArgument, ...restArguments] = node.arguments;
|
|
114
|
-
if (!targetArgument) return;
|
|
115
|
-
if (isApply) {
|
|
116
|
-
const arrayArgument = restArguments[0];
|
|
117
|
-
if (!arrayArgument || !ts$1.isArrayLiteralExpression(arrayArgument)) return;
|
|
118
|
-
return {
|
|
119
|
-
argumentNodes: arrayArgument.elements.filter((element) => !ts$1.isSpreadElement(element)),
|
|
120
|
-
method,
|
|
121
|
-
target: targetArgument
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
argumentNodes: restArguments,
|
|
126
|
-
method,
|
|
127
|
-
target: targetArgument
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
var negativeIndexLengthMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
131
|
-
about: {
|
|
132
|
-
description: "Prefer negative index over `.length - index` for `at`, `slice`, `splice`, and similar methods.",
|
|
133
|
-
id: "negativeIndexLengthMethods",
|
|
134
|
-
presets: ["stylisticStrict"]
|
|
135
|
-
},
|
|
136
|
-
messages: { preferNegativeIndex: {
|
|
137
|
-
primary: "Prefer using a negative index over `.length - index` for `{{ method }}`.",
|
|
138
|
-
secondary: ["Negative indices are more concise and express the intent of accessing from the end more clearly.", "Methods like `.at()`, `.slice()`, and `.splice()` support negative indices natively."],
|
|
139
|
-
suggestions: ["Use a negative index instead of subtracting from `.length`."]
|
|
140
|
-
} },
|
|
141
|
-
setup(context) {
|
|
142
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
143
|
-
const parsed = parseCallExpression(node);
|
|
144
|
-
if (!parsed) return;
|
|
145
|
-
const { argumentNodes, method, target } = parsed;
|
|
146
|
-
const methodConfiguration = methodConfigurations.get(method);
|
|
147
|
-
if (!methodConfiguration) return;
|
|
148
|
-
if (!isSupportedType(target, typeChecker, methodConfiguration.supportedTypes)) return;
|
|
149
|
-
const fixableArguments = [];
|
|
150
|
-
for (const index of methodConfiguration.argumentIndexes) {
|
|
151
|
-
const argument = argumentNodes[index];
|
|
152
|
-
if (!argument) continue;
|
|
153
|
-
const info = getNegativeIndexLengthNode(argument, target, sourceFile);
|
|
154
|
-
if (info) fixableArguments.push({
|
|
155
|
-
argument,
|
|
156
|
-
info
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
if (!fixableArguments.length) return;
|
|
160
|
-
context.report({
|
|
161
|
-
data: { method },
|
|
162
|
-
fix: fixableArguments.map(({ info }) => {
|
|
163
|
-
return {
|
|
164
|
-
range: {
|
|
165
|
-
begin: info.binaryExpression.getStart(sourceFile),
|
|
166
|
-
end: info.binaryExpression.getEnd()
|
|
167
|
-
},
|
|
168
|
-
text: `-${info.rightOperand.getText(sourceFile)}`
|
|
169
|
-
};
|
|
170
|
-
}),
|
|
171
|
-
message: "preferNegativeIndex",
|
|
172
|
-
range: getTSNodeRange(node, sourceFile)
|
|
173
|
-
});
|
|
174
|
-
} } };
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
//#endregion
|
|
178
|
-
export { negativeIndexLengthMethods_default as default };
|
|
179
|
-
|
|
180
|
-
//# sourceMappingURL=negativeIndexLengthMethods.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports comparisons with -0 that may not behave as expected.";
|
|
3
|
-
readonly id: "negativeZeroComparisons";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unexpectedNegativeZeroComparison", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=negativeZeroComparisons.d.ts.map
|