Skip to content

Commit 60f0f17

Browse files
committed
refactor: Extracted ContentTag, parse(), Range
1 parent e8de768 commit 60f0f17

4 files changed

Lines changed: 30 additions & 14 deletions

File tree

src/parse/preprocess.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
import { Preprocessor } from 'content-tag';
1+
import { parse, type Range } from '../utils/content-tag.js';
22

33
export interface Template {
44
contents: string;
55
type: string;
6-
range: {
7-
start: number;
8-
end: number;
9-
};
6+
range: Range;
107
utf16Range: {
118
start: number;
129
end: number;
@@ -93,11 +90,9 @@ export function preprocessTemplateRange(
9390
return replaceRange(code, template.range.start, template.range.end, total);
9491
}
9592

96-
const p = new Preprocessor();
97-
9893
/** Pre-processes the template info, parsing the template content to Glimmer AST. */
9994
export function codeToGlimmerAst(code: string, filename: string): Template[] {
100-
const rawTemplates = p.parse(code, { filename });
95+
const rawTemplates = parse(code, { filename });
10196

10297
const templates: Template[] = rawTemplates.map((r) => ({
10398
type: r.type,

src/types/glimmer.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import type {
77
StaticBlock,
88
TSAsExpression,
99
} from '@babel/types';
10-
import type { Parsed as RawGlimmerTemplate } from 'content-tag';
10+
11+
import type { ContentTag } from '../utils/content-tag.js';
1112

1213
type GlimmerTemplateProperties = (
1314
| BlockStatement
@@ -28,7 +29,7 @@ type GlimmerTemplateProperties = (
2829

2930
extra: {
3031
isGlimmerTemplate: true;
31-
template: RawGlimmerTemplate;
32+
template: ContentTag;
3233
[key: string]: unknown;
3334
};
3435
};

src/utils/content-tag.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* eslint-disable @typescript-eslint/consistent-type-definitions, eslint-comments/disable-enable-pair, jsdoc/require-jsdoc, unicorn/prefer-export-from */
2+
import {
3+
type Parsed as ContentTag,
4+
Preprocessor,
5+
type PreprocessorOptions,
6+
} from 'content-tag';
7+
8+
type Range = {
9+
end: number;
10+
start: number;
11+
};
12+
13+
export function parse(
14+
file: string,
15+
options?: PreprocessorOptions,
16+
): ContentTag[] {
17+
const preprocessor = new Preprocessor();
18+
19+
return preprocessor.parse(file, options);
20+
}
21+
22+
export type { ContentTag, Range };

tests/helpers/ambiguous.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Preprocessor } from 'content-tag';
21
import { describe, expect, test } from 'vitest';
32

43
import type { Options } from '../../src/options.js';
4+
import { parse } from '../../src/utils/content-tag.js';
55
import type { TestCase } from '../helpers/cases.js';
66
import { getAllCases } from '../helpers/cases.js';
77
import { format } from '../helpers/format.js';
@@ -13,8 +13,6 @@ import type { Config } from './make-suite.js';
1313
*/
1414
export const AMBIGUOUS_PLACEHOLDER = '/*AMBIGUOUS*/';
1515

16-
const preprocessor = new Preprocessor();
17-
1816
const AMBIGUOUS_EXPRESSIONS = [
1917
'(oops) => {}',
2018
'(oh, no) => {}',
@@ -96,7 +94,7 @@ async function behavesLikeFormattedAmbiguousCase(
9694
try {
9795
const result = await format(code, formatOptions);
9896
expect(result).toMatchSnapshot();
99-
preprocessor.parse(result);
97+
parse(result);
10098
} catch (error: unknown) {
10199
// Some of the ambiguous cases are Syntax Errors when parsed
102100
const isSyntaxError =

0 commit comments

Comments
 (0)