Skip to content

Commit f646ec8

Browse files
authored
fix(40901): skip checking custom arguments name in a constructor (#40912)
1 parent 373b352 commit f646ec8

File tree

57 files changed

+1862
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1862
-1
lines changed

src/compiler/checker.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11709,7 +11709,7 @@ namespace ts {
1170911709
if (!node) return false;
1171011710
switch (node.kind) {
1171111711
case SyntaxKind.Identifier:
11712-
return (<Identifier>node).escapedText === "arguments" && isExpressionNode(node);
11712+
return (<Identifier>node).escapedText === argumentsSymbol.escapedName && getResolvedSymbol(<Identifier>node) === argumentsSymbol;
1171311713

1171411714
case SyntaxKind.PropertyDeclaration:
1171511715
case SyntaxKind.MethodDeclaration:
@@ -11718,6 +11718,10 @@ namespace ts {
1171811718
return (<NamedDeclaration>node).name!.kind === SyntaxKind.ComputedPropertyName
1171911719
&& traverse((<NamedDeclaration>node).name!);
1172011720

11721+
case SyntaxKind.PropertyAccessExpression:
11722+
case SyntaxKind.ElementAccessExpression:
11723+
return traverse((<PropertyAccessExpression | ElementAccessExpression>node).expression);
11724+
1172111725
default:
1172211726
return !nodeStartsNewLexicalEnvironment(node) && !isPartOfTypeNode(node) && !!forEachChild(node, traverse);
1172311727
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//// [a.js]
2+
class A {
3+
/**
4+
* Constructor
5+
*
6+
* @param {object} [foo={}]
7+
*/
8+
constructor(foo = {}) {
9+
/**
10+
* @type object
11+
*/
12+
this.arguments = foo;
13+
}
14+
}
15+
16+
17+
18+
19+
//// [a.d.ts]
20+
declare class A {
21+
/**
22+
* Constructor
23+
*
24+
* @param {object} [foo={}]
25+
*/
26+
constructor(foo?: object);
27+
/**
28+
* @type object
29+
*/
30+
arguments: object;
31+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== /a.js ===
2+
class A {
3+
>A : Symbol(A, Decl(a.js, 0, 0))
4+
5+
/**
6+
* Constructor
7+
*
8+
* @param {object} [foo={}]
9+
*/
10+
constructor(foo = {}) {
11+
>foo : Symbol(foo, Decl(a.js, 6, 13))
12+
13+
/**
14+
* @type object
15+
*/
16+
this.arguments = foo;
17+
>this.arguments : Symbol(A.arguments, Decl(a.js, 6, 24))
18+
>this : Symbol(A, Decl(a.js, 0, 0))
19+
>arguments : Symbol(A.arguments, Decl(a.js, 6, 24))
20+
>foo : Symbol(foo, Decl(a.js, 6, 13))
21+
}
22+
}
23+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== /a.js ===
2+
class A {
3+
>A : A
4+
5+
/**
6+
* Constructor
7+
*
8+
* @param {object} [foo={}]
9+
*/
10+
constructor(foo = {}) {
11+
>foo : any
12+
>{} : {}
13+
14+
/**
15+
* @type object
16+
*/
17+
this.arguments = foo;
18+
>this.arguments = foo : any
19+
>this.arguments : any
20+
>this : this
21+
>arguments : any
22+
>foo : any
23+
}
24+
}
25+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//// [a.js]
2+
class A {
3+
/**
4+
* Constructor
5+
*
6+
* @param {object} [foo={}]
7+
*/
8+
constructor(foo = {}) {
9+
/**
10+
* @type object
11+
*/
12+
this["arguments"] = foo;
13+
}
14+
}
15+
16+
17+
18+
19+
//// [a.d.ts]
20+
declare class A {
21+
/**
22+
* Constructor
23+
*
24+
* @param {object} [foo={}]
25+
*/
26+
constructor(foo?: object);
27+
/**
28+
* @type object
29+
*/
30+
arguments: object;
31+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
=== /a.js ===
2+
class A {
3+
>A : Symbol(A, Decl(a.js, 0, 0))
4+
5+
/**
6+
* Constructor
7+
*
8+
* @param {object} [foo={}]
9+
*/
10+
constructor(foo = {}) {
11+
>foo : Symbol(foo, Decl(a.js, 6, 13))
12+
13+
/**
14+
* @type object
15+
*/
16+
this["arguments"] = foo;
17+
>this : Symbol(A, Decl(a.js, 0, 0))
18+
>"arguments" : Symbol(A["arguments"], Decl(a.js, 6, 24))
19+
>foo : Symbol(foo, Decl(a.js, 6, 13))
20+
}
21+
}
22+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
=== /a.js ===
2+
class A {
3+
>A : A
4+
5+
/**
6+
* Constructor
7+
*
8+
* @param {object} [foo={}]
9+
*/
10+
constructor(foo = {}) {
11+
>foo : any
12+
>{} : {}
13+
14+
/**
15+
* @type object
16+
*/
17+
this["arguments"] = foo;
18+
>this["arguments"] = foo : any
19+
>this["arguments"] : any
20+
>this : this
21+
>"arguments" : "arguments"
22+
>foo : any
23+
}
24+
}
25+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//// [a.js]
2+
class A {
3+
get arguments() {
4+
return { bar: {} };
5+
}
6+
}
7+
8+
class B extends A {
9+
/**
10+
* Constructor
11+
*
12+
* @param {object} [foo={}]
13+
*/
14+
constructor(foo = {}) {
15+
super();
16+
17+
/**
18+
* @type object
19+
*/
20+
this.foo = foo;
21+
22+
/**
23+
* @type object
24+
*/
25+
this.bar = super.arguments.foo;
26+
}
27+
}
28+
29+
30+
31+
32+
//// [a.d.ts]
33+
declare class A {
34+
get arguments(): {
35+
bar: {};
36+
};
37+
}
38+
declare class B extends A {
39+
/**
40+
* Constructor
41+
*
42+
* @param {object} [foo={}]
43+
*/
44+
constructor(foo?: object);
45+
/**
46+
* @type object
47+
*/
48+
foo: object;
49+
/**
50+
* @type object
51+
*/
52+
bar: object;
53+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
=== /a.js ===
2+
class A {
3+
>A : Symbol(A, Decl(a.js, 0, 0))
4+
5+
get arguments() {
6+
>arguments : Symbol(A.arguments, Decl(a.js, 0, 9))
7+
8+
return { bar: {} };
9+
>bar : Symbol(bar, Decl(a.js, 2, 10))
10+
}
11+
}
12+
13+
class B extends A {
14+
>B : Symbol(B, Decl(a.js, 4, 1))
15+
>A : Symbol(A, Decl(a.js, 0, 0))
16+
17+
/**
18+
* Constructor
19+
*
20+
* @param {object} [foo={}]
21+
*/
22+
constructor(foo = {}) {
23+
>foo : Symbol(foo, Decl(a.js, 12, 13))
24+
25+
super();
26+
>super : Symbol(A, Decl(a.js, 0, 0))
27+
28+
/**
29+
* @type object
30+
*/
31+
this.foo = foo;
32+
>this.foo : Symbol(B.foo, Decl(a.js, 13, 10))
33+
>this : Symbol(B, Decl(a.js, 4, 1))
34+
>foo : Symbol(B.foo, Decl(a.js, 13, 10))
35+
>foo : Symbol(foo, Decl(a.js, 12, 13))
36+
37+
/**
38+
* @type object
39+
*/
40+
this.bar = super.arguments.foo;
41+
>this.bar : Symbol(B.bar, Decl(a.js, 18, 17))
42+
>this : Symbol(B, Decl(a.js, 4, 1))
43+
>bar : Symbol(B.bar, Decl(a.js, 18, 17))
44+
>super.arguments : Symbol(A.arguments, Decl(a.js, 0, 9))
45+
>super : Symbol(A, Decl(a.js, 0, 0))
46+
>arguments : Symbol(A.arguments, Decl(a.js, 0, 9))
47+
}
48+
}
49+
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
=== /a.js ===
2+
class A {
3+
>A : A
4+
5+
get arguments() {
6+
>arguments : { bar: {}; }
7+
8+
return { bar: {} };
9+
>{ bar: {} } : { bar: {}; }
10+
>bar : {}
11+
>{} : {}
12+
}
13+
}
14+
15+
class B extends A {
16+
>B : B
17+
>A : A
18+
19+
/**
20+
* Constructor
21+
*
22+
* @param {object} [foo={}]
23+
*/
24+
constructor(foo = {}) {
25+
>foo : any
26+
>{} : {}
27+
28+
super();
29+
>super() : void
30+
>super : typeof A
31+
32+
/**
33+
* @type object
34+
*/
35+
this.foo = foo;
36+
>this.foo = foo : any
37+
>this.foo : any
38+
>this : this
39+
>foo : any
40+
>foo : any
41+
42+
/**
43+
* @type object
44+
*/
45+
this.bar = super.arguments.foo;
46+
>this.bar = super.arguments.foo : any
47+
>this.bar : any
48+
>this : this
49+
>bar : any
50+
>super.arguments.foo : any
51+
>super.arguments : { bar: {}; }
52+
>super : A
53+
>arguments : { bar: {}; }
54+
>foo : any
55+
}
56+
}
57+

0 commit comments

Comments
 (0)