| 
				
					 | 
			2 years ago | |
|---|---|---|
| .. | ||
| node_modules | 2 years ago | |
| CHANGELOG.md | 2 years ago | |
| README.md | 2 years ago | |
| index.js | 2 years ago | |
| package.json | 2 years ago | |
Merge multiple visitors for estraverse into one
var mergedVisitor = mergeVisitors(arrayOfVisitors)
npm install merge-estraverse-visitors
For given code,
function tenTimes (cb) {
    for (var i = 0; i < 10; i += 1) {
        cb();
    }
}
Merge multiple estraverse visitors into one then run against target AST.
var visitor1 = {
    enter: function (currentNode, parentNode) {
        switch(currentNode.type) {
        case 'ForStatement':
            console.log('v1: going to skip ' + currentNode.type);
            this.skip();
            break;
        case 'CallExpression':
        case 'FunctionDeclaration':
            console.log('v1: entering ' + currentNode.type);
            break;
        }
        return undefined;
    },
    leave: function (currentNode, parentNode) {
        switch(currentNode.type) {
        case 'ForStatement':
        case 'CallExpression':
        case 'FunctionDeclaration':
            console.log('v1: leaving ' + currentNode.type);
            break;
        }
    }
};
var visitor2 = {
    enter: function (currentNode, parentNode) {
        switch(currentNode.type) {
        case 'ForStatement':
        case 'CallExpression':
        case 'FunctionDeclaration':
            console.log('v2: entering ' + currentNode.type);
            break;
        }
    },
    leave: function (currentNode, parentNode) {
        switch(currentNode.type) {
        case 'ForStatement':
        case 'CallExpression':
        case 'FunctionDeclaration':
            console.log('v2: leaving ' + currentNode.type);
            break;
        }
    }
};
var mergeVisitors = require('merge-estraverse-visitors');
var estraverse = require('estraverse');
var acorn = require('acorn');
var ast = acorn.parse(code);
estraverse.traverse(ast, mergeVisitors([ visitor1, visitor2 ]));
Results in:
v1: entering FunctionDeclaration
v2: entering FunctionDeclaration
v1: going to skip ForStatement
v2: entering ForStatement
v2: entering CallExpression
v2: leaving CallExpression
v2: leaving ForStatement
v1: leaving ForStatement
v2: leaving FunctionDeclaration
v1: leaving FunctionDeclaration
Licensed under the MIT license.