rbhint 0.85.1.rc2 → 0.87.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -1
  3. data/bin/rubocop-profile +16 -0
  4. data/config/default.yml +118 -10
  5. data/lib/rbhint/version.rb +1 -1
  6. data/lib/rubocop.rb +15 -1
  7. data/lib/rubocop/cli.rb +0 -2
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +40 -5
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -1
  11. data/lib/rubocop/config_loader.rb +24 -66
  12. data/lib/rubocop/config_obsoletion.rb +0 -1
  13. data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
  14. data/lib/rubocop/cop/badge.rb +1 -1
  15. data/lib/rubocop/cop/base.rb +407 -0
  16. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
  17. data/lib/rubocop/cop/commissioner.rb +48 -50
  18. data/lib/rubocop/cop/cop.rb +85 -236
  19. data/lib/rubocop/cop/corrector.rb +38 -115
  20. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
  21. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +6 -1
  22. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  23. data/lib/rubocop/cop/generator.rb +1 -1
  24. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
  25. data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
  26. data/lib/rubocop/cop/layout/class_structure.rb +2 -37
  27. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  28. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
  29. data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
  30. data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
  31. data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
  32. data/lib/rubocop/cop/layout/multiline_block_layout.rb +17 -7
  33. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
  34. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +27 -68
  35. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
  36. data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
  37. data/lib/rubocop/cop/legacy/corrector.rb +29 -0
  38. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -4
  39. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  40. data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -2
  41. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +3 -2
  42. data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
  43. data/lib/rubocop/cop/lint/literal_as_condition.rb +11 -1
  44. data/lib/rubocop/cop/lint/nested_method_definition.rb +14 -20
  45. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  46. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +8 -3
  47. data/lib/rubocop/cop/lint/raise_exception.rb +8 -0
  48. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  49. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +27 -23
  50. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
  51. data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
  52. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +8 -0
  53. data/lib/rubocop/cop/lint/syntax.rb +11 -26
  54. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
  55. data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
  56. data/lib/rubocop/cop/metrics/block_length.rb +24 -2
  57. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  58. data/lib/rubocop/cop/metrics/class_length.rb +26 -3
  59. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
  60. data/lib/rubocop/cop/metrics/method_length.rb +24 -1
  61. data/lib/rubocop/cop/metrics/module_length.rb +26 -3
  62. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
  63. data/lib/rubocop/cop/metrics/perceived_complexity.rb +3 -3
  64. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
  65. data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
  66. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  67. data/lib/rubocop/cop/mixin/code_length.rb +4 -0
  68. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  69. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
  70. data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
  71. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
  72. data/lib/rubocop/cop/mixin/statement_modifier.rb +3 -3
  73. data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -2
  74. data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
  75. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +4 -2
  76. data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
  77. data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
  78. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
  79. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  80. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  81. data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
  82. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  83. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  84. data/lib/rubocop/cop/offense.rb +16 -2
  85. data/lib/rubocop/cop/style/accessor_grouping.rb +147 -0
  86. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  87. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +3 -2
  88. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +146 -0
  89. data/lib/rubocop/cop/style/case_like_if.rb +217 -0
  90. data/lib/rubocop/cop/style/class_vars.rb +21 -0
  91. data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
  92. data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
  93. data/lib/rubocop/cop/style/date_time.rb +1 -1
  94. data/lib/rubocop/cop/style/dir.rb +2 -2
  95. data/lib/rubocop/cop/style/empty_literal.rb +5 -5
  96. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
  97. data/lib/rubocop/cop/style/exponential_notation.rb +6 -8
  98. data/lib/rubocop/cop/style/float_division.rb +7 -10
  99. data/lib/rubocop/cop/style/format_string_token.rb +5 -5
  100. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +62 -0
  101. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  102. data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -11
  103. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
  104. data/lib/rubocop/cop/style/missing_else.rb +1 -11
  105. data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
  106. data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
  107. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
  108. data/lib/rubocop/cop/style/numeric_predicate.rb +3 -4
  109. data/lib/rubocop/cop/style/parallel_assignment.rb +3 -3
  110. data/lib/rubocop/cop/style/proc.rb +1 -1
  111. data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
  112. data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
  113. data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
  114. data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
  115. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  116. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  117. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
  118. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
  119. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -2
  120. data/lib/rubocop/cop/style/redundant_sort.rb +3 -2
  121. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
  122. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  123. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
  124. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  125. data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
  126. data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
  127. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  128. data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
  129. data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
  130. data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
  131. data/lib/rubocop/cop/team.rb +97 -81
  132. data/lib/rubocop/cop/utils/format_string.rb +1 -2
  133. data/lib/rubocop/cop/variable_force/variable.rb +5 -3
  134. data/lib/rubocop/file_finder.rb +4 -4
  135. data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
  136. data/lib/rubocop/name_similarity.rb +1 -3
  137. data/lib/rubocop/options.rb +15 -8
  138. data/lib/rubocop/path_util.rb +2 -17
  139. data/lib/rubocop/rake_task.rb +6 -9
  140. data/lib/rubocop/result_cache.rb +9 -5
  141. data/lib/rubocop/rspec/cop_helper.rb +4 -4
  142. data/lib/rubocop/rspec/expect_offense.rb +52 -22
  143. data/lib/rubocop/rspec/shared_contexts.rb +8 -8
  144. data/lib/rubocop/runner.rb +33 -32
  145. data/lib/rubocop/target_ruby.rb +1 -1
  146. data/lib/rubocop/version.rb +1 -1
  147. metadata +25 -8
  148. data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
