···
9
-
function callback(node, key, parent, isLeaving) {
10
-
const visitFn = getVisitFn(visitor, node.kind, isLeaving);
12
-
const result = visitFn.call(visitor, node, key, parent, path, ancestors);
13
-
if (result === BREAK) throw BREAK;
function traverse(node, key, parent) {
21
-
const resultEnter = callback(node, key, parent, false);
12
+
const enter = getVisitFn(visitor, node.kind, false);
14
+
enter && enter.call(visitor, node, key, parent, path, ancestors);
if (resultEnter === false) {
} else if (resultEnter === null) {
19
+
} else if (resultEnter === BREAK) {
} else if (resultEnter && typeof resultEnter.kind === 'string') {
hasEdited = resultEnter !== node;
···
if (parent) ancestors.pop();
71
-
const resultLeave = callback(node, key, parent, true);
72
-
if (resultLeave !== undefined) {
66
+
const leave = getVisitFn(visitor, node.kind, true);
68
+
leave && leave.call(visitor, node, key, parent, path, ancestors);
69
+
if (resultLeave === BREAK) {
71
+
} else if (resultLeave !== undefined) {
} else if (resultEnter !== undefined) {
return hasEdited ? copy : resultEnter;