Improve accuracy of remove unnecessary await fix (#32384)

This commit is contained in:
Andrew Branch
2019-07-15 15:17:32 -07:00
committed by GitHub
parent 17762c480d
commit 7cdfbceb43
3 changed files with 23 additions and 4 deletions
+1 -1
View File
@@ -4701,7 +4701,7 @@ namespace ts {
}
}
function getLeftmostExpression(node: Expression, stopAtCallExpressions: boolean) {
export function getLeftmostExpression(node: Expression, stopAtCallExpressions: boolean) {
while (true) {
switch (node.kind) {
case SyntaxKind.PostfixUnaryExpression:
@@ -26,8 +26,18 @@ namespace ts.codefix {
return;
}
const parenthesizedExpression = tryCast(awaitExpression.parent, isParenthesizedExpression);
const removeParens = parenthesizedExpression && (isIdentifier(awaitExpression.expression) || isCallExpression(awaitExpression.expression));
changeTracker.replaceNode(sourceFile, removeParens ? parenthesizedExpression || awaitExpression : awaitExpression, awaitExpression.expression);
let expressionToReplace: Node = awaitExpression;
const hasSurroundingParens = isParenthesizedExpression(awaitExpression.parent);
if (hasSurroundingParens) {
const leftMostExpression = getLeftmostExpression(awaitExpression.expression, /*stopAtCallExpressions*/ false);
if (isIdentifier(leftMostExpression)) {
const precedingToken = findPrecedingToken(awaitExpression.parent.pos, sourceFile);
if (precedingToken && precedingToken.kind !== SyntaxKind.NewKeyword) {
expressionToReplace = awaitExpression.parent;
}
}
}
changeTracker.replaceNode(sourceFile, expressionToReplace, awaitExpression.expression);
}
}