@@ -62,6 +62,7 @@ module RuboCop
62
62
  #
63
63
  class EmptyLinesAroundAttributeAccessor < Cop
64
64
  include RangeHelp
65
+ include AllowedMethods
65
66
 
66
67
  MSG = 'Add an empty line after attribute accessor.'
67
68
 
@@ -114,14 +115,6 @@ module RuboCop
114
115
  def allow_alias_syntax?
115
116
  cop_config.fetch('AllowAliasSyntax', true)
116
117
  end
117
-
118
- def allowed_method?(name)
119
- allowed_methods.include?(name.to_s)
120
- end
121
-
122
- def allowed_methods
123
- cop_config.fetch('AllowedMethods', [])
124
- end
125
118
  end
126
119
  end
127
120
  end
@@ -150,9 +150,10 @@ module RuboCop
150
150
  end
151
151
 
152
152
  def alignment_node(node)
153
- if style == :keyword
153
+ case style
154
+ when :keyword
154
155
  node
155
- elsif style == :variable
156
+ when :variable
156
157
  alignment_node_for_variable_style(node)
157
158
  else
158
159
  start_line_range(node)
@@ -241,6 +241,10 @@ module RuboCop
241
241
  .select { |c| begins_its_line?(c.loc.expression) }
242
242
  .map { |c| c.loc.line }
243
243
  end
244
+
245
+ def on_new_investigation
246
+ @comment_lines = nil
247
+ end
244
248
  end
245
249
  end
246
250
  end
@@ -219,8 +219,7 @@ module RuboCop
219
219
  correct_node(node, delta)
220
220
  end
221
221
 
222
- attr_accessor :offences_by
223
- attr_accessor :column_deltas
222
+ attr_accessor :offences_by, :column_deltas
224
223
 
225
224
  private
226
225
 
@@ -95,17 +95,27 @@ module RuboCop
95
95
  end
96
96
 
97
97
  def line_break_necessary_in_args?(node)
98
- needed_length = node.source_range.column +
99
- node.source.lines.first.length +
100
- block_arg_string(node, node.arguments).length +
101
- PIPE_SIZE
102
- needed_length > max_line_length
98
+ needed_length_for_args(node) > max_line_length
99
+ end
100
+
101
+ def needed_length_for_args(node)
102
+ node.source_range.column +
103
+ characters_needed_for_space_and_pipes(node) +
104
+ node.source.lines.first.chomp.length +
105
+ block_arg_string(node, node.arguments).length
106
+ end
107
+
108
+ def characters_needed_for_space_and_pipes(node)
109
+ if node.source.lines.first.end_with?("|\n")
110
+ PIPE_SIZE
111
+ else
112
+ 1 + PIPE_SIZE * 2
113
+ end
103
114
  end
104
115
 
105
116
  def add_offense_for_expression(node, expr, msg)
106
117
  expression = expr.source_range
107
118
  range = range_between(expression.begin_pos, expression.end_pos)
