mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
56 lines
1.4 KiB
/**
|
|
* @fileoverview Wrapper around estraverse
|
|
* @author Nicholas C. Zakas
|
|
*/
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Requirements
|
|
//------------------------------------------------------------------------------
|
|
|
|
var estraverse = require("estraverse");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Helpers
|
|
//------------------------------------------------------------------------------
|
|
|
|
var KEY_BLACKLIST = [
|
|
"parent",
|
|
"leadingComments",
|
|
"trailingComments"
|
|
];
|
|
|
|
/**
|
|
* Wrapper around an estraverse controller that ensures the correct keys
|
|
* are visited.
|
|
* @constructor
|
|
*/
|
|
function Traverser() {
|
|
|
|
var controller = Object.create(new estraverse.Controller()),
|
|
originalTraverse = controller.traverse;
|
|
|
|
// intercept call to traverse() and add the fallback key to the visitor
|
|
controller.traverse = function(node, visitor) {
|
|
visitor.fallback = Traverser.getKeys;
|
|
return originalTraverse.call(this, node, visitor);
|
|
};
|
|
|
|
return controller;
|
|
}
|
|
|
|
/**
|
|
* Calculates the keys to use for traversal.
|
|
* @param {ASTNode} node The node to read keys from.
|
|
* @returns {string[]} An array of keys to visit on the node.
|
|
* @private
|
|
*/
|
|
Traverser.getKeys = function(node) {
|
|
return Object.keys(node).filter(function(key) {
|
|
return KEY_BLACKLIST.indexOf(key) === -1;
|
|
});
|
|
};
|
|
|
|
module.exports = Traverser;
|
|
|
|
|
|
|