From b08c95bd8886ff128a20fa3ba621f0a833a613dd Mon Sep 17 00:00:00 2001 From: Phil Pirozhkov Date: Thu, 23 Jul 2020 11:19:22 +0300 Subject: [PATCH] Retire TopLevelDescribe Why? - it was slow https://github.com/rubocop-hq/rubocop-rspec/pull/925#discussion_r436988718 - it ignored non-describe top-level example groups https://github.com/rubocop-hq/rubocop-rspec/pull/925#issuecomment-641140259 `TopLevelGroup` is a modern replacement for `TopLevelDescribe`. Examples how to migrate cops from TopLevelDescribe to TopLevelGroup: - https://github.com/rubocop-hq/rubocop-rspec/pull/932 - https://github.com/rubocop-hq/rubocop-rspec/pull/977 --- lib/rubocop-rspec.rb | 1 - lib/rubocop/rspec/top_level_describe.rb | 52 ------------------------- 2 files changed, 53 deletions(-) delete mode 100644 lib/rubocop/rspec/top_level_describe.rb diff --git a/lib/rubocop-rspec.rb b/lib/rubocop-rspec.rb index 006e39ee3..60ee9380f 100644 --- a/lib/rubocop-rspec.rb +++ b/lib/rubocop-rspec.rb @@ -9,7 +9,6 @@ require_relative 'rubocop/rspec/version' require_relative 'rubocop/rspec/inject' require_relative 'rubocop/rspec/node' -require_relative 'rubocop/rspec/top_level_describe' require_relative 'rubocop/rspec/wording' require_relative 'rubocop/rspec/language' require_relative 'rubocop/rspec/language/node_pattern' diff --git a/lib/rubocop/rspec/top_level_describe.rb b/lib/rubocop/rspec/top_level_describe.rb deleted file mode 100644 index d637d6399..000000000 --- a/lib/rubocop/rspec/top_level_describe.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module RSpec - # Helper methods for top level describe cops - module TopLevelDescribe - extend NodePattern::Macros - - def on_send(node) - return unless respond_to?(:on_top_level_describe) - return unless top_level_describe?(node) - - on_top_level_describe(node, node.arguments) - end - - private - - def top_level_describe?(node) - return false unless node.method?(:describe) - - top_level_nodes.include?(node) - end - - 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 - - def root_node - processed_source.ast - end - - def single_top_level_describe? - top_level_nodes.one? - end - - def describe_statement_children(node) - node.each_child_node(:send).select do |element| - element.method?(:describe) - end - end - end - end -end