UNPKG

motion

Version:

motion - moving development forward

102 lines (81 loc) 2.33 kB
# ast-traverse.js Simple but flexible AST traversal with pre and post visitors. Works in node and browsers. ## Usage ```javascript // ast is a Mozilla Parser API compatible structure // generated by Esprima or another parser var ast = require("esprima").parse("f(1, x) + 2"); var traverse = require("ast-traverse"); // print AST node types, pre-order (node first, then its children) traverse(ast, {pre: function(node, parent, prop, idx) { console.log(node.type + (parent ? " from parent " + parent.type + " via " + prop + (idx !== undefined ? "[" + idx + "]" : "") : "")); }}); console.log(); /* => Program ExpressionStatement from parent Program via body[0] BinaryExpression from parent ExpressionStatement via expression CallExpression from parent BinaryExpression via left Identifier from parent CallExpression via callee Literal from parent CallExpression via arguments[0] Identifier from parent CallExpression via arguments[1] Literal from parent BinaryExpression via right */ // you can also visit post-order, or both // all four arguments are provided to both visitors (left out unused below) var indent = 0; traverse(ast, { pre: function(node) { console.log(Array(indent + 1).join(" ") + node.type); indent += 4; }, post: function() { indent -= 4; } }); console.log(); /* => Program ExpressionStatement BinaryExpression CallExpression Identifier Literal Identifier Literal */ // return false from the pre-visitor to skip traversing its children // throw an exception to abort traversal // by default node property names beginning with $ are skipped // but you can supply your own skipProperty function instead traverse(ast, { pre: function(node) { console.log(node.type); }, skipProperty: function(prop, node) { return prop === "parent" || prop === "expression"; } }); /* => Program ExpressionStatement */ ``` ## Installation ### Node Install using npm npm install ast-traverse ```javascript var traverse = require("ast-traverse"); ``` ### Browser Clone the repo and include it in a script tag git clone https://github.com/olov/ast-traverse.git ```html <script src="ast-traverse/ast-traverse.js"></script> ```