RuboCopが対象にする隠しファイルの扱いを変えた。昨日の Asakusa.rb で見ていたものであり、もっというと 20 日以上前にブランチ自体は切っていた PR は以下。
直した問題の話。
.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/**/.*'
イシューが重複して挙がっていたのとスレッドの伸びをみた感じ、有用な変更だと思う。