diary

I like Hatena Star with a text selection.

2021-09-05

[asin:B00TY5NF54:detail]

まほろばきっさ、全3巻読んだ。 いい感じの日常系で良かった。


転生したらあかりだけスライムだった件、1巻読んだ。Webで途中まで追ってたのだけど、最新の何話かは読んでなかった。良い。今後が楽しみ


ゆるゆり 20巻読んだ。このために1巻から読み返してた。

改めて読むと19巻がホラーだよなあとなる


[asin:B009JZHDSE:detail]

闇金ウシジマくん、全46巻読んだ。

しばらく前に1巻だけ読んで「うーん……」という気持ちだったのだけど、2巻から面白かった。ただ後半のストーリーががっと変わるあたりからあんまり好きではなかった…。


github.com

IRBでwindow sizeを変更した時に例外で死んでしまうのでIssueを書いた。


github.com

Array#dropのドキュメントを読んでいて、このメソッドがselfを破壊的に変更するものなのかよく分からなかったのでドキュメントを修正した。


github.com

rbs collectionを導入したことでruby/rubyのtest-bundled-gemsが落ちていたので直した。


github.com

rbsResolv::Hostsのテストが手元の環境だと失敗していたので直した。 テストでは/etc/hosts127.0.0.1 localhost的なエントリがあることを期待しているけど、手元の環境では/etc/hostsがコメントのみで実質空だったのでテストが落ちていた。


github.com

gem_rbs_collectionでnokogiriがEnumerableの制約を満たしていなかったのを直した


github.com

gem_rbs_collection が使うSteepのバージョンを上げた


github.com

github.com

gem_rbs_collection のSteepのバージョンを上げていて、Steepのバグを踏んだので報告した。


github.com

SteepにRBS Collectionの実装をしている。

この実装中に面白いバグを作ってしまっていた。assert target.options.collection_lock.gem('pathname')のようなアサーションを書いていたのだけど、これが意図せず通ってしまっていた。 このgemメソッドはRBS::Collection::Config#gemが呼ばれることを期待している。 このテストは手元では成功していたけど、GitHub Actionsでは次のようなメッセージとともに失敗していた。

   1) Error:
SteepfileTest#test_collection_implicit:
Gem::LoadError: pathname is not part of the bundle. Add it to your Gemfile.
    /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.2.27/lib/bundler/rubygems_integration.rb:336:in `block (2 levels) in replace_gem'
    /__w/steep/steep/test/steepfile_test.rb:153:in `block (2 levels) in test_collection_implicit'
    /__w/steep/steep/test/steepfile_test.rb:152:in `tap'
    /__w/steep/steep/test/steepfile_test.rb:152:in `block in test_collection_implicit'
    /__w/steep/steep/test/test_helper.rb:392:in `chdir'
    /__w/steep/steep/test/test_helper.rb:437:in `block in in_tmpdir'
    /usr/local/lib/ruby/2.6.0/tmpdir.rb:93:in `mktmpdir'
    /__w/steep/steep/test/test_helper.rb:436:in `in_tmpdir'
    /__w/steep/steep/test/steepfile_test.rb:136:in `test_collection_implicit'

どうやらBundlerが追加しているKernel.#gemを呼んでいるように見える。手元ではなぜかKernel.#gemが成功してtruthyな値を返すのでテストも成功していた。一方CIではKernel.#gemが失敗するので、テストも失敗していた。

そして、ここでgemメソッドのレシーバーはnilになっていた。つまりNilClass#gemメソッドを呼び出せてしまっていた。 これはKernel.#gemがpublic methodになってしまっているため。

Bundlerのコードを読むと、この挙動はBundler v3で変更されるぽいことがわかった。

https://github.com/rubygems/rubygems/blob/b737e1c930aaca15618c702f10553992087e2bc4/bundler/lib/bundler/rubygems_integration.rb#L339-L340

意図せずKernel.#gemをpublic methodにしていたのを、Bundler v3でprivate methodになるようにする、という感じのよう。