Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hughsk/ast-declaration-source

Given an esprima/acorn-style AST, approximately find the original declaration node responsible for a variable
https://github.com/hughsk/ast-declaration-source

Last synced: 12 days ago
JSON representation

Given an esprima/acorn-style AST, approximately find the original declaration node responsible for a variable

Awesome Lists containing this project

README

        

# ast-declaration-source
![](http://img.shields.io/badge/stability-experimental-orange.svg?style=flat)
![](http://img.shields.io/npm/v/ast-declaration-source.svg?style=flat)
![](http://img.shields.io/npm/dm/ast-declaration-source.svg?style=flat)
![](http://img.shields.io/npm/l/ast-declaration-source.svg?style=flat)

Given an esprima/acorn-style AST, approximately find the original
declaration node responsible for a variable.

## Usage

[![NPM](https://nodei.co/npm/ast-declaration-source.png)](https://nodei.co/npm/ast-declaration-source/)

### `declaration = source(node)`

Given a `node` within an AST generated by [esprima](http://ghub.io/esprima)
or [acorn](http://ghub.io/acorn), determine the original `declaration` node
in the tree.

Returns `undefined` if a suitable node could not be found.

Note that you'll need to use [astw](http://ghub.io/astw) or a similar package
to add the "parent" properties to each node required for
`ast-declaration-source` to successfully navigate the tree.

``` javascript
var source = require('ast-declaration-source')
var escodegen = require('escodegen')
var acorn = require('acorn')
var astw = require('astw')
var fs = require('fs')

var src = fs.readFileSync(__filename, 'utf8')
var ast = acorn.parse(src)

// required to assign "parent" properties
// to each node
astw(ast)(function(){})

var srcNode = ast.body[6].declarations[0].init.arguments[0]
var declNode = source(srcNode)

console.log('original usage:')
console.log(escodegen.generate(srcNode.parent))
console.log()

console.log('declaration:')
console.log(escodegen.generate(declNode.parent.parent))
console.log()
```

## License

MIT. See [LICENSE.md](http://github.com/hughsk/ast-declaration-source/blob/master/LICENSE.md) for details.