From 76005291ef09a0711b374a7592f54993bfb60ffb Mon Sep 17 00:00:00 2001 From: Ika Date: Wed, 7 Nov 2018 00:12:36 +0800 Subject: [PATCH 1/3] test: add tests --- tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap | 6 ++++++ tests/multiparser_js_html/lit-html.js | 2 ++ 2 files changed, 8 insertions(+) diff --git a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap index 4f01fba7a1c2..bd878dce6be8 100644 --- a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap +++ b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap @@ -45,6 +45,8 @@ customElements.define('my-element', MyElement); const someHtml1 = html\`
hello \${world}
\`; const someHtml2 = /* HTML */ \`
hello \${world}
\`; + +html\`\` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ import { LitElement, html } from "@polymer/lit-element"; @@ -82,4 +84,8 @@ const someHtml2 = /* HTML */ \`
hello \${world}
\`; +html\` + +\`; + `; diff --git a/tests/multiparser_js_html/lit-html.js b/tests/multiparser_js_html/lit-html.js index 1c432eaf0f2a..2b0ab038be3c 100644 --- a/tests/multiparser_js_html/lit-html.js +++ b/tests/multiparser_js_html/lit-html.js @@ -42,3 +42,5 @@ customElements.define('my-element', MyElement); const someHtml1 = html`
hello ${world}
`; const someHtml2 = /* HTML */ `
hello ${world}
`; + +html`` From bcb650303b5b1fca8f1325494a01718b17f502b6 Mon Sep 17 00:00:00 2001 From: Ika Date: Wed, 7 Nov 2018 00:12:57 +0800 Subject: [PATCH 2/3] fix(html-in-js): do not break empty content --- src/language-js/embed.js | 14 +++++++++++++- .../__snapshots__/jsfmt.spec.js.snap | 4 +--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/language-js/embed.js b/src/language-js/embed.js index a47585906179..13e372c71618 100644 --- a/src/language-js/embed.js +++ b/src/language-js/embed.js @@ -626,7 +626,19 @@ function printHtmlTemplateLiteral(path, print, textToDoc, parser) { } ); - return concat(["`", indent(concat([hardline, contentDoc])), softline, "`"]); + return group( + concat([ + "`", + indent( + concat([ + text.trim().length !== 0 ? hardline : softline, + group(contentDoc) + ]) + ), + softline, + "`" + ]) + ); } module.exports = embed; diff --git a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap index bd878dce6be8..1bf9d50f0800 100644 --- a/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap +++ b/tests/multiparser_js_html/__snapshots__/jsfmt.spec.js.snap @@ -84,8 +84,6 @@ const someHtml2 = /* HTML */ \`
hello \${world}
\`; -html\` - -\`; +html\`\`; `; From 7d7fa1b8e614025cf416200de84d922b213a5d11 Mon Sep 17 00:00:00 2001 From: Ika Date: Wed, 7 Nov 2018 07:41:10 +0800 Subject: [PATCH 3/3] fix: never break empty content --- src/language-js/embed.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/language-js/embed.js b/src/language-js/embed.js index 13e372c71618..a338e4c406a8 100644 --- a/src/language-js/embed.js +++ b/src/language-js/embed.js @@ -582,6 +582,10 @@ function printHtmlTemplateLiteral(path, print, textToDoc, parser) { const expressionDocs = path.map(print, "expressions"); + if (expressionDocs.length === 0 && text.trim().length === 0) { + return "``"; + } + const contentDoc = mapDoc( stripTrailingHardline(textToDoc(text, { parser })), doc => { @@ -627,17 +631,7 @@ function printHtmlTemplateLiteral(path, print, textToDoc, parser) { ); return group( - concat([ - "`", - indent( - concat([ - text.trim().length !== 0 ? hardline : softline, - group(contentDoc) - ]) - ), - softline, - "`" - ]) + concat(["`", indent(concat([hardline, group(contentDoc)])), softline, "`"]) ); }