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

C = Class.new(Exception)

# good

class C < RuntimeError; end

C = Class.new(RuntimeError)

EnforcedStyle: standard_error

# bad

class C < Exception; end

C = Class.new(Exception)

# good

class C < StandardError; end

C = Class.new(StandardError)

Constant Summary collapse

MSG =
'Inherit from `%<prefer>s` instead of `%<current>s`.'
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::LITERAL_REGEX

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_configured?, #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, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #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?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #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, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, 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



78
79
80
81
82
# File 'lib/rubocop/cop/lint/inherit_exception.rb', line 78

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

#on_class(node) ⇒ Object



64
65
66
67
68
69
# File 'lib/rubocop/cop/lint/inherit_exception.rb', line 64

def on_class(node)
  return unless node.parent_class &&
                illegal_class_name?(node.parent_class)

  add_offense(node.parent_class)
end

#on_send(node) ⇒ Object



71
72
73
74
75
76
# File 'lib/rubocop/cop/lint/inherit_exception.rb', line 71

def on_send(node)
  constant = class_new_call?(node)
  return unless constant && illegal_class_name?(constant)

  add_offense(constant)
end