rubocop-rspec 2.22.0 → 2.27.1

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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +94 -9
  3. data/README.md +1 -1
  4. data/config/default.yml +126 -21
  5. data/lib/rubocop/cop/rspec/around_block.rb +3 -3
  6. data/lib/rubocop/cop/rspec/be.rb +1 -1
  7. data/lib/rubocop/cop/rspec/be_empty.rb +1 -0
  8. data/lib/rubocop/cop/rspec/be_eq.rb +1 -1
  9. data/lib/rubocop/cop/rspec/be_eql.rb +1 -1
  10. data/lib/rubocop/cop/rspec/be_nil.rb +2 -2
  11. data/lib/rubocop/cop/rspec/before_after_all.rb +7 -13
  12. data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +2 -2
  13. data/lib/rubocop/cop/rspec/change_by_zero.rb +30 -4
  14. data/lib/rubocop/cop/rspec/context_method.rb +2 -2
  15. data/lib/rubocop/cop/rspec/context_wording.rb +1 -1
  16. data/lib/rubocop/cop/rspec/describe_symbol.rb +1 -1
  17. data/lib/rubocop/cop/rspec/described_class.rb +33 -11
  18. data/lib/rubocop/cop/rspec/duplicated_metadata.rb +1 -1
  19. data/lib/rubocop/cop/rspec/empty_example_group.rb +4 -1
  20. data/lib/rubocop/cop/rspec/empty_line_after_example.rb +2 -2
  21. data/lib/rubocop/cop/rspec/empty_metadata.rb +46 -0
  22. data/lib/rubocop/cop/rspec/eq.rb +47 -0
  23. data/lib/rubocop/cop/rspec/example_length.rb +11 -5
  24. data/lib/rubocop/cop/rspec/example_without_description.rb +11 -2
  25. data/lib/rubocop/cop/rspec/example_wording.rb +11 -2
  26. data/lib/rubocop/cop/rspec/excessive_docstring_spacing.rb +14 -5
  27. data/lib/rubocop/cop/rspec/expect_actual.rb +7 -4
  28. data/lib/rubocop/cop/rspec/expect_change.rb +2 -2
  29. data/lib/rubocop/cop/rspec/expect_output.rb +1 -4
  30. data/lib/rubocop/cop/rspec/file_path.rb +6 -0
  31. data/lib/rubocop/cop/rspec/focus.rb +17 -2
  32. data/lib/rubocop/cop/rspec/hook_argument.rb +2 -2
  33. data/lib/rubocop/cop/rspec/hooks_before_examples.rb +1 -1
  34. data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +2 -2
  35. data/lib/rubocop/cop/rspec/implicit_expect.rb +1 -1
  36. data/lib/rubocop/cop/rspec/implicit_subject.rb +2 -2
  37. data/lib/rubocop/cop/rspec/indexed_let.rb +32 -1
  38. data/lib/rubocop/cop/rspec/instance_spy.rb +2 -2
  39. data/lib/rubocop/cop/rspec/instance_variable.rb +3 -3
  40. data/lib/rubocop/cop/rspec/is_expected_specify.rb +45 -0
  41. data/lib/rubocop/cop/rspec/iterated_expectation.rb +3 -3
  42. data/lib/rubocop/cop/rspec/leaky_constant_declaration.rb +1 -1
  43. data/lib/rubocop/cop/rspec/let_before_examples.rb +5 -1
  44. data/lib/rubocop/cop/rspec/let_setup.rb +1 -1
  45. data/lib/rubocop/cop/rspec/message_expectation.rb +1 -2
  46. data/lib/rubocop/cop/rspec/message_spies.rb +0 -2
  47. data/lib/rubocop/cop/rspec/metadata_style.rb +202 -0
  48. data/lib/rubocop/cop/rspec/mixin/file_help.rb +14 -0
  49. data/lib/rubocop/cop/rspec/mixin/metadata.rb +21 -7
  50. data/lib/rubocop/cop/rspec/mixin/skip_or_pending.rb +2 -2
  51. data/lib/rubocop/cop/rspec/multiple_expectations.rb +12 -7
  52. data/lib/rubocop/cop/rspec/named_subject.rb +1 -1
  53. data/lib/rubocop/cop/rspec/pending.rb +12 -2
  54. data/lib/rubocop/cop/rspec/pending_without_reason.rb +1 -1
  55. data/lib/rubocop/cop/rspec/predicate_matcher.rb +9 -9
  56. data/lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb +1 -1
  57. data/lib/rubocop/cop/rspec/rails/have_http_status.rb +34 -10
  58. data/lib/rubocop/cop/rspec/rails/http_status.rb +29 -18
  59. data/lib/rubocop/cop/rspec/rails/minitest_assertions.rb +314 -22
  60. data/lib/rubocop/cop/rspec/rails/negation_be_valid.rb +102 -0
  61. data/lib/rubocop/cop/rspec/receive_counts.rb +1 -1
  62. data/lib/rubocop/cop/rspec/receive_messages.rb +161 -0
  63. data/lib/rubocop/cop/rspec/redundant_predicate_matcher.rb +67 -0
  64. data/lib/rubocop/cop/rspec/remove_const.rb +40 -0
  65. data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +1 -1
  66. data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +2 -2
  67. data/lib/rubocop/cop/rspec/repeated_include_example.rb +1 -1
  68. data/lib/rubocop/cop/rspec/repeated_subject_call.rb +124 -0
  69. data/lib/rubocop/cop/rspec/return_from_stub.rb +1 -1
  70. data/lib/rubocop/cop/rspec/shared_context.rb +1 -1
  71. data/lib/rubocop/cop/rspec/shared_examples.rb +66 -20
  72. data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +2 -3
  73. data/lib/rubocop/cop/rspec/sort_metadata.rb +2 -1
  74. data/lib/rubocop/cop/rspec/spec_file_path_format.rb +133 -0
  75. data/lib/rubocop/cop/rspec/spec_file_path_suffix.rb +40 -0
  76. data/lib/rubocop/cop/rspec/stubbed_mock.rb +1 -1
  77. data/lib/rubocop/cop/rspec/subject_stub.rb +4 -4
  78. data/lib/rubocop/cop/rspec/unspecified_exception.rb +2 -2
  79. data/lib/rubocop/cop/rspec/variable_definition.rb +4 -4
  80. data/lib/rubocop/cop/rspec/verified_double_reference.rb +6 -6
  81. data/lib/rubocop/cop/rspec/verified_doubles.rb +2 -2
  82. data/lib/rubocop/cop/rspec/void_expect.rb +4 -3
  83. data/lib/rubocop/cop/rspec_cops.rb +11 -0
  84. data/lib/rubocop/rspec/language.rb +8 -8
  85. data/lib/rubocop/rspec/version.rb +1 -1
  86. data/lib/rubocop/rspec/wording.rb +8 -0
  87. data/lib/rubocop-rspec.rb +1 -0
  88. metadata +20 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e786386e218833ac7f78af9ffcadadb6bf6c822a31b455cac1567152fd3bc9c0
