Skip to content

Commit ef421cd

Browse files
committed
change the preprocess step to use an object instead of comments
1 parent bc1f768 commit ef421cd

3 files changed

Lines changed: 54 additions & 15 deletions

File tree

src/parse/preprocess.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ export function preprocessTemplateRange(
3232

3333
if (template.type === 'class-member') {
3434
// Replace with StaticBlock
35-
prefix = 'static{/*';
36-
suffix = '*/}';
35+
prefix = 'static{t:`';
36+
suffix = '`}';
3737
} else {
3838
// Replace with BlockStatement or ObjectExpression
39-
prefix = '{/*';
40-
suffix = '*/}';
39+
prefix = '{t:`';
40+
suffix = '`}';
4141

4242
const nextToken = sliceByteRange(code, template.range.endByte).match(/\S+/);
4343

src/print/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ export const printer: Printer<Node | undefined> = {
4646
} else {
4747
let printed = estreePrinter.print(path, options, print, args);
4848

49-
assert('Expected Glimmer doc to be an array', Array.isArray(printed));
49+
if (!Array.isArray(printed)) {
50+
printed = [printed];
51+
}
52+
5053
trimPrinted(printed);
5154

5255
// Remove semicolons so we can manage them ourselves

tests/unit-tests/preprocess.test.ts

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,76 @@ import {
88
const TEST_CASES = [
99
{
1010
code: '<template>hi</template>',
11-
expected: [`{/*hi */}`],
11+
expected: ['{t:`hi `}'],
1212
},
1313
{
1414
code: '<template>/* hi */</template>',
15-
expected: [`{/*~* hi *~ */}`],
15+
expected: ['{t:`~* hi *~ `}'],
1616
},
1717
{
1818
code: '<template><div>hi</div></template>',
19-
expected: [`{/*<div>hi<~div> */}`],
19+
expected: ['{t:`<div>hi<~div> `}'],
2020
},
2121
{
2222
code: '<template>{{#if true}}hi{{/if}}</template>',
23-
expected: [`{/*{{#if true}}hi{{~if}} */}`],
23+
expected: ['{t:`{{#if true}}hi{{~if}} `}'],
2424
},
2525
{
2626
code: '<template>////////////////</template>',
27-
expected: [`{/*~~~~~~~~~~~~~~~~ */}`],
27+
expected: ['{t:`~~~~~~~~~~~~~~~~ `}'],
2828
},
2929
{
3030
code: '<template>💩</template>',
31-
expected: [`{/*💩 */}`],
31+
expected: ['{t:`💩 `}'],
3232
},
3333
{
3434
code: 'const a = <template>foo</template>; const b = <template>bar</template>;',
3535
expected: [
36-
`const a = {/*foo */}; const b = <template>bar</template>;`,
37-
`const a = <template>foo</template>; const b = {/*bar */};`,
36+
'const a = {t:`foo `}; const b = <template>bar</template>;',
37+
'const a = <template>foo</template>; const b = {t:`bar `};',
3838
],
3939
},
4040
{
4141
code: `const a = <template>💩💩💩💩💩💩💩</template>; const b = <template>💩</template>`,
4242
expected: [
43-
`const a = {/*💩💩💩💩💩💩💩 */}; const b = <template>💩</template>`,
44-
`const a = <template>💩💩💩💩💩💩💩</template>; const b = {/*💩 */}`,
43+
'const a = {t:`💩💩💩💩💩💩💩 `}; const b = <template>💩</template>',
44+
'const a = <template>💩💩💩💩💩💩💩</template>; const b = {t:`💩 `}',
45+
],
46+
},
47+
{
48+
code: 'class Thing { <template>hello</template> }',
49+
expected: ['class Thing { static{t:`hello `} }'],
50+
},
51+
{
52+
code: `export default <template> Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. </template>
53+
/*AMBIGUOUS*/`,
54+
expected: [
55+
`export default {t:` +
56+
'` Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. Explicit default export module top level component. `}' +
57+
`
58+
/*AMBIGUOUS*/`,
59+
],
60+
},
61+
{
62+
code: `class MyComponent
63+
extends Component {
64+
// prettier-ignore
65+
<template>
66+
67+
68+
<h1> Class top level template. Class top level template. Class top level template. Class top level template. Class top level template. </h1>
69+
</template>
70+
}`,
71+
expected: [
72+
`class MyComponent
73+
extends Component {
74+
// prettier-ignore
75+
static{t:\`
76+
77+
78+
<h1> Class top level template. Class top level template. Class top level template. Class top level template. Class top level template. <~h1>
79+
\`}
80+
}`,
4581
],
4682
},
4783
];

0 commit comments

Comments
 (0)