Rails/FilePath の false positive を直した

RuboCop のイシューが 280 を突破していたので、イシューの数を減らすのに bug ラベルを見てたりした。

ちょうど以下が2つ分のイシューを減らせる感じだったので対応しておいた。結果としてレポートからだいたい1年越しくらいの対応になっている。

github.com

そのときの再現 tip を書き残しておく。

まずイシューに書かれた (的確な) 再現ケースは解決の最初の糸口になる。自分の場合は /tmp とか適当なディレクトリに a.rb や b.rb といった Ruby ファイルを作って再現コードをコピペして rubocop コマンドを実行するところから始める。その場合、Rails department の場合は rubocop --only Rails/FilePath といった形で Rails department を指定しないと非 Rails プロジェクトの /tmp/a.rb では適用されないのだった (を失念してしばらく ? になった) 。

% cat /tmp/rep.rb
# frozen_string_literal: true

system "rm -rf #{Rails.root.join('public', 'system')}"

--only Rails/FilePath cop 指定なし

% rubocop /tmp/rep.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

false positive が再現しない。

--only Rails/FilePath cop 指定あり

% rubocop --only Rails/FilePath /tmp/rep.rb
Inspecting 1 file
C

Offenses:

/tmp/rep.rb:3:8: C: Rails/FilePath: Please use Rails.root.join('path', 'to') instead.
system "rm -rf #{Rails.root.join('public', 'system')}"
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1 file inspected, 1 offense detected

false positive が再現する。