rubocop-rspec 1.44.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -1
  3. data/README.md +5 -1
  4. data/config/default.yml +171 -81
  5. data/lib/rubocop-rspec.rb +8 -8
  6. data/lib/rubocop/cop/rspec/align_left_let_brace.rb +7 -3
  7. data/lib/rubocop/cop/rspec/align_right_let_brace.rb +7 -3
  8. data/lib/rubocop/cop/rspec/any_instance.rb +6 -10
  9. data/lib/rubocop/cop/rspec/around_block.rb +1 -1
  10. data/lib/rubocop/cop/rspec/base.rb +6 -55
  11. data/lib/rubocop/cop/rspec/be.rb +2 -2
  12. data/lib/rubocop/cop/rspec/be_eql.rb +1 -0
  13. data/lib/rubocop/cop/rspec/before_after_all.rb +5 -3
  14. data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +4 -2
  15. data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +3 -2
  16. data/lib/rubocop/cop/rspec/capybara/visibility_matcher.rb +2 -0
  17. data/lib/rubocop/cop/rspec/describe_class.rb +2 -2
  18. data/lib/rubocop/cop/rspec/describe_method.rb +2 -2
  19. data/lib/rubocop/cop/rspec/describe_symbol.rb +1 -0
  20. data/lib/rubocop/cop/rspec/described_class.rb +1 -2
  21. data/lib/rubocop/cop/rspec/described_class_module_wrapping.rb +1 -2
  22. data/lib/rubocop/cop/rspec/dialect.rb +1 -1
  23. data/lib/rubocop/cop/rspec/empty_example_group.rb +6 -45
  24. data/lib/rubocop/cop/rspec/empty_hook.rb +1 -1
  25. data/lib/rubocop/cop/rspec/empty_line_after_example.rb +1 -1
  26. data/lib/rubocop/cop/rspec/empty_line_after_example_group.rb +1 -1
  27. data/lib/rubocop/cop/rspec/empty_line_after_final_let.rb +1 -1
  28. data/lib/rubocop/cop/rspec/empty_line_after_hook.rb +1 -1
  29. data/lib/rubocop/cop/rspec/empty_line_after_subject.rb +2 -2
  30. data/lib/rubocop/cop/rspec/expect_actual.rb +2 -1
  31. data/lib/rubocop/cop/rspec/expect_change.rb +1 -0
  32. data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -1
  33. data/lib/rubocop/cop/rspec/expect_output.rb +1 -1
  34. data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +1 -0
  35. data/lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb +1 -0
  36. data/lib/rubocop/cop/rspec/file_path.rb +24 -17
  37. data/lib/rubocop/cop/rspec/focus.rb +43 -8
  38. data/lib/rubocop/cop/rspec/hook_argument.rb +2 -4
  39. data/lib/rubocop/cop/rspec/hooks_before_examples.rb +2 -2
  40. data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +1 -0
  41. data/lib/rubocop/cop/rspec/implicit_expect.rb +1 -1
  42. data/lib/rubocop/cop/rspec/implicit_subject.rb +1 -0
  43. data/lib/rubocop/cop/rspec/instance_spy.rb +1 -1
  44. data/lib/rubocop/cop/rspec/instance_variable.rb +1 -1
  45. data/lib/rubocop/cop/rspec/it_behaves_like.rb +2 -1
  46. data/lib/rubocop/cop/rspec/iterated_expectation.rb +1 -1
  47. data/lib/rubocop/cop/rspec/let_before_examples.rb +2 -2
  48. data/lib/rubocop/cop/rspec/let_setup.rb +7 -4
  49. data/lib/rubocop/cop/rspec/message_chain.rb +4 -10
  50. data/lib/rubocop/cop/rspec/message_expectation.rb +1 -0
  51. data/lib/rubocop/cop/rspec/message_spies.rb +3 -3
  52. data/lib/rubocop/cop/rspec/mixin/comments_help.rb +38 -0
  53. data/lib/rubocop/cop/rspec/mixin/empty_line_separation.rb +51 -0
  54. data/lib/rubocop/cop/rspec/mixin/final_end_location.rb +19 -0
  55. data/lib/rubocop/cop/rspec/mixin/top_level_group.rb +54 -0
  56. data/lib/rubocop/cop/rspec/mixin/variable.rb +20 -0
  57. data/lib/rubocop/cop/rspec/multiple_describes.rb +2 -3
  58. data/lib/rubocop/cop/rspec/multiple_expectations.rb +1 -1
  59. data/lib/rubocop/cop/rspec/multiple_memoized_helpers.rb +3 -1
  60. data/lib/rubocop/cop/rspec/named_subject.rb +8 -12
  61. data/lib/rubocop/cop/rspec/nested_groups.rb +1 -1
  62. data/lib/rubocop/cop/rspec/not_to_not.rb +1 -0
  63. data/lib/rubocop/cop/rspec/overwriting_setup.rb +2 -1
  64. data/lib/rubocop/cop/rspec/pending.rb +13 -5
  65. data/lib/rubocop/cop/rspec/predicate_matcher.rb +3 -3
  66. data/lib/rubocop/cop/rspec/rails/http_status.rb +1 -0
  67. data/lib/rubocop/cop/rspec/receive_counts.rb +2 -0
  68. data/lib/rubocop/cop/rspec/receive_never.rb +1 -0
  69. data/lib/rubocop/cop/rspec/repeated_include_example.rb +3 -2
  70. data/lib/rubocop/cop/rspec/return_from_stub.rb +1 -0
  71. data/lib/rubocop/cop/rspec/scattered_setup.rb +1 -1
  72. data/lib/rubocop/cop/rspec/shared_context.rb +18 -11
  73. data/lib/rubocop/cop/rspec/shared_examples.rb +3 -1
  74. data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +2 -1
  75. data/lib/rubocop/cop/rspec/stubbed_mock.rb +1 -1
  76. data/lib/rubocop/cop/rspec/subject_stub.rb +16 -6
  77. data/lib/rubocop/cop/rspec/unspecified_exception.rb +1 -0
  78. data/lib/rubocop/cop/rspec/variable_definition.rb +1 -1
  79. data/lib/rubocop/cop/rspec/variable_name.rb +1 -1
  80. data/lib/rubocop/cop/rspec/verified_doubles.rb +1 -0
  81. data/lib/rubocop/cop/rspec/void_expect.rb +1 -0
  82. data/lib/rubocop/cop/rspec_cops.rb +0 -1
  83. data/lib/rubocop/rspec/align_let_brace.rb +1 -1
  84. data/lib/rubocop/rspec/concept.rb +2 -2
  85. data/lib/rubocop/rspec/config_formatter.rb +5 -3
  86. data/lib/rubocop/rspec/corrector/move_node.rb +7 -10
  87. data/lib/rubocop/rspec/example_group.rb +15 -5
  88. data/lib/rubocop/rspec/hook.rb +1 -1
  89. data/lib/rubocop/rspec/inject.rb +4 -2
  90. data/lib/rubocop/rspec/language.rb +143 -109
  91. data/lib/rubocop/rspec/language/node_pattern.rb +7 -24
  92. data/lib/rubocop/rspec/node.rb +1 -1
  93. data/lib/rubocop/rspec/version.rb +1 -1
  94. metadata +12 -15
  95. data/lib/rubocop/cop/rspec/cop.rb +0 -10
  96. data/lib/rubocop/cop/rspec/invalid_predicate_matcher.rb +0 -41
  97. data/lib/rubocop/rspec.rb +0 -12
  98. data/lib/rubocop/rspec/empty_line_separation.rb +0 -48
  99. data/lib/rubocop/rspec/final_end_location.rb +0 -17
  100. data/lib/rubocop/rspec/top_level_describe.rb +0 -52
  101. data/lib/rubocop/rspec/top_level_group.rb +0 -57
  102. data/lib/rubocop/rspec/variable.rb +0 -16
