rubocop-rspec 2.4.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,6 +23,7 @@ module RuboCop
23
23
  # subject('user') { create_user }
24
24
  # let('user_name') { 'Adam' }
25
25
  class VariableDefinition < Base
26
+ extend AutoCorrector
26
27
  include ConfigurableEnforcedStyle
27
28
  include Variable
28
29
 
@@ -30,14 +31,30 @@ module RuboCop
30
31
 
31
32
  def on_send(node)
32
33
  variable_definition?(node) do |variable|
33
- if style_violation?(variable)
34
- add_offense(variable, message: format(MSG, style: style))
34
+ next unless style_violation?(variable)
35
+
36
+ add_offense(
37
+ variable,
38
+ message: format(MSG, style: style)
39
+ ) do |corrector|
40
+ corrector.replace(variable, correct_variable(variable))
35
41
  end
36
42
  end
37
43
  end
38
44
 
39
45
  private
40
46
 
47
+ def correct_variable(variable)
48
+ case variable.type
49
+ when :dsym
50
+ variable.source[1..-1]
51
+ when :sym
52
+ variable.value.to_s.inspect
53
+ else
54
+ variable.value.to_sym.inspect
55
+ end
56
+ end
57
+
41
58
  def style_violation?(variable)
42
59
  style == :symbols && string?(variable) ||
43
60
  style == :strings && symbol?(variable)
@@ -10,7 +10,7 @@ module RuboCop
10
10
  # allow(foo).to receive(:bar) { |&block| block.call(1) }
11
11
  #
12
12
  # # good
13
- # expect(foo).to be(:bar).and_yield(1)
13
+ # expect(foo).to receive(:bar).and_yield(1)
14
14
  class Yield < Base
15
15
  extend AutoCorrector
16
16
  include RangeHelp
@@ -7,6 +7,7 @@ require_relative 'rspec/capybara/visibility_matcher'
7
7
  require_relative 'rspec/factory_bot/attribute_defined_statically'
8
8
  require_relative 'rspec/factory_bot/create_list'
9
9
  require_relative 'rspec/factory_bot/factory_class_name'
10
+ require_relative 'rspec/factory_bot/syntax_methods'
10
11
 
11
12
  require_relative 'rspec/rails/avoid_setup_hook'
12
13
  begin
@@ -40,6 +41,7 @@ require_relative 'rspec/empty_line_after_subject'
40
41
  require_relative 'rspec/example_length'
41
42
  require_relative 'rspec/example_without_description'
42
43
  require_relative 'rspec/example_wording'
44
+ require_relative 'rspec/excessive_docstring_spacing'
43
45
  require_relative 'rspec/expect_actual'
44
46
  require_relative 'rspec/expect_change'
45
47
  require_relative 'rspec/expect_in_hook'
@@ -88,6 +90,7 @@ require_relative 'rspec/shared_context'
88
90
  require_relative 'rspec/shared_examples'
89
91
  require_relative 'rspec/single_argument_message_chain'
90
92
  require_relative 'rspec/stubbed_mock'
93
+ require_relative 'rspec/subject_declaration'
91
94
  require_relative 'rspec/subject_stub'
92
95
  require_relative 'rspec/unspecified_exception'
93
96
  require_relative 'rspec/variable_definition'
@@ -5,6 +5,7 @@ module RuboCop
5
5
  # Shared behavior for aligning braces for single line lets
6
6
  class AlignLetBrace
7
7
  include RuboCop::RSpec::Language
8
+ include RuboCop::Cop::Util
8
9
 
9
10
  def initialize(root, token)
10
11
  @root = root
@@ -34,7 +35,7 @@ module RuboCop
34
35
  def let_group_for(let)
35
36
  adjacent_let_chunks.detect do |chunk|
36
37
  chunk.any? do |member|
37
- member == let && member.loc.line == let.loc.line
38
+ member == let && same_line?(member, let)
38
39
  end
39
40
  end
40
41
  end
@@ -7,7 +7,8 @@ module RuboCop
7
7
  # Builds a YAML config file from two config hashes
8
8
  class ConfigFormatter
9
9
  EXTENSION_ROOT_DEPARTMENT = %r{^(RSpec/)}.freeze
