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
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # part of the pattern source, but need to preserve their width, to allow offsets to
28
28
  # correctly line up with the original source: spaces have no effect, and preserve width.
29
29
  if child.begin_type?
30
- replace_match_with_spaces(source, /.*/) # replace all content
30
+ replace_match_with_spaces(source, /.*/m) # replace all content
31
31
  elsif freespace_mode
32
32
  replace_match_with_spaces(source, /(?<!\\)#.*/) # replace any comments
33
33
  else
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  # Common functionality for checking `rescue` nodes.
6
6
  module RescueNode
7
- def investigate(processed_source)
7
+ def on_new_investigation
8
8
  @modifier_locations = processed_source
9
9
  .tokens
10
10
  .select(&:rescue_modifier?)
@@ -17,6 +17,16 @@ module RuboCop
17
17
  node&.resbody_type? &&
18
18
  @modifier_locations.include?(node.loc.keyword)
19
19
  end
20
+
21
+ # @deprecated Use ResbodyNode#exceptions instead
22
+ def rescued_exceptions(resbody)
23
+ rescue_group, = *resbody
24
+ if rescue_group
25
+ rescue_group.values
26
+ else
27
+ []
28
+ end
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -7,10 +7,11 @@ module RuboCop
7
7
  module SpaceAfterPunctuation
8
8
  MSG = 'Space missing after %<token>s.'
9
9
 
10
- def investigate(processed_source)
10
+ def on_new_investigation
11
11
  each_missing_space(processed_source.tokens) do |token|
12
- add_offense(token, location: token.pos,
13
- message: format(MSG, token: kind(token)))
12
+ add_offense(token.pos, message: format(MSG, token: kind(token))) do |corrector|
13
+ PunctuationCorrector.add_space(corrector, token)
14
+ end
14
15
  end
15
16
  end
16
17
 
@@ -9,10 +9,11 @@ module RuboCop
9
9
 
10
10
  MSG = 'Space found before %<token>s.'
11
11
 
12
- def investigate(processed_source)
12
+ def on_new_investigation
13
13
  each_missing_space(processed_source.tokens) do |token, pos_before|
14
- add_offense(pos_before, location: pos_before,
15
- message: format(MSG, token: kind(token)))
14
+ add_offense(pos_before, message: format(MSG, token: kind(token))) do |corrector|
15
+ PunctuationCorrector.remove_space(corrector, pos_before)
16
+ end
16
17
  end
17
18
  end
18
19
 
@@ -19,14 +19,14 @@ module RuboCop
19
19
  def non_eligible_node?(node)
20
20
  node.modifier_form? ||
21
21
  node.nonempty_line_count > 3 ||
22
- processed_source.commented?(node.loc.end)
22
+ processed_source.line_with_comment?(node.loc.last_line)
23
23
  end
24
24
 
25
25
  def non_eligible_body?(body)
26
26
  body.nil? ||
27
27
  body.empty_source? ||
28
28
  body.begin_type? ||
29
- processed_source.commented?(body.source_range)
29
+ processed_source.contains_comment?(body.source_range)
30
30
  end
31
31
 
32
32
  def non_eligible_condition?(condition)
@@ -57,10 +57,11 @@ module RuboCop
57
57
  end
58
58
 
59
59
  def first_line_comment(node)
60
- comment =
61
- processed_source.find_comment { |c| c.loc.line == node.loc.line }
60
+ comment = processed_source.find_comment { |c| c.loc.line == node.loc.line }
61
+ return unless comment
62
62
 
63
- comment ? comment.loc.expression.source : nil
63
+ comment_source = comment.loc.expression.source
64
+ comment_source unless comment_disables_cop?(comment_source)
64
65
  end
65
66
 
66
67
  def parenthesize?(node)
@@ -72,7 +73,7 @@ module RuboCop
72
73
  return true if parent.assignment? || parent.operator_keyword?
73
74
  return true if %i[array pair].include?(parent.type)
74
75
 
75
- node.parent.send_type? && !node.parent.parenthesized?
76
+ node.parent.send_type?
76
77
  end
77
78
 
78
79
  def max_line_length
@@ -80,6 +81,11 @@ module RuboCop
80
81
 
81
82
  config.for_cop('Layout/LineLength')['Max']
82
83
  end
84
+
85
+ def comment_disables_cop?(comment)
86
+ regexp_pattern = "# rubocop : (disable|todo) ([^,],)* (all|#{cop_name})"
87
+ Regexp.new(regexp_pattern.gsub(' ', '\s*')).match?(comment)
88
+ end
83
89
  end
84
90
  end
85
91
  end
@@ -81,8 +81,11 @@ module RuboCop
81
81
 
82
82
  def space_offense(node, token, side, message, command)
83
83
  range = side_space_range(range: token.pos, side: side)
84
- add_offense(node, location: range,
85
- message: format(message, command: command))
84
+ add_offense(range, message: format(message, command: command)) do |corrector|
85
+ autocorrect(corrector, node) unless ignored_node?(node)
86
+
87
+ ignore_node(node)
88
+ end
86
89
  end
87
90
 
88
91
  def empty_offenses(node, left, right, message)
@@ -96,8 +99,9 @@ module RuboCop
96
99
  end
97
100
 
98
101
  def empty_offense(node, range, message, command)
99
- add_offense(node, location: range,
100
- message: format(message, command: command))
102
+ add_offense(range, message: format(message, command: command)) do |corrector|
103
+ autocorrect(corrector, node)
104
+ end
101
105
  end
102
106
 
103
107
  def empty_brackets?(left_bracket_token, right_bracket_token)
@@ -74,10 +74,8 @@ module RuboCop
74
74
  end
75
75
 
76
76
  def inside_comment?(range, comma_offset)
77
- processed_source.comments.any? do |comment|
78
- comment_offset = comment.loc.expression.begin_pos - range.begin_pos
79
- comment_offset >= 0 && comment_offset < comma_offset
80
- end
77
+ comment = processed_source.comment_at_line(range.line)
78
+ comment && comment.loc.expression.begin_pos < range.begin_pos + comma_offset
81
79
  end
82
80
 
83
81
  # Returns true if the node has round/square/curly brackets.
@@ -142,7 +140,9 @@ module RuboCop
142
140
  unit: format(kind, article: article) + extra_info.to_s
143
141
  )
