rubocop 0.89.1 → 0.90.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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/default.yml +79 -11
  4. data/lib/rubocop.rb +13 -0
  5. data/lib/rubocop/cached_data.rb +1 -0
  6. data/lib/rubocop/cli/command.rb +1 -0
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -0
  10. data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
  11. data/lib/rubocop/cli/command/show_cops.rb +1 -0
  12. data/lib/rubocop/cli/command/version.rb +1 -0
  13. data/lib/rubocop/cli/environment.rb +1 -0
  14. data/lib/rubocop/comment_config.rb +5 -0
  15. data/lib/rubocop/config_loader.rb +17 -6
  16. data/lib/rubocop/config_loader_resolver.rb +1 -0
  17. data/lib/rubocop/config_obsoletion.rb +1 -0
  18. data/lib/rubocop/config_validator.rb +3 -0
  19. data/lib/rubocop/cop/base.rb +23 -0
  20. data/lib/rubocop/cop/bundler/gem_comment.rb +7 -3
  21. data/lib/rubocop/cop/commissioner.rb +47 -7
  22. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  23. data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
  24. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
  25. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  26. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
  27. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
  29. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
  30. data/lib/rubocop/cop/documentation.rb +22 -0
  31. data/lib/rubocop/cop/generator.rb +1 -0
  32. data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
  33. data/lib/rubocop/cop/layout/class_structure.rb +10 -9
  34. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
  35. data/lib/rubocop/cop/layout/condition_position.rb +13 -15
  36. data/lib/rubocop/cop/layout/def_end_alignment.rb +7 -4
  37. data/lib/rubocop/cop/layout/dot_position.rb +21 -17
  38. data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
  39. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +19 -16
  40. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
  41. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +144 -0
  42. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
  43. data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
  44. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +4 -6
  45. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
  46. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -6
  47. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
  48. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
  49. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
  50. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -5
  51. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
  52. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
  53. data/lib/rubocop/cop/layout/end_alignment.rb +6 -7
  54. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
  55. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
  56. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
  57. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
  58. data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
  59. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
  60. data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
  61. data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
  62. data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
  63. data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
  64. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
  65. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
  66. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
  67. data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
  68. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
  69. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
  70. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
  71. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
  72. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
  73. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -21
  74. data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
  75. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
  76. data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
  77. data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
  78. data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
  79. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +20 -15
  80. data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
  81. data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
  82. data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
  83. data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
  84. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
  85. data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
  86. data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
  87. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
  88. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +13 -16
  89. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
  90. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
  91. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +16 -19
  92. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
  93. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
  94. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
  95. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +13 -16
  96. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +10 -11
  97. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
  98. data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
  99. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  100. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  101. data/lib/rubocop/cop/lint/duplicate_require.rb +41 -0
  102. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +0 -11
  103. data/lib/rubocop/cop/lint/empty_file.rb +53 -0
  104. data/lib/rubocop/cop/lint/missing_super.rb +2 -2
  105. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
  106. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -19
  107. data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
  108. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
  109. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  110. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
  111. data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
  112. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -0
  113. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
  114. data/lib/rubocop/cop/mixin/alignment.rb +3 -0
  115. data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
  116. data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
  117. data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
  118. data/lib/rubocop/cop/mixin/comments_help.rb +54 -0
  119. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
  120. data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
  121. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -1
  122. data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
  123. data/lib/rubocop/cop/mixin/hash_transform_method.rb +17 -0
  124. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
  125. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
  126. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
  127. data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
  128. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
  129. data/lib/rubocop/cop/mixin/rescue_node.rb +10 -1
  130. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
  131. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
  132. data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
  133. data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
  134. data/lib/rubocop/cop/offense.rb +1 -0
  135. data/lib/rubocop/cop/severity.rb +0 -8
  136. data/lib/rubocop/cop/style/case_equality.rb +8 -3
  137. data/lib/rubocop/cop/style/case_like_if.rb +20 -4
  138. data/lib/rubocop/cop/style/class_methods_definitions.rb +131 -0
  139. data/lib/rubocop/cop/style/combinable_loops.rb +89 -0
  140. data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
  141. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
  142. data/lib/rubocop/cop/style/guard_clause.rb +1 -0
  143. data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
  144. data/lib/rubocop/cop/style/hash_transform_keys.rb +14 -1
  145. data/lib/rubocop/cop/style/hash_transform_values.rb +14 -1
  146. data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -2
  147. data/lib/rubocop/cop/style/keyword_parameters_order.rb +58 -0
  148. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
  149. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -2
  150. data/lib/rubocop/cop/style/negated_if.rb +6 -6
  151. data/lib/rubocop/cop/style/negated_unless.rb +6 -6
  152. data/lib/rubocop/cop/style/negated_while.rb +7 -15
  153. data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
  154. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
  155. data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
  156. data/lib/rubocop/cop/style/next.rb +10 -14
  157. data/lib/rubocop/cop/style/nil_comparison.rb +11 -11
  158. data/lib/rubocop/cop/style/non_nil_check.rb +32 -26
  159. data/lib/rubocop/cop/style/not.rb +19 -26
  160. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
  161. data/lib/rubocop/cop/style/numeric_predicate.rb +4 -11
  162. data/lib/rubocop/cop/style/one_line_conditional.rb +71 -23
  163. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  164. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  165. data/lib/rubocop/cop/style/or_assignment.rb +13 -10
  166. data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
  167. data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
  168. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
  169. data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
  170. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
  171. data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -14
  172. data/lib/rubocop/cop/style/proc.rb +6 -6
  173. data/lib/rubocop/cop/style/raise_args.rb +13 -24
  174. data/lib/rubocop/cop/style/random_with_offset.rb +15 -16
  175. data/lib/rubocop/cop/style/redundant_assignment.rb +8 -10
  176. data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
  177. data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
  178. data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
  179. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
  180. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +8 -8
  181. data/lib/rubocop/cop/style/redundant_freeze.rb +3 -6
  182. data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
  183. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -9
  184. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
  185. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
  186. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  187. data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
  188. data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
  189. data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
  190. data/lib/rubocop/cop/style/return_nil.rb +5 -5
  191. data/lib/rubocop/cop/style/safe_navigation.rb +13 -12
  192. data/lib/rubocop/cop/style/sample.rb +10 -13
  193. data/lib/rubocop/cop/style/self_assignment.rb +26 -22
  194. data/lib/rubocop/cop/style/semicolon.rb +6 -9
  195. data/lib/rubocop/cop/style/send.rb +2 -2
  196. data/lib/rubocop/cop/style/signal_exception.rb +21 -19
  197. data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
  198. data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
  199. data/lib/rubocop/cop/style/slicing_with_range.rb +4 -7
  200. data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
  201. data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
  202. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
  203. data/lib/rubocop/cop/style/stderr_puts.rb +4 -6
  204. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
  205. data/lib/rubocop/cop/style/string_methods.rb +7 -17
  206. data/lib/rubocop/cop/style/strip.rb +8 -14
  207. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
  208. data/lib/rubocop/cop/style/symbol_array.rb +5 -16
  209. data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
  210. data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
  211. data/lib/rubocop/cop/style/ternary_parentheses.rb +21 -20
  212. data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
  213. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
  214. data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
  215. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
  216. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
  217. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +7 -6
  218. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
  219. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
  220. data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
  221. data/lib/rubocop/cop/style/unless_else.rb +5 -8
  222. data/lib/rubocop/cop/style/unpack_first.rb +4 -8
  223. data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
  224. data/lib/rubocop/cop/style/when_then.rb +4 -6
  225. data/lib/rubocop/cop/style/while_until_do.rb +6 -16
  226. data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
  227. data/lib/rubocop/cop/style/word_array.rb +5 -23
  228. data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
  229. data/lib/rubocop/cop/style/zero_length_predicate.rb +11 -13
  230. data/lib/rubocop/cop/team.rb +1 -0
  231. data/lib/rubocop/cop/util.rb +1 -1
  232. data/lib/rubocop/cop/utils/format_string.rb +3 -5
  233. data/lib/rubocop/cop/variable_force.rb +2 -0
  234. data/lib/rubocop/cops_documentation_generator.rb +4 -2
  235. data/lib/rubocop/core_ext/string.rb +1 -1
  236. data/lib/rubocop/ext/regexp_node.rb +46 -0
  237. data/lib/rubocop/file_finder.rb +1 -0
  238. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
  239. data/lib/rubocop/formatter/html_formatter.rb +2 -0
  240. data/lib/rubocop/formatter/progress_formatter.rb +2 -1
  241. data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
  242. data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
  243. data/lib/rubocop/name_similarity.rb +1 -0
  244. data/lib/rubocop/options.rb +3 -0
  245. data/lib/rubocop/remote_config.rb +1 -0
  246. data/lib/rubocop/result_cache.rb +1 -0
  247. data/lib/rubocop/rspec/cop_helper.rb +4 -1
  248. data/lib/rubocop/rspec/expect_offense.rb +10 -5
  249. data/lib/rubocop/rspec/shared_contexts.rb +12 -0
  250. data/lib/rubocop/runner.rb +1 -0
  251. data/lib/rubocop/string_interpreter.rb +3 -0
  252. data/lib/rubocop/target_finder.rb +1 -0
  253. data/lib/rubocop/target_ruby.rb +6 -0
  254. data/lib/rubocop/version.rb +2 -1
  255. data/lib/rubocop/yaml_duplication_checker.rb +1 -0
  256. metadata +15 -2
