diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/auto.marko b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/auto.marko new file mode 100644 index 0000000..f2f8bc2 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/auto.marko @@ -0,0 +1 @@ +-- Hi! diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/concise.marko b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/concise.marko new file mode 100644 index 0000000..f2f8bc2 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/concise.marko @@ -0,0 +1 @@ +-- Hi! diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/html.marko b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/html.marko new file mode 100644 index 0000000..f2f8bc2 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/html.marko @@ -0,0 +1 @@ +-- Hi! diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/with-parens.marko b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/with-parens.marko new file mode 100644 index 0000000..f2f8bc2 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-as-text.expected/with-parens.marko @@ -0,0 +1 @@ +-- Hi! diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/auto.marko b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/auto.marko new file mode 100644 index 0000000..e075198 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/auto.marko @@ -0,0 +1,5 @@ +
+ + + +
diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/concise.marko b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/concise.marko new file mode 100644 index 0000000..f5f427b --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/concise.marko @@ -0,0 +1,5 @@ +div + + + +div diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/html.marko b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/html.marko new file mode 100644 index 0000000..e075198 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/html.marko @@ -0,0 +1,5 @@ +
+ + + +
diff --git a/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/with-parens.marko b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/with-parens.marko new file mode 100644 index 0000000..e075198 --- /dev/null +++ b/src/__tests__/__snapshots__/comments-multiple-lines-not-text.expected/with-parens.marko @@ -0,0 +1,5 @@ +
+ + + +
diff --git a/src/__tests__/fixtures/comments-multiple-lines-as-text.marko b/src/__tests__/fixtures/comments-multiple-lines-as-text.marko new file mode 100644 index 0000000..22fc430 --- /dev/null +++ b/src/__tests__/fixtures/comments-multiple-lines-as-text.marko @@ -0,0 +1,4 @@ +// this is +// multiple lines +// of comments +-- Hi! diff --git a/src/__tests__/fixtures/comments-multiple-lines-not-text.1.marko b/src/__tests__/fixtures/comments-multiple-lines-not-text.1.marko new file mode 100644 index 0000000..fe7dfc0 --- /dev/null +++ b/src/__tests__/fixtures/comments-multiple-lines-not-text.1.marko @@ -0,0 +1,5 @@ +
+// this is +// multiple lines +// of comments +
\ No newline at end of file diff --git a/src/index.ts b/src/index.ts index f8a642a..17c14c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -381,9 +381,8 @@ export const printers: Record> = { const isText = isTextLike(childNode, node); if (isText) { - const isMarkoText = childNode.type === "MarkoText"; textDocs.push( - embedMode && isMarkoText + embedMode && childNode.type === "MarkoText" ? callEmbed(print, child, embedMode, childNode.value) : print(child) ); diff --git a/src/utils/is-text-like.ts b/src/utils/is-text-like.ts index 93aac40..01d835a 100644 --- a/src/utils/is-text-like.ts +++ b/src/utils/is-text-like.ts @@ -5,20 +5,30 @@ export default function isTextLike( node: Node, parent: t.MarkoTag | t.Program ): boolean { - switch (node.type) { - case "MarkoText": - case "MarkoPlaceholder": - return true; - case "MarkoComment": { - const body = parent.type === "Program" ? parent.body : parent.body.body; - const i = body.indexOf(node); - return ( - i > 0 && - i < body.length - 1 && - (isTextLike(body[i - 1], parent) || isTextLike(body[i + 1], parent)) - ); + if (isText(node)) { + return true; + } else if (node.type === "MarkoComment") { + const body = parent.type === "Program" ? parent.body : parent.body.body; + const i = body.indexOf(node); + + let j = i; + while (j > 0) { + const check = body[--j]; + if (isText(check)) return true; + else if (check.type !== "MarkoComment") break; + } + + j = i; + while (j < body.length - 1) { + const check = body[++j]; + if (isText(check)) return true; + else if (check.type !== "MarkoComment") break; } - default: - return false; } + + return false; +} + +function isText(node: Node) { + return node.type === "MarkoText" || node.type === "MarkoPlaceholder"; }