rubocop 0.89.0 → 0.92.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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/config/default.yml +128 -14
  4. data/lib/rubocop.rb +30 -4
  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 +9 -0
  10. data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
  11. data/lib/rubocop/cli/command/show_cops.rb +2 -1
  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 +17 -10
  15. data/lib/rubocop/config.rb +1 -1
  16. data/lib/rubocop/config_loader.rb +21 -10
  17. data/lib/rubocop/config_loader_resolver.rb +1 -0
  18. data/lib/rubocop/config_obsoletion.rb +1 -0
  19. data/lib/rubocop/config_regeneration.rb +33 -0
  20. data/lib/rubocop/config_store.rb +3 -3
  21. data/lib/rubocop/config_validator.rb +4 -1
  22. data/lib/rubocop/cop/base.rb +23 -0
  23. data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
  24. data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
  25. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
  26. data/lib/rubocop/cop/commissioner.rb +47 -7
  27. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  28. data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
  29. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
  30. data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
  31. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
  32. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
  33. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +5 -10
  34. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
  35. data/lib/rubocop/cop/documentation.rb +22 -0
  36. data/lib/rubocop/cop/generator.rb +2 -1
  37. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
  38. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
  39. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
  40. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  41. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
  42. data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
  43. data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
  44. data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
  45. data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
  46. data/lib/rubocop/cop/layout/class_structure.rb +14 -17
  47. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
  48. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  49. data/lib/rubocop/cop/layout/condition_position.rb +13 -15
  50. data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
  51. data/lib/rubocop/cop/layout/dot_position.rb +21 -17
  52. data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
  53. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
  54. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
  55. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
  56. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
  57. data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
  58. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +18 -14
  59. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
  60. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +4 -7
  61. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
  62. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
  63. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
  65. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
  66. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
  67. data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
  68. data/lib/rubocop/cop/layout/extra_spacing.rb +14 -21
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
  70. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
  71. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
  72. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
  73. data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
  74. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
  75. data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
  76. data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
  77. data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
  78. data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
  79. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
  80. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
  81. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
  83. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
  84. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
  85. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
  86. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
  87. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
  88. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
  89. data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
  90. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
  91. data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
  92. data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
  93. data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
  94. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +22 -17
  95. data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
  96. data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
  97. data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
  98. data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
  99. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
  100. data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
  101. data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
  102. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
  103. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
  104. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
  105. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
  106. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
  107. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
  108. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
  109. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
  110. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
  111. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
  112. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
  113. data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
  114. data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
  115. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
  116. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -1
  117. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
  118. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  119. data/lib/rubocop/cop/lint/debugger.rb +2 -3
  120. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
  121. data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
  122. data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
  123. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
  124. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  125. data/lib/rubocop/cop/lint/empty_file.rb +50 -0
  126. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
  127. data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
  128. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
  129. data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
  130. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
  131. data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
  132. data/lib/rubocop/cop/lint/missing_super.rb +11 -11
  133. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
  134. data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
  135. data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
  136. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +33 -15
  137. data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
  138. data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
  139. data/lib/rubocop/cop/lint/rand_one.rb +2 -1
  140. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +36 -29
  141. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
  142. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  143. data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
  144. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
  145. data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
  146. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
  147. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
  148. data/lib/rubocop/cop/lint/to_json.rb +16 -5
  149. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  150. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
  151. data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
  152. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
  153. data/lib/rubocop/cop/lint/uri_regexp.rb +10 -25
  154. data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
  155. data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
  156. data/lib/rubocop/cop/lint/useless_times.rb +106 -0
  157. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
  158. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
  159. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  160. data/lib/rubocop/cop/mixin/alignment.rb +5 -1
  161. data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
  162. data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
  163. data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
  164. data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
  165. data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
  166. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  167. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
  168. data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
  169. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
  170. data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -2
  171. data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
  172. data/lib/rubocop/cop/mixin/hash_transform_method.rb +31 -12
  173. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  174. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
  175. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
  176. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
  177. data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
  178. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  179. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
  180. data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
  181. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
  182. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
  183. data/lib/rubocop/cop/mixin/statement_modifier.rb +12 -6
  184. data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
  185. data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
  186. data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
  187. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  188. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  189. data/lib/rubocop/cop/offense.rb +1 -0
  190. data/lib/rubocop/cop/security/eval.rb +1 -0
  191. data/lib/rubocop/cop/security/json_load.rb +1 -0
  192. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  193. data/lib/rubocop/cop/security/open.rb +1 -0
  194. data/lib/rubocop/cop/security/yaml_load.rb +1 -0
  195. data/lib/rubocop/cop/severity.rb +0 -8
  196. data/lib/rubocop/cop/style/access_modifier_declarations.rb +8 -19
  197. data/lib/rubocop/cop/style/accessor_grouping.rb +20 -20
  198. data/lib/rubocop/cop/style/alias.rb +36 -33
  199. data/lib/rubocop/cop/style/and_or.rb +9 -11
  200. data/lib/rubocop/cop/style/array_coercion.rb +4 -0
  201. data/lib/rubocop/cop/style/array_join.rb +7 -8
  202. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  203. data/lib/rubocop/cop/style/attr.rb +12 -9
  204. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +4 -5
  205. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  206. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  207. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -12
  208. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  209. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  210. data/lib/rubocop/cop/style/case_equality.rb +11 -3
  211. data/lib/rubocop/cop/style/case_like_if.rb +37 -18
  212. data/lib/rubocop/cop/style/class_and_module_children.rb +16 -11
  213. data/lib/rubocop/cop/style/class_check.rb +6 -11
  214. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  215. data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
  216. data/lib/rubocop/cop/style/class_vars.rb +7 -12
  217. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  218. data/lib/rubocop/cop/style/colon_method_call.rb +6 -7
  219. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  220. data/lib/rubocop/cop/style/combinable_loops.rb +84 -0
  221. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  222. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  223. data/lib/rubocop/cop/style/commented_keyword.rb +8 -9
  224. data/lib/rubocop/cop/style/conditional_assignment.rb +50 -61
  225. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  226. data/lib/rubocop/cop/style/copyright.rb +12 -12
  227. data/lib/rubocop/cop/style/date_time.rb +13 -2
  228. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  229. data/lib/rubocop/cop/style/dir.rb +8 -10
  230. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  231. data/lib/rubocop/cop/style/documentation.rb +2 -4
  232. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  233. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  234. data/lib/rubocop/cop/style/double_negation.rb +3 -2
  235. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  236. data/lib/rubocop/cop/style/each_with_object.rb +16 -17
  237. data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
  238. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  239. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  240. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
  241. data/lib/rubocop/cop/style/empty_literal.rb +18 -17
  242. data/lib/rubocop/cop/style/empty_method.rb +5 -8
  243. data/lib/rubocop/cop/style/encoding.rb +5 -9
  244. data/lib/rubocop/cop/style/end_block.rb +4 -6
  245. data/lib/rubocop/cop/style/eval_with_location.rb +6 -10
  246. data/lib/rubocop/cop/style/even_odd.rb +8 -11
  247. data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -26
  248. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
  249. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  250. data/lib/rubocop/cop/style/float_division.rb +3 -1
  251. data/lib/rubocop/cop/style/for.rb +11 -15
  252. data/lib/rubocop/cop/style/format_string.rb +18 -23
  253. data/lib/rubocop/cop/style/format_string_token.rb +4 -7
  254. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  255. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  256. data/lib/rubocop/cop/style/guard_clause.rb +4 -4
  257. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
  258. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  259. data/lib/rubocop/cop/style/hash_syntax.rb +6 -7
  260. data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -11
  261. data/lib/rubocop/cop/style/hash_transform_values.rb +18 -10
  262. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
  263. data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
  264. data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -17
  265. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
  266. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  267. data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -1
  268. data/lib/rubocop/cop/style/infinite_loop.rb +23 -23
  269. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  270. data/lib/rubocop/cop/style/inverse_methods.rb +20 -29
  271. data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
  272. data/lib/rubocop/cop/style/lambda.rb +7 -12
  273. data/lib/rubocop/cop/style/lambda_call.rb +17 -14
  274. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  275. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  276. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -11
  277. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  278. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -6
  279. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
  280. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  281. data/lib/rubocop/cop/style/min_max.rb +8 -12
  282. data/lib/rubocop/cop/style/missing_else.rb +13 -13
  283. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  284. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  285. data/lib/rubocop/cop/style/mixin_usage.rb +9 -28
  286. data/lib/rubocop/cop/style/module_function.rb +10 -13
  287. data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
  288. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  289. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  290. data/lib/rubocop/cop/style/multiline_memoization.rb +12 -10
  291. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
  292. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
  293. data/lib/rubocop/cop/style/multiline_when_then.rb +10 -11
  294. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  295. data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
  296. data/lib/rubocop/cop/style/negated_if.rb +6 -6
  297. data/lib/rubocop/cop/style/negated_unless.rb +6 -6
  298. data/lib/rubocop/cop/style/negated_while.rb +7 -15
  299. data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
  300. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
  301. data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
  302. data/lib/rubocop/cop/style/next.rb +10 -14
  303. data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
  304. data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
  305. data/lib/rubocop/cop/style/not.rb +20 -26
  306. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
  307. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
  308. data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
  309. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  310. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  311. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
  312. data/lib/rubocop/cop/style/or_assignment.rb +13 -10
  313. data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
  314. data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
  315. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
  316. data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
  317. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
  318. data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
  319. data/lib/rubocop/cop/style/proc.rb +6 -6
  320. data/lib/rubocop/cop/style/raise_args.rb +15 -24
  321. data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
  322. data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
  323. data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
  324. data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
  325. data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
  326. data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
  327. data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
  328. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
  329. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
  330. data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
  331. data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
  332. data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
  333. data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
  334. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
  335. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
  336. data/lib/rubocop/cop/style/redundant_return.rb +17 -17
  337. data/lib/rubocop/cop/style/redundant_self.rb +9 -11
  338. data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
  339. data/lib/rubocop/cop/style/redundant_sort.rb +12 -31
  340. data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
  341. data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
  342. data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
  343. data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
  344. data/lib/rubocop/cop/style/return_nil.rb +5 -5
  345. data/lib/rubocop/cop/style/safe_navigation.rb +22 -16
  346. data/lib/rubocop/cop/style/sample.rb +12 -14
  347. data/lib/rubocop/cop/style/self_assignment.rb +26 -22
  348. data/lib/rubocop/cop/style/semicolon.rb +6 -9
  349. data/lib/rubocop/cop/style/send.rb +4 -5
  350. data/lib/rubocop/cop/style/signal_exception.rb +23 -19
  351. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
  352. data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
  353. data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
  354. data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
  355. data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
  356. data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
  357. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
  358. data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
  359. data/lib/rubocop/cop/style/string_concatenation.rb +16 -2
  360. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
  361. data/lib/rubocop/cop/style/string_methods.rb +7 -17
  362. data/lib/rubocop/cop/style/strip.rb +9 -14
  363. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
  364. data/lib/rubocop/cop/style/symbol_array.rb +5 -16
  365. data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
  366. data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
  367. data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
  368. data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
  369. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
  370. data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
  371. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
  372. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
  373. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
  374. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
  375. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
  376. data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
  377. data/lib/rubocop/cop/style/unless_else.rb +5 -8
  378. data/lib/rubocop/cop/style/unpack_first.rb +5 -8
  379. data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
  380. data/lib/rubocop/cop/style/when_then.rb +4 -6
  381. data/lib/rubocop/cop/style/while_until_do.rb +6 -16
  382. data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
  383. data/lib/rubocop/cop/style/word_array.rb +5 -23
  384. data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
  385. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
  386. data/lib/rubocop/cop/team.rb +1 -0
  387. data/lib/rubocop/cop/util.rb +2 -1
  388. data/lib/rubocop/cop/utils/format_string.rb +3 -5
  389. data/lib/rubocop/cop/variable_force.rb +2 -0
  390. data/lib/rubocop/cops_documentation_generator.rb +5 -3
  391. data/lib/rubocop/core_ext/string.rb +2 -2
  392. data/lib/rubocop/directive_comment.rb +32 -0
  393. data/lib/rubocop/ext/regexp_node.rb +46 -0
  394. data/lib/rubocop/file_finder.rb +1 -0
  395. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
  396. data/lib/rubocop/formatter/disabled_config_formatter.rb +13 -6
  397. data/lib/rubocop/formatter/html_formatter.rb +2 -0
  398. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  399. data/lib/rubocop/formatter/progress_formatter.rb +2 -1
  400. data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
  401. data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
  402. data/lib/rubocop/name_similarity.rb +1 -0
  403. data/lib/rubocop/options.rb +43 -20
  404. data/lib/rubocop/remote_config.rb +1 -0
  405. data/lib/rubocop/result_cache.rb +31 -13
  406. data/lib/rubocop/rspec/cop_helper.rb +4 -1
  407. data/lib/rubocop/rspec/expect_offense.rb +14 -9
  408. data/lib/rubocop/rspec/shared_contexts.rb +13 -5
  409. data/lib/rubocop/runner.rb +35 -15
  410. data/lib/rubocop/string_interpreter.rb +3 -0
  411. data/lib/rubocop/target_finder.rb +5 -1
  412. data/lib/rubocop/target_ruby.rb +7 -1
  413. data/lib/rubocop/version.rb +7 -1
  414. data/lib/rubocop/yaml_duplication_checker.rb +1 -0
  415. metadata +26 -14
  416. data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -22,8 +22,9 @@ module RuboCop
