Skip to content

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

License

Notifications You must be signed in to change notification settings

typhonjs-node-ast/typhonjs-ast-walker

Repository files navigation

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 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}`);
   }
});

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published