44
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rubyの`# =>`を検証するやつを書いた

Posted at

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はポインタじゃん。毎回違うじゃん。そういうのはよろしく無視する必要がある。

ただ、この部分はかなりヒューリスティックなので、まだまだ改善の余地があるなあと思う。

そのほかの趣味に走った部分

44
23
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
44
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?