22
22
  #
23
23
  # # good
24
24
  # alias_method :bar, :foo
25
- class Alias < Cop
25
+ class Alias < Base
26
26
  include ConfigurableEnforcedStyle
27
+ extend AutoCorrector
27
28
 
28
29
  MSG_ALIAS = 'Use `alias_method` instead of `alias`.'
29
30
  MSG_ALIAS_METHOD = 'Use `alias` instead of `alias_method` ' \
@@ -31,36 +32,44 @@ module RuboCop
31
32
  MSG_SYMBOL_ARGS = 'Use `alias %<prefer>s` instead of ' \
32
33
  '`alias %<current>s`.'
33
34
 
35
+ RESTRICT_ON_SEND = %i[alias_method].freeze
36
+
34
37
  def on_send(node)
35
38
  return unless node.command?(:alias_method)
36
39
  return unless style == :prefer_alias && alias_keyword_possible?(node)
37
40
 
38
41
  msg = format(MSG_ALIAS_METHOD, current: lexical_scope_type(node))
39
- add_offense(node, location: :selector, message: msg)
42
+ add_offense(node.loc.selector, message: msg) do |corrector|
43
+ autocorrect(corrector, node)
44
+ end
40
45
  end
41
46
 
42
47
  def on_alias(node)
43
48
  return unless alias_method_possible?(node)
