RuboCop | Style/SignalException
概要
RuboCopの「Style/SignalException」警告について。
例外の送出時に、 raise を利用するか、 fail を利用するかを設定し、チェックする。
デフォルトでは文脈に合わせて使い分けをしているかチェックする。
新規に例外を送出する場合は fail 。
例外を再送出する場合は raise 。
SignalException
設定値一覧
設定対象 | 対象 | 内容 | デフォルト |
---|---|---|---|
EnforcedStyle | only_raise | raiseのみを許容する | -- |
EnforcedStyle | only_fail | failのみを許容する | -- |
EnforcedStyle | semantic | 文脈に合わせる | ○ |
検証プログラム
signal_exception.rb
def hoge(msg)
hige(msg)
rescue
fail StandardError, 'hoge'
end
def hige(msg)
if msg == 'hoge'
print msg
else
raise StandardError, 'hige'
end
end
実行結果 デフォルト の場合
.rubocop.yml
SignalException:
EnforcedStyle: semantic
$ rubocop
Inspecting 1 file
C
Offenses:
signal_exception.rb:4:3: C: Use raise instead of fail to rethrow exceptions.
fail StandardError, 'hoge'
^^^^
signal_exception.rb:11:5: C: Use fail instead of raise to signal exceptions.
raise StandardError, 'hige'
^^^^^
1 file inspected, 2 offenses detected
実行結果 only_raise に設定します
.rubocop.yml
SignalException:
EnforcedStyle: only_raise
$ rubocop
Inspecting 1 file
C
Offenses:
signal_exception.rb:4:3: C: Always use raise to signal exceptions.
fail StandardError, 'hoge'
^^^^
1 file inspected, 1 offense detected
実行結果 only_fail に設定します
.rubocop.yml
SignalException:
EnforcedStyle: only_fail
$ rubocop
Inspecting 1 file
C
Offenses:
signal_exception.rb:11:5: C: Always use fail to signal exceptions.
raise StandardError, 'hige'
^^^^^
1 file inspected, 1 offense detected
補足
この警告は rubocop -a で修正可能です。
RuboCopまとめ記事