module RuboCop::RSpec::TopLevelDescribe

Helper methods for top level describe cops

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 11
def on_send(node)
  return unless respond_to?(:on_top_level_describe)
  return unless top_level_describe?(node)

  _receiver, _method_name, *args = *node

  on_top_level_describe(node, args)
end

Private Instance Methods

describe_statement_children(node) click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 50
def describe_statement_children(node)
  node.each_child_node(:send).select do |element|
    element.children[1] == :describe
  end
end
root_node() click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 42
def root_node
  processed_source.ast
end
single_top_level_describe?() click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 46
def single_top_level_describe?
  top_level_nodes.one?
end
top_level_describe?(node) click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 22
def top_level_describe?(node)
  _receiver, method_name, *_args = *node
  return false unless method_name == :describe

  top_level_nodes.include?(node)
end
top_level_nodes() click to toggle source
# File lib/rubocop/rspec/top_level_describe.rb, line 29
def top_level_nodes
  nodes = describe_statement_children(root_node)
  # If we have no top level describe statements, we need to check any
  # blocks on the top level (e.g. after a require).
  if nodes.empty?
    nodes = root_node.each_child_node(:block).flat_map do |child|
      describe_statement_children(child)
    end
  end

  nodes
end