rubocop-rspec 2.18.1 → 2.20.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -2
- data/README.md +1 -1
- data/config/default.yml +46 -1
- data/lib/rubocop/cop/rspec/be_empty.rb +44 -0
- data/lib/rubocop/cop/rspec/be_nil.rb +2 -2
- data/lib/rubocop/cop/rspec/change_by_zero.rb +3 -3
- data/lib/rubocop/cop/rspec/contain_exactly.rb +56 -0
- data/lib/rubocop/cop/rspec/context_wording.rb +13 -5
- data/lib/rubocop/cop/rspec/describe_method.rb +16 -8
- data/lib/rubocop/cop/rspec/described_class.rb +2 -1
- data/lib/rubocop/cop/rspec/described_class_module_wrapping.rb +7 -5
- data/lib/rubocop/cop/rspec/dialect.rb +1 -1
- data/lib/rubocop/cop/rspec/duplicated_metadata.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_example_group.rb +7 -7
- data/lib/rubocop/cop/rspec/empty_hook.rb +2 -2
- data/lib/rubocop/cop/rspec/empty_line_after_example_group.rb +1 -1
- data/lib/rubocop/cop/rspec/example_wording.rb +1 -1
- data/lib/rubocop/cop/rspec/excessive_docstring_spacing.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_actual.rb +2 -2
- data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +1 -1
- data/lib/rubocop/cop/rspec/factory_bot/consistent_parentheses_style.rb +3 -3
- data/lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb +2 -2
- data/lib/rubocop/cop/rspec/file_path.rb +1 -1
- data/lib/rubocop/cop/rspec/focus.rb +4 -5
- data/lib/rubocop/cop/rspec/hook_argument.rb +12 -9
- data/lib/rubocop/cop/rspec/hooks_before_examples.rb +5 -3
- data/lib/rubocop/cop/rspec/indexed_let.rb +76 -0
- data/lib/rubocop/cop/rspec/let_before_examples.rb +4 -4
- data/lib/rubocop/cop/rspec/let_setup.rb +6 -8
- data/lib/rubocop/cop/rspec/match_array.rb +59 -0
- data/lib/rubocop/cop/rspec/mixin/empty_line_separation.rb +1 -2
- data/lib/rubocop/cop/rspec/mixin/location_help.rb +37 -0
- data/lib/rubocop/cop/rspec/mixin/skip_or_pending.rb +20 -4
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +2 -1
- data/lib/rubocop/cop/rspec/named_subject.rb +6 -4
- data/lib/rubocop/cop/rspec/no_expectation_example.rb +2 -5
- data/lib/rubocop/cop/rspec/overwriting_setup.rb +3 -1
- data/lib/rubocop/cop/rspec/pending.rb +12 -12
- data/lib/rubocop/cop/rspec/pending_without_reason.rb +74 -36
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +9 -35
- data/lib/rubocop/cop/rspec/rails/have_http_status.rb +8 -5
- data/lib/rubocop/cop/rspec/rails/http_status.rb +89 -33
- data/lib/rubocop/cop/rspec/rails/inferred_spec_type.rb +4 -4
- data/lib/rubocop/cop/rspec/rails/minitest_assertions.rb +5 -5
- data/lib/rubocop/cop/rspec/rails/travel_around.rb +92 -0
- data/lib/rubocop/cop/rspec/receive_counts.rb +1 -1
- data/lib/rubocop/cop/rspec/redundant_around.rb +65 -0
- data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +3 -6
- data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +3 -6
- data/lib/rubocop/cop/rspec/repeated_include_example.rb +3 -4
- data/lib/rubocop/cop/rspec/scattered_setup.rb +23 -6
- data/lib/rubocop/cop/rspec/shared_context.rb +12 -13
- data/lib/rubocop/cop/rspec/shared_examples.rb +6 -4
- data/lib/rubocop/cop/rspec/skip_block_inside_example.rb +46 -0
- data/lib/rubocop/cop/rspec/sort_metadata.rb +2 -2
- data/lib/rubocop/cop/rspec/variable_definition.rb +3 -0
- data/lib/rubocop/cop/rspec/variable_name.rb +4 -1
- data/lib/rubocop/cop/rspec/verified_double_reference.rb +3 -3
- data/lib/rubocop/cop/rspec_cops.rb +7 -0
- data/lib/rubocop/rspec/example_group.rb +6 -8
- data/lib/rubocop/rspec/language/node_pattern.rb +26 -0
- data/lib/rubocop/rspec/language.rb +25 -16
- data/lib/rubocop/rspec/version.rb +1 -1
- data/lib/rubocop-rspec.rb +1 -0
- metadata +11 -3
@@ -27,10 +27,13 @@ module RuboCop
|
|
27
27
|
extend AutoCorrector
|
28
28
|
include ConfigurableEnforcedStyle
|
29
29
|
include Variable
|
30
|
+
include InsideExampleGroup
|
30
31
|
|
31
32
|
MSG = 'Use %<style>s for variable names.'
|
32
33
|
|
33
34
|
def on_send(node)
|
35
|
+
return unless inside_example_group?(node)
|
36
|
+
|
34
37
|
variable_definition?(node) do |variable|
|
35
38
|
next unless style_violation?(variable)
|
36
39
|
|
@@ -42,15 +42,18 @@ module RuboCop
|
|
42
42
|
include ConfigurableNaming
|
43
43
|
include AllowedPattern
|
44
44
|
include Variable
|
45
|
+
include InsideExampleGroup
|
45
46
|
|
46
47
|
MSG = 'Use %<style>s for variable names.'
|
47
48
|
|
48
49
|
def on_send(node)
|
50
|
+
return unless inside_example_group?(node)
|
51
|
+
|
49
52
|
variable_definition?(node) do |variable|
|
50
53
|
return if variable.dstr_type? || variable.dsym_type?
|
51
54
|
return if matches_allowed_pattern?(variable.value)
|
52
55
|
|
53
|
-
check_name(node, variable.value, variable.
|
56
|
+
check_name(node, variable.value, variable.source_range)
|
54
57
|
end
|
55
58
|
end
|
56
59
|
|
@@ -76,10 +76,10 @@ module RuboCop
|
|
76
76
|
break correct_style_detected unless opposing_style?(class_reference)
|
77
77
|
|
78
78
|
message = format(MSG, style: style)
|
79
|
-
expression = class_reference.
|
79
|
+
expression = class_reference.source_range
|
80
80
|
|
81
81
|
add_offense(expression, message: message) do |corrector|
|
82
|
-
violation = class_reference.
|
82
|
+
violation = class_reference.source
|
83
83
|
corrector.replace(expression, correct_style(violation))
|
84
84
|
|
85
85
|
opposite_style_detected
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
102
102
|
if style == :string
|
103
103
|
"'#{violation}'"
|
104
104
|
else
|
105
|
-
violation
|
105
|
+
violation.gsub(/^['"]|['"]$/, '')
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
@@ -25,18 +25,21 @@ rescue LoadError
|
|
25
25
|
end
|
26
26
|
require_relative 'rspec/rails/inferred_spec_type'
|
27
27
|
require_relative 'rspec/rails/minitest_assertions'
|
28
|
+
require_relative 'rspec/rails/travel_around'
|
28
29
|
|
29
30
|
require_relative 'rspec/align_left_let_brace'
|
30
31
|
require_relative 'rspec/align_right_let_brace'
|
31
32
|
require_relative 'rspec/any_instance'
|
32
33
|
require_relative 'rspec/around_block'
|
33
34
|
require_relative 'rspec/be'
|
35
|
+
require_relative 'rspec/be_empty'
|
34
36
|
require_relative 'rspec/be_eq'
|
35
37
|
require_relative 'rspec/be_eql'
|
36
38
|
require_relative 'rspec/be_nil'
|
37
39
|
require_relative 'rspec/before_after_all'
|
38
40
|
require_relative 'rspec/change_by_zero'
|
39
41
|
require_relative 'rspec/class_check'
|
42
|
+
require_relative 'rspec/contain_exactly'
|
40
43
|
require_relative 'rspec/context_method'
|
41
44
|
require_relative 'rspec/context_wording'
|
42
45
|
require_relative 'rspec/describe_class'
|
@@ -69,6 +72,7 @@ require_relative 'rspec/identical_equality_assertion'
|
|
69
72
|
require_relative 'rspec/implicit_block_expectation'
|
70
73
|
require_relative 'rspec/implicit_expect'
|
71
74
|
require_relative 'rspec/implicit_subject'
|
75
|
+
require_relative 'rspec/indexed_let'
|
72
76
|
require_relative 'rspec/instance_spy'
|
73
77
|
require_relative 'rspec/instance_variable'
|
74
78
|
require_relative 'rspec/it_behaves_like'
|
@@ -77,6 +81,7 @@ require_relative 'rspec/leading_subject'
|
|
77
81
|
require_relative 'rspec/leaky_constant_declaration'
|
78
82
|
require_relative 'rspec/let_before_examples'
|
79
83
|
require_relative 'rspec/let_setup'
|
84
|
+
require_relative 'rspec/match_array'
|
80
85
|
require_relative 'rspec/message_chain'
|
81
86
|
require_relative 'rspec/message_expectation'
|
82
87
|
require_relative 'rspec/message_spies'
|
@@ -95,6 +100,7 @@ require_relative 'rspec/pending_without_reason'
|
|
95
100
|
require_relative 'rspec/predicate_matcher'
|
96
101
|
require_relative 'rspec/receive_counts'
|
97
102
|
require_relative 'rspec/receive_never'
|
103
|
+
require_relative 'rspec/redundant_around'
|
98
104
|
require_relative 'rspec/repeated_description'
|
99
105
|
require_relative 'rspec/repeated_example'
|
100
106
|
require_relative 'rspec/repeated_example_group_body'
|
@@ -106,6 +112,7 @@ require_relative 'rspec/scattered_setup'
|
|
106
112
|
require_relative 'rspec/shared_context'
|
107
113
|
require_relative 'rspec/shared_examples'
|
108
114
|
require_relative 'rspec/single_argument_message_chain'
|
115
|
+
require_relative 'rspec/skip_block_inside_example'
|
109
116
|
require_relative 'rspec/sort_metadata'
|
110
117
|
require_relative 'rspec/stubbed_mock'
|
111
118
|
require_relative 'rspec/subject_declaration'
|
@@ -10,14 +10,12 @@ module RuboCop
|
|
10
10
|
#
|
11
11
|
# Selectors which indicate that we should stop searching
|
12
12
|
#
|
13
|
-
def_node_matcher :scope_change?,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
}
|
20
|
-
PATTERN
|
13
|
+
def_node_matcher :scope_change?, <<~PATTERN
|
14
|
+
(block {
|
15
|
+
(send #rspec? {#SharedGroups.all #ExampleGroups.all} ...)
|
16
|
+
(send nil? #Includes.all ...)
|
17
|
+
} ...)
|
18
|
+
PATTERN
|
21
19
|
|
22
20
|
def lets
|
23
21
|
find_all_in_scope(node, :let?)
|
@@ -4,18 +4,44 @@ module RuboCop
|
|
4
4
|
module RSpec
|
5
5
|
module Language
|
6
6
|
# Helper methods to detect RSpec DSL used with send and block
|
7
|
+
# @deprecated Prefer using Node Pattern directly
|
8
|
+
# Use `'(block (send nil? #Example.all ...) ...)'` instead of
|
9
|
+
# `block_pattern('#Example.all')`
|
7
10
|
module NodePattern
|
11
|
+
# @deprecated Prefer using Node Pattern directly
|
8
12
|
def send_pattern(string)
|
13
|
+
deprecation_warning __method__
|
9
14
|
"(send #rspec? #{string} ...)"
|
10
15
|
end
|
11
16
|
|
17
|
+
# @deprecated Prefer using Node Pattern directly
|
12
18
|
def block_pattern(string)
|
19
|
+
deprecation_warning __method__
|
13
20
|
"(block #{send_pattern(string)} ...)"
|
14
21
|
end
|
15
22
|
|
23
|
+
# @deprecated Prefer using Node Pattern directly
|
16
24
|
def numblock_pattern(string)
|
25
|
+
deprecation_warning __method__
|
17
26
|
"(numblock #{send_pattern(string)} ...)"
|
18
27
|
end
|
28
|
+
|
29
|
+
# @deprecated Prefer using Node Pattern directly
|
30
|
+
def block_or_numblock_pattern(string)
|
31
|
+
deprecation_warning __method__
|
32
|
+
"{#{block_pattern(string)} #{numblock_pattern(string)}}"
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def deprecation_warning(method)
|
38
|
+
# Only warn in derived extensions' specs
|
39
|
+
return unless defined?(::RSpec)
|
40
|
+
|
41
|
+
Kernel.warn <<~MESSAGE, uplevel: 2
|
42
|
+
Usage of #{method} is deprecated. Use node pattern explicitly.
|
43
|
+
MESSAGE
|
44
|
+
end
|
19
45
|
end
|
20
46
|
end
|
21
47
|
end
|
@@ -20,52 +20,61 @@ module RuboCop
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# @!method rspec?(node)
|
23
|
-
def_node_matcher :rspec?, '{
|
23
|
+
def_node_matcher :rspec?, '{#explicit_rspec? nil?}'
|
24
|
+
|
25
|
+
# @!method explicit_rspec?(node)
|
26
|
+
def_node_matcher :explicit_rspec?, '(const {nil? cbase} :RSpec)'
|
24
27
|
|
25
28
|
# @!method example_group?(node)
|
26
|
-
def_node_matcher :example_group?,
|
29
|
+
def_node_matcher :example_group?, <<~PATTERN
|
30
|
+
({block numblock} (send #rspec? #ExampleGroups.all ...) ...)
|
31
|
+
PATTERN
|
27
32
|
|
28
33
|
# @!method shared_group?(node)
|
29
|
-
def_node_matcher :shared_group?,
|
34
|
+
def_node_matcher :shared_group?,
|
35
|
+
'(block (send #rspec? #SharedGroups.all ...) ...)'
|
30
36
|
|
31
37
|
# @!method spec_group?(node)
|
32
|
-
def_node_matcher :spec_group?,
|
33
|
-
|
38
|
+
def_node_matcher :spec_group?, <<~PATTERN
|
39
|
+
({block numblock} (send #rspec?
|
40
|
+
{#SharedGroups.all #ExampleGroups.all}
|
41
|
+
...) ...)
|
42
|
+
PATTERN
|
34
43
|
|
35
44
|
# @!method example_group_with_body?(node)
|
36
45
|
def_node_matcher :example_group_with_body?, <<-PATTERN
|
37
|
-
(block
|
46
|
+
(block (send #rspec? #ExampleGroups.all ...) args !nil?)
|
38
47
|
PATTERN
|
39
48
|
|
40
49
|
# @!method example?(node)
|
41
|
-
def_node_matcher :example?,
|
50
|
+
def_node_matcher :example?, '(block (send nil? #Examples.all ...) ...)'
|
42
51
|
|
43
52
|
# @!method hook?(node)
|
44
53
|
def_node_matcher :hook?, <<-PATTERN
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
54
|
+
{
|
55
|
+
(numblock (send nil? #Hooks.all ...) ...)
|
56
|
+
(block (send nil? #Hooks.all ...) ...)
|
57
|
+
}
|
49
58
|
PATTERN
|
50
59
|
|
51
60
|
# @!method let?(node)
|
52
61
|
def_node_matcher :let?, <<-PATTERN
|
53
62
|
{
|
54
|
-
|
55
|
-
(send
|
63
|
+
(block (send nil? #Helpers.all ...) ...)
|
64
|
+
(send nil? #Helpers.all _ block_pass)
|
56
65
|
}
|
57
66
|
PATTERN
|
58
67
|
|
59
68
|
# @!method include?(node)
|
60
69
|
def_node_matcher :include?, <<-PATTERN
|
61
70
|
{
|
62
|
-
|
63
|
-
|
71
|
+
(block (send nil? #Includes.all ...) ...)
|
72
|
+
(send nil? #Includes.all ...)
|
64
73
|
}
|
65
74
|
PATTERN
|
66
75
|
|
67
76
|
# @!method subject?(node)
|
68
|
-
def_node_matcher :subject?,
|
77
|
+
def_node_matcher :subject?, '(block (send nil? #Subjects.all ...) ...)'
|
69
78
|
|
70
79
|
module ExampleGroups # :nodoc:
|
71
80
|
class << self
|
data/lib/rubocop-rspec.rb
CHANGED
@@ -20,6 +20,7 @@ require_relative 'rubocop/rspec/factory_bot/language'
|
|
20
20
|
|
21
21
|
require_relative 'rubocop/cop/rspec/mixin/final_end_location'
|
22
22
|
require_relative 'rubocop/cop/rspec/mixin/inside_example_group'
|
23
|
+
require_relative 'rubocop/cop/rspec/mixin/location_help'
|
23
24
|
require_relative 'rubocop/cop/rspec/mixin/metadata'
|
24
25
|
require_relative 'rubocop/cop/rspec/mixin/namespace'
|
25
26
|
require_relative 'rubocop/cop/rspec/mixin/skip_or_pending'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Backus
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-04-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/rubocop/cop/rspec/around_block.rb
|
67
67
|
- lib/rubocop/cop/rspec/base.rb
|
68
68
|
- lib/rubocop/cop/rspec/be.rb
|
69
|
+
- lib/rubocop/cop/rspec/be_empty.rb
|
69
70
|
- lib/rubocop/cop/rspec/be_eq.rb
|
70
71
|
- lib/rubocop/cop/rspec/be_eql.rb
|
71
72
|
- lib/rubocop/cop/rspec/be_nil.rb
|
@@ -80,6 +81,7 @@ files:
|
|
80
81
|
- lib/rubocop/cop/rspec/capybara/visibility_matcher.rb
|
81
82
|
- lib/rubocop/cop/rspec/change_by_zero.rb
|
82
83
|
- lib/rubocop/cop/rspec/class_check.rb
|
84
|
+
- lib/rubocop/cop/rspec/contain_exactly.rb
|
83
85
|
- lib/rubocop/cop/rspec/context_method.rb
|
84
86
|
- lib/rubocop/cop/rspec/context_wording.rb
|
85
87
|
- lib/rubocop/cop/rspec/describe_class.rb
|
@@ -118,6 +120,7 @@ files:
|
|
118
120
|
- lib/rubocop/cop/rspec/implicit_block_expectation.rb
|
119
121
|
- lib/rubocop/cop/rspec/implicit_expect.rb
|
120
122
|
- lib/rubocop/cop/rspec/implicit_subject.rb
|
123
|
+
- lib/rubocop/cop/rspec/indexed_let.rb
|
121
124
|
- lib/rubocop/cop/rspec/instance_spy.rb
|
122
125
|
- lib/rubocop/cop/rspec/instance_variable.rb
|
123
126
|
- lib/rubocop/cop/rspec/it_behaves_like.rb
|
@@ -126,6 +129,7 @@ files:
|
|
126
129
|
- lib/rubocop/cop/rspec/leaky_constant_declaration.rb
|
127
130
|
- lib/rubocop/cop/rspec/let_before_examples.rb
|
128
131
|
- lib/rubocop/cop/rspec/let_setup.rb
|
132
|
+
- lib/rubocop/cop/rspec/match_array.rb
|
129
133
|
- lib/rubocop/cop/rspec/message_chain.rb
|
130
134
|
- lib/rubocop/cop/rspec/message_expectation.rb
|
131
135
|
- lib/rubocop/cop/rspec/message_spies.rb
|
@@ -134,6 +138,7 @@ files:
|
|
134
138
|
- lib/rubocop/cop/rspec/mixin/empty_line_separation.rb
|
135
139
|
- lib/rubocop/cop/rspec/mixin/final_end_location.rb
|
136
140
|
- lib/rubocop/cop/rspec/mixin/inside_example_group.rb
|
141
|
+
- lib/rubocop/cop/rspec/mixin/location_help.rb
|
137
142
|
- lib/rubocop/cop/rspec/mixin/metadata.rb
|
138
143
|
- lib/rubocop/cop/rspec/mixin/namespace.rb
|
139
144
|
- lib/rubocop/cop/rspec/mixin/skip_or_pending.rb
|
@@ -156,8 +161,10 @@ files:
|
|
156
161
|
- lib/rubocop/cop/rspec/rails/http_status.rb
|
157
162
|
- lib/rubocop/cop/rspec/rails/inferred_spec_type.rb
|
158
163
|
- lib/rubocop/cop/rspec/rails/minitest_assertions.rb
|
164
|
+
- lib/rubocop/cop/rspec/rails/travel_around.rb
|
159
165
|
- lib/rubocop/cop/rspec/receive_counts.rb
|
160
166
|
- lib/rubocop/cop/rspec/receive_never.rb
|
167
|
+
- lib/rubocop/cop/rspec/redundant_around.rb
|
161
168
|
- lib/rubocop/cop/rspec/repeated_description.rb
|
162
169
|
- lib/rubocop/cop/rspec/repeated_example.rb
|
163
170
|
- lib/rubocop/cop/rspec/repeated_example_group_body.rb
|
@@ -169,6 +176,7 @@ files:
|
|
169
176
|
- lib/rubocop/cop/rspec/shared_context.rb
|
170
177
|
- lib/rubocop/cop/rspec/shared_examples.rb
|
171
178
|
- lib/rubocop/cop/rspec/single_argument_message_chain.rb
|
179
|
+
- lib/rubocop/cop/rspec/skip_block_inside_example.rb
|
172
180
|
- lib/rubocop/cop/rspec/sort_metadata.rb
|
173
181
|
- lib/rubocop/cop/rspec/stubbed_mock.rb
|
174
182
|
- lib/rubocop/cop/rspec/subject_declaration.rb
|
@@ -221,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
229
|
- !ruby/object:Gem::Version
|
222
230
|
version: '0'
|
223
231
|
requirements: []
|
224
|
-
rubygems_version: 3.
|
232
|
+
rubygems_version: 3.4.10
|
225
233
|
signing_key:
|
226
234
|
specification_version: 4
|
227
235
|
summary: Code style checking for RSpec files
|