@@ -14,17 +14,10 @@ namespace ts.codefix {
14
14
getAllCodeActions : context => codeFixAll ( context , errorCodes , ( changes , err ) => convertToAsyncFunction ( changes , err . file , err . start , context . program . getTypeChecker ( ) , context ) ) ,
15
15
} ) ;
16
16
17
-
18
- /*
19
- custom type to encapsulate information for variable declarations synthesized in the refactor
20
- numberOfUsesOriginal - number of times the variable should be assigned in the refactor
21
- numberOfUsesSynthesized - count of how many times the variable has been assigned so far
22
- At the end of the refactor, numberOfUsesOriginal should === numberOfUsesSynthesized
23
- */
24
17
interface SynthIdentifier {
25
18
identifier : Identifier ;
26
19
types : Type [ ] ;
27
- numberOfAssignmentsOriginal : number ;
20
+ numberOfAssignmentsOriginal : number ; // number of times the variable should be assigned in the refactor
28
21
}
29
22
30
23
interface SymbolAndIdentifier {
@@ -380,7 +373,7 @@ namespace ts.codefix {
380
373
const hasPrevArgName = prevArgName && prevArgName . identifier . text . length > 0 ;
381
374
const originalNodeParent = node . original ? node . original . parent : node . parent ;
382
375
if ( hasPrevArgName && ! shouldReturn && ( ! originalNodeParent || isPropertyAccessExpression ( originalNodeParent ) ) ) {
383
- return createVariableDeclarationOrAssignment ( prevArgName ! , createAwait ( node ) , transformer ) . concat ( ) ; // hack to make the types match
376
+ return createTransformedStatement ( prevArgName ! , createAwait ( node ) , transformer ) . concat ( ) ; // hack to make the types match
384
377
}
385
378
else if ( ! hasPrevArgName && ! shouldReturn && ( ! originalNodeParent || isPropertyAccessExpression ( originalNodeParent ) ) ) {
386
379
return [ createStatement ( createAwait ( node ) ) ] ;
@@ -389,7 +382,7 @@ namespace ts.codefix {
389
382
return [ createReturn ( getSynthesizedDeepClone ( node ) ) ] ;
390
383
}
391
384
392
- function createVariableDeclarationOrAssignment ( prevArgName : SynthIdentifier | undefined , rightHandSide : Expression , transformer : Transformer ) : NodeArray < Statement > {
385
+ function createTransformedStatement ( prevArgName : SynthIdentifier | undefined , rightHandSide : Expression , transformer : Transformer ) : NodeArray < Statement > {
393
386
if ( ! prevArgName || prevArgName . identifier . text . length === 0 ) {
394
387
// if there's no argName to assign to, there still might be side effects
395
388
return createNodeArray ( [ createStatement ( rightHandSide ) ] ) ;
@@ -429,7 +422,7 @@ namespace ts.codefix {
429
422
break ;
430
423
}
431
424
const returnType = callSignatures [ 0 ] . getReturnType ( ) ;
432
- const varDeclOrAssignment = createVariableDeclarationOrAssignment ( prevArgName , createAwait ( synthCall ) , transformer ) ;
425
+ const varDeclOrAssignment = createTransformedStatement ( prevArgName , createAwait ( synthCall ) , transformer ) ;
433
426
if ( prevArgName ) {
434
427
prevArgName . types . push ( returnType ) ;
435
428
}
@@ -471,12 +464,12 @@ namespace ts.codefix {
471
464
const type = transformer . checker . getTypeAtLocation ( func ) ;
472
465
const returnType = getLastCallSignature ( type , transformer . checker ) ! . getReturnType ( ) ;
473
466
const rightHandSide = getSynthesizedDeepClone ( funcBody ) ;
474
- const possiblyAwaitedRightHandSide = isPromiseReturningExpression ( funcBody , transformer . checker ) ? createAwait ( rightHandSide ) : rightHandSide ;
475
- const varDeclOrAssignment = createVariableDeclarationOrAssignment ( prevArgName , possiblyAwaitedRightHandSide , transformer ) ;
467
+ const possiblyAwaitedRightHandSide = ! ! transformer . checker . getPromisedTypeOfPromise ( returnType ) ? createAwait ( rightHandSide ) : rightHandSide ;
468
+ const transformedStatement = createTransformedStatement ( prevArgName , possiblyAwaitedRightHandSide , transformer ) ;
476
469
if ( prevArgName ) {
477
470
prevArgName . types . push ( returnType ) ;
478
471
}
479
- return varDeclOrAssignment ;
472
+ return transformedStatement ;
480
473
}
481
474
else {
482
475
return createNodeArray ( [ createReturn ( getSynthesizedDeepClone ( funcBody ) ) ] ) ;
0 commit comments