44
49
 
45
50
  if scope_type(node) == :dynamic || style == :prefer_alias_method
46
- add_offense(node, location: :keyword, message: MSG_ALIAS)
51
+ add_offense(node.loc.keyword, message: MSG_ALIAS) do |corrector|
52
+ autocorrect(corrector, node)
53
+ end
47
54
  elsif node.children.none? { |arg| bareword?(arg) }
48
- add_offense_for_args(node)
55
+ add_offense_for_args(node) do |corrector|
56
+ autocorrect(corrector, node)
57
+ end
49
58
  end
50
59
  end
51
60
 
52
- def autocorrect(node)
61
+ private
62
+
63
+ def autocorrect(corrector, node)
53
64
  if node.send_type?
54
- correct_alias_method_to_alias(node)
65
+ correct_alias_method_to_alias(corrector, node)
55
66
  elsif scope_type(node) == :dynamic || style == :prefer_alias_method
56
- correct_alias_to_alias_method(node)
67
+ correct_alias_to_alias_method(corrector, node)
57
68
  else
58
- correct_alias_with_symbol_args(node)
69
+ correct_alias_with_symbol_args(corrector, node)
59
70
  end
60
71
  end
61
72
 
62
- private
63
-
64
73
  def alias_keyword_possible?(node)
