Class: RuboCop::Cop::Naming::RescuedExceptionsVariableName

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Defined in:
lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb

Overview

This cop makes sure that rescued exceptions variables are named as expected.

The `PreferredName` config option takes a `String`. It represents the required name of the variable. Its default is `e`.

NOTE: This cop does not consider nested rescues because it cannot guarantee that the variable from the outer rescue is not used within the inner rescue (in which case, changing the inner variable would shadow the outer variable).

Examples:

PreferredName: e (default)

# bad
begin
  # do something
rescue MyException => exception
  # do something
end

# good
begin
  # do something
rescue MyException => e
  # do something
end

# good
begin
  # do something
rescue MyException => _e
  # do something
end

PreferredName: exception

# bad
begin
  # do something
rescue MyException => e
  # do something
end

# good
begin
  # do something
rescue MyException => exception
  # do something
end

# good
begin
  # do something
rescue MyException => _exception
  # do something
end

Constant Summary collapse

MSG =
'Use `%<preferred>s` instead of `%<bad>s`.'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods inherited from Base

#add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #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, joining_forces, lint?, match?, #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?, #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

Instance Method Details

#on_resbody(node) ⇒ Object


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb', line 66

def on_resbody(node)
  offending_name = variable_name(node)
  return unless offending_name

  # Handle nested rescues by only requiring the outer one to use the
  # configured variable name, so that nested rescues don't use the same
  # variable.
  return if node.each_ancestor(:resbody).any?

  preferred_name = preferred_name(offending_name)
  return if preferred_name.to_sym == offending_name

  # check variable shadowing for exception variable
  return if shadowed_variable_name?(node)

  range = offense_range(node)
  message = message(node)

  add_offense(range, message: message) do |corrector|
    corrector.replace(range, preferred_name)

    correct_node(corrector, node.body, offending_name, preferred_name)
  end
end