Class: RuboCop::Cop::Style::RescueModifier

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
Alignment, RangeHelp, RescueNode
Defined in:
lib/rubocop/cop/style/rescue_modifier.rb

Overview

Checks for uses of rescue in its modifier form is added for following reasons:

  • The syntax of modifier form rescue can be misleading because it might lead us to believe that rescue handles the given exception but it actually rescue all exceptions to return the given rescue block. In this case, value returned by handle_error or SomeException.

  • Modifier form rescue would rescue all the exceptions. It would silently skip all exception or errors and handle the error. Example: If NoMethodError is raised, modifier form rescue would handle the exception.

Examples:

# bad
some_method rescue handle_error

# bad
some_method rescue SomeException

# good
begin
  some_method
rescue
  handle_error
end

# good
begin
  some_method
rescue SomeException
  handle_error
end

Constant Summary collapse

MSG =
'Avoid using `rescue` in its modifier form.'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Class Method Summary collapse

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods included from RescueNode

#modifier_locations

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Class Method Details

.autocorrect_incompatible_withObject



48
49
50
# File 'lib/rubocop/cop/style/rescue_modifier.rb', line 48

def self.autocorrect_incompatible_with
  [Style::MethodCallWithArgsParentheses]
end

Instance Method Details

#on_resbody(node) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/rubocop/cop/style/rescue_modifier.rb', line 52

def on_resbody(node)
  return unless rescue_modifier?(node)

  rescue_node = node.parent
  add_offense(rescue_node) do |corrector|
    parenthesized = parenthesized?(rescue_node)

    correct_rescue_block(corrector, rescue_node, parenthesized)
    ParenthesesCorrector.correct(corrector, rescue_node.parent) if parenthesized
  end
end