@@ -29,8 +29,9 @@ module RuboCop
29
29
  #
30
30
  # def b
31
31
  # end
32
- class EmptyLineBetweenDefs < Cop
32
+ class EmptyLineBetweenDefs < Base
33
33
  include RangeHelp
34
+ extend AutoCorrector
34
35
 
35
36
  MSG = 'Use empty lines between method definitions.'
36
37
 
@@ -57,23 +58,26 @@ module RuboCop
57
58
  cop_config['AllowAdjacentOneLineDefs']
58
59
 
59
60
  location = nodes.last.loc.keyword.join(nodes.last.loc.name)
60
- add_offense(nodes.last, location: location)
61
+ add_offense(location) do |corrector|
62
+ autocorrect(corrector, *nodes)
63
+ end
61
64
  end
62
65
 
63
- def autocorrect(node)
64
- prev_def = prev_node(node)
65
-
66
+ def autocorrect(corrector, prev_def, node)
66
67
  # finds position of first newline
67
68
  end_pos = prev_def.loc.end.end_pos
68
69
  source_buffer = prev_def.loc.end.source_buffer
69
70
  newline_pos = source_buffer.source.index("\n", end_pos)
70
71
 
72
+ # Handle the case when multiple one-liners are on the same line.
73
+ newline_pos = end_pos + 1 if newline_pos > node.source_range.begin_pos
74
+
71
75
  count = blank_lines_count_between(prev_def, node)
