lib/rubocop/cop/rspec/hooks_before_examples.rb in rubocop-rspec-1.41.0 vs lib/rubocop/cop/rspec/hooks_before_examples.rb in rubocop-rspec-1.42.0
- old
+ new
@@ -22,10 +22,12 @@
# it 'checks what foo does' do
# expect(foo).to be
# end
#
class HooksBeforeExamples < Cop
+ extend AutoCorrector
+
MSG = 'Move `%<hook>s` above the examples in the group.'
def_node_matcher :example_or_group?, <<-PATTERN
{
#{(Examples::ALL + ExampleGroups::ALL).block_pattern}
@@ -37,19 +39,10 @@
return unless example_group_with_body?(node)
check_hooks(node.body) if multiline_block?(node.body)
end
- def autocorrect(node)
- lambda do |corrector|
- first_example = find_first_example(node.parent)
- RuboCop::RSpec::Corrector::MoveNode.new(
- node, corrector, processed_source
- ).move_before(first_example)
- end
- end
-
private
def multiline_block?(block)
block.begin_type?
end
@@ -60,18 +53,24 @@
node.each_child_node do |child|
next if child.sibling_index < first_example.sibling_index
next unless hook?(child)
- add_offense(
- child,
- message: format(MSG, hook: child.method_name)
- )
+ msg = format(MSG, hook: child.method_name)
+ add_offense(child, message: msg) do |corrector|
+ autocorrect(corrector, child, first_example)
+ end
end
end
def find_first_example(node)
node.children.find { |sibling| example_or_group?(sibling) }
+ end
+
+ def autocorrect(corrector, node, first_example)
+ RuboCop::RSpec::Corrector::MoveNode.new(
+ node, corrector, processed_source
+ ).move_before(first_example)
end
end
end
end
end