144
142
 
145
- add_offense(range, location: range, message: msg)
143
+ add_offense(range, message: msg) do |corrector|
144
+ PunctuationCorrector.swap_comma(corrector, range)
145
+ end
146
146
  end
147
147
 
148
148
  def put_comma(items, kind)
@@ -150,13 +150,11 @@ module RuboCop
150
150
  return if last_item.block_pass_type?
151
151
 
152
152
  range = autocorrect_range(last_item)
153
- msg = format(
154
- MSG,
155
- command: 'Put a',
156
- unit: format(kind, article: 'a multiline')
157
- )
153
+ msg = format(MSG, command: 'Put a', unit: format(kind, article: 'a multiline'))
158
154
 
159
- add_offense(range, location: range, message: msg)
155
+ add_offense(range, message: msg) do |corrector|
156
+ PunctuationCorrector.swap_comma(corrector, range)
157
+ end
160
158
  end
161
159
 
162
160
  def autocorrect_range(item)
@@ -16,32 +16,20 @@ module RuboCop
16
16
  end
17
17
 
18
18
  def find_visibility_start(node)
19
- left_siblings_of(node)
20
- .reverse
21
- .find(&method(:visibility_block?))
19
+ node.left_siblings
20
+ .reverse
21
+ .find(&method(:visibility_block?))
22
22
  end
23
23
 
24
24
  # Navigate to find the last protected method
25
25
  def find_visibility_end(node)
26
26
  possible_visibilities = VISIBILITY_SCOPES - [node_visibility(node)]
27
- right = right_siblings_of(node)
27
+ right = node.right_siblings
28
28
  right.find do |child_node|
29
29
  possible_visibilities.include?(node_visibility(child_node))
30
30
  end || right.last
31
31
  end
32
32
 
33
- def left_siblings_of(node)
34
- siblings_of(node)[0, node.sibling_index]
35
- end
36
-
37
- def right_siblings_of(node)
38
- siblings_of(node)[node.sibling_index..-1]
39
- end
40
-
41
- def siblings_of(node)
42
- node.parent.children
43
- end
44
-
45
33
  def_node_matcher :visibility_block?, <<~PATTERN
46
34
  (send nil? { :private :protected :public })
47
35
  PATTERN
@@ -35,7 +35,7 @@ module RuboCop
35
35
  def op_method?(name)
36
36
  return false if EXCLUDED.include?(name)
37
37
 
38
- !/\A\w/.match?(name) || OP_LIKE_METHODS.include?(name)
38
+ !/\A[[:word:]]/.match?(name) || OP_LIKE_METHODS.include?(name)
39
39
  end
40
40
  end
41
41
  end
@@ -33,7 +33,7 @@ module RuboCop
33
33
  'called `%<namespace>s`.'
34
34
  MSG_REGEX = '`%<basename>s` should match `%<regex>s`.'
35
35
 
