Open sanemat opened 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には実行ファイルが付いているので、サンプルコードを写経する。
https://github.com/seattlerb/ruby2ruby ruby2rubyで ruby_parser(ast) to ruby code は行けそうだ! なんと。 brakemanなどが使っている
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には実行ファイルが付いているので、サンプルコードを写経する。