Mirror: The magical sticky regex-based parser generator 🧙

Compile away thunks returning matchers in Babel plugin

Changed files
+17 -3
src
babel
+1 -3
src/babel/__snapshots__/plugin.test.js.snap
···
exports[`works with self-referential thunks 1`] = `
"import { match, tag, _exec, _pattern } from 'reghex';
-
var _inner_expression = _pattern(() => node);
-
const inner = function (state) {
var index_1 = state.index;
var node = [];
var match;
-
if (match = _exec(state, _inner_expression)) {
+
if (match = node(state)) {
node.push(match);
} else {
state.index = index_1;
+16
src/babel/transform.js
···
const hoistedExpressions = path.node.quasi.expressions.map(
(expression, i) => {
if (
+
t.isArrowFunctionExpression(expression) &&
+
t.isIdentifier(expression.body)
+
) {
+
expression = expression.body;
+
} else if (
+
(t.isFunctionExpression(expression) ||
+
t.isArrowFunctionExpression(expression)) &&
+
t.isBlockStatement(expression.body) &&
+
expression.body.body.length === 1 &&
+
t.isReturnStatement(expression.body.body[0]) &&
+
t.isIdentifier(expression.body.body[0].argument)
+
) {
+
expression = expression.body.body[0].argument;
+
}
+
+
if (
t.isIdentifier(expression) &&
path.scope.hasBinding(expression.name)
) {