diff --git a/.changeset/rare-rivers-sit.md b/.changeset/rare-rivers-sit.md
new file mode 100644
index 000000000..be14977c0
--- /dev/null
+++ b/.changeset/rare-rivers-sit.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/compiler': patch
+---
+
+Fix #418: duplicate text when only text
diff --git a/internal/parser.go b/internal/parser.go
index acff08ffb..794024b50 100644
--- a/internal/parser.go
+++ b/internal/parser.go
@@ -620,7 +620,6 @@ func initialIM(p *parser) bool {
// It was all whitespace, so ignore it.
return true
}
- p.addText(p.tok.Data)
case CommentToken:
p.doc.AppendChild(&Node{
Type: CommentNode,
diff --git a/internal/printer/printer_test.go b/internal/printer/printer_test.go
index 5be8af91f..55b62d27c 100644
--- a/internal/printer/printer_test.go
+++ b/internal/printer/printer_test.go
@@ -127,6 +127,13 @@ func TestPrinter(t *testing.T) {
code: `${$$renderSlot($$result,$$slots["default"])}`,
},
},
+ {
+ name: "text only",
+ source: "Hello!",
+ want: want{
+ code: "Hello!",
+ },
+ },
{
name: "basic (frontmatter)",
source: `---
diff --git a/internal/token_test.go b/internal/token_test.go
index e3b247e1d..01a86bf4e 100644
--- a/internal/token_test.go
+++ b/internal/token_test.go
@@ -69,6 +69,11 @@ func TestBasic(t *testing.T) {
`
`,
[]TokenType{SelfClosingTagToken},
},
+ {
+ "text",
+ `Hello@`,
+ []TokenType{TextToken},
+ },
{
"self-closing script",
``,