65
74
  scope_type(node) != :dynamic && node.arguments.all?(&:sym_type?)
66
75
  end
@@ -70,14 +79,14 @@ module RuboCop
70
79
  node.children.none?(&:gvar_type?)
71
80
  end
72
81
 
73
- def add_offense_for_args(node)
82
+ def add_offense_for_args(node, &block)
74
83
  existing_args = node.children.map(&:source).join(' ')
75
84
  preferred_args = node.children.map { |a| a.source[1..-1] }.join(' ')
76
85
  arg_ranges = node.children.map(&:source_range)
77
86
  msg = format(MSG_SYMBOL_ARGS,
78
87
  prefer: preferred_args,
79
88
  current: existing_args)
80
- add_offense(node, location: arg_ranges.reduce(&:join), message: msg)
89
+ add_offense(arg_ranges.reduce(&:join), message: msg, &block)
81
90
  end
82
91
 
83
92
  # In this expression, will `self` be the same as the innermost enclosing
@@ -115,31 +124,25 @@ module RuboCop
115
124
  !sym_node.source.start_with?(':')
116
125
  end
117
126
 
118
- def correct_alias_method_to_alias(send_node)
119
- lambda do |corrector|
120
- new, old = *send_node.arguments
121
- replacement = "alias #{identifier(new)} #{identifier(old)}"
122
- corrector.replace(send_node, replacement)
123
- end
127
+ def correct_alias_method_to_alias(corrector, send_node)
128
+ new, old = *send_node.arguments
129
+ replacement = "alias #{identifier(new)} #{identifier(old)}"
130
+
131
+ corrector.replace(send_node, replacement)
124
132
  end
