merge-estraverse-visitors ================================ Merge multiple visitors for estraverse into one [![Build Status][travis-image]][travis-url] [![NPM version][npm-image]][npm-url] [![License][license-image]][license-url] API --------------------------------------- `var mergedVisitor = mergeVisitors(arrayOfVisitors)` INSTALL --------------------------------------- ``` npm install merge-estraverse-visitors ``` USAGE --------------------------------------- For given code, ```js function tenTimes (cb) { for (var i = 0; i < 10; i += 1) { cb(); } } ``` Merge multiple estraverse visitors into one then run against target AST. ```js 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 --------------------------------------- * [Takuto Wada](https://github.com/twada) LICENSE --------------------------------------- Licensed under the [MIT](http://twada.mit-license.org/) license. [travis-url]: https://travis-ci.org/twada/merge-estraverse-visitors [travis-image]: https://secure.travis-ci.org/twada/merge-estraverse-visitors.svg?branch=master [npm-url]: https://npmjs.org/package/merge-estraverse-visitors [npm-image]: https://badge.fury.io/js/merge-estraverse-visitors.svg [license-url]: http://twada.mit-license.org/ [license-image]: https://img.shields.io/badge/license-MIT-brightgreen.svg