merge-estraverse-visitors
merge multiple estraverse visitors into one
Last updated 9 years ago by twada .
MIT · Repository · Bugs · Original npm
$ cnpm install merge-estraverse-visitors 
SYNC missed versions from official npm registry.

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.

Current Tags

  • 1.0.0                                ...           latest (9 years ago)

1 Versions

  • 1.0.0                                ...           9 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (1)
Dev Dependencies (3)
Dependents (0)
None

Copyright 2013 - present © cnpmjs.org