125
133
 
126
- def correct_alias_to_alias_method(node)
127
- lambda do |corrector|
128
- replacement =
129
- 'alias_method ' \
130
- ":#{identifier(node.new_identifier)}, " \
131
- ":#{identifier(node.old_identifier)}"
132
- corrector.replace(node, replacement)
133
- end
134
+ def correct_alias_to_alias_method(corrector, node)
135
+ replacement =
136
+ 'alias_method ' \
137
+ ":#{identifier(node.new_identifier)}, " \
138
+ ":#{identifier(node.old_identifier)}"
139
+
140
+ corrector.replace(node, replacement)
134
141
  end
135
142
 
136
- def correct_alias_with_symbol_args(node)
137
- lambda do |corrector|
138
- corrector.replace(node.new_identifier,
139
- node.new_identifier.source[1..-1])
140
- corrector.replace(node.old_identifier,
141
- node.old_identifier.source[1..-1])
142
- end
143
+ def correct_alias_with_symbol_args(corrector, node)
144
+ corrector.replace(node.new_identifier, node.new_identifier.source[1..-1])
145
+ corrector.replace(node.old_identifier, node.old_identifier.source[1..-1])
143
146
  end
144
147
 
145
148
  def_node_matcher :identifier, <<~PATTERN
@@ -36,9 +36,10 @@ module RuboCop
36
36
  # # good
37
37
  # if foo && bar
38
38
  # end
39
- class AndOr < Cop
39
+ class AndOr < Base
40
40
  include ConfigurableEnforcedStyle
41
41
  include RangeHelp
42
+ extend AutoCorrector
42
43
 
43
44
  MSG = 'Use `%<prefer>s` instead of `%<current>s`.'
44
45
 
@@ -55,8 +56,13 @@ module RuboCop
55
56
  alias on_until on_if
56
57
  alias on_until_post on_if
