【Ruby 3.0 Advent Calendar 2020】Ruby3.0に投げたPull Request【2日目】

はじめに

Ruby 3.0 Advent Calendar 2020 2日目の記事になります。

昨日は、【Ruby 3.0 Advent Calendar 2020】Ruby に右代入がやってくる【1日目】です。
secret-garden.hatenablog.com

右代入、このまま何事もなく入るといいなぁ……

この記事では、僕が投げたPull Requestで何をやっているかを書いています。

ちなみに

これまでマージされたPull Requestの数を数えてみたんですが、26個みたいです(以下のリンクから確認できます)

github.com

テスト修正関係

基本的には`make test-all`を複数回動かす際のテスト修正になっています。

github.com

これはdid_you_meanのテストでBook::Coverが二回目のテストで定義済みのため落ちていたのを修正しています。
当初はBook.send(:remove_const, :Cover)するだけで対応できそうかと思ったんですが、別の個所でCoverageが期待される挙動となってしまったので、Book::Spineへとリネームしています。

そのうえで既に定数として定義済みであればそれを削除するようにしています。

github.com

これは二回目以降のテスト時にAWESOMEが既に定義済みである警告を無くす対応です。
先ほど同様remove_constで削除しています。

github.com

こちらも同様に二回目以降のテストで警告が出ていたので、定義済みの定数MyBookStructremove_constで削除しています。

github.com

で、先ほどの修正で漏れていた箇所(シンボルで渡していなかったの)を修正したものです

github.com

複数回テストを回す際にdid_you_meanで使用するフォーマッタの初期化がされていなかったため意図しない挙動になっていたのを修正しています。
setupDidYouMean.formatter = DidYouMean::VerboseFormatter.newしているだけの対応ですが、原因が上手くつかめず苦労した覚えがありますね……

github.com

二回目以降のテストでwebrickserver[:DocumentRootOptions][:NondisclosureName]が初期化されていないため失敗していたのを修正しています。
具体的にはserver[:DocumentRootOptions][:NondisclosureName] = []のように初期化しています。

github.com

make test-all TESTS="--repeat-count="50""のように実行すると時々テストが落ちるという問題に対応したものです。
原因としてはReadline.special_prefixesなどの区切り文字の設定周りが初期化されていないことでテストが落ちていました。

そこでteardownにそのあたりを初期化するように修正しています。

CI修正関係

github.com

RubyではWindows用のCIとしてAppVeyorを使っているんですが、これが時々なぜか落ちるという現象がありました。
調べてみたところshallow_clone: trueと設定している場合でうまくソースコードをcloneできないということがあるとわかりました。

github.com

そこで、cloneする深さをclone_depth: 10のように設定して落ちないようにしています。
正直落ちるかどうか不安でたまらなかった覚えがあります……。

github.com

で、治ったみたいだったんですが、PR時のCIチェックが別のエラーを出してきたので直したのがこれです。
原因としてはソースコードをcloneしてくるときにGitのユーザーなどが設定されていないのでエラーになっていました。

で、とりあえず初期設定でユーザーなどを設定したんですが、あまりいい直し方ではなかった感じですね……。

ドキュメント関係

github.com

最近のRubyではRubyRuby自身(と一部のCコード)で組み込みメソッドを書くと高速化するケースがあります。
そういったケースでRuby内部のRubyソースコード上にドキュメント用のコメントが記載されてます。

github.com


それらのコメントは.documentに追記することでビルド時によしなにドキュメント生成を行ってくれます。
で、array.rbが無かったのでそれを追加しているPRですね。

github.com

これはHash#deleteのドキュメントで矢印になっていないのを修正したものですね。

github.com

これはドキュメント内のリンクがOracleのドキュメントにリダイレクトされたのでわかった修正ですね。
リダイレクト先のURLに変更しています。

github.com

これはrb_class_realの挙動についてのドキュメントでtypoしてそうと思って投げたPRですね。
実際にはドキュメントが違ってた模様(typoではなかった)

またこの一件でコードの修正とかもされてます(詳しくは下記を参照)

github.com


ruby-trunk-changes.hatenablog.com



github.com

これはアクセス先のURLがhttpsに変更されていたので修正しています。

性能向上関係

github.com

ko1さんがRubyKaigi2019で発表されていた「RubyRubyを実装して高速化する」件をPRにしたものですね。
今回はKernel#cloneでそれを行っています。

github.com

こちらはKernel#Floatのバージョンですね。

コードの修正関係

github.com

これはrb_str_clearが宣言されているが使われていないのでそれを削除しています。
多分、以前は使うこともあって残っていたんだろうなぁというコードですね。

github.com

これはstaticを付けてもよさそうな関数だったので付けた方がいいのではと投げたPRですね。

github.com

これも同様にstaticを付けてます。

github.com

hash.c内でいくつかの関数にstaticを付けています。

github.com

こちらも同様にstaticを付けています。

github.com

こちらはrb_int_ceilrb_int_floorにstaticを付けています。

github.com

int_even_prb_int_odd_pで現在では使われてなさそうな処理を削除しています。

github.com

flo_prevflo_nextの処理がほとんど同じだったのでまとめています。

バグ修正関係

github.com

Time#strftimeの引数にTimezoneを渡した時に表示される出力結果がおかしいのを修正しています。
直近で似たような修正をnobuさんがされていたのでそれを参考に修正したやつですね。

github.com

Time#to_aでも同じようにTimezoneを渡した時の出力がおかしいのを修正しています。

雑感

そこそこ色々と投げれているなぁと感慨深くなりました。

自分が投げたパッチが取り込まれてるRuby3.0がリリースされるのが楽しみですね