ASTとは腐れ縁にある気がするeller86です。専攻とかは全然関係ないんですが、大抵の仕事でその姿を見ているような……。
さてJavaScriptのAST変換を使ってenchant.jsのassetsを変換できないか試してみました。以前は正規表現でなんとかしましたが、どうせやるならASTの方が残念なバグが少なく済むでしょう。使用するライブラリはburritoです。
Hello, world!
コード:
var burrito = require('burrito'); burrito('console.log("Hello, world!")', function (node) { console.log(node.name); });
実行結果:
stat
call
string
すごく単純です。burritoえらい。PMDのVisitorを使ったAPIも好きですが、小粒な変換ならこれで充分ですね。
assetsの探し方を考える
コード:
var burrito = require('burrito'); burrito('var image = hoge.fuga.game.assets["bear.gif"]', function (node) { console.log(node.name); console.log(node.value); });
実行結果:
var
[ [ [ 'image', [Object] ] ] ]
sub
[ [ 'dot', [ 'dot', [Object], 'game' ], 'assets' ],
[ { name: 'string', start: [Object], end: [Object] },
'bear.gif' ] ]
string
[ 'bear.gif' ]
node.value[0][0] === 'dot' && node.value[0][2] === 'assets'
ならassets自身のノードであると言えそうです。