Rubyでよく
1 + 2 # => 3
とか書いてあるじゃないですか。# =>
を挟んで、左辺が式で右辺がその結果というやつ。
それ、でも、どんだけ信じていいの?
そのコメント作るだけであれば JoshCheek/seeing_is_believing で作れるんだけど、逆がないんだよね。
というわけで作った。 https://rubygems.org/gems/xmp2assert
実装について
ごくラフなアイディアとしては actual # => expected
って書いてあったら assert_equal(expected, actual)
に変換する。これが着想。
とはいえこの式はRubyの式なわけで、正規表現置換のような生易しいことにはならない。Ripperでがんばってコメント位置を発見して、その直前にある式を…… みたいなのをやっていて非常に面倒。
このコメントはコメントであるがゆえに実行時には読み飛ばされるので、k-tsj/power_assertみたいにTracePointで頑張るとかも不可。根性以外の武器はなさそうな気がしている。
あと # =>
の右側って、まあ、1 + 2 # => 3
とかならシンプルかもしれないけど、普通そうじゃないわけよ。現実的には、
-> { } # => #<Proc:0x007fbc22efed78@(pry):1 (lambda)>
こんな感じでもっと複雑になっている。なので、そこをうまくハンドリングする必要がある。たとえば上記でいうと0x007fbc22efed78
はポインタじゃん。毎回違うじゃん。そういうのはよろしく無視する必要がある。
ただ、この部分はかなりヒューリスティックなので、まだまだ改善の余地があるなあと思う。
そのほかの趣味に走った部分
- 普段思っていることをスタイルガイドに書いてみた
- pとppでそれぞれ
inspect
とpretty_print
をわざわざ両方書くのいい加減めどいのでppだけ対応すればよしなにp側も反映するやつ (これは便利だから別のgemにするかもしれん)