36
- SNAKE_CASE = /^[\da-z_.?!]+$/.freeze
36
+ SNAKE_CASE = /^[\d[[:lower:]]_.?!]+$/.freeze
37
37
 
38
38
  def on_new_investigation
39
39
  file_path = processed_source.file_path
@@ -64,6 +64,7 @@ module RuboCop
64
64
 
65
65
  PseudoSourceRange = Struct.new(:line, :column, :source_line, :begin_pos,
66
66
  :end_pos)
67
+ private_constant :PseudoSourceRange
67
68
 
68
69
  NO_LOCATION = PseudoSourceRange.new(1, 0, '', 0, 1).freeze
69
70
 
@@ -13,6 +13,7 @@ module RuboCop
13
13
  # binding.eval(something)
14
14
  class Eval < Base
15
15
  MSG = 'The use of `eval` is a serious security risk.'
16
+ RESTRICT_ON_SEND = %i[eval].freeze
16
17
 
17
18
  def_node_matcher :eval?, <<~PATTERN
18
19
  (send {nil? (send nil? :binding)} :eval $!str ...)
@@ -26,6 +26,7 @@ module RuboCop
26
26
  extend AutoCorrector
27
27
 
28
28
  MSG = 'Prefer `JSON.parse` over `JSON.%<method>s`.'
29
+ RESTRICT_ON_SEND = %i[load restore].freeze
29
30
 
30
31
  def_node_matcher :json_load, <<~PATTERN
31
32
  (send (const {nil? cbase} :JSON) ${:load :restore} ...)
@@ -20,6 +20,7 @@ module RuboCop
20
20
  #
21
21
  class MarshalLoad < Base
22
22
  MSG = 'Avoid using `Marshal.%<method>s`.'
23
+ RESTRICT_ON_SEND = %i[load restore].freeze
23
24
 
24
25
  def_node_matcher :marshal_load, <<~PATTERN
