lib/rubocop/rspec/example_group.rb in rubocop-rspec-1.40.0 vs lib/rubocop/rspec/example_group.rb in rubocop-rspec-1.41.0

- old
+ new

@@ -12,75 +12,47 @@ # def_node_matcher :scope_change?, ( ExampleGroups::ALL + SharedGroups::ALL + Includes::ALL ).block_pattern + def lets + find_all_in_scope(node, :let?) + end + def subjects - subjects_in_scope(node) + find_all_in_scope(node, :subject?) end def examples - examples_in_scope(node).map(&Example.public_method(:new)) + find_all_in_scope(node, :example?).map(&Example.public_method(:new)) end def hooks - hooks_in_scope(node).map(&Hook.public_method(:new)) + find_all_in_scope(node, :hook?).map(&Hook.public_method(:new)) end private - def subjects_in_scope(node) + # Recursively search for predicate within the current scope + # + # Searches node and halts when a scope change is detected + # + # @param node [RuboCop::Node] node to recursively search + # + # @return [Array<RuboCop::Node>] discovered nodes + def find_all_in_scope(node, predicate) node.each_child_node.flat_map do |child| - find_subjects(child) + find_all(child, predicate) end end - def find_subjects(node) - return [] if scope_change?(node) - - if subject?(node) + def find_all(node, predicate) + if public_send(predicate, node) [node] + elsif scope_change?(node) || example?(node) + [] else - subjects_in_scope(node) - end - end - - def hooks_in_scope(node) - node.each_child_node.flat_map do |child| - find_hooks(child) - end - end - - def find_hooks(node) - return [] if scope_change?(node) || example?(node) - - if hook?(node) - [node] - else - hooks_in_scope(node) - end - end - - def examples_in_scope(node, &blk) - node.each_child_node.flat_map do |child| - find_examples(child, &blk) - end - end - - # Recursively search for examples within the current scope - # - # Searches node for examples and halts when a scope change is detected - # - # @param node [RuboCop::Node] node to recursively search for examples - # - # @return [Array<RuboCop::Node>] discovered example nodes - def find_examples(node) - return [] if scope_change?(node) - - if example?(node) - [node] - else - examples_in_scope(node) + find_all_in_scope(node, predicate) end end end end end