data/lib/rubocop-rspec.rb CHANGED
@@ -5,26 +5,26 @@ require 'yaml'
5
5
 
6
6
  require 'rubocop'
7
7
 
8
- require_relative 'rubocop/rspec'
9
8
  require_relative 'rubocop/rspec/version'
10
9
  require_relative 'rubocop/rspec/inject'
11
10
  require_relative 'rubocop/rspec/node'
12
- require_relative 'rubocop/rspec/top_level_describe'
13
11
  require_relative 'rubocop/rspec/wording'
14
- require_relative 'rubocop/rspec/language'
15
12
  require_relative 'rubocop/rspec/language/node_pattern'
16
- require_relative 'rubocop/rspec/top_level_group'
13
+ require_relative 'rubocop/rspec/language'
14
+
15
+ require_relative 'rubocop/cop/rspec/mixin/top_level_group'
16
+ require_relative 'rubocop/cop/rspec/mixin/variable'
17
+ require_relative 'rubocop/cop/rspec/mixin/final_end_location'
18
+ require_relative 'rubocop/cop/rspec/mixin/comments_help'
19
+ require_relative 'rubocop/cop/rspec/mixin/empty_line_separation'
20
+
17
21
  require_relative 'rubocop/rspec/concept'
18
22
  require_relative 'rubocop/rspec/example_group'