57
58
 
58
- def autocorrect(node)
59
- lambda do |corrector|
59
+ private
60
+
61
+ def process_logical_operator(node)
62
+ return if node.logical_operator?
63
+
64
+ message = message(node)
65
+ add_offense(node.loc.operator, message: message) do |corrector|
60
66
  node.each_child_node do |expr|
61
67
  if expr.send_type?
62
68
  correct_send(expr, corrector)
@@ -71,20 +77,12 @@ module RuboCop
71
77
  end
72
78
  end
73
79
 
74
- private
75
-
76
80
  def on_conditionals(node)
77
81
  node.condition.each_node(*AST::Node::OPERATOR_KEYWORDS) do |operator|
78
82
  process_logical_operator(operator)
79
83
  end
80
84
  end
81
85
 
82
- def process_logical_operator(node)
83
- return if node.logical_operator?
84
-
85
- add_offense(node, location: :operator)
86
- end
87
-
88
86
  def message(node)
89
87
  format(MSG, prefer: node.alternate_operator, current: node.operator)
90
88
  end
@@ -5,6 +5,10 @@ module RuboCop
5
5
  module Style
6
6
  # This cop enforces the use of `Array()` instead of explicit `Array` check or `[*var]`.
7
7
  #
8
+ # This cop is disabled by default because false positive will occur if
9
+ # the argument of `Array()` is not an array (e.g. Hash, Set),
10
+ # an array will be returned as an incompatibility result.
11
+ #
8
12
  # @example
9
13
  # # bad
10
14
  # paths = [paths] unless paths.is_a?(Array)
@@ -17,20 +17,19 @@ module RuboCop
17
17
  # # good
18
18
  # %w(foo bar baz).join(",")
19
19
  #
20
- class ArrayJoin < Cop
20
+ class ArrayJoin < Base
21
+ extend AutoCorrector
22
+
21
23
  MSG = 'Favor `Array#join` over `Array#*`.'
24
+ RESTRICT_ON_SEND = %i[*].freeze
22
25
 
23
26
  def_node_matcher :join_candidate?, '(send $array :* $str)'
24
27
 
25
28
  def on_send(node)
26
- join_candidate?(node) { add_offense(node, location: :selector) }
27
- end
28
-
29
- def autocorrect(node)
30
- array, join_arg = join_candidate?(node).map(&:source)
29
+ return unless (array, join_arg = join_candidate?(node))
31
30
 
32
- lambda do |corrector|
33
- corrector.replace(node, "#{array}.join(#{join_arg})")
31
+ add_offense(node.loc.selector) do |corrector|
32
+ corrector.replace(node, "#{array.source}.join(#{join_arg.source})")
34
33
  end
35
34
  end
36
35
  end
@@ -15,17 +15,17 @@ module RuboCop
15
15
  #
16
16
  # # good
17
17
  # # Translates from English to Japanese
18
- class AsciiComments < Cop
18
+ class AsciiComments < Base
19
19
  include RangeHelp
20
20
 
21
21
  MSG = 'Use only ascii symbols in comments.'
22
22
 
23
- def investigate(processed_source)
24
- processed_source.each_comment do |comment|
23
+ def on_new_investigation
24
+ processed_source.comments.each do |comment|
25
25
  next if comment.text.ascii_only?
26
26
  next if only_allowed_non_ascii_chars?(comment.text)
27
27
 
28
- add_offense(comment, location: first_offense_range(comment))
28
+ add_offense(first_offense_range(comment))
29
29
  end
30
30
  end
31
31
 
@@ -14,10 +14,12 @@ module RuboCop
14
14
  # attr_accessor :something
15
15
  # attr_reader :one, :two, :three
16
16
  #
17
- class Attr < Cop
17
+ class Attr < Base
18
18
  include RangeHelp
19
+ extend AutoCorrector
19
20
 
20
21
  MSG = 'Do not use `attr`. Use `%<replacement>s` instead.'
22
+ RESTRICT_ON_SEND = %i[attr].freeze
21
23
 
