rubocop 0.65.0 → 0.66.0

Sign up to get free protection for your applications and to get access to all the features.
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.