25
26
  (send (const {nil? cbase} :Marshal) ${:load :restore}
@@ -21,6 +21,7 @@ module RuboCop
21
21
  # URI.parse(something).open
22
22
  class Open < Base
23
23
  MSG = 'The use of `Kernel#open` is a serious security risk.'
24
+ RESTRICT_ON_SEND = %i[open].freeze
24
25
 
25
26
  def_node_matcher :open?, <<~PATTERN
26
27
  (send nil? :open $!str ...)
@@ -19,6 +19,7 @@ module RuboCop
19
19
  extend AutoCorrector
20
20
 
21
21
  MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'
22
+ RESTRICT_ON_SEND = %i[load].freeze
22
23
 
23
24
  def_node_matcher :yaml_load, <<~PATTERN
24
25
  (send (const {nil? cbase} :YAML) :load ...)
@@ -6,7 +6,6 @@ module RuboCop
6
6
  class Severity
7
7
  include Comparable
8
8
 
9
- # @api private
10
9
  NAMES = %i[refactor convention warning error fatal].freeze
11
10
 
12
11
  # @api private
@@ -22,7 +21,6 @@ module RuboCop
22
21
  # any of `:refactor`, `:convention`, `:warning`, `:error` or `:fatal`.
23
22
  attr_reader :name
24
23
 
25
- # @api private
26
24
  def self.name_from_code(code)
27
25
  name = code.to_sym
28
26
  CODE_TABLE[name] || name
@@ -37,22 +35,18 @@ module RuboCop
37
35
  freeze
38
36
  end
39
37
 
40
- # @api private
41
38
  def to_s
42
39
  @name.to_s
43
40
  end
44
41
 
45
- # @api private
46
42
  def code
47
43
  @name.to_s[0].upcase
48
44
  end
49
45
 
50
- # @api private
51
46
  def level
52
47
  NAMES.index(name) + 1
53
48
  end
54
49
 
55
- # @api private
56
50
  def ==(other)
57
51
  @name == if other.is_a?(Symbol)
58
52
  other
@@ -61,12 +55,10 @@ module RuboCop
61
55
  end
62
56
  end
63
57
 
64
- # @api private
65
58
  def hash
66
59
  @name.hash
67
60
  end
68
61
 
69
- # @api private
70
62
  def <=>(other)
71
63
  level <=> other.level
72
64
  end
@@ -62,11 +62,9 @@ module RuboCop
62
62
  # private :bar, :baz
63
63
  #
64
64
  # end
65
- class AccessModifierDeclarations < Cop
65
+ class AccessModifierDeclarations < Base
66
66
  include ConfigurableEnforcedStyle
67
67
 
68
- ACCESS_MODIFIERS = %i[private protected public module_function].to_set.freeze
69
-
70
68
  GROUP_STYLE_MESSAGE = [
71
69
  '`%<access_modifier>s` should not be',
72
70
  'inlined in method definitions.'
@@ -77,20 +75,19 @@ module RuboCop
77
75
  'inlined in method definitions.'
78
76
  ].join(' ')
79
77
 
78
+ RESTRICT_ON_SEND = %i[private protected public module_function].freeze
79
+
80
80
  def_node_matcher :access_modifier_with_symbol?, <<~PATTERN
81
81
  (send nil? {:private :protected :public} (sym _))
82
82
  PATTERN
83
83
 
84
84
  def on_send(node)
85
- return unless access_modifier?(node)
85
+ return unless node.access_modifier?
86
86
  return if node.parent.pair_type?
87
- return if cop_config['AllowModifiersOnSymbols'] &&
88
- access_modifier_with_symbol?(node)
87
+ return if cop_config['AllowModifiersOnSymbols'] && access_modifier_with_symbol?(node)
89
88
 
90
89
  if offense?(node)
91
- add_offense(node, location: :selector) do
92
- opposite_style_detected
93
- end
90
+ add_offense(node.loc.selector) if opposite_style_detected
94
91
  else
95
92
  correct_style_detected
96
93
  end
@@ -98,14 +95,6 @@ module RuboCop
98
95
 
99
96
  private
100
97
 
101
- def access_modifier?(node)
102
- maybe_access_modifier?(node) && node.access_modifier?
103
- end
104
-
105
- def maybe_access_modifier?(node)
106
- !node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
107
- end
108
-
109
98
  def offense?(node)
110
99
  (group_style? && access_modifier_is_inlined?(node)) ||
111
100
  (inline_style? && access_modifier_is_not_inlined?(node))
@@ -127,8 +116,8 @@ module RuboCop
127
116
  !access_modifier_is_inlined?(node)
128
117
  end
129
118
 
130
- def message(node)
131
- access_modifier = node.loc.selector.source
119
+ def message(range)
120
+ access_modifier = range.source
132
121
 
133
122
  if group_style?
134
123
  format(GROUP_STYLE_MESSAGE, access_modifier: access_modifier)
@@ -31,10 +31,11 @@ module RuboCop
31
31
  # attr_reader :baz
32
32
  # end
33
33
  #
34
- class AccessorGrouping < Cop
34
+ class AccessorGrouping < Base
35
35
  include ConfigurableEnforcedStyle
36
36
  include RangeHelp
37
37
  include VisibilityHelp
38
+ extend AutoCorrector
38
39
 
39
40
  GROUPED_MSG = 'Group together all `%<accessor>s` attributes.'
40
41
  SEPARATED_MSG = 'Use one attribute per `%<accessor>s`.'
@@ -51,18 +52,27 @@ module RuboCop
51
52
  alias on_sclass on_class
52
53
  alias on_module on_class
53
54
 
54
- def autocorrect(node)
55
- lambda do |corrector|
56
- if (preferred_accessors = preferred_accessors(node))
57
- corrector.replace(node, preferred_accessors)
58
- else
59
- range = range_with_surrounding_space(range: node.loc.expression, side: :left)
60
- corrector.remove(range)
61
- end
55
+ private
56
+
57
+ def check(send_node)
58
+ return if previous_line_comment?(send_node)
59
+ return unless grouped_style? && sibling_accessors(send_node).size > 1 ||
60
+ separated_style? && send_node.arguments.size > 1
61
+
62
+ message = message(send_node)
63
+ add_offense(send_node, message: message) do |corrector|
64
+ autocorrect(corrector, send_node)
62
65
  end
63
66
  end
64
67
 
65
- private
68
+ def autocorrect(corrector, node)
69
+ if (preferred_accessors = preferred_accessors(node))
70
+ corrector.replace(node, preferred_accessors)
71
+ else
72
+ range = range_with_surrounding_space(range: node.loc.expression, side: :left)
73
+ corrector.remove(range)
74
+ end
75
+ end
66
76
 
67
77
  def previous_line_comment?(node)
68
78
  comment_line?(processed_source[node.first_line - 2])
@@ -84,16 +94,6 @@ module RuboCop
84
94
  send_node.macro? && ACCESSOR_METHODS.include?(send_node.method_name)
85
95
  end
86
96
 
87
- def check(send_node)
88
- return if previous_line_comment?(send_node)
89
-
90
- if grouped_style? && sibling_accessors(send_node).size > 1
91
- add_offense(send_node)
92
- elsif separated_style? && send_node.arguments.size > 1
93
- add_offense(send_node)
94
- end
95
- end
96
-
97
97
  def grouped_style?
98
98
  style == :grouped
99
99
  end