@@ -7,7 +7,8 @@ import ts = require("typescript");
7
7
export function translateProgram ( program : ts . Program ) : string {
8
8
var result : string = "" ;
9
9
program . getSourceFiles ( )
10
- . filter ( ( sourceFile : ts . SourceFile ) => sourceFile . fileName . indexOf ( ".d.ts" ) < 0 )
10
+ . filter ( ( sourceFile : ts . SourceFile ) =>
11
+ sourceFile . fileName . indexOf ( ".d.ts" ) < 0 )
11
12
. forEach ( emitDart ) ;
12
13
return result ;
13
14
@@ -16,9 +17,7 @@ export function translateProgram(program: ts.Program): string {
16
17
result += str ;
17
18
}
18
19
19
- function visitEach ( nodes ) {
20
- nodes . forEach ( visit ) ;
21
- }
20
+ function visitEach ( nodes ) { nodes . forEach ( visit ) ; }
22
21
23
22
function visitList ( nodes : ts . NodeArray < ts . Node > ) {
24
23
for ( var i = 0 ; i < nodes . length ; i ++ ) {
@@ -48,14 +47,16 @@ export function translateProgram(program: ts.Program): string {
48
47
throw new Error ( `${ file . fileName } :${ pos . line } :${ pos . character } : ${ message } ` ) ;
49
48
}
50
49
51
- // Comments attach to all following AST nodes before the next 'physical' token. Track the earliest
50
+ // Comments attach to all following AST nodes before the next 'physical'
51
+ // token. Track the earliest
52
52
// offset to avoid printing comments multiple times.
53
53
// TODO(martinprobst): Refactor this.
54
54
var lastCommentIdx ;
55
55
56
56
function visit ( node : ts . Node ) {
57
57
// console.log(`Node kind: ${node.kind} ${node.getText()}`);
58
- var comments = ts . getLeadingCommentRanges ( node . getSourceFile ( ) . text , node . getFullStart ( ) ) ;
58
+ var comments = ts . getLeadingCommentRanges ( node . getSourceFile ( ) . text ,
59
+ node . getFullStart ( ) ) ;
59
60
if ( comments ) {
60
61
comments . forEach ( ( c ) => {
61
62
if ( c . pos <= lastCommentIdx ) return ;
@@ -73,12 +74,12 @@ export function translateProgram(program: ts.Program): string {
73
74
break ;
74
75
75
76
case ts . SyntaxKind . VariableDeclarationList :
76
- var varDeclList = < ts . VariableDeclarationList > node ;
77
+ var varDeclList = < ts . VariableDeclarationList > node ;
77
78
visitEach ( varDeclList . declarations ) ;
78
79
break ;
79
80
80
81
case ts . SyntaxKind . VariableDeclaration :
81
- var varDecl = < ts . VariableDeclaration > node ;
82
+ var varDecl = < ts . VariableDeclaration > node ;
82
83
if ( varDecl . type ) {
83
84
visit ( varDecl . type ) ;
84
85
} else {
@@ -102,7 +103,7 @@ export function translateProgram(program: ts.Program): string {
102
103
break ;
103
104
104
105
case ts . SyntaxKind . ParenthesizedExpression :
105
- var parenExpr = < ts . ParenthesizedExpression > node ;
106
+ var parenExpr = < ts . ParenthesizedExpression > node ;
106
107
emit ( '(' ) ;
107
108
visit ( parenExpr . expression ) ;
108
109
emit ( ')' ) ;
@@ -113,31 +114,31 @@ export function translateProgram(program: ts.Program): string {
113
114
emit ( ';\n' ) ;
114
115
break ;
115
116
case ts . SyntaxKind . ExpressionStatement :
116
- var expr = < ts . ExpressionStatement > node ;
117
+ var expr = < ts . ExpressionStatement > node ;
117
118
visit ( expr . expression ) ;
118
119
emit ( ';' ) ;
119
120
break ;
120
121
case ts . SyntaxKind . SwitchStatement :
121
- var switchStmt = < ts . SwitchStatement > node ;
122
+ var switchStmt = < ts . SwitchStatement > node ;
122
123
emit ( 'switch (' ) ;
123
124
visit ( switchStmt . expression ) ;
124
125
emit ( ') {' ) ;
125
126
visitEach ( switchStmt . clauses ) ;
126
127
emit ( '}' ) ;
127
128
break ;
128
129
case ts . SyntaxKind . CaseClause :
129
- var caseClause = < ts . CaseClause > node ;
130
+ var caseClause = < ts . CaseClause > node ;
130
131
emit ( 'case' ) ;
131
132
visit ( caseClause . expression ) ;
132
133
emit ( ':' ) ;
133
134
visitEach ( caseClause . statements ) ;
134
135
break ;
135
136
case ts . SyntaxKind . DefaultClause :
136
137
emit ( 'default :' ) ;
137
- visitEach ( ( < ts . DefaultClause > node ) . statements ) ;
138
+ visitEach ( ( < ts . DefaultClause > node ) . statements ) ;
138
139
break ;
139
140
case ts . SyntaxKind . IfStatement :
140
- var ifStmt = < ts . IfStatement > node ;
141
+ var ifStmt = < ts . IfStatement > node ;
141
142
emit ( 'if (' ) ;
142
143
visit ( ifStmt . expression ) ;
143
144
emit ( ')' ) ;
@@ -149,7 +150,7 @@ export function translateProgram(program: ts.Program): string {
149
150
break ;
150
151
151
152
case ts . SyntaxKind . ForStatement :
152
- var forStmt = < ts . ForStatement > node ;
153
+ var forStmt = < ts . ForStatement > node ;
153
154
emit ( 'for (' ) ;
154
155
if ( forStmt . initializer ) visit ( forStmt . initializer ) ;
155
156
emit ( ';' ) ;
@@ -160,25 +161,26 @@ export function translateProgram(program: ts.Program): string {
160
161
visit ( forStmt . statement ) ;
161
162
break ;
162
163
case ts . SyntaxKind . ForInStatement :
163
- // TODO(martinprobst): Dart's for-in loops actually have different semantics, they are more
164
+ // TODO(martinprobst): Dart's for-in loops actually have different
165
+ // semantics, they are more
164
166
// like for-of loops, iterating over collections.
165
- var forInStmt = < ts . ForInStatement > node ;
166
- emit ( 'for (' ) ;
167
+ var forInStmt = < ts . ForInStatement > node ;
168
+ emit ( 'for (' ) ;
167
169
if ( forInStmt . initializer ) visit ( forInStmt . initializer ) ;
168
170
emit ( 'in' ) ;
169
171
visit ( forInStmt . expression ) ;
170
172
emit ( ')' ) ;
171
173
visit ( forInStmt . statement ) ;
172
174
break ;
173
175
case ts . SyntaxKind . WhileStatement :
174
- var whileStmt = < ts . WhileStatement > node ;
176
+ var whileStmt = < ts . WhileStatement > node ;
175
177
emit ( 'while (' ) ;
176
178
visit ( whileStmt . expression ) ;
177
179
emit ( ')' ) ;
178
180
visit ( whileStmt . statement ) ;
179
181
break ;
180
182
case ts . SyntaxKind . DoStatement :
181
- var doStmt = < ts . DoStatement > node ;
183
+ var doStmt = < ts . DoStatement > node ;
182
184
emit ( 'do' ) ;
183
185
visit ( doStmt . statement ) ;
184
186
emit ( 'while (' ) ;
@@ -192,11 +194,11 @@ export function translateProgram(program: ts.Program): string {
192
194
193
195
// Literals.
194
196
case ts . SyntaxKind . NumericLiteral :
195
- var sLit = < ts . LiteralExpression > node ;
197
+ var sLit = < ts . LiteralExpression > node ;
196
198
emit ( sLit . getText ( ) ) ;
197
199
break ;
198
200
case ts . SyntaxKind . StringLiteral :
199
- var sLit = < ts . LiteralExpression > node ;
201
+ var sLit = < ts . LiteralExpression > node ;
200
202
emit ( JSON . stringify ( sLit . text ) ) ;
201
203
break ;
202
204
case ts . SyntaxKind . TrueKeyword :
@@ -209,50 +211,50 @@ export function translateProgram(program: ts.Program): string {
209
211
emit ( 'null' ) ;
210
212
break ;
211
213
case ts . SyntaxKind . RegularExpressionLiteral :
212
- emit ( ( < ts . LiteralExpression > node ) . text ) ;
214
+ emit ( ( < ts . LiteralExpression > node ) . text ) ;
213
215
break ;
214
216
case ts . SyntaxKind . ThisKeyword :
215
217
emit ( 'this' ) ;
216
218
break ;
217
219
218
220
case ts . SyntaxKind . PropertyAccessExpression :
219
- var propAccess = < ts . PropertyAccessExpression > node ;
221
+ var propAccess = < ts . PropertyAccessExpression > node ;
220
222
visit ( propAccess . expression ) ;
221
223
emit ( '.' ) ;
222
224
visit ( propAccess . name ) ;
223
225
break ;
224
226
case ts . SyntaxKind . ElementAccessExpression :
225
- var elemAccess = < ts . ElementAccessExpression > node ;
227
+ var elemAccess = < ts . ElementAccessExpression > node ;
226
228
visit ( elemAccess . expression ) ;
227
229
emit ( '[' ) ;
228
230
visit ( elemAccess . argumentExpression ) ;
229
231
emit ( ']' ) ;
230
232
break ;
231
233
case ts . SyntaxKind . NewExpression :
232
234
emit ( 'new' ) ;
233
- visitCall ( < ts . NewExpression > node ) ;
235
+ visitCall ( < ts . NewExpression > node ) ;
234
236
break ;
235
237
case ts . SyntaxKind . CallExpression :
236
- visitCall ( < ts . CallExpression > node ) ;
238
+ visitCall ( < ts . CallExpression > node ) ;
237
239
break ;
238
240
case ts . SyntaxKind . BinaryExpression :
239
- var binExpr = < ts . BinaryExpression > node ;
241
+ var binExpr = < ts . BinaryExpression > node ;
240
242
visit ( binExpr . left ) ;
241
243
emit ( ts . tokenToString ( binExpr . operatorToken . kind ) ) ;
242
244
visit ( binExpr . right ) ;
243
245
break ;
244
246
case ts . SyntaxKind . PrefixUnaryExpression :
245
- var prefixUnary = < ts . PrefixUnaryExpression > node ;
247
+ var prefixUnary = < ts . PrefixUnaryExpression > node ;
246
248
emit ( ts . tokenToString ( prefixUnary . operator ) ) ;
247
249
visit ( prefixUnary . operand ) ;
248
250
break ;
249
251
case ts . SyntaxKind . PostfixUnaryExpression :
250
- var postfixUnary = < ts . PostfixUnaryExpression > node ;
252
+ var postfixUnary = < ts . PostfixUnaryExpression > node ;
251
253
visit ( postfixUnary . operand ) ;
252
254
emit ( ts . tokenToString ( postfixUnary . operator ) ) ;
253
255
break ;
254
256
case ts . SyntaxKind . ConditionalExpression :
255
- var conditional = < ts . ConditionalExpression > node ;
257
+ var conditional = < ts . ConditionalExpression > node ;
256
258
visit ( conditional . condition ) ;
257
259
emit ( '?' ) ;
258
260
visit ( conditional . whenTrue ) ;
@@ -274,15 +276,15 @@ export function translateProgram(program: ts.Program): string {
274
276
break ;
275
277
276
278
case ts . SyntaxKind . TypeReference :
277
- var typeRef = < ts . TypeReferenceNode > node ;
279
+ var typeRef = < ts . TypeReferenceNode > node ;
278
280
visit ( typeRef . typeName ) ;
279
281
if ( typeRef . typeArguments ) {
280
282
visitEach ( typeRef . typeArguments ) ;
281
283
}
282
284
break ;
283
285
284
286
case ts . SyntaxKind . ClassDeclaration :
285
- var classDecl = < ts . ClassDeclaration > node ;
287
+ var classDecl = < ts . ClassDeclaration > node ;
286
288
emit ( 'class' ) ;
287
289
visit ( classDecl . name ) ;
288
290
if ( classDecl . typeParameters ) {
@@ -300,7 +302,7 @@ export function translateProgram(program: ts.Program): string {
300
302
break ;
301
303
302
304
case ts . SyntaxKind . HeritageClause :
303
- var heritageClause = < ts . HeritageClause > node ;
305
+ var heritageClause = < ts . HeritageClause > node ;
304
306
if ( heritageClause . token === ts . SyntaxKind . ExtendsKeyword ) {
305
307
emit ( 'extends' ) ;
306
308
} else {
@@ -311,12 +313,12 @@ export function translateProgram(program: ts.Program): string {
311
313
break ;
312
314
313
315
case ts . SyntaxKind . Constructor :
314
- var ctorDecl = < ts . ConstructorDeclaration > node ;
316
+ var ctorDecl = < ts . ConstructorDeclaration > node ;
315
317
// Find containing class name.
316
318
var className ;
317
319
for ( var parent = ctorDecl . parent ; parent ; parent = parent . parent ) {
318
320
if ( parent . kind == ts . SyntaxKind . ClassDeclaration ) {
319
- className = ( < ts . ClassDeclaration > parent ) . name ;
321
+ className = ( < ts . ClassDeclaration > parent ) . name ;
320
322
break ;
321
323
}
322
324
}
@@ -326,7 +328,7 @@ export function translateProgram(program: ts.Program): string {
326
328
break ;
327
329
328
330
case ts . SyntaxKind . PropertyDeclaration :
329
- var propertyDecl = < ts . PropertyDeclaration > node ;
331
+ var propertyDecl = < ts . PropertyDeclaration > node ;
330
332
visit ( propertyDecl . type ) ;
331
333
visit ( propertyDecl . name ) ;
332
334
if ( propertyDecl . initializer ) {
@@ -337,22 +339,23 @@ export function translateProgram(program: ts.Program): string {
337
339
break ;
338
340
339
341
case ts . SyntaxKind . MethodDeclaration :
340
- var methodDecl = < ts . MethodDeclaration > node ;
342
+ var methodDecl = < ts . MethodDeclaration > node ;
341
343
if ( methodDecl . type ) visit ( methodDecl . type ) ;
342
344
visit ( methodDecl . name ) ;
343
345
visitFunctionLike ( methodDecl ) ;
344
346
break ;
345
347
346
348
case ts . SyntaxKind . FunctionDeclaration :
347
- var funcDecl = < ts . FunctionDeclaration > node ;
349
+ var funcDecl = < ts . FunctionDeclaration > node ;
348
350
if ( funcDecl . type ) visit ( funcDecl . type ) ;
349
351
visit ( funcDecl . name ) ;
350
352
visitFunctionLike ( funcDecl ) ;
351
353
break ;
352
354
353
355
case ts . SyntaxKind . Parameter :
354
- var paramDecl = < ts . ParameterDeclaration > node ;
355
- if ( paramDecl . dotDotDotToken ) reportError ( node , 'rest parameters are unsupported' ) ;
356
+ var paramDecl = < ts . ParameterDeclaration > node ;
357
+ if ( paramDecl . dotDotDotToken )
358
+ reportError ( node , 'rest parameters are unsupported' ) ;
356
359
if ( paramDecl . initializer ) emit ( '[' ) ;
357
360
if ( paramDecl . type ) visit ( paramDecl . type ) ;
358
361
visit ( paramDecl . name ) ;
@@ -365,18 +368,19 @@ export function translateProgram(program: ts.Program): string {
365
368
366
369
case ts . SyntaxKind . ReturnStatement :
367
370
emit ( 'return' ) ;
368
- visit ( ( < ts . ReturnStatement > node ) . expression ) ;
371
+ visit ( ( < ts . ReturnStatement > node ) . expression ) ;
369
372
emit ( ';' ) ;
370
373
break ;
371
374
372
375
case ts . SyntaxKind . Block :
373
376
emit ( '{' ) ;
374
- visitEach ( ( < ts . Block > node ) . statements ) ;
377
+ visitEach ( ( < ts . Block > node ) . statements ) ;
375
378
emit ( '}' ) ;
376
379
break ;
377
380
378
381
default :
379
- reportError ( node , "Unsupported node type " + ( < any > ts ) . SyntaxKind [ node . kind ] ) ;
382
+ reportError (
383
+ node , "Unsupported node type " + ( < any > ts ) . SyntaxKind [ node . kind ] ) ;
380
384
break ;
381
385
}
382
386
}
@@ -387,11 +391,14 @@ export function translateProgram(program: ts.Program): string {
387
391
}
388
392
389
393
export function translateFiles ( fileNames : string [ ] ) : string {
390
- var options : ts . CompilerOptions = { target : ts . ScriptTarget . ES6 , module : ts . ModuleKind . CommonJS } ;
394
+ var options : ts . CompilerOptions = {
395
+ target : ts . ScriptTarget . ES6 ,
396
+ module : ts . ModuleKind . CommonJS
397
+ } ;
391
398
var host = ts . createCompilerHost ( options ) ;
392
399
var program = ts . createProgram ( fileNames , options , host ) ;
393
400
return translateProgram ( program ) ;
394
401
}
395
402
396
403
// CLI entry point
397
- translateFiles ( process . argv . slice ( 2 ) ) ;
404
+ translateFiles ( process . argv . slice ( 2 ) ) ;
0 commit comments