diff options
Diffstat (limited to 'rubocop/cop/rspec/misspelled_aggregate_failures.rb')
-rw-r--r-- | rubocop/cop/rspec/misspelled_aggregate_failures.rb | 35 |
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 |