rubocop 1.64.0 → 1.65.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/config/default.yml +11 -1
  4. data/lib/rubocop/config_loader.rb +1 -1
  5. data/lib/rubocop/config_loader_resolver.rb +9 -3
  6. data/lib/rubocop/cop/cop.rb +20 -2
  7. data/lib/rubocop/cop/force.rb +12 -0
  8. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  9. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
  10. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
  11. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  12. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  13. data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -2
  14. data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
  15. data/lib/rubocop/cop/layout/indentation_width.rb +1 -1
  16. data/lib/rubocop/cop/layout/line_length.rb +20 -20
  17. data/lib/rubocop/cop/layout/space_around_operators.rb +3 -0
  18. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -4
  19. data/lib/rubocop/cop/legacy/corrector.rb +12 -2
  20. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  21. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  22. data/lib/rubocop/cop/lint/erb_new_arguments.rb +21 -14
  23. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +14 -7
  24. data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
  25. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  26. data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -9
  27. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
  28. data/lib/rubocop/cop/lint/void.rb +5 -0
  29. data/lib/rubocop/cop/metrics/block_nesting.rb +19 -7
  30. data/lib/rubocop/cop/mixin/alignment.rb +5 -1
  31. data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
  32. data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
  33. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
  34. data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
  35. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -1
  36. data/lib/rubocop/cop/style/copyright.rb +5 -2
  37. data/lib/rubocop/cop/style/documentation.rb +24 -24
  38. data/lib/rubocop/cop/style/hash_except.rb +8 -5
  39. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +77 -43
  40. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
  41. data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
  42. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  43. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  44. data/lib/rubocop/cop/style/redundant_line_continuation.rb +2 -1
  45. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +23 -2
  46. data/lib/rubocop/cop/style/super_arguments.rb +52 -15
  47. data/lib/rubocop/cop/style/symbol_proc.rb +8 -1
  48. data/lib/rubocop/cop/style/zero_length_predicate.rb +28 -24
  49. data/lib/rubocop/cop/team.rb +10 -0
  50. data/lib/rubocop/cop/util.rb +7 -1
  51. data/lib/rubocop/cops_documentation_generator.rb +1 -1
  52. data/lib/rubocop/ext/regexp_parser.rb +4 -21
  53. data/lib/rubocop/formatter/html_formatter.rb +3 -1
  54. data/lib/rubocop/lsp/routes.rb +1 -1
  55. data/lib/rubocop/rspec/shared_contexts.rb +20 -0
  56. data/lib/rubocop/rspec/support.rb +1 -0
  57. data/lib/rubocop/server/cache.rb +10 -0
  58. data/lib/rubocop/server/client_command/exec.rb +2 -2
  59. data/lib/rubocop/server/client_command/start.rb +1 -1
  60. data/lib/rubocop/server/core.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/lib/rubocop.rb +1 -0
  63. metadata +7 -6
@@ -3,8 +3,25 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # Checks for redundant argument forwarding when calling super
7
- # with arguments identical to the method definition.
6
+ # Checks for redundant argument forwarding when calling super with arguments identical to
7
+ # the method definition.
8
+ #
9
+ # Using zero arity `super` within a `define_method` block results in `RuntimeError`:
10
+ #
11
+ # [source,ruby]
12
+ # ----
13
+ # def m
14
+ # define_method(:foo) { super() } # => OK
15
+ # end
16
+ #
17
+ # def m
18
+ # define_method(:foo) { super } # => RuntimeError
19
+ # end
20
+ # ----
21
+ #
22
+ # Furthermore, any arguments accompanied by a block may potentially be delegating to
23
+ # `define_method`, therefore, `super` used within these blocks will be allowed.
24
+ # This approach might result in false negatives, yet ensuring safe detection takes precedence.
8
25
  #
9
26
  # @example
10
27
  # # bad
@@ -26,22 +43,34 @@ module RuboCop
26
43
  # def method(*args, **kwargs)
27
44
  # super()
28
45
  # end
46
+ #
47
+ # # good - assigning to the block variable before calling super
48
+ # def method(&block)
49
+ # # Assigning to the block variable would pass the old value to super,
50
+ # # under this circumstance the block must be referenced explicitly.
51
+ # block ||= proc { 'fallback behavior' }
52
+ # super(&block)
53
+ # end
29
54
  class SuperArguments < Base