22
24
  def on_send(node)
23
25
  return unless node.command?(:attr) && node.arguments?
@@ -26,10 +28,15 @@ module RuboCop
26
28
  !node.parent.class_type? &&
27
29
  !class_eval?(node.parent)
28
30
 
29
- add_offense(node, location: :selector)
31
+ message = message(node)
32
+ add_offense(node.loc.selector, message: message) do |corrector|
33
+ autocorrect(corrector, node)
34
+ end
30
35
  end
31
36
 
32
- def autocorrect(node)
37
+ private
38
+
39
+ def autocorrect(corrector, node)
33
40
  attr_name, setter = *node.arguments
34
41
 
35
42
  node_expr = node.source_range
@@ -37,14 +44,10 @@ module RuboCop
37
44
 
38
45
  remove = range_between(attr_expr.end_pos, node_expr.end_pos) if setter&.boolean_type?
39
46
 
40
- lambda do |corrector|
41
- corrector.replace(node.loc.selector, replacement_method(node))
42
- corrector.remove(remove) if remove
43
- end
47
+ corrector.replace(node.loc.selector, replacement_method(node))
48
+ corrector.remove(remove) if remove
44
49
  end
45
50
 
46
- private
47
-
48
51
  def message(node)
49
52
  format(MSG, replacement: replacement_method(node))
50
53
  end
@@ -16,13 +16,15 @@ module RuboCop
16
16
  # File.open('file') do |f|
17
17
  # # ...
18
18
  # end
19
- class AutoResourceCleanup < Cop
19
+ class AutoResourceCleanup < Base
20
20
  MSG = 'Use the block version of `%<class>s.%<method>s`.'
21
21
 
22
22
  TARGET_METHODS = {
23
23
  File: :open
24
24
  }.freeze
25
25
 
26
+ RESTRICT_ON_SEND = TARGET_METHODS.values.freeze
27
+
26
28
  def on_send(node)
27
29
  TARGET_METHODS.each do |target_class, target_method|
28
30
  next if node.method_name != target_method
@@ -32,10 +34,7 @@ module RuboCop
32
34
 
33
35
  next if cleanup?(node)
34
36
 
35
- add_offense(node,
36
- message: format(MSG,
37
- class: target_class,
38
- method: target_method))
37
+ add_offense(node, message: format(MSG, class: target_class, method: target_method))
39
38
  end
40
39
  end
41
40
 
@@ -23,8 +23,9 @@ module RuboCop
23
23
  # %Q|He said: "#{greeting}"|
24
24
  # %q/She said: 'Hi'/
25
25
  #
26
- class BarePercentLiterals < Cop
26
+ class BarePercentLiterals < Base
27
27
  include ConfigurableEnforcedStyle
28
+ extend AutoCorrector
28
29
 
29
30
  MSG = 'Use `%%%<good>s` instead of `%%%<bad>s`.'
30
31
 
@@ -36,14 +37,6 @@ module RuboCop
36
37
  check(node)
37
38
  end
38
39
 
39
- def autocorrect(node)
40
- src = node.loc.begin.source
41
- replacement = src.start_with?('%Q') ? '%' : '%Q'
42
- lambda do |corrector|
43
- corrector.replace(node.loc.begin, src.sub(/%Q?/, replacement))
44
- end
45
- end
46
-
47
40
  private
48
41
 
49
42
  def check(node)
@@ -68,9 +61,14 @@ module RuboCop
68
61
  end
69
62
 
70
63
  def add_offense_for_wrong_style(node, good, bad)
71
- add_offense(node, location: :begin, message: format(MSG,
72
- good: good,
73
- bad: bad))
64
+ location = node.loc.begin
65
+
66
+ add_offense(location, message: format(MSG, good: good, bad: bad)) do |corrector|
67
+ source = location.source
68
+ replacement = source.start_with?('%Q') ? '%' : '%Q'
69
+
70
+ corrector.replace(location, source.sub(/%Q?/, replacement))
71
+ end
74
72
  end