10
- STYLE_GUIDE_BASE_URL = 'https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'
10
+ SUBDEPARTMENTS = %(RSpec/Capybara RSpec/FactoryBot RSpec/Rails)
11
+ COP_DOC_BASE_URL = 'https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'
11
12
 
12
13
  def initialize(config, descriptions)
13
14
  @config = config
@@ -24,9 +25,10 @@ module RuboCop
24
25
 
25
26
  def unified_config
26
27
  cops.each_with_object(config.dup) do |cop, unified|
27
- unified[cop] = config.fetch(cop)
28
- .merge(descriptions.fetch(cop))
29
- .merge('StyleGuide' => STYLE_GUIDE_BASE_URL + cop.sub('RSpec/', ''))
28
+ next if SUBDEPARTMENTS.include?(cop)
29
+
30
+ unified[cop].merge!(descriptions.fetch(cop))
31
+ unified[cop]['Reference'] = COP_DOC_BASE_URL + cop.sub('RSpec/', '')
30
32
  end
31
33
  end
32
34
 
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module RSpec
5
+ module FactoryBot
6
+ # Contains node matchers for common FactoryBot DSL.
7
+ module Language
8
+ extend RuboCop::NodePattern::Macros
9
+
10
+ # @!method factory_bot?(node)
11
+ def_node_matcher :factory_bot?, <<~PATTERN
12
+ (const {nil? cbase} {:FactoryGirl :FactoryBot})
13
+ PATTERN
14
+ end
15
+ end
16
+ end
17
+ end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Version information for the RSpec RuboCop plugin.
6
6
  module Version
7
- STRING = '2.4.0'
7
+ STRING = '2.8.0'
8
8
  end
9
9
  end
10
10
  end
data/lib/rubocop-rspec.rb CHANGED
@@ -12,11 +12,14 @@ require_relative 'rubocop/rspec/wording'
12
12
  require_relative 'rubocop/rspec/language/node_pattern'
13
13
  require_relative 'rubocop/rspec/language'
14
14
 
15
+ require_relative 'rubocop/rspec/factory_bot/language'
16
+
15
17
  require_relative 'rubocop/cop/rspec/mixin/top_level_group'
16
18
  require_relative 'rubocop/cop/rspec/mixin/variable'
17
19
  require_relative 'rubocop/cop/rspec/mixin/final_end_location'
18
20
  require_relative 'rubocop/cop/rspec/mixin/comments_help'
19
21
  require_relative 'rubocop/cop/rspec/mixin/empty_line_separation'
22
+ require_relative 'rubocop/cop/rspec/mixin/inside_example_group'
20
23
 
21
24
  require_relative 'rubocop/rspec/concept'
22
25
  require_relative 'rubocop/rspec/example_group'
@@ -31,8 +34,8 @@ RuboCop::RSpec::Inject.defaults!
31
34
 
32
35
  require_relative 'rubocop/cop/rspec_cops'
33
36
 
34
- # We have to register our autocorrect incompatibilies in RuboCop's cops as well
35
- # so we do not hit infinite loops
37
+ # We have to register our autocorrect incompatibilities in RuboCop's cops
38
+ # as well so we do not hit infinite loops
36
39
 
37
40
  module RuboCop
38
41
  module Cop
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.0
4
+ version: 2.8.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: 2021-06-09 00:00:00.000000000 Z
13
+ date: 2022-01-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -18,28 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.0'
21
+ version: '1.19'
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.0'
29
- - !ruby/object:Gem::Dependency
30
- name: rubocop-ast
31
- requirement: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: 1.1.0
36
- type: :runtime
37
- prerelease: false
38
- version_requirements: !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 1.1.0
28
+ version: '1.19'
43
29
  - !ruby/object:Gem::Dependency
44
30
  name: rack
45
31
  requirement: !ruby/object:Gem::Requirement
@@ -97,19 +83,19 @@ dependencies:
97
83
  - !ruby/object:Gem::Version
98
84
  version: '1.7'
99
85
  - !ruby/object:Gem::Dependency
100
- name: simplecov
86
+ name: rubocop-rake
101
87
  requirement: !ruby/object:Gem::Requirement
