more traverse comments

This commit is contained in:
Sebastian McKenzie
2014-10-13 14:38:25 +11:00
parent eaf98de962
commit 39959e5549

View File

@@ -2,8 +2,10 @@ var VISITOR_KEYS = require("./visitor-keys");
var _ = require("lodash");
var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
// falsy node
if (!parent) return;
// array of nodes
if (_.isArray(parent)) {
_.each(parent, function (node) {
traverse(node, callbacks, blacklistTypes);
@@ -11,14 +13,15 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
return;
}
// unknown node type to traverse
var keys = VISITOR_KEYS[parent.type];
if (!keys) return;
// blacklist these node types from being traversed
blacklistTypes = blacklistTypes || [];
if (_.isFunction(callbacks)) {
callbacks = { enter: callbacks };
}
// normalise callbacks
if (_.isFunction(callbacks)) callbacks = { enter: callbacks };
_.each(keys, function (key) {
var nodes = parent[key];
@@ -87,11 +90,15 @@ traverse.hasType = function (tree, type, blacklistTypes) {
var has = false;
if (_.isArray(tree)) {
// array of nodes, find the first
return !!_.find(tree, function (node) {
return traverse.hasType(node, type, blacklistTypes);
});
} else {
// the node we're searching in is blacklisted
if (_.contains(blacklistTypes, tree.type)) return false;
// the type we're looking for is the same as the passed node
if (tree.type === type) return true;
traverse(tree, function (node) {