From ff38aaff9511ef06e3a5c5d7c587807dc9903c32 Mon Sep 17 00:00:00 2001 From: Ika Date: Thu, 26 Apr 2018 18:22:43 +0800 Subject: [PATCH] fix(javascript): correct escape for markdown in js (#4381) * test: add tests * fix(javascript): correct escape for markdown in js * test: add trailing newline --- src/language-js/embed.js | 7 +++-- .../__snapshots__/jsfmt.spec.js.snap | 29 +++++++++++++++++++ tests/multiparser_js_markdown/escape.js | 13 +++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 tests/multiparser_js_markdown/escape.js diff --git a/src/language-js/embed.js b/src/language-js/embed.js index 9fda2525c..aef329088 100644 --- a/src/language-js/embed.js +++ b/src/language-js/embed.js @@ -164,7 +164,10 @@ function embed(path, print, textToDoc /*, options */) { (parentParent.tag.name === "md" || parentParent.tag.name === "markdown"))) ) { - const text = parent.quasis[0].value.cooked; + const text = parent.quasis[0].value.raw.replace( + /((?:\\\\)*)\\`/g, + (_, backslashes) => "\\".repeat(backslashes.length / 2) + "`" + ); const indentation = getIndentation(text); const hasIndent = indentation !== ""; return concat([ @@ -207,7 +210,7 @@ function escapeBackticks(doc) { currentDoc.parts.forEach(part => { if (typeof part === "string") { - parts.push(part.replace(/`/g, "\\`")); + parts.push(part.replace(/(\\*)`/g, "$1$1\\`")); } else { parts.push(part); } diff --git a/tests/multiparser_js_markdown/__snapshots__/jsfmt.spec.js.snap b/tests/multiparser_js_markdown/__snapshots__/jsfmt.spec.js.snap index 490cbda44..2af1b8b38 100644 --- a/tests/multiparser_js_markdown/__snapshots__/jsfmt.spec.js.snap +++ b/tests/multiparser_js_markdown/__snapshots__/jsfmt.spec.js.snap @@ -69,6 +69,35 @@ markdown\\\` `; +exports[`escape.js 1`] = ` +markdown\` + const cssString = css\\\` + background-color: \\$\\{color('base')\\} + \\\`; +\` + +markdown\` + - \\\` + - \\\\\\\` + - \\\\\\\\ + - \\$ + - \\u1234 +\` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +markdown\` + const cssString = css\\\`background-color: \\$\\{color('base')\\}\\\`; +\`; + +markdown\` + * \\\` + * \\\\\\\` + * \\\\\\\\ + * \\$ + * \\u1234 +\`; + +`; + exports[`markdown.js 1`] = ` export default function ReadMe() { return md\` diff --git a/tests/multiparser_js_markdown/escape.js b/tests/multiparser_js_markdown/escape.js new file mode 100644 index 000000000..055675844 --- /dev/null +++ b/tests/multiparser_js_markdown/escape.js @@ -0,0 +1,13 @@ +markdown` + const cssString = css\` + background-color: \$\{color('base')\} + \`; +` + +markdown` + - \` + - \\\` + - \\\\ + - \$ + - \u1234 +`