UNPKG

@fink/larix

Version:

A parser for generating fink's AST.

226 lines (187 loc) 4.25 kB
const { map, flatten, chain } = require("@fink/std-lib/iter.js"); const get_child_exprs = expr => { const ˆvalue_1 = expr; /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_3, args: ˆp_4 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_3 === `block`) /* istanbul ignore else */ if (typeof ˆp_4?.[Symbol.iterator] === "function") { return [...expr.args, ...expr.exprs]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_5 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_5 === `block`) { return expr.exprs; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_6 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_6 === `call`) { return [expr.callee, ...expr.args]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_7, tag: ˆp_8 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_7 === `string`) /* istanbul ignore else */ if (ˆp_8 !== false) { return [expr.tag, ...expr.exprs]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_9 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_9 === `jsx:elem`) { return [expr.name, ...expr.props, ...expr.children]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_10 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_10 === `jsx:frag`) { return expr.children; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_11, value: ˆp_12 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_11 === `jsx:attr`) /* istanbul ignore else */ if (ˆp_12 === false) { return [expr.name]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_13 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_13 === `jsx:attr`) { return [expr.name, expr.value]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_14 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_14 === `jsx:expr`) { return [expr.expr]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_15, right: ˆp_16 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_15 === `rec:kv`) /* istanbul ignore else */ if (ˆp_16 === false) { return [expr.left]; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { type: ˆp_17, right: ˆp_18 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_17 === `spread`) /* istanbul ignore else */ if (ˆp_18 === false) { return []; } } /* istanbul ignore else */ if (ˆvalue_1 != null) { const { left: ˆp_19, right: ˆp_20 } = ˆvalue_1; /* istanbul ignore else */ if (ˆp_19 != null) /* istanbul ignore else */ if (ˆp_20 != null) { return [expr.left, expr.right]; } } // spread, await /* istanbul ignore else */ if (ˆvalue_1 != null) { const { right: ˆp_21 } = ˆvalue_1; // spread, await /* istanbul ignore else */ if (ˆp_21 != null) { return [expr.right]; } } // {left: {}}: // [expr.left] /* istanbul ignore else */ if (ˆvalue_1 != null) { const { exprs: ˆp_22 } = ˆvalue_1; // {left: {}}: // [expr.left] /* istanbul ignore else */ if (typeof ˆp_22?.[Symbol.iterator] === "function") { return expr.exprs; } } { return []; } }; exports.get_child_exprs = get_child_exprs; const walk = (exprs, parent = false) => { let ˆpipe_result_23 = exprs; ˆpipe_result_23 = map(expr => { const children = get_child_exprs(expr); return chain(walk(children, expr))([[expr, parent]]); })(ˆpipe_result_23); return ˆpipe_result_23 = flatten(ˆpipe_result_23); }; exports.walk = walk; const walk_expr = expr => walk([expr]); exports.walk_expr = walk_expr;