ripper 週末クッキング その3 ripperが吐くイベント

on__spは定義されてなかったけど、method_missingで拾えたのがon__spくらいだったので、他のメソッド(イベント)はあらかじめ定義されていると当りをつけて、lib/ripper.rbを読んでみた。予想どおり、on__xxなるメソッドが羅列されている。Parser EventsとLexer Eventに分かれているらしい。わかりやすいコメントですね。

イベントの種類としては、Parser Eventsとして定義されているやつを押さえれば十分だろう。Lexer Eventsはon__scanを除いてひとまず無視。on__scan(event,token)という中身のないメソッドがあるが、これは恐らくイベント生成時のフック用だと予想して、またもeventとtokenを表示させるものを書いてみた。結果はビンゴ。event名のシンボルとその時のtokenが羅列されました。

というわけで、「ここはどういうイベントになるんだー?」と思ったときは、上記の内容表示on__scanを書いたものでソースを解析させれば、そのトークンが何のイベントを発生させるかわかるわけですね。たぶんParser Eventsのメソッド名みたら予想つくと思うけど。よし。