RuboCop Performance 1.10 をリリースした

RuboCop Performance 1.10 をリリースした。

JST で 3月1日に 1.10.0 をリリースして、3月2日に 1.10.1 をバグフィックスリリースした。以下、2つの新 Cop が目玉です。

Performance/RedundantSplitRegexpArgument cop

機能リクエストがあがっていた Cop をコントリビュータが実装してくれました。split メソッドの引数について正規表現ではなく文字列で十分というケースを検出する Cop です。

# bad
'a,b,c'.split(/,/)

# good
'a,b,c'.split(',')

1.10.0 の時点だと 'oneSplittwo'.split(/split/i) といった ignore case オプションも警告する偽陽性があったため、1.10.1 で修正リリースしています。

Performance/RedundantEqualityComparisonBlock cop

こちらは Rails コミッターの kamipo さんからのフィードバック。

Enumerable#all?, Enumerable#any?, Enumerable#one?, Enumerable#none? に関して、ブロックで ===, ==, is_a?, kind_of? を使っている以下のようなケースを、Ruby 2.5 で追加された引数渡しにする Cop です。

# bad
items.all? { |item| pattern === item }
items.all? { |item| item == other }
items.all? { |item| item.is_a?(Klass) }
items.all? { |item| item.kind_of?(Klass) }

# good
items.all?(pattern)

いちおう引数渡しにした際に内部で呼び出される ===== と同じ振る舞いなケースのこともあれば、 組み込みの Regexp のようにサブクラスで再定義されている可能性があることから安全でない Cop としてマークしています。 (より安全側に倒して、=== の場合は LHS でブロック引数と異なる値が使われているときに限定するか悩んだ気がする。)

どちらの Cop も good ケースのコードとしてもシンプルになって良いのではと思います。それでは。