diff --git a/src/services/refactors/convertStringOrTemplateLiteral.ts b/src/services/refactors/convertStringOrTemplateLiteral.ts index 2791b66b046..e7ffebf6bcd 100644 --- a/src/services/refactors/convertStringOrTemplateLiteral.ts +++ b/src/services/refactors/convertStringOrTemplateLiteral.ts @@ -83,8 +83,12 @@ namespace ts.refactor.convertStringOrTemplateLiteral { return text.length === 0 ? [expression] : [expression, createStringLiteral(text)]; } + function isNotEqualsOperator(node: BinaryExpression) { + return node.operatorToken.kind !== SyntaxKind.EqualsToken; + } + function getParentBinaryExpression(expr: Node) { - while (isBinaryExpression(expr.parent)) { + while (isBinaryExpression(expr.parent) && isNotEqualsOperator(expr.parent)) { expr = expr.parent; } return expr; diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateAvailabilityReassignment.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateAvailabilityReassignment.ts new file mode 100644 index 00000000000..03f87ed521f --- /dev/null +++ b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateAvailabilityReassignment.ts @@ -0,0 +1,16 @@ +/// + +//// let foo = "" +//// /*z*/f/*y*/oo = "/*x*/M/*w*/r Bar" + " is" + /*v*/4/*u*/2 + " years old" + +goTo.select("z", "y"); +verify.not.refactorAvailable("Convert string concatenation or template literal", "Convert to string concatenation"); +verify.not.refactorAvailable("Convert string concatenation or template literal", "Convert to template literal"); + +goTo.select("x", "w"); +verify.not.refactorAvailable("Convert string concatenation or template literal", "Convert to string concatenation"); +verify.refactorAvailable("Convert string concatenation or template literal", "Convert to template literal"); + +goTo.select("v", "u"); +verify.not.refactorAvailable("Convert string concatenation or template literal", "Convert to string concatenation"); +verify.refactorAvailable("Convert string concatenation or template literal", "Convert to template literal"); diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateDollar.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateDollar.ts index a073b6838f5..9f234f01f84 100644 --- a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateDollar.ts +++ b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateDollar.ts @@ -10,3 +10,4 @@ edit.applyRefactor({ newContent: "const foo = `with $\\\\{dollar}`", }); +