もともと RuboCop に来ていた以下のイシューがはじまり。
テストケースに記されている IgnoredMethods
の設定がよくないのか、そもそも実装不備なのかとプリントデバッグしてたところ、Style/BlockDelimiters
cop のすべての EnforcedStyle
に IgnoredMethods
が適用されるまで掴んだ。
そのあとはそれぞれの IgnoredMethods
が導入されたコミットを blame で探して辿り着いたのが 2013 年の Ruby Style Guide への Jim Weirich の足跡だった。
RubyKaigi 2018 で話していたこのあたりのスライドにはひとつ不備があって、式を {...}
文を do...end
というのは EnforcedStyle: semantic
として実装されていて、いずれかを見極めるのが難しいメソッドを IgnoredMethods
に加えるという実装が作られていた (実装者は Jim Weirich ではない) 。
RuboCop では複数の SupportedStyles
がある場合にデフォルトの EnforcedStyle
以外の利用頻度が低いため、問題が表面化しづらいという傾向がある。今回はそのオルタナティブのスタイルについて、IgnoredMethods
がデフォルトの EnforcedStyle: line_count_based
でも効いているちょっとした実装の弱点が発見されたのだと捉えている。
EnforcedStyle: line_count_based
は単数行、複数行でのみ評価をしているという裏がとれたら、その EnforcedStyle
においては IgnoredMethods
を無効にするという形にしても良いかもしれないまでをイシューに書いたところで今日はおしまい。
先日の Rails/OSS パッチ会でも Jim Weirich の話題があがっていたので、期せずしてといったタイミングでちょっと驚きながら追っていた。