UNPKG

484 BJavaScriptView Raw
1export default function walk(ast, { enter, leave }, state) {
2 visit(ast, null, enter, leave, state)
3}
4
5function visit(node, parent, enter, leave, state) {
6 if (!node) return
7
8 if (enter) {
9 if (enter.some(fn => fn(node, parent, state))) return
10 }
11
12 if (Array.isArray(node.children)) {
13 node.children.forEach(child => {
14 child.parent = node
15 visit(child, node, enter, leave, state)
16 })
17 }
18
19 if (leave) {
20 leave.forEach(fn => fn(node, parent, state))
21 }
22}