【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で何をやっているかを書いています。
テスト修正関係
基本的には`make test-all`を複数回動かす際のテスト修正になっています。
これはdid_you_meanのテストでBook::Coverが二回目のテストで定義済みのため落ちていたのを修正しています。
当初はBook.send(:remove_const, :Cover)するだけで対応できそうかと思ったんですが、別の個所でCoverageが期待される挙動となってしまったので、Book::Spineへとリネームしています。
そのうえで既に定数として定義済みであればそれを削除するようにしています。
これは二回目以降のテスト時にAWESOMEが既に定義済みである警告を無くす対応です。
先ほど同様remove_constで削除しています。
こちらも同様に二回目以降のテストで警告が出ていたので、定義済みの定数MyBookStructをremove_constで削除しています。
で、先ほどの修正で漏れていた箇所(シンボルで渡していなかったの)を修正したものです
複数回テストを回す際にdid_you_meanで使用するフォーマッタの初期化がされていなかったため意図しない挙動になっていたのを修正しています。
setupでDidYouMean.formatter = DidYouMean::VerboseFormatter.newしているだけの対応ですが、原因が上手くつかめず苦労した覚えがありますね……
二回目以降のテストでwebrickのserver[:DocumentRootOptions][:NondisclosureName]が初期化されていないため失敗していたのを修正しています。
具体的にはserver[:DocumentRootOptions][:NondisclosureName] = []のように初期化しています。
make test-all TESTS="--repeat-count="50""のように実行すると時々テストが落ちるという問題に対応したものです。
原因としてはReadline.special_prefixesなどの区切り文字の設定周りが初期化されていないことでテストが落ちていました。
そこでteardownにそのあたりを初期化するように修正しています。
CI修正関係
RubyではWindows用のCIとしてAppVeyorを使っているんですが、これが時々なぜか落ちるという現象がありました。
調べてみたところshallow_clone: trueと設定している場合でうまくソースコードをcloneできないということがあるとわかりました。
そこで、cloneする深さをclone_depth: 10のように設定して落ちないようにしています。
正直落ちるかどうか不安でたまらなかった覚えがあります……。
で、治ったみたいだったんですが、PR時のCIチェックが別のエラーを出してきたので直したのがこれです。
原因としてはソースコードをcloneしてくるときにGitのユーザーなどが設定されていないのでエラーになっていました。
で、とりあえず初期設定でユーザーなどを設定したんですが、あまりいい直し方ではなかった感じですね……。
ドキュメント関係
最近のRubyではRubyでRuby自身(と一部のCコード)で組み込みメソッドを書くと高速化するケースがあります。
そういったケースでRuby内部のRubyのソースコード上にドキュメント用のコメントが記載されてます。
それらのコメントは.documentに追記することでビルド時によしなにドキュメント生成を行ってくれます。
で、array.rbが無かったのでそれを追加しているPRですね。
これはHash#deleteのドキュメントで矢印になっていないのを修正したものですね。
これはドキュメント内のリンクがOracleのドキュメントにリダイレクトされたのでわかった修正ですね。
リダイレクト先のURLに変更しています。
これはrb_class_realの挙動についてのドキュメントでtypoしてそうと思って投げたPRですね。
実際にはドキュメントが違ってた模様(typoではなかった)
またこの一件でコードの修正とかもされてます(詳しくは下記を参照)
ruby-trunk-changes.hatenablog.com
これはアクセス先のURLがhttpsに変更されていたので修正しています。
性能向上関係
ko1さんがRubyKaigi2019で発表されていた「RubyでRubyを実装して高速化する」件をPRにしたものですね。
今回はKernel#cloneでそれを行っています。
こちらはKernel#Floatのバージョンですね。
コードの修正関係
これはrb_str_clearが宣言されているが使われていないのでそれを削除しています。
多分、以前は使うこともあって残っていたんだろうなぁというコードですね。
これはstaticを付けてもよさそうな関数だったので付けた方がいいのではと投げたPRですね。
これも同様にstaticを付けてます。
hash.c内でいくつかの関数にstaticを付けています。
こちらも同様にstaticを付けています。
こちらはrb_int_ceilとrb_int_floorにstaticを付けています。
int_even_pとrb_int_odd_pで現在では使われてなさそうな処理を削除しています。
flo_prevとflo_nextの処理がほとんど同じだったのでまとめています。
バグ修正関係
Time#strftimeの引数にTimezoneを渡した時に表示される出力結果がおかしいのを修正しています。
直近で似たような修正をnobuさんがされていたのでそれを参考に修正したやつですね。
Time#to_aでも同じようにTimezoneを渡した時の出力がおかしいのを修正しています。
雑感
そこそこ色々と投げれているなぁと感慨深くなりました。
自分が投げたパッチが取り込まれてるRuby3.0がリリースされるのが楽しみですね