class RuboCop::Cop::Style::MissingRespondToMissing

Checks for the presence of ‘method_missing` without also defining `respond_to_missing?`.

@example

# bad
def method_missing(name, *args)
  # ...
end

# good
def respond_to_missing?(name, include_private)
  # ...
end

def method_missing(name, *args)
  # ...
end

Constants

MSG

Public Instance Methods

on_def(node) click to toggle source
# File lib/rubocop/cop/style/missing_respond_to_missing.rb, line 27
def on_def(node)
  return unless node.method?(:method_missing)
  return if implements_respond_to_missing?(node)

  add_offense(node)
end
Also aliased as: on_defs
on_defs(node)
Alias for: on_def

Private Instance Methods

implements_respond_to_missing?(node) click to toggle source
# File lib/rubocop/cop/style/missing_respond_to_missing.rb, line 37
def implements_respond_to_missing?(node)
  return false unless (grand_parent = node.parent.parent)

  grand_parent.each_descendant(node.type) do |descendant|
    return true if descendant.method?(:respond_to_missing?)

    child = descendant.children.first
    return true if child.respond_to?(:method?) && child.method?(:respond_to_missing?)
  end

  false
end