rubocop-rspec 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +2 -2
  4. data/config/default.yml +2 -0
  5. data/lib/rubocop/cop/rspec/around_block.rb +2 -0
  6. data/lib/rubocop/cop/rspec/be.rb +1 -0
  7. data/lib/rubocop/cop/rspec/be_eql.rb +1 -0
  8. data/lib/rubocop/cop/rspec/before_after_all.rb +1 -0
  9. data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +3 -0
  10. data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +3 -0
  11. data/lib/rubocop/cop/rspec/capybara/visibility_matcher.rb +2 -0
  12. data/lib/rubocop/cop/rspec/context_method.rb +1 -0
  13. data/lib/rubocop/cop/rspec/context_wording.rb +7 -1
  14. data/lib/rubocop/cop/rspec/describe_class.rb +3 -0
  15. data/lib/rubocop/cop/rspec/describe_method.rb +1 -0
  16. data/lib/rubocop/cop/rspec/describe_symbol.rb +1 -0
  17. data/lib/rubocop/cop/rspec/described_class.rb +5 -0
  18. data/lib/rubocop/cop/rspec/described_class_module_wrapping.rb +2 -1
  19. data/lib/rubocop/cop/rspec/dialect.rb +1 -0
  20. data/lib/rubocop/cop/rspec/empty_hook.rb +1 -0
  21. data/lib/rubocop/cop/rspec/example_length.rb +26 -12
  22. data/lib/rubocop/cop/rspec/example_without_description.rb +1 -0
  23. data/lib/rubocop/cop/rspec/example_wording.rb +1 -0
  24. data/lib/rubocop/cop/rspec/expect_actual.rb +1 -0
  25. data/lib/rubocop/cop/rspec/expect_change.rb +2 -0
  26. data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -0
  27. data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +3 -0
  28. data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +3 -0
  29. data/lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb +1 -0
  30. data/lib/rubocop/cop/rspec/file_path.rb +2 -0
  31. data/lib/rubocop/cop/rspec/focus.rb +3 -0
  32. data/lib/rubocop/cop/rspec/hook_argument.rb +2 -0
  33. data/lib/rubocop/cop/rspec/hooks_before_examples.rb +1 -0
  34. data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +3 -0
  35. data/lib/rubocop/cop/rspec/implicit_expect.rb +1 -0
  36. data/lib/rubocop/cop/rspec/implicit_subject.rb +1 -0
  37. data/lib/rubocop/cop/rspec/instance_spy.rb +2 -0
  38. data/lib/rubocop/cop/rspec/instance_variable.rb +4 -0
  39. data/lib/rubocop/cop/rspec/it_behaves_like.rb +1 -0
  40. data/lib/rubocop/cop/rspec/iterated_expectation.rb +2 -0
  41. data/lib/rubocop/cop/rspec/let_before_examples.rb +1 -0
  42. data/lib/rubocop/cop/rspec/let_setup.rb +3 -0
  43. data/lib/rubocop/cop/rspec/message_expectation.rb +2 -0
  44. data/lib/rubocop/cop/rspec/message_spies.rb +2 -0
  45. data/lib/rubocop/cop/rspec/mixin/variable.rb +1 -0
  46. data/lib/rubocop/cop/rspec/multiple_expectations.rb +3 -0
  47. data/lib/rubocop/cop/rspec/named_subject.rb +3 -0
  48. data/lib/rubocop/cop/rspec/not_to_not.rb +1 -0
  49. data/lib/rubocop/cop/rspec/overwriting_setup.rb +2 -0
  50. data/lib/rubocop/cop/rspec/pending.rb +4 -0
  51. data/lib/rubocop/cop/rspec/predicate_matcher.rb +5 -0
  52. data/lib/rubocop/cop/rspec/rails/http_status.rb +1 -0
  53. data/lib/rubocop/cop/rspec/receive_counts.rb +2 -0
  54. data/lib/rubocop/cop/rspec/receive_never.rb +1 -0
  55. data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +8 -1
  56. data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +4 -0
  57. data/lib/rubocop/cop/rspec/repeated_include_example.rb +3 -0
  58. data/lib/rubocop/cop/rspec/return_from_stub.rb +5 -0
  59. data/lib/rubocop/cop/rspec/shared_context.rb +4 -0
  60. data/lib/rubocop/cop/rspec/shared_examples.rb +1 -0
  61. data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +2 -0
  62. data/lib/rubocop/cop/rspec/stubbed_mock.rb +1 -0
  63. data/lib/rubocop/cop/rspec/subject_stub.rb +1 -0
  64. data/lib/rubocop/cop/rspec/unspecified_exception.rb +1 -0
  65. data/lib/rubocop/cop/rspec/verified_doubles.rb +1 -0
  66. data/lib/rubocop/cop/rspec/void_expect.rb +2 -0
  67. data/lib/rubocop/cop/rspec/yield.rb +3 -0
  68. data/lib/rubocop/rspec/example.rb +5 -0
  69. data/lib/rubocop/rspec/hook.rb +1 -0
  70. data/lib/rubocop/rspec/language.rb +10 -0
  71. data/lib/rubocop/rspec/version.rb +1 -1
  72. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1531e973244c7aac66856335d340dee502696e988f9816bf74e7f5555d80d90
