Issue #5887 での false positive のレポートを受けて、Lint/SplatKeywordArguments
cop を削除する PR を出した。
削除にあたり、ag 'remove.*cop' CHANGELOG.md
で cop を消した前歴があるか CHANGELOG.md を見たりしたりもしていた (わずかにあった) 。
削除を決めた理由は Issue にあった以下。
options = { opt1: 1, opt2: 2 } def method1(kw_args); end def method2(**kw_args); end method1(**options) # This will warn in ruby 2.6 and currently warns in rubocop. method2(**options) # This does not warn in ruby 2.6 and should not warn in rubocop.
レシーバーのメソッドの定義を辿って def method(kw_args)
か def method(**kw_args)
を知るといったのは、知る限りいまのメカニズムでは無理なので TKO となった。ランタイムまで行けば source_location
とか使ったゴリ技とか浮かびはするので、あとはそれをどう洗練させるかになるけれど、現状の RuboCop のメカニズムでの静的解析だとどうしたものかなのだった (以前ランタイムに頼る PR を出して、あ、あ、あ、となったのを思い出したりしてた) 。
というくらい目処がつかないまま放置した disabled cop があっても良いことはないと思ったので、削除という選択肢をとったのだった。