4
- data.tar.gz: 384170b4ae3a06c05b30855ae9361057c53226b40b924d4ec1d49c0d15195658
3
+ metadata.gz: 629669f9a1d9d41dae7bc62c630f3a6cdae80623d3213c8e79ac8eb207f79e59
4
+ data.tar.gz: 5005161c3684fcd8b794284bcaeedc50253a545d649be9e0e0a82958fdd125b0
5
5
  SHA512:
6
- metadata.gz: 554345811f404b27a39fd522e0085022c39147e0487f04ea77ed7887002451af112e2ddc45ad94841c0a4201a76f37fbfb7a2e64aed3c7efa91cddf1a30843bc
7
- data.tar.gz: 22882a56ddf03c55d6eaf299fb05197c835049054231e6d7798e2ca3eac5cbd9840eeada823a12431b00efd37289a8353792dfe3c8f653b2606f9ccda480615a
6
+ metadata.gz: 8af331d4b31697228397a1122cbe331223d3f040f44d2260e5148d73177df5ba08ae2aea1d481b27f698b5d59c9522d1c5f4c5e08e14b473a548de75ccf218c6
7
+ data.tar.gz: 0f86ea257bcd14e73c57b2e431f618e0959cf9dbeca6e22c4b75bd8d4945f670d8fdb65212ff12969b351b62c35f845ca28041d4b1b30627e7d64dda5932b365
data/CHANGELOG.md CHANGED
@@ -2,6 +2,79 @@
2
2
 
3
3
  ## Master (Unreleased)
4
4
 
