Accept baseline changes and complete fix for type assertion assignment issue

Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-07-25 18:57:55 +00:00
parent 1c4291ed96
commit 931430c335
2 changed files with 66 additions and 45 deletions

View File

@ -4780,51 +4780,51 @@ type AssignmentTarget =
| PostfixUnaryExpression
| ForInOrOfStatement;
function getAssignmentTarget(node: Node): AssignmentTarget | undefined {
let parent = node.parent;
while (true) {
switch (parent.kind) {
case SyntaxKind.BinaryExpression:
const binaryExpression = parent as BinaryExpression;
const binaryOperator = binaryExpression.operatorToken.kind;
return isAssignmentOperator(binaryOperator) && binaryExpression.left === node ? binaryExpression : undefined;
case SyntaxKind.PrefixUnaryExpression:
case SyntaxKind.PostfixUnaryExpression:
const unaryExpression = parent as PrefixUnaryExpression | PostfixUnaryExpression;
const unaryOperator = unaryExpression.operator;
return unaryOperator === SyntaxKind.PlusPlusToken || unaryOperator === SyntaxKind.MinusMinusToken ? unaryExpression : undefined;
case SyntaxKind.ForInStatement:
case SyntaxKind.ForOfStatement:
const forInOrOfStatement = parent as ForInOrOfStatement;
return forInOrOfStatement.initializer === node ? forInOrOfStatement : undefined;
case SyntaxKind.ParenthesizedExpression:
case SyntaxKind.ArrayLiteralExpression:
case SyntaxKind.SpreadElement:
case SyntaxKind.NonNullExpression:
case SyntaxKind.TypeAssertionExpression:
case SyntaxKind.AsExpression:
node = parent;
break;
case SyntaxKind.SpreadAssignment:
node = parent.parent;
break;
case SyntaxKind.ShorthandPropertyAssignment:
if ((parent as ShorthandPropertyAssignment).name !== node) {
return undefined;
}
node = parent.parent;
break;
case SyntaxKind.PropertyAssignment:
if ((parent as PropertyAssignment).name === node) {
return undefined;
}
node = parent.parent;
break;
default:
return undefined;
}
parent = node.parent;
}
function getAssignmentTarget(node: Node): AssignmentTarget | undefined {
let parent = node.parent;
while (true) {
switch (parent.kind) {
case SyntaxKind.BinaryExpression:
const binaryExpression = parent as BinaryExpression;
const binaryOperator = binaryExpression.operatorToken.kind;
return isAssignmentOperator(binaryOperator) && binaryExpression.left === node ? binaryExpression : undefined;
case SyntaxKind.PrefixUnaryExpression:
case SyntaxKind.PostfixUnaryExpression:
const unaryExpression = parent as PrefixUnaryExpression | PostfixUnaryExpression;
const unaryOperator = unaryExpression.operator;
return unaryOperator === SyntaxKind.PlusPlusToken || unaryOperator === SyntaxKind.MinusMinusToken ? unaryExpression : undefined;
case SyntaxKind.ForInStatement:
case SyntaxKind.ForOfStatement:
const forInOrOfStatement = parent as ForInOrOfStatement;
return forInOrOfStatement.initializer === node ? forInOrOfStatement : undefined;
case SyntaxKind.ParenthesizedExpression:
case SyntaxKind.ArrayLiteralExpression:
case SyntaxKind.SpreadElement:
case SyntaxKind.NonNullExpression:
case SyntaxKind.TypeAssertionExpression:
case SyntaxKind.AsExpression:
node = parent;
break;
case SyntaxKind.SpreadAssignment:
node = parent.parent;
break;
case SyntaxKind.ShorthandPropertyAssignment:
if ((parent as ShorthandPropertyAssignment).name !== node) {
return undefined;
}
node = parent.parent;
break;
case SyntaxKind.PropertyAssignment:
if ((parent as PropertyAssignment).name === node) {
return undefined;
}
node = parent.parent;
break;
default:
return undefined;
}
parent = node.parent;
}
}
/** @internal */

View File

@ -0,0 +1,21 @@
classNameReferencesInStaticElements.ts(12,2): error TS2629: Cannot assign to 'Foo' because it is a class.
==== classNameReferencesInStaticElements.ts (1 errors) ====
// https://github.com/microsoft/TypeScript/issues/54607
class Foo {
static { console.log(this, Foo) }
static x = () => { console.log(this, Foo) }
static y = function(this: unknown) { console.log(this, Foo) }
#x() { console.log(Foo); }
x() { this.#x(); }
}
const oldFoo = Foo;
(Foo as any) = null;
~~~
!!! error TS2629: Cannot assign to 'Foo' because it is a class.
oldFoo.x();
oldFoo.y();
new oldFoo().x();