RuboCopのイシューを起点にJim Weirichの足跡を辿っていた

もともと RuboCop に来ていた以下のイシューがはじまり。

github.com

テストケースに記されている IgnoredMethods の設定がよくないのか、そもそも実装不備なのかとプリントデバッグしてたところ、Style/BlockDelimiters cop のすべての EnforcedStyleIgnoredMethods が適用されるまで掴んだ。

そのあとはそれぞれの IgnoredMethods が導入されたコミットを blame で探して辿り着いたのが 2013 年の Ruby Style Guide への Jim Weirich の足跡だった。

github.com

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 の話題があがっていたので、期せずしてといったタイミングでちょっと驚きながら追っていた。