Class: RuboCop::Cop::Lint::InheritException

Inherits:
Cop
  • Object
show all
Includes:
ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/lint/inherit_exception.rb

Overview

This cop looks for error classes inheriting from Exception and its standard library subclasses, excluding subclasses of StandardError. It is configurable to suggest using either RuntimeError (default) or StandardError instead.

Examples:

EnforcedStyle: runtime_error (default)

# bad

class C < Exception; end

# good

class C < RuntimeError; end

EnforcedStyle: standard_error

# bad

class C < Exception; end

# good

class C < StandardError; end

Constant Summary collapse

MSG =
'Inherit from `%<prefer>s` instead of `%<current>s`.'.freeze
PREFERRED_BASE_CLASS =
{
  runtime_error: 'RuntimeError',
  standard_error: 'StandardError'
}.freeze
ILLEGAL_CLASSES =
%w[
  Exception
  SystemStackError
  NoMemoryError
  SecurityError
  NotImplementedError
  LoadError
  SyntaxError
  ScriptError
  Interrupt
  SignalException
  SystemExit
].freeze

Constants included from Util

Util::ASGN_NODES, Util::CONDITIONAL_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::LOGICAL_OPERATOR_NODES, Util::MODIFIER_NODES, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods included from ConfigurableEnforcedStyle

#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AST::Sexp

#s

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, operator?, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens

Methods included from PathUtil

absolute?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

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

Instance Method Details

#autocorrect(node) ⇒ Object



58
59
60
61
62
# File 'lib/rubocop/cop/lint/inherit_exception.rb', line 58

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.expression, preferred_base_class)
  end
end

#on_class(node) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/rubocop/cop/lint/inherit_exception.rb', line 50

def on_class(node)
  _class, base_class, _body = *node

  return unless base_class && illegal_class_name?(base_class)

  add_offense(base_class)
end