30
55
  extend AutoCorrector
31
56
 
32
57
  DEF_TYPES = %i[def defs].freeze
58
+ ASSIGN_TYPES = %i[or_asgn lvasgn].freeze
33
59
 
34
60
  MSG = 'Call `super` without arguments and parentheses when the signature is identical.'
35
61
 
36
62
  def on_super(super_node)
37
63
  def_node = super_node.ancestors.find do |node|
38
- # You can't implicitly call super when dynamically defining methods
39
- break if define_method?(node)
64
+ # When defining dynamic methods, implicitly calling `super` is not possible.
65
+ # Since there is a possibility of delegation to `define_method`,
66
+ # `super` used within the block is always allowed.
67
+ break if node.block_type?
40
68
 
41
69
  break node if DEF_TYPES.include?(node.type)
42
70
  end
43
71
  return unless def_node
44
- return unless arguments_identical?(def_node.arguments.argument_list, super_node.arguments)
72
+ return unless arguments_identical?(def_node, def_node.arguments.argument_list,
73
+ super_node.arguments)
45
74
 
46
75
  add_offense(super_node) { |corrector| corrector.replace(super_node, 'super') }
47
76
  end
@@ -49,7 +78,7 @@ module RuboCop
49
78
  private
50
79
 
51
80
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
52
- def arguments_identical?(def_args, super_args)
81
+ def arguments_identical?(def_node, def_args, super_args)
53
82
  super_args = preprocess_super_args(super_args)
54
83
  return false if def_args.size != super_args.size
55
84
 
@@ -58,7 +87,7 @@ module RuboCop
58
87
  next if positional_rest_arg_same(def_arg, super_arg)
59
88
  next if keyword_arg_same?(def_arg, super_arg)
60
89
  next if keyword_rest_arg_same?(def_arg, super_arg)
61
- next if block_arg_same?(def_arg, super_arg)
90
+ next if block_arg_same?(def_node, def_arg, super_arg)
62
91
  next if forward_arg_same?(def_arg, super_arg)
63
92
 
64
93
  return false
@@ -104,22 +133,30 @@ module RuboCop
104
133
  def_arg.name == lvar_node.children.first
105
134
  end
106
135
 
107
- def block_arg_same?(def_arg, super_arg)
136
+ def block_arg_same?(def_node, def_arg, super_arg)
108
137
  return false unless def_arg.blockarg_type? && super_arg.block_pass_type?
109
138
  # anonymous forwarding
110
139
  return true if (block_pass_child = super_arg.children.first).nil? && def_arg.name.nil?
111
140
 
112
- def_arg.name == block_pass_child.children.first
141
+ block_arg_name = block_pass_child.children.first
142
+ def_arg.name == block_arg_name && !block_reassigned?(def_node, block_arg_name)
113
143
  end
114
144
 
115
- def forward_arg_same?(def_arg, super_arg)
116
- def_arg.forward_arg_type? && super_arg.forwarded_args_type?
117
- end
145
+ # Reassigning the block argument will still pass along the original block to super
146
+ # https://bugs.ruby-lang.org/issues/20505
147
+ def block_reassigned?(def_node, block_arg_name)
148
+ def_node.each_node(*ASSIGN_TYPES).any? do |assign_node|
149
+ # TODO: Since `Symbol#name` is supported from Ruby 3.0, the inheritance check for
150
+ # `AST::Node` can be removed when requiring Ruby 3.0+.
151
+ lhs = assign_node.node_parts[0]
152
+ next if lhs.is_a?(AST::Node) && !lhs.respond_to?(:name)
118
153
 
119
- def define_method?(node)
120
- return false unless node.block_type?
154
+ assign_node.name == block_arg_name
155
+ end
156
+ end
121
157
 
122
- node.method?(:define_method) || node.method?(:define_singleton_method)
158
+ def forward_arg_same?(def_arg, super_arg)
159
+ def_arg.forward_arg_type? && super_arg.forwarded_args_type?
123
160
  end
124
161
 
125
162
  def preprocess_super_args(super_args)
@@ -223,7 +223,14 @@ module RuboCop
223
223
  end
224
224
 
225
225
  def autocorrect_without_args(corrector, node)
