RuboCop の Cop 名をマイグレーションする

RuboCop では Cop が所属する先の部署や Cop 名が変更されることがある。

変更された際に所属先の部署や Cop 名をマイグレーションする仕組みが用意されているものについて紹介する。

Migration/DepartmentName cop

現状の RuboCop では部署名が省略されいても、一意に特定できれば動く仕組みが入っている。これはおそらく昔の RuboCop では部署が存在せず、部署導入時に移行をスムースにするための機構だったようだ。

rubocop-hq/rubocop#7717 にて以下のコメントがある。

RuboCop no longer supports ambiguous cop names (those without a department).

このとおり今後の RuboCop では部署名の省略は許可しないようになるだろう。これに向けて部署が省略された disabled コメントに部署名を補完する Cop が追加されている。それが Migration/DepartmentName cop である。

github.com

v0.75 でデフォルト無効で追加されているが、現状の v0.80 ではデフォルトで有効化している。今後、disabled コメントへの部署名の省略をランタイムで受け入れる機構を削除する可能性があることから、ユーザーに対して disabled コメントへの部署名の補完を推進する意味合いがある。

Migration/DepartmentName cop は auto-correct をサポートしているので、rubocop -a --only Migration/DepartmentName で以下のように部署名を補完することができる。

-def parse value # rubocop:disable MethodLength
+def parse value # rubocop:disable Metrics/MethodLength

また、以前の RuboCop から部署名が変わっているようなレガシー部署からの移行についても RuboCop 0.80 からサポートしているので、RuboCop のバージョンを上げる際にはその辺りも活用できると思う。

github.com

Mry

pocke さん作の gem 。Mry Migrates .Rubocop.Yml の頭文字で Mry とのこと。コマンドライン一発でマイグレーションできるのでとても便利。

github.com

.rubocop.yml に指定している Cop 名についてレガシーの名前を新しい名前に置換してくれる。

繰り返しになるが、将来的に部署名を省略した disabled コメントのサポートは消される方向性があるため、Migration/DepartmentName cop と組み合わせて 部署名/Cop名 の形式に移行しておくと良い。