@@ -2257,7 +2257,7 @@ namespace ts {
2257
2257
return createKeywordTypeNode(SyntaxKind.BooleanKeyword);
2258
2258
}
2259
2259
if (type.flags & TypeFlags.Enum) {
2260
- const name = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2260
+ const name = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2261
2261
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2262
2262
}
2263
2263
if (type.flags & (TypeFlags.StringLiteral)) {
@@ -2270,7 +2270,7 @@ namespace ts {
2270
2270
return (<IntrinsicType>type).intrinsicName === "true" ? createTrue() : createFalse();
2271
2271
}
2272
2272
if (type.flags & TypeFlags.EnumLiteral) {
2273
- const name = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2273
+ const name = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2274
2274
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2275
2275
}
2276
2276
if (type.flags & TypeFlags.Void) {
@@ -2306,18 +2306,18 @@ namespace ts {
2306
2306
}
2307
2307
if (objectFlags & ObjectFlags.ClassOrInterface) {
2308
2308
Debug.assert(!!(type.flags & TypeFlags.Object));
2309
- const name = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2309
+ const name = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2310
2310
// TODO(aozgaa): handle type arguments.
2311
2311
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2312
2312
}
2313
2313
if (type.flags & TypeFlags.TypeParameter) {
2314
- const name = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2314
+ const name = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2315
2315
// Ignore constraint/default when creating a usage (as opposed to declaration) of a type parameter.
2316
2316
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2317
2317
}
2318
2318
2319
2319
if (checkAlias && type.aliasSymbol) {
2320
- const name = symbolToName(type.aliasSymbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2320
+ const name = symbolToName(type.aliasSymbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2321
2321
const typeArgumentNodes = mapToTypeNodeArray(type.aliasTypeArguments);
2322
2322
return createTypeReferenceNode(name, typeArgumentNodes);
2323
2323
}
@@ -2381,7 +2381,7 @@ namespace ts {
2381
2381
const typeAlias = getTypeAliasForTypeLiteral(type);
2382
2382
if (typeAlias) {
2383
2383
// The specified symbol flags need to be reinterpreted as type flags
2384
- const entityName = symbolToName(typeAlias, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2384
+ const entityName = symbolToName(typeAlias, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2385
2385
return createTypeReferenceNode(entityName, /*typeArguments*/ undefined);
2386
2386
}
2387
2387
else {
@@ -2452,7 +2452,7 @@ namespace ts {
2452
2452
function createTypeQueryNodeFromType(type: Type) {
2453
2453
const symbol = type.symbol;
2454
2454
if (symbol) {
2455
- const entityName = symbolToName(symbol, enclosingDeclaration, /*mustBeIdentifier */ false, flags);
2455
+ const entityName = symbolToName(symbol, enclosingDeclaration, /*expectsIdentifier */ false, flags);
2456
2456
return createTypeQueryNode(entityName);
2457
2457
}
2458
2458
}
@@ -2482,7 +2482,7 @@ namespace ts {
2482
2482
// When type parameters are their own type arguments for the whole group (i.e. we have
2483
2483
// the default outer type arguments), we don't show the group.
2484
2484
if (!rangeEquals(outerTypeParameters, typeArguments, start, i)) {
2485
- const qualifiedNamePart = symbolToName(parent, enclosingDeclaration, /*mustBeIdentifier */ true, flags);
2485
+ const qualifiedNamePart = symbolToName(parent, enclosingDeclaration, /*expectsIdentifier */ true, flags);
2486
2486
if (!qualifiedName) {
2487
2487
qualifiedName = createQualifiedName(qualifiedNamePart, /*right*/ undefined);
2488
2488
}
@@ -2495,7 +2495,7 @@ namespace ts {
2495
2495
}
2496
2496
}
2497
2497
let entityName: EntityName = undefined;
2498
- const nameIdentifier = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ true, flags);
2498
+ const nameIdentifier = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ true, flags);
2499
2499
if (qualifiedName) {
2500
2500
Debug.assert(!qualifiedName.right);
2501
2501
qualifiedName.right = nameIdentifier;
@@ -2606,7 +2606,7 @@ namespace ts {
2606
2606
const constraintNode = constraint && typeToTypeNodeHelper(constraint, enclosingDeclaration, flags);
2607
2607
const defaultParameter = getDefaultFromTypeParameter(type);
2608
2608
const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, enclosingDeclaration, flags);
2609
- const name = symbolToName(type.symbol, enclosingDeclaration, /*mustBeIdentifier */ true, flags);
2609
+ const name = symbolToName(type.symbol, enclosingDeclaration, /*expectsIdentifier */ true, flags);
2610
2610
return createTypeParameterDeclaration(name, constraintNode, defaultParameterNode);
2611
2611
}
2612
2612
@@ -2627,30 +2627,26 @@ namespace ts {
2627
2627
return parameterNode;
2628
2628
}
2629
2629
2630
- function symbolToName(symbol: Symbol, enclosingDeclaration: Node | undefined, mustBeIdentifier : true, flags: NodeBuilderFlags): Identifier;
2631
- function symbolToName(symbol: Symbol, enclosingDeclaration: Node, mustBeIdentifier : false, flags: NodeBuilderFlags): EntityName;
2632
- function symbolToName(symbol: Symbol, enclosingDeclaration: Node | undefined, mustBeIdentifier : boolean, flags: NodeBuilderFlags): EntityName {
2630
+ function symbolToName(symbol: Symbol, enclosingDeclaration: Node | undefined, expectsIdentifier : true, flags: NodeBuilderFlags): Identifier;
2631
+ function symbolToName(symbol: Symbol, enclosingDeclaration: Node | undefined, expectsIdentifier : false, flags: NodeBuilderFlags): EntityName;
2632
+ function symbolToName(symbol: Symbol, enclosingDeclaration: Node | undefined, expectsIdentifier : boolean, flags: NodeBuilderFlags): EntityName {
2633
2633
let parentSymbol: Symbol;
2634
2634
let meaning: SymbolFlags;
2635
2635
2636
- // Get qualified name if the symbol is not a type parameter
2637
- // and there is an enclosing declaration.
2636
+ // Try to get qualified name if the symbol is not a type parameter and there is an enclosing declaration.
2638
2637
let chain: Symbol[];
2639
2638
const isTypeParameter = symbol.flags & SymbolFlags.TypeParameter;
2640
2639
if (!isTypeParameter && enclosingDeclaration) {
2641
2640
chain = getSymbolChain(symbol, meaning, /*endOfChain*/ true);
2642
- // TODO(aozgaa): check whether type pointed to by symbol requires type arguments to be printed.
2643
2641
Debug.assert(chain && chain.length > 0);
2644
2642
}
2645
2643
else {
2646
2644
chain = [symbol];
2647
2645
}
2648
2646
2649
2647
parentSymbol = undefined;
2650
- if (mustBeIdentifier && chain.length !== 1) {
2648
+ if (expectsIdentifier && chain.length !== 1) {
2651
2649
encounteredError = encounteredError || !(flags & NodeBuilderFlags.allowQualifedNameInPlaceOfIdentifier);
2652
- // TODO(aozgaa): failing to get an identifier when we expect one generates an unprintable node.
2653
- // Should error handling be more severe?
2654
2650
}
2655
2651
return createEntityNameFromSymbolChain(chain, chain.length - 1);
2656
2652
@@ -2660,7 +2656,6 @@ namespace ts {
2660
2656
const symbol = chain[index];
2661
2657
let typeParameterString = "";
2662
2658
if (index > 0) {
2663
- // TODO(aozgaa): is the parentSymbol wrong?
2664
2659
const parentSymbol = chain[index - 1];
2665
2660
let typeParameters: TypeParameter[];
2666
2661
if (getCheckFlags(symbol) & CheckFlags.Instantiated) {
0 commit comments