diff --git a/src/services/refactors/convertStringOrTemplateLiteral.ts b/src/services/refactors/convertStringOrTemplateLiteral.ts index 75e38ff6d02..2791b66b046 100644 --- a/src/services/refactors/convertStringOrTemplateLiteral.ts +++ b/src/services/refactors/convertStringOrTemplateLiteral.ts @@ -175,27 +175,20 @@ namespace ts.refactor.convertStringOrTemplateLiteral { return createTemplateExpression(head, templateSpans); } - const hexToUnicode = (_match: string, grp: string) => String.fromCharCode(parseInt(grp, 16)); const octalToUnicode = (_match: string, grp: string) => String.fromCharCode(parseInt(grp, 8)); function decodeRawString(content: string) { const outerQuotes = /["']((.|\s)*)["']/; - const unicodeEscape = /\\u(\w+)/gi; - const unicodeEscapeWithBraces = /\\u\{(\w+)\}/gi; - const hexEscape = /\\x(\w+)/gi; - const octalEscape = /\\([0-7]+)/g; + const octalEscape = /\\((?:[1-7][0-7]{0,2}|[0-7]{2,3}))/g; return content.replace(outerQuotes, (_match, grp) => grp) - .replace(unicodeEscape, hexToUnicode) - .replace(unicodeEscapeWithBraces, hexToUnicode) - .replace(hexEscape, hexToUnicode) .replace(octalEscape, octalToUnicode); } function escapeText(content: string) { return content.replace("`", "\`") // back-tick - .replace("\${", `$\\{`); // placeholder alike beginning + .replace("${", "$\\{"); // placeholder alike beginning } } diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringAvailabilityTagged.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringAvailabilityTagged.ts index 9327ff0911c..0b02128f3e9 100644 --- a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringAvailabilityTagged.ts +++ b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringAvailabilityTagged.ts @@ -1,6 +1,6 @@ /// -//// function tag(literals: TemplateStringsArray, ...placeholders: string[]) { return "tagged" } +//// function tag(literals: TemplateStringsArray, ...placeholders: any[]) { return "tagged" } //// const alpha = tag/*z*/`/*y*/foobar` //// const beta = tag/*x*/`/*w*/foobar ${/*v*/4/*u*/2}` diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringBackTick.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringBackTick.ts deleted file mode 100644 index 6587f7037f0..00000000000 --- a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringBackTick.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// - -//// const foo = `/*x*/w/*y*/ith back\`tick` - -goTo.select("x", "y"); -edit.applyRefactor({ - refactorName: "Convert string concatenation or template literal", - actionName: "Convert to string concatenation", - actionDescription: "Convert to string concatenation", - newContent: -"const foo = \"with back`tick\"", -}); diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringDollar.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringDollar.ts deleted file mode 100644 index 66758079671..00000000000 --- a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToStringDollar.ts +++ /dev/null @@ -1,12 +0,0 @@ -/// - -//// const foo = `/*x*/w/*y*/ith \${dollar}` - -goTo.select("x", "y"); -edit.applyRefactor({ - refactorName: "Convert string concatenation or template literal", - actionName: "Convert to string concatenation", - actionDescription: "Convert to string concatenation", - newContent: -"const foo = \"with \${dollar}\"", -}); diff --git a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateOctalEscape.ts b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateOctalEscape.ts index e607240f39f..39168d42d3e 100644 --- a/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateOctalEscape.ts +++ b/tests/cases/fourslash/refactorConvertStringOrTemplateLiteral_ToTemplateOctalEscape.ts @@ -1,7 +1,6 @@ /// -debugger; -//// const foo = "/*x*/U/*y*/nicode \u0023 \u{0023} " + "Hex \x23 " + "Octal \43"; +//// const foo = "/*x*/O/*y*/ctal \43"; goTo.select("x", "y"); edit.applyRefactor({ @@ -9,5 +8,5 @@ edit.applyRefactor({ actionName: "Convert to template literal", actionDescription: "Convert to template literal", newContent: -"const foo = `Unicode # # Hex # Octal #\`;", +"const foo = `Octal #`;", });