5
+ ## 2.27.1 (2024-03-03)
6
+
7
+ - Fix a false positive for `RSpec/RepeatedSubjectCall` when `subject.method_call`. ([@ydah])
8
+ - Add configuration option `OnlyStaticConstants` to `RSpec/DescribedClass`. ([@ydah])
9
+
10
+ ## 2.27.0 (2024-03-01)
11
+
12
+ - Add new `RSpec/IsExpectedSpecify` cop. ([@ydah])
13
+ - Add new `RSpec/RepeatedSubjectCall` cop. ([@drcapulet])
14
+ - Add support for `assert_true`, `assert_false`, `assert_not_equal`, `assert_not_nil`, `*_empty`, `*_predicate`, `*_kind_of`, `*_in_delta`, `*_match`, `*_instance_of` and `*_includes` assertions in `RSpec/Rails/MinitestAssertions`. ([@ydah], [@G-Rath])
15
+ - Support asserts with messages in `Rspec/BeEmpty`. ([@G-Rath])
16
+ - Fix a false positive for `RSpec/ExpectActual` when used with rspec-rails routing matchers. ([@naveg])
17
+ - Add configuration option `ResponseMethods` to `RSpec/Rails/HaveHttpStatus`. ([@ydah])
18
+ - Fix a false negative for `RSpec/DescribedClass` when class with constant. ([@ydah])
19
+ - Fix a false positive for `RSpec/ExampleWithoutDescription` when `specify` with multi-line block and missing description. ([@ydah])
20
+ - Fix an incorrect autocorrect for `RSpec/ChangeByZero` when compound expectations with line break before `.by(0)`. ([@ydah])
21
+
22
+ ## 2.26.1 (2024-01-05)
23
+
24
+ - Fix an error for `RSpec/SharedExamples` when using examples without argument. ([@ydah])
25
+
26
+ ## 2.26.0 (2024-01-04)
27
+
28
+ - Add new `RSpec/RedundantPredicateMatcher` cop. ([@ydah])
29
+ - Add new `RSpec/RemoveConst` cop. ([@swelther])
30
+ - Add support for correcting "it will" (future tense) for `RSpec/ExampleWording`. ([@jdufresne])
31
+ - Add support for `symbol` style for `RSpec/SharedExamples`. ([@jessieay])
32
+ - Ensure `PendingWithoutReason` can detect violations inside shared groups. ([@robinaugh])
33
+
34
+ ## 2.25.0 (2023-10-27)
35
+
36
+ - Add support single quoted string and percent string and heredoc for `RSpec/Rails/HttpStatus`. ([@ydah])
37
+ - Change to be inline disable for `RSpec/SpecFilePathFormat` like `RSpec/FilePath`. ([@ydah])
38
+ - Fix a false positive for `RSpec/MetadataStyle` with example groups having multiple string arguments. ([@franzliedke])
39
+
40
+ ## 2.24.1 (2023-09-23)
41
+
42
+ - Fix an error when using `RSpec/FilePath` and revert to enabled by default. If you have already moved to `RSpec/SpecFilePathSuffix` and `RSpec/SpecFilePathFormat`, disable `RSpec/FilePath` explicitly as `Enabled: false`. The `RSpec/FilePath` before migration and the `RSpec/SpecFilePathSuffix` and `RSpec/SpecFilePathFormat` as the target are available respectively. ([@ydah])
43
+
44
+ ## 2.24.0 (2023-09-08)
45
+
46
+ - Split `RSpec/FilePath` into `RSpec/SpecFilePathSuffix` and `RSpec/SpecFilePathFormat`. `RSpec/FilePath` cop is disabled by default and the two new cops are pending and need to be enabled explicitly. ([@ydah])
47
+ - Add new `RSpec/Eq` cop. ([@ydah])
48
+ - Add `RSpec/MetadataStyle` and `RSpec/EmptyMetadata` cops. ([@r7kamura])
49
+ - Add support `RSpec/Rails/HttpStatus` when `have_http_status` with string argument. ([@ydah])
50
+ - Fix an infinite loop error when `RSpec/ExcessiveDocstringSpacing` finds a description with non-ASCII leading/trailing whitespace. ([@bcgraham])
51
+ - Fix an incorrect autocorrect for `RSpec/ReceiveMessages` when return values declared between stubs. ([@marocchino])
52
+ - Fix a false positive `RSpec/Focus` when chained method call and inside define method. ([@ydah])
53
+
54
+ ## 2.23.2 (2023-08-09)
55
+
56
+ - Fix an incorrect autocorrect for `RSpec/ReceiveMessages` when method is only non-word character. ([@marocchino])
57
+ - Fix a false positive for `RSpec/ReceiveMessages` when return with splat. ([@marocchino])
58
+
59
+ ## 2.23.1 (2023-08-07)
60
+
61
+ - Mark to `Safe: false` for `RSpec/Rails/NegationBeValid` cop. ([@ydah])
62
+ - Declare autocorrect as unsafe for `RSpec/ReceiveMessages`. ([@bquorning])
63
+
64
+ ## 2.23.0 (2023-07-30)
65
+
66
+ - Add new `RSpec/Rails/NegationBeValid` cop. ([@ydah])
67
+ - Fix a false negative for `RSpec/ExcessiveDocstringSpacing` when finds description with em space. ([@ydah])
68
+ - Fix a false positive for `RSpec/EmptyExampleGroup` when example group with examples defined in `if` branch inside iterator. ([@ydah])
69
+ - Update the message output of `RSpec/ExpectActual` to include the word 'value'. ([@corydiamand])
70
+ - Fix a false negative for `RSpec/Pending` when `it` without body. ([@ydah])
71
+ - Add new `RSpec/ReceiveMessages` cop. ([@ydah])
72
+ - Change default.yml path to use `**/spec/*` instead of `spec/*`. ([@ydah])
73
+ - Add `AllowedIdentifiers` and `AllowedPatterns` configuration option to `RSpec/IndexedLet`. ([@ydah])
74
+ - Fix `RSpec/NamedSubject` when block has no body. ([@splattael])
75
+ - Fix `RSpec/LetBeforeExamples` autocorrect incompatible with `RSpec/ScatteredLet` autocorrect. ([@ydah])
76
+ - Update `RSpec/Focus` to support `shared_context` and `shared_examples`. ([@tmaier])
77
+
5
78
  ## 2.22.0 (2023-05-06)
6
79
 