19
23
  require_relative 'rubocop/rspec/example'
20
24
  require_relative 'rubocop/rspec/hook'
21
- require_relative 'rubocop/rspec/variable'
22
25
  require_relative 'rubocop/cop/rspec/base'
23
- require_relative 'rubocop/cop/rspec/cop'
24
26
  require_relative 'rubocop/rspec/align_let_brace'
25
27
  require_relative 'rubocop/rspec/factory_bot'
26
- require_relative 'rubocop/rspec/final_end_location'
27
- require_relative 'rubocop/rspec/empty_line_separation'
28
28
  require_relative 'rubocop/rspec/corrector/move_node'
29
29
 
30
30
  RuboCop::RSpec::Inject.defaults!
@@ -27,11 +27,9 @@ module RuboCop
27
27
  end
28
28
 
29
29
  def on_new_investigation
30
+ super
30
31
  return if processed_source.blank?
31
32
 
32
- token_aligner =
33
- RuboCop::RSpec::AlignLetBrace.new(processed_source.ast, :begin)
34
-
35
33
  token_aligner.offending_tokens.each do |let|
36
34
  add_offense(let.loc.begin) do |corrector|
37
35
  corrector.insert_before(
@@ -40,6 +38,12 @@ module RuboCop
40
38
  end
41
39
  end
42
40
  end
41
+
42
+ private
43
+
44
+ def token_aligner
45
+ RuboCop::RSpec::AlignLetBrace.new(processed_source.ast, :begin)
46
+ end
43
47
  end
44
48
  end
45
49
  end
@@ -27,11 +27,9 @@ module RuboCop
27
27
  end
28
28
 
29
29
  def on_new_investigation
30
+ super
30
31
  return if processed_source.blank?
31
32
 
32
- token_aligner =
33
- RuboCop::RSpec::AlignLetBrace.new(processed_source.ast, :end)
34
-
35
33
  token_aligner.offending_tokens.each do |let|
36
34
  add_offense(let.loc.end) do |corrector|
37
35
  corrector.insert_before(
@@ -40,6 +38,12 @@ module RuboCop
40
38
  end
41
39
  end
42
40
  end
41
+
42
+ private
43
+
44
+ def token_aligner
45
+ RuboCop::RSpec::AlignLetBrace.new(processed_source.ast, :end)
46
+ end
43
47
  end
44
48
  end
45
49
  end
@@ -24,18 +24,14 @@ module RuboCop
24
24
  # end
25
25
  class AnyInstance < Base
26
26
  MSG = 'Avoid stubbing using `%<method>s`.'
27
-
28
- def_node_matcher :disallowed_stub, <<-PATTERN
29
- (send _ ${:any_instance :allow_any_instance_of :expect_any_instance_of} ...)
30
- PATTERN
27
+ RESTRICT_ON_SEND = %i[
28
+ any_instance
29
+ allow_any_instance_of
30
+ expect_any_instance_of
31
+ ].freeze
31
32
 
32
33
  def on_send(node)
33
- disallowed_stub(node) do |method|
34
- add_offense(
35
- node,
36
- message: format(MSG, method: method)
37
- )
38
- end
34
+ add_offense(node, message: format(MSG, method: node.method_name))
39
35
  end
40
36
  end
41
37
  end
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # end
28
28
  class AroundBlock < Base
29
29
  MSG_NO_ARG = 'Test object should be passed to around block.'
30
- MSG_UNUSED_ARG = 'You should call `%<arg>s.call` '\
30
+ MSG_UNUSED_ARG = 'You should call `%<arg>s.call` ' \
31
31
  'or `%<arg>s.run`.'
32
32
 
33
33
  def_node_matcher :hook, <<-PATTERN
@@ -4,30 +4,9 @@ module RuboCop
4
4
  module Cop
5
5
  module RSpec
6
6
  # @abstract parent class to RSpec cops
7
- #
8
- # The criteria for whether rubocop-rspec analyzes a certain ruby file
9
- # is configured via `AllCops/RSpec`. For example, if you want to
10
- # customize your project to scan all files within a `test/` directory
11
- # then you could add this to your configuration:
12
- #
13
- # @example configuring analyzed paths
14
- # # .rubocop.yml
15
- # # AllCops:
16
- # # RSpec:
17
- # # Patterns:
18
- # # - '_test.rb$'
19
- # # - '(?:^|/)test/'
20
7
  class Base < ::RuboCop::Cop::Base
21
8
  include RuboCop::RSpec::Language
22
- include RuboCop::RSpec::Language::NodePattern
23
-
24
- DEFAULT_CONFIGURATION =
25
- RuboCop::RSpec::CONFIG.fetch('AllCops').fetch('RSpec')
26
-
27
- DEFAULT_PATTERN_RE = Regexp.union(
28
- DEFAULT_CONFIGURATION.fetch('Patterns')
29
- .map(&Regexp.public_method(:new))
30
- )
9
+ extend RuboCop::RSpec::Language::NodePattern
31
10
 
32
11
  exclude_from_registry
33
12
 
@@ -36,39 +15,11 @@ module RuboCop
36
15
  RuboCop::Cop::Base.inherited(subclass)
37
16
  end
38
17
 
39
- def relevant_file?(file)
40
- relevant_rubocop_rspec_file?(file) && super
41
- end
42
-
43
- private
44
-
45
- def relevant_rubocop_rspec_file?(file)
46
- rspec_pattern.match?(file)
47
- end
48
-
49
- def rspec_pattern
50
- if rspec_pattern_config?
51
- Regexp.union(rspec_pattern_config.map(&Regexp.public_method(:new)))
52
- else
53
- DEFAULT_PATTERN_RE
54
- end
55
- end
56
-
57
- def all_cops_config
58
- config
59
- .for_all_cops
60
- end
61
-
62
- def rspec_pattern_config?
63
- return unless all_cops_config.key?('RSpec')
64
-
65
- all_cops_config.fetch('RSpec').key?('Patterns')
66
- end
67
-
68
- def rspec_pattern_config
69
- all_cops_config
70
- .fetch('RSpec', DEFAULT_CONFIGURATION)
71
- .fetch('Patterns')
18
+ # Set the config for dynamic DSL configuration-aware helpers
19
+ # that have no other means of accessing the configuration.
20
+ def on_new_investigation
21
+ super
22
+ RuboCop::RSpec::Language.config = config['RSpec']['Language']
72
23
  end
73
24
  end
74
25
  end
@@ -20,10 +20,10 @@ module RuboCop
20
20
  # expect(foo).to be(true)
21
21
  #
22
22
  class Be < Base
23
- MSG = 'Don\'t use `be` without an argument.'
23
+ MSG = "Don't use `be` without an argument."
24
24
 
25
25
  def_node_matcher :be_without_args, <<-PATTERN
26
- (send _ #{Runners::ALL.node_pattern_union} $(send nil? :be))
26
+ (send _ #Runners.all $(send nil? :be))
27
27
  PATTERN
28
28
 
29
29
  def on_send(node)
@@ -39,6 +39,7 @@ module RuboCop
39
39
  extend AutoCorrector
40
40
 
41
41
  MSG = 'Prefer `be` over `eql`.'
42
+ RESTRICT_ON_SEND = %i[to].freeze
42
43
 
43
44
  def_node_matcher :eql_type_with_identity, <<-PATTERN
44
45
  (send _ :to $(send nil? :eql {true false int float sym nil_type?}))
@@ -24,11 +24,13 @@ module RuboCop
24
24
  # after(:each) { Widget.delete_all }
25
25
  # end
26
26
  class BeforeAfterAll < Base
27
- MSG = 'Beware of using `%<hook>s` as it may cause state to leak '\
28
- 'between tests. If you are using `rspec-rails`, and '\
29
- '`use_transactional_fixtures` is enabled, then records created '\
27
+ MSG = 'Beware of using `%<hook>s` as it may cause state to leak ' \
28
+ 'between tests. If you are using `rspec-rails`, and ' \
29
+ '`use_transactional_fixtures` is enabled, then records created ' \
30
30
  'in `%<hook>s` are not automatically rolled back.'
31
31
 
32
+ RESTRICT_ON_SEND = %i[before after].freeze
33
+
32
34
  def_node_matcher :before_or_after_all, <<-PATTERN
33
35
  $(send _ {:before :after} (sym {:all :context}))
34
36
  PATTERN
@@ -30,6 +30,8 @@ module RuboCop
30
30
  'Capybara feature specs - instead, use the ' \
31
31
  '`have_current_path` matcher on `page`'
32
32
 
33
+ RESTRICT_ON_SEND = %i[expect].freeze
34
+
33
35
  def_node_matcher :expectation_set_on_current_path, <<-PATTERN
34
36
  (send nil? :expect (send {(send nil? :page) nil?} :current_path))
35
37
  PATTERN
@@ -37,13 +39,13 @@ module RuboCop
37
39
  # Supported matchers: eq(...) / match(/regexp/) / match('regexp')
38
40
  def_node_matcher :as_is_matcher, <<-PATTERN
39
41
  (send
40
- #expectation_set_on_current_path $#{Runners::ALL.node_pattern_union}
42
+ #expectation_set_on_current_path $#Runners.all
41
43
  ${(send nil? :eq ...) (send nil? :match (regexp ...))})
42
44
  PATTERN
43
45
 
44
46
  def_node_matcher :regexp_str_matcher, <<-PATTERN
45
47
  (send
46
- #expectation_set_on_current_path $#{Runners::ALL.node_pattern_union}
48
+ #expectation_set_on_current_path $#Runners.all
47
49
  $(send nil? :match (str $_)))
48
50
  PATTERN
49
51
 
@@ -55,8 +55,9 @@ module RuboCop
55
55
  feature: :describe
56
56
  }.freeze
57
57
 
58
- def_node_matcher :capybara_speak,
59
- SelectorSet.new(MAP.keys).node_pattern_union
58
+ def_node_matcher :capybara_speak, <<-PATTERN
59
+ {#{MAP.keys.map(&:inspect).join(' ')}}
60
+ PATTERN
60
61
 
61
62
  def_node_matcher :spec?, <<-PATTERN
62
63
  (block
@@ -44,6 +44,8 @@ module RuboCop
44
44
  have_content
45
45
  ].freeze
46
46
 
47
+ RESTRICT_ON_SEND = CAPYBARA_MATCHER_METHODS
48
+
47
49
  def_node_matcher :visible_true?, <<~PATTERN
48
50
  (send nil? #capybara_matcher? ... (hash <$(pair (sym :visible) true) ...>))
49
51
  PATTERN
@@ -35,9 +35,9 @@ module RuboCop
35
35
  # describe "A feature example", type: :feature do
36
36
  # end
37
37
  class DescribeClass < Base
38
- include RuboCop::RSpec::TopLevelGroup
38
+ include TopLevelGroup
39
39
 
40
- MSG = 'The first argument to describe should be '\
40
+ MSG = 'The first argument to describe should be ' \
41
41
  'the class or module being tested.'
42
42
 
43
43
  def_node_matcher :example_group_with_ignored_metadata?, <<~PATTERN
@@ -17,9 +17,9 @@ module RuboCop
17
17
  # describe MyClass, '.my_class_method' do
18
18
  # end
19
19
  class DescribeMethod < Base
20
- include RuboCop::RSpec::TopLevelGroup
20
+ include TopLevelGroup
21
21
 
22
- MSG = 'The second argument to describe should be the method '\
22
+ MSG = 'The second argument to describe should be the method ' \
23
23
  "being tested. '#instance' or '.class'."
24
24
 
25
25
  def_node_matcher :second_argument, <<~PATTERN
@@ -19,6 +19,7 @@ module RuboCop
19
19
  # @see https://github.com/rspec/rspec-core/issues/1610
20
20
  class DescribeSymbol < Base
21
21
  MSG = 'Avoid describing symbols.'
22
+ RESTRICT_ON_SEND = %i[describe].freeze
22
23
 
23
24
  def_node_matcher :describe_symbol?, <<-PATTERN
24
25
  (send #rspec? :describe $sym ...)
@@ -65,8 +65,7 @@ module RuboCop
65
65
  (block (send (const nil? {:Class :Module :Struct}) :new ...) ...)
66
66
  PATTERN
67
67
 
68
- def_node_matcher :rspec_block?,
69
- RuboCop::RSpec::Language::ALL.block_pattern
68
+ def_node_matcher :rspec_block?, block_pattern('#ALL.all')
70
69
 
71
70
  def_node_matcher :scope_changing_syntax?, '{def class module}'
72
71
 
@@ -22,8 +22,7 @@ module RuboCop
22
22
  class DescribedClassModuleWrapping < Base
23
23
  MSG = 'Avoid opening modules and defining specs within them.'
24
24
 
25
- def_node_search :find_rspec_blocks,
26
- ExampleGroups::ALL.block_pattern
25
+ def_node_search :find_rspec_blocks, block_pattern('#ExampleGroups.all')
27
26
 
28
27
  def on_module(node)
29
28
  find_rspec_blocks(node) do
@@ -47,7 +47,7 @@ module RuboCop
47
47
 
48
48
  MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
49
49
 
50
- def_node_matcher :rspec_method?, ALL.send_pattern
50
+ def_node_matcher :rspec_method?, send_pattern('#ALL.all')
51
51
 
52
52
  def on_send(node)
53
53
  return unless rspec_method?(node)
@@ -5,8 +5,6 @@ module RuboCop
5
5
  module RSpec
6
6
  # Checks if an example group does not include any tests.
7
7
  #
8
- # This cop is configurable using the `CustomIncludeMethods` option
9
- #
10
8
  # @example usage
11
9
  #
12
10
  # # bad
@@ -37,31 +35,6 @@ module RuboCop
37
35
  # describe Bacon do
38
36
  # pending 'will add tests later'
39
37
  # end
40
- #
41
- # @example configuration
42
- #
43
- # # .rubocop.yml
44
- # # RSpec/EmptyExampleGroup:
45
- # # CustomIncludeMethods:
46
- # # - include_tests
47
- #
48
- # # spec_helper.rb
49
- # RSpec.configure do |config|
50
- # config.alias_it_behaves_like_to(:include_tests)
51
- # end
52
- #
53
- # # bacon_spec.rb
54
- # describe Bacon do
55
- # let(:bacon) { Bacon.new(chunkiness) }
56
- # let(:chunkiness) { false }
57
- #
58
- # context 'extra chunky' do # not flagged by rubocop
59
- # let(:chunkiness) { true }
60
- #
61
- # include_tests 'shared tests'
62
- # end
63
- # end
64
- #
65
38
  class EmptyExampleGroup < Base
66
39
  MSG = 'Empty example group detected.'
67
40
 
@@ -76,7 +49,7 @@ module RuboCop
76
49
  # @param node [RuboCop::AST::Node]
77
50
  # @yield [RuboCop::AST::Node] example group body
78
51
  def_node_matcher :example_group_body, <<~PATTERN
79
- (block #{ExampleGroups::ALL.send_pattern} args $_)
52
+ (block #{send_pattern('#ExampleGroups.all')} args $_)
80
53
  PATTERN
81
54
 
82
55
  # @!method example_or_group_or_include?(node)
@@ -95,12 +68,10 @@ module RuboCop
95
68
  # @return [Array<RuboCop::AST::Node>] matching nodes
96
69
  def_node_matcher :example_or_group_or_include?, <<~PATTERN
97
70
  {
98
- #{Examples::ALL.send_pattern}
99
- #{Examples::ALL.block_pattern}
100
- #{ExampleGroups::ALL.block_pattern}
101
- #{Includes::ALL.send_pattern}
102
- #{Includes::ALL.block_pattern}
103
- (send nil? #custom_include? ...)
71
+ #{block_pattern(
72
+ '{#Examples.all #ExampleGroups.all #Includes.all}'
73
+ )}
74
+ #{send_pattern('{#Examples.all #Includes.all}')}
104
75
  }
105
76
  PATTERN
106
77
 
@@ -120,7 +91,7 @@ module RuboCop
120
91
  # @param node [RuboCop::AST::Node]
121
92
  # @return [Array<RuboCop::AST::Node>] matching nodes
122
93
  def_node_matcher :examples_inside_block?, <<~PATTERN
123
- (block !#{Hooks::ALL.send_pattern} _ #examples?)
94
+ (block !#{send_pattern('#Hooks.all')} _ #examples?)
124
95
  PATTERN
125
96
 
126
97
  # @!method examples_directly_or_in_block?(node)
@@ -192,16 +163,6 @@ module RuboCop
192
163
  def examples_in_branches?(if_node)
193
164
  if_node.branches.any? { |branch| examples?(branch) }
194
165
  end
195
-
196
- def custom_include?(method_name)
197
- custom_include_methods.include?(method_name)
198
- end
199
-
200
- def custom_include_methods
201
- cop_config
202
- .fetch('CustomIncludeMethods', [])
203
- .map(&:to_sym)
204
- end
205
166
  end
206
167
  end
207
168
  end