@flint.fyi/ts 0.14.6 → 0.15.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/collectReferencedFilePaths.d.ts +1 -0
- package/lib/collectReferencedFilePaths.js +3 -2
- package/lib/convertTypeScriptDiagnosticToLanguageFileDiagnostic.d.ts +14 -0
- package/lib/{formatDiagnostic.js → convertTypeScriptDiagnosticToLanguageFileDiagnostic.js} +22 -14
- package/lib/createTypeScriptFileFromProgram.d.ts +4 -1
- package/lib/createTypeScriptFileFromProgram.js +25 -30
- package/lib/createTypeScriptFileFromProjectService.d.ts +3 -6
- package/lib/createTypeScriptFileFromProjectService.js +5 -11
- package/lib/directives/parseDirectivesFromTypeScriptFile.d.ts +8 -0
- package/lib/directives/parseDirectivesFromTypeScriptFile.js +12 -4
- package/lib/directives/parseDirectivesFromTypeScriptFile.test.d.ts +1 -0
- package/lib/directives/parseDirectivesFromTypeScriptFile.test.js +1 -0
- package/lib/getFirstEnumValues.d.ts +1 -0
- package/lib/getFirstEnumValues.js +1 -0
- package/lib/getFirstEnumValues.test.d.ts +1 -0
- package/lib/getFirstEnumValues.test.js +1 -0
- package/lib/getTSNodeRange.d.ts +1 -0
- package/lib/getTSNodeRange.js +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +5 -0
- package/lib/language.d.ts +3 -2
- package/lib/language.js +7 -52
- package/lib/nodes.d.ts +1 -0
- package/lib/nodes.js +1 -0
- package/lib/normalizeRange.d.ts +1 -0
- package/lib/normalizeRange.js +1 -0
- package/lib/plugin.d.ts +79 -50
- package/lib/plugin.js +15 -0
- package/lib/prepareTypeScriptBasedLanguage.d.ts +11 -0
- package/lib/prepareTypeScriptBasedLanguage.js +59 -0
- package/lib/prepareTypeScriptFile.d.ts +9 -4
- package/lib/prepareTypeScriptFile.js +8 -2
- package/lib/rules/anyReturns.d.ts +2 -1
- package/lib/rules/anyReturns.js +22 -22
- package/lib/rules/anyReturns.test.d.ts +1 -0
- package/lib/rules/anyReturns.test.js +1 -0
- package/lib/rules/asyncPromiseExecutors.d.ts +2 -1
- package/lib/rules/asyncPromiseExecutors.js +4 -3
- package/lib/rules/asyncPromiseExecutors.test.d.ts +1 -0
- package/lib/rules/asyncPromiseExecutors.test.js +1 -0
- package/lib/rules/caseDeclarations.d.ts +3 -1
- package/lib/rules/caseDeclarations.js +7 -6
- package/lib/rules/caseDeclarations.test.d.ts +1 -0
- package/lib/rules/caseDeclarations.test.js +1 -0
- package/lib/rules/caseDuplicates.d.ts +2 -1
- package/lib/rules/caseDuplicates.js +4 -3
- package/lib/rules/caseDuplicates.test.d.ts +1 -0
- package/lib/rules/caseDuplicates.test.js +1 -0
- package/lib/rules/chainedAssignments.d.ts +2 -1
- package/lib/rules/chainedAssignments.js +3 -2
- package/lib/rules/chainedAssignments.test.d.ts +1 -0
- package/lib/rules/chainedAssignments.test.js +1 -0
- package/lib/rules/classAssignments.d.ts +2 -1
- package/lib/rules/classAssignments.js +4 -3
- package/lib/rules/classAssignments.test.d.ts +1 -0
- package/lib/rules/classAssignments.test.js +1 -0
- package/lib/rules/consecutiveNonNullAssertions.d.ts +2 -1
- package/lib/rules/consecutiveNonNullAssertions.js +1 -0
- package/lib/rules/consecutiveNonNullAssertions.test.d.ts +1 -0
- package/lib/rules/consecutiveNonNullAssertions.test.js +1 -0
- package/lib/rules/constantAssignments.d.ts +2 -1
- package/lib/rules/constantAssignments.js +4 -3
- package/lib/rules/constantAssignments.test.d.ts +1 -0
- package/lib/rules/constantAssignments.test.js +1 -0
- package/lib/rules/constructorReturns.d.ts +2 -1
- package/lib/rules/constructorReturns.js +3 -2
- package/lib/rules/constructorReturns.test.d.ts +1 -0
- package/lib/rules/constructorReturns.test.js +1 -0
- package/lib/rules/debuggerStatements.d.ts +2 -1
- package/lib/rules/debuggerStatements.js +1 -0
- package/lib/rules/debuggerStatements.test.d.ts +1 -0
- package/lib/rules/debuggerStatements.test.js +1 -0
- package/lib/rules/defaultCaseLast.d.ts +2 -1
- package/lib/rules/defaultCaseLast.js +4 -3
- package/lib/rules/defaultCaseLast.test.d.ts +1 -0
- package/lib/rules/defaultCaseLast.test.js +1 -0
- package/lib/rules/duplicateArguments.d.ts +3 -1
- package/lib/rules/duplicateArguments.js +3 -2
- package/lib/rules/duplicateArguments.test.d.ts +1 -0
- package/lib/rules/duplicateArguments.test.js +1 -0
- package/lib/rules/elseIfDuplicates.d.ts +2 -1
- package/lib/rules/elseIfDuplicates.js +6 -5
- package/lib/rules/elseIfDuplicates.test.d.ts +1 -0
- package/lib/rules/elseIfDuplicates.test.js +1 -0
- package/lib/rules/emptyBlocks.d.ts +2 -1
- package/lib/rules/emptyBlocks.js +12 -10
- package/lib/rules/emptyBlocks.test.d.ts +1 -0
- package/lib/rules/emptyBlocks.test.js +1 -0
- package/lib/rules/emptyDestructures.d.ts +3 -1
- package/lib/rules/emptyDestructures.js +3 -2
- package/lib/rules/emptyDestructures.test.d.ts +1 -0
- package/lib/rules/emptyDestructures.test.js +1 -0
- package/lib/rules/emptyStaticBlocks.d.ts +2 -1
- package/lib/rules/emptyStaticBlocks.js +5 -4
- package/lib/rules/emptyStaticBlocks.test.d.ts +1 -0
- package/lib/rules/emptyStaticBlocks.test.js +1 -0
- package/lib/rules/exceptionAssignments.d.ts +2 -1
- package/lib/rules/exceptionAssignments.js +4 -3
- package/lib/rules/exceptionAssignments.test.d.ts +1 -0
- package/lib/rules/exceptionAssignments.test.js +1 -0
- package/lib/rules/finallyStatementSafety.d.ts +7 -0
- package/lib/rules/finallyStatementSafety.js +71 -0
- package/lib/rules/finallyStatementSafety.test.d.ts +2 -0
- package/lib/rules/finallyStatementSafety.test.js +307 -0
- package/lib/rules/forDirections.d.ts +2 -1
- package/lib/rules/forDirections.js +3 -2
- package/lib/rules/forDirections.test.d.ts +1 -0
- package/lib/rules/forDirections.test.js +1 -0
- package/lib/rules/forInArrays.d.ts +2 -1
- package/lib/rules/forInArrays.js +8 -7
- package/lib/rules/forInArrays.test.d.ts +1 -0
- package/lib/rules/forInArrays.test.js +1 -0
- package/lib/rules/functionAssignments.d.ts +2 -1
- package/lib/rules/functionAssignments.js +4 -3
- package/lib/rules/functionAssignments.test.d.ts +1 -0
- package/lib/rules/functionAssignments.test.js +1 -0
- package/lib/rules/functionCurryingRedundancy.d.ts +7 -0
- package/lib/rules/functionCurryingRedundancy.js +77 -0
- package/lib/rules/functionCurryingRedundancy.test.d.ts +2 -0
- package/lib/rules/functionCurryingRedundancy.test.js +172 -0
- package/lib/rules/functionNewCalls.d.ts +3 -1
- package/lib/rules/functionNewCalls.js +7 -6
- package/lib/rules/functionNewCalls.test.d.ts +1 -0
- package/lib/rules/functionNewCalls.test.js +1 -0
- package/lib/rules/generatorFunctionYields.d.ts +3 -1
- package/lib/rules/generatorFunctionYields.js +3 -2
- package/lib/rules/generatorFunctionYields.test.d.ts +1 -0
- package/lib/rules/generatorFunctionYields.test.js +1 -0
- package/lib/rules/globalAssignments.d.ts +2 -1
- package/lib/rules/globalAssignments.js +10 -9
- package/lib/rules/globalAssignments.test.d.ts +1 -0
- package/lib/rules/globalAssignments.test.js +1 -0
- package/lib/rules/globalObjectCalls.d.ts +3 -1
- package/lib/rules/globalObjectCalls.js +5 -4
- package/lib/rules/globalObjectCalls.test.d.ts +1 -0
- package/lib/rules/globalObjectCalls.test.js +1 -0
- package/lib/rules/namespaceDeclarations.d.ts +2 -1
- package/lib/rules/namespaceDeclarations.js +7 -6
- package/lib/rules/namespaceDeclarations.test.d.ts +1 -0
- package/lib/rules/namespaceDeclarations.test.js +1 -0
- package/lib/rules/negativeZeroComparisons.d.ts +2 -1
- package/lib/rules/negativeZeroComparisons.js +8 -7
- package/lib/rules/negativeZeroComparisons.test.d.ts +1 -0
- package/lib/rules/negativeZeroComparisons.test.js +1 -0
- package/lib/rules/newExpressions.d.ts +2 -1
- package/lib/rules/newExpressions.js +3 -2
- package/lib/rules/newExpressions.test.d.ts +1 -0
- package/lib/rules/newExpressions.test.js +1 -0
- package/lib/rules/newNativeNonConstructors.d.ts +2 -1
- package/lib/rules/newNativeNonConstructors.js +6 -5
- package/lib/rules/newNativeNonConstructors.test.d.ts +1 -0
- package/lib/rules/newNativeNonConstructors.test.js +1 -0
- package/lib/rules/nonOctalDecimalEscapes.d.ts +3 -1
- package/lib/rules/nonOctalDecimalEscapes.js +4 -3
- package/lib/rules/nonOctalDecimalEscapes.test.d.ts +1 -0
- package/lib/rules/nonOctalDecimalEscapes.test.js +1 -0
- package/lib/rules/numericLiteralParsing.d.ts +2 -1
- package/lib/rules/numericLiteralParsing.js +8 -7
- package/lib/rules/numericLiteralParsing.test.d.ts +1 -0
- package/lib/rules/numericLiteralParsing.test.js +1 -0
- package/lib/rules/objectCalls.d.ts +7 -0
- package/lib/rules/objectCalls.js +47 -0
- package/lib/rules/objectCalls.test.d.ts +2 -0
- package/lib/rules/objectCalls.test.js +172 -0
- package/lib/rules/objectHasOwns.d.ts +7 -0
- package/lib/rules/objectHasOwns.js +74 -0
- package/lib/rules/objectHasOwns.test.d.ts +2 -0
- package/lib/rules/objectHasOwns.test.js +112 -0
- package/lib/rules/objectKeyDuplicates.d.ts +7 -0
- package/lib/rules/objectKeyDuplicates.js +91 -0
- package/lib/rules/objectKeyDuplicates.test.d.ts +2 -0
- package/lib/rules/objectKeyDuplicates.test.js +180 -0
- package/lib/rules/objectProto.d.ts +2 -1
- package/lib/rules/objectProto.js +5 -4
- package/lib/rules/objectProto.test.d.ts +1 -0
- package/lib/rules/objectProto.test.js +1 -0
- package/lib/rules/objectPrototypeBuiltIns.d.ts +7 -0
- package/lib/rules/objectPrototypeBuiltIns.js +65 -0
- package/lib/rules/objectPrototypeBuiltIns.test.d.ts +2 -0
- package/lib/rules/objectPrototypeBuiltIns.test.js +146 -0
- package/lib/rules/octalEscapes.d.ts +2 -1
- package/lib/rules/octalEscapes.js +13 -8
- package/lib/rules/octalEscapes.test.d.ts +1 -0
- package/lib/rules/octalEscapes.test.js +1 -0
- package/lib/rules/octalNumbers.d.ts +2 -1
- package/lib/rules/octalNumbers.js +4 -3
- package/lib/rules/octalNumbers.test.d.ts +1 -0
- package/lib/rules/octalNumbers.test.js +1 -0
- package/lib/rules/returnAssignments.d.ts +2 -1
- package/lib/rules/returnAssignments.js +7 -6
- package/lib/rules/returnAssignments.test.d.ts +1 -0
- package/lib/rules/returnAssignments.test.js +1 -0
- package/lib/rules/ruleTester.d.ts +1 -0
- package/lib/rules/ruleTester.js +6 -1
- package/lib/rules/selfAssignments.d.ts +2 -1
- package/lib/rules/selfAssignments.js +4 -3
- package/lib/rules/selfAssignments.test.d.ts +1 -0
- package/lib/rules/selfAssignments.test.js +1 -0
- package/lib/rules/selfComparisons.d.ts +2 -1
- package/lib/rules/selfComparisons.js +4 -3
- package/lib/rules/selfComparisons.test.d.ts +1 -0
- package/lib/rules/selfComparisons.test.js +1 -0
- package/lib/rules/sequences.d.ts +2 -1
- package/lib/rules/sequences.js +3 -2
- package/lib/rules/sequences.test.d.ts +1 -0
- package/lib/rules/sequences.test.js +1 -0
- package/lib/rules/shadowedRestrictedNames.d.ts +2 -1
- package/lib/rules/shadowedRestrictedNames.js +24 -23
- package/lib/rules/shadowedRestrictedNames.test.d.ts +1 -0
- package/lib/rules/shadowedRestrictedNames.test.js +1 -0
- package/lib/rules/sparseArrays.d.ts +2 -1
- package/lib/rules/sparseArrays.js +5 -4
- package/lib/rules/sparseArrays.test.d.ts +1 -0
- package/lib/rules/sparseArrays.test.js +1 -0
- package/lib/rules/symbolDescriptions.d.ts +2 -1
- package/lib/rules/symbolDescriptions.js +3 -2
- package/lib/rules/symbolDescriptions.test.d.ts +1 -0
- package/lib/rules/symbolDescriptions.test.js +1 -0
- package/lib/rules/typeofComparisons.d.ts +2 -1
- package/lib/rules/typeofComparisons.js +5 -4
- package/lib/rules/typeofComparisons.test.d.ts +1 -0
- package/lib/rules/typeofComparisons.test.js +1 -0
- package/lib/rules/unassignedVariables.d.ts +2 -1
- package/lib/rules/unassignedVariables.js +4 -3
- package/lib/rules/unassignedVariables.test.d.ts +1 -0
- package/lib/rules/unassignedVariables.test.js +1 -0
- package/lib/rules/undefinedVariables.d.ts +2 -1
- package/lib/rules/undefinedVariables.js +5 -4
- package/lib/rules/undefinedVariables.test.d.ts +1 -0
- package/lib/rules/undefinedVariables.test.js +1 -0
- package/lib/rules/unicodeBOMs.d.ts +2 -1
- package/lib/rules/unicodeBOMs.js +27 -20
- package/lib/rules/unicodeBOMs.test.d.ts +1 -0
- package/lib/rules/unicodeBOMs.test.js +1 -0
- package/lib/rules/unnecessaryBlocks.d.ts +2 -1
- package/lib/rules/unnecessaryBlocks.js +4 -3
- package/lib/rules/unnecessaryBlocks.test.d.ts +1 -0
- package/lib/rules/unnecessaryBlocks.test.js +1 -0
- package/lib/rules/unnecessaryCatches.d.ts +2 -1
- package/lib/rules/unnecessaryCatches.js +4 -3
- package/lib/rules/unnecessaryCatches.test.d.ts +1 -0
- package/lib/rules/unnecessaryCatches.test.js +1 -0
- package/lib/rules/unnecessaryConcatenation.d.ts +2 -1
- package/lib/rules/unnecessaryConcatenation.js +3 -2
- package/lib/rules/unnecessaryConcatenation.test.d.ts +1 -0
- package/lib/rules/unnecessaryConcatenation.test.js +1 -0
- package/lib/rules/unsafeNegations.d.ts +2 -1
- package/lib/rules/unsafeNegations.js +3 -2
- package/lib/rules/unsafeNegations.test.d.ts +1 -0
- package/lib/rules/unsafeNegations.test.js +1 -0
- package/lib/rules/utils/discriminateAnyType.d.ts +1 -0
- package/lib/rules/utils/discriminateAnyType.js +1 -0
- package/lib/rules/utils/getConstrainedType.d.ts +1 -0
- package/lib/rules/utils/getConstrainedType.js +1 -0
- package/lib/rules/utils/getThisExpression.d.ts +1 -0
- package/lib/rules/utils/getThisExpression.js +1 -0
- package/lib/rules/utils/isTypeRecursive.d.ts +1 -0
- package/lib/rules/utils/isTypeRecursive.js +1 -0
- package/lib/rules/utils/isUnsafeAssignment.d.ts +1 -0
- package/lib/rules/utils/isUnsafeAssignment.js +1 -0
- package/lib/rules/utils/operators.d.ts +1 -0
- package/lib/rules/utils/operators.js +1 -0
- package/lib/rules/variableDeletions.d.ts +2 -1
- package/lib/rules/variableDeletions.js +3 -2
- package/lib/rules/variableDeletions.test.d.ts +1 -0
- package/lib/rules/variableDeletions.test.js +1 -0
- package/lib/rules/voidOperator.d.ts +2 -1
- package/lib/rules/voidOperator.js +3 -2
- package/lib/rules/voidOperator.test.d.ts +1 -0
- package/lib/rules/voidOperator.test.js +1 -0
- package/lib/rules/withStatements.d.ts +7 -0
- package/lib/rules/withStatements.js +37 -0
- package/lib/rules/withStatements.test.d.ts +2 -0
- package/lib/rules/withStatements.test.js +27 -0
- package/lib/utils/declarationIncludesGlobal.d.ts +1 -0
- package/lib/utils/declarationIncludesGlobal.js +1 -0
- package/lib/utils/declarationsIncludeGlobal.d.ts +1 -0
- package/lib/utils/declarationsIncludeGlobal.js +1 -0
- package/lib/utils/getDeclarationsIfGlobal.d.ts +1 -0
- package/lib/utils/getDeclarationsIfGlobal.js +1 -0
- package/lib/utils/getModifyingReferences.d.ts +1 -0
- package/lib/utils/getModifyingReferences.js +1 -0
- package/lib/utils/hasSameTokens.d.ts +1 -0
- package/lib/utils/hasSameTokens.js +1 -0
- package/lib/utils/isFunction.d.ts +3 -0
- package/lib/utils/isFunction.js +6 -0
- package/lib/utils/isGlobalDeclaration.d.ts +1 -0
- package/lib/utils/isGlobalDeclaration.js +1 -0
- package/lib/utils/isGlobalDeclarationOfName.d.ts +1 -0
- package/lib/utils/isGlobalDeclarationOfName.js +1 -0
- package/lib/utils/isGlobalVariable.d.ts +1 -0
- package/lib/utils/isGlobalVariable.js +1 -0
- package/lib/utils/unwrapParentParenthesizedExpressions.d.ts +1 -0
- package/lib/utils/unwrapParentParenthesizedExpressions.js +1 -0
- package/lib/utils/unwrapParenthesizedExpression.d.ts +1 -0
- package/lib/utils/unwrapParenthesizedExpression.js +1 -0
- package/package.json +17 -7
- package/CHANGELOG.md +0 -91
- package/lib/formatDiagnostic.d.ts +0 -10
- package/src/collectReferencedFilePaths.ts +0 -37
- package/src/createTypeScriptFileFromProgram.ts +0 -86
- package/src/createTypeScriptFileFromProjectService.ts +0 -31
- package/src/directives/parseDirectivesFromTypeScriptFile.test.ts +0 -108
- package/src/directives/parseDirectivesFromTypeScriptFile.ts +0 -31
- package/src/formatDiagnostic.ts +0 -166
- package/src/getFirstEnumValues.test.ts +0 -51
- package/src/getFirstEnumValues.ts +0 -59
- package/src/getTSNodeRange.ts +0 -13
- package/src/index.ts +0 -7
- package/src/language.ts +0 -122
- package/src/nodes.ts +0 -146
- package/src/normalizeRange.ts +0 -25
- package/src/plugin.ts +0 -111
- package/src/prepareTypeScriptFile.ts +0 -14
- package/src/rules/anyReturns.test.ts +0 -649
- package/src/rules/anyReturns.ts +0 -263
- package/src/rules/asyncPromiseExecutors.test.ts +0 -72
- package/src/rules/asyncPromiseExecutors.ts +0 -61
- package/src/rules/caseDeclarations.test.ts +0 -228
- package/src/rules/caseDeclarations.ts +0 -70
- package/src/rules/caseDuplicates.test.ts +0 -308
- package/src/rules/caseDuplicates.ts +0 -57
- package/src/rules/chainedAssignments.test.ts +0 -263
- package/src/rules/chainedAssignments.ts +0 -58
- package/src/rules/classAssignments.test.ts +0 -157
- package/src/rules/classAssignments.ts +0 -50
- package/src/rules/consecutiveNonNullAssertions.test.ts +0 -33
- package/src/rules/consecutiveNonNullAssertions.ts +0 -46
- package/src/rules/constantAssignments.test.ts +0 -222
- package/src/rules/constantAssignments.ts +0 -78
- package/src/rules/constructorReturns.test.ts +0 -97
- package/src/rules/constructorReturns.ts +0 -59
- package/src/rules/debuggerStatements.test.ts +0 -81
- package/src/rules/debuggerStatements.ts +0 -45
- package/src/rules/defaultCaseLast.test.ts +0 -196
- package/src/rules/defaultCaseLast.ts +0 -54
- package/src/rules/duplicateArguments.test.ts +0 -140
- package/src/rules/duplicateArguments.ts +0 -58
- package/src/rules/elseIfDuplicates.test.ts +0 -177
- package/src/rules/elseIfDuplicates.ts +0 -69
- package/src/rules/emptyBlocks.test.ts +0 -136
- package/src/rules/emptyBlocks.ts +0 -73
- package/src/rules/emptyDestructures.test.ts +0 -187
- package/src/rules/emptyDestructures.ts +0 -48
- package/src/rules/emptyStaticBlocks.test.ts +0 -168
- package/src/rules/emptyStaticBlocks.ts +0 -60
- package/src/rules/exceptionAssignments.test.ts +0 -265
- package/src/rules/exceptionAssignments.ts +0 -77
- package/src/rules/forDirections.test.ts +0 -125
- package/src/rules/forDirections.ts +0 -174
- package/src/rules/forInArrays.test.ts +0 -25
- package/src/rules/forInArrays.ts +0 -70
- package/src/rules/functionAssignments.test.ts +0 -210
- package/src/rules/functionAssignments.ts +0 -51
- package/src/rules/functionNewCalls.test.ts +0 -116
- package/src/rules/functionNewCalls.ts +0 -75
- package/src/rules/generatorFunctionYields.test.ts +0 -152
- package/src/rules/generatorFunctionYields.ts +0 -71
- package/src/rules/globalAssignments.test.ts +0 -216
- package/src/rules/globalAssignments.ts +0 -67
- package/src/rules/globalObjectCalls.test.ts +0 -94
- package/src/rules/globalObjectCalls.ts +0 -52
- package/src/rules/namespaceDeclarations.test.ts +0 -41
- package/src/rules/namespaceDeclarations.ts +0 -74
- package/src/rules/negativeZeroComparisons.test.ts +0 -210
- package/src/rules/negativeZeroComparisons.ts +0 -87
- package/src/rules/newExpressions.test.ts +0 -80
- package/src/rules/newExpressions.ts +0 -67
- package/src/rules/newNativeNonConstructors.test.ts +0 -95
- package/src/rules/newNativeNonConstructors.ts +0 -59
- package/src/rules/nonOctalDecimalEscapes.test.ts +0 -70
- package/src/rules/nonOctalDecimalEscapes.ts +0 -70
- package/src/rules/numericLiteralParsing.test.ts +0 -100
- package/src/rules/numericLiteralParsing.ts +0 -116
- package/src/rules/objectProto.test.ts +0 -97
- package/src/rules/objectProto.ts +0 -62
- package/src/rules/octalEscapes.test.ts +0 -214
- package/src/rules/octalEscapes.ts +0 -85
- package/src/rules/octalNumbers.test.ts +0 -246
- package/src/rules/octalNumbers.ts +0 -75
- package/src/rules/returnAssignments.test.ts +0 -186
- package/src/rules/returnAssignments.ts +0 -57
- package/src/rules/ruleTester.ts +0 -4
- package/src/rules/selfAssignments.test.ts +0 -67
- package/src/rules/selfAssignments.ts +0 -50
- package/src/rules/selfComparisons.test.ts +0 -298
- package/src/rules/selfComparisons.ts +0 -45
- package/src/rules/sequences.test.ts +0 -49
- package/src/rules/sequences.ts +0 -37
- package/src/rules/shadowedRestrictedNames.test.ts +0 -148
- package/src/rules/shadowedRestrictedNames.ts +0 -105
- package/src/rules/sparseArrays.test.ts +0 -111
- package/src/rules/sparseArrays.ts +0 -61
- package/src/rules/symbolDescriptions.test.ts +0 -90
- package/src/rules/symbolDescriptions.ts +0 -47
- package/src/rules/typeofComparisons.test.ts +0 -86
- package/src/rules/typeofComparisons.ts +0 -88
- package/src/rules/unassignedVariables.test.ts +0 -73
- package/src/rules/unassignedVariables.ts +0 -69
- package/src/rules/undefinedVariables.test.ts +0 -81
- package/src/rules/undefinedVariables.ts +0 -97
- package/src/rules/unicodeBOMs.test.ts +0 -67
- package/src/rules/unicodeBOMs.ts +0 -44
- package/src/rules/unnecessaryBlocks.test.ts +0 -148
- package/src/rules/unnecessaryBlocks.ts +0 -89
- package/src/rules/unnecessaryCatches.test.ts +0 -211
- package/src/rules/unnecessaryCatches.ts +0 -84
- package/src/rules/unnecessaryConcatenation.test.ts +0 -88
- package/src/rules/unnecessaryConcatenation.ts +0 -44
- package/src/rules/unsafeNegations.test.ts +0 -64
- package/src/rules/unsafeNegations.ts +0 -59
- package/src/rules/utils/discriminateAnyType.ts +0 -66
- package/src/rules/utils/getConstrainedType.ts +0 -9
- package/src/rules/utils/getThisExpression.ts +0 -24
- package/src/rules/utils/isTypeRecursive.ts +0 -10
- package/src/rules/utils/isUnsafeAssignment.ts +0 -113
- package/src/rules/utils/operators.ts +0 -39
- package/src/rules/variableDeletions.test.ts +0 -76
- package/src/rules/variableDeletions.ts +0 -43
- package/src/rules/voidOperator.test.ts +0 -99
- package/src/rules/voidOperator.ts +0 -38
- package/src/utils/declarationIncludesGlobal.ts +0 -9
- package/src/utils/declarationsIncludeGlobal.ts +0 -7
- package/src/utils/getDeclarationsIfGlobal.ts +0 -14
- package/src/utils/getModifyingReferences.ts +0 -58
- package/src/utils/hasSameTokens.ts +0 -45
- package/src/utils/isGlobalDeclaration.ts +0 -10
- package/src/utils/isGlobalDeclarationOfName.ts +0 -56
- package/src/utils/isGlobalVariable.ts +0 -30
- package/src/utils/unwrapParentParenthesizedExpressions.ts +0 -7
- package/src/utils/unwrapParenthesizedExpression.ts +0 -9
- package/tsconfig.json +0 -9
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
import rule from "./caseDuplicates.js";
|
|
2
|
-
import { ruleTester } from "./ruleTester.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
switch (value) {
|
|
9
|
-
case 1:
|
|
10
|
-
break;
|
|
11
|
-
case 1:
|
|
12
|
-
break;
|
|
13
|
-
}
|
|
14
|
-
`,
|
|
15
|
-
snapshot: `
|
|
16
|
-
switch (value) {
|
|
17
|
-
case 1:
|
|
18
|
-
break;
|
|
19
|
-
case 1:
|
|
20
|
-
~~~~~~
|
|
21
|
-
This case duplicates a previous case, so it will never be reached.
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
`,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
code: `
|
|
28
|
-
switch (value) {
|
|
29
|
-
case "a":
|
|
30
|
-
break;
|
|
31
|
-
case "b":
|
|
32
|
-
break;
|
|
33
|
-
case "a":
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
`,
|
|
37
|
-
snapshot: `
|
|
38
|
-
switch (value) {
|
|
39
|
-
case "a":
|
|
40
|
-
break;
|
|
41
|
-
case "b":
|
|
42
|
-
break;
|
|
43
|
-
case "a":
|
|
44
|
-
~~~~~~~~
|
|
45
|
-
This case duplicates a previous case, so it will never be reached.
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
`,
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
code: `
|
|
52
|
-
switch (value) {
|
|
53
|
-
case x + 1:
|
|
54
|
-
break;
|
|
55
|
-
case x + 1:
|
|
56
|
-
break;
|
|
57
|
-
}
|
|
58
|
-
`,
|
|
59
|
-
snapshot: `
|
|
60
|
-
switch (value) {
|
|
61
|
-
case x + 1:
|
|
62
|
-
break;
|
|
63
|
-
case x + 1:
|
|
64
|
-
~~~~~~~~~~
|
|
65
|
-
This case duplicates a previous case, so it will never be reached.
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
`,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
code: `
|
|
72
|
-
switch (value) {
|
|
73
|
-
case 1:
|
|
74
|
-
break;
|
|
75
|
-
case 2:
|
|
76
|
-
break;
|
|
77
|
-
case 1:
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
`,
|
|
81
|
-
snapshot: `
|
|
82
|
-
switch (value) {
|
|
83
|
-
case 1:
|
|
84
|
-
break;
|
|
85
|
-
case 2:
|
|
86
|
-
break;
|
|
87
|
-
case 1:
|
|
88
|
-
~~~~~~
|
|
89
|
-
This case duplicates a previous case, so it will never be reached.
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
`,
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
code: `
|
|
96
|
-
switch (value) {
|
|
97
|
-
case true:
|
|
98
|
-
break;
|
|
99
|
-
case false:
|
|
100
|
-
break;
|
|
101
|
-
case true:
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
`,
|
|
105
|
-
snapshot: `
|
|
106
|
-
switch (value) {
|
|
107
|
-
case true:
|
|
108
|
-
break;
|
|
109
|
-
case false:
|
|
110
|
-
break;
|
|
111
|
-
case true:
|
|
112
|
-
~~~~~~~~~
|
|
113
|
-
This case duplicates a previous case, so it will never be reached.
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
`,
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
code: `
|
|
120
|
-
switch (value) {
|
|
121
|
-
case obj.property:
|
|
122
|
-
break;
|
|
123
|
-
case obj.property:
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
`,
|
|
127
|
-
snapshot: `
|
|
128
|
-
switch (value) {
|
|
129
|
-
case obj.property:
|
|
130
|
-
break;
|
|
131
|
-
case obj.property:
|
|
132
|
-
~~~~~~~~~~~~~~~~~
|
|
133
|
-
This case duplicates a previous case, so it will never be reached.
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
`,
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
code: `
|
|
140
|
-
const result = (input: number) => {
|
|
141
|
-
switch (input) {
|
|
142
|
-
case 1:
|
|
143
|
-
return "one";
|
|
144
|
-
case 2:
|
|
145
|
-
return "two";
|
|
146
|
-
case 1:
|
|
147
|
-
return "duplicate";
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
`,
|
|
151
|
-
snapshot: `
|
|
152
|
-
const result = (input: number) => {
|
|
153
|
-
switch (input) {
|
|
154
|
-
case 1:
|
|
155
|
-
return "one";
|
|
156
|
-
case 2:
|
|
157
|
-
return "two";
|
|
158
|
-
case 1:
|
|
159
|
-
~~~~~~
|
|
160
|
-
This case duplicates a previous case, so it will never be reached.
|
|
161
|
-
return "duplicate";
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
`,
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
code: `
|
|
168
|
-
switch (value) {
|
|
169
|
-
case 1: case 1: break;
|
|
170
|
-
}
|
|
171
|
-
`,
|
|
172
|
-
snapshot: `
|
|
173
|
-
switch (value) {
|
|
174
|
-
case 1: case 1: break;
|
|
175
|
-
~~~~~~
|
|
176
|
-
This case duplicates a previous case, so it will never be reached.
|
|
177
|
-
}
|
|
178
|
-
`,
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
code: `
|
|
182
|
-
const condition = true;
|
|
183
|
-
switch (value) {
|
|
184
|
-
case condition ? "a" : "b":
|
|
185
|
-
break;
|
|
186
|
-
case condition ? "a" : "b":
|
|
187
|
-
break;
|
|
188
|
-
}
|
|
189
|
-
`,
|
|
190
|
-
snapshot: `
|
|
191
|
-
const condition = true;
|
|
192
|
-
switch (value) {
|
|
193
|
-
case condition ? "a" : "b":
|
|
194
|
-
break;
|
|
195
|
-
case condition ? "a" : "b":
|
|
196
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
197
|
-
This case duplicates a previous case, so it will never be reached.
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
`,
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
code: `
|
|
204
|
-
switch (value) {
|
|
205
|
-
case /* comment */ 1:
|
|
206
|
-
break;
|
|
207
|
-
case 1:
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
`,
|
|
211
|
-
snapshot: `
|
|
212
|
-
switch (value) {
|
|
213
|
-
case /* comment */ 1:
|
|
214
|
-
break;
|
|
215
|
-
case 1:
|
|
216
|
-
~~~~~~
|
|
217
|
-
This case duplicates a previous case, so it will never be reached.
|
|
218
|
-
break;
|
|
219
|
-
}
|
|
220
|
-
`,
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
code: `
|
|
224
|
-
switch (value) {
|
|
225
|
-
case obj.property:
|
|
226
|
-
break;
|
|
227
|
-
case obj /* comment */ .property:
|
|
228
|
-
break;
|
|
229
|
-
}
|
|
230
|
-
`,
|
|
231
|
-
snapshot: `
|
|
232
|
-
switch (value) {
|
|
233
|
-
case obj.property:
|
|
234
|
-
break;
|
|
235
|
-
case obj /* comment */ .property:
|
|
236
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
237
|
-
This case duplicates a previous case, so it will never be reached.
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
`,
|
|
241
|
-
},
|
|
242
|
-
],
|
|
243
|
-
valid: [
|
|
244
|
-
`switch (value) { case 1: break; case 2: break; }`,
|
|
245
|
-
`switch (value) { case 1: break; case 2: break; case 3: break; }`,
|
|
246
|
-
`switch (value) { case "a": break; case "b": break; }`,
|
|
247
|
-
`switch (value) { case true: break; case false: break; }`,
|
|
248
|
-
`switch (value) { case 1: case 2: break; }`,
|
|
249
|
-
`switch (value) { default: break; }`,
|
|
250
|
-
`
|
|
251
|
-
switch (value) {
|
|
252
|
-
case 1:
|
|
253
|
-
break;
|
|
254
|
-
case 2:
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
`,
|
|
258
|
-
`
|
|
259
|
-
switch (value) {
|
|
260
|
-
case x:
|
|
261
|
-
break;
|
|
262
|
-
case y:
|
|
263
|
-
break;
|
|
264
|
-
}
|
|
265
|
-
`,
|
|
266
|
-
`
|
|
267
|
-
switch (value) {
|
|
268
|
-
case obj.a:
|
|
269
|
-
break;
|
|
270
|
-
case obj.b:
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
`,
|
|
274
|
-
`
|
|
275
|
-
switch (value) {
|
|
276
|
-
case 1:
|
|
277
|
-
console.log("one");
|
|
278
|
-
break;
|
|
279
|
-
case 2:
|
|
280
|
-
console.log("two");
|
|
281
|
-
break;
|
|
282
|
-
default:
|
|
283
|
-
console.log("default");
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
`,
|
|
287
|
-
`
|
|
288
|
-
switch (value) {
|
|
289
|
-
case x + 1:
|
|
290
|
-
break;
|
|
291
|
-
case x + 2:
|
|
292
|
-
break;
|
|
293
|
-
}
|
|
294
|
-
`,
|
|
295
|
-
`
|
|
296
|
-
const result = (input: number) => {
|
|
297
|
-
switch (input) {
|
|
298
|
-
case 1:
|
|
299
|
-
return "one";
|
|
300
|
-
case 2:
|
|
301
|
-
return "two";
|
|
302
|
-
default:
|
|
303
|
-
return "unknown";
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
`,
|
|
307
|
-
],
|
|
308
|
-
});
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { typescriptLanguage } from "../language.js";
|
|
4
|
-
import { hasSameTokens } from "../utils/hasSameTokens.js";
|
|
5
|
-
|
|
6
|
-
export default typescriptLanguage.createRule({
|
|
7
|
-
about: {
|
|
8
|
-
description:
|
|
9
|
-
"Reports switch statements with duplicate case clause test expressions.",
|
|
10
|
-
id: "caseDuplicates",
|
|
11
|
-
preset: "logical",
|
|
12
|
-
},
|
|
13
|
-
messages: {
|
|
14
|
-
duplicateCase: {
|
|
15
|
-
primary:
|
|
16
|
-
"This case duplicates a previous case, so it will never be reached.",
|
|
17
|
-
secondary: [
|
|
18
|
-
"Having duplicate case clauses in a switch statement is a logic error.",
|
|
19
|
-
"The second case clause will never be reached because the first matching case will always execute first.",
|
|
20
|
-
],
|
|
21
|
-
suggestions: [
|
|
22
|
-
"Remove the duplicate case clause or modify its test expression to be unique.",
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
setup(context) {
|
|
27
|
-
return {
|
|
28
|
-
visitors: {
|
|
29
|
-
SwitchStatement: (node) => {
|
|
30
|
-
const seenCases: ts.Expression[] = [];
|
|
31
|
-
|
|
32
|
-
for (const clause of node.caseBlock.clauses) {
|
|
33
|
-
if (!ts.isCaseClause(clause)) {
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const isDuplicate = seenCases.some((seenCase) =>
|
|
38
|
-
hasSameTokens(seenCase, clause.expression, context.sourceFile),
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
if (isDuplicate) {
|
|
42
|
-
context.report({
|
|
43
|
-
message: "duplicateCase",
|
|
44
|
-
range: {
|
|
45
|
-
begin: clause.getStart(context.sourceFile),
|
|
46
|
-
end: clause.expression.getEnd(),
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
} else {
|
|
50
|
-
seenCases.push(clause.expression);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
},
|
|
57
|
-
});
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
import rule from "./chainedAssignments.js";
|
|
2
|
-
import { ruleTester } from "./ruleTester.js";
|
|
3
|
-
|
|
4
|
-
ruleTester.describe(rule, {
|
|
5
|
-
invalid: [
|
|
6
|
-
{
|
|
7
|
-
code: `
|
|
8
|
-
let first;
|
|
9
|
-
let second;
|
|
10
|
-
first = second = 1;
|
|
11
|
-
`,
|
|
12
|
-
snapshot: `
|
|
13
|
-
let first;
|
|
14
|
-
let second;
|
|
15
|
-
first = second = 1;
|
|
16
|
-
~
|
|
17
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
18
|
-
`,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
code: `
|
|
22
|
-
let first;
|
|
23
|
-
let second;
|
|
24
|
-
let third;
|
|
25
|
-
first = second = third = 0;
|
|
26
|
-
`,
|
|
27
|
-
snapshot: `
|
|
28
|
-
let first;
|
|
29
|
-
let second;
|
|
30
|
-
let third;
|
|
31
|
-
first = second = third = 0;
|
|
32
|
-
~
|
|
33
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
34
|
-
`,
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
code: `
|
|
38
|
-
let value;
|
|
39
|
-
let another;
|
|
40
|
-
value = another = getValue();
|
|
41
|
-
`,
|
|
42
|
-
snapshot: `
|
|
43
|
-
let value;
|
|
44
|
-
let another;
|
|
45
|
-
value = another = getValue();
|
|
46
|
-
~
|
|
47
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
48
|
-
`,
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
code: `
|
|
52
|
-
let first;
|
|
53
|
-
let second;
|
|
54
|
-
(first = second = 1);
|
|
55
|
-
`,
|
|
56
|
-
snapshot: `
|
|
57
|
-
let first;
|
|
58
|
-
let second;
|
|
59
|
-
(first = second = 1);
|
|
60
|
-
~
|
|
61
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
62
|
-
`,
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
code: `
|
|
66
|
-
const calculate = (value: number) => {
|
|
67
|
-
let first;
|
|
68
|
-
let second;
|
|
69
|
-
first = second = value;
|
|
70
|
-
return first + second;
|
|
71
|
-
};
|
|
72
|
-
`,
|
|
73
|
-
snapshot: `
|
|
74
|
-
const calculate = (value: number) => {
|
|
75
|
-
let first;
|
|
76
|
-
let second;
|
|
77
|
-
first = second = value;
|
|
78
|
-
~
|
|
79
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
80
|
-
return first + second;
|
|
81
|
-
};
|
|
82
|
-
`,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
code: `
|
|
86
|
-
let first;
|
|
87
|
-
let second;
|
|
88
|
-
if (true) {
|
|
89
|
-
first = second = 10;
|
|
90
|
-
}
|
|
91
|
-
`,
|
|
92
|
-
snapshot: `
|
|
93
|
-
let first;
|
|
94
|
-
let second;
|
|
95
|
-
if (true) {
|
|
96
|
-
first = second = 10;
|
|
97
|
-
~
|
|
98
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
99
|
-
}
|
|
100
|
-
`,
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
code: `
|
|
104
|
-
class MyClass {
|
|
105
|
-
method() {
|
|
106
|
-
let first;
|
|
107
|
-
let second;
|
|
108
|
-
first = second = 0;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
`,
|
|
112
|
-
snapshot: `
|
|
113
|
-
class MyClass {
|
|
114
|
-
method() {
|
|
115
|
-
let first;
|
|
116
|
-
let second;
|
|
117
|
-
first = second = 0;
|
|
118
|
-
~
|
|
119
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
`,
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
code: `
|
|
126
|
-
let first;
|
|
127
|
-
let second;
|
|
128
|
-
let third;
|
|
129
|
-
first = (second = third = 5);
|
|
130
|
-
`,
|
|
131
|
-
snapshot: `
|
|
132
|
-
let first;
|
|
133
|
-
let second;
|
|
134
|
-
let third;
|
|
135
|
-
first = (second = third = 5);
|
|
136
|
-
~
|
|
137
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
138
|
-
`,
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
code: `
|
|
142
|
-
let first;
|
|
143
|
-
let second;
|
|
144
|
-
first ||= second ||= 1;
|
|
145
|
-
`,
|
|
146
|
-
snapshot: `
|
|
147
|
-
let first;
|
|
148
|
-
let second;
|
|
149
|
-
first ||= second ||= 1;
|
|
150
|
-
~~~
|
|
151
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
152
|
-
`,
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
code: `
|
|
156
|
-
let first;
|
|
157
|
-
let second;
|
|
158
|
-
first ??= second ??= 0;
|
|
159
|
-
`,
|
|
160
|
-
snapshot: `
|
|
161
|
-
let first;
|
|
162
|
-
let second;
|
|
163
|
-
first ??= second ??= 0;
|
|
164
|
-
~~~
|
|
165
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
166
|
-
`,
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
code: `
|
|
170
|
-
let first;
|
|
171
|
-
let second;
|
|
172
|
-
first += second += 5;
|
|
173
|
-
`,
|
|
174
|
-
snapshot: `
|
|
175
|
-
let first;
|
|
176
|
-
let second;
|
|
177
|
-
first += second += 5;
|
|
178
|
-
~~
|
|
179
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
180
|
-
`,
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
code: `
|
|
184
|
-
let first;
|
|
185
|
-
let second;
|
|
186
|
-
first |= second |= 3;
|
|
187
|
-
`,
|
|
188
|
-
snapshot: `
|
|
189
|
-
let first;
|
|
190
|
-
let second;
|
|
191
|
-
first |= second |= 3;
|
|
192
|
-
~~
|
|
193
|
-
Prefer separate assignment statements for readability instead of chaining assignments.
|
|
194
|
-
`,
|
|
195
|
-
},
|
|
196
|
-
],
|
|
197
|
-
valid: [
|
|
198
|
-
`let first = 1;`,
|
|
199
|
-
`let first = 1, second = 2;`,
|
|
200
|
-
`let first = 1; let second = 2;`,
|
|
201
|
-
`let first; let second; first = 1; second = 2;`,
|
|
202
|
-
`let first; let second; first = 1; second = first;`,
|
|
203
|
-
`const value = getValue();`,
|
|
204
|
-
`let first; first = 1;`,
|
|
205
|
-
`
|
|
206
|
-
let first;
|
|
207
|
-
let second;
|
|
208
|
-
first = 1;
|
|
209
|
-
second = 2;
|
|
210
|
-
`,
|
|
211
|
-
`
|
|
212
|
-
let first;
|
|
213
|
-
let second;
|
|
214
|
-
let third;
|
|
215
|
-
first = 1;
|
|
216
|
-
second = 2;
|
|
217
|
-
third = 3;
|
|
218
|
-
`,
|
|
219
|
-
`
|
|
220
|
-
const calculate = (value: number) => {
|
|
221
|
-
let first;
|
|
222
|
-
let second;
|
|
223
|
-
first = value;
|
|
224
|
-
second = value;
|
|
225
|
-
return first + second;
|
|
226
|
-
};
|
|
227
|
-
`,
|
|
228
|
-
`
|
|
229
|
-
class MyClass {
|
|
230
|
-
method() {
|
|
231
|
-
let first;
|
|
232
|
-
let second;
|
|
233
|
-
first = 0;
|
|
234
|
-
second = 0;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
`,
|
|
238
|
-
`
|
|
239
|
-
let result = "";
|
|
240
|
-
result += "a" + "b";
|
|
241
|
-
`,
|
|
242
|
-
`
|
|
243
|
-
let result = 0;
|
|
244
|
-
result += 1 + 2;
|
|
245
|
-
`,
|
|
246
|
-
`
|
|
247
|
-
let result = 0;
|
|
248
|
-
result += 1 * 2;
|
|
249
|
-
`,
|
|
250
|
-
`
|
|
251
|
-
let result = 0;
|
|
252
|
-
result += 1 - 2;
|
|
253
|
-
`,
|
|
254
|
-
`
|
|
255
|
-
let result = 0;
|
|
256
|
-
result += 1 / 2;
|
|
257
|
-
`,
|
|
258
|
-
`
|
|
259
|
-
let result = 0;
|
|
260
|
-
result += 1 ** 2;
|
|
261
|
-
`,
|
|
262
|
-
],
|
|
263
|
-
});
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import * as tsutils from "ts-api-utils";
|
|
2
|
-
import * as ts from "typescript";
|
|
3
|
-
|
|
4
|
-
import { getTSNodeRange } from "../getTSNodeRange.js";
|
|
5
|
-
import { typescriptLanguage } from "../language.js";
|
|
6
|
-
import { unwrapParenthesizedExpression } from "../utils/unwrapParenthesizedExpression.js";
|
|
7
|
-
import { unwrapParenthesizedExpressionsParent } from "../utils/unwrapParentParenthesizedExpressions.js";
|
|
8
|
-
|
|
9
|
-
export default typescriptLanguage.createRule({
|
|
10
|
-
about: {
|
|
11
|
-
description:
|
|
12
|
-
"Reports using chained assignment expressions (e.g., a = b = c).",
|
|
13
|
-
id: "chainedAssignments",
|
|
14
|
-
preset: "stylistic",
|
|
15
|
-
},
|
|
16
|
-
messages: {
|
|
17
|
-
noChainedAssignment: {
|
|
18
|
-
primary:
|
|
19
|
-
"Prefer separate assignment statements for readability instead of chaining assignments.",
|
|
20
|
-
secondary: [
|
|
21
|
-
"Chained assignments can be hard to read and can lead to unexpected behavior with variable scoping and type inference.",
|
|
22
|
-
"Each assignment creates a reference to the same value, which may cause confusion when dealing with mutable values.",
|
|
23
|
-
],
|
|
24
|
-
suggestions: [
|
|
25
|
-
"Break the chained assignment into separate assignment statements, one for each variable.",
|
|
26
|
-
],
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
setup(context) {
|
|
30
|
-
return {
|
|
31
|
-
visitors: {
|
|
32
|
-
BinaryExpression: (node) => {
|
|
33
|
-
if (!tsutils.isAssignmentKind(node.operatorToken.kind)) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const rightSide = unwrapParenthesizedExpression(node.right);
|
|
38
|
-
if (
|
|
39
|
-
!ts.isBinaryExpression(rightSide) ||
|
|
40
|
-
!tsutils.isAssignmentKind(rightSide.operatorToken.kind)
|
|
41
|
-
) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const parent = unwrapParenthesizedExpressionsParent(node);
|
|
46
|
-
if (ts.isBinaryExpression(parent)) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
context.report({
|
|
51
|
-
message: "noChainedAssignment",
|
|
52
|
-
range: getTSNodeRange(node.operatorToken, context.sourceFile),
|
|
53
|
-
});
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
},
|
|
58
|
-
});
|