LoginSignup
6
1

SyntaxTree gemの紹介と実践例

Posted at

前提

世は大パーサー時代ということで、SyntaxTreeを触ってみて、実際にRSpecファイルからドキュメンテーション部分を抜き出すことに成功したのでちょっと書きます。

SyntaxTreeについて

RubyのASTをいい感じに触れるgemです。機能的にはRipperという標準ライブラリと近いのですが、各ノードが情報を豊富に持っているために色々と便利になっています。

SyntaxTree実践:RSpecから情報を抜き出す

コードを読んだほうが早いと思うのでコードをどうぞ。

上のコードではRSpecのファイルからdescribeなどに与えられた文字列を解析し、RSpecが--format documentationのときに出力する文字列と似た文字列を出力しています。

特に57行目のvisit_commandメソッドが重要で、ここでメソッド名に応じて処理を変更しています。superを呼ばないと下のノードが処理されなくなってしまうのですが、superの後ろで後片付けができる(感覚的には対応するendに来たときの処理を書ける)のが便利です。

お読みいただけるとわかるのですが、中核となるRSpecVisitorクラスはSyntaxTree::Visitorを継承することでわずか40行ほどに収まっており、全体でも100行以下で目的を達成できています。

まとめ

ということで短いですがSyntaxTreeの紹介と実践例でした。パーサーというと大がかりに聞こえがちですが、このような小規模なコードでも便利さを実感できます。SyntaxTreeは使用感がとても良いですし、機能も豊富ですので手軽にやりたいことを実現できるかもしれません。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1