7
80
  - Extract factory_bot cops to a separate repository, [`rubocop-factory_bot`](https://github.com/rubocop/rubocop-factory_bot). The `rubocop-factory_bot` repository is a dependency of `rubocop-rspec` and the factory_bot cops are aliased (`RSpec/FactoryBot/Foo` == `FactoryBot/Foo`) until v3.0 is released, so the change will be invisible to users until then. ([@ydah])
@@ -22,9 +95,9 @@
22
95
  - Add support `be_status` style for `RSpec/Rails/HttpStatus`. ([@ydah])
23
96
  - Add support for shared example groups to `RSpec/EmptyLineAfterExampleGroup`. ([@pirj])
24
97
  - Add support for `RSpec/HaveHttpStatus` when using `response.code`. ([@ydah])
25
- - Fix order of expected and actual in correction for `RSpec/Rails/MinitestAssertions` ([@mvz])
98
+ - Fix order of expected and actual in correction for `RSpec/Rails/MinitestAssertions`. ([@mvz])
26
99
  - Fix a false positive for `RSpec/DescribedClassModuleWrapping` when RSpec.describe numblock is nested within a module. ([@ydah])
27
- - Fix a false positive for `RSpec/FactoryBot/ConsistentParenthesesStyle` inside `&&`, `||` and `:?` when `omit_parentheses` is on ([@dmitrytsepelev])
100
+ - Fix a false positive for `RSpec/FactoryBot/ConsistentParenthesesStyle` inside `&&`, `||` and `:?` when `omit_parentheses` is on. ([@dmitrytsepelev])
28
101
  - Fix a false positive for `RSpec/PendingWithoutReason` when pending/skip has a reason inside an example group. ([@ydah])
29
102
  - Fix a false negative for `RSpec/RedundantAround` when redundant numblock `around`. ([@ydah])
30
103
  - Change `RSpec/ContainExactly` to ignore calls with no arguments, and change `RSpec/MatchArray` to ignore calls with an empty array literal argument. ([@ydah], [@bquorning])
@@ -77,7 +150,7 @@
77
150
  - Improved processing speed for `RSpec/Be`, `RSpec/ExpectActual`, `RSpec/ImplicitExpect`, `RSpec/MessageSpies`, `RSpec/PredicateMatcher` and `RSpec/Rails/HaveHttpStatus`. ([@ydah])
78
151
  - Fix wrong autocorrection in `n_times` style on `RSpec/FactoryBot/CreateList`. ([@r7kamura])
79
152
  - Fix a false positive for `RSpec/FactoryBot/ConsistentParenthesesStyle` when using `generate` with multiple arguments. ([@ydah])
80
- - Mark `RSpec/BeEq` as `Safe: false` ([@r7kamura])
153
+ - Mark `RSpec/BeEq` as `Safe: false`. ([@r7kamura])
81
154
  - Add `RSpec/DuplicatedMetadata` cop. ([@r7kamura])
82
155
  - Mark `RSpec/BeEql` as `Safe: false`. ([@r7kamura])
83
156
  - Add `RSpec/PendingWithoutReason` cop. ([@r7kamura])
@@ -110,8 +183,8 @@
110
183
  - Fix a false positive for `RSpec/Capybara/SpecificMatcher` when `have_css("a")` without attribute. ([@ydah])
111
184
  - Update `RSpec/ExampleWording` cop to raise error for insufficient descriptions. ([@akrox58])
112
185
  - Add new `RSpec/Capybara/NegationMatcher` cop. ([@ydah])
113
- - Add `AllowedPatterns` configuration option to `RSpec/NoExpectationExample`. ([@ydah])
114
- - Improve `RSpec/NoExpectationExample` cop to ignore examples skipped or pending via metadata. ([@pirj])
186
+ - Add `AllowedPatterns` configuration option to `RSpec/NoExpectationExample`. ([@ydah])
187
+ - Improve `RSpec/NoExpectationExample` cop to ignore examples skipped or pending via metadata. ([@pirj])
115
188
  - Add `RSpec/FactoryBot/ConsistentParenthesesStyle` cop. ([@Liberatys])
116
189
  - Add `RSpec/Rails/InferredSpecType` cop. ([@r7kamura])
117
190
  - Add new `RSpec/Capybara/SpecificActions` cop. ([@ydah])
@@ -427,7 +500,7 @@
427
500
  - Add config to `RSpec/VerifiedDoubles` to enforcement of verification on unnamed doubles. ([@BrentWheeldon])
428
501
  - Fix `FactoryBot/AttributeDefinedStatically` not working when there is a non-symbol key. ([@vzvu3k6k])
429
502
  - Fix false positive in `RSpec/ImplicitSubject` when `is_expected` is used inside `its()` block. ([@Darhazer])
430
- - Add `single_statement_only` style to `RSpec/ImplicitSubject` as a more relaxed alternative to `single_line_only`. ([@Darhazer])
503
+ - Add `single_statement_only` style to `RSpec/ImplicitSubject` as a more relaxed alternative to `single_line_only`. ([@Darhazer])
431
504
  - Add `RSpec/UnspecifiedException` as a default cop to encourage more-specific `expect{}.to raise_error(ExceptionType)`, or `raise_exception` style handling of exceptions. ([@daveworth])
432
505
 
433
506
  ## 1.29.1 (2018-09-01)
@@ -462,14 +535,14 @@
462
535
 
463
536
  ## 1.26.0 (2018-06-06)
464
537
 
465
- - Fix false positive in `RSpec/EmptyExampleGroup` cop when methods named like a RSpec method are used. ([@Darhazer])
538
+ - Fix false positive in `RSpec/EmptyExampleGroup` cop when methods named like a RSpec method are used. ([@Darhazer])
466
539
  - Fix `Capybara/FeatureMethods` not working when there is require before the spec. ([@Darhazer])
467
540
  - Fix `RSpec/EmptyLineAfterFinalLet`: allow a comment to be placed after latest let, requiring empty line after the comment. ([@Darhazer])
468
541
  - Add `RSpec/ReceiveCounts` cop to enforce usage of :once and :twice matchers. ([@Darhazer])
469
542
 
470
543
  ## 1.25.1 (2018-04-10)
471
544
 
472
- - Fix false positive in `RSpec/Pending` cop when pending is used as a method name. ([@Darhazer])
545
+ - Fix false positive in `RSpec/Pending` cop when pending is used as a method name. ([@Darhazer])
473
546
  - Fix `FactoryBot/DynamicAttributeDefinedStatically` false positive when using symbol proc argument for a sequence. ([@tdeo])
474
547
 
475
548
  ## 1.25.0 (2018-04-07)
@@ -477,7 +550,7 @@
477
550
  - Add `RSpec/SharedExamples` cop to enforce consistent usage of string to titleize shared examples. ([@anthony-robin])
478
551
  - Add `RSpec/Be` cop to enforce passing argument to the generic `be` matcher. ([@Darhazer])
479
552
  - Fix false positives in `StaticAttributeDefinedDynamically` and `ReturnFromStub` when a const is used in an array or hash. ([@Darhazer])
480
- - Add `RSpec/Pending` cop to enforce no existing pending or skipped examples. This is disabled by default. ([@patrickomatic])
553
+ - Add `RSpec/Pending` cop to enforce no existing pending or skipped examples. This is disabled by default. ([@patrickomatic])
481
554
  - Fix `RSpec/NestedGroups` cop support --auto-gen-config. ([@walf443])
482
555
  - Fix false positives in `Capybara/FeatureMethods` when feature methods are used as property names in a factory. ([@Darhazer])
483
556
  - Allow configuring enabled methods in `Capybara/FeatureMethods`. ([@Darhazer])
@@ -773,6 +846,7 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
773
846
  [@aried3r]: https://github.com/aried3r
774
847
  [@baberthal]: https://github.com/baberthal
775
848
  [@backus]: https://github.com/backus
849
+ [@bcgraham]: https://github.com/bcgraham
776
850
  [@biinari]: https://github.com/biinari
777
851
  [@bmorrall]: https://github.com/bmorrall
778
852
  [@bquorning]: https://github.com/bquorning
@@ -781,12 +855,14 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
781
855
  [@cfabianski]: https://github.com/cfabianski
782
856
  [@clupprich]: https://github.com/clupprich
783
857
  [@composerinteralia]: https://github.com/composerinteralia
858
+ [@corydiamand]: https://github.com/corydiamand
784
859
  [@darhazer]: https://github.com/Darhazer
785
860
  [@daveworth]: https://github.com/daveworth
786
861
  [@dduugg]: https://github.com/dduugg
787
862
  [@deivid-rodriguez]: https://github.com/deivid-rodriguez
788
863
  [@dgollahon]: https://github.com/dgollahon
789
864
  [@dmitrytsepelev]: https://github.com/dmitrytsepelev
865
+ [@drcapulet]: https://github.com/drcapulet
790
866
  [@drowze]: https://github.com/Drowze
791
867
  [@dswij]: https://github.com/dswij
792
868
  [@dvandersluis]: https://github.com/dvandersluis
@@ -799,6 +875,7 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
799
875
  [@faucct]: https://github.com/faucct
800
876
  [@foton]: https://github.com/foton
801
877
  [@francois-ferrandis]: https://github.com/francois-ferrandis
878
+ [@franzliedke]: https://github.com/franzliedke
802
879
  [@g-rath]: https://github.com/G-Rath
803
880
  [@geniou]: https://github.com/geniou
804
881
  [@gsamokovarov]: https://github.com/gsamokovarov
@@ -808,7 +885,9 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
808
885
  [@ignaciovillaverde]: https://github.com/ignaciovillaverde
809
886
  [@jaredbeck]: https://github.com/jaredbeck
810
887
  [@jaredmoody]: https://github.com/jaredmoody
888
+ [@jdufresne]: https://github.com/jdufresne
811
889
  [@jeffreyc]: https://github.com/jeffreyc
890
+ [@jessieay]: https://github.com/jessieay
812
891
  [@jfragoulis]: https://github.com/jfragoulis
813
892
  [@johnny-miyake]: https://github.com/johnny-miyake
814
893
  [@jojos003]: https://github.com/jojos003
@@ -823,6 +902,7 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
823
902
  [@lokhi]: https://github.com/lokhi
824
903
  [@luke-hill]: https://github.com/luke-hill
825
904
  [@m-yamashita01]: https://github.com/M-Yamashita01
905
+ [@marocchino]: https://github.com/marocchino
826
906
  [@miguelfteixeira]: https://github.com/miguelfteixeira
827
907
  [@mkenyon]: https://github.com/mkenyon
828
908
  [@mkrawc]: https://github.com/mkrawc
@@ -830,6 +910,7 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
830
910
  [@mockdeep]: https://github.com/mockdeep
831
911
  [@mothonmars]: https://github.com/MothOnMars
832
912
  [@mvz]: https://github.com/mvz
913
+ [@naveg]: https://github.com/naveg
833
914
  [@nc-holodakg]: https://github.com/nc-holodakg
834
915
  [@nevir]: https://github.com/nevir
835
916
  [@ngouy]: https://github.com/ngouy
@@ -849,6 +930,7 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
849
930
  [@rafix02]: https://github.com/Rafix02
850
931
  [@redross]: https://github.com/redross
851
932
  [@renanborgescampos]: https://github.com/renanborgescampos
933
+ [@robinaugh]: https://github.com/robinaugh
852
934
  [@robotdana]: https://github.com/robotdana
853
935
  [@rolfschmidt]: https://github.com/rolfschmidt
854
936
  [@rrosenblum]: https://github.com/rrosenblum
@@ -859,13 +941,16 @@ Compatibility release so users can upgrade RuboCop to 0.51.0. No new features.
859
941
  [@seanpdoyle]: https://github.com/seanpdoyle
860
942
  [@sl4vr]: https://github.com/sl4vr
861
943
  [@smcgivern]: https://github.com/smcgivern
944
+ [@splattael]: https://github.com/splattael
862
945
  [@stephannv]: https://github.com/stephannv
946
+ [@swelther]: https://github.com/swelther
863
947
  [@t3h2mas]: https://github.com/t3h2mas
864
948
  [@tdeo]: https://github.com/tdeo
865
949
  [@tejasbubane]: https://github.com/tejasbubane
866
950
  [@telmofcosta]: https://github.com/telmofcosta
867
951
  [@tietew]: https://github.com/Tietew
868
952
  [@timrogers]: https://github.com/timrogers
953
+ [@tmaier]: https://github.com/tmaier
869
954
  [@topalovic]: https://github.com/topalovic
870
955
  [@twalpole]: https://github.com/twalpole
871
956
  [@vzvu3k6k]: https://github.com/vzvu3k6k
data/README.md CHANGED
@@ -17,7 +17,7 @@ gem install rubocop-rspec
17
17
 
18
18
  or if you use bundler put this in your `Gemfile`
19
19
 
20
- ```
20
+ ```ruby
21
21
  gem 'rubocop-rspec', require: false
22
22
  ```
23
23
 
data/config/default.yml CHANGED
@@ -178,13 +178,14 @@ RSpec/BeNil:
178
178
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/BeNil
179
179
 
180
180
  RSpec/BeforeAfterAll:
181
- Description: Check that before/after(:all) isn't being used.
181
+ Description: Check that before/after(:all/:context) isn't being used.
182
182
  Enabled: true
183
183
  Exclude:
184
- - spec/spec_helper.rb
185
- - spec/rails_helper.rb
186
- - spec/support/**/*.rb
184
+ - "**/spec/spec_helper.rb"
185
+ - "**/spec/rails_helper.rb"
186
+ - "**/spec/support/**/*.rb"
187
187
  VersionAdded: '1.12'
188
+ VersionChanged: '2.23'
188
189
  StyleGuide: https://rspec.rubystyle.guide/#avoid-hooks-with-context-scope
189
190
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/BeforeAfterAll
190
191
 
@@ -282,9 +283,10 @@ RSpec/DescribedClass:
282
283
  SupportedStyles:
283
284
  - described_class
284
285
  - explicit
286
+ OnlyStaticConstants: true
285
287
  SafeAutoCorrect: false
286
288
  VersionAdded: '1.0'
287
- VersionChanged: '1.11'
289
+ VersionChanged: '2.27'
288
290
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/DescribedClass
289
291
 
290
292
  RSpec/DescribedClassModuleWrapping:
@@ -358,6 +360,18 @@ RSpec/EmptyLineAfterSubject:
358
360
  StyleGuide: https://rspec.rubystyle.guide/#empty-line-after-let
359
361
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/EmptyLineAfterSubject
360
362
 
363
+ RSpec/EmptyMetadata:
364
+ Description: Avoid empty metadata hash.
365
+ Enabled: pending
366
+ VersionAdded: '2.24'
367
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/EmptyMetadata
368
+
369
+ RSpec/Eq:
370
+ Description: Use `eq` instead of `be ==` to compare objects.
371
+ Enabled: pending
372
+ VersionAdded: '2.24'
373
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Eq
374
+
361
375
  RSpec/ExampleLength:
362
376
  Description: Checks for long examples.
363
377
  Enabled: true
@@ -404,8 +418,9 @@ RSpec/ExpectActual:
404
418
  Description: Checks for `expect(...)` calls containing literal values.
405
419
  Enabled: true
406
420
  Exclude:
407
- - spec/routing/**/*
421
+ - "**/spec/routing/**/*"
408
422
  VersionAdded: '1.7'
423
+ VersionChanged: '2.23'
409
424
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ExpectActual
410
425
 
411
426
  RSpec/ExpectChange:
@@ -444,7 +459,7 @@ RSpec/FilePath:
444
459
  IgnoreMethods: false
445
460
  SpecSuffixOnly: false
446
461
  VersionAdded: '1.2'
447
- VersionChanged: '1.40'
462
+ VersionChanged: '2.24'
448
463
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FilePath
449
464
 
450
465
  RSpec/Focus:
@@ -513,8 +528,11 @@ RSpec/IndexedLet:
513
528
  Description: Do not set up test data using indexes (e.g., `item_1`, `item_2`).
514
529
  Enabled: pending
515
530
  VersionAdded: '2.20'
531
+ VersionChanged: '2.23'
516
532
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IndexedLet
517
533
  Max: 1
534
+ AllowedIdentifiers: []
535
+ AllowedPatterns: []
518
536
 
519
537
  RSpec/InstanceSpy:
520
538
  Description: Checks for `instance_double` used with `have_received`.
@@ -531,6 +549,13 @@ RSpec/InstanceVariable:
531
549
  StyleGuide: https://rspec.rubystyle.guide/#instance-variables
532
550
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/InstanceVariable
533
551
 
552
+ RSpec/IsExpectedSpecify:
553
+ Description: Check for `specify` with `is_expected` and one-liner expectations.
554
+ Enabled: pending
555
+ VersionAdded: '2.27'
556
+ StyleGuide: https://rspec.rubystyle.guide/#it-and-specify
557
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IsExpectedSpecify
558
+
534
559
  RSpec/ItBehavesLike:
535
560
  Description: Checks that only one `it_behaves_like` style is used.
536
561
  Enabled: true
@@ -608,6 +633,16 @@ RSpec/MessageSpies:
608
633
  VersionAdded: '1.9'
609
634
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MessageSpies
610
635
 
636
+ RSpec/MetadataStyle:
637
+ Description: Use consistent metadata style.
638
+ Enabled: pending
639
+ EnforcedStyle: symbol
640
+ SupportedStyles:
641
+ - hash
642
+ - symbol
643
+ VersionAdded: '2.24'
644
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MetadataStyle
645
+
611
646
  RSpec/MissingExampleGroupArgument:
612
647
  Description: Checks that the first argument to an example group is not empty.
613
648
  Enabled: true
@@ -725,6 +760,13 @@ RSpec/ReceiveCounts:
725
760
  VersionAdded: '1.26'
726
761
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ReceiveCounts
727
762
 
763
+ RSpec/ReceiveMessages:
764
+ Description: Checks for multiple messages stubbed on the same object.
765
+ Enabled: pending
766
+ SafeAutoCorrect: false
767
+ VersionAdded: '2.23'
768
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/ReceiveMessages
769
+
728
770
  RSpec/ReceiveNever:
729
771
  Description: Prefer `not_to receive(...)` over `receive(...).never`.
730
772
  Enabled: true
@@ -737,6 +779,18 @@ RSpec/RedundantAround:
737
779
  VersionAdded: '2.19'
738
780
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/RedundantAround
739
781
 
782
+ RSpec/RedundantPredicateMatcher:
783
+ Description: Checks for redundant predicate matcher.
784
+ Enabled: pending
785
+ VersionAdded: '2.26'
786
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/RedundantPredicateMatcher
787
+
788
+ RSpec/RemoveConst:
789
+ Description: Checks that `remove_const` is not used in specs.
790
+ Enabled: pending
791
+ VersionAdded: '2.26'
792
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/RemoveConst
793
+
740
794
  RSpec/RepeatedDescription:
741
795
  Description: Check for repeated description strings in example groups.
742
796
  Enabled: true
@@ -767,6 +821,12 @@ RSpec/RepeatedIncludeExample:
767
821
  VersionAdded: '1.44'
768
822
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/RepeatedIncludeExample
769
823
 
824
+ RSpec/RepeatedSubjectCall:
825
+ Description: Checks for repeated calls to subject missing that it is memoized.
826
+ Enabled: pending
827
+ VersionAdded: '2.27'
828
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/RepeatedSubjectCall
829
+
770
830
  RSpec/ReturnFromStub:
771
831
  Description: Checks for consistent style of stub's return setting.
772
832
  Enabled: true
@@ -798,9 +858,14 @@ RSpec/SharedContext:
798
858
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/SharedContext
799
859
 
800
860
  RSpec/SharedExamples:
801
- Description: Enforces use of string to titleize shared examples.
861
+ Description: Checks for consistent style for shared example names.
802
862
  Enabled: true
863
+ EnforcedStyle: string
864
+ SupportedStyles:
865
+ - string
866
+ - symbol
803
867
  VersionAdded: '1.25'
868
+ VersionChanged: '2.26'
804
869
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/SharedExamples
805
870
 
806
871
  RSpec/SingleArgumentMessageChain:
@@ -822,6 +887,31 @@ RSpec/SortMetadata:
822
887
  VersionAdded: '2.14'
823
888
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/SortMetadata
824
889
 
890
+ RSpec/SpecFilePathFormat:
891
+ Description: Checks that spec file paths are consistent and well-formed.
892
+ Enabled: pending
893
+ Include:
894
+ - "**/*_spec.rb"
895
+ Exclude:
896
+ - "**/spec/routing/**/*"
897
+ CustomTransform:
898
+ RuboCop: rubocop
899
+ RSpec: rspec
900
+ IgnoreMethods: false
901
+ IgnoreMetadata:
902
+ type: routing
903
+ VersionAdded: '2.24'
904
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/SpecFilePathFormat
905
+
906
+ RSpec/SpecFilePathSuffix:
907
+ Description: Checks that spec file paths suffix are consistent and well-formed.
908
+ Enabled: pending
909
+ VersionAdded: '2.24'
910
+ Include:
911
+ - "**/*_spec*rb*"
912
+ - "**/spec/**/*"
913
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/SpecFilePathSuffix
914
+
825
915
  RSpec/StubbedMock:
826
916
  Description: Checks that message expectations do not have a configured response.
827
917
  Enabled: true
@@ -974,11 +1064,11 @@ RSpec/FactoryBot/AttributeDefinedStatically:
974
1064
  Description: Always declare attribute values as blocks.
975
1065
  Enabled: true
976
1066
  Include:
977
- - spec/factories.rb
978
- - spec/factories/**/*.rb
979
- - features/support/factories/**/*.rb
1067
+ - "**/spec/factories.rb"
1068
+ - "**/spec/factories/**/*.rb"
1069
+ - "**/features/support/factories/**/*.rb"
980
1070
  VersionAdded: '1.28'
981
- VersionChanged: '2.0'
1071
+ VersionChanged: '2.23'
982
1072
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/AttributeDefinedStatically
983
1073
 
984
1074
  RSpec/FactoryBot/ConsistentParenthesesStyle:
@@ -997,26 +1087,26 @@ RSpec/FactoryBot/CreateList:
997
1087
  Include:
998
1088
  - "**/*_spec.rb"
999
1089
  - "**/spec/**/*"
1000
- - spec/factories.rb
1001
- - spec/factories/**/*.rb
1002
- - features/support/factories/**/*.rb
1090
+ - "**/spec/factories.rb"
1091
+ - "**/spec/factories/**/*.rb"
1092
+ - "**/features/support/factories/**/*.rb"
1003
1093
  EnforcedStyle: create_list
1004
1094
  SupportedStyles:
1005
1095
  - create_list
1006
1096
  - n_times
1007
1097
  VersionAdded: '1.25'
1008
- VersionChanged: '2.0'
1098
+ VersionChanged: '2.23'
1009
1099
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/CreateList
1010
1100
 
1011
1101
  RSpec/FactoryBot/FactoryClassName:
1012
1102
  Description: Use string value when setting the class attribute explicitly.
1013
1103
  Enabled: true
1014
1104
  Include:
1015
- - spec/factories.rb
1016
- - spec/factories/**/*.rb
1017
- - features/support/factories/**/*.rb
1105
+ - "**/spec/factories.rb"
1106
+ - "**/spec/factories/**/*.rb"
1107
+ - "**/features/support/factories/**/*.rb"
1018
1108
  VersionAdded: '1.37'
1019
- VersionChanged: '2.0'
1109
+ VersionChanged: '2.23'
1020
1110
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryBot/FactoryClassName
1021
1111
 
1022
1112
  RSpec/FactoryBot/FactoryNameStyle:
@@ -1050,8 +1140,12 @@ RSpec/Rails/AvoidSetupHook:
1050
1140
  RSpec/Rails/HaveHttpStatus:
1051
1141
  Description: Checks that tests use `have_http_status` instead of equality matchers.
1052
1142
  Enabled: pending
1143
+ ResponseMethods:
1144
+ - response
1145
+ - last_response
1053
1146
  SafeAutoCorrect: false
1054
1147
  VersionAdded: '2.12'
1148
+ VersionChanged: '2.27'
1055
1149
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/HaveHttpStatus
1056
1150
 
1057
1151
  RSpec/Rails/HttpStatus:
@@ -1090,11 +1184,22 @@ RSpec/Rails/InferredSpecType:
1090
1184
  views: view
1091
1185
 
1092
1186
  RSpec/Rails/MinitestAssertions:
1093
- Description: Check if using Minitest matchers.
1187
+ Description: Check if using Minitest-like matchers.
1094
1188
  Enabled: pending
1095
1189
  VersionAdded: '2.17'
1096
1190
  Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/MinitestAssertions
1097
1191
 
1192
+ RSpec/Rails/NegationBeValid:
1193
+ Description: Enforces use of `be_invalid` or `not_to` for negated be_valid.
1194
+ Safe: false
1195
+ EnforcedStyle: not_to
1196
+ SupportedStyles:
1197
+ - not_to
1198
+ - be_invalid
1199
+ Enabled: pending
1200
+ VersionAdded: '2.23'
1201
+ Reference: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/NegationBeValid
1202
+
1098
1203
  RSpec/Rails/TravelAround:
1099
1204
  Description: Prefer to travel in `before` rather than `around`.
1100
1205
  Enabled: pending
@@ -32,17 +32,17 @@ module RuboCop
32
32
  'or `%<arg>s.run`.'
33
33
 
34
34
  # @!method hook_block(node)
35
- def_node_matcher :hook_block, <<-PATTERN
35
+ def_node_matcher :hook_block, <<~PATTERN
36
36
  (block (send nil? :around sym ?) (args $...) ...)
37
37
  PATTERN
38
38
 
39
39
  # @!method hook_numblock(node)
40
- def_node_matcher :hook_numblock, <<-PATTERN
40
+ def_node_matcher :hook_numblock, <<~PATTERN
41
41
  (numblock (send nil? :around sym ?) ...)
42
42
  PATTERN
43
43
 
44
44
  # @!method find_arg_usage(node)
45
- def_node_search :find_arg_usage, <<-PATTERN
45
+ def_node_search :find_arg_usage, <<~PATTERN
46
46
  {(send $... {:call :run}) (send _ _ $...) (yield $...) (block-pass $...)}
47
47
  PATTERN
48
48
 
@@ -24,7 +24,7 @@ module RuboCop
24
24
  RESTRICT_ON_SEND = Runners.all
25
25
 
26
26
  # @!method be_without_args(node)
27
- def_node_matcher :be_without_args, <<-PATTERN
27
+ def_node_matcher :be_without_args, <<~PATTERN
28
28
  (send _ #Runners.all $(send nil? :be))
29
29
  PATTERN
30
30
 
@@ -28,6 +28,7 @@ module RuboCop
28
28
  (send nil? :match_array (array))
29
29
  (send nil? :contain_exactly)
30
30
  }
31
+ _?
31
32
  )
32
33
  PATTERN
33
34
 
@@ -30,7 +30,7 @@ module RuboCop
30
30
  RESTRICT_ON_SEND = %i[eq].freeze
31
31
 
32
32
  # @!method eq_type_with_identity?(node)
33
- def_node_matcher :eq_type_with_identity?, <<-PATTERN
33
+ def_node_matcher :eq_type_with_identity?, <<~PATTERN
34
34
  (send nil? :eq {true false nil})
35
35
  PATTERN
36
36
 
@@ -44,7 +44,7 @@ module RuboCop
44
44
  RESTRICT_ON_SEND = %i[to].freeze
45
45
 
46
46
  # @!method eql_type_with_identity(node)
47
- def_node_matcher :eql_type_with_identity, <<-PATTERN
47
+ def_node_matcher :eql_type_with_identity, <<~PATTERN
48
48
  (send _ :to $(send nil? :eql {true false int float sym nil}))
49
49
  PATTERN
50
50
 
@@ -33,12 +33,12 @@ module RuboCop
33
33
  RESTRICT_ON_SEND = %i[be be_nil].freeze
34
34
 
35
35
  # @!method be_nil_matcher?(node)
36
- def_node_matcher :be_nil_matcher?, <<-PATTERN
36
+ def_node_matcher :be_nil_matcher?, <<~PATTERN
37
37
  (send nil? :be_nil)
38
38
  PATTERN
39
39
 
40
40
  # @!method nil_value_expectation?(node)
41
- def_node_matcher :nil_value_expectation?, <<-PATTERN
41
+ def_node_matcher :nil_value_expectation?, <<~PATTERN
42
42
  (send nil? :be nil)
43
43
  PATTERN
44
44
 
@@ -3,22 +3,16 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module RSpec
6
- # Check that before/after(:all) isn't being used.
6
+ # Check that before/after(:all/:context) isn't being used.
7
7
  #
8
8
  # @example
9
- # # bad
10
- # #
11
- # # Faster but risk of state leaking between examples
12
- # #
9
+ # # bad - Faster but risk of state leaking between examples
13
10
  # describe MyClass do
14
11
  # before(:all) { Widget.create }
15
- # after(:all) { Widget.delete_all }
12
+ # after(:context) { Widget.delete_all }
16
13
  # end
17
14
  #
18
- # # good
19
- # #
20
- # # Slower but examples are properly isolated
21
- # #
15
+ # # good - Slower but examples are properly isolated
22
16
  # describe MyClass do
23
17
  # before(:each) { Widget.create }
24
18
  # after(:each) { Widget.delete_all }
@@ -30,11 +24,11 @@ module RuboCop
30
24
  '`use_transactional_fixtures` is enabled, then records created ' \
31
25
  'in `%<hook>s` are not automatically rolled back.'
32
26
 
33
- RESTRICT_ON_SEND = %i[before after].freeze
27
+ RESTRICT_ON_SEND = Set[:before, :after].freeze
34
28
 
35
29
  # @!method before_or_after_all(node)
36
- def_node_matcher :before_or_after_all, <<-PATTERN
37
- $(send _ {:before :after} (sym {:all :context}))
30
+ def_node_matcher :before_or_after_all, <<~PATTERN
31
+ $(send _ RESTRICT_ON_SEND (sym {:all :context}))
38
32
  PATTERN
39
33
 
40
34
  def on_send(node)