rubocop 0.65.0 → 0.66.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/config/default.yml +53 -4
  4. data/lib/rubocop.rb +4 -5
  5. data/lib/rubocop/cli.rb +1 -1
  6. data/lib/rubocop/config.rb +1 -1
  7. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +3 -5
  8. data/lib/rubocop/cop/layout/class_structure.rb +59 -28
  9. data/lib/rubocop/cop/layout/extra_spacing.rb +18 -0
  10. data/lib/rubocop/cop/layout/indentation_width.rb +25 -5
  11. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +33 -17
  12. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +30 -11
  13. data/lib/rubocop/cop/lint/else_layout.rb +1 -0
  14. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
  15. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
  16. data/lib/rubocop/cop/lint/shadowed_exception.rb +14 -1
  17. data/lib/rubocop/cop/lint/to_json.rb +38 -0
  18. data/lib/rubocop/cop/lint/void.rb +1 -1
  19. data/lib/rubocop/cop/message_annotator.rb +4 -4
  20. data/lib/rubocop/cop/metrics/abc_size.rb +1 -0
  21. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +31 -9
  22. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
  23. data/lib/rubocop/cop/mixin/integer_node.rb +1 -1
  24. data/lib/rubocop/cop/mixin/method_preference.rb +2 -1
  25. data/lib/rubocop/cop/naming/constant_name.rb +6 -1
  26. data/lib/rubocop/cop/naming/predicate_name.rb +6 -0
  27. data/lib/rubocop/cop/rails/link_to_blank.rb +1 -1
  28. data/lib/rubocop/cop/rails/output.rb +18 -1
  29. data/lib/rubocop/cop/rails/reflection_class_name.rb +1 -1
  30. data/lib/rubocop/cop/rails/time_zone.rb +10 -0
  31. data/lib/rubocop/cop/rails/validation.rb +3 -2
  32. data/lib/rubocop/cop/style/block_delimiters.rb +30 -1
  33. data/lib/rubocop/cop/style/conditional_assignment.rb +3 -1
  34. data/lib/rubocop/cop/style/constant_visibility.rb +66 -0
  35. data/lib/rubocop/cop/style/identical_conditional_branches.rb +8 -12
  36. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +16 -4
  37. data/lib/rubocop/cop/style/numeric_literals.rb +16 -7
  38. data/lib/rubocop/cop/style/option_hash.rb +5 -0
  39. data/lib/rubocop/cop/style/redundant_freeze.rb +13 -1
  40. data/lib/rubocop/cop/style/redundant_self.rb +3 -1
  41. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  42. data/lib/rubocop/cop/style/symbol_array.rb +9 -1
  43. data/lib/rubocop/cop/style/trivial_accessors.rb +5 -0
  44. data/lib/rubocop/cop/style/word_array.rb +0 -4
  45. data/lib/rubocop/cop/util.rb +4 -0
  46. data/lib/rubocop/core_ext/string.rb +47 -0
  47. data/lib/rubocop/node_pattern.rb +76 -55
  48. data/lib/rubocop/processed_source.rb +2 -2
  49. data/lib/rubocop/result_cache.rb +4 -4
  50. data/lib/rubocop/rspec/cop_helper.rb +5 -0
  51. data/lib/rubocop/rspec/expect_offense.rb +5 -5
  52. data/lib/rubocop/runner.rb +6 -13
  53. data/lib/rubocop/version.rb +1 -1
  54. metadata +15 -19
@@ -96,10 +96,6 @@ module RuboCop
96
96
  corrector.replace(node.source_range, "[#{words.join(', ')}]")
97
97
  end
98
98
  end