72
76
 
73
77
  if count > maximum_empty_lines
74
- autocorrect_remove_lines(newline_pos, count)
78
+ autocorrect_remove_lines(corrector, newline_pos, count)
75
79
  else
76
- autocorrect_insert_lines(newline_pos, count)
80
+ autocorrect_insert_lines(corrector, newline_pos, count)
77
81
  end
78
82
  end
79
83
 
@@ -111,16 +115,12 @@ module RuboCop
111
115
  Array(cop_config['NumberOfEmptyLines']).last
112
116
  end
113
117
 
114
- def prev_node(node)
115
- return nil unless node.sibling_index.positive?
116
-
117
- node.parent.children[node.sibling_index - 1]
118
- end
119
-
120
118
  def lines_between_defs(first_def_node, second_def_node)
121
- line_range = def_end(first_def_node)..(def_start(second_def_node) - 2)
119
+ begin_line_num = def_end(first_def_node)
120
+ end_line_num = def_start(second_def_node) - 2
121
+ return [] if end_line_num.negative?
122
122
 
123
- processed_source.lines[line_range]
123
+ processed_source.lines[begin_line_num..end_line_num]
124
124
  end
125
125
 
126
126
  def def_start(node)
@@ -131,20 +131,18 @@ module RuboCop
131
131
  node.loc.end.line
132
132
  end
133
133
 
134
- def autocorrect_remove_lines(newline_pos, count)
134
+ def autocorrect_remove_lines(corrector, newline_pos, count)
135
135
  difference = count - maximum_empty_lines
136
136
  range_to_remove = range_between(newline_pos, newline_pos + difference)
