rubocop-rspec 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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