4
- data.tar.gz: b634d15c53e126f497928eca6adfa6fae08b095ccb1a93f3d906826bca56efd4
3
+ metadata.gz: 4a953b5fa50cd545314cbe25e453b476b670cd2a4eb2d60c75109354ed7c333c
4
+ data.tar.gz: be5782eb1c0f8e4ca86b28ed39fba908719afe73dd544a161885719485853a89
5
5
  SHA512:
6
- metadata.gz: e91e8656f9f82f02fa041d5795d01eba023460aad4e3c06b55167b3f92fc0d22324250e1d116eb63c3b60e915240347f0a36cbe14c8b3752f7c6a63ea9949bd4
7
- data.tar.gz: 8c470782145e23962f3653beb13b4543d461a3de9bbea201d5fb0c66fc8bfebb5695afad7bc545b37dba664362dee8edb0f579441f0bafcd963ab86f503b0415
6
+ metadata.gz: e859b8c055f4502d3156595c8293decfe10883a6bea0f61a21558b9acc771b1231699439611a3da3ccb0841495ad7c1a5af3ec1c6d3e948fbb29b70a0b77289d
7
+ data.tar.gz: a817dcdbcd1850d4888f4d5fc58837a1c8c59fa754f10dff0aa3eebf24013e88230d84719592115b3339551ac2c932240d01bac1b8a5094982943f1a9e960908
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Master (Unreleased)
4
4
 
5
+ ## 2.3.0 (2021-04-28)
6
+
7
+ * Allow `RSpec/ContextWording` to accept multi-word prefixes. ([@hosamaly][])
8
+ * Drop support for ruby 2.4. ([@bquorning][])
9
+ * Add `CountAsOne` configuration option to `RSpec/ExampleLength`. ([@stephannv][])
10
+ * Fix a false positive for `RSpec/RepeatedExampleGroupBody` when `pending` or `skip` have argument(s). ([@Tietew][])
11
+
5
12
  ## 2.2.0 (2021-02-02)
6
13
 
7
14
  * Fix `HooksBeforeExamples`, `LeadingSubject`, `LetBeforeExamples` and `ScatteredLet` autocorrection to take into account inline comments and comments immediately before the moved node. ([@Darhazer][])
@@ -603,3 +610,6 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
603
610
  [@sl4vr]: https://github.com/sl4vr
604
611
  [@ahukkanen]: https://github.com/ahukkanen
605
612
  [@dvandersluis]: https://github.com/dvandersluis
