RuboCopが対象にする隠しファイルの扱いを変えた

RuboCopが対象にする隠しファイルの扱いを変えた。昨日の Asakusa.rb で見ていたものであり、もっというと 20 日以上前にブランチ自体は切っていた PR は以下。

github.com

直した問題の話。

.rubocop.yml に対して、以下のように Exclude へのパス指定をしているとする。

AllCops:
  Exclude:
    - 'vendor/bundle/**/*'

現状だと以下のように、指定したパス配下の隠しファイルが RuboCop の対象になる。

vendor/bundle/ruby/2.4.0/gems/backports-3.6.8/.irbrc:1:1: C:
Style/SpecialGlobalVars: Prefer $LOAD_PATH over $:.
$:.unshift "./lib"
^^

(snip)

ワイルドカードを指定した場合は、その配下すべてが対象になるのが期待する振る舞いだと思うので File.fnmatch? へのフラグとして File::FNM_DOTMATCH を指定することで、隠しファイルを含めるケースを加えた。

.rubocop.yml へは Include のパス指定というケースも考慮する必要があるため、その際には隠しディレクトリでないディレクトリ配下の .irbrc や .pryrc などは RuboCop の対象とし、隠しディレクトリ内の隠しファイルは対象としないようにもしている。たぶんこれでパターンはさらえていると思うので、マージされたあとの次のリリース RuboCop 0.59.0 になると思うけれど、それで改善されると思う。

なお、次のリリースまでの間に、隠しファイルも Exclude 対象としたい場合のワークアラウンドとしては、以下のように隠しファイルの指定を別途行うというものになる。

AllCops:
  Exclude:
    - 'vendor/bundle/**/*'
    - 'vendor/bundle/**/.*'

イシューが重複して挙がっていたのとスレッドの伸びをみた感じ、有用な変更だと思う。