diff --git a/packages/@glimmer/syntax/lib/generation/printer.ts b/packages/@glimmer/syntax/lib/generation/printer.ts
index 2be912e77..3765a55ef 100644
--- a/packages/@glimmer/syntax/lib/generation/printer.ts
+++ b/packages/@glimmer/syntax/lib/generation/printer.ts
@@ -285,7 +285,9 @@ export default class Printer {
let { name, value } = attr;
this.buffer += name;
- if (value.type !== 'TextNode' || value.chars.length > 0) {
+ const isAttribute = !name.startsWith('@');
+ const shouldElideValue = isAttribute && value.type == 'TextNode' && value.chars.length === 0;
+ if (!shouldElideValue) {
this.buffer += '=';
this.AttrNodeValue(value);
}
diff --git a/packages/@glimmer/syntax/test/generation/print-test.ts b/packages/@glimmer/syntax/test/generation/print-test.ts
index 4a1a75d98..c1214009c 100644
--- a/packages/@glimmer/syntax/test/generation/print-test.ts
+++ b/packages/@glimmer/syntax/test/generation/print-test.ts
@@ -94,6 +94,9 @@ let templates = [
// Comment in Angle Bracket component
'',
+
+ // Empty string literal: arguments use ="" while attributes are valueless
+ ``,
];
QUnit.module('[glimmer-syntax] Code generation', () => {