102
88
  requirements:
103
- - - "<"
89
+ - - "~>"
104
90
  - !ruby/object:Gem::Version
105
- version: '0.18'
91
+ version: '0.6'
106
92
  type: :development
107
93
  prerelease: false
108
94
  version_requirements: !ruby/object:Gem::Requirement
109
95
  requirements:
110
- - - "<"
96
+ - - "~>"
111
97
  - !ruby/object:Gem::Version
112
- version: '0.18'
98
+ version: '0.6'
113
99
  - !ruby/object:Gem::Dependency
114
100
  name: yard
115
101
  requirement: !ruby/object:Gem::Requirement
@@ -172,6 +158,7 @@ files:
172
158
  - lib/rubocop/cop/rspec/example_length.rb
173
159
  - lib/rubocop/cop/rspec/example_without_description.rb
174
160
  - lib/rubocop/cop/rspec/example_wording.rb
161
+ - lib/rubocop/cop/rspec/excessive_docstring_spacing.rb
175
162
  - lib/rubocop/cop/rspec/expect_actual.rb
176
163
  - lib/rubocop/cop/rspec/expect_change.rb
177
164
  - lib/rubocop/cop/rspec/expect_in_hook.rb
@@ -179,6 +166,7 @@ files:
179
166
  - lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb
180
167
  - lib/rubocop/cop/rspec/factory_bot/create_list.rb
181
168
  - lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb
169
+ - lib/rubocop/cop/rspec/factory_bot/syntax_methods.rb
182
170
  - lib/rubocop/cop/rspec/file_path.rb
183
171
  - lib/rubocop/cop/rspec/focus.rb
184
172
  - lib/rubocop/cop/rspec/hook_argument.rb
@@ -202,6 +190,7 @@ files:
202
190
  - lib/rubocop/cop/rspec/mixin/comments_help.rb
203
191
  - lib/rubocop/cop/rspec/mixin/empty_line_separation.rb
204
192
  - lib/rubocop/cop/rspec/mixin/final_end_location.rb
193
+ - lib/rubocop/cop/rspec/mixin/inside_example_group.rb
205
194
  - lib/rubocop/cop/rspec/mixin/top_level_group.rb
206
195
  - lib/rubocop/cop/rspec/mixin/variable.rb
207
196
  - lib/rubocop/cop/rspec/multiple_describes.rb
@@ -230,6 +219,7 @@ files:
230
219
  - lib/rubocop/cop/rspec/shared_examples.rb
231
220
  - lib/rubocop/cop/rspec/single_argument_message_chain.rb
232
221
  - lib/rubocop/cop/rspec/stubbed_mock.rb
222
+ - lib/rubocop/cop/rspec/subject_declaration.rb
233
223
  - lib/rubocop/cop/rspec/subject_stub.rb
234
224
  - lib/rubocop/cop/rspec/unspecified_exception.rb
235
225
  - lib/rubocop/cop/rspec/variable_definition.rb
@@ -246,6 +236,7 @@ files:
246
236
  - lib/rubocop/rspec/example.rb
247
237
  - lib/rubocop/rspec/example_group.rb
248
238
  - lib/rubocop/rspec/factory_bot.rb
239
+ - lib/rubocop/rspec/factory_bot/language.rb
249
240
  - lib/rubocop/rspec/hook.rb
250
241
  - lib/rubocop/rspec/inject.rb
251
242
  - lib/rubocop/rspec/language.rb
@@ -259,6 +250,7 @@ licenses:
259
250
  metadata:
260
251
  changelog_uri: https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md
261
252
  documentation_uri: https://docs.rubocop.org/rubocop-rspec/
253
+ rubygems_mfa_required: 'true'
262
254
  post_install_message:
263
255
  rdoc_options: []
264
256
  require_paths:
@@ -274,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
266
  - !ruby/object:Gem::Version
275
267
  version: '0'
276
268
  requirements: []
277
- rubygems_version: 3.2.16
269
+ rubygems_version: 3.3.1
278
270
  signing_key:
279
271
  specification_version: 4
280
272
  summary: Code style checking for RSpec files