UNPKG

@putout/engine-runner

Version:
44 lines (36 loc) 918 B
import { traverse as babelTraverse, types, } from '@putout/babel'; import {generate} from '@putout/engine-parser'; const {merge} = babelTraverse.visitors; export default function superFind({rule, find, ast, options, template, traverse = babelTraverse}) { const pushItems = []; const push = (a) => { pushItems.push(a); }; const returnItems = find(ast, { traverse: createTraverse({ rule, options, template, traverse, }), generate, types, push, options, }); return [ ...pushItems, ...returnItems || [], ]; } const createTraverse = ({rule, options, template, traverse}) => (ast, visitor) => { const templateVisitors = merge(template({ rule, visitor, options, })); return traverse(ast, templateVisitors); };