2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RuboCopで見つけられたバグ Lint/UnreachableLoop

Last updated at Posted at 2022-11-15

最初に

古い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を書かない。
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?