226
- autocorrect_lambda_block(corrector, node) if node.send_node.lambda_literal?
226
+ if node.send_node.lambda_literal?
227
+ if node.send_node.loc.selector.source == '->'
228
+ corrector.replace(node, "lambda(&:#{node.body.method_name})")
229
+ return
230
+ else
231
+ autocorrect_lambda_block(corrector, node)
232
+ end
233
+ end
227
234
 
228
235
  corrector.replace(block_range_with_space(node), "(&:#{node.body.method_name})")
229
236
  end
@@ -47,15 +47,16 @@ module RuboCop
47
47
  check_zero_length_comparison(node)
48
48
  check_nonzero_length_comparison(node)
49
49
  end
50
+ alias on_csend on_send
50
51
 
51
52
  private
52
53
 
53
54
  def check_zero_length_predicate(node)
54
- return unless (length_method = zero_length_predicate(node.parent))
55
+ return unless zero_length_predicate?(node.parent)
55
56
  return if non_polymorphic_collection?(node.parent)
56
57
 
57
58
  offense = node.loc.selector.join(node.parent.source_range.end)
58
- message = format(ZERO_MSG, current: "#{length_method}.zero?")
59
+ message = format(ZERO_MSG, current: offense.source)
59
60
 
60
61
  add_offense(offense, message: message) do |corrector|
61
62
  corrector.replace(offense, 'empty?')
@@ -92,44 +93,47 @@ module RuboCop
92
93
  end
93
94
  end
94
95
 
95
- # @!method zero_length_predicate(node)
96
- def_node_matcher :zero_length_predicate, <<~PATTERN
97
- (send (send (...) ${:length :size}) :zero?)
96
+ # @!method zero_length_predicate?(node)
97
+ def_node_matcher :zero_length_predicate?, <<~PATTERN
98
+ (call (call (...) {:length :size}) :zero?)
98
99
  PATTERN
99
100
 
100
101
  # @!method zero_length_comparison(node)
101
102
  def_node_matcher :zero_length_comparison, <<~PATTERN
102
- {(send (send (...) ${:length :size}) $:== (int $0))
103
- (send (int $0) $:== (send (...) ${:length :size}))
104
- (send (send (...) ${:length :size}) $:< (int $1))
105
- (send (int $1) $:> (send (...) ${:length :size}))}
103
+ {(call (call (...) ${:length :size}) $:== (int $0))
104
+ (call (int $0) $:== (call (...) ${:length :size}))
105
+ (call (call (...) ${:length :size}) $:< (int $1))
106
+ (call (int $1) $:> (call (...) ${:length :size}))}
106
107
  PATTERN
107
108
 
108
109
  # @!method nonzero_length_comparison(node)
109
110
  def_node_matcher :nonzero_length_comparison, <<~PATTERN
110
- {(send (send (...) ${:length :size}) ${:> :!=} (int $0))
111
- (send (int $0) ${:< :!=} (send (...) ${:length :size}))}
111
+ {(call (call (...) ${:length :size}) ${:> :!=} (int $0))
112
+ (call (int $0) ${:< :!=} (call (...) ${:length :size}))}
112
113
  PATTERN
113
114
 
114
115
  def replacement(node)
115
- receiver = zero_length_receiver(node)
116
- return "#{receiver.source}.empty?" if receiver
116
+ length_node = zero_length_node(node)
117
+ if length_node&.receiver
118
+ return "#{length_node.receiver.source}#{length_node.loc.dot.source}empty?"
119
+ end
117
120
 
118
- "!#{other_receiver(node).source}.empty?"
121
+ other_length_node = other_length_node(node)
122
+ "!#{other_length_node.receiver.source}#{other_length_node.loc.dot.source}empty?"
119
123
  end
120
124
 
121
- # @!method zero_length_receiver(node)
122
- def_node_matcher :zero_length_receiver, <<~PATTERN
123
- {(send (send $_ _) :== (int 0))
124
- (send (int 0) :== (send $_ _))
125
- (send (send $_ _) :< (int 1))
126
- (send (int 1) :> (send $_ _))}
125
+ # @!method zero_length_node(node)
126
+ def_node_matcher :zero_length_node, <<~PATTERN
127
+ {(send $(call _ _) :== (int 0))
128
+ (send (int 0) :== $(call _ _))
129
+ (send $(call _ _) :< (int 1))
130
+ (send (int 1) :> $(call _ _))}
127
131
  PATTERN