99
-
100
- def trim_string_interporation_escape_character(str)
101
- str.gsub(/\\\#{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
102
- end
103
99
  end
104
100
  end
105
101
  end
@@ -85,6 +85,10 @@ module RuboCop
85
85
  end
86
86
  end
87
87
 
88
+ def trim_string_interporation_escape_character(str)
89
+ str.gsub(/\\\#{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
90
+ end
91
+
88
92
  def interpret_string_escapes(string)
89
93
  StringInterpreter.interpret(string)
90
94
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Extensions to the core String class
4
+ class String
5
+ unless method_defined? :blank?
6
+ # Checks whether a string is blank. A string is considered blank if it
7
+ # is either empty or contains only whitespace characters.
8
+ #
9
+ # @return [Boolean] true is the string is blank, false otherwise
10
+ #
11
+ # @example
12
+ # ''.blank? #=> true
13
+ #
14
+ # @example
15
+ # ' '.blank? #=> true
16
+ #
17
+ # @example
18
+ # ' test'.blank? #=> false
19
+ def blank?
20
+ empty? || strip.empty?
21
+ end
22
+ end
23
+
24
+ unless method_defined? :strip_indent
25
+ # The method strips the whitespace preceding the base indentation.
26
+ # Useful for HEREDOCs and other multi-line strings.
27
+ #
28
+ # @example
29
+ #
30
+ # code = <<-END.strip_indent
31
+ # def test
32
+ # some_method
33
+ # other_method
34
+ # end
35
+ # END
36
+ #
37
+ # #=> "def\n some_method\n \nother_method\nend"
38
+ #
39
+ # @todo Replace call sites with squiggly heredocs when required Ruby
40
+ # version is >= 2.3.0
41
+ def strip_indent
42
+ leading_space = scan(/^[ \t]*(?=\S)/).min
43
+ indent = leading_space ? leading_space.size : 0
44
+ gsub(/^[ \t]{#{indent}}/, '')
45
+ end
46
+ end
47
+ end
@@ -37,8 +37,7 @@ module RuboCop
37
37
  # '(send !const ...)' # ! negates the next part of the pattern
38
38
  # '$(send const ...)' # arbitrary matching can be performed on a capture
39
39
  # '(send _recv _msg)' # wildcards can be named (for readability)
40
- # '(send ... :new)' # you can specifically match against the last child
41
- # # (this only works for the very last)
40
+ # '(send ... :new)' # you can match against the last children
42
41
  # '(send $...)' # capture all the children as an array
43
42
  # '(send $... int)' # capture all children but the last as an array
44
43
  # '(send _x :+ _x)' # unification is performed on named wildcards
@@ -118,8 +117,13 @@ module RuboCop
118
117
  PARAM = /\A#{PARAM_NUMBER}\Z/.freeze
119
118
  CLOSING = /\A(?:\)|\}|\])\Z/.freeze
120
119
 
120
+ REST = '...'.freeze
121
+ CAPTURED_REST = '$...'.freeze
122
+
121
123
  attr_reader :match_code
122
124
 
125
+ SEQ_HEAD_INDEX = -1
126
+
123
127
  def initialize(str, node_var = 'node0')
124
128
  @string = str
125
129
  @root = node_var
@@ -133,8 +137,7 @@ module RuboCop
133
137
  end
134
138
 
135
139
  def run(node_var)
136
- tokens =
137
- @string.scan(TOKEN).reject { |token| token =~ /\A#{SEPARATORS}\Z/ }
140
+ tokens = Compiler.tokens(@string)
138
141
 
139
142
  @match_code = compile_expr(tokens, node_var, false)
140
143
 
@@ -180,83 +183,76 @@ module RuboCop
180
183
  # temp variable as 'cur_node'
181
184
  with_temp_node(cur_node) do |init, temp_node|
182
185
  terms = compile_seq_terms(tokens, temp_node)
186
+ terms.unshift(compile_guard_clause(temp_node))
183
187
 
184
- join_terms(init, terms, ' && ')
188
+ join_terms(init, terms, " &&\n")
185
189
  end
186
190
  end
187
191
 
192
+ def compile_guard_clause(cur_node)
193
+ "#{cur_node}.is_a?(RuboCop::AST::Node)"
194
+ end
195
+
188
196
  def compile_seq_terms(tokens, cur_node)
189
- ret, size =
197
+ ret =
190
198
  compile_seq_terms_with_size(tokens, cur_node) do |token, terms, index|
191
- case token
192
- when '...'.freeze
193
- return compile_ellipsis(tokens, cur_node, terms, index)
194
- when '$...'.freeze
195
- return compile_capt_ellip(tokens, cur_node, terms, index)
199
+ capture = next_capture if token == CAPTURED_REST
200
+ if capture || token == REST
201
+ index = 0 if index == SEQ_HEAD_INDEX # Consider ($...) as (_ $...)
202
+ return compile_ellipsis(tokens, cur_node, terms, index, capture)
196
203
  end
197
204
  end
198
-
199
- ret << "(#{cur_node}.children.size == #{size})"
205
+ ret << "(#{cur_node}.children.size == #{ret.size - 1})"
200
206
  end
201
207
 
202
208
  def compile_seq_terms_with_size(tokens, cur_node)
203
- index = nil
209
+ index = SEQ_HEAD_INDEX
204
210
  terms = []
205
211
  until tokens.first == ')'
206
- yield tokens.first, terms, index || 0
207
- term, index = compile_expr_with_index(tokens, cur_node, index)
212
+ yield tokens.first, terms, index
213
+ term = compile_expr_with_index(tokens, cur_node, index)
214
+ index += 1
208
215
  terms << term
209
216
  end
210
217
 
211
218
  tokens.shift # drop concluding )
212
- [terms, index]
219
+ terms
213
220
  end
214
221
 
215
222
  def compile_expr_with_index(tokens, cur_node, index)
216
- if index.nil?
223
+ if index == SEQ_HEAD_INDEX
217
224
  # in 'sequence head' position; some expressions are compiled
218
225
  # differently at 'sequence head' (notably 'node type' expressions)
219
226
  # grep for seq_head to see where it makes a difference
220
- [compile_expr(tokens, cur_node, true), 0]
227
+ compile_expr(tokens, cur_node, true)
221
228
  else
222
229
  child_node = "#{cur_node}.children[#{index}]"
223
- [compile_expr(tokens, child_node, false), index + 1]
224
- end
225
- end
226
-
227
- def compile_ellipsis(tokens, cur_node, terms, index)
228
- if (term = compile_seq_tail(tokens, "#{cur_node}.children.last"))
229
- terms << "(#{cur_node}.children.size > #{index})"
230
- terms << term
231
- elsif index > 0
232
- terms << "(#{cur_node}.children.size >= #{index})"
230
+ compile_expr(tokens, child_node, false)
233
231
  end
234
- terms
235
232
  end
236
233
 
237
- def compile_capt_ellip(tokens, cur_node, terms, index)
238
- capture = next_capture
239
- if (term = compile_seq_tail(tokens, "#{cur_node}.children.last"))
240
- terms << "(#{cur_node}.children.size > #{index})"
241
- terms << term
242
- terms << "(#{capture} = #{cur_node}.children[#{index}..-2])"
243
- else
244
- terms << "(#{cur_node}.children.size >= #{index})" if index > 0
245
- terms << "(#{capture} = #{cur_node}.children[#{index}..-1])"
234
+ def compile_ellipsis(tokens, cur_node, terms, index, capture = nil)
235
+ tokens.shift # drop ellipsis
236
+ tail = compile_seq_tail(tokens, cur_node)
237
+ terms << "(#{cur_node}.children.size >= #{index + tail.size})"
238
+ terms.concat tail
239
+ if capture
240
+ range = index..-tail.size - 1
241
+ terms << "(#{capture} = #{cur_node}.children[#{range}])"
246
242
  end
247
243
  terms
248
244
  end
249
245
 
250
246
  def compile_seq_tail(tokens, cur_node)
251
- tokens.shift
252
- if tokens.first == ')'
253
- tokens.shift
254
- nil
255
- else
256
- expr = compile_expr(tokens, cur_node, false)
257
- fail_due_to('missing )') unless tokens.shift == ')'
258
- expr
247
+ child_node = "#{cur_node}.children[%<revindex>i]"
248
+ terms = []
249
+ until tokens.first == ')'
250
+ terms << compile_expr(tokens, child_node, false)
259
251
  end
252
+ tokens.shift # drop ')'
253
+ # E.g. for terms.size == 3, we want to replace the three [%<revindex>i]
254
+ # with [-3], [-2] and [-1]
255
+ terms.map.with_index { |term, i| format term, revindex: i - terms.size }
260
256
  end
261
257
 
262
258
  def compile_union(tokens, cur_node, seq_head)
@@ -444,12 +440,6 @@ module RuboCop
444
440
  params.empty? ? '' : ",#{params}"
445
441
  end
446
442
 
447
- def emit_guard_clause
448
- <<-RUBY
449
- return unless node.is_a?(RuboCop::AST::Node)
450
- RUBY
451
- end
452
-
453
443
  def emit_method_code
454
444
  <<-RUBY
455
445
  return unless #{@match_code}
@@ -475,6 +465,10 @@ module RuboCop
475
465
  def next_temp_value
476
466
  @temps += 1
477
467
  end
468
+
469
+ def self.tokens(pattern)
470
+ pattern.scan(TOKEN).reject { |token| token =~ /\A#{SEPARATORS}\Z/ }
471
+ end
478
472
  end
479
473
  private_constant :Compiler
480
474
 
@@ -491,7 +485,6 @@ module RuboCop
491
485
  compiler = Compiler.new(pattern_str, 'node')
492
486
  src = "def #{method_name}(node = self" \
493
487
  "#{compiler.emit_trailing_params});" \
494
- "#{compiler.emit_guard_clause}" \
495
488
  "#{compiler.emit_method_code};end"
496
489
 
497
490
  location = caller_locations(1, 1).first
@@ -552,11 +545,39 @@ module RuboCop
552
545
  end
553
546
  end
554
547
 
548
+ attr_reader :pattern
549
+
555
550
  def initialize(str)
551
+ @pattern = str
556
552
  compiler = Compiler.new(str)
557
553
  src = "def match(node0#{compiler.emit_trailing_params});" \
558
554
  "#{compiler.emit_method_code}end"
559
- instance_eval(src)
555
+ instance_eval(src, __FILE__, __LINE__ + 1)
556
+ end
557
+
558
+ def match(*args)
559
+ # If we're here, it's because the singleton method has not been defined,
560
+ # either because we've been dup'ed or serialized through YAML
561
+ initialize(pattern)
562
+ match(*args)
563
+ end
564
+
565
+ def marshal_load(pattern)
566
+ initialize pattern
567
+ end
568
+
569
+ def marshal_dump
570
+ pattern
571
+ end
572
+
573
+ def ==(other)
574
+ other.is_a?(NodePattern) &&
575
+ Compiler.tokens(other.pattern) == Compiler.tokens(pattern)
576
+ end
577
+ alias eql? ==
578
+
579
+ def to_s
580
+ "#<#{self.class} #{pattern}>"
560
581
  end
561
582
  end
562
583
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'digest/md5'
3
+ require 'digest/sha1'
4
4
 
5
5
  module RuboCop
6
6
  # ProcessedSource contains objects which are generated by Parser
@@ -78,7 +78,7 @@ module RuboCop
78
78
 
79
79
  # Raw source checksum for tracking infinite loops.
80
80
  def checksum
81
- Digest::MD5.hexdigest(@raw_source)
81
+ Digest::SHA1.hexdigest(@raw_source)
82
82
  end
83
83
 
84
84
  def each_comment
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'digest/md5'
3
+ require 'digest/sha1'
4
4
  require 'find'
5
5
  require 'etc'
6
6
 
@@ -141,7 +141,7 @@ module RuboCop
141
141
  end
142
142
 
143
143
  def file_checksum(file, config_store)
144
- digester = Digest::MD5.new
144
+ digester = Digest::SHA1.new
145
145
  mode = File.stat(file).mode
146
146
  digester.update(
147
147
  "#{file}#{mode}#{config_store.for(file).signature}"
@@ -173,7 +173,7 @@ module RuboCop
173
173
  .select { |path| File.file?(path) }
174
174
  .sort
175
175
  .map { |path| IO.read(path, encoding: Encoding::UTF_8) }
176
- Digest::MD5.hexdigest(sources.join)
176
+ Digest::SHA1.hexdigest(sources.join)
177
177
  end
178
178
  end
179
179
 
@@ -185,7 +185,7 @@ module RuboCop
185
185
  options = options.to_s.gsub(/[^a-z]+/i, '_')
186
186
  # We must avoid making file names too long for some filesystems to handle
187
187
  # If they are short, we can leave them human-readable
188
- options.length <= 32 ? options : Digest::MD5.hexdigest(options)
188
+ options.length <= 32 ? options : Digest::SHA1.hexdigest(options)
189
189
  end
190
190
  end
191
191
  end
@@ -50,12 +50,17 @@ module CopHelper
50
50
  end
51
51
 
52
52
  def autocorrect_source_with_loop(source, file = nil)
53
+ cnt = 0
53
54
  loop do
54
55
  cop.instance_variable_set(:@corrections, [])
55
56
  new_source = autocorrect_source(source, file)
56
57
  return new_source if new_source == source
57
58
 
58
59
  source = new_source
60
+ cnt += 1
61
+ if cnt > RuboCop::Runner::MAX_ITERATIONS
62
+ raise RuboCop::Runner::InfiniteCorrectionLoop.new(file, [])
63
+ end
59
64
  end
60
65
  end
61
66
 
@@ -64,11 +64,11 @@ module RuboCop
64
64
  # @example `expect_offense` and `expect_no_corrections`
65
65
  #
66
66
  # expect_offense(<<-RUBY.strip_indent)
67
- # a do
68
- # b
69
- # end.c
70
- # ^^^^^ Avoid chaining a method call on a do...end block.
71
- # RUBY
67
+ # a do
68
+ # b
69
+ # end.c
70
+ # ^^^^^ Avoid chaining a method call on a do...end block.
71
+ # RUBY
72
72
  #
73
73
  # expect_no_corrections
74
74
  module ExpectOffense
@@ -30,15 +30,6 @@ module RuboCop
30
30
  @aborting = false
31
31
  end
32
32
 
33
- def trap_interrupt
34
- Signal.trap('INT') do
35
- exit!(1) if aborting?
36
- self.aborting = true
37
- warn ''
38
- warn 'Exiting... Interrupt again to exit immediately.'
39
- end
40
- end
41
-
42
33
  def run(paths)
43
34
  target_files = find_target_files(paths)
44
35
  if @options[:list_target_files]
@@ -47,6 +38,12 @@ module RuboCop
47
38
  warm_cache(target_files) if @options[:parallel]
48
39
  inspect_files(target_files)
49
40
  end
41
+ rescue Interrupt
42
+ self.aborting = true
43
+ warn ''
44
+ warn 'Exiting...'
45
+
46
+ false
50
47
  end
51
48
 
52
49
  def aborting?
@@ -81,11 +78,7 @@ module RuboCop
81
78
  end
82
79
 
83
80
  def each_inspected_file(files)
84
- trap_interrupt
85
-
86
81
  files.reduce(true) do |all_passed, file|
87
- break false if aborting?
88
-
89
82
  offenses = process_file(file)
90
83
  yield file
91
84
 
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '0.65.0'.freeze
6
+ STRING = '0.66.0'.freeze
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, running on ' \
9
9
  '%<ruby_engine>s %<ruby_version>s %<ruby_platform>s)'.freeze
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.65.0
4
+ version: 0.66.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-02-19 00:00:00.000000000 Z
13
+ date: 2019-03-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: jaro_winkler
@@ -60,20 +60,6 @@ dependencies:
60
60
  - - "!="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 2.5.1.1
63
- - !ruby/object:Gem::Dependency
64
- name: powerpack
65
- requirement: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '0.1'
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '0.1'
77
63
  - !ruby/object:Gem::Dependency
78
64
  name: psych
79
65
  requirement: !ruby/object:Gem::Requirement
@@ -126,16 +112,22 @@ dependencies:
126
112
  name: unicode-display_width
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - "~>"
115
+ - - ">="
130
116
  - !ruby/object:Gem::Version
131
117
  version: 1.4.0
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.6'
132
121
  type: :runtime
133
122
  prerelease: false
134
123
  version_requirements: !ruby/object:Gem::Requirement
135
124
  requirements:
136
- - - "~>"
125
+ - - ">="
137
126
  - !ruby/object:Gem::Version
138
127
  version: 1.4.0
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.6'
139
131
  - !ruby/object:Gem::Dependency
140
132
  name: bundler
141
133
  requirement: !ruby/object:Gem::Requirement
@@ -412,12 +404,14 @@ files:
412
404
  - lib/rubocop/cop/lint/return_in_void_context.rb
413
405
  - lib/rubocop/cop/lint/safe_navigation_chain.rb
414
406
  - lib/rubocop/cop/lint/safe_navigation_consistency.rb
407
+ - lib/rubocop/cop/lint/safe_navigation_with_empty.rb
415
408
  - lib/rubocop/cop/lint/script_permission.rb
416
409
  - lib/rubocop/cop/lint/shadowed_argument.rb
417
410
  - lib/rubocop/cop/lint/shadowed_exception.rb
418
411
  - lib/rubocop/cop/lint/shadowing_outer_local_variable.rb
419
412
  - lib/rubocop/cop/lint/string_conversion_in_interpolation.rb
420
413
  - lib/rubocop/cop/lint/syntax.rb
414
+ - lib/rubocop/cop/lint/to_json.rb
421
415
  - lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb
422
416
  - lib/rubocop/cop/lint/unified_integer.rb
423
417
  - lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb
@@ -633,6 +627,7 @@ files:
633
627
  - lib/rubocop/cop/style/comment_annotation.rb
634
628
  - lib/rubocop/cop/style/commented_keyword.rb
635
629
  - lib/rubocop/cop/style/conditional_assignment.rb
630
+ - lib/rubocop/cop/style/constant_visibility.rb
636
631
  - lib/rubocop/cop/style/copyright.rb
637
632
  - lib/rubocop/cop/style/date_time.rb
638
633
  - lib/rubocop/cop/style/def_with_parentheses.rb
@@ -779,6 +774,7 @@ files:
779
774
  - lib/rubocop/cop/variable_force/scope.rb
780
775
  - lib/rubocop/cop/variable_force/variable.rb
781
776
  - lib/rubocop/cop/variable_force/variable_table.rb
777
+ - lib/rubocop/core_ext/string.rb
782
778
  - lib/rubocop/error.rb
783
779
  - lib/rubocop/file_finder.rb
784
780
  - lib/rubocop/formatter/auto_gen_config_formatter.rb
@@ -848,7 +844,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
848
844
  - !ruby/object:Gem::Version
849
845
  version: '0'
850
846
  requirements: []
851
- rubygems_version: 3.0.1
847
+ rubygems_version: 3.0.3
852
848
  signing_key:
853
849
  specification_version: 4
854
850
  summary: Automatic Ruby code style checking tool.