Skip to content

Commit 6ab5d97

Browse files
NaridaLmhegazy
authored andcommitted
Changed "Duplicate Identifier" to "enum cannot be merged..." (microsoft#18579)
* Changed "Duplicate Identifier" to "enum can only be merged..." when either declaration of the identifier is an enum. Partial (?) fix for microsoft#529 Not sure if the new test is necessary, all the cases seem to have been covered by others tests. * picked a nit
1 parent 2ff8fae commit 6ab5d97

18 files changed

+381
-57
lines changed

src/compiler/binder.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,10 @@ namespace ts {
393393
? Diagnostics.Cannot_redeclare_block_scoped_variable_0
394394
: Diagnostics.Duplicate_identifier_0;
395395

396+
if (symbol.flags & SymbolFlags.Enum || includes & SymbolFlags.Enum) {
397+
message = Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations;
398+
}
399+
396400
if (symbol.declarations && symbol.declarations.length) {
397401
// If the current node is a default export of some sort, then check if
398402
// there are any other default exports that we need to error on.

src/compiler/checker.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -863,8 +863,11 @@ namespace ts {
863863
error(getNameOfDeclaration(source.declarations[0]), Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity, symbolToString(target));
864864
}
865865
else {
866-
const message = target.flags & SymbolFlags.BlockScopedVariable || source.flags & SymbolFlags.BlockScopedVariable
867-
? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0;
866+
const message = target.flags & SymbolFlags.Enum || source.flags & SymbolFlags.Enum
867+
? Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations
868+
: target.flags & SymbolFlags.BlockScopedVariable || source.flags & SymbolFlags.BlockScopedVariable
869+
? Diagnostics.Cannot_redeclare_block_scoped_variable_0
870+
: Diagnostics.Duplicate_identifier_0;
868871
forEach(source.declarations, node => {
869872
error(getNameOfDeclaration(node) || node, message, symbolToString(source));
870873
});

src/compiler/diagnosticMessages.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1984,6 +1984,11 @@
19841984
"category": "Error",
19851985
"code": 2566
19861986
},
1987+
"Enum declarations can only merge with namespace or other enum declarations.": {
1988+
"category": "Error",
1989+
"code": 2567
1990+
},
1991+
19871992
"JSX element attributes type '{0}' may not be a union type.": {
19881993
"category": "Error",
19891994
"code": 2600

tests/baselines/reference/augmentedTypesClass.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
tests/cases/compiler/augmentedTypesClass.ts(2,7): error TS2300: Duplicate identifier 'c1'.
22
tests/cases/compiler/augmentedTypesClass.ts(3,5): error TS2300: Duplicate identifier 'c1'.
3-
tests/cases/compiler/augmentedTypesClass.ts(6,7): error TS2300: Duplicate identifier 'c4'.
4-
tests/cases/compiler/augmentedTypesClass.ts(7,6): error TS2300: Duplicate identifier 'c4'.
3+
tests/cases/compiler/augmentedTypesClass.ts(6,7): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
4+
tests/cases/compiler/augmentedTypesClass.ts(7,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
55

66

77
==== tests/cases/compiler/augmentedTypesClass.ts (4 errors) ====
@@ -16,7 +16,7 @@ tests/cases/compiler/augmentedTypesClass.ts(7,6): error TS2300: Duplicate identi
1616
//// class then enum
1717
class c4 { public foo() { } }
1818
~~
19-
!!! error TS2300: Duplicate identifier 'c4'.
19+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2020
enum c4 { One } // error
2121
~~
22-
!!! error TS2300: Duplicate identifier 'c4'.
22+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.

tests/baselines/reference/augmentedTypesClass2.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/augmentedTypesClass2.ts(16,7): error TS2300: Duplicate identifier 'c33'.
2-
tests/cases/compiler/augmentedTypesClass2.ts(21,6): error TS2300: Duplicate identifier 'c33'.
1+
tests/cases/compiler/augmentedTypesClass2.ts(16,7): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2+
tests/cases/compiler/augmentedTypesClass2.ts(21,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
33

44

55
==== tests/cases/compiler/augmentedTypesClass2.ts (2 errors) ====
@@ -20,14 +20,14 @@ tests/cases/compiler/augmentedTypesClass2.ts(21,6): error TS2300: Duplicate iden
2020
// class then enum
2121
class c33 {
2222
~~~
23-
!!! error TS2300: Duplicate identifier 'c33'.
23+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2424
foo() {
2525
return 1;
2626
}
2727
}
2828
enum c33 { One };
2929
~~~
30-
!!! error TS2300: Duplicate identifier 'c33'.
30+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3131

3232
// class then import
3333
class c44 {

tests/baselines/reference/augmentedTypesEnum.errors.txt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
tests/cases/compiler/augmentedTypesEnum.ts(2,6): error TS2300: Duplicate identifier 'e1111'.
2-
tests/cases/compiler/augmentedTypesEnum.ts(3,5): error TS2300: Duplicate identifier 'e1111'.
3-
tests/cases/compiler/augmentedTypesEnum.ts(6,6): error TS2300: Duplicate identifier 'e2'.
4-
tests/cases/compiler/augmentedTypesEnum.ts(7,10): error TS2300: Duplicate identifier 'e2'.
5-
tests/cases/compiler/augmentedTypesEnum.ts(9,6): error TS2300: Duplicate identifier 'e3'.
6-
tests/cases/compiler/augmentedTypesEnum.ts(10,5): error TS2300: Duplicate identifier 'e3'.
7-
tests/cases/compiler/augmentedTypesEnum.ts(13,6): error TS2300: Duplicate identifier 'e4'.
8-
tests/cases/compiler/augmentedTypesEnum.ts(14,7): error TS2300: Duplicate identifier 'e4'.
1+
tests/cases/compiler/augmentedTypesEnum.ts(2,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2+
tests/cases/compiler/augmentedTypesEnum.ts(3,5): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3+
tests/cases/compiler/augmentedTypesEnum.ts(6,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
4+
tests/cases/compiler/augmentedTypesEnum.ts(7,10): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
5+
tests/cases/compiler/augmentedTypesEnum.ts(9,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
6+
tests/cases/compiler/augmentedTypesEnum.ts(10,5): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
7+
tests/cases/compiler/augmentedTypesEnum.ts(13,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
8+
tests/cases/compiler/augmentedTypesEnum.ts(14,7): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
99
tests/cases/compiler/augmentedTypesEnum.ts(18,11): error TS2432: In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.
1010
tests/cases/compiler/augmentedTypesEnum.ts(20,12): error TS2300: Duplicate identifier 'One'.
1111
tests/cases/compiler/augmentedTypesEnum.ts(21,12): error TS2300: Duplicate identifier 'One'.
@@ -16,33 +16,33 @@ tests/cases/compiler/augmentedTypesEnum.ts(21,12): error TS2432: In an enum with
1616
// enum then var
1717
enum e1111 { One } // error
1818
~~~~~
19-
!!! error TS2300: Duplicate identifier 'e1111'.
19+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2020
var e1111 = 1; // error
2121
~~~~~
22-
!!! error TS2300: Duplicate identifier 'e1111'.
22+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2323

2424
// enum then function
2525
enum e2 { One } // error
2626
~~
27-
!!! error TS2300: Duplicate identifier 'e2'.
27+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2828
function e2() { } // error
2929
~~
30-
!!! error TS2300: Duplicate identifier 'e2'.
30+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3131

3232
enum e3 { One } // error
3333
~~
34-
!!! error TS2300: Duplicate identifier 'e3'.
34+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3535
var e3 = () => { } // error
3636
~~
37-
!!! error TS2300: Duplicate identifier 'e3'.
37+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3838

3939
// enum then class
4040
enum e4 { One } // error
4141
~~
42-
!!! error TS2300: Duplicate identifier 'e4'.
42+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
4343
class e4 { public foo() { } } // error
4444
~~
45-
!!! error TS2300: Duplicate identifier 'e4'.
45+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
4646

4747
// enum then enum
4848
enum e5 { One }

tests/baselines/reference/augmentedTypesEnum2.errors.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
tests/cases/compiler/augmentedTypesEnum2.ts(2,6): error TS2300: Duplicate identifier 'e1'.
2-
tests/cases/compiler/augmentedTypesEnum2.ts(4,11): error TS2300: Duplicate identifier 'e1'.
3-
tests/cases/compiler/augmentedTypesEnum2.ts(11,6): error TS2300: Duplicate identifier 'e2'.
4-
tests/cases/compiler/augmentedTypesEnum2.ts(12,7): error TS2300: Duplicate identifier 'e2'.
1+
tests/cases/compiler/augmentedTypesEnum2.ts(2,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2+
tests/cases/compiler/augmentedTypesEnum2.ts(4,11): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3+
tests/cases/compiler/augmentedTypesEnum2.ts(11,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
4+
tests/cases/compiler/augmentedTypesEnum2.ts(12,7): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
55

66

77
==== tests/cases/compiler/augmentedTypesEnum2.ts (4 errors) ====
88
// enum then interface
99
enum e1 { One } // error
1010
~~
11-
!!! error TS2300: Duplicate identifier 'e1'.
11+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
1212

1313
interface e1 { // error
1414
~~
15-
!!! error TS2300: Duplicate identifier 'e1'.
15+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
1616
foo(): void;
1717
}
1818

@@ -21,10 +21,10 @@ tests/cases/compiler/augmentedTypesEnum2.ts(12,7): error TS2300: Duplicate ident
2121
// enum then class
2222
enum e2 { One }; // error
2323
~~
24-
!!! error TS2300: Duplicate identifier 'e2'.
24+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2525
class e2 { // error
2626
~~
27-
!!! error TS2300: Duplicate identifier 'e2'.
27+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2828
foo() {
2929
return 1;
3030
}

tests/baselines/reference/augmentedTypesFunction.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ tests/cases/compiler/augmentedTypesFunction.ts(13,10): error TS2300: Duplicate i
88
tests/cases/compiler/augmentedTypesFunction.ts(14,7): error TS2300: Duplicate identifier 'y3'.
99
tests/cases/compiler/augmentedTypesFunction.ts(16,10): error TS2300: Duplicate identifier 'y3a'.
1010
tests/cases/compiler/augmentedTypesFunction.ts(17,7): error TS2300: Duplicate identifier 'y3a'.
11-
tests/cases/compiler/augmentedTypesFunction.ts(20,10): error TS2300: Duplicate identifier 'y4'.
12-
tests/cases/compiler/augmentedTypesFunction.ts(21,6): error TS2300: Duplicate identifier 'y4'.
11+
tests/cases/compiler/augmentedTypesFunction.ts(20,10): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
12+
tests/cases/compiler/augmentedTypesFunction.ts(21,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
1313

1414

1515
==== tests/cases/compiler/augmentedTypesFunction.ts (12 errors) ====
@@ -54,10 +54,10 @@ tests/cases/compiler/augmentedTypesFunction.ts(21,6): error TS2300: Duplicate id
5454
// function then enum
5555
function y4() { } // error
5656
~~
57-
!!! error TS2300: Duplicate identifier 'y4'.
57+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
5858
enum y4 { One } // error
5959
~~
60-
!!! error TS2300: Duplicate identifier 'y4'.
60+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
6161

6262
// function then internal module
6363
function y5() { }

tests/baselines/reference/augmentedTypesInterface.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
tests/cases/compiler/augmentedTypesInterface.ts(23,11): error TS2300: Duplicate identifier 'i3'.
2-
tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2300: Duplicate identifier 'i3'.
1+
tests/cases/compiler/augmentedTypesInterface.ts(23,11): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
2+
tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
33

44

55
==== tests/cases/compiler/augmentedTypesInterface.ts (2 errors) ====
@@ -27,12 +27,12 @@ tests/cases/compiler/augmentedTypesInterface.ts(26,6): error TS2300: Duplicate i
2727
// interface then enum
2828
interface i3 { // error
2929
~~
30-
!!! error TS2300: Duplicate identifier 'i3'.
30+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3131
foo(): void;
3232
}
3333
enum i3 { One }; // error
3434
~~
35-
!!! error TS2300: Duplicate identifier 'i3'.
35+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
3636

3737
// interface then import
3838
interface i4 {

tests/baselines/reference/augmentedTypesVar.errors.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ tests/cases/compiler/augmentedTypesVar.ts(13,5): error TS2300: Duplicate identif
55
tests/cases/compiler/augmentedTypesVar.ts(14,7): error TS2300: Duplicate identifier 'x4'.
66
tests/cases/compiler/augmentedTypesVar.ts(16,5): error TS2300: Duplicate identifier 'x4a'.
77
tests/cases/compiler/augmentedTypesVar.ts(17,7): error TS2300: Duplicate identifier 'x4a'.
8-
tests/cases/compiler/augmentedTypesVar.ts(20,5): error TS2300: Duplicate identifier 'x5'.
9-
tests/cases/compiler/augmentedTypesVar.ts(21,6): error TS2300: Duplicate identifier 'x5'.
8+
tests/cases/compiler/augmentedTypesVar.ts(20,5): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
9+
tests/cases/compiler/augmentedTypesVar.ts(21,6): error TS2567: Enum declarations can only merge with namespace or other enum declarations.
1010
tests/cases/compiler/augmentedTypesVar.ts(27,5): error TS2300: Duplicate identifier 'x6a'.
1111
tests/cases/compiler/augmentedTypesVar.ts(28,8): error TS2300: Duplicate identifier 'x6a'.
1212
tests/cases/compiler/augmentedTypesVar.ts(30,5): error TS2300: Duplicate identifier 'x6b'.
@@ -49,10 +49,10 @@ tests/cases/compiler/augmentedTypesVar.ts(31,8): error TS2300: Duplicate identif
4949
// var then enum
5050
var x5 = 1;
5151
~~
52-
!!! error TS2300: Duplicate identifier 'x5'.
52+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
5353
enum x5 { One } // error
5454
~~
55-
!!! error TS2300: Duplicate identifier 'x5'.
55+
!!! error TS2567: Enum declarations can only merge with namespace or other enum declarations.
5656

5757
// var then module
5858
var x6 = 1;

0 commit comments

Comments
 (0)