128
132
 
129
- # @!method other_receiver(node)
130
- def_node_matcher :other_receiver, <<~PATTERN
131
- {(send (send $_ _) _ _)
132
- (send _ _ (send $_ _))}
133
+ # @!method other_length_node(node)
134
+ def_node_matcher :other_length_node, <<~PATTERN
135
+ {(call $(call _ _) _ _)
136
+ (call _ _ $(call _ _))}
133
137
  PATTERN
134
138
 
135
139
  # Some collection like objects in the Ruby standard library
@@ -74,6 +74,10 @@ module RuboCop
74
74
  # @deprecated. Use investigate
75
75
  # @return Array<offenses>
76
76
  def inspect_file(processed_source)
77
+ warn Rainbow(<<~WARNING).yellow, uplevel: 1
78
+ `inspect_file` is deprecated. Use `investigate` instead.
79
+ WARNING
80
+
77
81
  investigate(processed_source).offenses
78
82
  end
79
83
 
@@ -108,6 +112,10 @@ module RuboCop
108
112
 
109
113
  # @deprecated
110
114
  def forces
115
+ warn Rainbow(<<~WARNING).yellow, uplevel: 1
116
+ `forces` is deprecated.
117
+ WARNING
118
+
111
119
  @forces ||= self.class.forces_for(cops)
112
120
  end
113
121
 
@@ -240,6 +248,8 @@ module RuboCop
240
248
 
241
249
  if cause.is_a?(Warning)
242
250
  handle_warning(cause, location)
251
+ elsif cause.is_a?(Force::HookError)
252
+ handle_error(cause.cause, location, cause.joining_cop)
243
253
  else
244
254
  handle_error(cause, location, error.cop)
245
255
  end
@@ -20,6 +20,10 @@ module RuboCop
20
20
 
21
21
  # @deprecated Use `ProcessedSource#line_with_comment?`, `contains_comment?` or similar
22
22
  def comment_lines?(node)
23
+ warn Rainbow(<<~WARNING).yellow, uplevel: 1
24
+ `comment_lines?` is deprecated. Use `ProcessedSource#line_with_comment?`, `contains_comment?` or similar instead.
25
+ WARNING
26
+
23
27
  processed_source[line_range(node)].any? { |line| comment_line?(line) }
24
28
  end
25
29
 
@@ -173,7 +177,9 @@ module RuboCop
173
177
  def same_line?(node1, node2)
174
178
  line1 = line(node1)
175
179
  line2 = line(node2)
176
- line1 && line2 && line1 == line2
180
+ return false unless line1 && line2
181
+
182
+ line1 == line2
177
183
  end
178
184
 
179
185
  def indent(node, offset: 0)
@@ -306,7 +306,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
306
306
  filename = "#{department_to_basename(department)}.adoc"
307
307
  content = +"=== Department xref:#{filename}[#{type_title}]\n\n"
308
308
  cops_of_department(department).each do |cop|
309
- anchor = cop.cop_name.sub('/', '').downcase
309
+ anchor = cop.cop_name.delete('/').downcase
310
310
  content << "* xref:#{filename}##{anchor}[#{cop.cop_name}]\n"
311
311
  end
312
312
 
@@ -22,26 +22,9 @@ module RuboCop
22
22
  module Base
23
23
  attr_accessor :origin
24
24
 
25
- if Gem::Version.new(Regexp::Parser::VERSION) >= Gem::Version.new('2.0')
26
- # Shortcut to `loc.expression`
27
- def expression
28
- @expression ||= origin.adjust(begin_pos: ts, end_pos: ts + full_length)
29
- end
30
- # Please remove this `else` branch when support for regexp_parser 1.8 will be dropped.
31
- # It's for compatibility with regexp_parser 1.8 and will never be maintained.
32
- else
33
- attr_accessor :source
34
-
35
- def start_index
36
- # ts is a byte index; convert it to a character index
37
- @start_index ||= source.byteslice(0, ts).length
38
- end
39
-
40
- # Shortcut to `loc.expression`
41
- def expression
42
- end_pos = start_index + full_length
43
- @expression ||= origin.adjust(begin_pos: start_index, end_pos: end_pos)
44
- end
25
+ # Shortcut to `loc.expression`
26
+ def expression
27
+ @expression ||= origin.adjust(begin_pos: ts, end_pos: ts + full_length)
45
28
  end