613
+ [@hosamaly]: https://github.com/hosamaly
614
+ [@stephannv]: https://github.com/stephannv
615
+ [@Tietew]: https://github.com/Tietew
data/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  [![Join the chat at https://gitter.im/rubocop-rspec/Lobby](https://badges.gitter.im/rubocop-rspec/Lobby.svg)](https://gitter.im/rubocop-rspec/Lobby)
4
4
  [![Gem Version](https://badge.fury.io/rb/rubocop-rspec.svg)](https://rubygems.org/gems/rubocop-rspec)
5
- [![CircleCI](https://circleci.com/gh/rubocop-hq/rubocop-rspec.svg?style=svg)](https://circleci.com/gh/rubocop-hq/rubocop-rspec)
5
+ [![CircleCI](https://circleci.com/gh/rubocop/rubocop-rspec.svg?style=svg)](https://circleci.com/gh/rubocop/rubocop-rspec)
6
6
  [![Test Coverage](https://api.codeclimate.com/v1/badges/8ffaabf633c968c22bdd/test_coverage)](https://codeclimate.com/github/rubocop-hq/rubocop-rspec/test_coverage)
7
7
  [![Maintainability](https://api.codeclimate.com/v1/badges/8ffaabf633c968c22bdd/maintainability)](https://codeclimate.com/github/rubocop-hq/rubocop-rspec/maintainability)
8
8
 
9
9
  RSpec-specific analysis for your projects, as an extension to
10
- [RuboCop](https://github.com/rubocop-hq/rubocop).
10
+ [RuboCop](https://github.com/rubocop/rubocop).
11
11
 
12
12
  ## Installation
13
13
 
data/config/default.yml CHANGED
@@ -253,7 +253,9 @@ RSpec/ExampleLength:
253
253
  Description: Checks for long examples.
254
254
  Enabled: true
255
255
  Max: 5
256
+ CountAsOne: []
256
257
  VersionAdded: '1.5'
258
+ VersionChanged: '2.3'
257
259
  StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ExampleLength
258
260
 
259
261
  RSpec/ExampleWithoutDescription:
@@ -30,10 +30,12 @@ module RuboCop
30
30
  MSG_UNUSED_ARG = 'You should call `%<arg>s.call` ' \
31
31
  'or `%<arg>s.run`.'
32
32
 
33
+ # @!method hook(node)
33
34
  def_node_matcher :hook, <<-PATTERN
34
35
  (block (send nil? :around sym ?) (args $...) ...)
35
36
  PATTERN
36
37
 
38
+ # @!method find_arg_usage(node)
37
39
  def_node_search :find_arg_usage, <<-PATTERN
38
40
  {(send $... {:call :run}) (send _ _ $...) (yield $...) (block-pass $...)}
39
41
  PATTERN
@@ -22,6 +22,7 @@ module RuboCop
22
22
  class Be < Base
23
23
  MSG = "Don't use `be` without an argument."
24
24
 
25
+ # @!method be_without_args(node)
25
26
  def_node_matcher :be_without_args, <<-PATTERN
26
27
  (send _ #Runners.all $(send nil? :be))
27
28
  PATTERN
@@ -41,6 +41,7 @@ module RuboCop
41
41
  MSG = 'Prefer `be` over `eql`.'
42
42
  RESTRICT_ON_SEND = %i[to].freeze
43
43
 
44
+ # @!method eql_type_with_identity(node)
44
45
  def_node_matcher :eql_type_with_identity, <<-PATTERN
45
46
  (send _ :to $(send nil? :eql {true false int float sym nil_type?}))
46
47
  PATTERN
@@ -31,6 +31,7 @@ module RuboCop
31
31
 
32
32
  RESTRICT_ON_SEND = %i[before after].freeze
33
33
 
34
+ # @!method before_or_after_all(node)
34
35
  def_node_matcher :before_or_after_all, <<-PATTERN
35
36
  $(send _ {:before :after} (sym {:all :context}))
36
37
  PATTERN
@@ -32,17 +32,20 @@ module RuboCop
32
32
 
33
33
  RESTRICT_ON_SEND = %i[expect].freeze
34
34
 
35
+ # @!method expectation_set_on_current_path(node)
35
36
  def_node_matcher :expectation_set_on_current_path, <<-PATTERN
36
37
  (send nil? :expect (send {(send nil? :page) nil?} :current_path))
37
38
  PATTERN
38
39
 
39
40
  # Supported matchers: eq(...) / match(/regexp/) / match('regexp')
41
+ # @!method as_is_matcher(node)
40
42
  def_node_matcher :as_is_matcher, <<-PATTERN
41
43
  (send
42
44
  #expectation_set_on_current_path $#Runners.all
43
45
  ${(send nil? :eq ...) (send nil? :match (regexp ...))})
44
46
  PATTERN
45
47
 
48
+ # @!method regexp_str_matcher(node)
46
49
  def_node_matcher :regexp_str_matcher, <<-PATTERN
47
50
  (send
48
51
  #expectation_set_on_current_path $#Runners.all
@@ -55,16 +55,19 @@ module RuboCop
55
55
  feature: :describe
56
56
  }.freeze
57
57
 
58
+ # @!method capybara_speak(node)
58
59
  def_node_matcher :capybara_speak, <<-PATTERN
59
60
  {#{MAP.keys.map(&:inspect).join(' ')}}
60
61
  PATTERN
61
62
 
63
+ # @!method spec?(node)
62
64
  def_node_matcher :spec?, <<-PATTERN
63
65
  (block
64
66
  (send #rspec? {:describe :feature} ...)
65
67
  ...)
66
68
  PATTERN
67
69
 
70
+ # @!method feature_method(node)
68
71
  def_node_matcher :feature_method, <<-PATTERN
69
72
  (block
70
73
  $(send #rspec? $#capybara_speak ...)
@@ -46,10 +46,12 @@ module RuboCop
46
46
 
47
47
  RESTRICT_ON_SEND = CAPYBARA_MATCHER_METHODS
48
48
 
49
+ # @!method visible_true?(node)
49
50
  def_node_matcher :visible_true?, <<~PATTERN
50
51
  (send nil? #capybara_matcher? ... (hash <$(pair (sym :visible) true) ...>))
51
52
  PATTERN
52
53
 
54
+ # @!method visible_false?(node)
53
55
  def_node_matcher :visible_false?, <<~PATTERN
54
56
  (send nil? #capybara_matcher? ... (hash <$(pair (sym :visible) false) ...>))
55
57
  PATTERN
@@ -28,6 +28,7 @@ module RuboCop
28
28
 
29
29
  MSG = 'Use `describe` for testing methods.'
30
30
 
31
+ # @!method context_method(node)
31
32
  def_node_matcher :context_method, <<-PATTERN
32
33
  (block (send #rspec? :context $(str #method_name?) ...) ...)
33
34
  PATTERN
@@ -8,6 +8,7 @@ module RuboCop
8
8
  # The default list of prefixes is minimal. Users are encouraged to tailor
9
9
  # the configuration to meet project needs. Other acceptable prefixes may
10
10
  # include `if`, `unless`, `for`, `before`, `after`, or `during`.
11
+ # They may consist of multiple words if desired.
11
12
  #
12
13
  # @see https://rspec.rubystyle.guide/#context-descriptions
13
14
  # @see http://www.betterspecs.org/#contexts
@@ -37,6 +38,7 @@ module RuboCop
37
38
  class ContextWording < Base
38
39
  MSG = 'Start context description with %<prefixes>s.'
39
40
 
41
+ # @!method context_wording(node)
40
42
  def_node_matcher :context_wording, <<-PATTERN
41
43
  (block (send #rspec? { :context :shared_context } $(str #bad_prefix?) ...) ...)
42
44
  PATTERN
@@ -51,7 +53,7 @@ module RuboCop
51
53
  private
52
54
 
53
55
  def bad_prefix?(description)
54
- !prefixes.include?(description.split(/\b/).first)
56
+ !prefix_regex.match?(description)
55
57
  end
56
58
 
57
59
  def joined_prefixes
@@ -65,6 +67,10 @@ module RuboCop
65
67
  def prefixes
66
68
  cop_config['Prefixes'] || []
67
69
  end
70
+
71
+ def prefix_regex
72
+ /^#{Regexp.union(prefixes)}\b/
73
+ end
68
74
  end
69
75
  end
70
76
  end
@@ -40,14 +40,17 @@ module RuboCop
40
40
  MSG = 'The first argument to describe should be ' \
41
41
  'the class or module being tested.'
42
42
 
43
+ # @!method example_group_with_ignored_metadata?(node)
43
44
  def_node_matcher :example_group_with_ignored_metadata?, <<~PATTERN
44
45
  (send #rspec? :describe ... (hash <#ignored_metadata? ...>))
45
46
  PATTERN
46
47
 
48
+ # @!method not_a_const_described(node)
47
49
  def_node_matcher :not_a_const_described, <<~PATTERN
48
50
  (send #rspec? :describe $[!const !#string_constant?] ...)
49
51
  PATTERN
50
52
 
53
+ # @!method sym_pair(node)
51
54
  def_node_matcher :sym_pair, <<~PATTERN
52
55
  (pair $sym $sym)
53
56
  PATTERN
@@ -22,6 +22,7 @@ module RuboCop
22
22
  MSG = 'The second argument to describe should be the method ' \
23
23
  "being tested. '#instance' or '.class'."
24
24
 
25
+ # @!method second_argument(node)
25
26
  def_node_matcher :second_argument, <<~PATTERN
26
27
  (block
27
28
  (send #rspec? :describe _first_argument $(str _) ...) ...
@@ -21,6 +21,7 @@ module RuboCop
21
21
  MSG = 'Avoid describing symbols.'
22
22
  RESTRICT_ON_SEND = %i[describe].freeze
23
23
 
24
+ # @!method describe_symbol?(node)
24
25
  def_node_matcher :describe_symbol?, <<-PATTERN
25
26
  (send #rspec? :describe $sym ...)
26
27
  PATTERN
@@ -61,18 +61,23 @@ module RuboCop
61
61
  DESCRIBED_CLASS = 'described_class'
62
62
  MSG = 'Use `%<replacement>s` instead of `%<src>s`.'
63
63
 
64
+ # @!method common_instance_exec_closure?(node)
64
65
  def_node_matcher :common_instance_exec_closure?, <<-PATTERN
65
66
  (block (send (const nil? {:Class :Module :Struct}) :new ...) ...)
66
67
  PATTERN
67
68
 
69
+ # @!method rspec_block?(node)
68
70
  def_node_matcher :rspec_block?, block_pattern('#ALL.all')
69
71
 
72
+ # @!method scope_changing_syntax?(node)
70
73
  def_node_matcher :scope_changing_syntax?, '{def class module}'
71
74
 
75
+ # @!method described_constant(node)
72
76
  def_node_matcher :described_constant, <<-PATTERN
73
77
  (block (send _ :describe $(const ...) ...) (args) $_)
74
78
  PATTERN
75
79
 
80
+ # @!method contains_described_class?(node)
76
81
  def_node_search :contains_described_class?, <<-PATTERN
77
82
  (send nil? :described_class)
78
83
  PATTERN
@@ -18,10 +18,11 @@ module RuboCop
18
18
  # # ...
19
19
  # end
20
20
  #
21
- # @see https://github.com/rubocop-hq/rubocop-rspec/issues/735
21
+ # @see https://github.com/rubocop/rubocop-rspec/issues/735
22
22
  class DescribedClassModuleWrapping < Base
23
23
  MSG = 'Avoid opening modules and defining specs within them.'
24
24
 
25
+ # @!method find_rspec_blocks(node)
25
26
  def_node_search :find_rspec_blocks, block_pattern('#ExampleGroups.all')
26
27
 
27
28
  def on_module(node)
@@ -47,6 +47,7 @@ module RuboCop
47
47
 
48
48
  MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
49
49
 
50
+ # @!method rspec_method?(node)
50
51
  def_node_matcher :rspec_method?, send_pattern('#ALL.all')
51
52
 
52
53
  def on_send(node)
@@ -28,6 +28,7 @@ module RuboCop
28
28
 
29
29
  MSG = 'Empty hook detected.'
30
30
 
31
+ # @!method empty_hook?(node)
31
32
  def_node_matcher :empty_hook?, <<~PATTERN
32
33
  (block $#{send_pattern('#Hooks.all')} _ nil?)
33
34
  PATTERN
@@ -25,29 +25,43 @@ module RuboCop
25
25
  # result = service.call
26
26
  # expect(result).to be(true)
27
27
  # end
28
+ #
29
+ # You can set literals you want to fold with `CountAsOne`.
30
+ # Available are: 'array', 'hash', and 'heredoc'. Each literal
31
+ # will be counted as one line regardless of its actual size.
32
+ #
33
+ # @example CountAsOne: ['array', 'heredoc']
34
+ #
35
+ # it do
36
+ # array = [ # +1
37
+ # 1,
38
+ # 2
39
+ # ]
40
+ #
41
+ # hash = { # +3
42
+ # key: 'value'
43
+ # }
44
+ #
45
+ # msg = <<~HEREDOC # +1
46
+ # Heredoc
47
+ # content.
48
+ # HEREDOC
49
+ # end # 5 points
28
50
  class ExampleLength < Base
29
51
  include CodeLength
30
52
 
31
- MSG = 'Example has too many lines [%<total>d/%<max>d].'
53
+ LABEL = 'Example'
32
54
 
33
55
  def on_block(node)
34
56
  return unless example?(node)
35
57
 
36
- length = code_length(node)
37
-
38
- return unless length > max_length
39
-
40
- add_offense(node, message: message(length))
58
+ check_code_length(node)
41
59
  end
42
60
 
43
61
  private
44
62
 
45
- def code_length(node)
46
- node.source.lines[1..-2].count { |line| !irrelevant_line(line) }
47
- end
48
-
49
- def message(length)
50
- format(MSG, total: length, max: max_length)
63
+ def cop_label
64
+ LABEL
51
65
  end
52
66
  end
53
67
  end
@@ -54,6 +54,7 @@ module RuboCop
54
54
  'have auto-generated description.'
55
55
  MSG_ADD_DESCRIPTION = 'Add a description.'
56
56
 
57
+ # @!method example_description(node)
57
58
  def_node_matcher :example_description, '(send nil? _ $(str $_))'
58
59
 
59
60
  def on_block(node)
@@ -38,6 +38,7 @@ module RuboCop
38
38
  SHOULD_PREFIX = /\Ashould(?:n't)?\b/i.freeze
39
39
  IT_PREFIX = /\Ait /i.freeze
40
40
 
41
+ # @!method it_description(node)
41
42
  def_node_matcher :it_description, <<-PATTERN
42
43
  (block (send _ :it ${
43
44
  (str $_)
@@ -45,6 +45,7 @@ module RuboCop
45
45
 
46
46
  SUPPORTED_MATCHERS = %i[eq eql equal be].freeze
47
47
 
48
+ # @!method expect_literal(node)
48
49
  def_node_matcher :expect_literal, <<~PATTERN
49
50
  (send
50
51
  (send nil? :expect $#literal?)
@@ -37,10 +37,12 @@ module RuboCop
37
37
  MSG_CALL = 'Prefer `change { %<obj>s.%<attr>s }`.'
38
38
  RESTRICT_ON_SEND = %i[change].freeze
39
39
 
40
+ # @!method expect_change_with_arguments(node)
40
41
  def_node_matcher :expect_change_with_arguments, <<-PATTERN
41
42
  (send nil? :change ({const send} nil? $_) (sym $_))
42
43
  PATTERN
43
44
 
45
+ # @!method expect_change_with_block(node)
44
46
  def_node_matcher :expect_change_with_block, <<-PATTERN
45
47
  (block
46
48
  (send nil? :change)
@@ -23,6 +23,7 @@ module RuboCop
23
23
  class ExpectInHook < Base
24
24
  MSG = 'Do not use `%<expect>s` in `%<hook>s` hook'
25
25
 
26
+ # @!method expectation(node)
26
27
  def_node_search :expectation, send_pattern('#Expectations.all')
27
28
 
28
29
  def on_block(node)
@@ -29,10 +29,12 @@ module RuboCop
29
29
 
30
30
  MSG = 'Use a block to declare attribute values.'
31
31
 
32
+ # @!method value_matcher(node)
32
33
  def_node_matcher :value_matcher, <<-PATTERN
33
34
  (send _ !#reserved_method? $...)
34
35
  PATTERN
35
36
 
37
+ # @!method factory_attributes(node)
36
38
  def_node_matcher :factory_attributes, <<-PATTERN
37
39
  (block (send _ #attribute_defining_method? ...) _ { (begin $...) $(send ...) } )
38
40
  PATTERN
@@ -79,6 +81,7 @@ module RuboCop
79
81
  value_matcher(attribute).to_a.all?(&:block_pass_type?)
80
82
  end
81
83
 
84
+ # @!method association?(node)
82
85
  def_node_matcher :association?, '(hash <(pair (sym :factory) _) ...>)'
83
86
 
84
87
  def autocorrect_replacing_parens(corrector, node)
@@ -32,6 +32,7 @@ module RuboCop
32
32
  MSG_N_TIMES = 'Prefer %<number>s.times.'
33
33
  RESTRICT_ON_SEND = %i[create_list].freeze
34
34
 
35
+ # @!method n_times_block_without_arg?(node)
35
36
  def_node_matcher :n_times_block_without_arg?, <<-PATTERN
36
37
  (block
37
38
  (send (int _) :times)
@@ -40,10 +41,12 @@ module RuboCop
40
41
  )
41
42
  PATTERN
42
43
 
44
+ # @!method factory_call(node)
43
45
  def_node_matcher :factory_call, <<-PATTERN
44
46
  (send ${(const nil? {:FactoryGirl :FactoryBot}) nil?} :create (sym $_) $...)
45
47
  PATTERN
46
48
 
49
+ # @!method factory_list_call(node)
47
50
  def_node_matcher :factory_list_call, <<-PATTERN
48
51
  (send {(const nil? {:FactoryGirl :FactoryBot}) nil?} :create_list (sym _) (int $_) ...)
49
52
  PATTERN