Skip to content

Commit 2ec60fa

Browse files
committed
CR feedback
1 parent 4138873 commit 2ec60fa

8 files changed

+56
-47
lines changed

src/compiler/checker.ts

+21-31
Original file line numberDiff line numberDiff line change
@@ -12899,49 +12899,39 @@ namespace ts {
1289912899
const instanceNames: Map<number> = {};
1290012900
const staticNames: Map<number> = {};
1290112901
for (const member of node.members) {
12902-
let memberName: string;
12903-
if (member.name) {
12904-
switch (member.name.kind) {
12905-
case SyntaxKind.StringLiteral:
12906-
case SyntaxKind.NumericLiteral:
12907-
case SyntaxKind.Identifier:
12908-
memberName = (member.name as LiteralExpression | Identifier).text;
12909-
break;
12910-
default:
12911-
continue;
12902+
if (member.kind === SyntaxKind.Constructor) {
12903+
for (const param of (member as ConstructorDeclaration).parameters) {
12904+
if (isParameterPropertyDeclaration(param)) {
12905+
addName(instanceNames, param.name, (param.name as Identifier).text, property);
12906+
}
1291212907
}
1291312908
}
12909+
else {
12910+
const static = forEach(member.modifiers, m => m.kind === SyntaxKind.StaticKeyword);
12911+
const names = static ? staticNames : instanceNames;
1291412912

12915-
const static = forEach(member.modifiers, m => m.kind === SyntaxKind.StaticKeyword);
12916-
const names = static ? staticNames : instanceNames;
12917-
switch (member.kind) {
12918-
case SyntaxKind.Constructor:
12919-
for (const param of (member as ConstructorDeclaration).parameters) {
12920-
if (isParameterPropertyDeclaration(param)) {
12921-
addName(names, param.name, (param.name as Identifier).text, property);
12922-
}
12923-
}
12924-
break;
12925-
12926-
case SyntaxKind.GetAccessor:
12927-
addName(names, member.name, memberName, getter);
12928-
break;
12913+
const memberName = member.name && getPropertyNameForPropertyNameNode(member.name);
12914+
switch (member.kind) {
12915+
case SyntaxKind.GetAccessor:
12916+
addName(names, member.name, memberName, getter);
12917+
break;
1292912918

12930-
case SyntaxKind.SetAccessor:
12931-
addName(names, member.name, memberName, setter);
12932-
break;
12919+
case SyntaxKind.SetAccessor:
12920+
addName(names, member.name, memberName, setter);
12921+
break;
1293312922

12934-
case SyntaxKind.PropertyDeclaration:
12935-
addName(names, member.name, memberName, property);
12936-
break;
12923+
case SyntaxKind.PropertyDeclaration:
12924+
addName(names, member.name, memberName, property);
12925+
break;
12926+
}
1293712927
}
1293812928
}
1293912929

1294012930
function addName(names: Map<number>, location: Node, name: string, meaning: number) {
1294112931
if (hasProperty(names, name)) {
1294212932
const prev = names[name];
1294312933
if (prev & meaning) {
12944-
error(location, Diagnostics.Duplicate_identifier_0, name);
12934+
error(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location));
1294512935
}
1294612936
else {
1294712937
names[name] = prev | meaning;

src/compiler/utilities.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1767,7 +1767,7 @@ namespace ts {
17671767
}
17681768

17691769
export function getPropertyNameForPropertyNameNode(name: DeclarationName): string {
1770-
if (name.kind === SyntaxKind.Identifier || name.kind === SyntaxKind.StringLiteral || name.kind === SyntaxKind.NumericLiteral) {
1770+
if (name.kind === SyntaxKind.Identifier || name.kind === SyntaxKind.StringLiteral || name.kind === SyntaxKind.NumericLiteral || name.kind === SyntaxKind.Parameter) {
17711771
return (<Identifier | LiteralExpression>name).text;
17721772
}
17731773
if (name.kind === SyntaxKind.ComputedPropertyName) {

tests/baselines/reference/constructSignatureWithAccessibilityModifiersOnParameters2.errors.txt

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,17): error TS2369: A parameter property is only allowed in a constructor implementation.
22
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(4,27): error TS2369: A parameter property is only allowed in a constructor implementation.
3-
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,24): error TS2300: Duplicate identifier 'x'.
4-
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(5,35): error TS2300: Duplicate identifier 'y'.
53
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,17): error TS2369: A parameter property is only allowed in a constructor implementation.
64
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(9,25): error TS2686: All declarations of 'x' must have identical modifiers.
7-
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,24): error TS2300: Duplicate identifier 'x'.
85
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(10,24): error TS2686: All declarations of 'x' must have identical modifiers.
96
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(14,17): error TS2369: A parameter property is only allowed in a constructor implementation.
107
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(19,10): error TS2369: A parameter property is only allowed in a constructor implementation.
@@ -17,7 +14,7 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur
1714
tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts(35,10): error TS2369: A parameter property is only allowed in a constructor implementation.
1815

1916

20-
==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts (17 errors) ====
17+
==== tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatureWithAccessibilityModifiersOnParameters2.ts (14 errors) ====
2118
// Parameter properties are not valid in overloads of constructors
2219

2320
class C {
@@ -27,10 +24,6 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur
2724
~~~~~~~~~
2825
!!! error TS2369: A parameter property is only allowed in a constructor implementation.
2926
constructor(public x, private y) { }
30-
~
31-
!!! error TS2300: Duplicate identifier 'x'.
32-
~
33-
!!! error TS2300: Duplicate identifier 'y'.
3427
}
3528

3629
class C2 {
@@ -41,8 +34,6 @@ tests/cases/conformance/types/objectTypeLiteral/callSignatures/constructSignatur
4134
!!! error TS2686: All declarations of 'x' must have identical modifiers.
4235
constructor(public x) { }
4336
~
44-
!!! error TS2300: Duplicate identifier 'x'.
45-
~
4637
!!! error TS2686: All declarations of 'x' must have identical modifiers.
4738
}
4839

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests/cases/compiler/duplicateIdentifierComputedName.ts(3,5): error TS2300: Duplicate identifier 'a'.
2+
3+
4+
==== tests/cases/compiler/duplicateIdentifierComputedName.ts (1 errors) ====
5+
class C {
6+
["a"]: string;
7+
["a"]: string;
8+
~~~~~
9+
!!! error TS2300: Duplicate identifier 'a'.
10+
}
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [duplicateIdentifierComputedName.ts]
2+
class C {
3+
["a"]: string;
4+
["a"]: string;
5+
}
6+
7+
8+
//// [duplicateIdentifierComputedName.js]
9+
var C = (function () {
10+
function C() {
11+
}
12+
return C;
13+
}());

tests/baselines/reference/parameterPropertyInConstructor2.errors.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
tests/cases/compiler/parameterPropertyInConstructor2.ts(3,5): error TS2394: Overload signature is not compatible with function implementation.
22
tests/cases/compiler/parameterPropertyInConstructor2.ts(3,17): error TS2369: A parameter property is only allowed in a constructor implementation.
3-
tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): error TS2300: Duplicate identifier 'names'.
43

54

6-
==== tests/cases/compiler/parameterPropertyInConstructor2.ts (3 errors) ====
5+
==== tests/cases/compiler/parameterPropertyInConstructor2.ts (2 errors) ====
76
module mod {
87
class Customers {
98
constructor(public names: string);
@@ -12,8 +11,6 @@ tests/cases/compiler/parameterPropertyInConstructor2.ts(4,24): error TS2300: Dup
1211
~~~~~~~~~~~~~~~~~~~~
1312
!!! error TS2369: A parameter property is only allowed in a constructor implementation.
1413
constructor(public names: string, public ages: number) {
15-
~~~~~
16-
!!! error TS2300: Duplicate identifier 'names'.
1714
}
1815
}
1916
}

tests/baselines/reference/symbolProperty44.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
tests/cases/conformance/es6/Symbols/symbolProperty44.ts(2,9): error TS2300: Duplicate identifier '[Symbol.hasInstance]'.
22
tests/cases/conformance/es6/Symbols/symbolProperty44.ts(5,9): error TS2300: Duplicate identifier '[Symbol.hasInstance]'.
3+
tests/cases/conformance/es6/Symbols/symbolProperty44.ts(5,9): error TS2300: Duplicate identifier '__@hasInstance'.
34

45

5-
==== tests/cases/conformance/es6/Symbols/symbolProperty44.ts (2 errors) ====
6+
==== tests/cases/conformance/es6/Symbols/symbolProperty44.ts (3 errors) ====
67
class C {
78
get [Symbol.hasInstance]() {
89
~~~~~~~~~~~~~~~~~~~~
@@ -12,6 +13,8 @@ tests/cases/conformance/es6/Symbols/symbolProperty44.ts(5,9): error TS2300: Dupl
1213
get [Symbol.hasInstance]() {
1314
~~~~~~~~~~~~~~~~~~~~
1415
!!! error TS2300: Duplicate identifier '[Symbol.hasInstance]'.
16+
~~~~~~~~~~~~~~~~~~~~
17+
!!! error TS2300: Duplicate identifier '__@hasInstance'.
1518
return "";
1619
}
1720
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class C {
2+
["a"]: string;
3+
["a"]: string;
4+
}

0 commit comments

Comments
 (0)