75
73
  end
76
74
  end
@@ -10,11 +10,11 @@ module RuboCop
10
10
  # # bad
11
11
  # BEGIN { test }
12
12
  #
13
- class BeginBlock < Cop
13
+ class BeginBlock < Base
14
14
  MSG = 'Avoid the use of `BEGIN` blocks.'
15
15
 
16
16
  def on_preexe(node)
17
- add_offense(node, location: :keyword)
17
+ add_offense(node.loc.keyword)
18
18
  end
19
19
  end
20
20
  end
@@ -18,8 +18,9 @@ module RuboCop
18
18
  # attr_accessor :bar
19
19
  # end
20
20
  #
21
- class BisectedAttrAccessor < Cop
21
+ class BisectedAttrAccessor < Base
22
22
  include VisibilityHelp
23
+ extend AutoCorrector
23
24
 
24
25
  MSG = 'Combine both accessors into `attr_accessor %<name>s`.'
25
26
 
@@ -36,14 +37,6 @@ module RuboCop
36
37
  alias on_sclass on_class
37
38
  alias on_module on_class
38
39
 
39
- def autocorrect(node)
40
- macro = node.parent
41
-
42
- lambda do |corrector|
43
- corrector.replace(macro, replacement(macro, node))
44
- end
45
- end
46
-
47
40
  private
48
41
 
49
42
  def accessor_names(class_node, visibility)
@@ -97,9 +90,13 @@ module RuboCop
97
90
  macro.arguments.each do |arg_node|
98
91
  name = arg_node.source
99
92
 
100
- if (attr_reader?(macro) && writer_names.include?(name)) ||
101
- (attr_writer?(macro) && reader_names.include?(name))
102
- add_offense(arg_node, message: format(MSG, name: name))
93
+ next unless (attr_reader?(macro) && writer_names.include?(name)) ||
94
+ (attr_writer?(macro) && reader_names.include?(name))
95
+
96
+ add_offense(arg_node, message: format(MSG, name: name)) do |corrector|
97
+ macro = arg_node.parent
98
+
99
+ corrector.replace(macro, replacement(macro, arg_node))
103
100
  end
104
101
  end
105
102
  end
@@ -16,34 +16,30 @@ module RuboCop
16
16
  # # Multiple lines
17
17
  # # of comments...
18
18
  #
19
- class BlockComments < Cop
19
+ class BlockComments < Base
20
20
  include RangeHelp
21
+ extend AutoCorrector
21
22
 
22
23
  MSG = 'Do not use block comments.'
23
24
  BEGIN_LENGTH = "=begin\n".length
24
25
  END_LENGTH = "\n=end".length
25
26
 
26
- def investigate(processed_source)
27
- processed_source.each_comment do |comment|
27
+ def on_new_investigation
28
+ processed_source.comments.each do |comment|
28
29
  next unless comment.document?
29
30
 
30
- add_offense(comment)
31
- end
32
- end
33
-
34
- def autocorrect(comment)
35
- eq_begin, eq_end, contents = parts(comment)
31
+ add_offense(comment) do |corrector|
32
+ eq_begin, eq_end, contents = parts(comment)
36
33
 
37
- lambda do |corrector|
38
- corrector.remove(eq_begin)
39
- unless contents.length.zero?
40
- corrector.replace(contents,
41
- contents.source
42
- .gsub(/\A/, '# ')
43
- .gsub(/\n\n/, "\n#\n")
44
- .gsub(/\n(?=[^#])/, "\n# "))
34
+ corrector.remove(eq_begin)
35
+ unless contents.length.zero?
36
+ corrector.replace(
37
+ contents,
38
+ contents.source.gsub(/\A/, '# ').gsub(/\n\n/, "\n#\n").gsub(/\n(?=[^#])/, "\n# ")
39
+ )
40
+ end
41
+ corrector.remove(eq_end)
45
42
  end
46
- corrector.remove(eq_end)
47
43
  end
48
44
  end
49
45