Package Exports
- typhonjs-ast-walker
- typhonjs-ast-walker/dist/ASTWalker
- typhonjs-ast-walker/src/ASTWalker
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (typhonjs-ast-walker) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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 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}`);
}
});