class RuboCop::Cop::Lint::InheritException

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.

@example EnforcedStyle: runtime_error (default)

# bad

class C < Exception; end

C = Class.new(Exception)

# good

class C < RuntimeError; end

C = Class.new(RuntimeError)

@example EnforcedStyle: standard_error

# bad

class C < Exception; end

C = Class.new(Exception)

# good

class C < StandardError; end

C = Class.new(StandardError)

Constants

ILLEGAL_CLASSES
MSG
PREFERRED_BASE_CLASS

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 78
def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.expression, preferred_base_class)
  end
end
on_class(node) click to toggle source
# 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) click to toggle source
# 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

Private Instance Methods

illegal_class_name?(class_node) click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 90
def illegal_class_name?(class_node)
  ILLEGAL_CLASSES.include?(class_node.const_name)
end
message(node) click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 86
def message(node)
  format(MSG, prefer: preferred_base_class, current: node.const_name)
end
preferred_base_class() click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 94
def preferred_base_class
  PREFERRED_BASE_CLASS[style]
end