htmljs-parser icon indicating copy to clipboard operation
htmljs-parser copied to clipboard

Comments aren't emitted if they are in a tag

Open AngusMorton opened this issue 2 years ago • 0 comments

Version: 5.5.1

I suspect this is a known limitation and/or expected behaviour, but it was surprising! For context, I'm building a prettier plugin that uses the htmljs-parser directly to format Marko files.

Details

There are two related issues:

  • Comments within an open tag are not emitted in onComment. They are included in the value of onAttrValue.
  • When parsing a tag with a comment before the first attribute, the parser does not emit the comment (as far as I can tell).
<meta 
    // I disappear when consumed by the htmljs-parser.
    name="viewport" 
>

onComment is never called, and there is no attribute value, so the comment is removed if processed by dependent tooling like the marko compiler (and therefore marko-plugin-prettier).

Using HTML-style comments also throws an error because the parser expects a TypeScript type argument.

<meta 
    <!-- I throw Unexpected types argument -->
    name="viewport" 
>

While after the attribute, the value is included in onAttrValue of the previous attribute.

<meta 
    name="viewport" 
    // I'm included in name="viewport".
>

it parsed as an onAttrValue with a value of:

"viewport" 
    // I'm included in name="viewport".

I would have expected two values emitted, onAttrValue of "viewport" and onComment with // I'm included in name="viewport"..

AngusMorton avatar Dec 27 '23 11:12 AngusMorton