Style/EmptyCaseConditionのauto-correct不具合を避けるようにした

以下のイシューで Style/EmptyCaseCondition に関する auto-correct の不具合のフィードバックがあったことがはじまり。

github.com

ちょうど今日、勤務先での月例会の後に残ったメンバーで、上記イシューにおける case...whenif...elsif での振る舞いの違いについて話していた。

まとめとしては以下のとおり、case あるいは if で戻り値を代入し、その中の when 節なんかで return をしたときの振る舞いが異なるというものだった。

以下のように when だと return の値が返る。

def foo
  v = case
  when true
    return 2
  end
end

p foo # => 2

if だと "void value expression" エラーになる。

def bar
  v = if true
    return 2
  end
end

bar # => hoge.rb:4: void value expression

return のケースだけガード条件にするということも思い浮かんだが、複雑な条件式を含んだ長いメソッドになると自動修正は難しそうなのと、意味合いを変えるようなスタイル変更の offense が良いのか判断が難しかったため、帰宅後にパッチを書いたものとして以下の PR では偽陰性にしておいた。

github.com