Lawsun d230cfbce0 first commit 1 år sedan
..
node_modules d230cfbce0 first commit 1 år sedan
CHANGELOG.md d230cfbce0 first commit 1 år sedan
README.md d230cfbce0 first commit 1 år sedan
index.js d230cfbce0 first commit 1 år sedan
package.json d230cfbce0 first commit 1 år sedan

README.md

merge-estraverse-visitors

Merge multiple visitors for estraverse into one

Build Status NPM version License

API

var mergedVisitor = mergeVisitors(arrayOfVisitors)

INSTALL

npm install merge-estraverse-visitors

USAGE

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

AUTHOR

LICENSE

Licensed under the MIT license.