typhonjs-ast-walker

Provides a simple Javascript AST traversal utility that traverses all nodes / children regardless of type.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
typhonjs-ast-walker
000.2.17 years ago8 years agoMinified + gzip package size for typhonjs-ast-walker in KB

Readme

typhonjs-ast-walker
NPM Documentation Code Style License Gitter
Build Status Coverage Dependency Status
Provides a simple Javascript AST traversal utility that traverses all nodes / children regardless of type.
A single method traverse takes an AST object or array of nodes and a callback object which may contain two methods enterNode and exitNode which are invoked with the current node and the parent node respectively when entering and exiting a given node during traversal.
enterNode may return a array of strings which provide a set of children keys to ignore or null to skip traversing children keys entirely.
To install typhonjs-ast-walker provide this entry in package.json:
{
  ...
  "dependencies": {
    "typhonjs-ast-walker": "^0.2.0"
  }
}
```  

A simple example follows:
import walker from 'typhonjs-ast-walker';
const ast = .... // An AST tree.
walker.traverse(ast, {
enterNode: (node, parent) =>
{
   console.log(`walker - enterNode: ${node.type}`);

   // Optional return statement to ignore specific children keys.
   // return node.type === 'ClassBody' ? ['body'] : undefined;

   // Optional return statement to ignore specific children keys or skip traversal entirely.
   // return node.type === 'ClassBody' ? null : undefined;
},

exitNode: (node, parent) =>
{
   console.log(`walker - exitNode: ${node.type}`);
}
});
Support for [typhonjs-plugin-manager](https://www.npmjs.com/package/typhonjs-plugin-manager) is also available and
when loading `typhonjs-ast-walker` as a plugin it will automatically register event bindings on the plugin eventbus
with these event categories:

`ast:walker:traverse` - invokes `traverse` of the default walker.

Example `typhonjs-plugin-manager` usage:
import PluginManager from 'typhonjs-plugin-manager'; import eventbus from 'backbone-esnext-eventbus';
const pluginManager = new PluginManager({ eventbus });
pluginManager.add({ name: typhonjs-ast-walker });
// This will automatically wire up typhonjs-ast-walker to the eventbus.
eventbus.trigger('ast:walker:traverse, ast, {
enterNode: (node, parent) =>
{
   console.log(`walker - enterNode: ${node.type}`);
},

exitNode: (node, parent) =>
{
   console.log(`walker - exitNode: ${node.type}`);
}
}); ```