From 4af97b0572ca5163813ff924d08220a65630a7be Mon Sep 17 00:00:00 2001 From: jihndai <73680880+jihndai@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:02:16 -0400 Subject: [PATCH] Fix compound assignments for properties with different getter & setter types (#50431) --- src/compiler/checker.ts | 22 +- src/compiler/utilities.ts | 16 +- .../getterSetterSubtypeAssignment.js | 161 ++++++++ .../getterSetterSubtypeAssignment.symbols | 275 ++++++++++++++ .../getterSetterSubtypeAssignment.types | 344 ++++++++++++++++++ .../noUnusedLocals_writeOnly.errors.txt | 4 +- .../reference/noUnusedLocals_writeOnly.js | 4 - .../noUnusedLocals_writeOnly.symbols | 46 +-- .../reference/noUnusedLocals_writeOnly.types | 9 - .../unusedLocalsInMethod2.errors.txt | 1 - .../reference/unusedLocalsInMethod2.js | 2 - .../reference/unusedLocalsInMethod2.symbols | 3 - .../reference/unusedLocalsInMethod2.types | 4 - .../unusedParameterProperty1.errors.txt | 1 - .../reference/unusedParameterProperty1.js | 2 - .../unusedParameterProperty1.symbols | 3 - .../reference/unusedParameterProperty1.types | 5 - .../unusedParameterProperty2.errors.txt | 1 - .../reference/unusedParameterProperty2.js | 2 - .../unusedParameterProperty2.symbols | 3 - .../reference/unusedParameterProperty2.types | 5 - .../reference/unusedPrivateMembers.errors.txt | 1 - .../reference/unusedPrivateMembers.js | 2 - .../reference/unusedPrivateMembers.symbols | 5 - .../reference/unusedPrivateMembers.types | 6 - .../unusedPrivateMethodInClass1.errors.txt | 1 - .../reference/unusedPrivateMethodInClass1.js | 2 - .../unusedPrivateMethodInClass1.symbols | 3 - .../unusedPrivateMethodInClass1.types | 4 - .../unusedPrivateMethodInClass2.errors.txt | 6 +- .../reference/unusedPrivateMethodInClass2.js | 4 - .../unusedPrivateMethodInClass2.symbols | 10 +- .../unusedPrivateMethodInClass2.types | 8 - .../unusedPrivateMethodInClass3.errors.txt | 9 +- .../reference/unusedPrivateMethodInClass3.js | 6 - .../unusedPrivateMethodInClass3.symbols | 17 +- .../unusedPrivateMethodInClass3.types | 12 - .../unusedPrivateMethodInClass4.errors.txt | 7 +- .../reference/unusedPrivateMethodInClass4.js | 6 - .../unusedPrivateMethodInClass4.symbols | 21 +- .../unusedPrivateMethodInClass4.types | 12 - .../unusedSwitchStatement.errors.txt | 2 +- .../reference/unusedSwitchStatement.js | 4 +- .../reference/unusedSwitchStatement.symbols | 2 +- .../reference/unusedSwitchStatement.types | 5 +- .../unusedVariablesinBlocks1.errors.txt | 1 - .../reference/unusedVariablesinBlocks1.js | 2 - .../unusedVariablesinBlocks1.symbols | 3 - .../reference/unusedVariablesinBlocks1.types | 4 - .../unusedVariablesinBlocks2.errors.txt | 1 - .../reference/unusedVariablesinBlocks2.js | 2 - .../unusedVariablesinBlocks2.symbols | 2 - .../reference/unusedVariablesinBlocks2.types | 3 - .../compiler/getterSetterSubtypeAssignment.ts | 89 +++++ .../compiler/noUnusedLocals_writeOnly.ts | 2 - tests/cases/compiler/unusedLocalsInMethod2.ts | 1 - .../compiler/unusedParameterProperty1.ts | 1 - .../compiler/unusedParameterProperty2.ts | 1 - tests/cases/compiler/unusedPrivateMembers.ts | 1 - .../compiler/unusedPrivateMethodInClass1.ts | 1 - .../compiler/unusedPrivateMethodInClass2.ts | 2 - .../compiler/unusedPrivateMethodInClass3.ts | 3 - .../compiler/unusedPrivateMethodInClass4.ts | 3 - tests/cases/compiler/unusedSwitchStatement.ts | 2 +- .../compiler/unusedVariablesinBlocks1.ts | 1 - .../compiler/unusedVariablesinBlocks2.ts | 1 - ...deFixUnusedIdentifier_postfix_operator1.ts | 14 - ...deFixUnusedIdentifier_postfix_operator2.ts | 14 - ...odeFixUnusedIdentifier_prefix_operator1.ts | 14 - ...odeFixUnusedIdentifier_prefix_operator2.ts | 14 - 70 files changed, 937 insertions(+), 313 deletions(-) create mode 100644 tests/baselines/reference/getterSetterSubtypeAssignment.js create mode 100644 tests/baselines/reference/getterSetterSubtypeAssignment.symbols create mode 100644 tests/baselines/reference/getterSetterSubtypeAssignment.types create mode 100644 tests/cases/compiler/getterSetterSubtypeAssignment.ts delete mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts delete mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts delete mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts delete mode 100644 tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 661db37fd5f..46f33f9dbb1 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -33,6 +33,7 @@ import { BigIntLiteral, BigIntLiteralType, BinaryExpression, + BinaryOperator, BinaryOperatorToken, binarySearch, BindableObjectDefinePropertyCall, @@ -471,6 +472,7 @@ import { isCommaSequence, isCommonJsExportedExpression, isCommonJsExportPropertyAssignment, + isCompoundAssignment, isComputedNonLiteralName, isComputedPropertyName, isConstructorDeclaration, @@ -31059,9 +31061,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return nonNullType; } - function checkPropertyAccessExpression(node: PropertyAccessExpression, checkMode: CheckMode | undefined) { + function checkPropertyAccessExpression(node: PropertyAccessExpression, checkMode: CheckMode | undefined, writeOnly?: boolean) { return node.flags & NodeFlags.OptionalChain ? checkPropertyAccessChain(node as PropertyAccessChain, checkMode) : - checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullExpression(node.expression), node.name, checkMode); + checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullExpression(node.expression), node.name, checkMode, writeOnly); } function checkPropertyAccessChain(node: PropertyAccessChain, checkMode: CheckMode | undefined) { @@ -31204,7 +31206,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { && getThisContainer(node, /*includeArrowFunctions*/ true, /*includeClassComputedPropertyName*/ false) === getDeclaringConstructor(prop); } - function checkPropertyAccessExpressionOrQualifiedName(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, leftType: Type, right: Identifier | PrivateIdentifier, checkMode: CheckMode | undefined) { + function checkPropertyAccessExpressionOrQualifiedName(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, leftType: Type, right: Identifier | PrivateIdentifier, checkMode: CheckMode | undefined, writeOnly?: boolean) { const parentSymbol = getNodeLinks(left).resolvedSymbol; const assignmentKind = getAssignmentTargetKind(node); const apparentType = getApparentType(assignmentKind !== AssignmentKind.None || isMethodAccessForCall(node) ? getWidenedType(leftType) : leftType); @@ -31312,14 +31314,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { checkPropertyNotUsedBeforeDeclaration(prop, node, right); markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol)); getNodeLinks(node).resolvedSymbol = prop; - const writing = isWriteAccess(node); - checkPropertyAccessibility(node, left.kind === SyntaxKind.SuperKeyword, writing, apparentType, prop); + checkPropertyAccessibility(node, left.kind === SyntaxKind.SuperKeyword, isWriteAccess(node), apparentType, prop); if (isAssignmentToReadonlyEntity(node as Expression, prop, assignmentKind)) { error(right, Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, idText(right)); return errorType; } - propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : writing ? getWriteTypeOfSymbol(prop) : getTypeOfSymbol(prop); + propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : writeOnly || isWriteOnlyAccess(node) ? getWriteTypeOfSymbol(prop) : getTypeOfSymbol(prop); } return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode); @@ -36811,6 +36812,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function checkAssignmentOperatorWorker() { + let assigneeType = leftType; + + // getters can be a subtype of setters, so to check for assignability we use the setter's type instead + if (isCompoundAssignment(operatorToken.kind as BinaryOperator) && left.kind === SyntaxKind.PropertyAccessExpression) { + assigneeType = checkPropertyAccessExpression(left as PropertyAccessExpression, /*checkMode*/ undefined, /*writeOnly*/ true); + } + // TypeScript 1.0 spec (April 2014): 4.17 // An assignment of the form // VarExpr = ValueExpr @@ -36831,7 +36839,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } } // to avoid cascading errors check assignability only if 'isReference' check succeeded and no errors were reported - checkTypeAssignableToAndOptionallyElaborate(valueType, leftType, left, right, headMessage); + checkTypeAssignableToAndOptionallyElaborate(valueType, assigneeType, left, right, headMessage); } } } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index fb1cac4c66d..159aedabbf2 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -7491,26 +7491,25 @@ export function isWriteAccess(node: Node) { const enum AccessKind { /** Only reads from a variable. */ Read, - /** Only writes to a variable without using the result. E.g.: `x++;`. */ + /** Only writes to a variable without ever reading it. E.g.: `x=1;`. */ Write, - /** Writes to a variable and uses the result as an expression. E.g.: `f(x++);`. */ + /** Reads from and writes to a variable. E.g.: `f(x++);`, `x/=1`. */ ReadWrite } function accessKind(node: Node): AccessKind { const { parent } = node; - if (!parent) return AccessKind.Read; - switch (parent.kind) { + switch (parent?.kind) { case SyntaxKind.ParenthesizedExpression: return accessKind(parent); case SyntaxKind.PostfixUnaryExpression: case SyntaxKind.PrefixUnaryExpression: const { operator } = parent as PrefixUnaryExpression | PostfixUnaryExpression; - return operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken ? writeOrReadWrite() : AccessKind.Read; + return operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken ? AccessKind.ReadWrite : AccessKind.Read; case SyntaxKind.BinaryExpression: const { left, operatorToken } = parent as BinaryExpression; return left === node && isAssignmentOperator(operatorToken.kind) ? - operatorToken.kind === SyntaxKind.EqualsToken ? AccessKind.Write : writeOrReadWrite() + operatorToken.kind === SyntaxKind.EqualsToken ? AccessKind.Write : AccessKind.ReadWrite : AccessKind.Read; case SyntaxKind.PropertyAccessExpression: return (parent as PropertyAccessExpression).name !== node ? AccessKind.Read : accessKind(parent); @@ -7527,11 +7526,6 @@ function accessKind(node: Node): AccessKind { default: return AccessKind.Read; } - - function writeOrReadWrite(): AccessKind { - // If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect. - return parent.parent && walkUpParenthesizedExpressions(parent.parent).kind === SyntaxKind.ExpressionStatement ? AccessKind.Write : AccessKind.ReadWrite; - } } function reverseAccessKind(a: AccessKind): AccessKind { switch (a) { diff --git a/tests/baselines/reference/getterSetterSubtypeAssignment.js b/tests/baselines/reference/getterSetterSubtypeAssignment.js new file mode 100644 index 00000000000..9eb268e746e --- /dev/null +++ b/tests/baselines/reference/getterSetterSubtypeAssignment.js @@ -0,0 +1,161 @@ +//// [getterSetterSubtypeAssignment.ts] +class NumberOrUndefined { + _x: number | undefined; + get x(): number { return this._x ?? 0; } + set x(value: number | undefined) { this._x = value; } + + additionAssignment() { + this.x += 1; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrUndefined = new NumberOrUndefined(); +numberOrUndefined.x += 1; +numberOrUndefined.x -= 1; +numberOrUndefined.x *= 1; +numberOrUndefined.x /= 1; + +class NumberOrString { + _x: number | string = 0; + get x(): number { return typeof this._x === 'number' ? this._x : Number(this._x); } + set x(value: number | string) { this._x = value; } + + additionAssignmentNumber() { + this.x += 1; + } + additionAssignmentString() { + this.x += '1'; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrString = new NumberOrString(); +numberOrString.x += 1; +numberOrString.x += '1'; +numberOrString.x -= 1; +numberOrString.x *= 1; +numberOrString.x /= 1; + +type Foo = { bar: number; }; +class NumberOrObject { + _x: number | Foo = 0; + get x(): number { return typeof this._x === 'number' ? this._x : this._x.bar; } + set x(value: number | Foo) { this._x = value; } + + additionAssignment() { + this.x += 1; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrObject = new NumberOrObject(); +numberOrObject.x += 1; +numberOrObject.x -= 1; +numberOrObject.x *= 1; +numberOrObject.x /= 1; + +//// [getterSetterSubtypeAssignment.js] +class NumberOrUndefined { + get x() { var _a; return (_a = this._x) !== null && _a !== void 0 ? _a : 0; } + set x(value) { this._x = value; } + additionAssignment() { + this.x += 1; + } + subtractionAssignment() { + this.x -= 1; + } + multiplicationAssignment() { + this.x *= 1; + } + divisionAssignment() { + this.x /= 1; + } +} +const numberOrUndefined = new NumberOrUndefined(); +numberOrUndefined.x += 1; +numberOrUndefined.x -= 1; +numberOrUndefined.x *= 1; +numberOrUndefined.x /= 1; +class NumberOrString { + constructor() { + this._x = 0; + } + get x() { return typeof this._x === 'number' ? this._x : Number(this._x); } + set x(value) { this._x = value; } + additionAssignmentNumber() { + this.x += 1; + } + additionAssignmentString() { + this.x += '1'; + } + subtractionAssignment() { + this.x -= 1; + } + multiplicationAssignment() { + this.x *= 1; + } + divisionAssignment() { + this.x /= 1; + } +} +const numberOrString = new NumberOrString(); +numberOrString.x += 1; +numberOrString.x += '1'; +numberOrString.x -= 1; +numberOrString.x *= 1; +numberOrString.x /= 1; +class NumberOrObject { + constructor() { + this._x = 0; + } + get x() { return typeof this._x === 'number' ? this._x : this._x.bar; } + set x(value) { this._x = value; } + additionAssignment() { + this.x += 1; + } + subtractionAssignment() { + this.x -= 1; + } + multiplicationAssignment() { + this.x *= 1; + } + divisionAssignment() { + this.x /= 1; + } +} +const numberOrObject = new NumberOrObject(); +numberOrObject.x += 1; +numberOrObject.x -= 1; +numberOrObject.x *= 1; +numberOrObject.x /= 1; diff --git a/tests/baselines/reference/getterSetterSubtypeAssignment.symbols b/tests/baselines/reference/getterSetterSubtypeAssignment.symbols new file mode 100644 index 00000000000..988df1b35fe --- /dev/null +++ b/tests/baselines/reference/getterSetterSubtypeAssignment.symbols @@ -0,0 +1,275 @@ +=== tests/cases/compiler/getterSetterSubtypeAssignment.ts === +class NumberOrUndefined { +>NumberOrUndefined : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) + + _x: number | undefined; +>_x : Symbol(NumberOrUndefined._x, Decl(getterSetterSubtypeAssignment.ts, 0, 25)) + + get x(): number { return this._x ?? 0; } +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>this._x : Symbol(NumberOrUndefined._x, Decl(getterSetterSubtypeAssignment.ts, 0, 25)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>_x : Symbol(NumberOrUndefined._x, Decl(getterSetterSubtypeAssignment.ts, 0, 25)) + + set x(value: number | undefined) { this._x = value; } +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 3, 10)) +>this._x : Symbol(NumberOrUndefined._x, Decl(getterSetterSubtypeAssignment.ts, 0, 25)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>_x : Symbol(NumberOrUndefined._x, Decl(getterSetterSubtypeAssignment.ts, 0, 25)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 3, 10)) + + additionAssignment() { +>additionAssignment : Symbol(NumberOrUndefined.additionAssignment, Decl(getterSetterSubtypeAssignment.ts, 3, 57)) + + this.x += 1; +>this.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + } + + subtractionAssignment() { +>subtractionAssignment : Symbol(NumberOrUndefined.subtractionAssignment, Decl(getterSetterSubtypeAssignment.ts, 7, 5)) + + this.x -= 1; +>this.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + } + + multiplicationAssignment() { +>multiplicationAssignment : Symbol(NumberOrUndefined.multiplicationAssignment, Decl(getterSetterSubtypeAssignment.ts, 11, 5)) + + this.x *= 1; +>this.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + } + + divisionAssignment() { +>divisionAssignment : Symbol(NumberOrUndefined.divisionAssignment, Decl(getterSetterSubtypeAssignment.ts, 15, 5)) + + this.x /= 1; +>this.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>this : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + } +} +const numberOrUndefined = new NumberOrUndefined(); +>numberOrUndefined : Symbol(numberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 21, 5)) +>NumberOrUndefined : Symbol(NumberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 0, 0)) + +numberOrUndefined.x += 1; +>numberOrUndefined.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>numberOrUndefined : Symbol(numberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 21, 5)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + +numberOrUndefined.x -= 1; +>numberOrUndefined.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>numberOrUndefined : Symbol(numberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 21, 5)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + +numberOrUndefined.x *= 1; +>numberOrUndefined.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>numberOrUndefined : Symbol(numberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 21, 5)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + +numberOrUndefined.x /= 1; +>numberOrUndefined.x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) +>numberOrUndefined : Symbol(numberOrUndefined, Decl(getterSetterSubtypeAssignment.ts, 21, 5)) +>x : Symbol(NumberOrUndefined.x, Decl(getterSetterSubtypeAssignment.ts, 1, 27), Decl(getterSetterSubtypeAssignment.ts, 2, 44)) + +class NumberOrString { +>NumberOrString : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) + + _x: number | string = 0; +>_x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) + + get x(): number { return typeof this._x === 'number' ? this._x : Number(this._x); } +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this._x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>_x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>this._x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>_x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>Number : Symbol(Number, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>this._x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>_x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) + + set x(value: number | string) { this._x = value; } +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 30, 10)) +>this._x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>_x : Symbol(NumberOrString._x, Decl(getterSetterSubtypeAssignment.ts, 27, 22)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 30, 10)) + + additionAssignmentNumber() { +>additionAssignmentNumber : Symbol(NumberOrString.additionAssignmentNumber, Decl(getterSetterSubtypeAssignment.ts, 30, 54)) + + this.x += 1; +>this.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + } + additionAssignmentString() { +>additionAssignmentString : Symbol(NumberOrString.additionAssignmentString, Decl(getterSetterSubtypeAssignment.ts, 34, 5)) + + this.x += '1'; +>this.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + } + + subtractionAssignment() { +>subtractionAssignment : Symbol(NumberOrString.subtractionAssignment, Decl(getterSetterSubtypeAssignment.ts, 37, 5)) + + this.x -= 1; +>this.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + } + + multiplicationAssignment() { +>multiplicationAssignment : Symbol(NumberOrString.multiplicationAssignment, Decl(getterSetterSubtypeAssignment.ts, 41, 5)) + + this.x *= 1; +>this.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + } + + divisionAssignment() { +>divisionAssignment : Symbol(NumberOrString.divisionAssignment, Decl(getterSetterSubtypeAssignment.ts, 45, 5)) + + this.x /= 1; +>this.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>this : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + } +} +const numberOrString = new NumberOrString(); +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>NumberOrString : Symbol(NumberOrString, Decl(getterSetterSubtypeAssignment.ts, 25, 25)) + +numberOrString.x += 1; +>numberOrString.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + +numberOrString.x += '1'; +>numberOrString.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + +numberOrString.x -= 1; +>numberOrString.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + +numberOrString.x *= 1; +>numberOrString.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + +numberOrString.x /= 1; +>numberOrString.x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) +>numberOrString : Symbol(numberOrString, Decl(getterSetterSubtypeAssignment.ts, 51, 5)) +>x : Symbol(NumberOrString.x, Decl(getterSetterSubtypeAssignment.ts, 28, 28), Decl(getterSetterSubtypeAssignment.ts, 29, 87)) + +type Foo = { bar: number; }; +>Foo : Symbol(Foo, Decl(getterSetterSubtypeAssignment.ts, 56, 22)) +>bar : Symbol(bar, Decl(getterSetterSubtypeAssignment.ts, 58, 12)) + +class NumberOrObject { +>NumberOrObject : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) + + _x: number | Foo = 0; +>_x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>Foo : Symbol(Foo, Decl(getterSetterSubtypeAssignment.ts, 56, 22)) + + get x(): number { return typeof this._x === 'number' ? this._x : this._x.bar; } +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>this._x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>_x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this._x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>_x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this._x.bar : Symbol(bar, Decl(getterSetterSubtypeAssignment.ts, 58, 12)) +>this._x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>_x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>bar : Symbol(bar, Decl(getterSetterSubtypeAssignment.ts, 58, 12)) + + set x(value: number | Foo) { this._x = value; } +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 62, 10)) +>Foo : Symbol(Foo, Decl(getterSetterSubtypeAssignment.ts, 56, 22)) +>this._x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>_x : Symbol(NumberOrObject._x, Decl(getterSetterSubtypeAssignment.ts, 59, 22)) +>value : Symbol(value, Decl(getterSetterSubtypeAssignment.ts, 62, 10)) + + additionAssignment() { +>additionAssignment : Symbol(NumberOrObject.additionAssignment, Decl(getterSetterSubtypeAssignment.ts, 62, 51)) + + this.x += 1; +>this.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + } + + subtractionAssignment() { +>subtractionAssignment : Symbol(NumberOrObject.subtractionAssignment, Decl(getterSetterSubtypeAssignment.ts, 66, 5)) + + this.x -= 1; +>this.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + } + + multiplicationAssignment() { +>multiplicationAssignment : Symbol(NumberOrObject.multiplicationAssignment, Decl(getterSetterSubtypeAssignment.ts, 70, 5)) + + this.x *= 1; +>this.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + } + + divisionAssignment() { +>divisionAssignment : Symbol(NumberOrObject.divisionAssignment, Decl(getterSetterSubtypeAssignment.ts, 74, 5)) + + this.x /= 1; +>this.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>this : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + } +} +const numberOrObject = new NumberOrObject(); +>numberOrObject : Symbol(numberOrObject, Decl(getterSetterSubtypeAssignment.ts, 80, 5)) +>NumberOrObject : Symbol(NumberOrObject, Decl(getterSetterSubtypeAssignment.ts, 58, 28)) + +numberOrObject.x += 1; +>numberOrObject.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>numberOrObject : Symbol(numberOrObject, Decl(getterSetterSubtypeAssignment.ts, 80, 5)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + +numberOrObject.x -= 1; +>numberOrObject.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>numberOrObject : Symbol(numberOrObject, Decl(getterSetterSubtypeAssignment.ts, 80, 5)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + +numberOrObject.x *= 1; +>numberOrObject.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>numberOrObject : Symbol(numberOrObject, Decl(getterSetterSubtypeAssignment.ts, 80, 5)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + +numberOrObject.x /= 1; +>numberOrObject.x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) +>numberOrObject : Symbol(numberOrObject, Decl(getterSetterSubtypeAssignment.ts, 80, 5)) +>x : Symbol(NumberOrObject.x, Decl(getterSetterSubtypeAssignment.ts, 60, 25), Decl(getterSetterSubtypeAssignment.ts, 61, 83)) + diff --git a/tests/baselines/reference/getterSetterSubtypeAssignment.types b/tests/baselines/reference/getterSetterSubtypeAssignment.types new file mode 100644 index 00000000000..540aec94252 --- /dev/null +++ b/tests/baselines/reference/getterSetterSubtypeAssignment.types @@ -0,0 +1,344 @@ +=== tests/cases/compiler/getterSetterSubtypeAssignment.ts === +class NumberOrUndefined { +>NumberOrUndefined : NumberOrUndefined + + _x: number | undefined; +>_x : number | undefined + + get x(): number { return this._x ?? 0; } +>x : number +>this._x ?? 0 : number +>this._x : number | undefined +>this : this +>_x : number | undefined +>0 : 0 + + set x(value: number | undefined) { this._x = value; } +>x : number +>value : number | undefined +>this._x = value : number | undefined +>this._x : number | undefined +>this : this +>_x : number | undefined +>value : number | undefined + + additionAssignment() { +>additionAssignment : () => void + + this.x += 1; +>this.x += 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + subtractionAssignment() { +>subtractionAssignment : () => void + + this.x -= 1; +>this.x -= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + multiplicationAssignment() { +>multiplicationAssignment : () => void + + this.x *= 1; +>this.x *= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + divisionAssignment() { +>divisionAssignment : () => void + + this.x /= 1; +>this.x /= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } +} +const numberOrUndefined = new NumberOrUndefined(); +>numberOrUndefined : NumberOrUndefined +>new NumberOrUndefined() : NumberOrUndefined +>NumberOrUndefined : typeof NumberOrUndefined + +numberOrUndefined.x += 1; +>numberOrUndefined.x += 1 : number +>numberOrUndefined.x : number +>numberOrUndefined : NumberOrUndefined +>x : number +>1 : 1 + +numberOrUndefined.x -= 1; +>numberOrUndefined.x -= 1 : number +>numberOrUndefined.x : number +>numberOrUndefined : NumberOrUndefined +>x : number +>1 : 1 + +numberOrUndefined.x *= 1; +>numberOrUndefined.x *= 1 : number +>numberOrUndefined.x : number +>numberOrUndefined : NumberOrUndefined +>x : number +>1 : 1 + +numberOrUndefined.x /= 1; +>numberOrUndefined.x /= 1 : number +>numberOrUndefined.x : number +>numberOrUndefined : NumberOrUndefined +>x : number +>1 : 1 + +class NumberOrString { +>NumberOrString : NumberOrString + + _x: number | string = 0; +>_x : string | number +>0 : 0 + + get x(): number { return typeof this._x === 'number' ? this._x : Number(this._x); } +>x : number +>typeof this._x === 'number' ? this._x : Number(this._x) : number +>typeof this._x === 'number' : boolean +>typeof this._x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>this._x : string | number +>this : this +>_x : string | number +>'number' : "number" +>this._x : number +>this : this +>_x : number +>Number(this._x) : number +>Number : NumberConstructor +>this._x : string +>this : this +>_x : string + + set x(value: number | string) { this._x = value; } +>x : number +>value : string | number +>this._x = value : string | number +>this._x : string | number +>this : this +>_x : string | number +>value : string | number + + additionAssignmentNumber() { +>additionAssignmentNumber : () => void + + this.x += 1; +>this.x += 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + additionAssignmentString() { +>additionAssignmentString : () => void + + this.x += '1'; +>this.x += '1' : string +>this.x : number +>this : this +>x : number +>'1' : "1" + } + + subtractionAssignment() { +>subtractionAssignment : () => void + + this.x -= 1; +>this.x -= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + multiplicationAssignment() { +>multiplicationAssignment : () => void + + this.x *= 1; +>this.x *= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + divisionAssignment() { +>divisionAssignment : () => void + + this.x /= 1; +>this.x /= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } +} +const numberOrString = new NumberOrString(); +>numberOrString : NumberOrString +>new NumberOrString() : NumberOrString +>NumberOrString : typeof NumberOrString + +numberOrString.x += 1; +>numberOrString.x += 1 : number +>numberOrString.x : number +>numberOrString : NumberOrString +>x : number +>1 : 1 + +numberOrString.x += '1'; +>numberOrString.x += '1' : string +>numberOrString.x : number +>numberOrString : NumberOrString +>x : number +>'1' : "1" + +numberOrString.x -= 1; +>numberOrString.x -= 1 : number +>numberOrString.x : number +>numberOrString : NumberOrString +>x : number +>1 : 1 + +numberOrString.x *= 1; +>numberOrString.x *= 1 : number +>numberOrString.x : number +>numberOrString : NumberOrString +>x : number +>1 : 1 + +numberOrString.x /= 1; +>numberOrString.x /= 1 : number +>numberOrString.x : number +>numberOrString : NumberOrString +>x : number +>1 : 1 + +type Foo = { bar: number; }; +>Foo : { bar: number; } +>bar : number + +class NumberOrObject { +>NumberOrObject : NumberOrObject + + _x: number | Foo = 0; +>_x : number | Foo +>0 : 0 + + get x(): number { return typeof this._x === 'number' ? this._x : this._x.bar; } +>x : number +>typeof this._x === 'number' ? this._x : this._x.bar : number +>typeof this._x === 'number' : boolean +>typeof this._x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" +>this._x : number | Foo +>this : this +>_x : number | Foo +>'number' : "number" +>this._x : number +>this : this +>_x : number +>this._x.bar : number +>this._x : Foo +>this : this +>_x : Foo +>bar : number + + set x(value: number | Foo) { this._x = value; } +>x : number +>value : number | Foo +>this._x = value : number | Foo +>this._x : number | Foo +>this : this +>_x : number | Foo +>value : number | Foo + + additionAssignment() { +>additionAssignment : () => void + + this.x += 1; +>this.x += 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + subtractionAssignment() { +>subtractionAssignment : () => void + + this.x -= 1; +>this.x -= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + multiplicationAssignment() { +>multiplicationAssignment : () => void + + this.x *= 1; +>this.x *= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } + + divisionAssignment() { +>divisionAssignment : () => void + + this.x /= 1; +>this.x /= 1 : number +>this.x : number +>this : this +>x : number +>1 : 1 + } +} +const numberOrObject = new NumberOrObject(); +>numberOrObject : NumberOrObject +>new NumberOrObject() : NumberOrObject +>NumberOrObject : typeof NumberOrObject + +numberOrObject.x += 1; +>numberOrObject.x += 1 : number +>numberOrObject.x : number +>numberOrObject : NumberOrObject +>x : number +>1 : 1 + +numberOrObject.x -= 1; +>numberOrObject.x -= 1 : number +>numberOrObject.x : number +>numberOrObject : NumberOrObject +>x : number +>1 : 1 + +numberOrObject.x *= 1; +>numberOrObject.x *= 1 : number +>numberOrObject.x : number +>numberOrObject : NumberOrObject +>x : number +>1 : 1 + +numberOrObject.x /= 1; +>numberOrObject.x /= 1 : number +>numberOrObject.x : number +>numberOrObject : NumberOrObject +>x : number +>1 : 1 + diff --git a/tests/baselines/reference/noUnusedLocals_writeOnly.errors.txt b/tests/baselines/reference/noUnusedLocals_writeOnly.errors.txt index 347e181d946..496d6aa514b 100644 --- a/tests/baselines/reference/noUnusedLocals_writeOnly.errors.txt +++ b/tests/baselines/reference/noUnusedLocals_writeOnly.errors.txt @@ -1,5 +1,5 @@ tests/cases/compiler/noUnusedLocals_writeOnly.ts(1,12): error TS6133: 'x' is declared but its value is never read. -tests/cases/compiler/noUnusedLocals_writeOnly.ts(18,9): error TS6133: 'z' is declared but its value is never read. +tests/cases/compiler/noUnusedLocals_writeOnly.ts(16,9): error TS6133: 'z' is declared but its value is never read. ==== tests/cases/compiler/noUnusedLocals_writeOnly.ts (2 errors) ==== @@ -8,8 +8,6 @@ tests/cases/compiler/noUnusedLocals_writeOnly.ts(18,9): error TS6133: 'z' is dec !!! error TS6133: 'x' is declared but its value is never read. // None of these statements read from 'x', so it will be marked unused. x = 1; - x++; - x /= 2; ([x] = [1]); ({ x } = { x: 1 }); ({ x: x } = { x: 1 }); diff --git a/tests/baselines/reference/noUnusedLocals_writeOnly.js b/tests/baselines/reference/noUnusedLocals_writeOnly.js index ec4f5a6f5ff..c91bdd97dac 100644 --- a/tests/baselines/reference/noUnusedLocals_writeOnly.js +++ b/tests/baselines/reference/noUnusedLocals_writeOnly.js @@ -2,8 +2,6 @@ function f(x = 0, b = false) { // None of these statements read from 'x', so it will be marked unused. x = 1; - x++; - x /= 2; ([x] = [1]); ({ x } = { x: 1 }); ({ x: x } = { x: 1 }); @@ -30,8 +28,6 @@ function f(x, b) { if (b === void 0) { b = false; } // None of these statements read from 'x', so it will be marked unused. x = 1; - x++; - x /= 2; (x = [1][0]); (x = { x: 1 }.x); (x = { x: 1 }.x); diff --git a/tests/baselines/reference/noUnusedLocals_writeOnly.symbols b/tests/baselines/reference/noUnusedLocals_writeOnly.symbols index a794291cadd..f6184c75989 100644 --- a/tests/baselines/reference/noUnusedLocals_writeOnly.symbols +++ b/tests/baselines/reference/noUnusedLocals_writeOnly.symbols @@ -8,64 +8,58 @@ function f(x = 0, b = false) { x = 1; >x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) - x++; ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) - - x /= 2; ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) - ([x] = [1]); >x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) ({ x } = { x: 1 }); ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 6, 6)) ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 6, 14)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 4, 6)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 4, 14)) ({ x: x } = { x: 1 }); ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 7, 6)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 5, 6)) >x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 7, 17)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 5, 17)) ({ a: [{ b: x }] } = { a: [{ b: 1 }] }); ->a : Symbol(a, Decl(noUnusedLocals_writeOnly.ts, 8, 6)) ->b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 8, 12)) +>a : Symbol(a, Decl(noUnusedLocals_writeOnly.ts, 6, 6)) +>b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 6, 12)) >x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 0, 11)) ->a : Symbol(a, Decl(noUnusedLocals_writeOnly.ts, 8, 26)) ->b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 8, 32)) +>a : Symbol(a, Decl(noUnusedLocals_writeOnly.ts, 6, 26)) +>b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 6, 32)) ({ x = 2 } = { x: b ? 1 : undefined }); ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 9, 6)) ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 9, 18)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 7, 6)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 7, 18)) >b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 0, 17)) >undefined : Symbol(undefined) let used = 1; ->used : Symbol(used, Decl(noUnusedLocals_writeOnly.ts, 10, 7)) +>used : Symbol(used, Decl(noUnusedLocals_writeOnly.ts, 8, 7)) ({ x = used } = { x: b ? 1 : undefined }); ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 11, 6)) ->used : Symbol(used, Decl(noUnusedLocals_writeOnly.ts, 10, 7)) ->x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 11, 21)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 9, 6)) +>used : Symbol(used, Decl(noUnusedLocals_writeOnly.ts, 8, 7)) +>x : Symbol(x, Decl(noUnusedLocals_writeOnly.ts, 9, 21)) >b : Symbol(b, Decl(noUnusedLocals_writeOnly.ts, 0, 17)) >undefined : Symbol(undefined) let y = 0; ->y : Symbol(y, Decl(noUnusedLocals_writeOnly.ts, 13, 7)) +>y : Symbol(y, Decl(noUnusedLocals_writeOnly.ts, 11, 7)) // This is a write access to y, but not a write-*only* access. f(y++); >f : Symbol(f, Decl(noUnusedLocals_writeOnly.ts, 0, 0)) ->y : Symbol(y, Decl(noUnusedLocals_writeOnly.ts, 13, 7)) +>y : Symbol(y, Decl(noUnusedLocals_writeOnly.ts, 11, 7)) let z = 0; ->z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 17, 7)) +>z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 15, 7)) f(z = 1); // This effectively doesn't use `z`, values just pass through it. >f : Symbol(f, Decl(noUnusedLocals_writeOnly.ts, 0, 0)) ->z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 17, 7)) +>z : Symbol(z, Decl(noUnusedLocals_writeOnly.ts, 15, 7)) } function f2(_: ReadonlyArray): void {} ->f2 : Symbol(f2, Decl(noUnusedLocals_writeOnly.ts, 19, 1)) ->_ : Symbol(_, Decl(noUnusedLocals_writeOnly.ts, 20, 12)) +>f2 : Symbol(f2, Decl(noUnusedLocals_writeOnly.ts, 17, 1)) +>_ : Symbol(_, Decl(noUnusedLocals_writeOnly.ts, 18, 12)) >ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --)) diff --git a/tests/baselines/reference/noUnusedLocals_writeOnly.types b/tests/baselines/reference/noUnusedLocals_writeOnly.types index 68c03b7c8bc..1fd26007ea6 100644 --- a/tests/baselines/reference/noUnusedLocals_writeOnly.types +++ b/tests/baselines/reference/noUnusedLocals_writeOnly.types @@ -12,15 +12,6 @@ function f(x = 0, b = false) { >x : number >1 : 1 - x++; ->x++ : number ->x : number - - x /= 2; ->x /= 2 : number ->x : number ->2 : 2 - ([x] = [1]); >([x] = [1]) : [number] >[x] = [1] : [number] diff --git a/tests/baselines/reference/unusedLocalsInMethod2.errors.txt b/tests/baselines/reference/unusedLocalsInMethod2.errors.txt index 8d42611d57c..fe0e8af4bda 100644 --- a/tests/baselines/reference/unusedLocalsInMethod2.errors.txt +++ b/tests/baselines/reference/unusedLocalsInMethod2.errors.txt @@ -7,6 +7,5 @@ tests/cases/compiler/unusedLocalsInMethod2.ts(3,9): error TS6199: All variables var x, y = 10; ~~~~~~~~~~~~~~ !!! error TS6199: All variables are unused. - y++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedLocalsInMethod2.js b/tests/baselines/reference/unusedLocalsInMethod2.js index e232b9bf263..9cf97e5e709 100644 --- a/tests/baselines/reference/unusedLocalsInMethod2.js +++ b/tests/baselines/reference/unusedLocalsInMethod2.js @@ -2,7 +2,6 @@ class greeter { public function1() { var x, y = 10; - y++; } } @@ -12,7 +11,6 @@ var greeter = /** @class */ (function () { } greeter.prototype.function1 = function () { var x, y = 10; - y++; }; return greeter; }()); diff --git a/tests/baselines/reference/unusedLocalsInMethod2.symbols b/tests/baselines/reference/unusedLocalsInMethod2.symbols index e7a6aa2ad77..25d8d5166bb 100644 --- a/tests/baselines/reference/unusedLocalsInMethod2.symbols +++ b/tests/baselines/reference/unusedLocalsInMethod2.symbols @@ -7,9 +7,6 @@ class greeter { var x, y = 10; >x : Symbol(x, Decl(unusedLocalsInMethod2.ts, 2, 11)) ->y : Symbol(y, Decl(unusedLocalsInMethod2.ts, 2, 14)) - - y++; >y : Symbol(y, Decl(unusedLocalsInMethod2.ts, 2, 14)) } } diff --git a/tests/baselines/reference/unusedLocalsInMethod2.types b/tests/baselines/reference/unusedLocalsInMethod2.types index f0ab7fe7154..36efb0d5275 100644 --- a/tests/baselines/reference/unusedLocalsInMethod2.types +++ b/tests/baselines/reference/unusedLocalsInMethod2.types @@ -9,9 +9,5 @@ class greeter { >x : any >y : number >10 : 10 - - y++; ->y++ : number ->y : number } } diff --git a/tests/baselines/reference/unusedParameterProperty1.errors.txt b/tests/baselines/reference/unusedParameterProperty1.errors.txt index ba9bb4af3ae..828fd78d2c6 100644 --- a/tests/baselines/reference/unusedParameterProperty1.errors.txt +++ b/tests/baselines/reference/unusedParameterProperty1.errors.txt @@ -10,7 +10,6 @@ tests/cases/compiler/unusedParameterProperty1.ts(3,13): error TS6133: 'foge' is let foge = used; ~~~~ !!! error TS6133: 'foge' is declared but its value is never read. - foge += ""; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParameterProperty1.js b/tests/baselines/reference/unusedParameterProperty1.js index 424235247f8..4b942acc44c 100644 --- a/tests/baselines/reference/unusedParameterProperty1.js +++ b/tests/baselines/reference/unusedParameterProperty1.js @@ -2,7 +2,6 @@ class A { constructor(private used: string) { let foge = used; - foge += ""; } } @@ -12,7 +11,6 @@ var A = /** @class */ (function () { function A(used) { this.used = used; var foge = used; - foge += ""; } return A; }()); diff --git a/tests/baselines/reference/unusedParameterProperty1.symbols b/tests/baselines/reference/unusedParameterProperty1.symbols index fc2a07903e0..c66aa4dcd89 100644 --- a/tests/baselines/reference/unusedParameterProperty1.symbols +++ b/tests/baselines/reference/unusedParameterProperty1.symbols @@ -8,9 +8,6 @@ class A { let foge = used; >foge : Symbol(foge, Decl(unusedParameterProperty1.ts, 2, 11)) >used : Symbol(used, Decl(unusedParameterProperty1.ts, 1, 16)) - - foge += ""; ->foge : Symbol(foge, Decl(unusedParameterProperty1.ts, 2, 11)) } } diff --git a/tests/baselines/reference/unusedParameterProperty1.types b/tests/baselines/reference/unusedParameterProperty1.types index 45599db733b..a4361af1a90 100644 --- a/tests/baselines/reference/unusedParameterProperty1.types +++ b/tests/baselines/reference/unusedParameterProperty1.types @@ -8,11 +8,6 @@ class A { let foge = used; >foge : string >used : string - - foge += ""; ->foge += "" : string ->foge : string ->"" : "" } } diff --git a/tests/baselines/reference/unusedParameterProperty2.errors.txt b/tests/baselines/reference/unusedParameterProperty2.errors.txt index 853b459c772..f87b7bed63e 100644 --- a/tests/baselines/reference/unusedParameterProperty2.errors.txt +++ b/tests/baselines/reference/unusedParameterProperty2.errors.txt @@ -10,7 +10,6 @@ tests/cases/compiler/unusedParameterProperty2.ts(3,13): error TS6133: 'foge' is let foge = used; ~~~~ !!! error TS6133: 'foge' is declared but its value is never read. - foge += ""; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedParameterProperty2.js b/tests/baselines/reference/unusedParameterProperty2.js index f5533288237..27a1e24944e 100644 --- a/tests/baselines/reference/unusedParameterProperty2.js +++ b/tests/baselines/reference/unusedParameterProperty2.js @@ -2,7 +2,6 @@ class A { constructor(private used) { let foge = used; - foge += ""; } } @@ -12,7 +11,6 @@ var A = /** @class */ (function () { function A(used) { this.used = used; var foge = used; - foge += ""; } return A; }()); diff --git a/tests/baselines/reference/unusedParameterProperty2.symbols b/tests/baselines/reference/unusedParameterProperty2.symbols index 38055b76b5e..dfa84f22296 100644 --- a/tests/baselines/reference/unusedParameterProperty2.symbols +++ b/tests/baselines/reference/unusedParameterProperty2.symbols @@ -8,9 +8,6 @@ class A { let foge = used; >foge : Symbol(foge, Decl(unusedParameterProperty2.ts, 2, 11)) >used : Symbol(used, Decl(unusedParameterProperty2.ts, 1, 16)) - - foge += ""; ->foge : Symbol(foge, Decl(unusedParameterProperty2.ts, 2, 11)) } } diff --git a/tests/baselines/reference/unusedParameterProperty2.types b/tests/baselines/reference/unusedParameterProperty2.types index a3105889f60..29a18e88b5f 100644 --- a/tests/baselines/reference/unusedParameterProperty2.types +++ b/tests/baselines/reference/unusedParameterProperty2.types @@ -8,11 +8,6 @@ class A { let foge = used; >foge : any >used : any - - foge += ""; ->foge += "" : string ->foge : any ->"" : "" } } diff --git a/tests/baselines/reference/unusedPrivateMembers.errors.txt b/tests/baselines/reference/unusedPrivateMembers.errors.txt index 3c8798d5ebe..21f5c07e976 100644 --- a/tests/baselines/reference/unusedPrivateMembers.errors.txt +++ b/tests/baselines/reference/unusedPrivateMembers.errors.txt @@ -64,7 +64,6 @@ tests/cases/compiler/unusedPrivateMembers.ts(56,13): error TS6133: 'b' is declar public test() { var x = new Test6(); x.a++; - x.b++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMembers.js b/tests/baselines/reference/unusedPrivateMembers.js index 999388416b7..69efbc0cd62 100644 --- a/tests/baselines/reference/unusedPrivateMembers.js +++ b/tests/baselines/reference/unusedPrivateMembers.js @@ -59,7 +59,6 @@ class Test6 { public test() { var x = new Test6(); x.a++; - x.b++; } } @@ -144,7 +143,6 @@ var Test6 = /** @class */ (function () { Test6.prototype.test = function () { var x = new Test6(); x.a++; - x.b++; }; return Test6; }()); diff --git a/tests/baselines/reference/unusedPrivateMembers.symbols b/tests/baselines/reference/unusedPrivateMembers.symbols index 5bd2d8246a7..f4afbcc2722 100644 --- a/tests/baselines/reference/unusedPrivateMembers.symbols +++ b/tests/baselines/reference/unusedPrivateMembers.symbols @@ -139,11 +139,6 @@ class Test6 { >x.a : Symbol(Test6.a, Decl(unusedPrivateMembers.ts, 48, 13), Decl(unusedPrivateMembers.ts, 51, 5)) >x : Symbol(x, Decl(unusedPrivateMembers.ts, 58, 11)) >a : Symbol(Test6.a, Decl(unusedPrivateMembers.ts, 48, 13), Decl(unusedPrivateMembers.ts, 51, 5)) - - x.b++; ->x.b : Symbol(Test6.b, Decl(unusedPrivateMembers.ts, 54, 5)) ->x : Symbol(x, Decl(unusedPrivateMembers.ts, 58, 11)) ->b : Symbol(Test6.b, Decl(unusedPrivateMembers.ts, 54, 5)) } } diff --git a/tests/baselines/reference/unusedPrivateMembers.types b/tests/baselines/reference/unusedPrivateMembers.types index 2446eb20ee4..91d740dc795 100644 --- a/tests/baselines/reference/unusedPrivateMembers.types +++ b/tests/baselines/reference/unusedPrivateMembers.types @@ -149,12 +149,6 @@ class Test6 { >x.a : number >x : Test6 >a : number - - x.b++; ->x.b++ : number ->x.b : number ->x : Test6 ->b : number } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt index 110155a2734..e88c6059fc0 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.errors.txt @@ -10,6 +10,5 @@ tests/cases/compiler/unusedPrivateMethodInClass1.ts(3,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.js b/tests/baselines/reference/unusedPrivateMethodInClass1.js index 209f6611186..3324fcb5f1c 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass1.js +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.js @@ -2,7 +2,6 @@ class greeter { private function1() { var y = 10; - y++; } } @@ -12,7 +11,6 @@ var greeter = /** @class */ (function () { } greeter.prototype.function1 = function () { var y = 10; - y++; }; return greeter; }()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.symbols b/tests/baselines/reference/unusedPrivateMethodInClass1.symbols index 57f545ab805..8cc3ccdf0c2 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass1.symbols +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.symbols @@ -7,8 +7,5 @@ class greeter { var y = 10; >y : Symbol(y, Decl(unusedPrivateMethodInClass1.ts, 2, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass1.ts, 2, 11)) } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass1.types b/tests/baselines/reference/unusedPrivateMethodInClass1.types index d513e99ddfc..50e6ced1c74 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass1.types +++ b/tests/baselines/reference/unusedPrivateMethodInClass1.types @@ -8,9 +8,5 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt index 16873219a6c..bedb846bbd9 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/unusedPrivateMethodInClass2.ts(2,13): error TS6133: 'function1' is declared but its value is never read. tests/cases/compiler/unusedPrivateMethodInClass2.ts(3,13): error TS6133: 'y' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass2.ts(7,13): error TS6133: 'function2' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass2.ts(8,13): error TS6133: 'y' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass2.ts(6,13): error TS6133: 'function2' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass2.ts(7,13): error TS6133: 'y' is declared but its value is never read. ==== tests/cases/compiler/unusedPrivateMethodInClass2.ts (4 errors) ==== @@ -12,7 +12,6 @@ tests/cases/compiler/unusedPrivateMethodInClass2.ts(8,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } private function2() { @@ -21,6 +20,5 @@ tests/cases/compiler/unusedPrivateMethodInClass2.ts(8,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.js b/tests/baselines/reference/unusedPrivateMethodInClass2.js index 9095b3be772..9ec217c94a4 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass2.js +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.js @@ -2,12 +2,10 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } } @@ -17,11 +15,9 @@ var greeter = /** @class */ (function () { } greeter.prototype.function1 = function () { var y = 10; - y++; }; greeter.prototype.function2 = function () { var y = 10; - y++; }; return greeter; }()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.symbols b/tests/baselines/reference/unusedPrivateMethodInClass2.symbols index a7b2101c513..b76b7e62936 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass2.symbols +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.symbols @@ -7,18 +7,12 @@ class greeter { var y = 10; >y : Symbol(y, Decl(unusedPrivateMethodInClass2.ts, 2, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass2.ts, 2, 11)) } private function2() { ->function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass2.ts, 4, 5)) +>function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass2.ts, 3, 5)) var y = 10; ->y : Symbol(y, Decl(unusedPrivateMethodInClass2.ts, 7, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass2.ts, 7, 11)) +>y : Symbol(y, Decl(unusedPrivateMethodInClass2.ts, 6, 11)) } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass2.types b/tests/baselines/reference/unusedPrivateMethodInClass2.types index 58d8fb1b244..aa077b13a65 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass2.types +++ b/tests/baselines/reference/unusedPrivateMethodInClass2.types @@ -8,10 +8,6 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } private function2() { @@ -20,9 +16,5 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt index 492492836d0..9674dcb86cb 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.errors.txt @@ -1,8 +1,8 @@ tests/cases/compiler/unusedPrivateMethodInClass3.ts(2,13): error TS6133: 'function1' is declared but its value is never read. tests/cases/compiler/unusedPrivateMethodInClass3.ts(3,13): error TS6133: 'y' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass3.ts(7,13): error TS6133: 'function2' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass3.ts(8,13): error TS6133: 'y' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass3.ts(13,13): error TS6133: 'y' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass3.ts(6,13): error TS6133: 'function2' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass3.ts(7,13): error TS6133: 'y' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass3.ts(11,13): error TS6133: 'y' is declared but its value is never read. ==== tests/cases/compiler/unusedPrivateMethodInClass3.ts (5 errors) ==== @@ -13,7 +13,6 @@ tests/cases/compiler/unusedPrivateMethodInClass3.ts(13,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } private function2() { @@ -22,13 +21,11 @@ tests/cases/compiler/unusedPrivateMethodInClass3.ts(13,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } public function3() { var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.js b/tests/baselines/reference/unusedPrivateMethodInClass3.js index 588ca2162ae..c2cb06ac8fd 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass3.js +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.js @@ -2,17 +2,14 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } public function3() { var y = 10; - y++; } } @@ -22,15 +19,12 @@ var greeter = /** @class */ (function () { } greeter.prototype.function1 = function () { var y = 10; - y++; }; greeter.prototype.function2 = function () { var y = 10; - y++; }; greeter.prototype.function3 = function () { var y = 10; - y++; }; return greeter; }()); diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.symbols b/tests/baselines/reference/unusedPrivateMethodInClass3.symbols index e01c2b3f8d6..eef72c12e06 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass3.symbols +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.symbols @@ -7,28 +7,19 @@ class greeter { var y = 10; >y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 2, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 2, 11)) } private function2() { ->function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass3.ts, 4, 5)) +>function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass3.ts, 3, 5)) var y = 10; ->y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 7, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 7, 11)) +>y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 6, 11)) } public function3() { ->function3 : Symbol(greeter.function3, Decl(unusedPrivateMethodInClass3.ts, 9, 5)) +>function3 : Symbol(greeter.function3, Decl(unusedPrivateMethodInClass3.ts, 7, 5)) var y = 10; ->y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 12, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 12, 11)) +>y : Symbol(y, Decl(unusedPrivateMethodInClass3.ts, 10, 11)) } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass3.types b/tests/baselines/reference/unusedPrivateMethodInClass3.types index 880e6a718c6..d4e0690aff8 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass3.types +++ b/tests/baselines/reference/unusedPrivateMethodInClass3.types @@ -8,10 +8,6 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } private function2() { @@ -20,10 +16,6 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } public function3() { @@ -32,9 +24,5 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt b/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt index bcf8a5d25c7..f1011e3d3c7 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.errors.txt @@ -1,7 +1,7 @@ tests/cases/compiler/unusedPrivateMethodInClass4.ts(2,13): error TS6133: 'function1' is declared but its value is never read. tests/cases/compiler/unusedPrivateMethodInClass4.ts(3,13): error TS6133: 'y' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass4.ts(8,13): error TS6133: 'y' is declared but its value is never read. -tests/cases/compiler/unusedPrivateMethodInClass4.ts(13,13): error TS6133: 'y' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass4.ts(7,13): error TS6133: 'y' is declared but its value is never read. +tests/cases/compiler/unusedPrivateMethodInClass4.ts(11,13): error TS6133: 'y' is declared but its value is never read. ==== tests/cases/compiler/unusedPrivateMethodInClass4.ts (4 errors) ==== @@ -12,21 +12,18 @@ tests/cases/compiler/unusedPrivateMethodInClass4.ts(13,13): error TS6133: 'y' is var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } private function2() { var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; } public function3() { var y = 10; ~ !!! error TS6133: 'y' is declared but its value is never read. - y++; this.function2(); } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.js b/tests/baselines/reference/unusedPrivateMethodInClass4.js index 2bad875fdca..9ecf9dba81a 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass4.js +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.js @@ -2,17 +2,14 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } public function3() { var y = 10; - y++; this.function2(); } } @@ -23,15 +20,12 @@ var greeter = /** @class */ (function () { } greeter.prototype.function1 = function () { var y = 10; - y++; }; greeter.prototype.function2 = function () { var y = 10; - y++; }; greeter.prototype.function3 = function () { var y = 10; - y++; this.function2(); }; return greeter; diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.symbols b/tests/baselines/reference/unusedPrivateMethodInClass4.symbols index f317f26aad9..75efe5bed56 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass4.symbols +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.symbols @@ -7,33 +7,24 @@ class greeter { var y = 10; >y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 2, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 2, 11)) } private function2() { ->function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 4, 5)) +>function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 3, 5)) var y = 10; ->y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 7, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 7, 11)) +>y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 6, 11)) } public function3() { ->function3 : Symbol(greeter.function3, Decl(unusedPrivateMethodInClass4.ts, 9, 5)) +>function3 : Symbol(greeter.function3, Decl(unusedPrivateMethodInClass4.ts, 7, 5)) var y = 10; ->y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 12, 11)) - - y++; ->y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 12, 11)) +>y : Symbol(y, Decl(unusedPrivateMethodInClass4.ts, 10, 11)) this.function2(); ->this.function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 4, 5)) +>this.function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 3, 5)) >this : Symbol(greeter, Decl(unusedPrivateMethodInClass4.ts, 0, 0)) ->function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 4, 5)) +>function2 : Symbol(greeter.function2, Decl(unusedPrivateMethodInClass4.ts, 3, 5)) } } diff --git a/tests/baselines/reference/unusedPrivateMethodInClass4.types b/tests/baselines/reference/unusedPrivateMethodInClass4.types index 0fd21477d5b..e9033362e16 100644 --- a/tests/baselines/reference/unusedPrivateMethodInClass4.types +++ b/tests/baselines/reference/unusedPrivateMethodInClass4.types @@ -8,10 +8,6 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } private function2() { @@ -20,10 +16,6 @@ class greeter { var y = 10; >y : number >10 : 10 - - y++; ->y++ : number ->y : number } public function3() { @@ -33,10 +25,6 @@ class greeter { >y : number >10 : 10 - y++; ->y++ : number ->y : number - this.function2(); >this.function2() : void >this.function2 : () => void diff --git a/tests/baselines/reference/unusedSwitchStatement.errors.txt b/tests/baselines/reference/unusedSwitchStatement.errors.txt index fbb6212ca3e..f36b9db91db 100644 --- a/tests/baselines/reference/unusedSwitchStatement.errors.txt +++ b/tests/baselines/reference/unusedSwitchStatement.errors.txt @@ -38,5 +38,5 @@ tests/cases/compiler/unusedSwitchStatement.ts(16,10): error TS2678: Type '1' is case 1: ~ !!! error TS2678: Type '1' is not comparable to type '2'. - x++; + x=1; } \ No newline at end of file diff --git a/tests/baselines/reference/unusedSwitchStatement.js b/tests/baselines/reference/unusedSwitchStatement.js index 83fdefba8ad..9900a9de4a6 100644 --- a/tests/baselines/reference/unusedSwitchStatement.js +++ b/tests/baselines/reference/unusedSwitchStatement.js @@ -15,7 +15,7 @@ switch (2) { case 0: let x; case 1: - x++; + x=1; } //// [unusedSwitchStatement.js] @@ -33,5 +33,5 @@ switch (2) { case 0: var x = void 0; case 1: - x++; + x = 1; } diff --git a/tests/baselines/reference/unusedSwitchStatement.symbols b/tests/baselines/reference/unusedSwitchStatement.symbols index 87a4f02aa35..4b935a27bec 100644 --- a/tests/baselines/reference/unusedSwitchStatement.symbols +++ b/tests/baselines/reference/unusedSwitchStatement.symbols @@ -22,6 +22,6 @@ switch (2) { >x : Symbol(x, Decl(unusedSwitchStatement.ts, 14, 11)) case 1: - x++; + x=1; >x : Symbol(x, Decl(unusedSwitchStatement.ts, 14, 11)) } diff --git a/tests/baselines/reference/unusedSwitchStatement.types b/tests/baselines/reference/unusedSwitchStatement.types index 052feb82560..cae2440da1b 100644 --- a/tests/baselines/reference/unusedSwitchStatement.types +++ b/tests/baselines/reference/unusedSwitchStatement.types @@ -36,7 +36,8 @@ switch (2) { case 1: >1 : 1 - x++; ->x++ : number + x=1; +>x=1 : 1 >x : any +>1 : 1 } diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt b/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt index 1fa2e52b3f3..b6a6441534a 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt +++ b/tests/baselines/reference/unusedVariablesinBlocks1.errors.txt @@ -11,6 +11,5 @@ tests/cases/compiler/unusedVariablesinBlocks1.ts(4,13): error TS6133: 'x' is dec let x = 11; ~ !!! error TS6133: 'x' is declared but its value is never read. - x++; } } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.js b/tests/baselines/reference/unusedVariablesinBlocks1.js index 6e787666634..7fdfa71c948 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks1.js +++ b/tests/baselines/reference/unusedVariablesinBlocks1.js @@ -3,7 +3,6 @@ function f1 () { let x = 10; { let x = 11; - x++; } } @@ -12,6 +11,5 @@ function f1() { var x = 10; { var x_1 = 11; - x_1++; } } diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.symbols b/tests/baselines/reference/unusedVariablesinBlocks1.symbols index dad094d1e6a..ea0683a3efe 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks1.symbols +++ b/tests/baselines/reference/unusedVariablesinBlocks1.symbols @@ -7,8 +7,5 @@ function f1 () { { let x = 11; >x : Symbol(x, Decl(unusedVariablesinBlocks1.ts, 3, 11)) - - x++; ->x : Symbol(x, Decl(unusedVariablesinBlocks1.ts, 3, 11)) } } diff --git a/tests/baselines/reference/unusedVariablesinBlocks1.types b/tests/baselines/reference/unusedVariablesinBlocks1.types index b64cace8941..ebca57c460a 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks1.types +++ b/tests/baselines/reference/unusedVariablesinBlocks1.types @@ -9,9 +9,5 @@ function f1 () { let x = 11; >x : number >11 : 11 - - x++; ->x++ : number ->x : number } } diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt b/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt index f9c83abca18..eeefc0a5525 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt +++ b/tests/baselines/reference/unusedVariablesinBlocks2.errors.txt @@ -12,5 +12,4 @@ tests/cases/compiler/unusedVariablesinBlocks2.ts(4,13): error TS6133: 'x' is dec ~ !!! error TS6133: 'x' is declared but its value is never read. } - x++; } \ No newline at end of file diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.js b/tests/baselines/reference/unusedVariablesinBlocks2.js index a784150bfdb..c66d014e3b8 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks2.js +++ b/tests/baselines/reference/unusedVariablesinBlocks2.js @@ -4,7 +4,6 @@ function f1 () { { let x = 11; } - x++; } //// [unusedVariablesinBlocks2.js] @@ -13,5 +12,4 @@ function f1() { { var x_1 = 11; } - x++; } diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.symbols b/tests/baselines/reference/unusedVariablesinBlocks2.symbols index 0e46a80b53c..4d15da32109 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks2.symbols +++ b/tests/baselines/reference/unusedVariablesinBlocks2.symbols @@ -8,6 +8,4 @@ function f1 () { let x = 11; >x : Symbol(x, Decl(unusedVariablesinBlocks2.ts, 3, 11)) } - x++; ->x : Symbol(x, Decl(unusedVariablesinBlocks2.ts, 1, 7)) } diff --git a/tests/baselines/reference/unusedVariablesinBlocks2.types b/tests/baselines/reference/unusedVariablesinBlocks2.types index 57c4c7af1a4..dddf634de83 100644 --- a/tests/baselines/reference/unusedVariablesinBlocks2.types +++ b/tests/baselines/reference/unusedVariablesinBlocks2.types @@ -10,7 +10,4 @@ function f1 () { >x : number >11 : 11 } - x++; ->x++ : number ->x : number } diff --git a/tests/cases/compiler/getterSetterSubtypeAssignment.ts b/tests/cases/compiler/getterSetterSubtypeAssignment.ts new file mode 100644 index 00000000000..60c69c3c4c5 --- /dev/null +++ b/tests/cases/compiler/getterSetterSubtypeAssignment.ts @@ -0,0 +1,89 @@ +// @target: es2015 +// @strictNullChecks: true +// @noImplicitThis: true + +class NumberOrUndefined { + _x: number | undefined; + get x(): number { return this._x ?? 0; } + set x(value: number | undefined) { this._x = value; } + + additionAssignment() { + this.x += 1; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrUndefined = new NumberOrUndefined(); +numberOrUndefined.x += 1; +numberOrUndefined.x -= 1; +numberOrUndefined.x *= 1; +numberOrUndefined.x /= 1; + +class NumberOrString { + _x: number | string = 0; + get x(): number { return typeof this._x === 'number' ? this._x : Number(this._x); } + set x(value: number | string) { this._x = value; } + + additionAssignmentNumber() { + this.x += 1; + } + additionAssignmentString() { + this.x += '1'; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrString = new NumberOrString(); +numberOrString.x += 1; +numberOrString.x += '1'; +numberOrString.x -= 1; +numberOrString.x *= 1; +numberOrString.x /= 1; + +type Foo = { bar: number; }; +class NumberOrObject { + _x: number | Foo = 0; + get x(): number { return typeof this._x === 'number' ? this._x : this._x.bar; } + set x(value: number | Foo) { this._x = value; } + + additionAssignment() { + this.x += 1; + } + + subtractionAssignment() { + this.x -= 1; + } + + multiplicationAssignment() { + this.x *= 1; + } + + divisionAssignment() { + this.x /= 1; + } +} +const numberOrObject = new NumberOrObject(); +numberOrObject.x += 1; +numberOrObject.x -= 1; +numberOrObject.x *= 1; +numberOrObject.x /= 1; \ No newline at end of file diff --git a/tests/cases/compiler/noUnusedLocals_writeOnly.ts b/tests/cases/compiler/noUnusedLocals_writeOnly.ts index 8d2de0d517c..b4fa4a2892b 100644 --- a/tests/cases/compiler/noUnusedLocals_writeOnly.ts +++ b/tests/cases/compiler/noUnusedLocals_writeOnly.ts @@ -5,8 +5,6 @@ function f(x = 0, b = false) { // None of these statements read from 'x', so it will be marked unused. x = 1; - x++; - x /= 2; ([x] = [1]); ({ x } = { x: 1 }); ({ x: x } = { x: 1 }); diff --git a/tests/cases/compiler/unusedLocalsInMethod2.ts b/tests/cases/compiler/unusedLocalsInMethod2.ts index a376e6de0ac..a28387fc283 100644 --- a/tests/cases/compiler/unusedLocalsInMethod2.ts +++ b/tests/cases/compiler/unusedLocalsInMethod2.ts @@ -4,6 +4,5 @@ class greeter { public function1() { var x, y = 10; - y++; } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedParameterProperty1.ts b/tests/cases/compiler/unusedParameterProperty1.ts index 61c4374c60a..03250baf421 100644 --- a/tests/cases/compiler/unusedParameterProperty1.ts +++ b/tests/cases/compiler/unusedParameterProperty1.ts @@ -4,6 +4,5 @@ class A { constructor(private used: string) { let foge = used; - foge += ""; } } diff --git a/tests/cases/compiler/unusedParameterProperty2.ts b/tests/cases/compiler/unusedParameterProperty2.ts index b9e05fbc967..4dc3c5d2dbf 100644 --- a/tests/cases/compiler/unusedParameterProperty2.ts +++ b/tests/cases/compiler/unusedParameterProperty2.ts @@ -4,6 +4,5 @@ class A { constructor(private used) { let foge = used; - foge += ""; } } diff --git a/tests/cases/compiler/unusedPrivateMembers.ts b/tests/cases/compiler/unusedPrivateMembers.ts index 72d84d55605..034446a63a0 100644 --- a/tests/cases/compiler/unusedPrivateMembers.ts +++ b/tests/cases/compiler/unusedPrivateMembers.ts @@ -62,6 +62,5 @@ class Test6 { public test() { var x = new Test6(); x.a++; - x.b++; } } diff --git a/tests/cases/compiler/unusedPrivateMethodInClass1.ts b/tests/cases/compiler/unusedPrivateMethodInClass1.ts index e31dec6033b..3aea3c38706 100644 --- a/tests/cases/compiler/unusedPrivateMethodInClass1.ts +++ b/tests/cases/compiler/unusedPrivateMethodInClass1.ts @@ -4,6 +4,5 @@ class greeter { private function1() { var y = 10; - y++; } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass2.ts b/tests/cases/compiler/unusedPrivateMethodInClass2.ts index 5039c265890..25ee3067c0f 100644 --- a/tests/cases/compiler/unusedPrivateMethodInClass2.ts +++ b/tests/cases/compiler/unusedPrivateMethodInClass2.ts @@ -4,11 +4,9 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass3.ts b/tests/cases/compiler/unusedPrivateMethodInClass3.ts index a35cd4512ec..0209d01036c 100644 --- a/tests/cases/compiler/unusedPrivateMethodInClass3.ts +++ b/tests/cases/compiler/unusedPrivateMethodInClass3.ts @@ -4,16 +4,13 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } public function3() { var y = 10; - y++; } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedPrivateMethodInClass4.ts b/tests/cases/compiler/unusedPrivateMethodInClass4.ts index 5e2741a12bc..9659d0d4196 100644 --- a/tests/cases/compiler/unusedPrivateMethodInClass4.ts +++ b/tests/cases/compiler/unusedPrivateMethodInClass4.ts @@ -4,17 +4,14 @@ class greeter { private function1() { var y = 10; - y++; } private function2() { var y = 10; - y++; } public function3() { var y = 10; - y++; this.function2(); } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedSwitchStatement.ts b/tests/cases/compiler/unusedSwitchStatement.ts index 53f93b913aa..90a2b62a926 100644 --- a/tests/cases/compiler/unusedSwitchStatement.ts +++ b/tests/cases/compiler/unusedSwitchStatement.ts @@ -17,5 +17,5 @@ switch (2) { case 0: let x; case 1: - x++; + x=1; } \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinBlocks1.ts b/tests/cases/compiler/unusedVariablesinBlocks1.ts index b937fbd8ac1..ca793e306b0 100644 --- a/tests/cases/compiler/unusedVariablesinBlocks1.ts +++ b/tests/cases/compiler/unusedVariablesinBlocks1.ts @@ -5,6 +5,5 @@ function f1 () { let x = 10; { let x = 11; - x++; } } \ No newline at end of file diff --git a/tests/cases/compiler/unusedVariablesinBlocks2.ts b/tests/cases/compiler/unusedVariablesinBlocks2.ts index 248e6302cd0..ca793e306b0 100644 --- a/tests/cases/compiler/unusedVariablesinBlocks2.ts +++ b/tests/cases/compiler/unusedVariablesinBlocks2.ts @@ -6,5 +6,4 @@ function f1 () { { let x = 11; } - x++; } \ No newline at end of file diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts deleted file mode 100644 index 5d6526a627a..00000000000 --- a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator1.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// - -// @noUnusedLocals: true -////function fn() { -//// let x = 1; -//// x++; -////} - -verify.codeFix({ - description: "Remove unused declaration for: 'x'", - newFileContent: -`function fn() { -}` -}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts deleted file mode 100644 index 5390baceeac..00000000000 --- a/tests/cases/fourslash/codeFixUnusedIdentifier_postfix_operator2.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// - -// @noUnusedLocals: true -////function fn() { -//// let x = 1; -//// x--; -////} - -verify.codeFix({ - description: "Remove unused declaration for: 'x'", - newFileContent: -`function fn() { -}` -}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts deleted file mode 100644 index b79d64686cd..00000000000 --- a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator1.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// - -// @noUnusedLocals: true -////function fn() { -//// let x = 1; -//// ++x; -////} - -verify.codeFix({ - description: "Remove unused declaration for: 'x'", - newFileContent: -`function fn() { -}` -}); diff --git a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts b/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts deleted file mode 100644 index fa5e437bccd..00000000000 --- a/tests/cases/fourslash/codeFixUnusedIdentifier_prefix_operator2.ts +++ /dev/null @@ -1,14 +0,0 @@ -/// - -// @noUnusedLocals: true -////function fn() { -//// let x = 1; -//// --x; -////} - -verify.codeFix({ - description: "Remove unused declaration for: 'x'", - newFileContent: -`function fn() { -}` -});