46
29
 
47
30
  # @returns a location map like `parser` does, with:
@@ -69,8 +52,8 @@ module RuboCop
69
52
 
70
53
  body = expression.adjust(end_pos: -q.text.length)
71
54
  q.origin = origin
72
- q.source = source if q.respond_to?(:source=) # for regexp_parser 1.8
73
55
  q_loc = q.expression
56
+
74
57
  { body: body, quantifier: q_loc }
75
58
  end
76
59
  end
@@ -52,7 +52,9 @@ module RuboCop
52
52
 
53
53
  template = File.read(TEMPLATE_PATH, encoding: Encoding::UTF_8)
54
54
  erb = ERB.new(template)
55
- html = erb.result(context.binding).lines.map { (_1 =~ /^\s*$/).nil? ? _1 : "\n" }.join
55
+ html = erb.result(context.binding).lines.map do |line|
56
+ line.match?(/\A\s*\z/) ? "\n" : line
57
+ end.join
56
58
 
57
59
  output.write html
58
60
  end
@@ -235,7 +235,7 @@ module RuboCop
235
235
  def to_range(location)
236
236
  {
237
237
  start: { character: location[:start_column] - 1, line: location[:start_line] - 1 },
238
- end: { character: location[:last_column] - 1, line: location[:last_line] - 1 }
238
+ end: { character: location[:last_column], line: location[:last_line] - 1 }
239
239
  }
240
240
  end
241
241
  end
@@ -50,6 +50,26 @@ RSpec.shared_context 'isolated environment' do # rubocop:disable Metrics/BlockLe
50
50
  end
51
51
  end
52
52
 
53
+ # Workaround for https://github.com/rubocop/rubocop/issues/12978,
54
+ # there should already be no gemfile in the temp directory
55
+ RSpec.shared_context 'isolated bundler' do
56
+ around do |example|
57
+ # No bundler env and reset cached gemfile path
58
+ Bundler.with_unbundled_env do
59
+ old_values = Bundler.instance_variables.to_h do |name|
60
+ [name, Bundler.instance_variable_get(name)]
61
+ end
62
+ Bundler.instance_variables.each { |name| Bundler.remove_instance_variable(name) }
63
+ example.call
64
+ ensure
65
+ Bundler.instance_variables.each { |name| Bundler.remove_instance_variable(name) }
66
+ old_values.each do |name, value|
67
+ Bundler.instance_variable_set(name, value)
68
+ end
69
+ end
70
+ end
71
+ end
72
+
53
73
  RSpec.shared_context 'maintain registry' do
54
74
  around(:each) { |example| RuboCop::Cop::Registry.with_temporary_global { example.run } }
55
75
 
@@ -13,6 +13,7 @@ RSpec.configure do |config|
13
13
  config.include HostEnvironmentSimulatorHelper
14
14
  config.include_context 'config', :config
15
15
  config.include_context 'isolated environment', :isolated_environment
16
+ config.include_context 'isolated bundler', :isolated_bundler
16
17
  config.include_context 'lsp', :lsp
17
18
  config.include_context 'maintain registry', :restore_registry
18
19
  config.include_context 'ruby 2.0', :ruby20
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'digest'
3
4
  require 'pathname'
4
5
  require_relative '../cache_config'
5
6
  require_relative '../config_finder'
@@ -19,6 +20,7 @@ module RuboCop
19
20
  # @api private
20
21
  class Cache
21
22
  GEMFILE_NAMES = %w[Gemfile gems.rb].freeze
23
+ LOCKFILE_NAMES = %w[Gemfile.lock gems.locked].freeze
22
24
 
23
25
  class << self
24
26
  attr_accessor :cache_root_path
@@ -41,6 +43,14 @@ module RuboCop
41
43
  @project_dir_cache_key ||= project_dir[1..].tr('/', '+')
42
44
  end
43
45
 
46
+ def restart_key
47
+ lockfile_path = LOCKFILE_NAMES.map do |lockfile_name|
48
+ Pathname(project_dir).join(lockfile_name)
49
+ end.find(&:exist?)
50
+
51
+ Digest::SHA1.hexdigest(lockfile_path&.read || RuboCop::Version::STRING)
52
+ end
53
+
44
54
  def dir
