ruby-signatureとは
Ruby 3に向けて、Rubyの型定義ファイル周りを提供するプロジェクトです。
https://speakerdeck.com/soutaro/ruby-hack-challenge-holiday-number-8 このスライドも参考になるでしょう。
この記事では組み込みライブラリの型定義にフォーカスして説明します。
ruby-signatureでは組み込みライブラリの型定義を提供しています。 ですが、まだまだ型が間違っていることもあり、無限のPRチャンスが広がっています。
また、組み込みライブラリの型定義をテストする仕組みもあるのですが、肝心のテストはほとんど書かれていません。 2019/11/14現在で組み込みライブラリの型定義は56ファイルありますが、そのテストは13ファイルしかありません。
$ ls stdlib/builtin/ | wc -l 56 $ ls test/stdlib/ | wc -l 13
テストファイルのジェネレータ
今回は、このPRでこの足りないテストファイルのジェネレータを追加しました。
たとえばまだ存在しないRubyVM
モジュールへのテストファイルを追加するには以下のようなrake taskを実行します。
$ bundle exec rake 'generate:stdlib_test[RubyVM]' Created: test/stdlib/RubyVM_test.rb
するとメッセージにもあるとおり、test/stdlib
下にRubyVM_test.rb
が生成されます。
class RubyVMTest < StdlibTest target RubyVM using hook.refinement # def test_method_name # # Call the method # method_name(arg) # method_name(arg, arg2) # end end
このファイル内で、RubyVM
モジュールの各メソッドを呼び出すようなテストを書きます。
余談ですが、ジェネレータとしてPRをせずに、足りないテストファイルを全部生成したPRを送るのもありかなと当初思っていました。 ですが、空のテストファイルだけが置かれているよりはテストファイルがそもそも存在しないほうが、テストが書かれていない現状がより伝わりやすいし、どのモジュールにテストが書かれていないのか明確で良いかなと思ったのでこうしています。
テストの書き方
だいたい上のドキュメントに書かれています。 簡単に言えば、型定義を行ったメソッドを単にテストメソッド内で呼び出せば、refinementsを使って引数と戻り値の型チェックを勝手にやってくれるようになっています。
というわけで、Ruby 3にむけてruby-signatureにPRを送ってみてはいかがでしょうか。
追記
ruby-signatureのAdvent Calendarもあるので、ruby-signatureにPRを送ったらこちらにも参加してみてはいかがでしょうか。