summaryrefslogtreecommitdiff
path: root/rubocop/cop/rspec/misspelled_aggregate_failures.rb
diff options
context:
space:
mode:
Diffstat (limited to 'rubocop/cop/rspec/misspelled_aggregate_failures.rb')
-rw-r--r--rubocop/cop/rspec/misspelled_aggregate_failures.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/rubocop/cop/rspec/misspelled_aggregate_failures.rb b/rubocop/cop/rspec/misspelled_aggregate_failures.rb
new file mode 100644
index 00000000000..04eec515318
--- /dev/null
+++ b/rubocop/cop/rspec/misspelled_aggregate_failures.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'rubocop/cop/rspec/base'
+
+module RuboCop
+ module Cop
+ module RSpec
+ class MisspelledAggregateFailures < RuboCop::Cop::RSpec::Base
+ extend RuboCop::Cop::AutoCorrector
+
+ CORRECT_SPELLING = :aggregate_failures
+ MSG = "Use `#{CORRECT_SPELLING.inspect}` to aggregate failures.".freeze
+
+ # @!method aggregate_tag(node)
+ def_node_matcher :aggregate_tag, <<~PATTERN
+ (block
+ (send #rspec? {#ExampleGroups.all #Examples.all}
+ <$(sym /^aggregate[a-z]*_[a-z]+$/) ...>
+ )
+ ...
+ )
+ PATTERN
+
+ def on_block(node)
+ tag_node = aggregate_tag(node)
+ return if tag_node.nil? || tag_node.value == CORRECT_SPELLING
+
+ add_offense(tag_node) do |corrector|
+ corrector.replace(tag_node, CORRECT_SPELLING.inspect)
+ end
+ end
+ end
+ end
+ end
+end