RuboCop のイシューが 280 を突破していたので、イシューの数を減らすのに bug ラベルを見てたりした。
ちょうど以下が2つ分のイシューを減らせる感じだったので対応しておいた。結果としてレポートからだいたい1年越しくらいの対応になっている。
そのときの再現 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 が再現する。