class RuboCop::Cop::Performance::AncestorsInclude


A <= B
# good
A.ancestors.include?(B)
# bad
@example
e.g. the false positive was for ‘Nokogiri::XML::Node#ancestors`.
This cop is unsafe because it can’t tell whether the receiver is a class or an object.
@safety
Identifies usages of ‘ancestors.include?` and change them to use `<=` instead.

def on_send(node)

def on_send(node)
  return unless (subclass, superclass = ancestors_include_candidate?(node))
  return if subclass && !subclass.const_type?
  add_offense(range(node)) do |corrector|
    subclass_source = subclass ? subclass.source : 'self'
    corrector.replace(node, "#{subclass_source} <= #{superclass.source}")
  end
end

def range(node)

def range(node)
  location_of_ancestors = node.children[0].loc.selector.begin_pos
  end_location = node.loc.selector.end_pos
  range_between(location_of_ancestors, end_location)
end