rubocop-rspec 2.29.1 → 3.5.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 +92 -3
- data/README.md +21 -5
- data/config/default.yml +64 -269
- data/config/obsoletion.yml +20 -21
- data/lib/rubocop/cop/rspec/around_block.rb +2 -4
- data/lib/rubocop/cop/rspec/base.rb +0 -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 +4 -0
- data/lib/rubocop/cop/rspec/change_by_zero.rb +4 -5
- data/lib/rubocop/cop/rspec/contain_exactly.rb +1 -0
- data/lib/rubocop/cop/rspec/context_wording.rb +15 -9
- data/lib/rubocop/cop/rspec/dialect.rb +13 -0
- data/lib/rubocop/cop/rspec/empty_example_group.rb +2 -0
- data/lib/rubocop/cop/rspec/empty_metadata.rb +1 -0
- data/lib/rubocop/cop/rspec/example_wording.rb +3 -5
- data/lib/rubocop/cop/rspec/excessive_docstring_spacing.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_actual.rb +3 -3
- data/lib/rubocop/cop/rspec/expect_in_hook.rb +1 -1
- data/lib/rubocop/cop/rspec/expect_in_let.rb +42 -0
- data/lib/rubocop/cop/rspec/focus.rb +14 -16
- data/lib/rubocop/cop/rspec/implicit_expect.rb +3 -3
- data/lib/rubocop/cop/rspec/implicit_subject.rb +8 -0
- data/lib/rubocop/cop/rspec/indexed_let.rb +6 -3
- data/lib/rubocop/cop/rspec/leaky_constant_declaration.rb +1 -1
- data/lib/rubocop/cop/rspec/match_array.rb +1 -0
- data/lib/rubocop/cop/rspec/message_spies.rb +4 -0
- data/lib/rubocop/cop/rspec/metadata_style.rb +1 -6
- data/lib/rubocop/cop/rspec/missing_expectation_target_method.rb +54 -0
- data/lib/rubocop/cop/rspec/mixin/metadata.rb +5 -8
- data/lib/rubocop/cop/rspec/mixin/top_level_group.rb +7 -0
- data/lib/rubocop/cop/rspec/multiple_describes.rb +1 -1
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +4 -4
- data/lib/rubocop/cop/rspec/multiple_memoized_helpers.rb +4 -5
- data/lib/rubocop/cop/rspec/named_subject.rb +5 -2
- data/lib/rubocop/cop/rspec/nested_groups.rb +2 -1
- data/lib/rubocop/cop/rspec/pending_without_reason.rb +0 -5
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +25 -11
- data/lib/rubocop/cop/rspec/remove_const.rb +0 -1
- data/lib/rubocop/cop/rspec/repeated_subject_call.rb +1 -0
- data/lib/rubocop/cop/rspec/return_from_stub.rb +5 -4
- data/lib/rubocop/cop/rspec/scattered_setup.rb +7 -1
- data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +3 -4
- data/lib/rubocop/cop/rspec/sort_metadata.rb +22 -8
- data/lib/rubocop/cop/rspec/stubbed_mock.rb +15 -10
- data/lib/rubocop/cop/rspec/subject_stub.rb +2 -2
- data/lib/rubocop/cop/rspec/unspecified_exception.rb +21 -14
- data/lib/rubocop/cop/rspec/verified_double_reference.rb +14 -53
- data/lib/rubocop/cop/rspec/void_expect.rb +6 -1
- data/lib/rubocop/cop/rspec_cops.rb +2 -25
- data/lib/rubocop/rspec/concept.rb +0 -1
- data/lib/rubocop/rspec/config_formatter.rb +4 -32
- data/lib/rubocop/rspec/cop/generator.rb +25 -0
- data/lib/rubocop/rspec/description_extractor.rb +2 -2
- data/lib/rubocop/rspec/hook.rb +1 -1
- data/lib/rubocop/rspec/language.rb +0 -1
- data/lib/rubocop/rspec/node.rb +1 -1
- data/lib/rubocop/rspec/plugin.rb +37 -0
- data/lib/rubocop/rspec/shared_contexts/default_rspec_language_config_context.rb +1 -1
- data/lib/rubocop/rspec/version.rb +1 -1
- data/lib/rubocop/rspec/wording.rb +2 -4
- data/lib/rubocop/rspec.rb +0 -7
- data/lib/rubocop-rspec.rb +2 -20
- metadata +18 -62
- data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +0 -39
- data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +0 -104
- data/lib/rubocop/cop/rspec/capybara/match_style.rb +0 -38
- data/lib/rubocop/cop/rspec/capybara/negation_matcher.rb +0 -33
- data/lib/rubocop/cop/rspec/capybara/specific_actions.rb +0 -29
- data/lib/rubocop/cop/rspec/capybara/specific_finders.rb +0 -24
- data/lib/rubocop/cop/rspec/capybara/specific_matcher.rb +0 -35
- data/lib/rubocop/cop/rspec/capybara/visibility_matcher.rb +0 -36
- data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +0 -35
- data/lib/rubocop/cop/rspec/factory_bot/consistent_parentheses_style.rb +0 -50
- data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +0 -40
- data/lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb +0 -29
- data/lib/rubocop/cop/rspec/factory_bot/factory_name_style.rb +0 -33
- data/lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb +0 -55
- data/lib/rubocop/cop/rspec/file_path.rb +0 -179
- data/lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb +0 -27
- data/lib/rubocop/cop/rspec/rails/have_http_status.rb +0 -35
- data/lib/rubocop/cop/rspec/rails/http_status.rb +0 -61
- data/lib/rubocop/cop/rspec/rails/inferred_spec_type.rb +0 -62
- data/lib/rubocop/cop/rspec/rails/minitest_assertions.rb +0 -39
- data/lib/rubocop/cop/rspec/rails/negation_be_valid.rb +0 -39
- data/lib/rubocop/cop/rspec/rails/travel_around.rb +0 -34
- data/lib/rubocop/rspec/inject.rb +0 -18
- data/lib/rubocop/rspec/language/node_pattern.rb +0 -48
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module RSpec
|
5
|
+
module Cop
|
6
|
+
# Source and spec generator for new cops
|
7
|
+
#
|
8
|
+
# This generator will take a cop name and generate a source file
|
9
|
+
# and spec file when given a valid qualified cop name.
|
10
|
+
# @api private
|
11
|
+
class Generator < RuboCop::Cop::Generator
|
12
|
+
def todo
|
13
|
+
<<~TODO
|
14
|
+
Do 4 steps:
|
15
|
+
1. Modify the description of #{badge} in config/default.yml
|
16
|
+
2. Implement your new cop in the generated file!
|
17
|
+
3. Add an entry about new cop to CHANGELOG.md
|
18
|
+
4. Commit your new cop with a message such as
|
19
|
+
e.g. "Add new `#{badge}` cop"
|
20
|
+
TODO
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -62,8 +62,8 @@ module RuboCop
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def cop_subclass?
|
65
|
-
|
66
|
-
|
65
|
+
[RSPEC_COP_CLASS_NAME,
|
66
|
+
RUBOCOP_COP_CLASS_NAME].include?(yardoc.superclass.path)
|
67
67
|
end
|
68
68
|
|
69
69
|
def abstract?
|
data/lib/rubocop/rspec/hook.rb
CHANGED
data/lib/rubocop/rspec/node.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'lint_roller'
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module RSpec
|
7
|
+
# A plugin that integrates RuboCop RSpec with RuboCop's plugin system.
|
8
|
+
class Plugin < LintRoller::Plugin
|
9
|
+
# :nocov:
|
10
|
+
def about
|
11
|
+
LintRoller::About.new(
|
12
|
+
name: 'rubocop-rspec',
|
13
|
+
version: Version::STRING,
|
14
|
+
homepage: 'https://github.com/rubocop/rubocop-rspec',
|
15
|
+
description: 'Code style checking for RSpec files.'
|
16
|
+
)
|
17
|
+
end
|
18
|
+
# :nocov:
|
19
|
+
|
20
|
+
def supported?(context)
|
21
|
+
context.engine == :rubocop
|
22
|
+
end
|
23
|
+
|
24
|
+
def rules(_context)
|
25
|
+
project_root = Pathname.new(__dir__).join('../../..')
|
26
|
+
|
27
|
+
ConfigObsoletion.files << project_root.join('config', 'obsoletion.yml')
|
28
|
+
|
29
|
+
LintRoller::Rules.new(
|
30
|
+
type: :path,
|
31
|
+
config_format: :rubocop,
|
32
|
+
value: project_root.join('config/default.yml')
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -21,7 +21,7 @@ RSpec.shared_context 'with default RSpec/Language config' do
|
|
21
21
|
when Array
|
22
22
|
object.map { |item| deep_dup(item) }
|
23
23
|
when Hash
|
24
|
-
object.transform_values(
|
24
|
+
object.transform_values { |value| deep_dup(value) }
|
25
25
|
else
|
26
26
|
object # only collections undergo modifications and need duping
|
27
27
|
end
|
@@ -4,10 +4,10 @@ module RuboCop
|
|
4
4
|
module RSpec
|
5
5
|
# RSpec example wording rewriter
|
6
6
|
class Wording
|
7
|
-
SHOULDNT_PREFIX = /\Ashould(?:n't| not)\b/i.freeze
|
7
|
+
SHOULDNT_PREFIX = /\Ashould(?:n't|n’t| not)\b/i.freeze
|
8
8
|
SHOULDNT_BE_PREFIX = /#{SHOULDNT_PREFIX} be\b/i.freeze
|
9
9
|
WILL_NOT_PREFIX = /\Awill not\b/i.freeze
|
10
|
-
WONT_PREFIX = /\
|
10
|
+
WONT_PREFIX = /\Awo(?:n't|n’t)\b/i.freeze
|
11
11
|
ES_SUFFIX_PATTERN = /(?:o|s|x|ch|sh|z)\z/i.freeze
|
12
12
|
IES_SUFFIX_PATTERN = /[^aeou]y\z/i.freeze
|
13
13
|
|
@@ -17,7 +17,6 @@ module RuboCop
|
|
17
17
|
@replacements = replace
|
18
18
|
end
|
19
19
|
|
20
|
-
# rubocop:disable Metrics/MethodLength
|
21
20
|
def rewrite
|
22
21
|
case text
|
23
22
|
when SHOULDNT_BE_PREFIX
|
@@ -32,7 +31,6 @@ module RuboCop
|
|
32
31
|
remove_should_and_pluralize
|
33
32
|
end
|
34
33
|
end
|
35
|
-
# rubocop:enable Metrics/MethodLength
|
36
34
|
|
37
35
|
private
|
38
36
|
|
data/lib/rubocop/rspec.rb
CHANGED
@@ -3,12 +3,5 @@
|
|
3
3
|
module RuboCop
|
4
4
|
# RuboCop RSpec project namespace
|
5
5
|
module RSpec
|
6
|
-
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
|
7
|
-
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
|
8
|
-
|
9
|
-
private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)
|
10
|
-
|
11
|
-
::RuboCop::ConfigObsoletion.files << PROJECT_ROOT.join('config',
|
12
|
-
'obsoletion.yml')
|
13
6
|
end
|
14
7
|
end
|
data/lib/rubocop-rspec.rb
CHANGED
@@ -4,19 +4,14 @@ require 'pathname'
|
|
4
4
|
require 'yaml'
|
5
5
|
|
6
6
|
require 'rubocop'
|
7
|
-
require 'rubocop-capybara'
|
8
|
-
require 'rubocop-factory_bot'
|
9
7
|
|
10
8
|
require_relative 'rubocop/rspec'
|
11
|
-
require_relative 'rubocop/rspec/
|
12
|
-
require_relative 'rubocop/rspec/language/node_pattern'
|
9
|
+
require_relative 'rubocop/rspec/language'
|
13
10
|
require_relative 'rubocop/rspec/node'
|
11
|
+
require_relative 'rubocop/rspec/plugin'
|
14
12
|
require_relative 'rubocop/rspec/version'
|
15
13
|
require_relative 'rubocop/rspec/wording'
|
16
14
|
|
17
|
-
# Dependent on `RuboCop::RSpec::Language::NodePattern`.
|
18
|
-
require_relative 'rubocop/rspec/language'
|
19
|
-
|
20
15
|
require_relative 'rubocop/cop/rspec/mixin/file_help'
|
21
16
|
require_relative 'rubocop/cop/rspec/mixin/final_end_location'
|
22
17
|
require_relative 'rubocop/cop/rspec/mixin/inside_example_group'
|
@@ -39,11 +34,6 @@ require_relative 'rubocop/rspec/example'
|
|
39
34
|
require_relative 'rubocop/rspec/example_group'
|
40
35
|
require_relative 'rubocop/rspec/hook'
|
41
36
|
|
42
|
-
# need after `require 'rubocop/cop/rspec/base'``
|
43
|
-
require 'rubocop-rspec_rails'
|
44
|
-
|
45
|
-
RuboCop::RSpec::Inject.defaults!
|
46
|
-
|
47
37
|
require_relative 'rubocop/cop/rspec_cops'
|
48
38
|
|
49
39
|
# We have to register our autocorrect incompatibilities in RuboCop's cops
|
@@ -58,12 +48,4 @@ RuboCop::Cop::Layout::ExtraSpacing.singleton_class.prepend(
|
|
58
48
|
end
|
59
49
|
)
|
60
50
|
|
61
|
-
RuboCop::Cop::Style::TrailingCommaInArguments.singleton_class.prepend(
|
62
|
-
Module.new do
|
63
|
-
def autocorrect_incompatible_with
|
64
|
-
super.push(RuboCop::Cop::RSpec::Capybara::CurrentPathExpectation)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
)
|
68
|
-
|
69
51
|
RuboCop::AST::Node.include(RuboCop::RSpec::Node)
|
metadata
CHANGED
@@ -1,73 +1,50 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Backus
|
8
8
|
- Ian MacLeod
|
9
9
|
- Nils Gemeinhardt
|
10
|
-
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2025-02-16 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
15
|
+
name: lint_roller
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
18
|
- - "~>"
|
20
19
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
20
|
+
version: '1.1'
|
22
21
|
type: :runtime
|
23
22
|
prerelease: false
|
24
23
|
version_requirements: !ruby/object:Gem::Requirement
|
25
24
|
requirements:
|
26
25
|
- - "~>"
|
27
26
|
- !ruby/object:Gem::Version
|
28
|
-
version: '1.
|
27
|
+
version: '1.1'
|
29
28
|
- !ruby/object:Gem::Dependency
|
30
|
-
name: rubocop
|
29
|
+
name: rubocop
|
31
30
|
requirement: !ruby/object:Gem::Requirement
|
32
31
|
requirements:
|
33
32
|
- - "~>"
|
34
33
|
- !ruby/object:Gem::Version
|
35
|
-
version: '
|
36
|
-
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '2.17'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: rubocop-factory_bot
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
34
|
+
version: '1.72'
|
35
|
+
- - ">="
|
48
36
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
37
|
+
version: 1.72.1
|
50
38
|
type: :runtime
|
51
39
|
prerelease: false
|
52
40
|
version_requirements: !ruby/object:Gem::Requirement
|
53
41
|
requirements:
|
54
42
|
- - "~>"
|
55
43
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
57
|
-
-
|
58
|
-
name: rubocop-rspec_rails
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - "~>"
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '2.28'
|
64
|
-
type: :runtime
|
65
|
-
prerelease: false
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
44
|
+
version: '1.72'
|
45
|
+
- - ">="
|
69
46
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
47
|
+
version: 1.72.1
|
71
48
|
description: |
|
72
49
|
Code style checking for RSpec files.
|
73
50
|
A plugin for the RuboCop code style enforcing & linting tool.
|
@@ -99,14 +76,6 @@ files:
|
|
99
76
|
- lib/rubocop/cop/rspec/be_eql.rb
|
100
77
|
- lib/rubocop/cop/rspec/be_nil.rb
|
101
78
|
- lib/rubocop/cop/rspec/before_after_all.rb
|
102
|
-
- lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
|
103
|
-
- lib/rubocop/cop/rspec/capybara/feature_methods.rb
|
104
|
-
- lib/rubocop/cop/rspec/capybara/match_style.rb
|
105
|
-
- lib/rubocop/cop/rspec/capybara/negation_matcher.rb
|
106
|
-
- lib/rubocop/cop/rspec/capybara/specific_actions.rb
|
107
|
-
- lib/rubocop/cop/rspec/capybara/specific_finders.rb
|
108
|
-
- lib/rubocop/cop/rspec/capybara/specific_matcher.rb
|
109
|
-
- lib/rubocop/cop/rspec/capybara/visibility_matcher.rb
|
110
79
|
- lib/rubocop/cop/rspec/change_by_zero.rb
|
111
80
|
- lib/rubocop/cop/rspec/class_check.rb
|
112
81
|
- lib/rubocop/cop/rspec/contain_exactly.rb
|
@@ -136,14 +105,8 @@ files:
|
|
136
105
|
- lib/rubocop/cop/rspec/expect_actual.rb
|
137
106
|
- lib/rubocop/cop/rspec/expect_change.rb
|
138
107
|
- lib/rubocop/cop/rspec/expect_in_hook.rb
|
108
|
+
- lib/rubocop/cop/rspec/expect_in_let.rb
|
139
109
|
- lib/rubocop/cop/rspec/expect_output.rb
|
140
|
-
- lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb
|
141
|
-
- lib/rubocop/cop/rspec/factory_bot/consistent_parentheses_style.rb
|
142
|
-
- lib/rubocop/cop/rspec/factory_bot/create_list.rb
|
143
|
-
- lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb
|
144
|
-
- lib/rubocop/cop/rspec/factory_bot/factory_name_style.rb
|
145
|
-
- lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb
|
146
|
-
- lib/rubocop/cop/rspec/file_path.rb
|
147
110
|
- lib/rubocop/cop/rspec/focus.rb
|
148
111
|
- lib/rubocop/cop/rspec/hook_argument.rb
|
149
112
|
- lib/rubocop/cop/rspec/hooks_before_examples.rb
|
@@ -167,6 +130,7 @@ files:
|
|
167
130
|
- lib/rubocop/cop/rspec/message_spies.rb
|
168
131
|
- lib/rubocop/cop/rspec/metadata_style.rb
|
169
132
|
- lib/rubocop/cop/rspec/missing_example_group_argument.rb
|
133
|
+
- lib/rubocop/cop/rspec/missing_expectation_target_method.rb
|
170
134
|
- lib/rubocop/cop/rspec/mixin/comments_help.rb
|
171
135
|
- lib/rubocop/cop/rspec/mixin/empty_line_separation.rb
|
172
136
|
- lib/rubocop/cop/rspec/mixin/file_help.rb
|
@@ -190,13 +154,6 @@ files:
|
|
190
154
|
- lib/rubocop/cop/rspec/pending.rb
|
191
155
|
- lib/rubocop/cop/rspec/pending_without_reason.rb
|
192
156
|
- lib/rubocop/cop/rspec/predicate_matcher.rb
|
193
|
-
- lib/rubocop/cop/rspec/rails/avoid_setup_hook.rb
|
194
|
-
- lib/rubocop/cop/rspec/rails/have_http_status.rb
|
195
|
-
- lib/rubocop/cop/rspec/rails/http_status.rb
|
196
|
-
- lib/rubocop/cop/rspec/rails/inferred_spec_type.rb
|
197
|
-
- lib/rubocop/cop/rspec/rails/minitest_assertions.rb
|
198
|
-
- lib/rubocop/cop/rspec/rails/negation_be_valid.rb
|
199
|
-
- lib/rubocop/cop/rspec/rails/travel_around.rb
|
200
157
|
- lib/rubocop/cop/rspec/receive_counts.rb
|
201
158
|
- lib/rubocop/cop/rspec/receive_messages.rb
|
202
159
|
- lib/rubocop/cop/rspec/receive_never.rb
|
@@ -235,15 +192,15 @@ files:
|
|
235
192
|
- lib/rubocop/rspec/align_let_brace.rb
|
236
193
|
- lib/rubocop/rspec/concept.rb
|
237
194
|
- lib/rubocop/rspec/config_formatter.rb
|
195
|
+
- lib/rubocop/rspec/cop/generator.rb
|
238
196
|
- lib/rubocop/rspec/corrector/move_node.rb
|
239
197
|
- lib/rubocop/rspec/description_extractor.rb
|
240
198
|
- lib/rubocop/rspec/example.rb
|
241
199
|
- lib/rubocop/rspec/example_group.rb
|
242
200
|
- lib/rubocop/rspec/hook.rb
|
243
|
-
- lib/rubocop/rspec/inject.rb
|
244
201
|
- lib/rubocop/rspec/language.rb
|
245
|
-
- lib/rubocop/rspec/language/node_pattern.rb
|
246
202
|
- lib/rubocop/rspec/node.rb
|
203
|
+
- lib/rubocop/rspec/plugin.rb
|
247
204
|
- lib/rubocop/rspec/shared_contexts/default_rspec_language_config_context.rb
|
248
205
|
- lib/rubocop/rspec/version.rb
|
249
206
|
- lib/rubocop/rspec/wording.rb
|
@@ -254,7 +211,7 @@ metadata:
|
|
254
211
|
changelog_uri: https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md
|
255
212
|
documentation_uri: https://docs.rubocop.org/rubocop-rspec/
|
256
213
|
rubygems_mfa_required: 'true'
|
257
|
-
|
214
|
+
default_lint_roller_plugin: RuboCop::RSpec::Plugin
|
258
215
|
rdoc_options: []
|
259
216
|
require_paths:
|
260
217
|
- lib
|
@@ -269,8 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
226
|
- !ruby/object:Gem::Version
|
270
227
|
version: '0'
|
271
228
|
requirements: []
|
272
|
-
rubygems_version: 3.
|
273
|
-
signing_key:
|
229
|
+
rubygems_version: 3.6.2
|
274
230
|
specification_version: 4
|
275
231
|
summary: Code style checking for RSpec files
|
276
232
|
test_files: []
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Checks that no expectations are set on Capybara's `current_path`.
|
9
|
-
# #
|
10
|
-
# # The
|
11
|
-
# # https://www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-instance_method[`have_current_path` matcher]
|
12
|
-
# # should be used on `page` to set expectations on Capybara's
|
13
|
-
# # current path, since it uses
|
14
|
-
# # https://github.com/teamcapybara/capybara/blob/master/README.md#asynchronous-javascript-ajax-and-friends[Capybara's waiting functionality]
|
15
|
-
# # which ensures that preceding actions (like `click_link`) have
|
16
|
-
# # completed.
|
17
|
-
# #
|
18
|
-
# # This cop does not support autocorrection in some cases.
|
19
|
-
# #
|
20
|
-
# # @example
|
21
|
-
# # # bad
|
22
|
-
# # expect(current_path).to eq('/callback')
|
23
|
-
# #
|
24
|
-
# # # good
|
25
|
-
# # expect(page).to have_current_path('/callback')
|
26
|
-
# #
|
27
|
-
# # # bad (does not support autocorrection)
|
28
|
-
# # expect(page.current_path).to match(variable)
|
29
|
-
# #
|
30
|
-
# # # good
|
31
|
-
# # expect(page).to have_current_path('/callback')
|
32
|
-
# #
|
33
|
-
# class CurrentPathExpectation < ::RuboCop::Cop::Base; end
|
34
|
-
CurrentPathExpectation =
|
35
|
-
::RuboCop::Cop::Capybara::CurrentPathExpectation
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,104 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# Checks for consistent method usage in feature specs.
|
8
|
-
#
|
9
|
-
# By default, the cop disables all Capybara-specific methods that have
|
10
|
-
# the same native RSpec method (e.g. are just aliases). Some teams
|
11
|
-
# however may prefer using some of the Capybara methods (like `feature`)
|
12
|
-
# to make it obvious that the test uses Capybara, while still disable
|
13
|
-
# the rest of the methods, like `given` (alias for `let`), `background`
|
14
|
-
# (alias for `before`), etc. You can configure which of the methods to
|
15
|
-
# be enabled by using the EnabledMethods configuration option.
|
16
|
-
#
|
17
|
-
# @example
|
18
|
-
# # bad
|
19
|
-
# feature 'User logs in' do
|
20
|
-
# given(:user) { User.new }
|
21
|
-
#
|
22
|
-
# background do
|
23
|
-
# visit new_session_path
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# scenario 'with OAuth' do
|
27
|
-
# # ...
|
28
|
-
# end
|
29
|
-
# end
|
30
|
-
#
|
31
|
-
# # good
|
32
|
-
# describe 'User logs in' do
|
33
|
-
# let(:user) { User.new }
|
34
|
-
#
|
35
|
-
# before do
|
36
|
-
# visit new_session_path
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# it 'with OAuth' do
|
40
|
-
# # ...
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
#
|
44
|
-
class FeatureMethods < Base
|
45
|
-
extend AutoCorrector
|
46
|
-
include InsideExampleGroup
|
47
|
-
|
48
|
-
MSG = 'Use `%<replacement>s` instead of `%<method>s`.'
|
49
|
-
|
50
|
-
# https://github.com/teamcapybara/capybara/blob/e283c1aeaa72441f5403963577e16333bf111a81/lib/capybara/rspec/features.rb#L31-L36
|
51
|
-
MAP = {
|
52
|
-
background: :before,
|
53
|
-
scenario: :it,
|
54
|
-
xscenario: :xit,
|
55
|
-
given: :let,
|
56
|
-
given!: :let!,
|
57
|
-
feature: :describe
|
58
|
-
}.freeze
|
59
|
-
|
60
|
-
# @!method capybara_speak(node)
|
61
|
-
def_node_matcher :capybara_speak, <<~PATTERN
|
62
|
-
{#{MAP.keys.map(&:inspect).join(' ')}}
|
63
|
-
PATTERN
|
64
|
-
|
65
|
-
# @!method feature_method(node)
|
66
|
-
def_node_matcher :feature_method, <<~PATTERN
|
67
|
-
(block
|
68
|
-
$(send #rspec? $#capybara_speak ...)
|
69
|
-
...)
|
70
|
-
PATTERN
|
71
|
-
|
72
|
-
def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
|
73
|
-
return unless inside_example_group?(node)
|
74
|
-
|
75
|
-
feature_method(node) do |send_node, match|
|
76
|
-
next if enabled?(match)
|
77
|
-
|
78
|
-
add_offense(send_node.loc.selector) do |corrector|
|
79
|
-
corrector.replace(send_node.loc.selector, MAP[match].to_s)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def message(range)
|
85
|
-
name = range.source.to_sym
|
86
|
-
format(MSG, method: name, replacement: MAP[name])
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
def enabled?(method_name)
|
92
|
-
enabled_methods.include?(method_name)
|
93
|
-
end
|
94
|
-
|
95
|
-
def enabled_methods
|
96
|
-
cop_config
|
97
|
-
.fetch('EnabledMethods', [])
|
98
|
-
.map(&:to_sym)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Checks for usage of deprecated style methods.
|
9
|
-
# #
|
10
|
-
# # @example when using `assert_style`
|
11
|
-
# # # bad
|
12
|
-
# # page.find(:css, '#first').assert_style(display: 'block')
|
13
|
-
# #
|
14
|
-
# # # good
|
15
|
-
# # page.find(:css, '#first').assert_matches_style(display: 'block')
|
16
|
-
# #
|
17
|
-
# # @example when using `has_style?`
|
18
|
-
# # # bad
|
19
|
-
# # expect(page.find(:css, 'first')
|
20
|
-
# # .has_style?(display: 'block')).to be true
|
21
|
-
# #
|
22
|
-
# # # good
|
23
|
-
# # expect(page.find(:css, 'first')
|
24
|
-
# # .matches_style?(display: 'block')).to be true
|
25
|
-
# #
|
26
|
-
# # @example when using `have_style`
|
27
|
-
# # # bad
|
28
|
-
# # expect(page).to have_style(display: 'block')
|
29
|
-
# #
|
30
|
-
# # # good
|
31
|
-
# # expect(page).to match_style(display: 'block')
|
32
|
-
# #
|
33
|
-
# class MatchStyle < ::RuboCop::Cop::Base; end
|
34
|
-
MatchStyle = ::RuboCop::Cop::Capybara::MatchStyle
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Enforces use of `have_no_*` or `not_to` for negated expectations.
|
9
|
-
# #
|
10
|
-
# # @example EnforcedStyle: not_to (default)
|
11
|
-
# # # bad
|
12
|
-
# # expect(page).to have_no_selector
|
13
|
-
# # expect(page).to have_no_css('a')
|
14
|
-
# #
|
15
|
-
# # # good
|
16
|
-
# # expect(page).not_to have_selector
|
17
|
-
# # expect(page).not_to have_css('a')
|
18
|
-
# #
|
19
|
-
# # @example EnforcedStyle: have_no
|
20
|
-
# # # bad
|
21
|
-
# # expect(page).not_to have_selector
|
22
|
-
# # expect(page).not_to have_css('a')
|
23
|
-
# #
|
24
|
-
# # # good
|
25
|
-
# # expect(page).to have_no_selector
|
26
|
-
# # expect(page).to have_no_css('a')
|
27
|
-
# #
|
28
|
-
# class NegationMatcher < ::RuboCop::Cop::Base; end
|
29
|
-
NegationMatcher = ::RuboCop::Cop::Capybara::NegationMatcher
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Checks for there is a more specific actions offered by Capybara.
|
9
|
-
# #
|
10
|
-
# # @example
|
11
|
-
# #
|
12
|
-
# # # bad
|
13
|
-
# # find('a').click
|
14
|
-
# # find('button.cls').click
|
15
|
-
# # find('a', exact_text: 'foo').click
|
16
|
-
# # find('div button').click
|
17
|
-
# #
|
18
|
-
# # # good
|
19
|
-
# # click_link
|
20
|
-
# # click_button(class: 'cls')
|
21
|
-
# # click_link(exact_text: 'foo')
|
22
|
-
# # find('div').click_button
|
23
|
-
# #
|
24
|
-
# class SpecificActions < ::RuboCop::Cop::Base; end
|
25
|
-
SpecificActions = ::RuboCop::Cop::Capybara::SpecificActions
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module RSpec
|
6
|
-
module Capybara
|
7
|
-
# @!parse
|
8
|
-
# # Checks if there is a more specific finder offered by Capybara.
|
9
|
-
# #
|
10
|
-
# # @example
|
11
|
-
# # # bad
|
12
|
-
# # find('#some-id')
|
13
|
-
# # find('[visible][id=some-id]')
|
14
|
-
# #
|
15
|
-
# # # good
|
16
|
-
# # find_by_id('some-id')
|
17
|
-
# # find_by_id('some-id', visible: true)
|
18
|
-
# #
|
19
|
-
# class SpecificFinders < ::RuboCop::Cop::Base; end
|
20
|
-
SpecificFinders = ::RuboCop::Cop::Capybara::SpecificFinders
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|