From 9b9aa350af84320aafddafbbd22814d8da8de0d3 Mon Sep 17 00:00:00 2001 From: BigAru Date: Fri, 7 Dec 2018 15:41:04 +0100 Subject: [PATCH] optimize getEdits string concatenation --- .../refactors/convertStringOrTemplateLiteral.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/services/refactors/convertStringOrTemplateLiteral.ts b/src/services/refactors/convertStringOrTemplateLiteral.ts index a0f6775caa6..8874c0479be 100644 --- a/src/services/refactors/convertStringOrTemplateLiteral.ts +++ b/src/services/refactors/convertStringOrTemplateLiteral.ts @@ -68,15 +68,10 @@ namespace ts.refactor.convertStringOrTemplateLiteral { if (isTemplateExpression(node.parent) || isTemplateSpan(node.parent)) { const templateLiteralExpression = isTemplateSpan(node.parent) ? node.parent.parent : node.parent; const { head, templateSpans } = templateLiteralExpression; - const arrayOfNodes: Expression[] = []; + const arrayOfNodes = templateSpans.map(templateSpanToExpressions) + .reduce((accumulator, nextArray) => accumulator.concat(nextArray)); - if (head.text.length !== 0) arrayOfNodes.push(createStringLiteral(head.text)); - - templateSpans.forEach(ts => { - arrayOfNodes.push(ts.expression); - const text = ts.literal.text; - if (text.length !== 0) arrayOfNodes.push(createStringLiteral(text)); - }); + if (head.text.length !== 0) arrayOfNodes.unshift(createStringLiteral(head.text)); const binaryExpression = arrayToTree(arrayOfNodes); return textChanges.ChangeTracker.with(context, t => t.replaceNode(context.file, templateLiteralExpression, binaryExpression)); @@ -88,6 +83,12 @@ namespace ts.refactor.convertStringOrTemplateLiteral { } } + function templateSpanToExpressions(templateSpan: TemplateSpan): Expression[] { + const { expression, literal } = templateSpan; + const text = literal.text; + return text.length === 0 ? [expression] : [expression, createStringLiteral(text)]; + } + function getParentBinaryExpression(expr: Node) { while (isBinaryExpression(expr.parent)) { expr = expr.parent;