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 さんからのフィードバック。
これってcopにできたりしないですか?🤔https://t.co/deZA3AqOS0
— Ryuta Kamizono (@kamipo) 2021年2月8日
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 ケースのコードとしてもシンプルになって良いのではと思います。それでは。