Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Swatinem/esgraph
creates a control flow graph from an esprima abstract syntax tree
https://github.com/Swatinem/esgraph
Last synced: 5 days ago
JSON representation
creates a control flow graph from an esprima abstract syntax tree
- Host: GitHub
- URL: https://github.com/Swatinem/esgraph
- Owner: Swatinem
- Created: 2013-04-29T19:08:43.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2017-11-13T15:26:45.000Z (almost 7 years ago)
- Last Synced: 2024-10-27T22:12:38.055Z (12 days ago)
- Language: JavaScript
- Size: 64.5 KB
- Stars: 169
- Watchers: 14
- Forks: 23
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-starred - Swatinem/esgraph - creates a control flow graph from an esprima abstract syntax tree (others)
README
# esgraph
creates a control flow graph from an esprima abstract syntax tree
[![Build Status](https://travis-ci.org/Swatinem/esgraph.svg?branch=master)](https://travis-ci.org/Swatinem/esgraph)
[![Coverage Status](https://coveralls.io/repos/Swatinem/esgraph/badge.svg?branch=master)](https://coveralls.io/r/Swatinem/esgraph)
[![Dependency Status](https://gemnasium.com/Swatinem/esgraph.svg)](https://gemnasium.com/Swatinem/esgraph)## Installation
```bash
$ npm install esgraph
```## Usage
### esgraph
The `esgraph` binary reads from stdin and outputs dot-format usable by graphviz.
To create a png file showing the CFG of a js file:```bash
$ cat $file | esgraph | dot -Tpng > output.png
```![example graph](esgraph.png?raw=true)
### library
```js
const esgraph = require("esgraph");const cfg = esgraph(esprima.parse(source, { range: true }));
// cfg[0] is the start node
// cfg[1] is the end node
// cfg[2] is an array of all nodes for easier iteration// each node has:
node.astNode; // this is the original esprima AST node, either a statement or an expression
node.prev; // an array of predecessor nodes
node.next; // an array of all successor nodes// the successor nodes are also awailable by type:
node.normal; // the next statement reached via normal flow
node.true; // the next statement reached when `node.astNode` evaluates to true
node.false; // the next statement reached when `node.astNode` evaluates to false
node.exception; // the next statement reached when `node.astNode` throwsconst dot = esgraph.dot(cfg, { counter: startCount, source: source });
// returns the cfg printed in graphviz dot format.
node.label; // can be used to use a custom label for that node
// otherwise `esgraph.dot` will print the nodes source when the ast is created
// with {range: true} and {source: source} option is set
```## License
LGPLv3