Skip to content

Commit 48d31ed

Browse files
author
Andy
authored
Split isConst into isVarConst and isEnumConst (#25312)
1 parent b5f386e commit 48d31ed

File tree

8 files changed

+28
-28
lines changed

8 files changed

+28
-28
lines changed

src/compiler/binder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace ts {
2626
return ModuleInstanceState.NonInstantiated;
2727
// 2. const enum declarations
2828
case SyntaxKind.EnumDeclaration:
29-
if (isConst(node)) {
29+
if (isEnumConst(node as EnumDeclaration)) {
3030
return ModuleInstanceState.ConstEnumOnly;
3131
}
3232
break;
@@ -2611,7 +2611,7 @@ namespace ts {
26112611
}
26122612

26132613
function bindEnumDeclaration(node: EnumDeclaration) {
2614-
return isConst(node)
2614+
return isEnumConst(node)
26152615
? bindBlockScopedDeclaration(node, SymbolFlags.ConstEnum, SymbolFlags.ConstEnumExcludes)
26162616
: bindBlockScopedDeclaration(node, SymbolFlags.RegularEnum, SymbolFlags.RegularEnumExcludes);
26172617
}
@@ -2768,7 +2768,7 @@ namespace ts {
27682768
// report error on instantiated modules or const-enums only modules if preserveConstEnums is set
27692769
(node.kind === SyntaxKind.ModuleDeclaration && shouldReportErrorOnModuleDeclaration(<ModuleDeclaration>node)) ||
27702770
// report error on regular enums and const enums if preserveConstEnums is set
2771-
(node.kind === SyntaxKind.EnumDeclaration && (!isConstEnumDeclaration(node) || options.preserveConstEnums));
2771+
(isEnumDeclaration(node) && (!isEnumConst(node) || options.preserveConstEnums));
27722772

27732773
if (reportError) {
27742774
currentFlow = reportedUnreachableFlow;

src/compiler/checker.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25185,7 +25185,7 @@ namespace ts {
2518525185
}
2518625186
// In ambient enum declarations that specify no const modifier, enum member declarations that omit
2518725187
// a value are considered computed members (as opposed to having auto-incremented values).
25188-
if (member.parent.flags & NodeFlags.Ambient && !isConst(member.parent)) {
25188+
if (member.parent.flags & NodeFlags.Ambient && !isEnumConst(member.parent)) {
2518925189
return undefined;
2519025190
}
2519125191
// If the member declaration specifies no value, the member is considered a constant enum member.
@@ -25201,7 +25201,7 @@ namespace ts {
2520125201

2520225202
function computeConstantValue(member: EnumMember): string | number | undefined {
2520325203
const enumKind = getEnumKind(getSymbolOfNode(member.parent));
25204-
const isConstEnum = isConst(member.parent);
25204+
const isConstEnum = isEnumConst(member.parent);
2520525205
const initializer = member.initializer!;
2520625206
const value = enumKind === EnumKind.Literal && !isLiteralEnumMember(member) ? undefined : evaluate(initializer);
2520725207
if (value !== undefined) {
@@ -25336,7 +25336,7 @@ namespace ts {
2533625336

2533725337
computeEnumMemberValues(node);
2533825338

25339-
const enumIsConst = isConst(node);
25339+
const enumIsConst = isEnumConst(node);
2534025340
if (compilerOptions.isolatedModules && enumIsConst && node.flags & NodeFlags.Ambient) {
2534125341
error(node.name, Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided);
2534225342
}
@@ -25353,7 +25353,7 @@ namespace ts {
2535325353
if (enumSymbol.declarations.length > 1) {
2535425354
// check that const is placed\omitted on all enum declarations
2535525355
forEach(enumSymbol.declarations, decl => {
25356-
if (isConstEnumDeclaration(decl) !== enumIsConst) {
25356+
if (isEnumDeclaration(decl) && isEnumConst(decl) !== enumIsConst) {
2535725357
error(getNameOfDeclaration(decl), Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
2535825358
}
2535925359
});
@@ -27217,8 +27217,9 @@ namespace ts {
2721727217
const symbol = getNodeLinks(node).resolvedSymbol;
2721827218
if (symbol && (symbol.flags & SymbolFlags.EnumMember)) {
2721927219
// inline property\index accesses only for const enums
27220-
if (isConstEnumDeclaration(symbol.valueDeclaration.parent)) {
27221-
return getEnumMemberValue(<EnumMember>symbol.valueDeclaration);
27220+
const member = symbol.valueDeclaration as EnumMember;
27221+
if (isEnumConst(member.parent)) {
27222+
return getEnumMemberValue(member);
2722227223
}
2722327224
}
2722427225

@@ -27372,7 +27373,7 @@ namespace ts {
2737227373
}
2737327374

2737427375
function isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean {
27375-
if (isConst(node)) {
27376+
if (isVariableDeclaration(node) && isVarConst(node)) {
2737627377
const type = getTypeOfSymbol(getSymbolOfNode(node));
2737727378
return !!(type.flags & TypeFlags.StringOrNumberLiteral && type.flags & TypeFlags.FreshLiteral);
2737827379
}
@@ -28677,7 +28678,7 @@ namespace ts {
2867728678
if (node.parent.parent.kind !== SyntaxKind.ForInStatement && node.parent.parent.kind !== SyntaxKind.ForOfStatement) {
2867828679
if (node.flags & NodeFlags.Ambient) {
2867928680
if (node.initializer) {
28680-
if (isConst(node) && !node.type) {
28681+
if (isVarConst(node) && !node.type) {
2868128682
if (!isStringOrNumberLiteralExpression(node.initializer)) {
2868228683
return grammarErrorOnNode(node.initializer, Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal);
2868328684
}
@@ -28688,7 +28689,7 @@ namespace ts {
2868828689
return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
2868928690
}
2869028691
}
28691-
if (node.initializer && !(isConst(node) && isStringOrNumberLiteralExpression(node.initializer))) {
28692+
if (node.initializer && !(isVarConst(node) && isStringOrNumberLiteralExpression(node.initializer))) {
2869228693
// Error on equals token which immediate precedes the initializer
2869328694
const equalsTokenLength = "=".length;
2869428695
return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
@@ -28698,7 +28699,7 @@ namespace ts {
2869828699
if (isBindingPattern(node.name) && !isBindingPattern(node.parent)) {
2869928700
return grammarErrorOnNode(node, Diagnostics.A_destructuring_declaration_must_have_an_initializer);
2870028701
}
28701-
if (isConst(node)) {
28702+
if (isVarConst(node)) {
2870228703
return grammarErrorOnNode(node, Diagnostics.const_declarations_must_be_initialized);
2870328704
}
2870428705
}
@@ -28713,7 +28714,7 @@ namespace ts {
2871328714
checkESModuleMarker(node.name);
2871428715
}
2871528716

28716-
const checkLetConstNames = (isLet(node) || isConst(node));
28717+
const checkLetConstNames = (isLet(node) || isVarConst(node));
2871728718

2871828719
// 1. LexicalDeclaration : LetOrConst BindingList ;
2871928720
// It is a Syntax Error if the BoundNames of BindingList contains "let".
@@ -28793,7 +28794,7 @@ namespace ts {
2879328794
if (isLet(node.declarationList)) {
2879428795
return grammarErrorOnNode(node, Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
2879528796
}
28796-
else if (isConst(node.declarationList)) {
28797+
else if (isVarConst(node.declarationList)) {
2879728798
return grammarErrorOnNode(node, Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
2879828799
}
2879928800
}

src/compiler/emitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,7 @@ namespace ts {
19831983
}
19841984

19851985
function emitVariableDeclarationList(node: VariableDeclarationList) {
1986-
writeKeyword(isLet(node) ? "let" : isConst(node) ? "const" : "var");
1986+
writeKeyword(isLet(node) ? "let" : isVarConst(node) ? "const" : "var");
19871987
writeSpace();
19881988
emitList(node, node.declarations, ListFormat.VariableDeclarationList);
19891989
}

src/compiler/transformers/ts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2602,7 +2602,7 @@ namespace ts {
26022602
* @param node The enum declaration node.
26032603
*/
26042604
function shouldEmitEnumDeclaration(node: EnumDeclaration) {
2605-
return !isConst(node)
2605+
return !isEnumConst(node)
26062606
|| compilerOptions.preserveConstEnums
26072607
|| compilerOptions.isolatedModules;
26082608
}

src/compiler/utilities.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -897,13 +897,12 @@ namespace ts {
897897
return file.scriptKind === ScriptKind.JSON;
898898
}
899899

900-
export function isConstEnumDeclaration(node: Node): boolean {
901-
return node.kind === SyntaxKind.EnumDeclaration && isConst(node);
900+
export function isEnumConst(node: EnumDeclaration): boolean {
901+
return !!(getCombinedModifierFlags(node) & ModifierFlags.Const);
902902
}
903903

904-
export function isConst(node: Node): boolean {
905-
return !!(getCombinedNodeFlags(node) & NodeFlags.Const)
906-
|| !!(isDeclaration(node) && getCombinedModifierFlags(node) & ModifierFlags.Const);
904+
export function isVarConst(node: VariableDeclaration | VariableDeclarationList): boolean {
905+
return !!(getCombinedNodeFlags(node) & NodeFlags.Const);
907906
}
908907

909908
export function isLet(node: Node): boolean {
@@ -1184,7 +1183,7 @@ namespace ts {
11841183
}
11851184

11861185
export function isValidESSymbolDeclaration(node: Node): node is VariableDeclaration | PropertyDeclaration | SignatureDeclaration {
1187-
return isVariableDeclaration(node) ? isConst(node) && isIdentifier(node.name) && isVariableDeclarationInVariableStatement(node) :
1186+
return isVariableDeclaration(node) ? isVarConst(node) && isIdentifier(node.name) && isVariableDeclarationInVariableStatement(node) :
11881187
isPropertyDeclaration(node) ? hasReadonlyModifier(node) && hasStaticModifier(node) :
11891188
isPropertySignature(node) && hasReadonlyModifier(node);
11901189
}

src/services/symbolDisplay.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace ts.SymbolDisplay {
4949
if (isFirstDeclarationOfSymbolParameter(symbol)) {
5050
return ScriptElementKind.parameterElement;
5151
}
52-
else if (symbol.valueDeclaration && isConst(symbol.valueDeclaration)) {
52+
else if (symbol.valueDeclaration && isVarConst(symbol.valueDeclaration as VariableDeclaration)) {
5353
return ScriptElementKind.constElement;
5454
}
5555
else if (forEach(symbol.declarations, isLet)) {
@@ -298,7 +298,7 @@ namespace ts.SymbolDisplay {
298298
}
299299
if (symbolFlags & SymbolFlags.Enum) {
300300
prefixNextMeaning();
301-
if (forEach(symbol.declarations, isConstEnumDeclaration)) {
301+
if (some(symbol.declarations, d => isEnumDeclaration(d) && isEnumConst(d))) {
302302
displayParts.push(keywordPart(SyntaxKind.ConstKeyword));
303303
displayParts.push(spacePart());
304304
}

src/services/utilities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ namespace ts {
380380
}
381381

382382
function getKindOfVariableDeclaration(v: VariableDeclaration): ScriptElementKind {
383-
return isConst(v)
383+
return isVarConst(v)
384384
? ScriptElementKind.constElement
385385
: isLet(v)
386386
? ScriptElementKind.letElement

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6171,8 +6171,8 @@ declare namespace ts {
61716171
function getErrorSpanForNode(sourceFile: SourceFile, node: Node): TextSpan;
61726172
function isExternalOrCommonJsModule(file: SourceFile): boolean;
61736173
function isJsonSourceFile(file: SourceFile): file is JsonSourceFile;
6174-
function isConstEnumDeclaration(node: Node): boolean;
6175-
function isConst(node: Node): boolean;
6174+
function isEnumConst(node: EnumDeclaration): boolean;
6175+
function isVarConst(node: VariableDeclaration | VariableDeclarationList): boolean;
61766176
function isLet(node: Node): boolean;
61776177
function isSuperCall(n: Node): n is SuperCall;
61786178
function isImportCall(n: Node): n is ImportCall;

0 commit comments

Comments
 (0)