marko-js / htmljs-parser

An HTML parser recognizes content and string placeholders and allows JavaScript expressions as attribute values
MIT License
135 stars 20 forks source link

Comments aren't emitted if they are in a tag #170

Open AngusMorton opened 8 months ago

AngusMorton commented 8 months ago

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:

<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"..