Skip to content

Commit c5764b5

Browse files
blikblumjviide
authored andcommitted
Extract jsx visitor logic into a separated function
1 parent 4aa31a8 commit c5764b5

File tree

1 file changed

+28
-35
lines changed
  • packages/babel-plugin-transform-jsx-to-htm

1 file changed

+28
-35
lines changed

packages/babel-plugin-transform-jsx-to-htm/index.mjs

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,32 @@ export default function jsxToHtmBabelPlugin({ types: t }, options = {}) {
188188
}
189189
}
190190

191+
function jsxVisitorHandler(path, state, isFragment) {
192+
let quasisBefore = quasis.slice();
193+
let expressionsBefore = expressions.slice();
194+
let bufferBefore = buffer;
195+
196+
buffer = '';
197+
quasis.length = 0;
198+
expressions.length = 0;
199+
200+
if (isFragment) {
201+
processChildren(path.node, '', true);
202+
commit();
203+
const template = t.templateLiteral(quasis, expressions);
204+
const replacement = t.taggedTemplateExpression(tag, template);
205+
path.replaceWith(replacement);
206+
} else {
207+
processNode(path.node, path, true);
208+
}
209+
210+
quasis = quasisBefore;
211+
expressions = expressionsBefore;
212+
buffer = bufferBefore;
213+
214+
state.set('jsxElement', true);
215+
}
216+
191217
return {
192218
name: 'transform-jsx-to-htm',
193219
inherits: jsx,
@@ -201,44 +227,11 @@ export default function jsxToHtmBabelPlugin({ types: t }, options = {}) {
201227
},
202228

203229
JSXElement(path, state) {
204-
let quasisBefore = quasis.slice();
205-
let expressionsBefore = expressions.slice();
206-
let bufferBefore = buffer;
207-
208-
buffer = '';
209-
quasis.length = 0;
210-
expressions.length = 0;
211-
212-
processNode(path.node, path, true);
213-
214-
quasis = quasisBefore;
215-
expressions = expressionsBefore;
216-
buffer = bufferBefore;
217-
218-
state.set('jsxElement', true);
230+
jsxVisitorHandler(path, state, false);
219231
},
220232

221233
JSXFragment(path, state) {
222-
let quasisBefore = quasis.slice();
223-
let expressionsBefore = expressions.slice();
224-
let bufferBefore = buffer;
225-
226-
buffer = '';
227-
quasis.length = 0;
228-
expressions.length = 0;
229-
230-
processChildren(path.node, '', true);
231-
232-
commit();
233-
const template = t.templateLiteral(quasis, expressions);
234-
const replacement = t.taggedTemplateExpression(tag, template);
235-
path.replaceWith(replacement);
236-
237-
quasis = quasisBefore;
238-
expressions = expressionsBefore;
239-
buffer = bufferBefore;
240-
241-
state.set('jsxElement', true);
234+
jsxVisitorHandler(path, state, true);
242235
}
243236
}
244237
};

0 commit comments

Comments
 (0)