Skip to content

Commit 152214d

Browse files
committed
refactor: Created parsers.ts
1 parent 12d1327 commit 152214d

6 files changed

Lines changed: 35 additions & 32 deletions

File tree

src/main.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
import type { Parser, Plugin, Printer } from 'prettier';
1+
import type { Plugin, Printer } from 'prettier';
22

33
import { languages } from './languages.js';
44
import { options } from './options.js';
5-
import { parser } from './parse/index.js';
5+
import { parsers } from './parsers.js';
66
import { printer } from './print/index.js';
7-
import { type NodeType, PARSER_NAME, PRINTER_NAME } from './utils/index.js';
8-
9-
const parsers: Record<string, Parser<NodeType>> = {
10-
[PARSER_NAME]: parser,
11-
};
7+
import { type NodeType, PRINTER_NAME } from './utils/index.js';
128

139
const printers: Record<string, Printer<NodeType>> = {
1410
[PRINTER_NAME]: printer,

src/parsers.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { File } from '@babel/types';
2+
import type { Parser, ParserOptions } from 'prettier';
3+
import { parsers as prettierParsers } from 'prettier/plugins/babel.js';
4+
5+
import { convertAst, preprocess } from './parsers/index.js';
6+
import { assert } from './utils/assert.js';
7+
import { type NodeType, PARSER_NAME, PRINTER_NAME } from './utils/index.js';
8+
9+
const parser = prettierParsers['babel-ts'] as Parser<NodeType>;
10+
11+
async function parse(text: string, options: ParserOptions<NodeType>) {
12+
const preprocessed = preprocess(text, options.filepath);
13+
14+
const ast = await parser.parse(preprocessed.code, options);
15+
assert('expected ast', ast);
16+
convertAst(ast as File, preprocessed.templates);
17+
18+
return ast;
19+
}
20+
21+
export const parsers: Record<string, Parser<NodeType>> = {
22+
[PARSER_NAME]: {
23+
...parser,
24+
astFormat: PRINTER_NAME,
25+
parse,
26+
},
27+
};
Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@ import { traverse } from '@babel/core';
22
import type {
33
BlockStatement,
44
File,
5-
Node,
65
ObjectExpression,
76
StaticBlock,
87
} from '@babel/types';
9-
import type { Parser } from 'prettier';
10-
import { parsers as babelParsers } from 'prettier/plugins/babel.js';
118

12-
import type { PluginOptions } from '../options.js';
139
import { assert } from '../utils/assert.js';
14-
import { PRINTER_NAME } from '../utils/index.js';
15-
import { preprocess, type Template } from './preprocess.js';
16-
17-
const typescript = babelParsers['babel-ts'] as Parser<Node | undefined>;
10+
import type { Template } from './preprocess.js';
1811

1912
/** Converts a node into a GlimmerTemplate node */
2013
function convertNode(
@@ -29,7 +22,7 @@ function convertNode(
2922
}
3023

3124
/** Traverses the AST and replaces the transformed template parts with other AST */
32-
function convertAst(ast: File, templates: Template[]): void {
25+
export function convertAst(ast: File, templates: Template[]): void {
3326
traverse(ast, {
3427
enter(path) {
3528
const { node } = path;
@@ -89,18 +82,3 @@ function convertAst(ast: File, templates: Template[]): void {
8982
);
9083
}
9184
}
92-
93-
export const parser: Parser<Node | undefined> = {
94-
...typescript,
95-
astFormat: PRINTER_NAME,
96-
97-
async parse(code: string, options: PluginOptions): Promise<Node> {
98-
const preprocessed = preprocess(code, options.filepath);
99-
100-
const ast = await typescript.parse(preprocessed.code, options);
101-
assert('expected ast', ast);
102-
convertAst(ast as File, preprocessed.templates);
103-
104-
return ast;
105-
},
106-
};

src/parsers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './convert-ast.js';
2+
export * from './preprocess.js';

tests/unit-tests/preprocess.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest';
33
import {
44
codeToGlimmerAst,
55
preprocessTemplateRange,
6-
} from '../../src/parse/preprocess.js';
6+
} from '../../src/parsers/preprocess.js';
77

88
const TEST_CASES = [
99
{

0 commit comments

Comments
 (0)