137
- lambda do |corrector|
138
- corrector.remove(range_to_remove)
139
- end
137
+
138
+ corrector.remove(range_to_remove)
140
139
  end
141
140
 
142
- def autocorrect_insert_lines(newline_pos, count)
141
+ def autocorrect_insert_lines(corrector, newline_pos, count)
143
142
  difference = minimum_empty_lines - count
144
143
  where_to_insert = range_between(newline_pos, newline_pos + 1)
145
- lambda do |corrector|
146
- corrector.insert_after(where_to_insert, "\n" * difference)
147
- end
144
+
145
+ corrector.insert_after(where_to_insert, "\n" * difference)
148
146
  end
149
147
  end
150
148
  end
@@ -18,13 +18,14 @@ module RuboCop
18
18
  # # one empty line
19
19
  # some_method
20
20
  #
21
- class EmptyLines < Cop
21
+ class EmptyLines < Base
22
22
  include RangeHelp
23
+ extend AutoCorrector
23
24
 
24
25
  MSG = 'Extra blank line detected.'
25
26
  LINE_OFFSET = 2
26
27
 
27
- def investigate(processed_source)
28
+ def on_new_investigation
28
29
  return if processed_source.tokens.empty?
29
30
 
30
31
  lines = Set.new
@@ -33,14 +34,12 @@ module RuboCop
33
34
  end
34
35
 
35
36
  each_extra_empty_line(lines.sort) do |range|
36
- add_offense(range, location: range)
37
+ add_offense(range) do |corrector|
38
+ corrector.remove(range)
39
+ end
37
40
  end
38
41
  end
39
42
 
40
- def autocorrect(range)
41
- ->(corrector) { corrector.remove(range) }
42
- end
43
-
44
43
  private
45
44
 
46
45
  def each_extra_empty_line(lines)
@@ -40,9 +40,10 @@ module RuboCop
40
40
  # def baz; end
41
41
  # end
42
42
  #
43
- class EmptyLinesAroundAccessModifier < Cop
43
+ class EmptyLinesAroundAccessModifier < Base
44
44
  include ConfigurableEnforcedStyle
45
45
  include RangeHelp
46
+ extend AutoCorrector
46
47
 
47
48
  MSG_AFTER = 'Keep a blank line after `%<modifier>s`.'
48
49
  MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after ' \
@@ -92,11 +93,8 @@ module RuboCop
92
93
  return if allowed_only_before_style?(node)
93
94
  end
94
95
 
95
- add_offense(node)
96
- end
97
-
98
- def autocorrect(node)
99
- lambda do |corrector|
96
+ message = message(node)
97
+ add_offense(node, message: message) do |corrector|
100
98
  line = range_by_whole_lines(node.source_range)
101
99
 
102
100
  corrector.insert_before(line, "\n") unless previous_line_empty?(node.first_line)
@@ -38,23 +38,22 @@ module RuboCop
38
38
  # x: y
39
39
  # )
40
40
  #
41
- class EmptyLinesAroundArguments < Cop
41
+ class EmptyLinesAroundArguments < Base
42
42
  include RangeHelp
43
+ extend AutoCorrector
43
44
 
44
45
  MSG = 'Empty line detected around arguments.'
45
46
 
46
47
  def on_send(node)
47
48
  return if node.single_line? || node.arguments.empty?
48
49
 
49
- extra_lines(node) { |range| add_offense(node, location: range) }
50
- end
51
- alias on_csend on_send
52
-
53
- def autocorrect(node)
54
- lambda do |corrector|
55
- extra_lines(node) { |range| corrector.remove(range) }
50
+ extra_lines(node) do |range|
51
+ add_offense(range) do |corrector|
52
+ corrector.remove(range)
53
+ end
56
54
  end
57
55
  end
56
+ alias on_csend on_send
58
57
 
59
58
  private
60
59
 
@@ -60,9 +60,10 @@ module RuboCop
60
60
  # def do_something
61
61
  # end
62
62
  #
63
- class EmptyLinesAroundAttributeAccessor < Cop
63
+ class EmptyLinesAroundAttributeAccessor < Base
64
64
  include RangeHelp
65
65
  include AllowedMethods
66
+ extend AutoCorrector
66
67
 
67
68
  MSG = 'Add an empty line after attribute accessor.'
68
69
 
