@@ -2229,19 +2229,7 @@ namespace ts {
2229
2229
2230
2230
return result;
2231
2231
}
2232
- function oldTypeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string {
2233
- const writer = getSingleLineStringWriter();
2234
- getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
2235
- let result = writer.string();
2236
- releaseStringWriter(writer);
2237
-
2238
- const maxLength = compilerOptions.noErrorTruncation || flags & TypeFormatFlags.NoTruncation ? undefined : 100;
2239
- if (maxLength && result.length >= maxLength) {
2240
- result = result.substr(0, maxLength - "...".length) + "...";
2241
- }
2242
- return result;
2243
- }
2244
-
2232
+
2245
2233
function typeFormatFlagsToNodeBuilderFlags(flags: TypeFormatFlags): NodeBuilderFlags {
2246
2234
let result = NodeBuilderFlags.None;
2247
2235
if (flags & TypeFormatFlags.WriteArrayAsGenericType) {
@@ -2282,8 +2270,6 @@ namespace ts {
2282
2270
}
2283
2271
2284
2272
function typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string {
2285
- const str = oldTypeToString(type, enclosingDeclaration, flags); str;
2286
- const str2 = oldTypeToString(type, enclosingDeclaration, flags); str2;
2287
2273
const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, typeFormatFlagsToNodeBuilderFlags(flags) | NodeBuilderFlags.ignoreErrors, !!(flags & TypeFormatFlags.InTypeAlias));
2288
2274
Debug.assert(typeNode !== undefined, "should always get typenode?");
2289
2275
const newLine = NewLineKind.None;
@@ -2331,11 +2317,8 @@ namespace ts {
2331
2317
// State
2332
2318
encounteredError: boolean;
2333
2319
inObjectTypeLiteral: boolean;
2334
- // TODO: needed for part of parens handling
2335
2320
InElementType: boolean; // Writing an array or union element type
2336
- // TODO: ???
2337
- InFirstTypeArgument: boolean; // Writing first type argument of the instantiated type
2338
- // TODO: ???
2321
+ InFirstTypeArgument: boolean; // Writing first type argument of the instantiated type
2339
2322
InTypeAlias: boolean; // Writing type in type alias declaration
2340
2323
symbolStack: Symbol[] | undefined;
2341
2324
}
@@ -2354,18 +2337,15 @@ namespace ts {
2354
2337
}
2355
2338
2356
2339
function typeToTypeNodeHelper(type: Type, context: NodeBuilderContext): TypeNode {
2357
- const InElementType = context.InElementType;
2358
- // TODO: why doesn't tts unset the flag?
2340
+ const inElementType = context.InElementType;
2359
2341
context.InElementType = false;
2360
2342
const inTypeAlias = context.InTypeAlias;
2361
2343
context.InTypeAlias = false;
2362
2344
const inFirstTypeArgument = context.InFirstTypeArgument;
2363
2345
context.InFirstTypeArgument = false;
2364
2346
2365
- // TODO: should be assert?
2366
2347
if (!type) {
2367
2348
context.encounteredError = true;
2368
- // TODO(aozgaa): should we return implict any (undefined) or explicit any (keywordtypenode)?
2369
2349
return undefined;
2370
2350
}
2371
2351
@@ -2382,7 +2362,7 @@ namespace ts {
2382
2362
return createKeywordTypeNode(SyntaxKind.BooleanKeyword);
2383
2363
}
2384
2364
if (type.flags & TypeFlags.Enum) {
2385
- const name = symbolToName(type.symbol, /*expectsIdentifier*/ false , SymbolFlags.Type, context );
2365
+ const name = symbolToName(type.symbol, context , SymbolFlags.Type, /*expectsIdentifier*/ false );
2386
2366
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2387
2367
}
2388
2368
if (type.flags & (TypeFlags.StringLiteral)) {
@@ -2396,7 +2376,7 @@ namespace ts {
2396
2376
}
2397
2377
if (type.flags & TypeFlags.EnumLiteral) {
2398
2378
const parentSymbol = getParentOfSymbol(type.symbol);
2399
- const parentName = symbolToName(parentSymbol, /*expectsIdentifier*/ false , SymbolFlags.Type, context );
2379
+ const parentName = symbolToName(parentSymbol, context , SymbolFlags.Type, /*expectsIdentifier*/ false );
2400
2380
const name = getNameOfSymbol(type.symbol, context);
2401
2381
const enumLiteralName = createQualifiedName(parentName, name);
2402
2382
return createTypeReferenceNode(enumLiteralName, /*typeArguments*/ undefined);
@@ -2436,12 +2416,11 @@ namespace ts {
2436
2416
}
2437
2417
if (objectFlags & ObjectFlags.ClassOrInterface) {
2438
2418
Debug.assert(!!(type.flags & TypeFlags.Object));
2439
- const name = symbolToName(type.symbol, /*expectsIdentifier*/ false, SymbolFlags.Type, context);
2440
- // TODO(aozgaa): handle type arguments.
2419
+ const name = symbolToName(type.symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ false);
2441
2420
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2442
2421
}
2443
2422
if (type.flags & TypeFlags.TypeParameter) {
2444
- const name = symbolToName(type.symbol, /*expectsIdentifier*/ false , SymbolFlags.Type, context );
2423
+ const name = symbolToName(type.symbol, context , SymbolFlags.Type, /*expectsIdentifier*/ false );
2445
2424
// Ignore constraint/default when creating a usage (as opposed to declaration) of a type parameter.
2446
2425
return createTypeReferenceNode(name, /*typeArguments*/ undefined);
2447
2426
}
@@ -2451,15 +2430,14 @@ namespace ts {
2451
2430
const name = symbolToTypeReferenceName(type.aliasSymbol);
2452
2431
const typeArgumentNodes = toTypeArgumentNodes(type.aliasTypeArguments, context);
2453
2432
return createTypeReferenceNode(name, typeArgumentNodes);
2454
- // return symbolToTypeReferenceIdentifier(type.aliasSymbol, type.aliasTypeArguments);
2455
2433
}
2456
2434
2457
2435
if (type.flags & (TypeFlags.Union | TypeFlags.Intersection)) {
2458
2436
const types = type.flags & TypeFlags.Union ? formatUnionTypes((<UnionType>type).types) : (<IntersectionType>type).types;
2459
2437
const typeNodes = types && mapToTypeNodeArray(types, context, /*addInElementTypeFlag*/ true, /*addInFirstTypeArgumentFlag*/ false);
2460
2438
if (typeNodes && typeNodes.length > 0) {
2461
2439
const unionOrIntersectionTypeNode = createUnionOrIntersectionTypeNode(type.flags & TypeFlags.Union ? SyntaxKind.UnionType : SyntaxKind.IntersectionType, typeNodes);
2462
- return InElementType ? createParenthesizedTypeNode(unionOrIntersectionTypeNode) : unionOrIntersectionTypeNode;
2440
+ return inElementType ? createParenthesizedTypeNode(unionOrIntersectionTypeNode) : unionOrIntersectionTypeNode;
2463
2441
}
2464
2442
else {
2465
2443
if (!context.encounteredError && !(context.flags & NodeBuilderFlags.allowEmptyUnionOrIntersection)) {
@@ -2521,7 +2499,7 @@ namespace ts {
2521
2499
const typeAlias = getTypeAliasForTypeLiteral(type);
2522
2500
if (typeAlias) {
2523
2501
// The specified symbol flags need to be reinterpreted as type flags
2524
- const entityName = symbolToName(typeAlias, /*expectsIdentifier*/ false, SymbolFlags.Type, context );
2502
+ const entityName = symbolToName(typeAlias, context, SymbolFlags.Type, /*expectsIdentifier*/ false );
2525
2503
return createTypeReferenceNode(entityName, /*typeArguments*/ undefined);
2526
2504
}
2527
2505
else {
@@ -2598,7 +2576,7 @@ namespace ts {
2598
2576
}
2599
2577
2600
2578
function shouldAddParenthesisAroundFunctionType(callSignature: Signature, context: NodeBuilderContext) {
2601
- if (InElementType ) {
2579
+ if (inElementType ) {
2602
2580
return true;
2603
2581
}
2604
2582
else if (inFirstTypeArgument) {
@@ -2611,14 +2589,13 @@ namespace ts {
2611
2589
}
2612
2590
2613
2591
function createTypeQueryNodeFromSymbol(symbol: Symbol, symbolFlags: SymbolFlags) {
2614
- const entityName = symbolToName(symbol, /*expectsIdentifier*/ false, symbolFlags, context );
2592
+ const entityName = symbolToName(symbol, context, symbolFlags, /*expectsIdentifier*/ false);
2615
2593
return createTypeQueryNode(entityName);
2616
2594
}
2617
2595
2618
2596
function symbolToTypeReferenceName(symbol: Symbol) {
2619
2597
// Unnamed function expressions and arrow functions have reserved names that we don't want to display
2620
- const entityName = symbol.flags & SymbolFlags.Class || !isReservedMemberName(symbol.name) ? symbolToName(symbol, /*expectsIdentifier*/ false, SymbolFlags.Type, context) : createIdentifier("");
2621
- // TODO: assert no type args?
2598
+ const entityName = symbol.flags & SymbolFlags.Class || !isReservedMemberName(symbol.name) ? symbolToName(symbol, context, SymbolFlags.Type, /*expectsIdentifier*/ false) : createIdentifier("");
2622
2599
return entityName;
2623
2600
}
2624
2601
@@ -2651,7 +2628,6 @@ namespace ts {
2651
2628
let i = 0;
2652
2629
let qualifiedName: QualifiedName | undefined;
2653
2630
if (outerTypeParameters) {
2654
- let inFirstTypeArgument = true;
2655
2631
const length = outerTypeParameters.length;
2656
2632
while (i < length) {
2657
2633
// Find group of type arguments for type parameters with the same declaring container.
@@ -2676,7 +2652,6 @@ namespace ts {
2676
2652
qualifiedName = createQualifiedName(namePart, /*right*/ undefined);
2677
2653
}
2678
2654
}
2679
- inFirstTypeArgument = false;
2680
2655
}
2681
2656
}
2682
2657
@@ -2745,12 +2720,11 @@ namespace ts {
2745
2720
return typeElements;
2746
2721
}
2747
2722
2748
- // TODO: make logic mirror that of writeObjectLiteralType
2749
2723
for (const propertySymbol of properties) {
2750
2724
const propertyType = getTypeOfSymbol(propertySymbol);
2751
2725
const saveEnclosingDeclaration = context.enclosingDeclaration;
2752
2726
context.enclosingDeclaration = undefined;
2753
- const propertyName = symbolToName(propertySymbol, /*expectsIdentifier*/ true , SymbolFlags.Value, context );
2727
+ const propertyName = symbolToName(propertySymbol, context , SymbolFlags.Value, /*expectsIdentifier*/ true );
2754
2728
context.enclosingDeclaration = saveEnclosingDeclaration;
2755
2729
const optionalToken = propertySymbol.flags & SymbolFlags.Optional ? createToken(SyntaxKind.QuestionToken) : undefined;
2756
2730
if (propertySymbol.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(propertyType).length) {
@@ -2856,7 +2830,7 @@ namespace ts {
2856
2830
const constraintNode = constraint && typeToTypeNodeHelper(constraint, context);
2857
2831
const defaultParameter = getDefaultFromTypeParameter(type);
2858
2832
const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context);
2859
- const name = symbolToName(type.symbol, /*expectsIdentifier*/ true , SymbolFlags.Type, context );
2833
+ const name = symbolToName(type.symbol, context , SymbolFlags.Type, /*expectsIdentifier*/ true );
2860
2834
return createTypeParameterDeclaration(name, constraintNode, defaultParameterNode);
2861
2835
}
2862
2836
@@ -2903,10 +2877,9 @@ namespace ts {
2903
2877
}
2904
2878
}
2905
2879
2906
- // TODO: add SymbolFormatFlags?? Yes to add outer type parameters. Defer UseOnlyExternalAliasing until a separate symbolbuilder PR.
2907
- function symbolToName(symbol: Symbol, expectsIdentifier: true, meaning: SymbolFlags, context: NodeBuilderContext): Identifier;
2908
- function symbolToName(symbol: Symbol, expectsIdentifier: false, meaning: SymbolFlags, context: NodeBuilderContext): EntityName;
2909
- function symbolToName(symbol: Symbol, expectsIdentifier: boolean, meaning: SymbolFlags, context: NodeBuilderContext): EntityName {
2880
+ function symbolToName(symbol: Symbol, context: NodeBuilderContext, meaning: SymbolFlags, expectsIdentifier: true): Identifier;
2881
+ function symbolToName(symbol: Symbol, context: NodeBuilderContext, meaning: SymbolFlags, expectsIdentifier: false): EntityName;
2882
+ function symbolToName(symbol: Symbol, context: NodeBuilderContext, meaning: SymbolFlags, expectsIdentifier: boolean): EntityName {
2910
2883
2911
2884
// Try to get qualified name if the symbol is not a type parameter and there is an enclosing declaration.
2912
2885
let chain: Symbol[];
0 commit comments