add support for exit traversal functions to replace the node

This commit is contained in:
Sebastian McKenzie
2014-10-17 21:20:08 +11:00
parent 0188556b36
commit 531ea91a07

View File

@@ -34,20 +34,30 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
// type is blacklisted
if (_.contains(blacklistTypes, node.type)) return;
// enter
var result = callbacks.enter(node, parent, obj, key);
// stop iteration
if (result === false) return;
var result;
// replace node
if (result != null) node = obj[key] = result;
var maybeReplace = function (result) {
if (result != null) obj[key] = result;
};
// enter
if (callbacks.enter) {
result = callbacks.enter(node, parent, obj, key);
// stop iteration
if (result === false) return;
maybeReplace(result);
}
// traverse node
traverse(node, callbacks, blacklistTypes);
// exit
if (callbacks.exit) callbacks.exit(node, parent, obj, key);
if (callbacks.exit) {
maybeReplace(callbacks.exit(node, parent, obj, key));
}
};
if (_.isArray(nodes)) {