Put all function and variable declarations at the top of the scope in an AST
var parse = require('esprima').parse
var generate = require('escodegen').generate
var hoist = require('hoist')
var src = 'a = func(123); var a = "test"; function func(x){return x}'
var ast = parse(src)
hoist(ast)
console.log(generate(ast))
Console result:
function func(x) {
return x;
}
var a;
a = func(123);
var a = 'test';