rubocop-rspec 2.23.0 → 2.26.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +61 -12
- data/config/default.yml +69 -3
- data/lib/rubocop/cop/rspec/around_block.rb +3 -3
- data/lib/rubocop/cop/rspec/be.rb +1 -1
- data/lib/rubocop/cop/rspec/be_eq.rb +1 -1
- data/lib/rubocop/cop/rspec/be_eql.rb +1 -1
- data/lib/rubocop/cop/rspec/be_nil.rb +2 -2
- data/lib/rubocop/cop/rspec/before_after_all.rb +7 -13
- data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +2 -2
- data/lib/rubocop/cop/rspec/change_by_zero.rb +3 -3
- data/lib/rubocop/cop/rspec/context_method.rb +2 -2
- data/lib/rubocop/cop/rspec/context_wording.rb +1 -1
- data/lib/rubocop/cop/rspec/describe_symbol.rb +1 -1
- data/lib/rubocop/cop/rspec/described_class.rb +5 -5
- data/lib/rubocop/cop/rspec/duplicated_metadata.rb +1 -1
- data/lib/rubocop/cop/rspec/empty_example_group.rb +2 -2
- data/lib/rubocop/cop/rspec/empty_line_after_example.rb +2 -2
- data/lib/rubocop/cop/rspec/empty_metadata.rb +46 -0
- data/lib/rubocop/cop/rspec/eq.rb +47 -0
- data/lib/rubocop/cop/rspec/example_length.rb +11 -5
- data/lib/rubocop/cop/rspec/example_wording.rb +11 -2
- data/lib/rubocop/cop/rspec/excessive_docstring_spacing.rb +4 -2
- data/lib/rubocop/cop/rspec/expect_change.rb +2 -2
- data/lib/rubocop/cop/rspec/file_path.rb +6 -0
- data/lib/rubocop/cop/rspec/focus.rb +4 -2
- data/lib/rubocop/cop/rspec/hook_argument.rb +2 -2
- data/lib/rubocop/cop/rspec/hooks_before_examples.rb +1 -1
- data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +2 -2
- data/lib/rubocop/cop/rspec/implicit_expect.rb +1 -1
- data/lib/rubocop/cop/rspec/implicit_subject.rb +2 -2
- data/lib/rubocop/cop/rspec/instance_spy.rb +2 -2
- data/lib/rubocop/cop/rspec/instance_variable.rb +2 -2
- data/lib/rubocop/cop/rspec/iterated_expectation.rb +3 -3
- data/lib/rubocop/cop/rspec/let_before_examples.rb +1 -1
- data/lib/rubocop/cop/rspec/let_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/message_expectation.rb +1 -1
- data/lib/rubocop/cop/rspec/metadata_style.rb +202 -0
- data/lib/rubocop/cop/rspec/mixin/file_help.rb +14 -0
- data/lib/rubocop/cop/rspec/mixin/metadata.rb +21 -7
- data/lib/rubocop/cop/rspec/mixin/skip_or_pending.rb +2 -2
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +2 -2
- data/lib/rubocop/cop/rspec/pending.rb +1 -1
- data/lib/rubocop/cop/rspec/pending_without_reason.rb +1 -1
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +6 -6
- data/lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/rails/have_http_status.rb +1 -1
- data/lib/rubocop/cop/rspec/rails/http_status.rb +29 -18
- data/lib/rubocop/cop/rspec/rails/minitest_assertions.rb +2 -2
- data/lib/rubocop/cop/rspec/rails/negation_be_valid.rb +10 -0
- data/lib/rubocop/cop/rspec/receive_counts.rb +1 -1
- data/lib/rubocop/cop/rspec/receive_messages.rb +11 -5
- data/lib/rubocop/cop/rspec/redundant_predicate_matcher.rb +65 -0
- data/lib/rubocop/cop/rspec/remove_const.rb +40 -0
- data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +1 -1
- data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +2 -2
- data/lib/rubocop/cop/rspec/repeated_include_example.rb +1 -1
- data/lib/rubocop/cop/rspec/return_from_stub.rb +1 -1
- data/lib/rubocop/cop/rspec/shared_context.rb +1 -1
- data/lib/rubocop/cop/rspec/shared_examples.rb +66 -20
- data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +1 -1
- data/lib/rubocop/cop/rspec/sort_metadata.rb +2 -1
- data/lib/rubocop/cop/rspec/spec_file_path_format.rb +133 -0
- data/lib/rubocop/cop/rspec/spec_file_path_suffix.rb +40 -0
- data/lib/rubocop/cop/rspec/stubbed_mock.rb +1 -1
- data/lib/rubocop/cop/rspec/subject_stub.rb +4 -4
- data/lib/rubocop/cop/rspec/unspecified_exception.rb +2 -2
- data/lib/rubocop/cop/rspec/variable_definition.rb +4 -4
- data/lib/rubocop/cop/rspec/verified_double_reference.rb +5 -5
- data/lib/rubocop/cop/rspec/verified_doubles.rb +1 -1
- data/lib/rubocop/cop/rspec/void_expect.rb +4 -3
- data/lib/rubocop/cop/rspec_cops.rb +7 -0
- data/lib/rubocop/rspec/language.rb +8 -8
- data/lib/rubocop/rspec/version.rb +1 -1
- data/lib/rubocop/rspec/wording.rb +8 -0
- data/lib/rubocop-rspec.rb +1 -0
- metadata +16 -8
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module RSpec
|
6
|
+
# Checks that spec file paths are consistent and well-formed.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# whatever_spec.rb # describe MyClass
|
11
|
+
# my_class_spec.rb # describe MyClass, '#method'
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# my_class_spec.rb # describe MyClass
|
15
|
+
# my_class_method_spec.rb # describe MyClass, '#method'
|
16
|
+
# my_class/method_spec.rb # describe MyClass, '#method'
|
17
|
+
#
|
18
|
+
# @example `CustomTransform: {RuboCop=>rubocop, RSpec=>rspec}` (default)
|
19
|
+
# # good
|
20
|
+
# rubocop_spec.rb # describe RuboCop
|
21
|
+
# rspec_spec.rb # describe RSpec
|
22
|
+
#
|
23
|
+
# @example `IgnoreMethods: false` (default)
|
24
|
+
# # bad
|
25
|
+
# my_class_spec.rb # describe MyClass, '#method'
|
26
|
+
#
|
27
|
+
# @example `IgnoreMethods: true`
|
28
|
+
# # good
|
29
|
+
# my_class_spec.rb # describe MyClass, '#method'
|
30
|
+
#
|
31
|
+
# @example `IgnoreMetadata: {type=>routing}` (default)
|
32
|
+
# # good
|
33
|
+
# whatever_spec.rb # describe MyClass, type: :routing do; end
|
34
|
+
#
|
35
|
+
class SpecFilePathFormat < Base
|
36
|
+
include TopLevelGroup
|
37
|
+
include Namespace
|
38
|
+
include FileHelp
|
39
|
+
|
40
|
+
MSG = 'Spec path should end with `%<suffix>s`.'
|
41
|
+
|
42
|
+
# @!method example_group_arguments(node)
|
43
|
+
def_node_matcher :example_group_arguments, <<~PATTERN
|
44
|
+
(block $(send #rspec? #ExampleGroups.all $_ $...) ...)
|
45
|
+
PATTERN
|
46
|
+
|
47
|
+
# @!method metadata_key_value(node)
|
48
|
+
def_node_search :metadata_key_value, '(pair (sym $_key) (sym $_value))'
|
49
|
+
|
50
|
+
def on_top_level_example_group(node)
|
51
|
+
return unless top_level_groups.one?
|
52
|
+
|
53
|
+
example_group_arguments(node) do |send_node, class_name, arguments|
|
54
|
+
next if !class_name.const_type? || ignore_metadata?(arguments)
|
55
|
+
|
56
|
+
ensure_correct_file_path(send_node, class_name, arguments)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def ensure_correct_file_path(send_node, class_name, arguments)
|
63
|
+
pattern = correct_path_pattern(class_name, arguments)
|
64
|
+
return if filename_ends_with?(pattern)
|
65
|
+
|
66
|
+
# For the suffix shown in the offense message, modify the regular
|
67
|
+
# expression pattern to resemble a glob pattern for clearer error
|
68
|
+
# messages.
|
69
|
+
suffix = pattern.sub('.*', '*').sub('[^/]*', '*').sub('\.', '.')
|
70
|
+
add_offense(send_node, message: format(MSG, suffix: suffix))
|
71
|
+
end
|
72
|
+
|
73
|
+
def ignore_metadata?(arguments)
|
74
|
+
arguments.any? do |argument|
|
75
|
+
metadata_key_value(argument).any? do |key, value|
|
76
|
+
ignore_metadata.values_at(key.to_s).include?(value.to_s)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def correct_path_pattern(class_name, arguments)
|
82
|
+
path = [expected_path(class_name)]
|
83
|
+
path << '.*' unless ignore?(arguments.first)
|
84
|
+
path << [name_pattern(arguments.first), '[^/]*_spec\.rb']
|
85
|
+
path.join
|
86
|
+
end
|
87
|
+
|
88
|
+
def name_pattern(method_name)
|
89
|
+
return if ignore?(method_name)
|
90
|
+
|
91
|
+
method_name.str_content.gsub(/\s/, '_').gsub(/\W/, '')
|
92
|
+
end
|
93
|
+
|
94
|
+
def ignore?(method_name)
|
95
|
+
!method_name&.str_type? || ignore_methods?
|
96
|
+
end
|
97
|
+
|
98
|
+
def expected_path(constant)
|
99
|
+
constants = namespace(constant) + constant.const_name.split('::')
|
100
|
+
|
101
|
+
File.join(
|
102
|
+
constants.map do |name|
|
103
|
+
custom_transform.fetch(name) { camel_to_snake_case(name) }
|
104
|
+
end
|
105
|
+
)
|
106
|
+
end
|
107
|
+
|
108
|
+
def camel_to_snake_case(string)
|
109
|
+
string
|
110
|
+
.gsub(/([^A-Z])([A-Z]+)/, '\1_\2')
|
111
|
+
.gsub(/([A-Z])([A-Z][^A-Z\d]+)/, '\1_\2')
|
112
|
+
.downcase
|
113
|
+
end
|
114
|
+
|
115
|
+
def custom_transform
|
116
|
+
cop_config.fetch('CustomTransform', {})
|
117
|
+
end
|
118
|
+
|
119
|
+
def ignore_methods?
|
120
|
+
cop_config['IgnoreMethods']
|
121
|
+
end
|
122
|
+
|
123
|
+
def ignore_metadata
|
124
|
+
cop_config.fetch('IgnoreMetadata', {})
|
125
|
+
end
|
126
|
+
|
127
|
+
def filename_ends_with?(pattern)
|
128
|
+
expanded_file_path.match?("#{pattern}$")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module RSpec
|
6
|
+
# Checks that spec file paths suffix are consistent and well-formed.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# my_class/foo_specorb.rb # describe MyClass
|
11
|
+
# spec/models/user.rb # describe User
|
12
|
+
# spec/models/user_specxrb # describe User
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# my_class_spec.rb # describe MyClass
|
16
|
+
#
|
17
|
+
# # good - shared examples are allowed
|
18
|
+
# spec/models/user.rb # shared_examples_for 'foo'
|
19
|
+
#
|
20
|
+
class SpecFilePathSuffix < Base
|
21
|
+
include TopLevelGroup
|
22
|
+
include FileHelp
|
23
|
+
|
24
|
+
MSG = 'Spec path should end with `_spec.rb`.'
|
25
|
+
|
26
|
+
def on_top_level_example_group(node)
|
27
|
+
example_group?(node) do
|
28
|
+
add_global_offense(MSG) unless correct_path?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def correct_path?
|
35
|
+
expanded_file_path.end_with?('_spec.rb')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
#
|
32
32
|
# @param node [RuboCop::AST::Node]
|
33
33
|
# @return [Array<RuboCop::AST::Node>] matching nodes
|
34
|
-
def_node_matcher :message_expectation?,
|
34
|
+
def_node_matcher :message_expectation?, <<~PATTERN
|
35
35
|
{
|
36
36
|
(send nil? { :receive :receive_message_chain } ...) # receive(:foo)
|
37
37
|
(send (send nil? :receive ...) :with ...) # receive(:foo).with('bar')
|
@@ -68,7 +68,7 @@ module RuboCop
|
|
68
68
|
# @param node [RuboCop::AST::Node]
|
69
69
|
#
|
70
70
|
# @yield [Symbol] subject name
|
71
|
-
def_node_matcher :subject?,
|
71
|
+
def_node_matcher :subject?, <<~PATTERN
|
72
72
|
(block
|
73
73
|
(send nil?
|
74
74
|
{ #Subjects.all (sym $_) | $#Subjects.all }
|
@@ -77,7 +77,7 @@ module RuboCop
|
|
77
77
|
|
78
78
|
# @!method let?(node)
|
79
79
|
# Find a memoized helper
|
80
|
-
def_node_matcher :let?,
|
80
|
+
def_node_matcher :let?, <<~PATTERN
|
81
81
|
(block
|
82
82
|
(send nil? :let (sym $_)
|
83
83
|
) args ...)
|
@@ -94,7 +94,7 @@ module RuboCop
|
|
94
94
|
# expect(foo).to receive(:bar).with(1)
|
95
95
|
# expect(foo).to receive(:bar).with(1).and_return(2)
|
96
96
|
#
|
97
|
-
def_node_matcher :message_expectation?,
|
97
|
+
def_node_matcher :message_expectation?, <<~PATTERN
|
98
98
|
(send
|
99
99
|
{
|
100
100
|
(send nil? { :expect :allow } (send nil? %))
|
@@ -106,7 +106,7 @@ module RuboCop
|
|
106
106
|
PATTERN
|
107
107
|
|
108
108
|
# @!method message_expectation_matcher?(node)
|
109
|
-
def_node_search :message_expectation_matcher?,
|
109
|
+
def_node_search :message_expectation_matcher?, <<~PATTERN
|
110
110
|
(send nil? {
|
111
111
|
:receive :receive_messages :receive_message_chain :have_received
|
112
112
|
} ...)
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
35
35
|
RESTRICT_ON_SEND = %i[to].freeze
|
36
36
|
|
37
37
|
# @!method empty_raise_error_or_exception(node)
|
38
|
-
def_node_matcher :empty_raise_error_or_exception,
|
38
|
+
def_node_matcher :empty_raise_error_or_exception, <<~PATTERN
|
39
39
|
(send
|
40
40
|
(block
|
41
41
|
(send nil? :expect) ...)
|
@@ -57,7 +57,7 @@ module RuboCop
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def block_with_args?(node)
|
60
|
-
return unless node&.block_type?
|
60
|
+
return false unless node&.block_type?
|
61
61
|
|
62
62
|
node.arguments?
|
63
63
|
end
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
35
35
|
return unless inside_example_group?(node)
|
36
36
|
|
37
37
|
variable_definition?(node) do |variable|
|
38
|
-
next unless
|
38
|
+
next unless style_offense?(variable)
|
39
39
|
|
40
40
|
add_offense(
|
41
41
|
variable,
|
@@ -59,9 +59,9 @@ module RuboCop
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
63
|
-
style == :symbols && string?(variable) ||
|
64
|
-
style == :strings && symbol?(variable)
|
62
|
+
def style_offense?(variable)
|
63
|
+
(style == :symbols && string?(variable)) ||
|
64
|
+
(style == :strings && symbol?(variable))
|
65
65
|
end
|
66
66
|
|
67
67
|
def string?(node)
|
@@ -79,8 +79,8 @@ module RuboCop
|
|
79
79
|
expression = class_reference.source_range
|
80
80
|
|
81
81
|
add_offense(expression, message: message) do |corrector|
|
82
|
-
|
83
|
-
corrector.replace(expression, correct_style(
|
82
|
+
offense = class_reference.source
|
83
|
+
corrector.replace(expression, correct_style(offense))
|
84
84
|
|
85
85
|
opposite_style_detected
|
86
86
|
end
|
@@ -98,11 +98,11 @@ module RuboCop
|
|
98
98
|
class_reference_style != style
|
99
99
|
end
|
100
100
|
|
101
|
-
def correct_style(
|
101
|
+
def correct_style(offense)
|
102
102
|
if style == :string
|
103
|
-
"'#{
|
103
|
+
"'#{offense}'"
|
104
104
|
else
|
105
|
-
|
105
|
+
offense.gsub(/^['"]|['"]$/, '')
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
@@ -18,12 +18,12 @@ module RuboCop
|
|
18
18
|
RESTRICT_ON_SEND = %i[expect].freeze
|
19
19
|
|
20
20
|
# @!method expect?(node)
|
21
|
-
def_node_matcher :expect?,
|
21
|
+
def_node_matcher :expect?, <<~PATTERN
|
22
22
|
(send nil? :expect ...)
|
23
23
|
PATTERN
|
24
24
|
|
25
25
|
# @!method expect_block?(node)
|
26
|
-
def_node_matcher :expect_block?,
|
26
|
+
def_node_matcher :expect_block?, <<~PATTERN
|
27
27
|
(block #expect? (args) _body)
|
28
28
|
PATTERN
|
29
29
|
|
@@ -51,7 +51,8 @@ module RuboCop
|
|
51
51
|
parent = expect.parent
|
52
52
|
return true unless parent
|
53
53
|
return true if parent.begin_type?
|
54
|
-
|
54
|
+
|
55
|
+
parent.block_type? && parent.body == expect
|
55
56
|
end
|
56
57
|
end
|
57
58
|
end
|
@@ -57,6 +57,8 @@ require_relative 'rspec/empty_line_after_example_group'
|
|
57
57
|
require_relative 'rspec/empty_line_after_final_let'
|
58
58
|
require_relative 'rspec/empty_line_after_hook'
|
59
59
|
require_relative 'rspec/empty_line_after_subject'
|
60
|
+
require_relative 'rspec/empty_metadata'
|
61
|
+
require_relative 'rspec/eq'
|
60
62
|
require_relative 'rspec/example_length'
|
61
63
|
require_relative 'rspec/example_without_description'
|
62
64
|
require_relative 'rspec/example_wording'
|
@@ -86,6 +88,7 @@ require_relative 'rspec/match_array'
|
|
86
88
|
require_relative 'rspec/message_chain'
|
87
89
|
require_relative 'rspec/message_expectation'
|
88
90
|
require_relative 'rspec/message_spies'
|
91
|
+
require_relative 'rspec/metadata_style'
|
89
92
|
require_relative 'rspec/missing_example_group_argument'
|
90
93
|
require_relative 'rspec/multiple_describes'
|
91
94
|
require_relative 'rspec/multiple_expectations'
|
@@ -103,6 +106,8 @@ require_relative 'rspec/receive_counts'
|
|
103
106
|
require_relative 'rspec/receive_messages'
|
104
107
|
require_relative 'rspec/receive_never'
|
105
108
|
require_relative 'rspec/redundant_around'
|
109
|
+
require_relative 'rspec/redundant_predicate_matcher'
|
110
|
+
require_relative 'rspec/remove_const'
|
106
111
|
require_relative 'rspec/repeated_description'
|
107
112
|
require_relative 'rspec/repeated_example'
|
108
113
|
require_relative 'rspec/repeated_example_group_body'
|
@@ -116,6 +121,8 @@ require_relative 'rspec/shared_examples'
|
|
116
121
|
require_relative 'rspec/single_argument_message_chain'
|
117
122
|
require_relative 'rspec/skip_block_inside_example'
|
118
123
|
require_relative 'rspec/sort_metadata'
|
124
|
+
require_relative 'rspec/spec_file_path_format'
|
125
|
+
require_relative 'rspec/spec_file_path_suffix'
|
119
126
|
require_relative 'rspec/stubbed_mock'
|
120
127
|
require_relative 'rspec/subject_declaration'
|
121
128
|
require_relative 'rspec/subject_stub'
|
@@ -42,7 +42,7 @@ module RuboCop
|
|
42
42
|
PATTERN
|
43
43
|
|
44
44
|
# @!method example_group_with_body?(node)
|
45
|
-
def_node_matcher :example_group_with_body?,
|
45
|
+
def_node_matcher :example_group_with_body?, <<~PATTERN
|
46
46
|
(block (send #rspec? #ExampleGroups.all ...) args !nil?)
|
47
47
|
PATTERN
|
48
48
|
|
@@ -50,15 +50,15 @@ module RuboCop
|
|
50
50
|
def_node_matcher :example?, '(block (send nil? #Examples.all ...) ...)'
|
51
51
|
|
52
52
|
# @!method hook?(node)
|
53
|
-
def_node_matcher :hook?,
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
def_node_matcher :hook?, <<~PATTERN
|
54
|
+
{
|
55
|
+
(numblock (send nil? #Hooks.all ...) ...)
|
56
|
+
(block (send nil? #Hooks.all ...) ...)
|
57
|
+
}
|
58
58
|
PATTERN
|
59
59
|
|
60
60
|
# @!method let?(node)
|
61
|
-
def_node_matcher :let?,
|
61
|
+
def_node_matcher :let?, <<~PATTERN
|
62
62
|
{
|
63
63
|
(block (send nil? #Helpers.all ...) ...)
|
64
64
|
(send nil? #Helpers.all _ block_pass)
|
@@ -66,7 +66,7 @@ module RuboCop
|
|
66
66
|
PATTERN
|
67
67
|
|
68
68
|
# @!method include?(node)
|
69
|
-
def_node_matcher :include?,
|
69
|
+
def_node_matcher :include?, <<~PATTERN
|
70
70
|
{
|
71
71
|
(block (send nil? #Includes.all ...) ...)
|
72
72
|
(send nil? #Includes.all ...)
|
@@ -6,6 +6,8 @@ module RuboCop
|
|
6
6
|
class Wording
|
7
7
|
SHOULDNT_PREFIX = /\Ashould(?:n't| not)\b/i.freeze
|
8
8
|
SHOULDNT_BE_PREFIX = /#{SHOULDNT_PREFIX} be\b/i.freeze
|
9
|
+
WILL_NOT_PREFIX = /\Awill not\b/i.freeze
|
10
|
+
WONT_PREFIX = /\Awon't\b/i.freeze
|
9
11
|
ES_SUFFIX_PATTERN = /(?:o|s|x|ch|sh|z)\z/i.freeze
|
10
12
|
IES_SUFFIX_PATTERN = /[^aeou]y\z/i.freeze
|
11
13
|
|
@@ -15,16 +17,22 @@ module RuboCop
|
|
15
17
|
@replacements = replace
|
16
18
|
end
|
17
19
|
|
20
|
+
# rubocop:disable Metrics/MethodLength
|
18
21
|
def rewrite
|
19
22
|
case text
|
20
23
|
when SHOULDNT_BE_PREFIX
|
21
24
|
replace_prefix(SHOULDNT_BE_PREFIX, 'is not')
|
22
25
|
when SHOULDNT_PREFIX
|
23
26
|
replace_prefix(SHOULDNT_PREFIX, 'does not')
|
27
|
+
when WILL_NOT_PREFIX
|
28
|
+
replace_prefix(WILL_NOT_PREFIX, 'does not')
|
29
|
+
when WONT_PREFIX
|
30
|
+
replace_prefix(WONT_PREFIX, 'does not')
|
24
31
|
else
|
25
32
|
remove_should_and_pluralize
|
26
33
|
end
|
27
34
|
end
|
35
|
+
# rubocop:enable Metrics/MethodLength
|
28
36
|
|
29
37
|
private
|
30
38
|
|
data/lib/rubocop-rspec.rb
CHANGED
@@ -17,6 +17,7 @@ require_relative 'rubocop/rspec/wording'
|
|
17
17
|
# Dependent on `RuboCop::RSpec::Language::NodePattern`.
|
18
18
|
require_relative 'rubocop/rspec/language'
|
19
19
|
|
20
|
+
require_relative 'rubocop/cop/rspec/mixin/file_help'
|
20
21
|
require_relative 'rubocop/cop/rspec/mixin/final_end_location'
|
21
22
|
require_relative 'rubocop/cop/rspec/mixin/inside_example_group'
|
22
23
|
require_relative 'rubocop/cop/rspec/mixin/location_help'
|
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.26.1
|
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:
|
13
|
+
date: 2024-01-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
21
|
+
version: '1.40'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '1.
|
28
|
+
version: '1.40'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rubocop-capybara
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,9 +54,9 @@ dependencies:
|
|
54
54
|
- - "~>"
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '2.22'
|
57
|
-
description: |
|
58
|
-
|
59
|
-
|
57
|
+
description: |
|
58
|
+
Code style checking for RSpec files.
|
59
|
+
A plugin for the RuboCop code style enforcing & linting tool.
|
60
60
|
email:
|
61
61
|
- johncbackus@gmail.com
|
62
62
|
- ian@nevir.net
|
@@ -112,6 +112,8 @@ files:
|
|
112
112
|
- lib/rubocop/cop/rspec/empty_line_after_final_let.rb
|
113
113
|
- lib/rubocop/cop/rspec/empty_line_after_hook.rb
|
114
114
|
- lib/rubocop/cop/rspec/empty_line_after_subject.rb
|
115
|
+
- lib/rubocop/cop/rspec/empty_metadata.rb
|
116
|
+
- lib/rubocop/cop/rspec/eq.rb
|
115
117
|
- lib/rubocop/cop/rspec/example_length.rb
|
116
118
|
- lib/rubocop/cop/rspec/example_without_description.rb
|
117
119
|
- lib/rubocop/cop/rspec/example_wording.rb
|
@@ -147,9 +149,11 @@ files:
|
|
147
149
|
- lib/rubocop/cop/rspec/message_chain.rb
|
148
150
|
- lib/rubocop/cop/rspec/message_expectation.rb
|
149
151
|
- lib/rubocop/cop/rspec/message_spies.rb
|
152
|
+
- lib/rubocop/cop/rspec/metadata_style.rb
|
150
153
|
- lib/rubocop/cop/rspec/missing_example_group_argument.rb
|
151
154
|
- lib/rubocop/cop/rspec/mixin/comments_help.rb
|
152
155
|
- lib/rubocop/cop/rspec/mixin/empty_line_separation.rb
|
156
|
+
- lib/rubocop/cop/rspec/mixin/file_help.rb
|
153
157
|
- lib/rubocop/cop/rspec/mixin/final_end_location.rb
|
154
158
|
- lib/rubocop/cop/rspec/mixin/inside_example_group.rb
|
155
159
|
- lib/rubocop/cop/rspec/mixin/location_help.rb
|
@@ -181,6 +185,8 @@ files:
|
|
181
185
|
- lib/rubocop/cop/rspec/receive_messages.rb
|
182
186
|
- lib/rubocop/cop/rspec/receive_never.rb
|
183
187
|
- lib/rubocop/cop/rspec/redundant_around.rb
|
188
|
+
- lib/rubocop/cop/rspec/redundant_predicate_matcher.rb
|
189
|
+
- lib/rubocop/cop/rspec/remove_const.rb
|
184
190
|
- lib/rubocop/cop/rspec/repeated_description.rb
|
185
191
|
- lib/rubocop/cop/rspec/repeated_example.rb
|
186
192
|
- lib/rubocop/cop/rspec/repeated_example_group_body.rb
|
@@ -194,6 +200,8 @@ files:
|
|
194
200
|
- lib/rubocop/cop/rspec/single_argument_message_chain.rb
|
195
201
|
- lib/rubocop/cop/rspec/skip_block_inside_example.rb
|
196
202
|
- lib/rubocop/cop/rspec/sort_metadata.rb
|
203
|
+
- lib/rubocop/cop/rspec/spec_file_path_format.rb
|
204
|
+
- lib/rubocop/cop/rspec/spec_file_path_suffix.rb
|
197
205
|
- lib/rubocop/cop/rspec/stubbed_mock.rb
|
198
206
|
- lib/rubocop/cop/rspec/subject_declaration.rb
|
199
207
|
- lib/rubocop/cop/rspec/subject_stub.rb
|
@@ -243,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
251
|
- !ruby/object:Gem::Version
|
244
252
|
version: '0'
|
245
253
|
requirements: []
|
246
|
-
rubygems_version: 3.4.
|
254
|
+
rubygems_version: 3.4.21
|
247
255
|
signing_key:
|
248
256
|
specification_version: 4
|
249
257
|
summary: Code style checking for RSpec files
|