@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,82 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { skipParentheses } from "./utils/skipParentheses.js";
|
|
3
|
-
import { isArrayOrTupleTypeAtLocation } from "./utils/isArrayOrTupleTypeAtLocation.js";
|
|
4
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
5
|
-
import { SyntaxKind } from "typescript";
|
|
6
|
-
//#region src/rules/objectEntriesMethods.ts
|
|
7
|
-
function isArrowFunctionWithParams(node) {
|
|
8
|
-
return node.kind === SyntaxKind.ArrowFunction && !!node.parameters.length;
|
|
9
|
-
}
|
|
10
|
-
function isEmptyObject(node, typeChecker) {
|
|
11
|
-
const unwrapped = skipParentheses(node);
|
|
12
|
-
return isEmptyObjectLiteral(unwrapped) || isObjectCreateNull(unwrapped, typeChecker);
|
|
13
|
-
}
|
|
14
|
-
function isEmptyObjectLiteral(node) {
|
|
15
|
-
return node.kind === SyntaxKind.ObjectLiteralExpression && !node.properties.length;
|
|
16
|
-
}
|
|
17
|
-
function isObjectAssignPattern(callback, typeChecker) {
|
|
18
|
-
if (callback.parameters.length < 1) return false;
|
|
19
|
-
const firstParameter = callback.parameters[0];
|
|
20
|
-
if (firstParameter.name.kind !== SyntaxKind.Identifier) return false;
|
|
21
|
-
const accumulatorName = firstParameter.name.text;
|
|
22
|
-
const body = skipParentheses(callback.body);
|
|
23
|
-
if (!isObjectMethodCall(body, "assign", typeChecker) || body.arguments.length !== 2 || !isGlobalDeclarationOfName(body.expression.expression, "Object", typeChecker)) return false;
|
|
24
|
-
const firstArg = body.arguments[0];
|
|
25
|
-
if (firstArg.kind !== SyntaxKind.Identifier || firstArg.text !== accumulatorName) return false;
|
|
26
|
-
const secondArg = body.arguments[1];
|
|
27
|
-
if (secondArg.kind !== SyntaxKind.ObjectLiteralExpression || secondArg.properties.length !== 1) return false;
|
|
28
|
-
const property = secondArg.properties[0];
|
|
29
|
-
return property.kind === SyntaxKind.PropertyAssignment && property.name.kind === SyntaxKind.ComputedPropertyName;
|
|
30
|
-
}
|
|
31
|
-
function isObjectCreateNull(node, typeChecker) {
|
|
32
|
-
if (!isObjectMethodCall(node, "create", typeChecker) || !isGlobalDeclarationOfName(node.expression.expression, "Object", typeChecker) || node.arguments.length !== 1) return false;
|
|
33
|
-
return node.arguments[0].kind === SyntaxKind.NullKeyword;
|
|
34
|
-
}
|
|
35
|
-
function isObjectMethodCall(node, text, typeChecker) {
|
|
36
|
-
return node.kind === SyntaxKind.CallExpression && node.expression.kind === SyntaxKind.PropertyAccessExpression && node.expression.name.kind === SyntaxKind.Identifier && node.expression.name.text === text && isGlobalDeclarationOfName(node.expression.expression, "Object", typeChecker);
|
|
37
|
-
}
|
|
38
|
-
function isReduceCallWithEmptyObject(node, typeChecker) {
|
|
39
|
-
if (node.expression.kind !== SyntaxKind.PropertyAccessExpression || node.expression.name.kind !== SyntaxKind.Identifier || node.expression.name.text !== "reduce" || node.questionDotToken !== void 0 || node.arguments.length !== 2) return false;
|
|
40
|
-
const initialValue = node.arguments[1];
|
|
41
|
-
return isEmptyObject(initialValue, typeChecker) && isArrayOrTupleTypeAtLocation(node.expression.expression, typeChecker);
|
|
42
|
-
}
|
|
43
|
-
function isSpreadAccumulatorPattern(callback) {
|
|
44
|
-
if (callback.parameters.length < 1) return false;
|
|
45
|
-
const firstParam = callback.parameters[0];
|
|
46
|
-
if (firstParam?.name.kind !== SyntaxKind.Identifier) return false;
|
|
47
|
-
const accumulatorName = firstParam.name.text;
|
|
48
|
-
const body = skipParentheses(callback.body);
|
|
49
|
-
if (body.kind !== SyntaxKind.ObjectLiteralExpression || body.properties.length !== 2) return false;
|
|
50
|
-
const firstProp = body.properties[0];
|
|
51
|
-
if (firstProp.kind !== SyntaxKind.SpreadAssignment || firstProp.expression.kind !== SyntaxKind.Identifier || firstProp.expression.text !== accumulatorName) return false;
|
|
52
|
-
const secondProp = body.properties[1];
|
|
53
|
-
return secondProp.kind === SyntaxKind.PropertyAssignment && secondProp.name.kind === SyntaxKind.ComputedPropertyName;
|
|
54
|
-
}
|
|
55
|
-
var objectEntriesMethods_default = ruleCreator.createRule(typescriptLanguage, {
|
|
56
|
-
about: {
|
|
57
|
-
description: "Prefer Object.fromEntries() over reduce patterns that build objects from key-value pairs.",
|
|
58
|
-
id: "objectEntriesMethods",
|
|
59
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
60
|
-
},
|
|
61
|
-
messages: { preferFromEntries: {
|
|
62
|
-
primary: "Using reduce to build an object from key-value pairs can be replaced with Object.fromEntries().",
|
|
63
|
-
secondary: ["Object.fromEntries() is more readable and concise for converting an iterable of key-value pairs into an object.", "The reduce pattern creates unnecessary intermediate objects on each iteration."],
|
|
64
|
-
suggestions: ["Convert the array to key-value pairs with map() and use Object.fromEntries()."]
|
|
65
|
-
} },
|
|
66
|
-
setup(context) {
|
|
67
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
68
|
-
if (!isReduceCallWithEmptyObject(node, typeChecker)) return;
|
|
69
|
-
const callback = node.arguments[0];
|
|
70
|
-
if (!isArrowFunctionWithParams(callback) || callback.body.kind === SyntaxKind.Block) return;
|
|
71
|
-
if (!isObjectAssignPattern(callback, typeChecker) && !isSpreadAccumulatorPattern(callback)) return;
|
|
72
|
-
context.report({
|
|
73
|
-
message: "preferFromEntries",
|
|
74
|
-
range: getTSNodeRange(node, sourceFile)
|
|
75
|
-
});
|
|
76
|
-
} } };
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
//#endregion
|
|
80
|
-
export { objectEntriesMethods_default as default };
|
|
81
|
-
|
|
82
|
-
//# sourceMappingURL=objectEntriesMethods.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call() for checking own properties.";
|
|
3
|
-
readonly id: "objectHasOwns";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferHasOwn", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectHasOwns.d.ts.map
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, isGlobalDeclarationOfName, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/objectHasOwns.ts
|
|
5
|
-
var objectHasOwns_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call() for checking own properties.",
|
|
8
|
-
id: "objectHasOwns",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferHasOwn: {
|
|
12
|
-
primary: "`hasOwnProperty()` calls can fail on objects without `Object.prototype` or with overridden properties.",
|
|
13
|
-
secondary: [
|
|
14
|
-
"`Object.hasOwn()` is a more modern and safer way to check if an object has its own property.",
|
|
15
|
-
"It avoids issues with objects that don't inherit from `Object.prototype` or have a modified hasOwnProperty property.",
|
|
16
|
-
"`Object.hasOwn()` was introduced in ES2022 and is more concise than the hasOwnProperty alternatives."
|
|
17
|
-
],
|
|
18
|
-
suggestions: ["Use the safer, more modern `Object.hasOwn(obj, key)`.", "Use an alternative key check such as the `in` operator."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
function isObjectPrototypeHasOwnProperty(node, typeChecker) {
|
|
22
|
-
return node.kind === SyntaxKind.PropertyAccessExpression && node.name.kind === SyntaxKind.Identifier && node.name.text === "prototype" && node.expression.kind === SyntaxKind.Identifier && isGlobalDeclarationOfName(node.expression, "Object", typeChecker);
|
|
23
|
-
}
|
|
24
|
-
function isObjectLiteralHasOwnProperty(node) {
|
|
25
|
-
return node.kind === SyntaxKind.ObjectLiteralExpression && !node.properties.length;
|
|
26
|
-
}
|
|
27
|
-
function isHasOwnProperty(node, typeChecker) {
|
|
28
|
-
if (node.kind !== SyntaxKind.PropertyAccessExpression || node.name.kind !== SyntaxKind.Identifier || node.name.text !== "hasOwnProperty") return false;
|
|
29
|
-
return isObjectPrototypeHasOwnProperty(node.expression, typeChecker) || isObjectLiteralHasOwnProperty(node.expression);
|
|
30
|
-
}
|
|
31
|
-
return { visitors: { CallExpression: (node, { sourceFile, typeChecker }) => {
|
|
32
|
-
if (node.expression.kind !== SyntaxKind.PropertyAccessExpression || node.expression.name.kind !== SyntaxKind.Identifier) return;
|
|
33
|
-
if (node.expression.name.text === "call" && node.arguments.length >= 2 && isHasOwnProperty(node.expression.expression, typeChecker)) {
|
|
34
|
-
context.report({
|
|
35
|
-
message: "preferHasOwn",
|
|
36
|
-
range: getTSNodeRange(node, sourceFile)
|
|
37
|
-
});
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (node.expression.name.text === "hasOwnProperty" && node.arguments.length >= 1 && !isHasOwnProperty(node.expression, typeChecker)) context.report({
|
|
41
|
-
message: "preferHasOwn",
|
|
42
|
-
range: getTSNodeRange(node, sourceFile)
|
|
43
|
-
});
|
|
44
|
-
} } };
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { objectHasOwns_default as default };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=objectHasOwns.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports unnecessary duplicate keys that override previous values.";
|
|
3
|
-
readonly id: "objectKeyDuplicates";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "duplicateKey", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectKeyDuplicates.d.ts.map
|
|
@@ -1,63 +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/objectKeyDuplicates.ts
|
|
5
|
-
var objectKeyDuplicates_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports unnecessary duplicate keys that override previous values.",
|
|
8
|
-
id: "objectKeyDuplicates",
|
|
9
|
-
presets: ["javascript"]
|
|
10
|
-
},
|
|
11
|
-
messages: { duplicateKey: {
|
|
12
|
-
primary: "This key is made redundant by an identical key later in the object.",
|
|
13
|
-
secondary: [
|
|
14
|
-
"Duplicate object keys are legal in JavaScript, but they can lead to unexpected behavior.",
|
|
15
|
-
"When duplicate keys exist, only the last value for a given key is used.",
|
|
16
|
-
"This can cause confusion and bugs, especially when maintaining the code."
|
|
17
|
-
],
|
|
18
|
-
suggestions: ["If both values are meant to exist, change one of the keys to be different.", "If only the last value is meant to exist, remove any prior values."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { ObjectLiteralExpression(node, { sourceFile }) {
|
|
22
|
-
const seenKeys = {
|
|
23
|
-
getters: /* @__PURE__ */ new Map(),
|
|
24
|
-
setters: /* @__PURE__ */ new Map(),
|
|
25
|
-
values: /* @__PURE__ */ new Map()
|
|
26
|
-
};
|
|
27
|
-
for (const property of node.properties.toReversed()) {
|
|
28
|
-
const key = getPropertyKeyName(property);
|
|
29
|
-
if (!key) continue;
|
|
30
|
-
if (seenKeys[key.group].get(key.text)) context.report({
|
|
31
|
-
message: "duplicateKey",
|
|
32
|
-
range: getTSNodeRange(key.node, sourceFile)
|
|
33
|
-
});
|
|
34
|
-
seenKeys[key.group].set(key.text, property);
|
|
35
|
-
}
|
|
36
|
-
} } };
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
function getNameText(name) {
|
|
40
|
-
if (name.kind === SyntaxKind.Identifier || name.kind === SyntaxKind.NumericLiteral || name.kind === SyntaxKind.BigIntLiteral || name.kind === SyntaxKind.StringLiteral || name.kind === SyntaxKind.NoSubstitutionTemplateLiteral) return name.text;
|
|
41
|
-
if (name.kind === SyntaxKind.PrivateIdentifier) return `#${name.text}`;
|
|
42
|
-
}
|
|
43
|
-
function getPropertyKeyName(property) {
|
|
44
|
-
if (property.kind === SyntaxKind.ShorthandPropertyAssignment) return {
|
|
45
|
-
group: "values",
|
|
46
|
-
node: property.name,
|
|
47
|
-
text: property.name.text
|
|
48
|
-
};
|
|
49
|
-
if (property.kind === SyntaxKind.PropertyAssignment || property.kind === SyntaxKind.MethodDeclaration || property.kind === SyntaxKind.GetAccessor || property.kind === SyntaxKind.SetAccessor) {
|
|
50
|
-
const { name } = property;
|
|
51
|
-
const text = getNameText(name);
|
|
52
|
-
if (!text) return;
|
|
53
|
-
return {
|
|
54
|
-
group: property.kind === SyntaxKind.GetAccessor ? "getters" : property.kind === SyntaxKind.SetAccessor ? "setters" : "values",
|
|
55
|
-
node: name,
|
|
56
|
-
text
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//#endregion
|
|
61
|
-
export { objectKeyDuplicates_default as default };
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=objectKeyDuplicates.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using the deprecated __proto__ property to access or modify an object's prototype.";
|
|
3
|
-
readonly id: "objectProto";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noProto", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectProto.d.ts.map
|
package/lib/rules/objectProto.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/objectProto.ts
|
|
5
|
-
var objectProto_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Reports using the deprecated __proto__ property to access or modify an object's prototype.",
|
|
8
|
-
id: "objectProto",
|
|
9
|
-
presets: ["javascript"]
|
|
10
|
-
},
|
|
11
|
-
messages: { noProto: {
|
|
12
|
-
primary: "Use Object.getPrototypeOf or Object.setPrototypeOf instead of the deprecated __proto__ property.",
|
|
13
|
-
secondary: [
|
|
14
|
-
"The __proto__ property is deprecated and not part of the ECMAScript standard.",
|
|
15
|
-
"It is maintained for compatibility with older browsers but can cause performance issues and unexpected behavior.",
|
|
16
|
-
"Direct manipulation of an object's prototype can lead to hidden classes deoptimizations in JavaScript engines."
|
|
17
|
-
],
|
|
18
|
-
suggestions: [
|
|
19
|
-
"Use Object.getPrototypeOf(obj) to read the prototype of an object.",
|
|
20
|
-
"Use Object.setPrototypeOf(obj, proto) to set the prototype of an object.",
|
|
21
|
-
"Use Object.create(proto) when creating new objects with a specific prototype."
|
|
22
|
-
]
|
|
23
|
-
} },
|
|
24
|
-
setup(context) {
|
|
25
|
-
return { visitors: {
|
|
26
|
-
ElementAccessExpression: (node, { sourceFile }) => {
|
|
27
|
-
if (node.argumentExpression.kind === SyntaxKind.StringLiteral && node.argumentExpression.text === "__proto__") context.report({
|
|
28
|
-
message: "noProto",
|
|
29
|
-
range: {
|
|
30
|
-
begin: node.argumentExpression.getStart(sourceFile),
|
|
31
|
-
end: node.argumentExpression.getEnd()
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
},
|
|
35
|
-
PropertyAccessExpression: (node, { sourceFile }) => {
|
|
36
|
-
if (node.name.kind === SyntaxKind.Identifier && node.name.text === "__proto__") context.report({
|
|
37
|
-
message: "noProto",
|
|
38
|
-
range: {
|
|
39
|
-
begin: node.name.getStart(sourceFile),
|
|
40
|
-
end: node.name.getEnd()
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
} };
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { objectProto_default as default };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=objectProto.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports direct calls to Object.prototype methods on object instances.";
|
|
3
|
-
readonly id: "objectPrototypeBuiltIns";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "prototypeBuiltIn", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectPrototypeBuiltIns.d.ts.map
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
import { SyntaxKind } from "typescript";
|
|
4
|
-
import { nullThrows } from "@flint.fyi/utils";
|
|
5
|
-
//#region src/rules/objectPrototypeBuiltIns.ts
|
|
6
|
-
const prototypeMethods = new Set([
|
|
7
|
-
"hasOwnProperty",
|
|
8
|
-
"isPrototypeOf",
|
|
9
|
-
"propertyIsEnumerable"
|
|
10
|
-
]);
|
|
11
|
-
var objectPrototypeBuiltIns_default = ruleCreator.createRule(typescriptLanguage, {
|
|
12
|
-
about: {
|
|
13
|
-
description: "Reports direct calls to Object.prototype methods on object instances.",
|
|
14
|
-
id: "objectPrototypeBuiltIns",
|
|
15
|
-
presets: ["logical", "logicalStrict"]
|
|
16
|
-
},
|
|
17
|
-
messages: { prototypeBuiltIn: {
|
|
18
|
-
primary: "Prefer the safer `Object.prototype.{{ method }}.call()` over calling `{{ method }}()` directly on objects.",
|
|
19
|
-
secondary: [
|
|
20
|
-
"Objects can have properties that shadow built-in methods from `Object.prototype` such as `{{ method }}()`.",
|
|
21
|
-
"Objects created with `Object.create(null)` do not inherit from `Object.prototype` and will not have these methods.",
|
|
22
|
-
"Calling these methods directly can fail or execute unintended code if the object has shadowing properties."
|
|
23
|
-
],
|
|
24
|
-
suggestions: ["Call the method through `Object.prototype` using `.call()`."]
|
|
25
|
-
} },
|
|
26
|
-
setup(context) {
|
|
27
|
-
return { visitors: { CallExpression: (node, { sourceFile }) => {
|
|
28
|
-
if (node.expression.kind !== SyntaxKind.PropertyAccessExpression || node.expression.name.kind !== SyntaxKind.Identifier) return;
|
|
29
|
-
const method = node.expression.name.text;
|
|
30
|
-
if (!prototypeMethods.has(method)) return;
|
|
31
|
-
const openParenthesisToken = findToken(node, SyntaxKind.OpenParenToken, sourceFile);
|
|
32
|
-
const closeParenthesisToken = findToken(node, SyntaxKind.CloseParenToken, sourceFile);
|
|
33
|
-
const objectText = sourceFile.text.slice(node.expression.expression.getStart(sourceFile), node.expression.expression.getEnd());
|
|
34
|
-
const argumentsText = sourceFile.text.slice(openParenthesisToken.getEnd(), closeParenthesisToken.getStart(sourceFile));
|
|
35
|
-
context.report({
|
|
36
|
-
data: { method },
|
|
37
|
-
message: "prototypeBuiltIn",
|
|
38
|
-
range: getTSNodeRange(node, sourceFile),
|
|
39
|
-
suggestions: [{
|
|
40
|
-
id: "usePrototypeCall",
|
|
41
|
-
range: getTSNodeRange(node, sourceFile),
|
|
42
|
-
text: `Object.prototype.${method}.call(${objectText}, ${argumentsText})`
|
|
43
|
-
}]
|
|
44
|
-
});
|
|
45
|
-
} } };
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
function findToken(node, token, sourceFile) {
|
|
49
|
-
return nullThrows(node.getChildren(sourceFile).find((child) => child.kind === token), "Token is expected to be present by the find call");
|
|
50
|
-
}
|
|
51
|
-
//#endregion
|
|
52
|
-
export { objectPrototypeBuiltIns_default as default };
|
|
53
|
-
|
|
54
|
-
//# sourceMappingURL=objectPrototypeBuiltIns.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Object property and method definitions can use shorthand syntax when the key matches the value identifier or when a function expression is assigned.";
|
|
3
|
-
readonly id: "objectShorthand";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "expectedMethodShorthand" | "expectedPropertyShorthand", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectShorthand.d.ts.map
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { getTSNodeRange, typescriptLanguage, unwrapParenthesizedNode } from "@flint.fyi/typescript-language";
|
|
3
|
-
import ts, { SyntaxKind } from "typescript";
|
|
4
|
-
//#region src/rules/objectShorthand.ts
|
|
5
|
-
function containsThisOrArguments(node) {
|
|
6
|
-
function visit(current) {
|
|
7
|
-
if (current.kind === SyntaxKind.ThisKeyword || current.kind === SyntaxKind.SuperKeyword) return true;
|
|
8
|
-
if (ts.isIdentifier(current) && current.text === "arguments") return true;
|
|
9
|
-
if (ts.isMetaProperty(current) && current.keywordToken === SyntaxKind.NewKeyword) return true;
|
|
10
|
-
if (ts.isFunctionDeclaration(current) || ts.isFunctionExpression(current) || ts.isClassDeclaration(current) || ts.isClassExpression(current)) return false;
|
|
11
|
-
return ts.forEachChild(current, visit) ?? false;
|
|
12
|
-
}
|
|
13
|
-
return visit(node);
|
|
14
|
-
}
|
|
15
|
-
function getPropertyKeyText(name) {
|
|
16
|
-
switch (name.kind) {
|
|
17
|
-
case SyntaxKind.ComputedPropertyName:
|
|
18
|
-
if (name.expression.kind === SyntaxKind.Identifier) return name.expression.text;
|
|
19
|
-
return;
|
|
20
|
-
case SyntaxKind.Identifier:
|
|
21
|
-
case SyntaxKind.NoSubstitutionTemplateLiteral:
|
|
22
|
-
case SyntaxKind.NumericLiteral:
|
|
23
|
-
case SyntaxKind.StringLiteral: return name.text;
|
|
24
|
-
default: return;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function hasAsyncModifier(modifiers) {
|
|
28
|
-
return modifiers?.some((modifier) => modifier.kind === SyntaxKind.AsyncKeyword);
|
|
29
|
-
}
|
|
30
|
-
var objectShorthand_default = ruleCreator.createRule(typescriptLanguage, {
|
|
31
|
-
about: {
|
|
32
|
-
description: "Object property and method definitions can use shorthand syntax when the key matches the value identifier or when a function expression is assigned.",
|
|
33
|
-
id: "objectShorthand",
|
|
34
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
35
|
-
},
|
|
36
|
-
messages: {
|
|
37
|
-
expectedMethodShorthand: {
|
|
38
|
-
primary: "Function expressions in object literals can use method shorthand syntax.",
|
|
39
|
-
secondary: ["Method shorthand syntax is more concise and clearly indicates the property is a method.", "Instead of `{ method: function() {} }`, use `{ method() {} }`."],
|
|
40
|
-
suggestions: ["Use method shorthand syntax."]
|
|
41
|
-
},
|
|
42
|
-
expectedPropertyShorthand: {
|
|
43
|
-
primary: "Object properties where the key matches the value identifier can use shorthand syntax.",
|
|
44
|
-
secondary: ["Property shorthand syntax reduces redundancy when the property name matches the variable name.", "Instead of `{ x: x }`, use `{ x }`."],
|
|
45
|
-
suggestions: ["Use property shorthand syntax."]
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
setup(context) {
|
|
49
|
-
return { visitors: { PropertyAssignment: (node, { sourceFile }) => {
|
|
50
|
-
const keyText = getPropertyKeyText(node.name);
|
|
51
|
-
if (keyText === void 0) return;
|
|
52
|
-
const initializer = unwrapParenthesizedNode(node.initializer);
|
|
53
|
-
switch (initializer.kind) {
|
|
54
|
-
case SyntaxKind.ArrowFunction:
|
|
55
|
-
if (initializer.body.kind === SyntaxKind.Block && !hasAsyncModifier(initializer.modifiers) && !containsThisOrArguments(initializer.body)) context.report({
|
|
56
|
-
message: "expectedMethodShorthand",
|
|
57
|
-
range: getTSNodeRange(node, sourceFile)
|
|
58
|
-
});
|
|
59
|
-
return;
|
|
60
|
-
case SyntaxKind.FunctionExpression:
|
|
61
|
-
if (!initializer.name) context.report({
|
|
62
|
-
message: "expectedMethodShorthand",
|
|
63
|
-
range: getTSNodeRange(node, sourceFile)
|
|
64
|
-
});
|
|
65
|
-
return;
|
|
66
|
-
case SyntaxKind.Identifier:
|
|
67
|
-
if (initializer.text !== keyText) return;
|
|
68
|
-
if (node.name.kind === SyntaxKind.StringLiteral && !isValidIdentifier(keyText)) return;
|
|
69
|
-
context.report({
|
|
70
|
-
message: "expectedPropertyShorthand",
|
|
71
|
-
range: getTSNodeRange(node, sourceFile)
|
|
72
|
-
});
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
} } };
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
function isValidIdentifier(name) {
|
|
79
|
-
return /^[\p{ID_Start}$_][\p{ID_Continue}$]*$/u.test(name);
|
|
80
|
-
}
|
|
81
|
-
//#endregion
|
|
82
|
-
export { objectShorthand_default as default };
|
|
83
|
-
|
|
84
|
-
//# sourceMappingURL=objectShorthand.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports empty object fallbacks in object spread expressions that have no effect.";
|
|
3
|
-
readonly id: "objectSpreadUnnecessaryFallbacks";
|
|
4
|
-
readonly presets: readonly ["logical", "logicalStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "unnecessaryFallback", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectSpreadUnnecessaryFallbacks.d.ts.map
|
|
@@ -1,43 +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/objectSpreadUnnecessaryFallbacks.ts
|
|
5
|
-
function isEmptyObjectLiteral(node) {
|
|
6
|
-
const unwrapped = unwrapParentheses(node);
|
|
7
|
-
return ts$1.isObjectLiteralExpression(unwrapped) && !unwrapped.properties.length;
|
|
8
|
-
}
|
|
9
|
-
function unwrapParentheses(node) {
|
|
10
|
-
return ts$1.isParenthesizedExpression(node) ? unwrapParentheses(node.expression) : node;
|
|
11
|
-
}
|
|
12
|
-
var objectSpreadUnnecessaryFallbacks_default = ruleCreator.createRule(typescriptLanguage, {
|
|
13
|
-
about: {
|
|
14
|
-
description: "Reports empty object fallbacks in object spread expressions that have no effect.",
|
|
15
|
-
id: "objectSpreadUnnecessaryFallbacks",
|
|
16
|
-
presets: ["logical", "logicalStrict"]
|
|
17
|
-
},
|
|
18
|
-
messages: { unnecessaryFallback: {
|
|
19
|
-
primary: "Spreading `undefined` or `null` in an object literal has no effect, making this empty object fallback unnecessary.",
|
|
20
|
-
secondary: ["When spreading `undefined` or `null` in an object literal, JavaScript skips those values without throwing an error.", "A fallback like `|| {}` or `?? {}` is not needed because the spread will work correctly without it."],
|
|
21
|
-
suggestions: ["Remove the empty object fallback and spread the value directly."]
|
|
22
|
-
} },
|
|
23
|
-
setup(context) {
|
|
24
|
-
return { visitors: { ObjectLiteralExpression: (node, { sourceFile }) => {
|
|
25
|
-
for (const property of node.properties) {
|
|
26
|
-
if (!ts$1.isSpreadAssignment(property)) continue;
|
|
27
|
-
const spreadExpression = unwrapParentheses(property.expression);
|
|
28
|
-
if (!ts$1.isBinaryExpression(spreadExpression)) continue;
|
|
29
|
-
const operatorKind = spreadExpression.operatorToken.kind;
|
|
30
|
-
if (operatorKind !== ts$1.SyntaxKind.BarBarToken && operatorKind !== ts$1.SyntaxKind.QuestionQuestionToken) continue;
|
|
31
|
-
if (!isEmptyObjectLiteral(spreadExpression.right)) continue;
|
|
32
|
-
context.report({
|
|
33
|
-
message: "unnecessaryFallback",
|
|
34
|
-
range: getTSNodeRange(spreadExpression.right, sourceFile)
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
} } };
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
//#endregion
|
|
41
|
-
export { objectSpreadUnnecessaryFallbacks_default as default };
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=objectSpreadUnnecessaryFallbacks.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Prefer interface declarations over type aliases for object types.";
|
|
3
|
-
readonly id: "objectTypeDefinitions";
|
|
4
|
-
readonly presets: readonly ["stylistic", "stylisticStrict"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "preferInterface", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=objectTypeDefinitions.d.ts.map
|
|
@@ -1,34 +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/objectTypeDefinitions.ts
|
|
5
|
-
var objectTypeDefinitions_default = ruleCreator.createRule(typescriptLanguage, {
|
|
6
|
-
about: {
|
|
7
|
-
description: "Prefer interface declarations over type aliases for object types.",
|
|
8
|
-
id: "objectTypeDefinitions",
|
|
9
|
-
presets: ["stylistic", "stylisticStrict"]
|
|
10
|
-
},
|
|
11
|
-
messages: { preferInterface: {
|
|
12
|
-
primary: "Type aliases for object types have different behavior from interfaces in some cases.",
|
|
13
|
-
secondary: [
|
|
14
|
-
"Interfaces support declaration merging and can be extended with the `extends` keyword.",
|
|
15
|
-
"Interfaces can be implemented by classes, providing clearer contracts.",
|
|
16
|
-
"Error messages from the TypeScript compiler often display the interface name directly, making them more readable."
|
|
17
|
-
],
|
|
18
|
-
suggestions: ["Use an interface declaration instead: `interface Name { ... }`."]
|
|
19
|
-
} },
|
|
20
|
-
setup(context) {
|
|
21
|
-
return { visitors: { TypeAliasDeclaration: (node, { sourceFile }) => {
|
|
22
|
-
if (node.type.kind !== SyntaxKind.TypeLiteral) return;
|
|
23
|
-
const typeKeyword = node.getChildren(sourceFile).find((child) => child.kind === SyntaxKind.TypeKeyword);
|
|
24
|
-
context.report({
|
|
25
|
-
message: "preferInterface",
|
|
26
|
-
range: typeKeyword ? getTSNodeRange(typeKeyword, sourceFile) : getTSNodeRange(node, sourceFile)
|
|
27
|
-
});
|
|
28
|
-
} } };
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
//#endregion
|
|
32
|
-
export { objectTypeDefinitions_default as default };
|
|
33
|
-
|
|
34
|
-
//# sourceMappingURL=objectTypeDefinitions.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using octal escape sequences in string literals.";
|
|
3
|
-
readonly id: "octalEscapes";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noOctalEscape", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=octalEscapes.d.ts.map
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { ruleCreator } from "./ruleCreator.js";
|
|
2
|
-
import { typescriptLanguage } from "@flint.fyi/typescript-language";
|
|
3
|
-
//#region src/rules/octalEscapes.ts
|
|
4
|
-
/**
|
|
5
|
-
* Finds the position and length of an octal escape sequence in a string.
|
|
6
|
-
* Returns undefined if no octal escape is found.
|
|
7
|
-
*/
|
|
8
|
-
function findOctalEscape(text) {
|
|
9
|
-
const content = text.slice(1, -1);
|
|
10
|
-
const match = /(?<!\\)\\0[0-7]|(?<!\\)\\[1-7][0-7]*/.exec(content);
|
|
11
|
-
if (!match) return;
|
|
12
|
-
return {
|
|
13
|
-
index: match.index + 1,
|
|
14
|
-
length: match[0].length
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
var octalEscapes_default = ruleCreator.createRule(typescriptLanguage, {
|
|
18
|
-
about: {
|
|
19
|
-
description: "Reports using octal escape sequences in string literals.",
|
|
20
|
-
id: "octalEscapes",
|
|
21
|
-
presets: ["javascript"]
|
|
22
|
-
},
|
|
23
|
-
messages: { noOctalEscape: {
|
|
24
|
-
primary: "Prefer hexadecimal or Unicode escape sequences over legacy octal escape sequences.",
|
|
25
|
-
secondary: ["Octal escape sequences (e.g., `\\01`, `\\02`, `\\377`) are a deprecated feature in JavaScript that can lead to confusion and are forbidden in strict mode and template literals.", "They are less readable than their modern alternatives and can cause portability issues."],
|
|
26
|
-
suggestions: ["Use hexadecimal escape sequences (e.g., `\\x01`) or Unicode escape sequences (e.g., `\\u0001`) instead."]
|
|
27
|
-
} },
|
|
28
|
-
setup(context) {
|
|
29
|
-
function checkNode(node, sourceFile) {
|
|
30
|
-
const octalEscape = findOctalEscape(node.getText(sourceFile));
|
|
31
|
-
if (!octalEscape) return;
|
|
32
|
-
const nodeStart = node.getStart(sourceFile);
|
|
33
|
-
context.report({
|
|
34
|
-
message: "noOctalEscape",
|
|
35
|
-
range: {
|
|
36
|
-
begin: nodeStart + octalEscape.index,
|
|
37
|
-
end: nodeStart + octalEscape.index + octalEscape.length
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return { visitors: {
|
|
42
|
-
NoSubstitutionTemplateLiteral: (node, { sourceFile }) => {
|
|
43
|
-
checkNode(node, sourceFile);
|
|
44
|
-
},
|
|
45
|
-
StringLiteral: (node, { sourceFile }) => {
|
|
46
|
-
checkNode(node, sourceFile);
|
|
47
|
-
},
|
|
48
|
-
TemplateExpression: (node, { sourceFile }) => {
|
|
49
|
-
checkNode(node.head, sourceFile);
|
|
50
|
-
for (const span of node.templateSpans) checkNode(span.literal, sourceFile);
|
|
51
|
-
}
|
|
52
|
-
} };
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
//#endregion
|
|
56
|
-
export { octalEscapes_default as default };
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=octalEscapes.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare const _default: import("@flint.fyi/core").Rule<{
|
|
2
|
-
readonly description: "Reports using legacy octal numeric literals.";
|
|
3
|
-
readonly id: "octalNumbers";
|
|
4
|
-
readonly presets: readonly ["javascript"];
|
|
5
|
-
} & {
|
|
6
|
-
readonly pluginId: string;
|
|
7
|
-
readonly url: string;
|
|
8
|
-
}, "noOctalNumber", undefined>;
|
|
9
|
-
export default _default;
|
|
10
|
-
//# sourceMappingURL=octalNumbers.d.ts.map
|