withastro/compiler

Links within template Elements cause wrong HTML parsing/output

diesieben07 opened this issue · 2 comments

Astro Info

Astro                    v4.4.1
Node                     v20.11.1
System                   Linux (x64)
Package Manager          npm
Output                   static
Adapter                  none
Integrations             none

If this issue only occurs in one browser, which browser is a problem?

n/a

Describe the Bug

Astro fails to parse a elements within template elements correctly in certain situations.
If the content of the a element is an expression, Astro emits the a element again after the template element.
The following is not handled correctly:

<template>
    <a href="https://example.com">{text}</a>.
</template>
<p>Some text</p>

The emitted HTML is equivalent to the following:

<template>
    <a href="https://example.com">Text</a>.
</template>
<a href="https://example.com">
<p>Some text</p>
</a>

This problem does not occur if the a Element only contains plain text (i.e. not an expression).

What's the expected result?

Astro should parse/emit a elements within template elements correctly.

Link to Minimal Reproducible Example

https://stackblitz.com/edit/github-5amjgj?file=src%2Fpages%2Findex.astro

Participation

  • I am willing to submit a pull request for this issue.

@Princesseuh I saw that you moved this issue to the compiler project. I threw together a quick test with @astrojs/compiler and it seems it generates the correct AST. I have shared the code here.
So the issue might be elsewhere.

Edit: The transformed output of the compiler (transform) has the issue. So the issue is with printing, not parsing.

Thanks for investigating @diesieben07!
This looks similars to #958, I'll make sure to look at this when I go through the issues next week.