108
-
109
119
  add_offense(node, location: range, message: msg)
110
120
  end
111
121
 
@@ -121,7 +131,7 @@ module RuboCop
121
131
  end
122
132
 
123
133
  def autocorrect_body(corrector, node, block_body)
124
- first_node = if block_body.begin_type?
134
+ first_node = if block_body.begin_type? && !block_body.source.start_with?('(')
125
135
  block_body.children.first
126
136
  else
127
137
  block_body
@@ -24,9 +24,10 @@ module RuboCop
24
24
  # # good
25
25
  # {}.each { | x, y | puts x }
26
26
  # ->( x, y ) { puts x }
27
- class SpaceAroundBlockParameters < Cop
27
+ class SpaceAroundBlockParameters < Base
28
28
  include ConfigurableEnforcedStyle
29
29
  include RangeHelp
30
+ extend AutoCorrector
30
31
 
31
32
  def on_block(node)
32
33
  arguments = node.arguments
@@ -38,23 +39,6 @@ module RuboCop
38
39
  check_each_arg(arguments)
39
40
  end
40
41
 
41
- # @param target [RuboCop::AST::Node,Parser::Source::Range]
42
- def autocorrect(target)
43
- lambda do |corrector|
44
- if target.is_a?(RuboCop::AST::Node)
45
- if target.parent.children.first == target
46
- corrector.insert_before(target, ' ')
47
- else
48
- corrector.insert_after(target, ' ')
49
- end
50
- elsif /^\s+$/.match?(target.source)
51
- corrector.remove(target)
52
- else
53
- corrector.insert_after(target, ' ')
54
- end
55
- end
56
- end
57
-
58
42
  private
59
43
 
60
44
  def pipes(arguments)
@@ -72,11 +56,12 @@ module RuboCop
72
56
  def check_inside_pipes(arguments)
73
57
  opening_pipe, closing_pipe = pipes(arguments)
74
58
 
75
- if style == :no_space
59
+ case style
60
+ when :no_space
76
61
  check_no_space_style_inside_pipes(arguments.children,
77
62
  opening_pipe,
78
63
  closing_pipe)
79
- elsif style == :space
64
+ when :space
80
65
  check_space_style_inside_pipes(arguments.children,
81
66
  opening_pipe,
82
67
  closing_pipe)
@@ -97,7 +82,7 @@ module RuboCop
97
82
 
98
83
  check_no_space(opening_pipe.end_pos, first.begin_pos,
99
84
  'Space before first')
100
- check_no_space(last_end_pos_inside_pipes(last.end_pos),
85
+ check_no_space(last_end_pos_inside_pipes(last),
101
86
  closing_pipe.begin_pos, 'Space after last')
102
87
  end
103
88
 
@@ -118,7 +103,7 @@ module RuboCop
118
103
 
119
104
  def check_closing_pipe_space(args, closing_pipe)
120
105
  last = args.last.source_range
121
- last_end_pos = last_end_pos_inside_pipes(last.end_pos)
106
+ last_end_pos = last_end_pos_inside_pipes(last)
122
107
 
123
108
  check_space(last_end_pos, closing_pipe.begin_pos, last,
124
109
  'after last block parameter')
@@ -126,8 +111,9 @@ module RuboCop
126
111
  'Extra space after last')
127
112
  end
128
113
 
129
- def last_end_pos_inside_pipes(pos)
130
- processed_source.buffer.source[pos] == ',' ? pos + 1 : pos
114
+ def last_end_pos_inside_pipes(range)
115
+ pos = range.end_pos
116
+ range.source_buffer.source[pos] == ',' ? pos + 1 : pos
131
117
  end
132
118
 
133
119
  def check_each_arg(args)
@@ -151,7 +137,14 @@ module RuboCop
151
137
  return if space_begin_pos != space_end_pos
152
138
 
153
139
  target = node || range
154
- add_offense(target, location: range, message: "Space #{msg} missing.")
140
+ message = "Space #{msg} missing."
141
+ add_offense(target, message: message) do |corrector|
142
+ if node
143
+ corrector.insert_before(node, ' ')
144
+ else
145
+ corrector.insert_after(target, ' ')
146
+ end
147
+ end
155
148
  end
156
149
 
