remove traverse.replace and let traverse deal with it
This commit is contained in:
parent
3e34bbe722
commit
a484ea6003
@ -24,7 +24,7 @@ var hasLet = function (nodes) {
|
||||
};
|
||||
|
||||
exports.Program = function (node) {
|
||||
if (hasLet(node.body)) node.body = buildNode(node.body).node;
|
||||
if (hasLet(node.body)) node.body = buildNode(node.body).node;
|
||||
};
|
||||
|
||||
exports.BlockStatement = function (node, parent, opts, generateUid) {
|
||||
@ -38,7 +38,7 @@ exports.BlockStatement = function (node, parent, opts, generateUid) {
|
||||
var built = buildNode(node.body, true);
|
||||
node.body = built.node;
|
||||
|
||||
traverse.replace(built.body, function (node) {
|
||||
traverse(built.body, function (node) {
|
||||
if (node.type === "ContinueStatement") {
|
||||
return b.returnStatement(null);
|
||||
}
|
||||
@ -51,7 +51,7 @@ exports.BlockStatement = function (node, parent, opts, generateUid) {
|
||||
b.variableDeclarator(id, b.literal(false))
|
||||
]));
|
||||
|
||||
traverse.replace(built.body, function (node) {
|
||||
traverse(built.body, function (node) {
|
||||
if (node.type === "BreakStatement") {
|
||||
return b.returnStatement(b.assignmentExpression("=", id, b.literal(true)));
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
var VISITOR_KEYS = require("./visitor-keys");
|
||||
var _ = require("lodash");
|
||||
|
||||
var traverse = module.exports = function (parent, callback, blacklistTypes) {
|
||||
var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
|
||||
if (!parent) return;
|
||||
|
||||
if (_.isArray(parent)) {
|
||||
_.each(parent, function (node) {
|
||||
traverse(node, callback, blacklistTypes);
|
||||
traverse(node, callbacks, blacklistTypes);
|
||||
});
|
||||
return;
|
||||
}
|
||||
@ -14,6 +14,10 @@ var traverse = module.exports = function (parent, callback, blacklistTypes) {
|
||||
var keys = VISITOR_KEYS[parent.type] || [];
|
||||
blacklistTypes = blacklistTypes || [];
|
||||
|
||||
if (_.isFunction(callbacks)) {
|
||||
callbacks = { enter: callbacks };
|
||||
}
|
||||
|
||||
_.each(keys, function (key) {
|
||||
var nodes = parent[key];
|
||||
if (!nodes) return;
|
||||
@ -21,14 +25,23 @@ var traverse = module.exports = function (parent, callback, blacklistTypes) {
|
||||
var handle = function (obj, key) {
|
||||
var node = obj[key];
|
||||
if (!node) return;
|
||||
|
||||
// type is blacklisted
|
||||
if (blacklistTypes.indexOf(node.type) >= 0) return;
|
||||
|
||||
// strict references in case the callback modified/replaced the node
|
||||
// enter
|
||||
var result = callbacks.enter(node, parent, obj, key);
|
||||
|
||||
var result = callback(obj[key], parent, obj, key);
|
||||
// stop iteration
|
||||
if (result === false) return;
|
||||
|
||||
traverse(obj[key], callback, blacklistTypes);
|
||||
// replace node
|
||||
if (result != null) node = obj[key] = result;
|
||||
|
||||
traverse(node, callbacks, blacklistTypes);
|
||||
|
||||
// exit
|
||||
if (callbacks.exit) callbacks.exit(node, parent, obj, key);
|
||||
};
|
||||
|
||||
if (_.isArray(nodes)) {
|
||||
@ -36,6 +49,7 @@ var traverse = module.exports = function (parent, callback, blacklistTypes) {
|
||||
handle(nodes, i);
|
||||
});
|
||||
|
||||
// remove deleted nodes
|
||||
parent[key] = _.flatten(parent[key]).filter(function (node) {
|
||||
return node !== traverse.Delete;
|
||||
});
|
||||
@ -73,11 +87,3 @@ traverse.hasType = function (tree, type, blacklistTypes) {
|
||||
|
||||
return has;
|
||||
};
|
||||
|
||||
traverse.replace = function (node, callback, blacklistTypes) {
|
||||
traverse(node, function (node, parent, obj, key) {
|
||||
var result = callback(node, parent);
|
||||
if (result === false) return false;
|
||||
if (result != null) obj[key] = result;
|
||||
}, blacklistTypes);
|
||||
};
|
||||
|
||||
@ -112,7 +112,7 @@ exports.template = function (name, nodes, keepExpression) {
|
||||
template = _.cloneDeep(template);
|
||||
|
||||
if (!_.isEmpty(nodes)) {
|
||||
traverse.replace(template, function (node) {
|
||||
traverse(template, function (node) {
|
||||
if (node.type === "Identifier" && _.has(nodes, node.name)) {
|
||||
var newNode = nodes[node.name];
|
||||
if (_.isString(newNode)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user