module RuboCop::RSpec::TopLevelGroup

def on_new_investigation

def on_new_investigation
  super
  return unless root_node
  top_level_groups.each do |node|
    on_top_level_example_group(node) if example_group?(node)
    on_top_level_group(node)
  end
end

def on_top_level_example_group(_node); end

Dummy methods to be overridden in the consumer
def on_top_level_example_group(_node); end

def on_top_level_group(_node); end

def on_top_level_group(_node); end

def root_node

def root_node
  processed_source.ast
end

def top_level_group?(node)

def top_level_group?(node)
  top_level_groups.include?(node)
end

def top_level_groups

def top_level_groups
  @top_level_groups ||=
    top_level_nodes(root_node).select { |n| example_or_shared_group?(n) }
end

def top_level_nodes(node)

def top_level_nodes(node)
  if node.nil?
    []
  elsif node.begin_type?
    node.children
  elsif node.module_type? || node.class_type?
    top_level_nodes(node.body)
  else
    [node]
  end
end