Skip to content

Commit 574c075

Browse files
committed
Emit the types in declaration file
1 parent c777d5c commit 574c075

File tree

1,100 files changed

+6343
-6133
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,100 files changed

+6343
-6133
lines changed

src/compiler/checker.ts

Lines changed: 167 additions & 110 deletions
Large diffs are not rendered by default.

src/compiler/emitter.ts

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -94,19 +94,14 @@ module ts {
9494
return sourceMapDataList;
9595
}
9696

97-
interface TextWriter {
98-
write(s: string): void;
97+
interface EmitTextWriter extends TextWriter {
9998
writeLiteral(s: string): void;
100-
writeLine(): void;
101-
increaseIndent(): void;
102-
decreaseIndent(): void;
10399
getTextPos(): number;
104100
getLine(): number;
105101
getColumn(): number;
106-
getText(): string;
107102
}
108103

109-
function createTextWriter(): TextWriter {
104+
function createTextWriter(): EmitTextWriter {
110105
var output = "";
111106
var indent = 0;
112107
var lineStart = true;
@@ -1851,6 +1846,7 @@ module ts {
18511846
var increaseIndent = writer.increaseIndent;
18521847
var decreaseIndent = writer.decreaseIndent;
18531848

1849+
var enclosingDeclaration: Node;
18541850
function emitLines(nodes: Node[]) {
18551851
for (var i = 0, n = nodes.length; i < n; i++) {
18561852
emitNode(nodes[i]);
@@ -1874,6 +1870,7 @@ module ts {
18741870

18751871
function emitSourceFile(node: SourceFile) {
18761872
currentSourceFile = node;
1873+
enclosingDeclaration = node;
18771874
emitLines(node.statements);
18781875
}
18791876

@@ -1969,13 +1966,16 @@ module ts {
19691966
write(".");
19701967
emitSourceTextOfNode(node.name);
19711968
}
1969+
var prevEnclosingDeclaration = enclosingDeclaration;
1970+
enclosingDeclaration = node;
19721971
write(" {");
19731972
writeLine();
19741973
increaseIndent();
19751974
emitLines((<Block>node.body).statements);
19761975
decreaseIndent();
19771976
write("}");
19781977
writeLine();
1978+
enclosingDeclaration = prevEnclosingDeclaration;
19791979
}
19801980
}
19811981

@@ -2010,9 +2010,8 @@ module ts {
20102010
emitSourceTextOfNode(node.name);
20112011
if (node.constraint) {
20122012
write(" extends ");
2013-
// TODO(shkamat): emit constraint using type
2014-
emitSourceTextOfNode(node.constraint);
2015-
}
2013+
resolver.writeTypeAtLocation(node.constraint, enclosingDeclaration, TypeFormatFlags.None, writer);
2014+
}
20162015
}
20172016

20182017
if (typeParameters) {
@@ -2023,10 +2022,13 @@ module ts {
20232022
}
20242023

20252024
function emitHeritageClause(typeReferences: TypeReferenceNode[], isImplementsList: boolean) {
2025+
function emitTypeOfTypeReference(node: Node) {
2026+
resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.WriteArrayAsGenericType, writer);
2027+
}
2028+
20262029
if (typeReferences) {
20272030
write(isImplementsList ? " implments " : " extends ");
2028-
// TODO(shkamat): get the symbol name in the scope for this node
2029-
emitCommaList(typeReferences, emitSourceTextOfNode);
2031+
emitCommaList(typeReferences, emitTypeOfTypeReference);
20302032
}
20312033
}
20322034

@@ -2045,6 +2047,8 @@ module ts {
20452047
emitDeclarationFlags(node);
20462048
write("class ");
20472049
emitSourceTextOfNode(node.name);
2050+
var prevEnclosingDeclaration = enclosingDeclaration;
2051+
enclosingDeclaration = node;
20482052
emitTypeParameters(node.typeParameters);
20492053
if (node.baseType) {
20502054
emitHeritageClause([node.baseType], /*isImplementsList*/ false);
@@ -2058,6 +2062,7 @@ module ts {
20582062
decreaseIndent();
20592063
write("}");
20602064
writeLine();
2065+
enclosingDeclaration = prevEnclosingDeclaration;
20612066
}
20622067
}
20632068

@@ -2066,6 +2071,8 @@ module ts {
20662071
emitDeclarationFlags(node);
20672072
write("interface ");
20682073
emitSourceTextOfNode(node.name);
2074+
var prevEnclosingDeclaration = enclosingDeclaration;
2075+
enclosingDeclaration = node;
20692076
emitTypeParameters(node.typeParameters);
20702077
emitHeritageClause(node.baseTypes, /*isImplementsList*/ false);
20712078
write(" {");
@@ -2075,6 +2082,7 @@ module ts {
20752082
decreaseIndent();
20762083
write("}");
20772084
writeLine();
2085+
enclosingDeclaration = prevEnclosingDeclaration;
20782086
}
20792087
}
20802088

@@ -2094,7 +2102,8 @@ module ts {
20942102
write("?");
20952103
}
20962104
if (!(node.flags & NodeFlags.Private)) {
2097-
// TODO(shkamat): emit type of the node in given scope
2105+
write(": ");
2106+
resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.None, writer);
20982107
}
20992108
}
21002109
}
@@ -2116,8 +2125,8 @@ module ts {
21162125
emitDeclarationFlags(node);
21172126
emitSourceTextOfNode(node.name);
21182127
if (!(node.flags & NodeFlags.Private)) {
2119-
// TODO(shkamat): emit type of the node in given scope
2120-
// If get accessor -> return type of getAccessor otherwise parameter type of setAccessor
2128+
write(": ");
2129+
resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.None, writer);
21212130
}
21222131
write(";");
21232132
writeLine();
@@ -2134,7 +2143,7 @@ module ts {
21342143
emitSourceTextOfNode(node.name);
21352144
}
21362145
else if (node.kind === SyntaxKind.Constructor) {
2137-
write("constructor ");
2146+
write("constructor");
21382147
}
21392148
else {
21402149
emitSourceTextOfNode(node.name);
@@ -2170,8 +2179,10 @@ module ts {
21702179
write(")");
21712180
}
21722181

2173-
if (!(node.flags & NodeFlags.Private)) {
2174-
// TODO(shkamat): emit return type of the signature
2182+
// If this is not a constructor and is not private, emit the return type
2183+
if (node.kind !== SyntaxKind.Constructor && !(node.flags & NodeFlags.Private)) {
2184+
write(": ");
2185+
resolver.writeReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, TypeFormatFlags.None, writer);
21752186
}
21762187
write(";");
21772188
writeLine();
@@ -2187,7 +2198,8 @@ module ts {
21872198
}
21882199

21892200
if (!(node.parent.flags & NodeFlags.Private)) {
2190-
// TODO(shkamat): emitType of the parameter if the method is not private
2201+
write(": ");
2202+
resolver.writeTypeAtLocation(node, enclosingDeclaration, TypeFormatFlags.None, writer);
21912203
}
21922204
}
21932205

src/compiler/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,21 @@ module ts {
590590
getSymbolOfIdentifier(identifier: Identifier): Symbol;
591591
}
592592

593+
export interface TextWriter {
594+
write(s: string): void;
595+
writeLine(): void;
596+
increaseIndent(): void;
597+
decreaseIndent(): void;
598+
getText(): string;
599+
}
600+
601+
export enum TypeFormatFlags {
602+
None = 0x00000000,
603+
604+
/** writes Array<T> instead T[] */
605+
WriteArrayAsGenericType = 0x00000001, // Declarations
606+
}
607+
593608
export interface EmitResolver {
594609
getProgram(): Program;
595610
getModuleObjectName(node: ModuleDeclaration): string;
@@ -603,6 +618,8 @@ module ts {
603618
shouldEmitDeclarations(): boolean;
604619
isReferencedInExportAssignment(node: Declaration): boolean;
605620
isImplementationOfOverload(node: FunctionDeclaration): boolean;
621+
writeTypeAtLocation(location: Node, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: TextWriter): void;
622+
writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: TextWriter): void;
606623
}
607624

608625
export enum SymbolFlags {

tests/baselines/reference/commentsClass.js

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -120,38 +120,38 @@ var i8_c = c8;
120120
//// [commentsClass.d.ts]
121121
declare class c2 {
122122
}
123-
declare var i2;
124-
declare var i2_c;
123+
declare var i2: c2;
124+
declare var i2_c: typeof c2;
125125
declare class c3 {
126-
constructor ();
126+
constructor();
127127
}
128-
declare var i3;
129-
declare var i3_c;
128+
declare var i3: c3;
129+
declare var i3_c: typeof c3;
130130
declare class c4 {
131-
constructor ();
131+
constructor();
132132
}
133-
declare var i4;
134-
declare var i4_c;
133+
declare var i4: c4;
134+
declare var i4_c: typeof c4;
135135
declare class c5 {
136-
static s1;
136+
static s1: number;
137137
}
138-
declare var i5;
139-
declare var i5_c;
138+
declare var i5: c5;
139+
declare var i5_c: typeof c5;
140140
declare class c6 {
141-
static s1;
142-
constructor ();
141+
static s1: number;
142+
constructor();
143143
}
144-
declare var i6;
145-
declare var i6_c;
144+
declare var i6: c6;
145+
declare var i6_c: typeof c6;
146146
declare class c7 {
147-
static s1;
148-
constructor ();
147+
static s1: number;
148+
constructor();
149149
}
150-
declare var i7;
151-
declare var i7_c;
150+
declare var i7: c7;
151+
declare var i7_c: typeof c7;
152152
declare class c8 {
153-
static s1;
154-
constructor ();
153+
static s1: number;
154+
constructor();
155155
}
156-
declare var i8;
157-
declare var i8_c;
156+
declare var i8: c8;
157+
declare var i8_c: typeof c8;

tests/baselines/reference/commentsClassMembers.js

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -439,67 +439,67 @@ cProperties_i.nc_p2 = cProperties_i.nc_p1;
439439

440440
//// [commentsClassMembers.d.ts]
441441
declare class c1 {
442-
p1;
443-
p2(b);
444-
p3;
442+
p1: number;
443+
p2(b: number): number;
444+
p3: number;
445445
private pp1;
446446
private pp2(b);
447447
private pp3;
448-
constructor ();
449-
static s1;
450-
static s2(b);
451-
static s3;
452-
nc_p1;
453-
nc_p2(b);
454-
nc_p3;
448+
constructor();
449+
static s1: number;
450+
static s2(b: number): number;
451+
static s3: number;
452+
nc_p1: number;
453+
nc_p2(b: number): number;
454+
nc_p3: number;
455455
private nc_pp1;
456456
private nc_pp2(b);
457457
private nc_pp3;
458-
static nc_s1;
459-
static nc_s2(b);
460-
static nc_s3;
461-
a_p1;
462-
a_p2(b);
463-
a_p3;
458+
static nc_s1: number;
459+
static nc_s2(b: number): number;
460+
static nc_s3: number;
461+
a_p1: number;
462+
a_p2(b: number): number;
463+
a_p3: number;
464464
private a_pp1;
465465
private a_pp2(b);
466466
private a_pp3;
467-
static a_s1;
468-
static a_s2(b);
469-
static a_s3;
470-
b_p1;
471-
b_p2(b);
472-
b_p3;
467+
static a_s1: number;
468+
static a_s2(b: number): number;
469+
static a_s3: number;
470+
b_p1: number;
471+
b_p2(b: number): number;
472+
b_p3: number;
473473
private b_pp1;
474474
private b_pp2(b);
475475
private b_pp3;
476-
static b_s1;
477-
static b_s2(b);
478-
static b_s3;
476+
static b_s1: number;
477+
static b_s2(b: number): number;
478+
static b_s3: number;
479479
}
480-
declare var i1;
481-
declare var i1_p;
482-
declare var i1_f;
483-
declare var i1_r;
484-
declare var i1_prop;
485-
declare var i1_nc_p;
486-
declare var i1_ncf;
487-
declare var i1_ncr;
488-
declare var i1_ncprop;
489-
declare var i1_s_p;
490-
declare var i1_s_f;
491-
declare var i1_s_r;
492-
declare var i1_s_prop;
493-
declare var i1_s_nc_p;
494-
declare var i1_s_ncf;
495-
declare var i1_s_ncr;
496-
declare var i1_s_ncprop;
497-
declare var i1_c;
480+
declare var i1: c1;
481+
declare var i1_p: number;
482+
declare var i1_f: (b: number) => number;
483+
declare var i1_r: number;
484+
declare var i1_prop: number;
485+
declare var i1_nc_p: number;
486+
declare var i1_ncf: (b: number) => number;
487+
declare var i1_ncr: number;
488+
declare var i1_ncprop: number;
489+
declare var i1_s_p: number;
490+
declare var i1_s_f: (b: number) => number;
491+
declare var i1_s_r: number;
492+
declare var i1_s_prop: number;
493+
declare var i1_s_nc_p: number;
494+
declare var i1_s_ncf: (b: number) => number;
495+
declare var i1_s_ncr: number;
496+
declare var i1_s_ncprop: number;
497+
declare var i1_c: typeof c1;
498498
declare class cProperties {
499499
private val;
500-
p1;
501-
nc_p1;
502-
p2;
503-
nc_p2;
500+
p1: number;
501+
nc_p1: number;
502+
p2: number;
503+
nc_p2: number;
504504
}
505-
declare var cProperties_i;
505+
declare var cProperties_i: cProperties;

0 commit comments

Comments
 (0)