rubocop 1.41.0 → 1.43.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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +2 -2
  4. data/config/default.yml +34 -2
  5. data/lib/rubocop/cli.rb +1 -1
  6. data/lib/rubocop/config.rb +7 -7
  7. data/lib/rubocop/config_loader_resolver.rb +5 -1
  8. data/lib/rubocop/cop/base.rb +62 -61
  9. data/lib/rubocop/cop/cop.rb +28 -28
  10. data/lib/rubocop/cop/corrector.rb +23 -11
  11. data/lib/rubocop/cop/gemspec/dependency_version.rb +16 -18
  12. data/lib/rubocop/cop/layout/class_structure.rb +32 -11
  13. data/lib/rubocop/cop/layout/comment_indentation.rb +3 -1
  14. data/lib/rubocop/cop/layout/indentation_style.rb +4 -1
  15. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +6 -6
  16. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  17. data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
  18. data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -2
  19. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +19 -0
  20. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +3 -1
  21. data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
  22. data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
  23. data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
  24. data/lib/rubocop/cop/lint/useless_rescue.rb +71 -0
  25. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -3
  26. data/lib/rubocop/cop/metrics/parameter_lists.rb +27 -0
  27. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  28. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -4
  29. data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -1
  30. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +9 -1
  31. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
  32. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -0
  33. data/lib/rubocop/cop/naming/block_forwarding.rb +1 -1
  34. data/lib/rubocop/cop/registry.rb +22 -22
  35. data/lib/rubocop/cop/security/compound_hash.rb +2 -1
  36. data/lib/rubocop/cop/style/alias.rb +9 -1
  37. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  38. data/lib/rubocop/cop/style/concat_array_literals.rb +22 -2
  39. data/lib/rubocop/cop/style/documentation.rb +10 -4
  40. data/lib/rubocop/cop/style/guard_clause.rb +12 -8
  41. data/lib/rubocop/cop/style/hash_each_methods.rb +13 -1
  42. data/lib/rubocop/cop/style/hash_syntax.rb +11 -7
  43. data/lib/rubocop/cop/style/identical_conditional_branches.rb +15 -0
  44. data/lib/rubocop/cop/style/map_to_set.rb +61 -0
  45. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +12 -9
  46. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -4
  47. data/lib/rubocop/cop/style/min_max_comparison.rb +73 -0
  48. data/lib/rubocop/cop/style/missing_else.rb +13 -1
  49. data/lib/rubocop/cop/style/operator_method_call.rb +15 -1
  50. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +1 -1
  51. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -1
  52. data/lib/rubocop/cop/style/redundant_string_escape.rb +6 -3
  53. data/lib/rubocop/cop/style/require_order.rb +4 -2
  54. data/lib/rubocop/cop/style/select_by_regexp.rb +6 -2
  55. data/lib/rubocop/cop/style/signal_exception.rb +8 -6
  56. data/lib/rubocop/cop/style/string_hash_keys.rb +4 -1
  57. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -4
  58. data/lib/rubocop/cop/style/word_array.rb +41 -0
  59. data/lib/rubocop/cop/style/yoda_expression.rb +81 -0
  60. data/lib/rubocop/cop/style/zero_length_predicate.rb +31 -14
  61. data/lib/rubocop/cop/team.rb +29 -29
  62. data/lib/rubocop/cop/variable_force.rb +0 -3
  63. data/lib/rubocop/cops_documentation_generator.rb +11 -8
  64. data/lib/rubocop/formatter.rb +2 -0
  65. data/lib/rubocop/path_util.rb +17 -7
  66. data/lib/rubocop/result_cache.rb +1 -1
  67. data/lib/rubocop/runner.rb +10 -3
  68. data/lib/rubocop/target_ruby.rb +0 -1
  69. data/lib/rubocop/version.rb +1 -1
  70. data/lib/rubocop.rb +4 -0
  71. metadata +13 -9
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Forbids Yoda expressions, i.e. binary operations (using `*`, `+`, `&`, `|`,
7
+ # and `^` operators) where the order of expression is reversed, eg. `1 + x`.
8
+ # This cop complements `Style/YodaCondition` cop, which has a similar purpose.
9
+ #
10
+ # This cop is disabled by default to respect user intentions such as:
11
+ #
12
+ # [source,ruby]
13
+ # ----
14
+ # config.server_port = 9000 + ENV["TEST_ENV_NUMBER"].to_i
15
+ # ----
16
+ #
17
+ # @safety
18
+ # This cop is unsafe because binary operators can be defined
19
+ # differently on different classes, and are not guaranteed to
20
+ # have the same result if reversed.
21
+ #
22
+ # @example SupportedOperators: ['*', '+', '&'']
23
+ # # bad
24
+ # 1 + x
25
+ # 10 * y
26
+ # 1 & z
27
+ #
28
+ # # good
29
+ # 60 * 24
30
+ # x + 1
31
+ # y * 10
32
+ # z & 1
33
+ #
34
+ # # good
35
+ # 1 | x
36
+ #
37
+ class YodaExpression < Base
38
+ extend AutoCorrector
39
+
40
+ MSG = 'Non-literal operand (`%<source>s`) should be first.'
41
+
42
+ RESTRICT_ON_SEND = %i[* + & | ^].freeze
43
+
44
+ def on_new_investigation
45
+ @offended_nodes = nil
46
+ end
47
+
48
+ def on_send(node)
49
+ return unless supported_operators.include?(node.method_name.to_s)
50
+
51
+ lhs = node.receiver
52
+ rhs = node.first_argument
53
+ return if !lhs.numeric_type? || rhs.numeric_type?
54
+
55
+ return if offended_ancestor?(node)
56
+
57
+ message = format(MSG, source: rhs.source)
58
+ add_offense(node, message: message) do |corrector|
59
+ corrector.swap(lhs, rhs)
60
+ end
61
+
62
+ offended_nodes.add(node)
63
+ end
64
+
65
+ private
66
+
67
+ def supported_operators
68
+ Array(cop_config['SupportedOperators'])
69
+ end
70
+
71
+ def offended_ancestor?(node)
72
+ node.each_ancestor(:send).any? { |ancestor| @offended_nodes&.include?(ancestor) }
73
+ end
74
+
75
+ def offended_nodes
76
+ @offended_nodes ||= Set.new.compare_by_identity
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -34,43 +34,55 @@ module RuboCop
34
34
  class ZeroLengthPredicate < Base
35
35
  extend AutoCorrector
36
36
 
37
- ZERO_MSG = 'Use `empty?` instead of `%<lhs>s %<opr>s %<rhs>s`.'
38
- NONZERO_MSG = 'Use `!empty?` instead of `%<lhs>s %<opr>s %<rhs>s`.'
37
+ ZERO_MSG = 'Use `empty?` instead of `%<current>s`.'
38
+ NONZERO_MSG = 'Use `!empty?` instead of `%<current>s`.'
39
39
 
40
40
  RESTRICT_ON_SEND = %i[size length].freeze
41
41
 
42
42
  def on_send(node)
43
43
  check_zero_length_predicate(node)
44
- check_nonzero_length_predicate(node)
44
+ check_zero_length_comparison(node)
45
+ check_nonzero_length_comparison(node)
45
46
  end
46
47
 
47
48
  private
48
49
 
49
50
  def check_zero_length_predicate(node)
50
- zero_length_predicate = zero_length_predicate(node.parent)
51
- return unless zero_length_predicate
51
+ return unless (length_method = zero_length_predicate(node.parent))
52
52
 
53
- lhs, opr, rhs = zero_length_predicate
53
+ offense = node.loc.selector.join(node.parent.source_range.end)
54
+ message = format(ZERO_MSG, current: "#{length_method}.zero?")
55
+
56
+ add_offense(offense, message: message) do |corrector|
57
+ corrector.replace(offense, 'empty?')
58
+ end
59
+ end
60
+
61
+ def check_zero_length_comparison(node)
62
+ zero_length_comparison = zero_length_comparison(node.parent)
63
+ return unless zero_length_comparison
64
+
65
+ lhs, opr, rhs = zero_length_comparison
54
66
 
55
67
  return if non_polymorphic_collection?(node.parent)
56
68
 
57
69
  add_offense(
58
- node.parent, message: format(ZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
70
+ node.parent, message: format(ZERO_MSG, current: "#{lhs} #{opr} #{rhs}")
59
71
  ) do |corrector|
60
72
  corrector.replace(node.parent, replacement(node.parent))
61
73
  end
62
74
  end
63
75
 
64
- def check_nonzero_length_predicate(node)
65
- nonzero_length_predicate = nonzero_length_predicate(node.parent)
66
- return unless nonzero_length_predicate
76
+ def check_nonzero_length_comparison(node)
77
+ nonzero_length_comparison = nonzero_length_comparison(node.parent)
78
+ return unless nonzero_length_comparison
67
79
 
68
- lhs, opr, rhs = nonzero_length_predicate
80
+ lhs, opr, rhs = nonzero_length_comparison
69
81
 
70
82
  return if non_polymorphic_collection?(node.parent)
71
83
 
72
84
  add_offense(
73
- node.parent, message: format(NONZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
85
+ node.parent, message: format(NONZERO_MSG, current: "#{lhs} #{opr} #{rhs}")
74
86
  ) do |corrector|
75
87
  corrector.replace(node.parent, replacement(node.parent))
76
88
  end
@@ -78,14 +90,19 @@ module RuboCop
78
90
 
79
91
  # @!method zero_length_predicate(node)
80
92
  def_node_matcher :zero_length_predicate, <<~PATTERN
93
+ (send (send (...) ${:length :size}) :zero?)
94
+ PATTERN
95
+
96
+ # @!method zero_length_comparison(node)
97
+ def_node_matcher :zero_length_comparison, <<~PATTERN
81
98
  {(send (send (...) ${:length :size}) $:== (int $0))
82
99
  (send (int $0) $:== (send (...) ${:length :size}))
83
100
  (send (send (...) ${:length :size}) $:< (int $1))
84
101
  (send (int $1) $:> (send (...) ${:length :size}))}
85
102
  PATTERN
86
103
 
87
- # @!method nonzero_length_predicate(node)
88
- def_node_matcher :nonzero_length_predicate, <<~PATTERN
104
+ # @!method nonzero_length_comparison(node)
105
+ def_node_matcher :nonzero_length_comparison, <<~PATTERN
89
106
  {(send (send (...) ${:length :size}) ${:> :!=} (int $0))
90
107
  (send (int $0) ${:< :!=} (send (...) ${:length :size}))}
91
108
  PATTERN
@@ -10,20 +10,6 @@ module RuboCop
10
10
  # first the ones needed for autocorrection (if any), then the rest
11
11
  # (unless autocorrections happened).
12
12
  class Team
13
- attr_reader :errors, :warnings, :updated_source_file, :cops
14
-
15
- alias updated_source_file? updated_source_file
16
-
17
- def initialize(cops, config = nil, options = {})
18
- @cops = cops
19
- @config = config
20
- @options = options
21
- reset
22
- @ready = true
23
-
24
- validate_config
25
- end
26
-
27
13
  # @return [Team]
28
14
  def self.new(cop_or_classes, config, options = {})
29
15
  # Support v0 api:
@@ -47,6 +33,35 @@ module RuboCop
47
33
  end
48
34
  end
49
35
 
36
+ # @return [Array<Force>] needed for the given cops
37
+ def self.forces_for(cops)
38
+ needed = Hash.new { |h, k| h[k] = [] }
39
+ cops.each do |cop|
40
+ forces = cop.class.joining_forces
41
+ if forces.is_a?(Array)
42
+ forces.each { |force| needed[force] << cop }
43
+ elsif forces
44
+ needed[forces] << cop
45
+ end
46
+ end
47
+
48
+ needed.map { |force_class, joining_cops| force_class.new(joining_cops) }
49
+ end
50
+
51
+ attr_reader :errors, :warnings, :updated_source_file, :cops
52
+
53
+ alias updated_source_file? updated_source_file
54
+
55
+ def initialize(cops, config = nil, options = {})
56
+ @cops = cops
57
+ @config = config
58
+ @options = options
59
+ reset
60
+ @ready = true
61
+
62
+ validate_config
63
+ end
64
+
50
65
  def autocorrect?
51
66
  @options[:autocorrect]
52
67
  end
@@ -94,21 +109,6 @@ module RuboCop
94
109
  @forces ||= self.class.forces_for(cops)
95
110
  end
96
111
 
97
- # @return [Array<Force>] needed for the given cops
98
- def self.forces_for(cops)
99
- needed = Hash.new { |h, k| h[k] = [] }
100
- cops.each do |cop|
101
- forces = cop.class.joining_forces
102
- if forces.is_a?(Array)
103
- forces.each { |force| needed[force] << cop }
104
- elsif forces
105
- needed[forces] << cop
106
- end
107
- end
108
-
109
- needed.map { |force_class, joining_cops| force_class.new(joining_cops) }
110
- end
111
-
112
112
  def external_dependency_checksum
113
113
  keys = cops.map(&:external_dependency_checksum).compact
114
114
  Digest::SHA1.hexdigest(keys.join)
@@ -108,7 +108,6 @@ module RuboCop
108
108
  :skip_children
109
109
  end
110
110
 
111
- # rubocop:disable Layout/ClassStructure
112
111
  NODE_HANDLER_METHOD_NAMES = [
113
112
  [VARIABLE_ASSIGNMENT_TYPE, :process_variable_assignment],
114
113
  [REGEXP_NAMED_CAPTURE_TYPE, :process_regexp_named_captures],
@@ -123,8 +122,6 @@ module RuboCop
123
122
  *SCOPE_TYPES.product([:process_scope])
124
123
  ].to_h.freeze
125
124
  private_constant :NODE_HANDLER_METHOD_NAMES
126
- # rubocop:enable Layout/ClassStructure
127
-
128
125
  def node_handler_method_name(node)
129
126
  NODE_HANDLER_METHOD_NAMES[node.type]
130
127
  end
@@ -33,7 +33,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
33
33
  cops.with_department(department).sort!
34
34
  end
35
35
 
36
- def cops_body(cop, description, examples_objects, safety_objects, pars) # rubocop:disable Metrics/AbcSize
36
+ def cops_body(cop, description, examples_objects, safety_objects, see_objects, pars) # rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
37
37
  check_examples_to_have_the_default_enforced_style!(examples_objects, cop)
38
38
 
39
39
  content = h2(cop.cop_name)
@@ -43,7 +43,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
43
43
  content << safety_object(safety_objects) if safety_objects.any? { |s| !s.text.blank? }
44
44
  content << examples(examples_objects) if examples_objects.any?
45
45
  content << configurations(cop.department, pars)
46
- content << references(cop)
46
+ content << references(cop, see_objects)
47
47
  content
48
48
  end
49
49
 
@@ -224,14 +224,16 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
224
224
  end
225
225
  end
226
226
 
227
- def references(cop)
227
+ def references(cop, see_objects) # rubocop:disable Metrics/AbcSize
228
228
  cop_config = config.for_cop(cop)
229
229
  urls = RuboCop::Cop::MessageAnnotator.new(config, cop.name, cop_config, {}).urls
230
- return '' if urls.empty?
230
+ return '' if urls.empty? && see_objects.empty?
231
231
 
232
232
  content = h3('References')
233
233
  content << urls.map { |url| "* #{url}" }.join("\n")
234
- content << "\n"
234
+ content << "\n" unless urls.empty?
235
+ content << see_objects.map { |see| "* #{see.name}" }.join("\n")
236
+ content << "\n" unless see_objects.empty?
235
237
  content
236
238
  end
237
239
 
@@ -257,7 +259,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
257
259
  end
258
260
  end
259
261
 
260
- def print_cop_with_doc(cop)
262
+ def print_cop_with_doc(cop) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
261
263
  cop_config = config.for_cop(cop)
262
264
  non_display_keys = %w[
263
265
  Description Enabled StyleGuide Reference Safe SafeAutoCorrect VersionAdded
@@ -265,13 +267,14 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
265
267
  ]
266
268
  pars = cop_config.reject { |k| non_display_keys.include? k }
267
269
  description = 'No documentation'
268
- examples_object = safety_object = []
270
+ examples_object = safety_object = see_object = []
269
271
  cop_code(cop) do |code_object|
270
272
  description = code_object.docstring unless code_object.docstring.blank?
271
273
  examples_object = code_object.tags('example')
272
274
  safety_object = code_object.tags('safety')
275
+ see_object = code_object.tags('see')
273
276
  end
274
- cops_body(cop, description, examples_object, safety_object, pars)
277
+ cops_body(cop, description, examples_object, safety_object, see_object, pars)
275
278
  end
276
279
 
277
280
  def cop_code(cop)
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RuboCop
4
+ # The bootstrap module for formatter.
5
+ # @api private
4
6
  module Formatter
5
7
  require_relative 'formatter/text_util'
6
8
 
@@ -28,14 +28,19 @@ module RuboCop
28
28
  end
29
29
  end
30
30
 
31
+ SMART_PATH_CACHE = {} # rubocop:disable Style/MutableConstant
32
+ private_constant :SMART_PATH_CACHE
33
+
31
34
  def smart_path(path)
32
- # Ideally, we calculate this relative to the project root.
33
- base_dir = Dir.pwd
35
+ SMART_PATH_CACHE[path] ||= begin
36
+ # Ideally, we calculate this relative to the project root.
37
+ base_dir = Dir.pwd
34
38
 
35
- if path.start_with? base_dir
36
- relative_path(path, base_dir)
37
- else
38
- path
39
+ if path.start_with? base_dir
40
+ relative_path(path, base_dir)
41
+ else
42
+ path
43
+ end
39
44
  end
40
45
  end
41
46
 
@@ -46,7 +51,7 @@ module RuboCop
46
51
  matches =
47
52
  if pattern == path
48
53
  true
49
- elsif pattern.match?(/[*{\[?]/)
54
+ elsif glob?(pattern)
50
55
  File.fnmatch?(pattern, path, File::FNM_PATHNAME | File::FNM_EXTGLOB)
51
56
  end
52
57
 
@@ -68,6 +73,11 @@ module RuboCop
68
73
  %r{\A([A-Z]:)?/}i.match?(path)
69
74
  end
70
75
 
76
+ # Returns true for a glob
77
+ def glob?(path)
78
+ path.match?(/[*{\[?]/)
79
+ end
80
+
71
81
  def hidden_file_in_not_hidden_dir?(pattern, path)
72
82
  hidden_file?(path) &&
73
83
  File.fnmatch?(
@@ -53,7 +53,7 @@ module RuboCop
53
53
  def remove_oldest_files(files, dirs, cache_root, verbose)
54
54
  # Add 1 to half the number of files, so that we remove the file if
55
55
  # there's only 1 left.
56
- remove_count = 1 + (files.length / 2)
56
+ remove_count = (files.length / 2) + 1
57
57
  puts "Removing the #{remove_count} oldest files from #{cache_root}" if verbose
58
58
  sorted = files.sort_by { |path| File.mtime(path) }
59
59
  remove_files(sorted, dirs, remove_count)
@@ -27,6 +27,11 @@ module RuboCop
27
27
  # @api private
28
28
  MAX_ITERATIONS = 200
29
29
 
30
+ # @api private
31
+ REDUNDANT_COP_DISABLE_DIRECTIVE_RULES = %w[
32
+ Lint/RedundantCopDisableDirective RedundantCopDisableDirective Lint
33
+ ].freeze
34
+
30
35
  attr_reader :errors, :warnings
31
36
  attr_writer :aborting
32
37
 
@@ -194,7 +199,9 @@ module RuboCop
194
199
  end
195
200
 
196
201
  def check_for_redundant_disables?(source)
197
- !source.disabled_line_ranges.empty? && !filtered_run?
202
+ return false if source.disabled_line_ranges.empty? || except_redundant_cop_disable_directive?
203
+
204
+ !@options[:only]
198
205
  end
199
206
 
200
207
  def redundant_cop_disable_directive(file)
@@ -205,8 +212,8 @@ module RuboCop
205
212
  yield cop if cop.relevant_file?(file)
206
213
  end
207
214
 
208
- def filtered_run?
209
- @options[:except] || @options[:only]
215
+ def except_redundant_cop_disable_directive?
216
+ @options[:except] && (@options[:except] & REDUNDANT_COP_DISABLE_DIRECTIVE_RULES).any?
210
217
  end
211
218
 
212
219
  def file_started(file)
@@ -244,7 +244,6 @@ module RuboCop
244
244
  ].freeze
245
245
 
246
246
  private_constant :SOURCES
247
-
248
247
  def initialize(config)
249
248
  @config = config
250
249
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '1.41.0'
6
+ STRING = '1.43.0'
7
7
 
8
8
  MSG = '%<version>s (using Parser %<parser_version>s, ' \
9
9
  'rubocop-ast %<rubocop_ast_version>s, ' \
data/lib/rubocop.rb CHANGED
@@ -399,6 +399,7 @@ require_relative 'rubocop/cop/lint/useless_access_modifier'
399
399
  require_relative 'rubocop/cop/lint/useless_assignment'
400
400
  require_relative 'rubocop/cop/lint/useless_else_without_rescue'
401
401
  require_relative 'rubocop/cop/lint/useless_method_definition'
402
+ require_relative 'rubocop/cop/lint/useless_rescue'
402
403
  require_relative 'rubocop/cop/lint/useless_ruby2_keywords'
403
404
  require_relative 'rubocop/cop/lint/useless_setter_call'
404
405
  require_relative 'rubocop/cop/lint/useless_times'
@@ -538,8 +539,10 @@ require_relative 'rubocop/cop/style/lambda_call'
538
539
  require_relative 'rubocop/cop/style/line_end_concatenation'
539
540
  require_relative 'rubocop/cop/style/magic_comment_format'
540
541
  require_relative 'rubocop/cop/style/map_to_hash'
542
+ require_relative 'rubocop/cop/style/map_to_set'
541
543
  require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
542
544
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
545
+ require_relative 'rubocop/cop/style/min_max_comparison'
543
546
  require_relative 'rubocop/cop/style/multiline_in_pattern_then'
544
547
  require_relative 'rubocop/cop/style/numbered_parameters'
545
548
  require_relative 'rubocop/cop/style/open_struct_use'
@@ -675,6 +678,7 @@ require_relative 'rubocop/cop/style/while_until_do'
675
678
  require_relative 'rubocop/cop/style/while_until_modifier'
676
679
  require_relative 'rubocop/cop/style/word_array'
677
680
  require_relative 'rubocop/cop/style/yoda_condition'
681
+ require_relative 'rubocop/cop/style/yoda_expression'
678
682
  require_relative 'rubocop/cop/style/zero_length_predicate'
679
683
 
680
684
  require_relative 'rubocop/cop/security/compound_hash'
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.41.0
4
+ version: 1.43.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: 2022-12-20 00:00:00.000000000 Z
13
+ date: 2023-01-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -46,14 +46,14 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 3.1.2.1
49
+ version: 3.2.0.0
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: 3.1.2.1
56
+ version: 3.2.0.0
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rainbow
59
59
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +120,7 @@ dependencies:
120
120
  requirements:
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: 1.23.0
123
+ version: 1.24.1
124
124
  - - "<"
125
125
  - !ruby/object:Gem::Version
126
126
  version: '2.0'
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: 1.23.0
133
+ version: 1.24.1
134
134
  - - "<"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '2.0'
@@ -154,7 +154,7 @@ dependencies:
154
154
  requirements:
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 1.4.0
157
+ version: 2.4.0
158
158
  - - "<"
159
159
  - !ruby/object:Gem::Version
160
160
  version: '3.0'
@@ -164,7 +164,7 @@ dependencies:
164
164
  requirements:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 1.4.0
167
+ version: 2.4.0
168
168
  - - "<"
169
169
  - !ruby/object:Gem::Version
170
170
  version: '3.0'
@@ -539,6 +539,7 @@ files:
539
539
  - lib/rubocop/cop/lint/useless_assignment.rb
540
540
  - lib/rubocop/cop/lint/useless_else_without_rescue.rb
541
541
  - lib/rubocop/cop/lint/useless_method_definition.rb
542
+ - lib/rubocop/cop/lint/useless_rescue.rb
542
543
  - lib/rubocop/cop/lint/useless_ruby2_keywords.rb
543
544
  - lib/rubocop/cop/lint/useless_setter_call.rb
544
545
  - lib/rubocop/cop/lint/useless_times.rb
@@ -760,6 +761,7 @@ files:
760
761
  - lib/rubocop/cop/style/magic_comment_format.rb
761
762
  - lib/rubocop/cop/style/map_compact_with_conditional_block.rb
762
763
  - lib/rubocop/cop/style/map_to_hash.rb
764
+ - lib/rubocop/cop/style/map_to_set.rb
763
765
  - lib/rubocop/cop/style/method_call_with_args_parentheses.rb
764
766
  - lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb
765
767
  - lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb
@@ -767,6 +769,7 @@ files:
767
769
  - lib/rubocop/cop/style/method_called_on_do_end_block.rb
768
770
  - lib/rubocop/cop/style/method_def_parentheses.rb
769
771
  - lib/rubocop/cop/style/min_max.rb
772
+ - lib/rubocop/cop/style/min_max_comparison.rb
770
773
  - lib/rubocop/cop/style/missing_else.rb
771
774
  - lib/rubocop/cop/style/missing_respond_to_missing.rb
772
775
  - lib/rubocop/cop/style/mixin_grouping.rb
@@ -898,6 +901,7 @@ files:
898
901
  - lib/rubocop/cop/style/while_until_modifier.rb
899
902
  - lib/rubocop/cop/style/word_array.rb
900
903
  - lib/rubocop/cop/style/yoda_condition.rb
904
+ - lib/rubocop/cop/style/yoda_expression.rb
901
905
  - lib/rubocop/cop/style/zero_length_predicate.rb
902
906
  - lib/rubocop/cop/team.rb
903
907
  - lib/rubocop/cop/util.rb
@@ -992,7 +996,7 @@ metadata:
992
996
  homepage_uri: https://rubocop.org/
993
997
  changelog_uri: https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md
994
998
  source_code_uri: https://github.com/rubocop/rubocop/
995
- documentation_uri: https://docs.rubocop.org/rubocop/1.41/
999
+ documentation_uri: https://docs.rubocop.org/rubocop/1.43/
996
1000
  bug_tracker_uri: https://github.com/rubocop/rubocop/issues
997
1001
  rubygems_mfa_required: 'true'
998
1002
  post_install_message: