grep-ruby-token
uu59のメモ | git-grep-token-ruby作った(けど低品質)が便利そうだったのでparserでやってみた。
GitHubに上げたけど誰も見てないだろうと思ってgit push -f
をバシバシ使ってたら、なかったことにしたコミットのほうにリンクされて冷や汗が出た。
オリジナルのgit-grep-token-rubyではripperを使ってコードをパースしているのだが、ripperから出力される構文木はやや複雑で扱いづらいところがある。Rubyのコードをパースするライブラリはripperの他にもいくつかあり、parserというシンプルすぎる名前のライブラリが一番後発で使いやすそうだったのでこれを使うことにした。調べた内容についてはRubyのコードをパースするライブラリというタイトルでまとめた。内容が浅すぎてあまりまとまってない。
parserは扱いやすいASTを出力してくれるが、複雑なコードではパースが失敗することがある。ripperを使ってparser式の簡潔なASTを生成したほうが楽なのではないかとも思うが、それはparserの作者も考えたはずで、Unless you’re implementing something that obeys the garbage-in garbage-out rule, Ripper isn’t very useful. To make it worse, there isn’t a cross-platform gemification of Ripper, or at least I was unable to find one.
というあたり、特に後者が許容できなかったのだろうか。
関連
- 短いメソッドは grep で探すの大変ですよね - Watson’s Blog - ripperを利用したトークン単位のRubyのソースコード検索
- RubyScope | End of Line - Rubyのソースコード用のgrep的なツール。高度な機能があるらしいが、手元ではうまく動かない。GitHubのリポジトリは2010年で更新が止まっている。パーサーにはruby_parserを使っている。