ast-declaration-source

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

Usage no npm install needed!

<script type="module">
  import astDeclarationSource from 'https://cdn.skypack.dev/ast-declaration-source';
</script>

README

ast-declaration-source

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

Usage

NPM

declaration = source(node)

Given a node within an AST generated by esprima or 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 or a similar package to add the "parent" properties to each node required for ast-declaration-source to successfully navigate the tree.

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 for details.