class RuboCop::Cop::Lint::InheritException
Looks for error classes inheriting from ‘Exception`. It is configurable to suggest using either `StandardError` (default) or `RuntimeError` instead.
@safety
This cop's autocorrection is unsafe because `rescue` that omit exception class handle `StandardError` and its subclasses, but not `Exception` and its subclasses.
@example EnforcedStyle: standard_error (default)
# bad class C < Exception; end C = Class.new(Exception) # good class C < StandardError; end C = Class.new(StandardError)
@example EnforcedStyle: runtime_error
# bad class C < Exception; end C = Class.new(Exception) # good class C < RuntimeError; end C = Class.new(RuntimeError)
Constants
- MSG
- PREFERRED_BASE_CLASS
- RESTRICT_ON_SEND
Public Instance Methods
on_class(node)
click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 59 def on_class(node) return unless node.parent_class && exception_class?(node.parent_class) message = message(node.parent_class) add_offense(node.parent_class, message: message) do |corrector| corrector.replace(node.parent_class, preferred_base_class) end end
on_send(node)
click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 69 def on_send(node) constant = class_new_call?(node) return unless constant && exception_class?(constant) message = message(constant) add_offense(constant, message: message) do |corrector| corrector.replace(constant, preferred_base_class) end end
Private Instance Methods
exception_class?(class_node)
click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 86 def exception_class?(class_node) class_node.const_name == 'Exception' end
message(node)
click to toggle source
# File lib/rubocop/cop/lint/inherit_exception.rb, line 82 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 90 def preferred_base_class PREFERRED_BASE_CLASS[style] end