class RuboCop::Cop::Style::MethodMissing
end
super
# …
def method_missing(name, *args)
end
# …
def respond_to_missing?(name, include_private)
#good
end
# …
def method_missing(name, *args)
#bad
@example
defining ‘respond_to_missing?` and falling back on `super`.
This cop checks for the presence of `method_missing` without also
def calls_super?(node)
def calls_super?(node) node.descendants.any?(&:zsuper_type?) end
def check(node)
def check(node) return if calls_super?(node) && implements_respond_to_missing?(node) add_offense(node) end
def implements_respond_to_missing?(node)
def implements_respond_to_missing?(node) node.parent.each_child_node(node.type).any? do |sibling| sibling.method?(:respond_to_missing?) end end
def message(node)
def message(node) instructions = [] unless implements_respond_to_missing?(node) instructions << 'define `respond_to_missing?`'.freeze end unless calls_super?(node) instructions << 'fall back on `super`'.freeze end format(MSG, instructions: instructions.join(' and ')) end
def on_def(node)
def on_def(node) return unless node.method?(:method_missing) check(node) end