最初に
古いRubyライブラリのコミット権限を貰ったのですが、
それがRuboCopにたくさん注意されてました。
自動で直せるところは自動で直しましたが、
それでもあまりに注意されてるので、
優先順位の低いものはEnabed: false
で止め、
すぐ直せるところはすぐ直しました。
そうすると、残ってしまったCopがあります。
Lint/UnreachableLoop
です。それについて書きます。
Lint/UnreachableLoop
RuboCop warned:
W: Lint/UnreachableLoop: This loop will have at most one iteration.
「未到達のループ: このループは多くても1回の繰り返しでしょう。」
バグっぽいですし、バグっぽいと思いましたが、バグでした。
def foo
@array.each do |e|
(中略)
return ans
end
end
わかりやすく書くと、こんな感じです。
実際には、メソッドはもっと長く、もう少しだけネストしてました。
まぁ、return
の書く場所を間違えたのでしょう。
Rubyがend
だらけになって「どのend
だ?」ってなるのは、あるあるかもしれません。
対策
- VSCodeなどでは、拡張機能でインデントに色をつけて見やすくする。
- RuboCopの優先順位の高いものをやる。
- 優先順位が低いものは、切る。後回し。
- そのライブラリでは、
Merics
は優先順位が低かったです。
- 複数パターンの場合もテストする。
- 不用意に
return
を書かない。