Skip to content

Instantly share code, notes, and snippets.

@roman01la
Created August 7, 2015 11:35
Show Gist options
  • Save roman01la/fbe09b16e9cdb361e487 to your computer and use it in GitHub Desktop.
Save roman01la/fbe09b16e9cdb361e487 to your computer and use it in GitHub Desktop.
var acorn = require('acorn'); // parser
var esrecurse = require('esrecurse'); // walker
var t = require('ast-types').builders; // ast types
var escodegen = require('escodegen'); // generator
/* parse -> walk -> types -> generate */
var ast = acorn.parse('var x = 23 * 576;'); // code -> ast
// traverse ast
esrecurse.visit(ast, {
VariableDeclaration(node) {
node.declarations.forEach(function(d) {
var left = d.init.left.value; // 23
var right = d.init.right.value; // 576
var operator = d.init.operator; // *
// BinaryExpression -> Literal
d.init = t.literal(eval(left + operator + right)); // 23 * 576
});
node.kind = 'const'; // var -> const
}
});
var code = escodegen.generate(ast); // ast -> code
console.log(code); // const x = 13248;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment