{"_id":"ast-traverse","_rev":"31486","name":"ast-traverse","description":"simple but flexible AST traversal with pre and post visitors","dist-tags":{"latest":"0.1.1"},"maintainers":[{"name":"olov","email":"olov.lassus@gmail.com"}],"time":{"modified":"2021-06-03T10:05:18.000Z","created":"2013-09-01T09:16:29.587Z","0.1.1":"2013-09-20T20:57:48.445Z","0.1.0":"2013-09-01T09:16:29.587Z"},"users":{"laomu":true},"author":{"name":"Olov Lassus","email":"olov.lassus@gmail.com"},"repository":{"type":"git","url":"https://github.com/olov/ast-traverse.git"},"versions":{"0.1.1":{"name":"ast-traverse","version":"0.1.1","description":"simple but flexible AST traversal with pre and post visitors","main":"ast-traverse.js","repository":{"type":"git","url":"https://github.com/olov/ast-traverse.git"},"keywords":["ast","traverse","traversal","walk","visit","visitor","esprima"],"author":{"name":"Olov Lassus","email":"olov.lassus@gmail.com"},"license":"MIT","readmeFilename":"README.md","_id":"ast-traverse@0.1.1","dist":{"shasum":"69cf2b8386f19dcda1bb1e05d68fe359d8897de6","size":2541,"noattachment":false,"key":"/ast-traverse/-/ast-traverse-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/ast-traverse/download/ast-traverse-0.1.1.tgz"},"_resolved":"/tmp/ast-traverse.tgz.tgz","_from":"/tmp/ast-traverse.tgz.tgz","scripts":{},"_npmVersion":"1.2.18","_npmUser":{"name":"olov","email":"olov.lassus@gmail.com"},"maintainers":[{"name":"olov","email":"olov.lassus@gmail.com"}],"directories":{},"publish_time":1379710668445,"_hasShrinkwrap":false,"_cnpm_publish_time":1379710668445},"0.1.0":{"name":"ast-traverse","version":"0.1.0","description":"simple but flexible AST traversal with pre and post visitors","main":"ast-traverse.js","repository":{"type":"git","url":"https://github.com/olov/ast-traverse.git"},"keywords":["ast","traverse","traversal","walk","visit","visitor","esprima"],"author":{"name":"Olov Lassus","email":"olov.lassus@gmail.com"},"license":"MIT","readmeFilename":"README.md","_id":"ast-traverse@0.1.0","dist":{"shasum":"8e398b0eb0861d2469690183b7b8d0384f3a3c05","size":2525,"noattachment":false,"key":"/ast-traverse/-/ast-traverse-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/ast-traverse/download/ast-traverse-0.1.0.tgz"},"_resolved":"/tmp/ast-traverse.tgz","_from":"/tmp/ast-traverse.tgz","scripts":{},"_npmVersion":"1.2.18","_npmUser":{"name":"olov","email":"olov.lassus@gmail.com"},"maintainers":[{"name":"olov","email":"olov.lassus@gmail.com"}],"directories":{},"publish_time":1378026989587,"_hasShrinkwrap":false,"_cnpm_publish_time":1378026989587}},"readme":"# ast-traverse.js\nSimple but flexible AST traversal with pre and post visitors.\nWorks in node and browsers.\n\n\n\n## Usage\n```javascript\n// ast is a Mozilla Parser API compatible structure\n// generated by Esprima or another parser\nvar ast = require(\"esprima\").parse(\"f(1, x) + 2\");\n\nvar traverse = require(\"ast-traverse\");\n\n// print AST node types, pre-order (node first, then its children)\ntraverse(ast, {pre: function(node, parent, prop, idx) {\n    console.log(node.type + (parent ? \" from parent \" + parent.type +\n        \" via \" + prop + (idx !== undefined ? \"[\" + idx + \"]\" : \"\") : \"\"));\n}});\nconsole.log();\n/*\n =>\n Program\n ExpressionStatement from parent Program via body[0]\n BinaryExpression from parent ExpressionStatement via expression\n CallExpression from parent BinaryExpression via left\n Identifier from parent CallExpression via callee\n Literal from parent CallExpression via arguments[0]\n Identifier from parent CallExpression via arguments[1]\n Literal from parent BinaryExpression via right\n */\n\n\n// you can also visit post-order, or both\n// all four arguments are provided to both visitors (left out unused below)\nvar indent = 0;\ntraverse(ast, {\n    pre: function(node) {\n        console.log(Array(indent + 1).join(\" \") + node.type);\n        indent += 4;\n    },\n    post: function() {\n        indent -= 4;\n    }\n});\nconsole.log();\n/*\n=>\n Program\n ExpressionStatement\n BinaryExpression\n CallExpression\n Identifier\n Literal\n Identifier\n Literal\n*/\n\n\n// return false from the pre-visitor to skip traversing its children\n// throw an exception to abort traversal\n\n\n// by default node property names beginning with $ are skipped\n// but you can supply your own skipProperty function instead\ntraverse(ast, {\n    pre: function(node) {\n        console.log(node.type);\n    },\n    skipProperty: function(prop, node) {\n        return prop === \"parent\" || prop === \"expression\";\n    }\n});\n/*\n=>\n Program\n ExpressionStatement\n*/\n```\n\n\n\n## Installation\n\n### Node\nInstall using npm\n\n    npm install ast-traverse\n\n```javascript\nvar traverse = require(\"ast-traverse\");\n```\n\n### Browser\nClone the repo and include it in a script tag\n\n    git clone https://github.com/olov/ast-traverse.git\n\n```html\n<script src=\"ast-traverse/ast-traverse.js\"></script>\n```\n","_attachments":{},"readmeFilename":"README.md","license":"MIT"}