@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,97 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
import { z } from "zod/v4";
|
|
5
|
-
//#region src/rules/irregularWhitespaces.ts
|
|
6
|
-
function findIrregularWhitespaces(text) {
|
|
7
|
-
const irregularWhitespacePattern = /[\f\v\x85\ufeff\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000\u2028\u2029]/gu;
|
|
8
|
-
const matches = [];
|
|
9
|
-
let match;
|
|
10
|
-
while ((match = irregularWhitespacePattern.exec(text)) !== null) matches.push({
|
|
11
|
-
index: match.index,
|
|
12
|
-
length: match[0].length
|
|
13
|
-
});
|
|
14
|
-
return matches;
|
|
15
|
-
}
|
|
16
|
-
function isInRange(position, start, end) {
|
|
17
|
-
return position >= start && position < end;
|
|
18
|
-
}
|
|
19
|
-
var irregularWhitespaces_default = ruleCreator.createRule(typescriptLanguage, {
|
|
20
|
-
about: {
|
|
21
|
-
description: "Reports irregular whitespace characters that can cause issues with code parsing and display.",
|
|
22
|
-
id: "irregularWhitespaces",
|
|
23
|
-
presets: ["logical"]
|
|
24
|
-
},
|
|
25
|
-
messages: { irregularWhitespace: {
|
|
26
|
-
primary: "Irregular whitespace characters can cause unexpected behavior and display issues.",
|
|
27
|
-
secondary: [
|
|
28
|
-
"Irregular whitespace includes characters like non-breaking spaces (\\u00A0), zero-width spaces (\\u200B), and various Unicode space characters.",
|
|
29
|
-
"These characters are often invisible or look like regular spaces, but may be interpreted differently by tools and parsers.",
|
|
30
|
-
"They can be accidentally introduced through copy-paste from external sources."
|
|
31
|
-
],
|
|
32
|
-
suggestions: ["Replace irregular whitespace with regular spaces or tabs.", "Remove the whitespace if it is unnecessary."]
|
|
33
|
-
} },
|
|
34
|
-
options: {
|
|
35
|
-
skipComments: z.boolean().default(false).describe("Whether to allow irregular whitespace in comments."),
|
|
36
|
-
skipJSXText: z.boolean().default(false).describe("Whether to allow irregular whitespace in JSX text content."),
|
|
37
|
-
skipRegularExpressions: z.boolean().default(false).describe("Whether to allow irregular whitespace in regular expression literals."),
|
|
38
|
-
skipTemplates: z.boolean().default(false).describe("Whether to allow irregular whitespace in template literals.")
|
|
39
|
-
},
|
|
40
|
-
setup(context) {
|
|
41
|
-
return { visitors: { SourceFile: (node, { options, sourceFile }) => {
|
|
42
|
-
const text = sourceFile.getFullText();
|
|
43
|
-
const allMatches = findIrregularWhitespaces(text);
|
|
44
|
-
if (!allMatches.length) return;
|
|
45
|
-
const excludedRanges = [];
|
|
46
|
-
function collectExcludedRanges(astNode) {
|
|
47
|
-
if (astNode.kind === ts$1.SyntaxKind.StringLiteral) excludedRanges.push({
|
|
48
|
-
end: astNode.getEnd(),
|
|
49
|
-
start: astNode.getStart(sourceFile)
|
|
50
|
-
});
|
|
51
|
-
if (options.skipRegularExpressions && astNode.kind === ts$1.SyntaxKind.RegularExpressionLiteral) excludedRanges.push({
|
|
52
|
-
end: astNode.getEnd(),
|
|
53
|
-
start: astNode.getStart(sourceFile)
|
|
54
|
-
});
|
|
55
|
-
if (options.skipTemplates && (astNode.kind === ts$1.SyntaxKind.NoSubstitutionTemplateLiteral || astNode.kind === ts$1.SyntaxKind.TemplateHead || astNode.kind === ts$1.SyntaxKind.TemplateMiddle || astNode.kind === ts$1.SyntaxKind.TemplateTail)) excludedRanges.push({
|
|
56
|
-
end: astNode.getEnd(),
|
|
57
|
-
start: astNode.getStart(sourceFile)
|
|
58
|
-
});
|
|
59
|
-
if (options.skipJSXText && astNode.kind === ts$1.SyntaxKind.JsxText) excludedRanges.push({
|
|
60
|
-
end: astNode.getEnd(),
|
|
61
|
-
start: astNode.getFullStart()
|
|
62
|
-
});
|
|
63
|
-
ts$1.forEachChild(astNode, collectExcludedRanges);
|
|
64
|
-
}
|
|
65
|
-
collectExcludedRanges(node);
|
|
66
|
-
if (options.skipComments) {
|
|
67
|
-
const commentRanges = [...ts$1.getLeadingCommentRanges(text, 0) ?? []];
|
|
68
|
-
function collectCommentRanges(astNode) {
|
|
69
|
-
const leading = ts$1.getLeadingCommentRanges(text, astNode.getFullStart());
|
|
70
|
-
if (leading) commentRanges.push(...leading);
|
|
71
|
-
const trailing = ts$1.getTrailingCommentRanges(text, astNode.getEnd());
|
|
72
|
-
if (trailing) commentRanges.push(...trailing);
|
|
73
|
-
ts$1.forEachChild(astNode, collectCommentRanges);
|
|
74
|
-
}
|
|
75
|
-
collectCommentRanges(node);
|
|
76
|
-
for (const range of commentRanges) excludedRanges.push({
|
|
77
|
-
end: range.end,
|
|
78
|
-
start: range.pos
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
for (const match of allMatches) {
|
|
82
|
-
if (excludedRanges.some((range) => isInRange(match.index, range.start, range.end))) continue;
|
|
83
|
-
context.report({
|
|
84
|
-
message: "irregularWhitespace",
|
|
85
|
-
range: {
|
|
86
|
-
begin: match.index,
|
|
87
|
-
end: match.index + match.length
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
} } };
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
//#endregion
|
|
95
|
-
export { irregularWhitespaces_default as default };
|
|
96
|
-
|
|
97
|
-
//# sourceMappingURL=irregularWhitespaces.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports comparisons with NaN, which should use Number.isNaN() instead.";
|
|
3
|
-
readonly id: "isNaNComparisons";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "useIsNaN", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=isNaNComparisons.d.ts.map
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/isNaNComparisons.ts
|
|
5
|
-
const comparisonOperators = new Set([
|
|
6
|
-
SyntaxKind.EqualsEqualsEqualsToken,
|
|
7
|
-
SyntaxKind.EqualsEqualsToken,
|
|
8
|
-
SyntaxKind.ExclamationEqualsEqualsToken,
|
|
9
|
-
SyntaxKind.ExclamationEqualsToken,
|
|
10
|
-
SyntaxKind.GreaterThanEqualsToken,
|
|
11
|
-
SyntaxKind.GreaterThanToken,
|
|
12
|
-
SyntaxKind.LessThanEqualsToken,
|
|
13
|
-
SyntaxKind.LessThanToken
|
|
14
|
-
]);
|
|
15
|
-
var isNaNComparisons_default = ruleCreator.createRule(typescriptLanguage, {
|
|
16
|
-
about: {
|
|
17
|
-
description: "Reports comparisons with NaN, which should use Number.isNaN() instead.",
|
|
18
|
-
id: "isNaNComparisons",
|
|
19
|
-
presets: ["logical", "logicalStrict"]
|
|
20
|
-
},
|
|
21
|
-
messages: { useIsNaN: {
|
|
22
|
-
primary: "Use `Number.isNaN()` instead of comparing with `NaN`.",
|
|
23
|
-
secondary: ["`NaN` is not equal to anything, including itself, so comparisons with `NaN` always return `false`."],
|
|
24
|
-
suggestions: ["Use `Number.isNaN(value)` for reliable NaN detection."]
|
|
25
|
-
} },
|
|
26
|
-
setup(context) {
|
|
27
|
-
return { visitors: { BinaryExpression: (node, { sourceFile, typeChecker }) => {
|
|
28
|
-
if (!comparisonOperators.has(node.operatorToken.kind)) return;
|
|
29
|
-
if (isNaNIdentifier(node.left, typeChecker) || isNaNIdentifier(node.right, typeChecker)) context.report({
|
|
30
|
-
message: "useIsNaN",
|
|
31
|
-
range: getTSNodeRange(node, sourceFile)
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
function isNaNIdentifier(node, typeChecker) {
|
|
35
|
-
const unwrapped = unwrapParenthesizedNode(node);
|
|
36
|
-
return unwrapped.kind === SyntaxKind.Identifier && unwrapped.text === "NaN" && isGlobalDeclarationOfName(unwrapped, "NaN", typeChecker);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
//#endregion
|
|
41
|
-
export { isNaNComparisons_default as default };
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=isNaNComparisons.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefers literal syntax over constructor function calls for primitive values.";
|
|
3
|
-
readonly id: "literalConstructorWrappers";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferLiteral", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=literalConstructorWrappers.d.ts.map
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/literalConstructorWrappers.ts
|
|
5
|
-
const literalConstructors = new Set([
|
|
6
|
-
"BigInt",
|
|
7
|
-
"Boolean",
|
|
8
|
-
"Number",
|
|
9
|
-
"String"
|
|
10
|
-
]);
|
|
11
|
-
function isBooleanLiteral(node) {
|
|
12
|
-
return node.kind === ts$1.SyntaxKind.TrueKeyword || node.kind === ts$1.SyntaxKind.FalseKeyword;
|
|
13
|
-
}
|
|
14
|
-
function isLiteralArgument(node, constructorName) {
|
|
15
|
-
switch (constructorName) {
|
|
16
|
-
case "BigInt": return isNumericLiteralForBigInt(node);
|
|
17
|
-
case "Boolean": return ts$1.isLiteralExpression(node) || isBooleanLiteral(node);
|
|
18
|
-
case "Number": return ts$1.isStringLiteral(node) && isValidNumericString(node.text);
|
|
19
|
-
case "String": return ts$1.isNumericLiteral(node) || isBooleanLiteral(node) || ts$1.isBigIntLiteral(node);
|
|
20
|
-
default: return false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function isNumericLiteralForBigInt(node) {
|
|
24
|
-
return node.kind === ts$1.SyntaxKind.NumericLiteral && /^-?\d+$/.test(node.text);
|
|
25
|
-
}
|
|
26
|
-
function isValidNumericString(value) {
|
|
27
|
-
const trimmed = value.trim();
|
|
28
|
-
if (trimmed === "") return false;
|
|
29
|
-
const number = Number(trimmed);
|
|
30
|
-
return !Number.isNaN(number) && Number.isFinite(number);
|
|
31
|
-
}
|
|
32
|
-
var literalConstructorWrappers_default = ruleCreator.createRule(typescriptLanguage, {
|
|
33
|
-
about: {
|
|
34
|
-
description: "Prefers literal syntax over constructor function calls for primitive values.",
|
|
35
|
-
id: "literalConstructorWrappers",
|
|
36
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
37
|
-
},
|
|
38
|
-
messages: { preferLiteral: {
|
|
39
|
-
primary: "Prefer literal syntax over `{{ name }}()` for creating primitive values.",
|
|
40
|
-
secondary: ["Literal syntax like `123n` for BigInt or `!!value` for Boolean is more concise and idiomatic.", "Constructor calls can be replaced with operators or template literals."],
|
|
41
|
-
suggestions: ["Use literal syntax instead of `{{ name }}()`."]
|
|
42
|
-
} },
|
|
43
|
-
setup(context) {
|
|
44
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
45
|
-
if (!ts$1.isIdentifier(node.expression)) return;
|
|
46
|
-
const name = node.expression.text;
|
|
47
|
-
if (!literalConstructors.has(name) || node.arguments.length !== 1 || !isGlobalDeclarationOfName(node.expression, name, typeChecker)) return;
|
|
48
|
-
const argument = node.arguments[0];
|
|
49
|
-
if (!isLiteralArgument(argument, name)) return;
|
|
50
|
-
context.report({
|
|
51
|
-
data: { name },
|
|
52
|
-
message: "preferLiteral",
|
|
53
|
-
range: {
|
|
54
|
-
begin: node.getStart(sourceFile),
|
|
55
|
-
end: node.expression.getEnd()
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
} } };
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
//#endregion
|
|
62
|
-
export { literalConstructorWrappers_default as default };
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=literalConstructorWrappers.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer modern Math methods over legacy patterns.";
|
|
3
|
-
readonly id: "mathMethods";
|
|
4
|
-
readonly presets: readonly ["stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferModernMath", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=mathMethods.d.ts.map
|
package/lib/rules/mathMethods.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { skipParentheses } from "./utils/skipParentheses.js";
|
|
3
|
-
import { getTSNodeRange, hasSameTokens, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import { SyntaxKind } from "typescript";
|
|
5
|
-
//#region src/rules/mathMethods.ts
|
|
6
|
-
function checkLogDivideConstant(node, typeChecker, constantName, replacementMethod) {
|
|
7
|
-
if (node.operatorToken.kind !== SyntaxKind.SlashToken) return;
|
|
8
|
-
const left = skipParentheses(node.left);
|
|
9
|
-
const right = skipParentheses(node.right);
|
|
10
|
-
if (getMathMethodArgument(left, "log", typeChecker) && isMathProperty(right, constantName, typeChecker)) return {
|
|
11
|
-
description: `Math.log(…) / Math.${constantName}`,
|
|
12
|
-
replacement: `Math.${replacementMethod}(…)`
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function checkLogTimesConstant(node, typeChecker, constantName, replacementMethod) {
|
|
16
|
-
if (node.operatorToken.kind !== SyntaxKind.AsteriskToken) return;
|
|
17
|
-
const left = skipParentheses(node.left);
|
|
18
|
-
const right = skipParentheses(node.right);
|
|
19
|
-
if (getMathMethodArgument(left, "log", typeChecker) && isMathProperty(right, constantName, typeChecker)) return {
|
|
20
|
-
description: `Math.log(…) * Math.${constantName}`,
|
|
21
|
-
replacement: `Math.${replacementMethod}(…)`
|
|
22
|
-
};
|
|
23
|
-
if (isMathProperty(left, constantName, typeChecker) && getMathMethodArgument(right, "log", typeChecker)) return {
|
|
24
|
-
description: `Math.${constantName} * Math.log(…)`,
|
|
25
|
-
replacement: `Math.${replacementMethod}(…)`
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function flattenPlusExpression(node) {
|
|
29
|
-
const unwrapped = skipParentheses(node);
|
|
30
|
-
if (unwrapped.kind === SyntaxKind.BinaryExpression && unwrapped.operatorToken.kind === SyntaxKind.PlusToken) return [...flattenPlusExpression(unwrapped.left), ...flattenPlusExpression(unwrapped.right)];
|
|
31
|
-
return [unwrapped];
|
|
32
|
-
}
|
|
33
|
-
function getMathMethodArgument(node, methodName, typeChecker) {
|
|
34
|
-
if (node.kind !== SyntaxKind.CallExpression || node.questionDotToken || node.arguments.length !== 1) return false;
|
|
35
|
-
const argument = node.arguments[0];
|
|
36
|
-
if (argument.kind === SyntaxKind.SpreadElement || !isMathProperty(node.expression, methodName, typeChecker)) return;
|
|
37
|
-
return argument;
|
|
38
|
-
}
|
|
39
|
-
function isMathProperty(node, propertyName, typeChecker) {
|
|
40
|
-
return node.kind === SyntaxKind.PropertyAccessExpression && !node.questionDotToken && node.name.kind === SyntaxKind.Identifier && node.name.text === propertyName && node.expression.kind === SyntaxKind.Identifier && isGlobalDeclarationOfName(node.expression, "Math", typeChecker);
|
|
41
|
-
}
|
|
42
|
-
function isPowerTwoExpression(node, sourceFile) {
|
|
43
|
-
const unwrapped = skipParentheses(node);
|
|
44
|
-
if (unwrapped.kind !== SyntaxKind.BinaryExpression) return false;
|
|
45
|
-
if (unwrapped.operatorToken.kind === SyntaxKind.AsteriskToken) return hasSameTokens(unwrapped.left, unwrapped.right, sourceFile);
|
|
46
|
-
if (unwrapped.operatorToken.kind === SyntaxKind.AsteriskAsteriskToken) {
|
|
47
|
-
const right = skipParentheses(unwrapped.right);
|
|
48
|
-
return right.kind === SyntaxKind.NumericLiteral && right.text === "2";
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
var mathMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
53
|
-
about: {
|
|
54
|
-
description: "Prefer modern Math methods over legacy patterns.",
|
|
55
|
-
id: "mathMethods",
|
|
56
|
-
presets: ["stylisticStrict"]
|
|
57
|
-
},
|
|
58
|
-
messages: { preferModernMath: {
|
|
59
|
-
primary: "Prefer `{{ replacement }}` over `{{ description }}`.",
|
|
60
|
-
secondary: ["Modern Math methods are clearer and more explicit about their purpose.", "These methods have been available since ES2015 and are well-supported in all modern environments."],
|
|
61
|
-
suggestions: ["Replace the legacy pattern with the modern Math method."]
|
|
62
|
-
} },
|
|
63
|
-
setup(context) {
|
|
64
|
-
return { visitors: {
|
|
65
|
-
BinaryExpression: (node, { sourceFile, typeChecker }) => {
|
|
66
|
-
for (const { constantName, replacementMethod } of [{
|
|
67
|
-
constantName: "LOG10E",
|
|
68
|
-
replacementMethod: "log10"
|
|
69
|
-
}, {
|
|
70
|
-
constantName: "LOG2E",
|
|
71
|
-
replacementMethod: "log2"
|
|
72
|
-
}]) {
|
|
73
|
-
const match = checkLogTimesConstant(node, typeChecker, constantName, replacementMethod);
|
|
74
|
-
if (match) {
|
|
75
|
-
context.report({
|
|
76
|
-
data: {
|
|
77
|
-
description: match.description,
|
|
78
|
-
replacement: match.replacement
|
|
79
|
-
},
|
|
80
|
-
message: "preferModernMath",
|
|
81
|
-
range: getTSNodeRange(node, sourceFile)
|
|
82
|
-
});
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
for (const { constantName, replacementMethod } of [{
|
|
87
|
-
constantName: "LN10",
|
|
88
|
-
replacementMethod: "log10"
|
|
89
|
-
}, {
|
|
90
|
-
constantName: "LN2",
|
|
91
|
-
replacementMethod: "log2"
|
|
92
|
-
}]) {
|
|
93
|
-
const match = checkLogDivideConstant(node, typeChecker, constantName, replacementMethod);
|
|
94
|
-
if (match) {
|
|
95
|
-
context.report({
|
|
96
|
-
data: {
|
|
97
|
-
description: match.description,
|
|
98
|
-
replacement: match.replacement
|
|
99
|
-
},
|
|
100
|
-
message: "preferModernMath",
|
|
101
|
-
range: getTSNodeRange(node, sourceFile)
|
|
102
|
-
});
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
108
|
-
const argument = getMathMethodArgument(node, "sqrt", typeChecker);
|
|
109
|
-
if (!argument) return;
|
|
110
|
-
const expressions = flattenPlusExpression(argument);
|
|
111
|
-
if (!expressions.every((expr) => isPowerTwoExpression(expr, sourceFile))) return;
|
|
112
|
-
const replacementMethod = expressions.length === 1 ? "abs" : "hypot";
|
|
113
|
-
context.report({
|
|
114
|
-
data: {
|
|
115
|
-
description: "Math.sqrt(…)",
|
|
116
|
-
replacement: `Math.${replacementMethod}(…)`
|
|
117
|
-
},
|
|
118
|
-
message: "preferModernMath",
|
|
119
|
-
range: getTSNodeRange(node, sourceFile)
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
} };
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
//#endregion
|
|
126
|
-
export { mathMethods_default as default };
|
|
127
|
-
|
|
128
|
-
//# sourceMappingURL=mathMethods.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the void operator on expressions that are already void or undefined.";
|
|
3
|
-
readonly id: "meaninglessVoidOperators";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "meaninglessVoid", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=meaninglessVoidOperators.d.ts.map
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import ts from "typescript";
|
|
5
|
-
import * as tsutils from "ts-api-utils";
|
|
6
|
-
//#region src/rules/meaninglessVoidOperators.ts
|
|
7
|
-
function isVoidOrUndefinedType(type) {
|
|
8
|
-
return tsutils.isTypeFlagSet(type, ts.TypeFlags.Void | ts.TypeFlags.Undefined);
|
|
9
|
-
}
|
|
10
|
-
var meaninglessVoidOperators_default = ruleCreator.createRule(typescriptLanguage, {
|
|
11
|
-
about: {
|
|
12
|
-
description: "Reports using the void operator on expressions that are already void or undefined.",
|
|
13
|
-
id: "meaninglessVoidOperators",
|
|
14
|
-
presets: ["logical", "logicalStrict"]
|
|
15
|
-
},
|
|
16
|
-
messages: { meaninglessVoid: {
|
|
17
|
-
primary: "Using the `void` operator on a value of type `{{ type }}` does nothing.",
|
|
18
|
-
secondary: ["The `void` operator is meant to discard a return value and produce `undefined`.", "Applying `void` to a value that is already `void` or `undefined` has no effect."],
|
|
19
|
-
suggestions: ["Remove the `void` operator.", "If you need to explicitly return `undefined`, use the value directly."]
|
|
20
|
-
} },
|
|
21
|
-
setup(context) {
|
|
22
|
-
return { visitors: { VoidExpression: (node, { sourceFile, typeChecker }) => {
|
|
23
|
-
const argumentType = getConstrainedTypeAtLocation(node.expression, typeChecker);
|
|
24
|
-
if (!tsutils.unionConstituents(argumentType).every(isVoidOrUndefinedType)) return;
|
|
25
|
-
context.report({
|
|
26
|
-
data: { type: typeChecker.typeToString(argumentType) },
|
|
27
|
-
message: "meaninglessVoid",
|
|
28
|
-
range: {
|
|
29
|
-
begin: node.getStart(sourceFile),
|
|
30
|
-
end: node.getEnd()
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
} } };
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
//#endregion
|
|
37
|
-
export { meaninglessVoidOperators_default as default };
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=meaninglessVoidOperators.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Require expressions of type void to appear in statement position.";
|
|
3
|
-
readonly id: "misleadingVoidExpressions";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "voidExpressionArrow" | "voidExpressionReturn" | "voidExpressionValue", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=misleadingVoidExpressions.d.ts.map
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getConstrainedTypeAtLocation } from "./utils/getConstrainedType.js";
|
|
3
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
4
|
-
import * as ts$1 from "typescript";
|
|
5
|
-
import * as tsutils from "ts-api-utils";
|
|
6
|
-
//#region src/rules/misleadingVoidExpressions.ts
|
|
7
|
-
function getParentFunction(node) {
|
|
8
|
-
let current = node.parent;
|
|
9
|
-
while (current) {
|
|
10
|
-
if (ts$1.isFunctionDeclaration(current) || ts$1.isFunctionExpression(current) || ts$1.isArrowFunction(current) || ts$1.isMethodDeclaration(current)) return current;
|
|
11
|
-
current = current.parent;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
function isInValidPosition(node) {
|
|
15
|
-
if (ts$1.isExpressionStatement(node.parent)) return { valid: true };
|
|
16
|
-
if (ts$1.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === ts$1.SyntaxKind.CommaToken) {
|
|
17
|
-
if (node.parent.right === node) return isInValidPosition(node.parent);
|
|
18
|
-
return { valid: true };
|
|
19
|
-
}
|
|
20
|
-
if (ts$1.isParenthesizedExpression(node.parent)) return isInValidPosition(node.parent);
|
|
21
|
-
if (ts$1.isConditionalExpression(node.parent) && (node.parent.whenTrue === node || node.parent.whenFalse === node)) return isInValidPosition(node.parent);
|
|
22
|
-
if (ts$1.isBinaryExpression(node.parent) && (node.parent.operatorToken.kind === ts$1.SyntaxKind.AmpersandAmpersandToken || node.parent.operatorToken.kind === ts$1.SyntaxKind.BarBarToken || node.parent.operatorToken.kind === ts$1.SyntaxKind.QuestionQuestionToken) && node.parent.right === node) return isInValidPosition(node.parent);
|
|
23
|
-
if (ts$1.isVoidExpression(node.parent)) return { valid: true };
|
|
24
|
-
if (ts$1.isArrowFunction(node.parent) && node.parent.body === node) return {
|
|
25
|
-
invalidAncestor: node.parent,
|
|
26
|
-
valid: false
|
|
27
|
-
};
|
|
28
|
-
if (ts$1.isReturnStatement(node.parent)) return {
|
|
29
|
-
invalidAncestor: node.parent,
|
|
30
|
-
valid: false
|
|
31
|
-
};
|
|
32
|
-
return {
|
|
33
|
-
invalidAncestor: node,
|
|
34
|
-
valid: false
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function isVoidLike(type) {
|
|
38
|
-
return tsutils.isTypeFlagSet(type, ts$1.TypeFlags.VoidLike);
|
|
39
|
-
}
|
|
40
|
-
var misleadingVoidExpressions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
41
|
-
about: {
|
|
42
|
-
description: "Require expressions of type void to appear in statement position.",
|
|
43
|
-
id: "misleadingVoidExpressions",
|
|
44
|
-
presets: ["logical", "logicalStrict"]
|
|
45
|
-
},
|
|
46
|
-
messages: {
|
|
47
|
-
voidExpressionArrow: {
|
|
48
|
-
primary: "Returning a void expression from an arrow function shorthand is misleading.",
|
|
49
|
-
secondary: ["Arrow function shorthand returns a value, but void expressions are meant to be ignored.", "This can confuse readers who expect a meaningful return value."],
|
|
50
|
-
suggestions: ["Add braces to the arrow function to make the void expression a statement."]
|
|
51
|
-
},
|
|
52
|
-
voidExpressionReturn: {
|
|
53
|
-
primary: "Returning a void expression from a function is misleading.",
|
|
54
|
-
secondary: ["Return statements imply a value is being returned, but void expressions have no meaningful value.", "This can confuse readers about the function's intent."],
|
|
55
|
-
suggestions: ["Move the void expression before the return statement.", "Remove the return keyword if this is the last statement."]
|
|
56
|
-
},
|
|
57
|
-
voidExpressionValue: {
|
|
58
|
-
primary: "Void expressions should not be used as values.",
|
|
59
|
-
secondary: ["A `void` expression evaluates to `undefined` but its intent is to be ignored.", "Using void expressions as values can lead to confusing code and potential bugs."],
|
|
60
|
-
suggestions: ["Move the void expression to its own statement.", "Wrap with `void` operator to indicate the value is intentionally ignored."]
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
setup(context) {
|
|
64
|
-
function checkVoidExpression(node, { sourceFile, typeChecker }) {
|
|
65
|
-
if (!isVoidLike(getConstrainedTypeAtLocation(node, typeChecker))) return;
|
|
66
|
-
const positionResult = isInValidPosition(node);
|
|
67
|
-
if (positionResult.valid) return;
|
|
68
|
-
const { invalidAncestor } = positionResult;
|
|
69
|
-
if (ts$1.isArrowFunction(invalidAncestor)) {
|
|
70
|
-
const arrowBodyText = sourceFile.text.slice(invalidAncestor.body.getStart(sourceFile), invalidAncestor.body.getEnd());
|
|
71
|
-
const nodeText = sourceFile.text.slice(node.getStart(sourceFile), node.getEnd());
|
|
72
|
-
context.report({
|
|
73
|
-
message: "voidExpressionArrow",
|
|
74
|
-
range: getTSNodeRange(node, sourceFile),
|
|
75
|
-
suggestions: [{
|
|
76
|
-
id: "addBraces",
|
|
77
|
-
range: getTSNodeRange(invalidAncestor.body, sourceFile),
|
|
78
|
-
text: `{ ${arrowBodyText}; }`
|
|
79
|
-
}, {
|
|
80
|
-
id: "wrapWithVoid",
|
|
81
|
-
range: getTSNodeRange(node, sourceFile),
|
|
82
|
-
text: `void ${nodeText}`
|
|
83
|
-
}]
|
|
84
|
-
});
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const nodeText = sourceFile.text.slice(node.getStart(sourceFile), node.getEnd());
|
|
88
|
-
const suggestionBase = {
|
|
89
|
-
id: "wrapWithVoid",
|
|
90
|
-
range: getTSNodeRange(node, sourceFile),
|
|
91
|
-
text: `void ${nodeText}`
|
|
92
|
-
};
|
|
93
|
-
if (!ts$1.isReturnStatement(invalidAncestor)) {
|
|
94
|
-
context.report({
|
|
95
|
-
message: "voidExpressionValue",
|
|
96
|
-
range: getTSNodeRange(node, sourceFile),
|
|
97
|
-
suggestions: [suggestionBase]
|
|
98
|
-
});
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const functionNode = getParentFunction(invalidAncestor);
|
|
102
|
-
const isLastStatement = functionNode && ts$1.isBlock(invalidAncestor.parent) && invalidAncestor.parent.parent === functionNode && invalidAncestor.parent.statements.at(-1) === invalidAncestor;
|
|
103
|
-
const returnValueText = invalidAncestor.expression ? sourceFile.text.slice(invalidAncestor.expression.getStart(sourceFile), invalidAncestor.expression.getEnd()) : "";
|
|
104
|
-
context.report({
|
|
105
|
-
message: "voidExpressionReturn",
|
|
106
|
-
range: getTSNodeRange(node, sourceFile),
|
|
107
|
-
suggestions: [isLastStatement ? {
|
|
108
|
-
id: "removeReturn",
|
|
109
|
-
range: getTSNodeRange(invalidAncestor, sourceFile),
|
|
110
|
-
text: `${returnValueText};`
|
|
111
|
-
} : {
|
|
112
|
-
id: "moveBeforeReturn",
|
|
113
|
-
range: getTSNodeRange(invalidAncestor, sourceFile),
|
|
114
|
-
text: `${returnValueText}; return;`
|
|
115
|
-
}, suggestionBase]
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
return { visitors: {
|
|
119
|
-
AwaitExpression: checkVoidExpression,
|
|
120
|
-
CallExpression: checkVoidExpression,
|
|
121
|
-
TaggedTemplateExpression: checkVoidExpression
|
|
122
|
-
} };
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
//#endregion
|
|
126
|
-
export { misleadingVoidExpressions_default as default };
|
|
127
|
-
|
|
128
|
-
//# sourceMappingURL=misleadingVoidExpressions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Require non-empty specifier lists in import and export statements.";
|
|
3
|
-
readonly id: "moduleSpecifierLists";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "emptyExportSpecifiers" | "emptyImportSpecifiers", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=moduleSpecifierLists.d.ts.map
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import * as ts$1 from "typescript";
|
|
4
|
-
//#region src/rules/moduleSpecifierLists.ts
|
|
5
|
-
function hasNamedBindings(node) {
|
|
6
|
-
const namedBindings = node.importClause?.namedBindings;
|
|
7
|
-
if (!namedBindings) return false;
|
|
8
|
-
return !ts$1.isNamedImports(namedBindings) || !!namedBindings.elements.length;
|
|
9
|
-
}
|
|
10
|
-
function hasNamespaceImport(node) {
|
|
11
|
-
const namedBindings = node.importClause?.namedBindings;
|
|
12
|
-
return namedBindings && ts$1.isNamespaceImport(namedBindings);
|
|
13
|
-
}
|
|
14
|
-
function isEmptyNamedImports(node) {
|
|
15
|
-
const namedBindings = node.importClause?.namedBindings;
|
|
16
|
-
return namedBindings && ts$1.isNamedImports(namedBindings) && !namedBindings.elements.length;
|
|
17
|
-
}
|
|
18
|
-
var moduleSpecifierLists_default = ruleCreator.createRule(typescriptLanguage, {
|
|
19
|
-
about: {
|
|
20
|
-
description: "Require non-empty specifier lists in import and export statements.",
|
|
21
|
-
id: "moduleSpecifierLists",
|
|
22
|
-
presets: ["logical", "logicalStrict"]
|
|
23
|
-
},
|
|
24
|
-
messages: {
|
|
25
|
-
emptyExportSpecifiers: {
|
|
26
|
-
primary: "Export statement with empty specifier list is unnecessary.",
|
|
27
|
-
secondary: ["Empty export braces serve no purpose and can be removed.", "If re-exporting from a module, ensure you specify what to export."],
|
|
28
|
-
suggestions: ["Remove the empty export statement."]
|
|
29
|
-
},
|
|
30
|
-
emptyImportSpecifiers: {
|
|
31
|
-
primary: "Import statement with empty specifier list is unnecessary.",
|
|
32
|
-
secondary: ["Empty import braces serve no purpose and can confuse readers.", "Use a side-effect import if you only need to run the module's code."],
|
|
33
|
-
suggestions: ["Remove the empty braces or convert to a side-effect import."]
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
setup(context) {
|
|
37
|
-
function createExportSuggestions(moduleSpecifier, node, sourceFile) {
|
|
38
|
-
const moduleSpecifierText = sourceFile.text.slice(moduleSpecifier.getStart(sourceFile), moduleSpecifier.getEnd());
|
|
39
|
-
return [{
|
|
40
|
-
id: "removeStatement",
|
|
41
|
-
range: getTSNodeRange(node, sourceFile),
|
|
42
|
-
text: ""
|
|
43
|
-
}, ...moduleSpecifierText ? [{
|
|
44
|
-
id: "convertToSideEffectImport",
|
|
45
|
-
range: getTSNodeRange(node, sourceFile),
|
|
46
|
-
text: `import ${moduleSpecifierText};`
|
|
47
|
-
}] : []];
|
|
48
|
-
}
|
|
49
|
-
function createImportSuggestions(importClause, node, sourceFile) {
|
|
50
|
-
const moduleSpecifier = sourceFile.text.slice(node.moduleSpecifier.getStart(sourceFile), node.moduleSpecifier.getEnd());
|
|
51
|
-
if (importClause.name) {
|
|
52
|
-
const defaultImportName = importClause.name.getText(sourceFile);
|
|
53
|
-
return [{
|
|
54
|
-
id: "removeEmptyBraces",
|
|
55
|
-
range: getTSNodeRange(node, sourceFile),
|
|
56
|
-
text: `import ${defaultImportName} from ${moduleSpecifier};`
|
|
57
|
-
}];
|
|
58
|
-
}
|
|
59
|
-
return [{
|
|
60
|
-
id: "removeStatement",
|
|
61
|
-
range: getTSNodeRange(node, sourceFile),
|
|
62
|
-
text: ""
|
|
63
|
-
}, ...importClause.phaseModifier === ts$1.SyntaxKind.TypeKeyword ? [] : [{
|
|
64
|
-
id: "convertToSideEffectImport",
|
|
65
|
-
range: getTSNodeRange(node, sourceFile),
|
|
66
|
-
text: `import ${moduleSpecifier};`
|
|
67
|
-
}]];
|
|
68
|
-
}
|
|
69
|
-
return { visitors: {
|
|
70
|
-
ExportDeclaration: (node, { sourceFile }) => {
|
|
71
|
-
if (node.moduleSpecifier === void 0 || !ts$1.isExportDeclaration(node) || !node.exportClause || !ts$1.isNamedExports(node.exportClause) || !!node.exportClause.elements.length) return;
|
|
72
|
-
context.report({
|
|
73
|
-
message: "emptyExportSpecifiers",
|
|
74
|
-
range: getTSNodeRange(node, sourceFile),
|
|
75
|
-
suggestions: createExportSuggestions(node.moduleSpecifier, node, sourceFile)
|
|
76
|
-
});
|
|
77
|
-
},
|
|
78
|
-
ImportDeclaration: (node, { sourceFile }) => {
|
|
79
|
-
if (hasNamedBindings(node) || hasNamespaceImport(node) || !isEmptyNamedImports(node) || !node.importClause) return;
|
|
80
|
-
context.report({
|
|
81
|
-
message: "emptyImportSpecifiers",
|
|
82
|
-
range: getTSNodeRange(node.importClause.namedBindings ?? node.importClause, sourceFile),
|
|
83
|
-
suggestions: createImportSuggestions(node.importClause, node, sourceFile)
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
} };
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
//#endregion
|
|
90
|
-
export { moduleSpecifierLists_default as default };
|
|
91
|
-
|
|
92
|
-
//# sourceMappingURL=moduleSpecifierLists.js.map
|