157
150
  def check_no_space(space_begin_pos, space_end_pos, msg)
@@ -160,8 +153,10 @@ module RuboCop
160
153
  range = range_between(space_begin_pos, space_end_pos)
161
154
  return if range.source.include?("\n")
162
155
 
163
- add_offense(range, location: range,
164
- message: "#{msg} block parameter detected.")
156
+ message = "#{msg} block parameter detected."
157
+ add_offense(range, message: message) do |corrector|
158
+ corrector.remove(range)
159
+ end
165
160
  end
166
161
  end
167
162
  end
@@ -34,96 +34,55 @@ module RuboCop
34
34
  # RbHint::Hint::Hint
35
35
  # ::RbHint::Hint
36
36
  #
37
- class SpaceAroundMethodCallOperator < Cop
38
- include SurroundingSpace
37
+ class SpaceAroundMethodCallOperator < Base
38
+ include RangeHelp
39
+ extend AutoCorrector
40
+
41
+ SPACES_REGEXP = /\A[ \t]+\z/.freeze
39
42
 
40
43
  MSG = 'Avoid using spaces around a method call operator.'
41
44
 
42
45
  def on_send(node)
43
- return unless dot_or_safe_navigation_operator?(node)
46
+ return unless node.dot? || node.safe_navigation?
44
47
 
45
- check_and_add_offense(node)
48
+ check_space_before_dot(node)
49
+ check_space_after_dot(node)
46
50
  end
51
+ alias on_csend on_send
47
52
 
48
53
  def on_const(node)
49
54
  return unless node.loc.double_colon
50
55
 
51
- check_and_add_offense(node, false)
52
- end
53
-
54
- def autocorrect(node)
55
- operator = operator_token(node)
56
- left = left_token_for_auto_correction(node, operator)
57
- right = right_token_for_auto_correction(operator)
58
-
59
- lambda do |corrector|
60
- SpaceCorrector.remove_space(
61
- processed_source, corrector, left, right
62
- )
63
- end
56
+ check_space_after_double_colon(node)
64
57
  end
65
58
 
66
- alias on_csend on_send
67
-
68
59
  private
69
60
 
70
- def check_and_add_offense(node, add_left_offense = true)
71
- operator = operator_token(node)
72
- left = previous_token(operator)
73
- right = next_token(operator)
74
-
75
- if !right.comment? && valid_right_token?(right, operator)
76
- no_space_offenses(node, operator, right, MSG)
77
- end
78
- return unless valid_left_token?(left, operator)
79
-
80
- no_space_offenses(node, left, operator, MSG) if add_left_offense
81
- end
82
-
83
- def operator_token(node)
84
- operator_location =
85
- node.const_type? ? node.loc.double_colon : node.loc.dot
86
-
87
- processed_source.find_token do |token|
88
- token.pos == operator_location
89
- end
90
- end
91
-
92
- def previous_token(current_token)
93
- index = processed_source.tokens.index(current_token)
94
- index.zero? ? nil : processed_source.tokens[index - 1]
95
- end
96
-
97
- def next_token(current_token)
98
- index = processed_source.tokens.index(current_token)
99
- processed_source.tokens[index + 1]
100
- end
101
-
102
- def dot_or_safe_navigation_operator?(node)
103
- node.dot? || node.safe_navigation?
61
+ def check_space_before_dot(node)
62
+ receiver_pos = node.receiver.source_range.end_pos
63
+ dot_pos = node.loc.dot.begin_pos
64
+ check_space(receiver_pos, dot_pos)
104
65
  end
105
66
 
106
- def valid_left_token?(left, operator)
107
- left && left.line == operator.line
67
+ def check_space_after_dot(node)
68
+ dot_pos = node.loc.dot.end_pos
69
+ selector_pos = node.loc.selector.begin_pos
70
+ check_space(dot_pos, selector_pos)
108
71
  end
109
72
 
110
- def valid_right_token?(right, operator)
111
- right && right.line == operator.line
73
+ def check_space_after_double_colon(node)
74
+ double_colon_pos = node.loc.double_colon.end_pos
75
+ name_pos = node.loc.name.begin_pos
76
+ check_space(double_colon_pos, name_pos)
112
77
  end
113
78
 
