Skip to content

Commit 369eeb1

Browse files
authored
fix(49419): Referencing this through a variable causes "Rename Symbol" to misbehave in Javascript (#56540)
1 parent ca9cb7c commit 369eeb1

10 files changed

Lines changed: 42 additions & 12 deletions

src/compiler/checker.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46946,9 +46946,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4694646946
case AssignmentDeclarationKind.ExportsProperty:
4694746947
case AssignmentDeclarationKind.PrototypeProperty:
4694846948
return getSymbolOfNode(entityName.parent);
46949+
case AssignmentDeclarationKind.Property:
46950+
if (isPropertyAccessExpression(entityName.parent) && getLeftmostAccessExpression(entityName.parent) === entityName) {
46951+
return undefined;
46952+
}
46953+
// falls through
4694946954
case AssignmentDeclarationKind.ThisProperty:
4695046955
case AssignmentDeclarationKind.ModuleExports:
46951-
case AssignmentDeclarationKind.Property:
4695246956
return getSymbolOfDeclaration(entityName.parent.parent as BinaryExpression);
4695346957
}
4695446958
}

tests/baselines/reference/inferringClassMembersFromAssignments6.symbols

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ function Foonly() {
1010

1111
self.x = 1
1212
>self.x : Symbol(Foonly.x, Decl(inferringClassMembersFromAssignments6.js, 1, 19))
13-
>self : Symbol(Foonly.x, Decl(inferringClassMembersFromAssignments6.js, 1, 19))
13+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments6.js, 1, 7))
1414
>x : Symbol(Foonly.x, Decl(inferringClassMembersFromAssignments6.js, 1, 19))
1515

1616
self.m = function() {
1717
>self.m : Symbol(Foonly.m, Decl(inferringClassMembersFromAssignments6.js, 2, 14))
18-
>self : Symbol(Foonly.m, Decl(inferringClassMembersFromAssignments6.js, 2, 14))
18+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments6.js, 1, 7))
1919
>m : Symbol(Foonly.m, Decl(inferringClassMembersFromAssignments6.js, 2, 14))
2020

2121
console.log(self.x)
@@ -39,7 +39,7 @@ Foonly.prototype.mreal = function() {
3939

4040
self.y = 2
4141
>self.y : Symbol(Foonly.y, Decl(inferringClassMembersFromAssignments6.js, 8, 19))
42-
>self : Symbol(Foonly.y, Decl(inferringClassMembersFromAssignments6.js, 8, 19))
42+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments6.js, 8, 7))
4343
>y : Symbol(Foonly.y, Decl(inferringClassMembersFromAssignments6.js, 8, 19))
4444
}
4545
const foo = new Foonly()

tests/baselines/reference/inferringClassMembersFromAssignments7.symbols

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ class C {
1111

1212
self.x = 1
1313
>self.x : Symbol(C.x, Decl(inferringClassMembersFromAssignments7.js, 2, 23))
14-
>self : Symbol(C.x, Decl(inferringClassMembersFromAssignments7.js, 2, 23))
14+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments7.js, 2, 11))
1515
>x : Symbol(C.x, Decl(inferringClassMembersFromAssignments7.js, 2, 23))
1616

1717
self.m = function() {
1818
>self.m : Symbol(C.m, Decl(inferringClassMembersFromAssignments7.js, 3, 18))
19-
>self : Symbol(C.m, Decl(inferringClassMembersFromAssignments7.js, 3, 18))
19+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments7.js, 2, 11))
2020
>m : Symbol(C.m, Decl(inferringClassMembersFromAssignments7.js, 3, 18))
2121

2222
console.log(self.x)
@@ -37,7 +37,7 @@ class C {
3737

3838
self.y = 2
3939
>self.y : Symbol(C.y, Decl(inferringClassMembersFromAssignments7.js, 9, 23))
40-
>self : Symbol(C.y, Decl(inferringClassMembersFromAssignments7.js, 9, 23))
40+
>self : Symbol(self, Decl(inferringClassMembersFromAssignments7.js, 9, 11))
4141
>y : Symbol(C.y, Decl(inferringClassMembersFromAssignments7.js, 9, 23))
4242
}
4343
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// === findRenameLocations ===
2+
// === /a.js ===
3+
// function f() {
4+
// <|var /*RENAME*/[|fooRENAME|] = this;|>
5+
// <|[|fooRENAME|].x = 1;|>
6+
// }
7+
8+
9+
10+
// === findRenameLocations ===
11+
// === /a.js ===
12+
// function f() {
13+
// <|var [|fooRENAME|] = this;|>
14+
// /*RENAME*/<|[|fooRENAME|].x = 1;|>
15+
// }

tests/baselines/reference/typeFromPropertyAssignment10.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Outer.app.Application = (function () {
9393

9494
me.view = new Outer.app.SomeView();
9595
>me.view : Symbol(Application.view, Decl(application.js, 7, 22))
96-
>me : Symbol(Application.view, Decl(application.js, 7, 22))
96+
>me : Symbol(me, Decl(application.js, 7, 11))
9797
>view : Symbol(Application.view, Decl(application.js, 7, 22))
9898
>Outer.app.SomeView : Symbol(Outer.app.SomeView, Decl(someview.js, 0, 0))
9999
>Outer.app : Symbol(Outer.app, Decl(module.js, 0, 24), Decl(someview.js, 0, 6), Decl(someview.js, 6, 6), Decl(someview.js, 15, 6), Decl(application.js, 0, 6))

tests/baselines/reference/typeFromPropertyAssignment10_1.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Outer.app.Application = (function () {
9393

9494
me.view = new Outer.app.SomeView();
9595
>me.view : Symbol(Application.view, Decl(application.js, 7, 22))
96-
>me : Symbol(Application.view, Decl(application.js, 7, 22))
96+
>me : Symbol(me, Decl(application.js, 7, 11))
9797
>view : Symbol(Application.view, Decl(application.js, 7, 22))
9898
>Outer.app.SomeView : Symbol(Outer.app.SomeView, Decl(someview.js, 0, 0))
9999
>Outer.app : Symbol(Outer.app, Decl(module.js, 0, 24), Decl(someview.js, 0, 6), Decl(someview.js, 6, 6), Decl(someview.js, 15, 6), Decl(application.js, 0, 6))

tests/baselines/reference/typeFromPropertyAssignment40.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function Outer() {
1010

1111
self.y = 2
1212
>self.y : Symbol(Outer.y, Decl(typeFromPropertyAssignment40.js, 1, 19))
13-
>self : Symbol(Outer.y, Decl(typeFromPropertyAssignment40.js, 1, 19))
13+
>self : Symbol(self, Decl(typeFromPropertyAssignment40.js, 1, 7))
1414
>y : Symbol(Outer.y, Decl(typeFromPropertyAssignment40.js, 1, 19))
1515
}
1616
/** @type {Outer} */

tests/baselines/reference/typeFromPropertyAssignment9.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ my.predicate.query = function () {
4646

4747
me.property = false;
4848
>me.property : Symbol(query.property, Decl(a.js, 9, 18))
49-
>me : Symbol(query.property, Decl(a.js, 9, 18))
49+
>me : Symbol(me, Decl(a.js, 9, 7))
5050
>property : Symbol(query.property, Decl(a.js, 9, 18))
5151

5252
};

tests/baselines/reference/typeFromPropertyAssignment9_1.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ my.predicate.query = function () {
4646

4747
me.property = false;
4848
>me.property : Symbol(query.property, Decl(a.js, 9, 18))
49-
>me : Symbol(query.property, Decl(a.js, 9, 18))
49+
>me : Symbol(me, Decl(a.js, 9, 7))
5050
>property : Symbol(query.property, Decl(a.js, 9, 18))
5151

5252
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @allowJs: true
4+
// @Filename: /a.js
5+
////function f() {
6+
//// var /*1*/foo = this;
7+
//// /*2*/foo.x = 1;
8+
////}
9+
10+
goTo.file("/a.js")
11+
verify.baselineRename(["1", "2"]);

0 commit comments

Comments
 (0)