Skip to content

Commit c1a41b9

Browse files
author
Arthur Ozga
committed
Expose indexSignaturePrinting
1 parent c22e47d commit c1a41b9

File tree

2 files changed

+38
-22
lines changed

2 files changed

+38
-22
lines changed

src/compiler/checker.ts

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ namespace ts {
9595
getTypeAtLocation: getTypeOfNode,
9696
getPropertySymbolOfDestructuringAssignment,
9797
signatureToString,
98+
indexSignatureToString,
9899
typeToString,
99100
getSymbolDisplayBuilder,
100101
symbolToString,
@@ -2035,6 +2036,15 @@ namespace ts {
20352036
return result;
20362037
}
20372038

2039+
function indexSignatureToString(info: IndexInfo, kind: SyntaxKind, enclosingDeclaration?: Node): string {
2040+
const writer = getSingleLineStringWriter();
2041+
getSymbolDisplayBuilder().buildIndexSignatureDisplay(info, writer, kind, enclosingDeclaration);
2042+
const result = writer.string();
2043+
releaseStringWriter(writer);
2044+
2045+
return result;
2046+
}
2047+
20382048
function typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string {
20392049
const writer = getSingleLineStringWriter();
20402050
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
@@ -2459,26 +2469,6 @@ namespace ts {
24592469
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, SymbolFlags.Value, SymbolFormatFlags.None, typeFormatFlags);
24602470
}
24612471

2462-
function writeIndexSignature(info: IndexInfo, keyword: SyntaxKind) {
2463-
if (info) {
2464-
if (info.isReadonly) {
2465-
writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
2466-
writeSpace(writer);
2467-
}
2468-
writePunctuation(writer, SyntaxKind.OpenBracketToken);
2469-
writer.writeParameter(info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : "x");
2470-
writePunctuation(writer, SyntaxKind.ColonToken);
2471-
writeSpace(writer);
2472-
writeKeyword(writer, keyword);
2473-
writePunctuation(writer, SyntaxKind.CloseBracketToken);
2474-
writePunctuation(writer, SyntaxKind.ColonToken);
2475-
writeSpace(writer);
2476-
writeType(info.type, TypeFormatFlags.None);
2477-
writePunctuation(writer, SyntaxKind.SemicolonToken);
2478-
writer.writeLine();
2479-
}
2480-
}
2481-
24822472
function writePropertyWithModifiers(prop: Symbol) {
24832473
if (isReadonlySymbol(prop)) {
24842474
writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
@@ -2566,8 +2556,8 @@ namespace ts {
25662556
writePunctuation(writer, SyntaxKind.SemicolonToken);
25672557
writer.writeLine();
25682558
}
2569-
writeIndexSignature(resolved.stringIndexInfo, SyntaxKind.StringKeyword);
2570-
writeIndexSignature(resolved.numberIndexInfo, SyntaxKind.NumberKeyword);
2559+
buildIndexSignatureDisplay(resolved.stringIndexInfo, writer, SyntaxKind.StringKeyword, enclosingDeclaration, globalFlags, symbolStack);
2560+
buildIndexSignatureDisplay(resolved.numberIndexInfo, writer, SyntaxKind.NumberKeyword, enclosingDeclaration, globalFlags, symbolStack);
25712561
for (const p of resolved.properties) {
25722562
const t = getTypeOfSymbol(p);
25732563
if (p.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(t).length) {
@@ -2800,6 +2790,29 @@ namespace ts {
28002790
buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack);
28012791
}
28022792

2793+
/**
2794+
* @param keyword The keyword for the type of IndexSignature. Must be one of SyntaxKind.NumberKeyword or SyntaxKind.StringKeyword.
2795+
*/
2796+
function buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, keyword: SyntaxKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]) {
2797+
if (info) {
2798+
if (info.isReadonly) {
2799+
writeKeyword(writer, SyntaxKind.ReadonlyKeyword);
2800+
writeSpace(writer);
2801+
}
2802+
writePunctuation(writer, SyntaxKind.OpenBracketToken);
2803+
writer.writeParameter(info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : "x");
2804+
writePunctuation(writer, SyntaxKind.ColonToken);
2805+
writeSpace(writer);
2806+
writeKeyword(writer, keyword);
2807+
writePunctuation(writer, SyntaxKind.CloseBracketToken);
2808+
writePunctuation(writer, SyntaxKind.ColonToken);
2809+
writeSpace(writer);
2810+
buildTypeDisplay(info.type, writer, enclosingDeclaration, globalFlags, symbolStack);
2811+
writePunctuation(writer, SyntaxKind.SemicolonToken);
2812+
writer.writeLine();
2813+
}
2814+
}
2815+
28032816
return _displayBuilder || (_displayBuilder = {
28042817
buildSymbolDisplay,
28052818
buildTypeDisplay,
@@ -2810,6 +2823,7 @@ namespace ts {
28102823
buildDisplayForTypeParametersAndDelimiters,
28112824
buildTypeParameterDisplayFromSymbol,
28122825
buildSignatureDisplay,
2826+
buildIndexSignatureDisplay,
28132827
buildReturnTypeDisplay
28142828
});
28152829
}

src/compiler/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2352,6 +2352,7 @@ namespace ts {
23522352
getTypeAtLocation(node: Node): Type;
23532353
getTypeFromTypeReference(node: TypeReferenceNode | ExpressionWithTypeArguments | JSDocTypeReference): Type;
23542354
signatureToString(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): string;
2355+
indexSignatureToString(info: IndexInfo, kind: SyntaxKind, enclosingDeclaration?: Node): string;
23552356
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
23562357
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
23572358
createSymbol(flags: SymbolFlags, name: string): Symbol;
@@ -2396,6 +2397,7 @@ namespace ts {
23962397
buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
23972398
buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
23982399
buildSignatureDisplay(signatures: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
2400+
buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, keyword: SyntaxKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
23992401
buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
24002402
buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
24012403
buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;

0 commit comments

Comments
 (0)