@@ -73,11 +74,7 @@ module RuboCop
73
74
  next_line_node = next_line_node(node)
74
75
  return unless require_empty_line?(next_line_node)
75
76
 
76
- add_offense(node)
77
- end
78
-
79
- def autocorrect(node)
80
- lambda do |corrector|
77
+ add_offense(node) do |corrector|
81
78
  range = range_by_whole_lines(node.source_range)
82
79
 
83
80
  corrector.insert_after(range, "\n")
@@ -21,8 +21,9 @@ module RuboCop
21
21
  # # ...
22
22
  #
23
23
  # end
24
- class EmptyLinesAroundBeginBody < Cop
24
+ class EmptyLinesAroundBeginBody < Base
25
25
  include EmptyLinesAroundBody
26
+ extend AutoCorrector
26
27
 
27
28
  KIND = '`begin`'
28
29
 
@@ -30,10 +31,6 @@ module RuboCop
30
31
  check(node, nil)
31
32
  end
32
33
 
33
- def autocorrect(node)
34
- EmptyLineCorrector.correct(node)
35
- end
36
-
37
34
  private
38
35
 
39
36
  def style
@@ -21,8 +21,9 @@ module RuboCop
21
21
  # foo do |bar|
22
22
  # # ...
23
23
  # end
24
- class EmptyLinesAroundBlockBody < Cop
24
+ class EmptyLinesAroundBlockBody < Base
25
25
  include EmptyLinesAroundBody
26
+ extend AutoCorrector
26
27
 
27
28
  KIND = 'block'
28
29
 
@@ -31,10 +32,6 @@ module RuboCop
31
32
 
32
33
  check(node, node.body, adjusted_first_line: first_line)
33
34
  end
34
-
35
- def autocorrect(node)
36
- EmptyLineCorrector.correct(node)
37
- end
38
35
  end
39
36
  end
40
37
  end
@@ -64,8 +64,9 @@ module RuboCop
64
64
  # # ...
65
65
  # end
66
66
  # end
67
- class EmptyLinesAroundClassBody < Cop
67
+ class EmptyLinesAroundClassBody < Base
68
68
  include EmptyLinesAroundBody
69
+ extend AutoCorrector
69
70
 
70
71
  KIND = 'class'
71
72
 
@@ -78,10 +79,6 @@ module RuboCop
78
79
  def on_sclass(node)
79
80
  check(node, node.body)
80
81
  end
81
-
82
- def autocorrect(node)
83
- EmptyLineCorrector.correct(node)
84
- end
85
82
  end
86
83
  end
87
84
  end
@@ -58,8 +58,9 @@ module RuboCop
58
58
  #
59
59
  # do_something2
60
60
  # end
61
- class EmptyLinesAroundExceptionHandlingKeywords < Cop
61
+ class EmptyLinesAroundExceptionHandlingKeywords < Base
62
62
  include EmptyLinesAroundBody
63
+ extend AutoCorrector
63
64
 
64
65
  MSG = 'Extra empty line detected %<location>s the `%<keyword>s`.'
65
66
 
@@ -73,10 +74,6 @@ module RuboCop
73
74
  check_body(body)
74
75
  end
75
76
 
76
- def autocorrect(node)
77
- EmptyLineCorrector.correct(node)
78
- end
79
-
80
77
  private
81
78
 
82
79
  def check_body(node)
@@ -20,8 +20,9 @@ module RuboCop
20
20
  # # ...
21
21
  #
22
22
  # end
23
- class EmptyLinesAroundMethodBody < Cop
23
+ class EmptyLinesAroundMethodBody < Base
24
24
  include EmptyLinesAroundBody
25
+ extend AutoCorrector
25
26
 
26
27
  KIND = 'method'
27
28
 
@@ -30,10 +31,6 @@ module RuboCop
30
31
  end
31
32
  alias on_defs on_def
32
33
 
33
- def autocorrect(node)
34
- EmptyLineCorrector.correct(node)
35
- end
36
-
37
34
  private
38
35
 
39
36
  def style
@@ -44,18 +44,15 @@ module RuboCop
44
44
  # # ...
45
45
  # end
46
46
  # end
47
- class EmptyLinesAroundModuleBody < Cop
47
+ class EmptyLinesAroundModuleBody < Base
48
48
  include EmptyLinesAroundBody
