sanemat / ruby-parser-book

2 stars 0 forks source link

ライブラリ選定 #3

Open sanemat opened 9 years ago

sanemat commented 9 years ago

node学園祭2014のt-wadaセッションのjavascriptのastの話がすごくわかりやすかった。 http://www.slideshare.net/t_wada/power-assert-nodefest-2014

esprima, escodegen, estravarse.

Rubyのコードをパースするライブラリまとめ - Qiita

rubyの場合、このまとめがとてもわかりやすい。

現状、事実上選択肢は2つっぽい。(要出典) parseするものは4つあるけど、ast to rubyのライブラリが少ない。

あとは parsetreeと ruby_parser。

ripper ripperはMRIの標準添付ライブラリ。日本語圏で出てくるサンプルコードもripperが多い。ただ、ripperで生成したASTをrubyに書き戻す部分が無い(?)

ripper2rubyは開発が止まっている(2009)。 sorcerer https://github.com/jimweirich/sorcerer も2013 で止まっていて、2014にJimが亡くなってしまっているので、誰かが引き継がないと更新されない。

parser parserはrubocopやtranspecが利用しているライブラリ。AST書き換えてrubycodeを出力するライブラリは、parserを使っていることが多い。 rubocop, transpec, synvert-core(synvertのロジック部分)など。

parserで生成したastは、unparserでrubyのコードに書き戻せる。ただ、このunparserを使っているライブラリは少ない。mutantなど(?)。rubocop, transpec, synvertいずれもunparser使っていない。どうしてるんだろう?? これは後で分かる。

この時点でripperを使ったライブラリ, parserを使ったライブラリのコードを見るが、何のことやらさっぱりわからない。 todesking/ruby_hl_lvar.vim - ローカル変数をハイライトするVimプラグイン zenspider/enhanced-ruby-mode - EmacsのRuby用メジャーモード k-tsj/power_assert transpec rubocop synvert-core

astから戻せないとやりたいことが実現できないので、parser, unparserのセットを利用する。 parserとunparserには実行ファイルが付いているので、サンプルコードを写経する。

sanemat commented 9 years ago

https://github.com/seattlerb/ruby2ruby ruby2rubyで ruby_parser(ast) to ruby code は行けそうだ! なんと。 brakemanなどが使っている