escodegen + esprima で JS のデバッグをしたら捗りそう
以下のようなコードを実行すると
console.log([ [1,1,8] [2,1,16] ]);
このような結果になる。
[ undefined ]
アレレーってなってたんだけど kazuho さんにきいたところ、
[1,1,8][2,1,16] => ([1,1,8])[(2,1,16)] => ([1,1,8])[16] => undefined
ってことでした。
こんな時、Perl Monger ならとりあえず B::Deparse することによって解決の糸口をさがすんだけど、そういうの EcmaScript でどうすんすかね、ってなことを kazuho さんにきいたところ、esprima っていう es のパーサーがあるよって教えてもらったので、AST はとりだせたんだけど、AST をみても埒があかないので、AST からソースにおとす君がないかなーとさがしたところ const なんとかさんが escodegen ってのを書いていたようなので、この2つを組み合わせて問題を解決することができました。
以下のようなコードをかきます。
var esprima = require('esprima'), fs = require('fs'), escodegen = require('escodegen'); console.log(escodegen.generate(esprima.parse(fs.readFileSync(process.argv[2]))));
んで、前述のコードをくわせると
console.log([ [ 1, 1, 8 ][2, 1, 16] ]);
となって、「Ah, そういうことね!」となります。YATTA!
kazuhooku++, Constなんとか++