114
- def left_token_for_auto_correction(node, operator)
115
- left_token = previous_token(operator)
116
- return operator if node.const_type?
117
- return left_token if valid_left_token?(left_token, operator)
118
-
119
- operator
120
- end
79
+ def check_space(begin_pos, end_pos)
80
+ return if end_pos <= begin_pos
121
81
 
122
- def right_token_for_auto_correction(operator)
123
- right_token = next_token(operator)
124
- return right_token if !right_token.comment? && valid_right_token?(right_token, operator)
82
+ range = range_between(begin_pos, end_pos)
83
+ return unless range.source.match?(SPACES_REGEXP)
125
84
 
126
- operator
85
+ add_offense(range) { |corrector| corrector.remove(range) }
127
86
  end
128
87
  end
129
88
  end
@@ -142,11 +142,12 @@ module RuboCop
142
142
  end
143
143
 
144
144
  def issue_offenses(node, left, right, start_ok, end_ok)
145
- if style == :no_space
145
+ case style
146
+ when :no_space
146
147
  start_ok = next_to_comment?(node, left)
147
148
  no_space_offenses(node, left, right, MSG, start_ok: start_ok,
148
149
  end_ok: end_ok)
149
- elsif style == :space
150
+ when :space
150
151
  space_offenses(node, left, right, MSG, start_ok: start_ok,
151
152
  end_ok: end_ok)
152
153
  else
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Legacy
6
+ # Legacy support for Corrector#corrections
7
+ # See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
8
+ class CorrectionsProxy
9
+ def initialize(corrector)
10
+ @corrector = corrector
11
+ end
12
+
13
+ def <<(callable)
14
+ suppress_clobbering do
15
+ @corrector.transaction do
16
+ callable.call(@corrector)
17
+ end
18
+ end
19
+ end
20
+
21
+ def empty?
22
+ @corrector.empty?
23
+ end
24
+
25
+ def concat(corrections)
26
+ if corrections.is_a?(CorrectionsProxy)
27
+ suppress_clobbering do
28
+ corrector.merge!(corrections.corrector)
29
+ end
30
+ else
31
+ corrections.each { |correction| self << correction }
32
+ end
33
+ end
34
+
35
+ protected
36
+
37
+ attr_reader :corrector
38
+
39
+ private
40
+
41
+ def suppress_clobbering
42
+ yield
43
+ rescue ::Parser::ClobberingError
44
+ # ignore Clobbering errors
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Legacy
6
+ # Legacy Corrector for v0 API support.
7
+ # See https://docs.rubocop.org/rubocop/cop_api_v1_changelog.html
8
+ class Corrector < RuboCop::Cop::Corrector
9
+ # Support legacy second argument
10
+ def initialize(source, corr = [])
11
+ super(source)
12
+ if corr.is_a?(CorrectionsProxy)
13
+ merge!(corr.send(:corrector))
14
+ else
15
+ # warn "Corrector.new with corrections is deprecated." unless corr.empty? TODO
16
+ corr.each do |c|
17
+ corrections << c
18
+ end
19
+ end
20
+ end
21
+
22
+ def corrections
23
+ # warn "#corrections is deprecated. Open an issue if you have a valid usecase." TODO
24
+ CorrectionsProxy.new(self)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -15,7 +15,7 @@ module RuboCop
15
15
  # OpenSSL::Cipher::AES.new(128, :GCM)
16
16
  #
17
17
  # # good
18
- # OpenSSL::Cipher.new('AES-128-GCM')
18
+ # OpenSSL::Cipher.new('aes-128-gcm')
19
19
  #
20
20
  # @example
21
21
  #
@@ -127,9 +127,9 @@ module RuboCop
127
127
  end
128
128
 
129
129
  def build_cipher_arguments(node, algorithm_name)
130
- algorithm_parts = algorithm_name.split('-')
131
- size_and_mode = sanitize_arguments(node.arguments)
132
- "'#{(algorithm_parts + size_and_mode + ['CBC']).take(3).join('-')}'"
130
+ algorithm_parts = algorithm_name.downcase.split('-')
131
+ size_and_mode = sanitize_arguments(node.arguments).map(&:downcase)
132
+ "'#{(algorithm_parts + size_and_mode + ['cbc']).take(3).join('-')}'"
133
133
  end
134
134
  end
135
135
  end