RuboCop 0.78.0 リリース解説

RuboCop 0.78.0 がリリースされたので、概要をざっくり記しておきます。

github.com

今回は新たな cop の追加と LineLength cop の部署変更が行われたリリースです。

LineLength cop の部署変更については自分が入れた Breaking Change で、LineLength の警告への解決は行の折り返しや本意でない名前への変更といったケースがほとんどで、Metrics として捉えたいロジックの複雑性といったものを解決するものではないのが理由です。そのため Layout 部署に移動しています。

また Layout 部署への移動に対して今回含めていない対応として、LineLength へのデフォルト値の変更といったものがあります。こちらはデフォルト値とその提案をどうするかを検討しているところ。

pocke さん作の mry も対応版がリリースされているので、コマンドラインでの機械的解決をしたい人 (基本的にそうだと思う) におすすめです。

また今回追加された cop は Lint/NonDeterministicRequireOrder cop です。以下は提案された PR に記された bad ケースと good ケースです。

# bad
Dir["./lib/middleware/*.rb"].each do |file|
  require file
end

# good
Dir["./lib/middleware/*.rb"].sort.each do |file|
  require file
end

どうやら開発環境と本番環境のファイルシステムの差異で Dir['*/path/*.rb'] の戻り値の並び順が異なったことが起因して問題になったために提案されたとのこと。いまのところ対象の要素を require の引数にするとき限定でのためコアで持っても良い cop かなといった感じで入っています。

このあたりの経緯は 2019年11月のパッチ会のエントリにも記しているので興味があれば参照してください。

koic.hatenablog.com

その他に追加オプションや多くのバグ修正が含まれています。何かあればフィードバックお待ちしています。