Rails/OSSパッチ会 2019年11月

Rails/OSSパッチ会 2019年11月を開催した。

いくつか行なっていたことがあり、まずは RuboCop Railsマイグレーションdecimal 型を指定する際に precisionscale を必須にしないと警告を出す提案が来ていて、Active Record メンテナーの kamipo さんに相談をしていたりした。

Active Record では scale オプション値によって、Type::DecimalType::DecimalWithoutScale が返るようになっていて Type::DecimalWithoutScale の方は消したいというお気持ちの FIXME として記されていることを教えてもらった。

if scale == 0
  # FIXME: Remove this class as well
  Type::DecimalWithoutScale.new(precision: precision)
else
  Type::Decimal.new(precision: precision, scale: scale)
end

https://github.com/rails/rails/blob/v6.0.2.rc1/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb#L656-L661

この辺りをヒントに Type::DecimalWithoutScale が誕生しないような cop としてコメントをしたのが以下。

github.com

松田さんには RuboCop core に提案されている PR について相談していた。内容としては Dir.glob(path) が返すパスの配列の順序はファイルシステムに依存しており、開発とプロダクションでファイルシステムが異なると結果が変わって困ることがあったというもの。解決策としては Dir.glob(path).sort を書くといったものだが、Dir.glob(path) の振る舞いを変更する提案は breaking change の話になるし、仮に Dir.glob(path, sort: true)Dir.glob(path, mode: :sort) といったオプションを提案したとしても Dir.glob(path).sort の方が短くてインタフェースとしてどうだろうかという話をしていたりした。とりあえず提案されている cop としては Dir.glob(path) の結果を元に require の順序を一意にしたいという状況に限定されているので、このあとマージを前提にレビューをしようかなと思っている。

QWYNG さんからは Rails アプリケーションのコントローラで Style/RedundantReturn偽陰性があることをフィードバックしてもらって、どのように対処しようかという話をしたりしていた。以下の PR として開いてもらったので、順番に見ていきたいと思う。

github.com

自分としても RuboCop 1.0 までに提案したい breaking change となる手元のパッチがあるので、提案の根拠をコミットメッセージにしるしていたり rebase してコンフリクトを解消したりしていた。

次回のパッチ会は 12月18日(水) です。Ruby 2.7 のリリース前に開催した方が、万が一何か見つけた時に良さそうといった日程になっています。