49
+ extend AutoCorrector
49
50
 
50
51
  KIND = 'module'
51
52
 
52
53
  def on_module(node)
53
54
  check(node, node.body)
54
55
  end
55
-
56
- def autocorrect(node)
57
- EmptyLineCorrector.correct(node)
58
- end
59
56
  end
60
57
  end
61
58
  end
@@ -67,10 +67,11 @@ module RuboCop
67
67
  # variable =
68
68
  # if true
69
69
  # end
70
- class EndAlignment < Cop
70
+ class EndAlignment < Base
71
71
  include CheckAssignment
72
72
  include EndKeywordAlignment
73
73
  include RangeHelp
74
+ extend AutoCorrector
74
75
 
75
76
  def on_class(node)
76
77
  check_other_alignment(node)
@@ -100,14 +101,12 @@ module RuboCop
100
101
  end
101
102
  end
102
103
 
103
- def autocorrect(node)
104
- AlignmentCorrector.align_end(processed_source,
105
- node,
106
- alignment_node(node))
107
- end
108
-
109
104
  private
110
105
 
106
+ def autocorrect(corrector, node)
107
+ AlignmentCorrector.align_end(corrector, processed_source, node, alignment_node(node))
108
+ end
109
+
111
110
  def check_assignment(node, rhs)
112
111
  # If there are method calls chained to the right hand side of the
113
112
  # assignment, we let rhs be the receiver of those method calls before
@@ -17,8 +17,9 @@ module RuboCop
17
17
  # :a,
18
18
  # :b]
19
19
  #
20
- class FirstArrayElementLineBreak < Cop
20
+ class FirstArrayElementLineBreak < Base
21
21
  include FirstElementLineBreak
22
+ extend AutoCorrector
22
23
 
23
24
  MSG = 'Add a line break before the first element of a ' \
24
25
  'multi-line array.'
@@ -29,10 +30,6 @@ module RuboCop
29
30
  check_children_line_break(node, node.children)
30
31
  end
31
32
 
32
- def autocorrect(node)
33
- EmptyLineCorrector.insert_before(node)
34
- end
35
-
36
33
  private
37
34
 
38
35
  def assignment_on_same_line?(node)
@@ -16,8 +16,9 @@ module RuboCop
16
16
  # {
17
17
  # a: 1,
18
18
  # b: 2 }
19
- class FirstHashElementLineBreak < Cop
19
+ class FirstHashElementLineBreak < Base
20
20
  include FirstElementLineBreak
21
+ extend AutoCorrector
21
22
 
22
23
  MSG = 'Add a line break before the first element of a ' \
23
24
  'multi-line hash.'
@@ -27,10 +28,6 @@ module RuboCop
27
28
  # If it doesn't, Style/FirstMethodArgumentLineBreak will handle it
28
29
  check_children_line_break(node, node.children) if node.loc.begin
29
30
  end
30
-
31
- def autocorrect(node)
32
- EmptyLineCorrector.insert_before(node)
33
- end
34
31
  end
35
32
  end
36
33
  end
@@ -20,8 +20,9 @@ module RuboCop
20
20
  # # ignored
21
21
  # method foo, bar,
22
22
  # baz
23
- class FirstMethodArgumentLineBreak < Cop
23
+ class FirstMethodArgumentLineBreak < Base
24
24
  include FirstElementLineBreak
25
+ extend AutoCorrector
25
26
 
26
27
  MSG = 'Add a line break before the first argument of a ' \
27
28
  'multi-line method argument list.'
@@ -35,18 +36,13 @@ module RuboCop
35
36
  #
36
37
  # ...then each key/value pair is treated as a method 'argument'
37
38
  # when determining where line breaks should appear.
38
- if (last_arg = args.last)
39
- args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
40
- end
39
+ last_arg = args.last
40
+ args.concat(args.pop.children) if last_arg&.hash_type? && !last_arg&.braces?
41
41
 
42
42
  check_method_line_break(node, args)
43
43
  end
44
44
  alias on_csend on_send
45
45
  alias on_super on_send
46
-
47
- def autocorrect(node)
48
- EmptyLineCorrector.insert_before(node)
49
- end
50
46
  end
51
47
  end
52
48
  end