45
55
  Pathname.new(File.join(cache_path, project_dir_cache_key)).tap do |d|
46
56
  d.mkpath unless d.exist?
@@ -41,7 +41,7 @@ module RuboCop
41
41
  end
42
42
 
43
43
  def incompatible_version?
44
- Cache.version_path.read != RuboCop::Version::STRING
44
+ Cache.version_path.read != Cache.restart_key
45
45
  end
46
46
 
47
47
  def stderr
@@ -54,7 +54,7 @@ module RuboCop
54
54
  end
55
55
 
56
56
  status = Cache.status_path.read
57
- raise "RuboCop server: '#{status}' is not a valid status!" if (status =~ /^\d+$/).nil?
57
+ raise "RuboCop server: '#{status}' is not a valid status!" unless /\A\d+\z/.match?(status)
58
58
 
59
59
  status.to_i
60
60
  end
@@ -34,7 +34,7 @@ module RuboCop
34
34
  exit 0
35
35
  end
36
36
 
37
- Cache.write_version_file(RuboCop::Version::STRING)
37
+ Cache.write_version_file(Cache.restart_key)
38
38
 
39
39
  host = ENV.fetch('RUBOCOP_SERVER_HOST', '127.0.0.1')
40
40
  port = ENV.fetch('RUBOCOP_SERVER_PORT', 0)
@@ -44,6 +44,10 @@ module RuboCop
44
44
  write_port_and_token_files
45
45
 
46
46
  pid = fork do
47
+ if defined?(RubyVM::YJIT.enable)
48
+ RubyVM::YJIT.enable
49
+ end
50
+
47
51
  Process.daemon(true)
48
52
  $stderr.reopen(Cache.stderr_path, 'w')
49
53
  process_input
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.64.0'
6
+ STRING = '1.65.0'
7
7
 
8
8
  MSG = '%<version>s (using %<parser_version>s, ' \
9
9
  'rubocop-ast %<rubocop_ast_version>s, ' \
data/lib/rubocop.rb CHANGED
@@ -169,6 +169,7 @@ require_relative 'rubocop/cop/bundler/gem_version'
169
169
  require_relative 'rubocop/cop/bundler/insecure_protocol_source'
170
170
  require_relative 'rubocop/cop/bundler/ordered_gems'
171
171
 
172
+ require_relative 'rubocop/cop/gemspec/add_runtime_dependency'
172
173
  require_relative 'rubocop/cop/gemspec/dependency_version'
173
174
  require_relative 'rubocop/cop/gemspec/deprecated_attribute_assignment'
174
175
  require_relative 'rubocop/cop/gemspec/development_dependencies'
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: 1.64.0
4
+ version: 1.65.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: 2024-05-23 00:00:00.000000000 Z
13
+ date: 2024-07-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -94,7 +94,7 @@ dependencies:
94
94
  requirements:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: '1.8'
97
+ version: '2.4'
98
98
  - - "<"
99
99
  - !ruby/object:Gem::Version
100
100
  version: '3.0'
@@ -104,7 +104,7 @@ dependencies:
104
104
  requirements:
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
- version: '1.8'
107
+ version: '2.4'
108
108
  - - "<"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.0'
@@ -270,6 +270,7 @@ files:
270
270
  - lib/rubocop/cop/documentation.rb
271
271
  - lib/rubocop/cop/exclude_limit.rb
272
272
  - lib/rubocop/cop/force.rb
273
+ - lib/rubocop/cop/gemspec/add_runtime_dependency.rb
273
274
  - lib/rubocop/cop/gemspec/dependency_version.rb
274
275
  - lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb
275
276
  - lib/rubocop/cop/gemspec/development_dependencies.rb
@@ -1034,9 +1035,9 @@ licenses:
1034
1035
  - MIT
1035
1036
  metadata:
1036
1037
  homepage_uri: https://rubocop.org/
1037
- changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.64.0
1038
+ changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.65.0
1038
1039
  source_code_uri: https://github.com/rubocop/rubocop/
1039
- documentation_uri: https://docs.rubocop.org/rubocop/1.64/
1040
+ documentation_uri: https://docs.rubocop.org/rubocop/1.65/
1040
1041
  bug_tracker_uri: https://github.com/rubocop/rubocop/issues
1041
1042
  rubygems_mfa_required: 'true'
1042
1043
  post_install_message: