sanemat / ruby-parser-book

2 stars 0 forks source link

rewriteとast #6

Open sanemat opened 9 years ago

sanemat commented 9 years ago

rewriteがわかりやすいが、これはastの該当箇所を、replaceしたりinsert_beforeしたりするapi。

Let's play with Ruby code - whitespace

そして、これはastの場所を指定して、textのcontentを入れるapiだった。つまり、たとえばサンプル通りに、=をインデント揃えたり、thenを入れたり消したりするのには使える。

出力はrubyコードになってしまうので、だからunparserはあまり使われていない。 つまりestraverse + escodegen がrewrite。

ちなみにゴニョゴニョっと書き換えた時にindentなどは自分で変えないと変わらない(要出典)。自分がやりたいのは並び替えて整形なので、理解が進むまでは整形はunparserに任せたい。

ちなみにunparserの出力は

source 'http://example.com'

source("http://example.com")

に変えてしまうので、dslっぽくなくなったり、シングルクオートがダブルクォートになったりしてしまう。

estraverse部分だけ(ast->astだけ)ほしい時は、steps for walking AST generated from file · Issue #170 · whitequark/parser processerでやるとよさそう。

いまここ