Skip to content

Commit 0023505

Browse files
Removed unnecessary use-before-define error for const enums (#53625)
1 parent fd6f61e commit 0023505

6 files changed

+77
-14
lines changed

src/compiler/checker.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3797,12 +3797,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
37973797
else if (result.flags & SymbolFlags.RegularEnum) {
37983798
diagnosticMessage = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
37993799
}
3800-
else {
3801-
Debug.assert(!!(result.flags & SymbolFlags.ConstEnum));
3802-
if (shouldPreserveConstEnums(compilerOptions)) {
3803-
diagnosticMessage = error(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName);
3804-
}
3805-
}
38063800

38073801
if (diagnosticMessage) {
38083802
addRelatedInfo(diagnosticMessage,
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts(2,12): error TS2450: Enum 'E' used before its declaration.
2-
tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts(7,12): error TS2450: Enum 'E' used before its declaration.
32

43

5-
==== tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts (2 errors) ====
4+
==== tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts (1 errors) ====
65
function foo1() {
76
return E.A
87
~
@@ -13,8 +12,14 @@ tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts(7,12): err
1312

1413
function foo2() {
1514
return E.A
16-
~
17-
!!! error TS2450: Enum 'E' used before its declaration.
18-
!!! related TS2728 tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts:8:16: 'E' is declared here.
1915
const enum E { A }
20-
}
16+
}
17+
18+
const config = {
19+
a: AfterObject.A,
20+
};
21+
22+
const enum AfterObject {
23+
A = 2,
24+
}
25+

tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,16 @@ function foo1() {
77
function foo2() {
88
return E.A
99
const enum E { A }
10-
}
10+
}
11+
12+
const config = {
13+
a: AfterObject.A,
14+
};
15+
16+
const enum AfterObject {
17+
A = 2,
18+
}
19+
1120

1221
//// [blockScopedEnumVariablesUseBeforeDef_preserve.js]
1322
function foo1() {
@@ -24,3 +33,10 @@ function foo2() {
2433
E[E["A"] = 0] = "A";
2534
})(E || (E = {}));
2635
}
36+
var config = {
37+
a: 2 /* AfterObject.A */,
38+
};
39+
var AfterObject;
40+
(function (AfterObject) {
41+
AfterObject[AfterObject["A"] = 2] = "A";
42+
})(AfterObject || (AfterObject = {}));

tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.symbols

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,22 @@ function foo2() {
2424
>E : Symbol(E, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 6, 14))
2525
>A : Symbol(E.A, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 7, 18))
2626
}
27+
28+
const config = {
29+
>config : Symbol(config, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 10, 5))
30+
31+
a: AfterObject.A,
32+
>a : Symbol(a, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 10, 16))
33+
>AfterObject.A : Symbol(AfterObject.A, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 14, 24))
34+
>AfterObject : Symbol(AfterObject, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 12, 2))
35+
>A : Symbol(AfterObject.A, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 14, 24))
36+
37+
};
38+
39+
const enum AfterObject {
40+
>AfterObject : Symbol(AfterObject, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 12, 2))
41+
42+
A = 2,
43+
>A : Symbol(AfterObject.A, Decl(blockScopedEnumVariablesUseBeforeDef_preserve.ts, 14, 24))
44+
}
45+

tests/baselines/reference/blockScopedEnumVariablesUseBeforeDef_preserve.types

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,24 @@ function foo2() {
2424
>E : E
2525
>A : E.A
2626
}
27+
28+
const config = {
29+
>config : { a: AfterObject; }
30+
>{ a: AfterObject.A,} : { a: AfterObject; }
31+
32+
a: AfterObject.A,
33+
>a : AfterObject
34+
>AfterObject.A : AfterObject
35+
>AfterObject : typeof AfterObject
36+
>A : AfterObject
37+
38+
};
39+
40+
const enum AfterObject {
41+
>AfterObject : AfterObject
42+
43+
A = 2,
44+
>A : AfterObject.A
45+
>2 : 2
46+
}
47+

tests/cases/compiler/blockScopedEnumVariablesUseBeforeDef_preserve.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,12 @@ function foo1() {
99
function foo2() {
1010
return E.A
1111
const enum E { A }
12-
}
12+
}
13+
14+
const config = {
15+
a: AfterObject.A,
16+
};
17+
18+
const enum AfterObject {
19+
A = 2,
20+
}

0 commit comments

Comments
 (0)