rubocop 0.87.0 → 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 (508) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/rubocop-profile +32 -0
  4. data/config/default.yml +232 -33
  5. data/lib/rubocop.rb +36 -4
  6. data/lib/rubocop/cached_data.rb +1 -0
  7. data/lib/rubocop/cli.rb +2 -2
  8. data/lib/rubocop/cli/command.rb +1 -0
  9. data/lib/rubocop/cli/command/auto_genenerate_config.rb +4 -3
  10. data/lib/rubocop/cli/command/base.rb +2 -0
  11. data/lib/rubocop/cli/command/execute_runner.rb +2 -1
  12. data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
  13. data/lib/rubocop/cli/command/show_cops.rb +3 -2
  14. data/lib/rubocop/cli/command/version.rb +3 -2
  15. data/lib/rubocop/cli/environment.rb +1 -0
  16. data/lib/rubocop/comment_config.rb +10 -7
  17. data/lib/rubocop/config.rb +20 -3
  18. data/lib/rubocop/config_loader.rb +39 -16
  19. data/lib/rubocop/config_loader_resolver.rb +4 -3
  20. data/lib/rubocop/config_obsoletion.rb +7 -1
  21. data/lib/rubocop/config_store.rb +4 -0
  22. data/lib/rubocop/config_validator.rb +5 -4
  23. data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
  24. data/lib/rubocop/cop/badge.rb +1 -1
  25. data/lib/rubocop/cop/base.rb +37 -6
  26. data/lib/rubocop/cop/bundler/gem_comment.rb +7 -3
  27. data/lib/rubocop/cop/commissioner.rb +47 -8
  28. data/lib/rubocop/cop/cop.rb +1 -1
  29. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  30. data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
  31. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
  32. data/lib/rubocop/cop/correctors/line_break_corrector.rb +6 -6
  33. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +34 -3
  34. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
  35. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +6 -11
  36. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
  37. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
  38. data/lib/rubocop/cop/documentation.rb +22 -0
  39. data/lib/rubocop/cop/force.rb +1 -0
  40. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +38 -12
  41. data/lib/rubocop/cop/generator.rb +1 -0
  42. data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
  43. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
  44. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
  45. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
  46. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
  47. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
  48. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  49. data/lib/rubocop/cop/layout/block_alignment.rb +24 -20
  50. data/lib/rubocop/cop/layout/class_structure.rb +15 -53
  51. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
  52. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  53. data/lib/rubocop/cop/layout/condition_position.rb +13 -15
  54. data/lib/rubocop/cop/layout/def_end_alignment.rb +7 -4
  55. data/lib/rubocop/cop/layout/dot_position.rb +21 -17
  56. data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
  57. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +19 -16
  58. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
  59. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +144 -0
  60. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
  61. data/lib/rubocop/cop/layout/empty_lines.rb +6 -9
  62. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +5 -6
  63. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
  64. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -6
  65. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
  66. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
  67. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
  68. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -5
  69. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
  70. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
  71. data/lib/rubocop/cop/layout/end_alignment.rb +9 -9
  72. data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
  73. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
  74. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
  75. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +5 -9
  76. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
  77. data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
  78. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
  79. data/lib/rubocop/cop/layout/heredoc_indentation.rb +16 -13
  80. data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
  81. data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
  82. data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
  83. data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
  84. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
  85. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
  86. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
  87. data/lib/rubocop/cop/layout/multiline_block_layout.rb +37 -24
  88. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
  89. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
  90. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
  91. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
  92. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
  93. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -23
  94. data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
  95. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
  96. data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
  97. data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
  98. data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
  99. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -2
  100. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +20 -15
  101. data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
  102. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
  103. data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
  104. data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
  105. data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
  106. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
  107. data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
  108. data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
  109. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
  110. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +16 -18
  111. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
  112. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
  113. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +16 -19
  114. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
  115. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
  116. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
  117. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +13 -16
  118. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +10 -11
  119. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
  120. data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
  121. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
  122. data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
  123. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
  124. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  125. data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
  126. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
  127. data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
  128. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  129. data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
  130. data/lib/rubocop/cop/lint/debugger.rb +7 -1
  131. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
  132. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
  133. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
  134. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  135. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  136. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  137. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
  138. data/lib/rubocop/cop/lint/duplicate_require.rb +41 -0
  139. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +49 -0
  140. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  141. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  142. data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
  143. data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
  144. data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
  145. data/lib/rubocop/cop/lint/empty_file.rb +53 -0
  146. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
  147. data/lib/rubocop/cop/lint/empty_when.rb +2 -2
  148. data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
  149. data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
  150. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  151. data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
  152. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  153. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
  154. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
  155. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
  156. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
  157. data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
  158. data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
  159. data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
  160. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
  161. data/lib/rubocop/cop/lint/loop.rb +23 -2
  162. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
  163. data/lib/rubocop/cop/lint/missing_super.rb +99 -0
  164. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +3 -36
  165. data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
  166. data/lib/rubocop/cop/lint/nested_method_definition.rb +14 -20
  167. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  168. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  169. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +82 -11
  170. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  171. data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
  172. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
  173. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +80 -0
  174. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
  175. data/lib/rubocop/cop/lint/percent_string_array.rb +3 -6
  176. data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
  177. data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
  178. data/lib/rubocop/cop/lint/rand_one.rb +2 -2
  179. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
  180. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
  181. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
  182. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
  183. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
  184. data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
  185. data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
  186. data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
  187. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
  188. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  189. data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
  190. data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
  191. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
  192. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
  193. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
  194. data/lib/rubocop/cop/lint/script_permission.rb +10 -7
  195. data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
  196. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
  197. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
  198. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
  199. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -7
  200. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  201. data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
  202. data/lib/rubocop/cop/lint/to_json.rb +4 -6
  203. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
  204. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
  205. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
  206. data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
  207. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  208. data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
  209. data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
  210. data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
  211. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  212. data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
  213. data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
  214. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
  215. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
  216. data/lib/rubocop/cop/lint/useless_method_definition.rb +77 -0
  217. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
  218. data/lib/rubocop/cop/lint/void.rb +3 -7
  219. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  220. data/lib/rubocop/cop/metrics/block_length.rb +2 -2
  221. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  222. data/lib/rubocop/cop/metrics/class_length.rb +2 -2
  223. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  224. data/lib/rubocop/cop/metrics/method_length.rb +2 -2
  225. data/lib/rubocop/cop/metrics/module_length.rb +2 -2
  226. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
  227. data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
  228. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +50 -5
  229. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +53 -24
  230. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
  231. data/lib/rubocop/cop/migration/department_name.rb +14 -16
  232. data/lib/rubocop/cop/mixin/alignment.rb +5 -1
  233. data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
  234. data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
  235. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
  236. data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
  237. data/lib/rubocop/cop/mixin/code_length.rb +22 -5
  238. data/lib/rubocop/cop/mixin/comments_help.rb +54 -0
  239. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
  240. data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
  241. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -1
  242. data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
  243. data/lib/rubocop/cop/mixin/hash_transform_method.rb +22 -11
  244. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  245. data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
  246. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
  247. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
  248. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
  249. data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
  250. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  251. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
  252. data/lib/rubocop/cop/mixin/rescue_node.rb +10 -1
  253. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
  254. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
  255. data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
  256. data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -29
  257. data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
  258. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
  259. data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
  260. data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
  261. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  262. data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
  263. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  264. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  265. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
  266. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  267. data/lib/rubocop/cop/naming/file_name.rb +3 -3
  268. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  269. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
  270. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
  271. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  272. data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
  273. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
  274. data/lib/rubocop/cop/offense.rb +1 -0
  275. data/lib/rubocop/cop/registry.rb +3 -3
  276. data/lib/rubocop/cop/security/eval.rb +2 -2
  277. data/lib/rubocop/cop/security/json_load.rb +6 -8
  278. data/lib/rubocop/cop/security/marshal_load.rb +2 -4
  279. data/lib/rubocop/cop/security/open.rb +2 -2
  280. data/lib/rubocop/cop/security/yaml_load.rb +6 -6
  281. data/lib/rubocop/cop/severity.rb +0 -8
  282. data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
  283. data/lib/rubocop/cop/style/accessor_grouping.rb +33 -20
  284. data/lib/rubocop/cop/style/alias.rb +41 -36
  285. data/lib/rubocop/cop/style/and_or.rb +9 -11
  286. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  287. data/lib/rubocop/cop/style/array_join.rb +6 -8
  288. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  289. data/lib/rubocop/cop/style/attr.rb +11 -9
  290. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
  291. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  292. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  293. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +58 -38
  294. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  295. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  296. data/lib/rubocop/cop/style/case_equality.rb +29 -5
  297. data/lib/rubocop/cop/style/case_like_if.rb +236 -0
  298. data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
  299. data/lib/rubocop/cop/style/class_check.rb +7 -9
  300. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  301. data/lib/rubocop/cop/style/class_methods_definitions.rb +131 -0
  302. data/lib/rubocop/cop/style/class_vars.rb +6 -10
  303. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  304. data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
  305. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  306. data/lib/rubocop/cop/style/combinable_loops.rb +89 -0
  307. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  308. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  309. data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
  310. data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
  311. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  312. data/lib/rubocop/cop/style/copyright.rb +12 -12
  313. data/lib/rubocop/cop/style/date_time.rb +1 -1
  314. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  315. data/lib/rubocop/cop/style/dir.rb +7 -10
  316. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  317. data/lib/rubocop/cop/style/documentation.rb +6 -8
  318. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  319. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  320. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  321. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  322. data/lib/rubocop/cop/style/each_with_object.rb +16 -19
  323. data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
  324. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  325. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  326. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
  327. data/lib/rubocop/cop/style/empty_literal.rb +15 -16
  328. data/lib/rubocop/cop/style/empty_method.rb +10 -13
  329. data/lib/rubocop/cop/style/encoding.rb +5 -9
  330. data/lib/rubocop/cop/style/end_block.rb +4 -6
  331. data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
  332. data/lib/rubocop/cop/style/even_odd.rb +7 -11
  333. data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
  334. data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
  335. data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
  336. data/lib/rubocop/cop/style/float_division.rb +8 -11
  337. data/lib/rubocop/cop/style/for.rb +11 -15
  338. data/lib/rubocop/cop/style/format_string.rb +21 -19
  339. data/lib/rubocop/cop/style/format_string_token.rb +10 -12
  340. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  341. data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
  342. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  343. data/lib/rubocop/cop/style/guard_clause.rb +6 -6
  344. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
  345. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  346. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  347. data/lib/rubocop/cop/style/hash_syntax.rb +10 -8
  348. data/lib/rubocop/cop/style/hash_transform_keys.rb +17 -3
  349. data/lib/rubocop/cop/style/hash_transform_values.rb +16 -2
  350. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  351. data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
  352. data/lib/rubocop/cop/style/if_unless_modifier.rb +19 -41
  353. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
  354. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  355. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  356. data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
  357. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  358. data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
  359. data/lib/rubocop/cop/style/keyword_parameters_order.rb +58 -0
  360. data/lib/rubocop/cop/style/lambda.rb +7 -12
  361. data/lib/rubocop/cop/style/lambda_call.rb +14 -13
  362. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  363. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  364. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
  365. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  366. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
  367. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
  368. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  369. data/lib/rubocop/cop/style/min_max.rb +8 -12
  370. data/lib/rubocop/cop/style/missing_else.rb +11 -21
  371. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
  372. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  373. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  374. data/lib/rubocop/cop/style/module_function.rb +10 -13
  375. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  376. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  377. data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
  378. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  379. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
  380. data/lib/rubocop/cop/style/multiline_when_then.rb +9 -11
  381. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  382. data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
  383. data/lib/rubocop/cop/style/negated_if.rb +6 -6
  384. data/lib/rubocop/cop/style/negated_unless.rb +6 -6
  385. data/lib/rubocop/cop/style/negated_while.rb +7 -15
  386. data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
  387. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
  388. data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
  389. data/lib/rubocop/cop/style/next.rb +10 -14
  390. data/lib/rubocop/cop/style/nil_comparison.rb +11 -11
  391. data/lib/rubocop/cop/style/non_nil_check.rb +32 -26
  392. data/lib/rubocop/cop/style/not.rb +19 -26
  393. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
  394. data/lib/rubocop/cop/style/numeric_predicate.rb +11 -15
  395. data/lib/rubocop/cop/style/one_line_conditional.rb +71 -23
  396. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  397. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  398. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
  399. data/lib/rubocop/cop/style/or_assignment.rb +13 -10
  400. data/lib/rubocop/cop/style/parallel_assignment.rb +18 -18
  401. data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
  402. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +14 -20
  403. data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
  404. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
  405. data/lib/rubocop/cop/style/preferred_hash_methods.rb +9 -14
  406. data/lib/rubocop/cop/style/proc.rb +6 -6
  407. data/lib/rubocop/cop/style/raise_args.rb +13 -24
  408. data/lib/rubocop/cop/style/random_with_offset.rb +16 -16
  409. data/lib/rubocop/cop/style/redundant_assignment.rb +8 -10
  410. data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
  411. data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
  412. data/lib/rubocop/cop/style/redundant_condition.rb +20 -9
  413. data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
  414. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
  415. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  416. data/lib/rubocop/cop/style/redundant_freeze.rb +3 -6
  417. data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
  418. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -9
  419. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
  420. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +16 -25
  421. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  422. data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
  423. data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
  424. data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
  425. data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
  426. data/lib/rubocop/cop/style/return_nil.rb +5 -5
  427. data/lib/rubocop/cop/style/safe_navigation.rb +17 -16
  428. data/lib/rubocop/cop/style/sample.rb +10 -13
  429. data/lib/rubocop/cop/style/self_assignment.rb +26 -22
  430. data/lib/rubocop/cop/style/semicolon.rb +6 -9
  431. data/lib/rubocop/cop/style/send.rb +2 -2
  432. data/lib/rubocop/cop/style/signal_exception.rb +23 -19
  433. data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
  434. data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
  435. data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
  436. data/lib/rubocop/cop/style/slicing_with_range.rb +4 -7
  437. data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
  438. data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
  439. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -20
  440. data/lib/rubocop/cop/style/stderr_puts.rb +4 -6
  441. data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
  442. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
  443. data/lib/rubocop/cop/style/string_methods.rb +7 -17
  444. data/lib/rubocop/cop/style/strip.rb +8 -14
  445. data/lib/rubocop/cop/style/struct_inheritance.rb +4 -7
  446. data/lib/rubocop/cop/style/symbol_array.rb +6 -17
  447. data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
  448. data/lib/rubocop/cop/style/symbol_proc.rb +15 -19
  449. data/lib/rubocop/cop/style/ternary_parentheses.rb +21 -20
  450. data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
  451. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
  452. data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
  453. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
  454. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
  455. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +7 -6
  456. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
  457. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  458. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
  459. data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
  460. data/lib/rubocop/cop/style/unless_else.rb +5 -8
  461. data/lib/rubocop/cop/style/unpack_first.rb +4 -8
  462. data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
  463. data/lib/rubocop/cop/style/when_then.rb +4 -6
  464. data/lib/rubocop/cop/style/while_until_do.rb +6 -16
  465. data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
  466. data/lib/rubocop/cop/style/word_array.rb +5 -23
  467. data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
  468. data/lib/rubocop/cop/style/zero_length_predicate.rb +19 -17
  469. data/lib/rubocop/cop/team.rb +2 -1
  470. data/lib/rubocop/cop/tokens_util.rb +84 -0
  471. data/lib/rubocop/cop/util.rb +3 -13
  472. data/lib/rubocop/cop/utils/format_string.rb +3 -5
  473. data/lib/rubocop/cop/variable_force.rb +2 -2
  474. data/lib/rubocop/cop/variable_force/branch.rb +1 -0
  475. data/lib/rubocop/cop/variable_force/variable.rb +7 -5
  476. data/lib/rubocop/cops_documentation_generator.rb +284 -0
  477. data/lib/rubocop/core_ext/string.rb +1 -1
  478. data/lib/rubocop/error.rb +1 -0
  479. data/lib/rubocop/ext/regexp_node.rb +46 -0
  480. data/lib/rubocop/file_finder.rb +13 -12
  481. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
  482. data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -2
  483. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  484. data/lib/rubocop/formatter/html_formatter.rb +2 -0
  485. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  486. data/lib/rubocop/formatter/progress_formatter.rb +2 -1
  487. data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
  488. data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
  489. data/lib/rubocop/name_similarity.rb +1 -0
  490. data/lib/rubocop/options.rb +9 -6
  491. data/lib/rubocop/path_util.rb +17 -17
  492. data/lib/rubocop/rake_task.rb +1 -0
  493. data/lib/rubocop/remote_config.rb +1 -0
  494. data/lib/rubocop/result_cache.rb +13 -8
  495. data/lib/rubocop/rspec/cop_helper.rb +4 -1
  496. data/lib/rubocop/rspec/expect_offense.rb +49 -7
  497. data/lib/rubocop/rspec/shared_contexts.rb +25 -14
  498. data/lib/rubocop/runner.rb +7 -7
  499. data/lib/rubocop/string_interpreter.rb +3 -0
  500. data/lib/rubocop/target_finder.rb +14 -10
  501. data/lib/rubocop/target_ruby.rb +6 -0
  502. data/lib/rubocop/version.rb +3 -2
  503. data/lib/rubocop/yaml_duplication_checker.rb +1 -0
  504. metadata +42 -8
  505. data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
  506. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
  507. data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
  508. data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -20,7 +20,7 @@ module RuboCop
20
20
  # # good
21
21
  #
22
22
  # 0 # just use 0 instead
23
- class RandOne < Cop
23
+ class RandOne < Base
24
24
  MSG = '`%<method>s` always returns `0`. ' \
25
25
  'Perhaps you meant `rand(2)` or `rand`?'
26
26
 
@@ -29,7 +29,7 @@ module RuboCop
29
29
  PATTERN
30
30
 
31
31
  def on_send(node)
32
- return unless rand_one?(node)
32
+ return unless node.method?(:rand) && rand_one?(node)
33
33
 
34
34
  add_offense(node)
35
35
  end
@@ -41,13 +41,12 @@ module RuboCop
41
41
  def on_new_investigation
42
42
  return unless offenses_to_check
43
43
 
44
- comments = processed_source.comments
45
44
  cop_disabled_line_ranges = processed_source.disabled_line_ranges
46
45
 
47
46
  redundant_cops = Hash.new { |h, k| h[k] = Set.new }
48
47
 
49
48
  each_redundant_disable(cop_disabled_line_ranges,
50
- offenses_to_check, comments) do |comment, redundant_cop|
49
+ offenses_to_check) do |comment, redundant_cop|
51
50
  redundant_cops[comment].add(redundant_cop)
52
51
  end
53
52
 
@@ -88,25 +87,25 @@ module RuboCop
88
87
  newlines: false)
89
88
  end
90
89
 
91
- def each_redundant_disable(cop_disabled_line_ranges, offenses, comments,
90
+ def each_redundant_disable(cop_disabled_line_ranges, offenses,
92
91
  &block)
93
92
  disabled_ranges = cop_disabled_line_ranges[COP_NAME] || [0..0]
94
93
 
95
94
  cop_disabled_line_ranges.each do |cop, line_ranges|
96
95
  each_already_disabled(line_ranges,
97
- disabled_ranges, comments) do |comment|
96
+ disabled_ranges) do |comment|
98
97
  yield comment, cop
99
98
  end
100
99
 
101
- each_line_range(line_ranges, disabled_ranges, offenses, comments,
100
+ each_line_range(line_ranges, disabled_ranges, offenses,
102
101
  cop, &block)
103
102
  end
104
103
  end
105
104
 
106
- def each_line_range(line_ranges, disabled_ranges, offenses, comments,
105
+ def each_line_range(line_ranges, disabled_ranges, offenses,
107
106
  cop)
108
107
  line_ranges.each_with_index do |line_range, ix|
109
- comment = comments.find { |c| c.loc.line == line_range.begin }
108
+ comment = processed_source.comment_at_line(line_range.begin)
110
109
  next if ignore_offense?(disabled_ranges, line_range)
111
110
 
112
111
  redundant_cop = find_redundant(comment, offenses, cop, line_range,
@@ -115,7 +114,7 @@ module RuboCop
115
114
  end
116
115
  end
117
116
 
118
- def each_already_disabled(line_ranges, disabled_ranges, comments)
117
+ def each_already_disabled(line_ranges, disabled_ranges)
119
118
  line_ranges.each_cons(2) do |previous_range, range|
120
119
  next if ignore_offense?(disabled_ranges, range)
121
120
  next if previous_range.end != range.begin
@@ -124,18 +123,16 @@ module RuboCop
124
123
  # the end of the previous range, it means that the cop was
125
124
  # already disabled by an earlier comment. So it's redundant
126
125
  # whether there are offenses or not.
127
- redundant_comment = comments.find do |c|
128
- c.loc.line == range.begin &&
129
- # Comments disabling all cops don't count since it's reasonable
130
- # to disable a few select cops first and then all cops further
131
- # down in the code.
132
- !all_disabled?(c)
133
- end
134
- yield redundant_comment if redundant_comment
126
+ comment = processed_source.comment_at_line(range.begin)
127
+
128
+ # Comments disabling all cops don't count since it's reasonable
129
+ # to disable a few select cops first and then all cops further
130
+ # down in the code.
131
+ yield comment if comment && !all_disabled?(comment)
135
132
  end
136
133
  end
137
134
 
138
- # rubocop:todo Metrics/CyclomaticComplexity
135
+ # rubocop:todo Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
139
136
  def find_redundant(comment, offenses, cop, line_range, next_line_range)
140
137
  if all_disabled?(comment)
141
138
  # If there's a disable all comment followed by a comment
@@ -153,7 +150,7 @@ module RuboCop
153
150
  cop if cop_offenses.none? { |o| line_range.cover?(o.line) }
154
151
  end
155
152
  end
156
- # rubocop:enable Metrics/CyclomaticComplexity
153
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
157
154
 
158
155
  def all_disabled?(comment)
159
156
  /rubocop\s*:\s*(?:disable|todo)\s+all\b/.match?(comment.text)
@@ -250,7 +247,7 @@ module RuboCop
250
247
  end
251
248
 
252
249
  def all_cop_names
253
- @all_cop_names ||= Cop.registry.names
250
+ @all_cop_names ||= Registry.global.names
254
251
  end
255
252
 
256
253
  def ends_its_line?(range)
@@ -34,28 +34,24 @@ module RuboCop
34
34
  # foo = "1"
35
35
  # # rubocop:enable all
36
36
  # baz
37
- class RedundantCopEnableDirective < Cop
37
+ class RedundantCopEnableDirective < Base
38
38
  include RangeHelp
39
39
  include SurroundingSpace
40
+ extend AutoCorrector
40
41
 
41
42
  MSG = 'Unnecessary enabling of %<cop>s.'
42
43
 
43
- def investigate(processed_source)
44
+ def on_new_investigation
44
45
  return if processed_source.blank?
45
46
 
46
47
  offenses = processed_source.comment_config.extra_enabled_comments
47
48
  offenses.each do |comment, name|
48
49
  add_offense(
49
- [comment, name],
50
- location: range_of_offense(comment, name),
50
+ range_of_offense(comment, name),
51
51
  message: format(MSG, cop: all_or_name(name))
52
- )
53
- end
54
- end
55
-
56
- def autocorrect(comment_and_name)
57
- lambda do |corrector|
58
- corrector.remove(range_with_comma(*comment_and_name))
52
+ ) do |corrector|
53
+ corrector.remove(range_with_comma(comment, name))
54
+ end
59
55
  end
60
56
  end
61
57
 
@@ -21,8 +21,9 @@ module RuboCop
21
21
  #
22
22
  # # good
23
23
  # require 'unloaded_feature'
24
- class RedundantRequireStatement < Cop
24
+ class RedundantRequireStatement < Base
25
25
  include RangeHelp
26
+ extend AutoCorrector
26
27
 
27
28
  MSG = 'Remove unnecessary `require` statement.'
28
29
 
@@ -34,13 +35,9 @@ module RuboCop
34
35
  def on_send(node)
35
36
  return unless unnecessary_require_statement?(node)
36
37
 
37
- add_offense(node)
38
- end
38
+ add_offense(node) do |corrector|
39
+ range = range_with_surrounding_space(range: node.loc.expression, side: :right)
39
40
 
40
- def autocorrect(node)
41
- lambda do |corrector|
42
- range = range_with_surrounding_space(range: node.loc.expression,
43
- side: :right)
44
41
  corrector.remove(range)
45
42
  end
46
43
  end
@@ -49,7 +49,9 @@ module RuboCop
49
49
  # else
50
50
  # baz
51
51
  # end
52
- class RedundantSplatExpansion < Cop
52
+ class RedundantSplatExpansion < Base
53
+ extend AutoCorrector
54
+
53
55
  MSG = 'Replace splat expansion with comma separated values.'
54
56
  ARRAY_PARAM_MSG = 'Pass array contents as separate arguments.'
55
57
  PERCENT_W = '%w'
@@ -73,23 +75,25 @@ module RuboCop
73
75
  redundant_splat_expansion(node) do
74
76
  if array_splat?(node) &&
75
77
  (method_argument?(node) || part_of_an_array?(node))
76
- add_offense(node, message: ARRAY_PARAM_MSG)
78
+ add_offense(node, message: ARRAY_PARAM_MSG) do |corrector|
79
+ autocorrect(corrector, node)
80
+ end
77
81
  else
78
- add_offense(node)
82
+ add_offense(node) do |corrector|
83
+ autocorrect(corrector, node)
84
+ end
79
85
  end
80
86
  end
81
87
  end
82
88
 
83
- def autocorrect(node)
89
+ private
90
+
91
+ def autocorrect(corrector, node)
84
92
  range, content = replacement_range_and_content(node)
85
93
 
86
- lambda do |corrector|
87
- corrector.replace(range, content)
88
- end
94
+ corrector.replace(range, content)
89
95
  end
90
96
 
91
- private
92
-
93
97
  def redundant_splat_expansion(node)
94
98
  literal_expansion(node) do |expanded_item|
95
99
  if expanded_item.send_type?
@@ -17,8 +17,9 @@ module RuboCop
17
17
  # # good
18
18
  #
19
19
  # "result is #{something}"
20
- class RedundantStringCoercion < Cop
20
+ class RedundantStringCoercion < Base
21
21
  include Interpolation
22
+ extend AutoCorrector
22
23
 
23
24
  MSG_DEFAULT = 'Redundant use of `Object#to_s` in interpolation.'
24
25
  MSG_SELF = 'Use `self` instead of `Object#to_s` in ' \
@@ -31,14 +32,12 @@ module RuboCop
31
32
 
32
33
  return unless to_s_without_args?(final_node)
33
34
 
34
- add_offense(final_node, location: :selector)
35
- end
35
+ message = final_node.receiver ? MSG_DEFAULT : MSG_SELF
36
36
 
37
- def autocorrect(node)
38
- lambda do |corrector|
39
- receiver = node.receiver
37
+ add_offense(final_node.loc.selector, message: message) do |corrector|
38
+ receiver = final_node.receiver
40
39
  corrector.replace(
41
- node,
40
+ final_node,
42
41
  if receiver
43
42
  receiver.source
44
43
  else
@@ -47,12 +46,6 @@ module RuboCop
47
46
  )
48
47
  end
49
48
  end
50
-
51
- private
52
-
53
- def message(node)
54
- node.receiver ? MSG_DEFAULT : MSG_SELF
55
- end
56
49
  end
57
50
  end
58
51
  end
@@ -26,8 +26,9 @@ module RuboCop
26
26
  # v
27
27
  # end
28
28
  #
29
- class RedundantWithIndex < Cop
29
+ class RedundantWithIndex < Base
30
30
  include RangeHelp
31
+ extend AutoCorrector
31
32
 
32
33
  MSG_EACH_WITH_INDEX = 'Use `each` instead of `each_with_index`.'
33
34
  MSG_WITH_INDEX = 'Remove redundant `with_index`.'
@@ -42,20 +43,16 @@ module RuboCop
42
43
  PATTERN
43
44
 
44
45
  def on_block(node)
45
- redundant_with_index?(node) do |send|
46
- add_offense(node, location: with_index_range(send))
47
- end
48
- end
46
+ return unless (send = redundant_with_index?(node))
47
+
48
+ range = with_index_range(send)
49
49
 
50
- def autocorrect(node)
51
- lambda do |corrector|
52
- redundant_with_index?(node) do |send|
53
- if send.method?(:each_with_index)
54
- corrector.replace(send.loc.selector, 'each')
55
- else
56
- corrector.remove(with_index_range(send))
57
- corrector.remove(send.loc.dot)
58
- end
50
+ add_offense(range, message: message(send)) do |corrector|
51
+ if send.method?(:each_with_index)
52
+ corrector.replace(send.loc.selector, 'each')
53
+ else
54
+ corrector.remove(range)
55
+ corrector.remove(send.loc.dot)
59
56
  end
60
57
  end
61
58
  end
@@ -26,8 +26,9 @@ module RuboCop
26
26
  # v
27
27
  # end
28
28
  #
29
- class RedundantWithObject < Cop
29
+ class RedundantWithObject < Base
30
30
  include RangeHelp
31
+ extend AutoCorrector
31
32
 
32
33
  MSG_EACH_WITH_OBJECT = 'Use `each` instead of `each_with_object`.'
33
34
 
@@ -43,20 +44,16 @@ module RuboCop
43
44
  PATTERN
44
45
 
45
46
  def on_block(node)
46
- redundant_with_object?(node) do |send|
47
- add_offense(node, location: with_object_range(send))
48
- end
49
- end
47
+ return unless (send = redundant_with_object?(node))
48
+
49
+ range = with_object_range(send)
50
50
 
51
- def autocorrect(node)
52
- lambda do |corrector|
53
- redundant_with_object?(node) do |send|
54
- if send.method?(:each_with_object)
55
- corrector.replace(with_object_range(send), 'each')
56
- else
57
- corrector.remove(with_object_range(send))
58
- corrector.remove(send.loc.dot)
59
- end
51
+ add_offense(range, message: message(send)) do |corrector|
52
+ if send.method?(:each_with_object)
53
+ corrector.replace(range, 'each')
54
+ else
55
+ corrector.remove(range)
56
+ corrector.remove(send.loc.dot)
60
57
  end
61
58
  end
62
59
  end
@@ -16,16 +16,14 @@ module RuboCop
16
16
  # if /foo/ =~ $_
17
17
  # do_something
18
18
  # end
19
- class RegexpAsCondition < Cop
19
+ class RegexpAsCondition < Base
20
+ extend AutoCorrector
21
+
20
22
  MSG = 'Do not use regexp literal as a condition.' \
21
23
  ' The regexp literal matches `$_` implicitly.'
22
24
 
23
25
  def on_match_current_line(node)
24
- add_offense(node)
25
- end
26
-
27
- def autocorrect(node)
28
- lambda do |corrector|
26
+ add_offense(node) do |corrector|
29
27
  corrector.replace(node, "#{node.source} =~ $_")
30
28
  end
31
29
  end
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # if day.is?(:tuesday) && month == :jan
28
28
  # # ...
29
29
  # end
30
- class RequireParentheses < Cop
30
+ class RequireParentheses < Base
31
31
  include RangeHelp
32
32
 
33
33
  MSG = 'Use parentheses in the method call to avoid confusion about ' \
@@ -52,7 +52,7 @@ module RuboCop
52
52
  range = range_between(node.source_range.begin_pos,
53
53
  ternary.condition.source_range.end_pos)
54
54
 
55
- add_offense(range, location: range)
55
+ add_offense(range)
56
56
  end
57
57
 
58
58
  def check_predicate(predicate, node)
@@ -24,7 +24,7 @@ module RuboCop
24
24
  # rescue ArgumentError
25
25
  # handle_exception
26
26
  # end
27
- class RescueException < Cop
27
+ class RescueException < Base
28
28
  MSG = 'Avoid rescuing the `Exception` class. ' \
29
29
  'Perhaps you meant to rescue `StandardError`?'
30
30
 
@@ -34,8 +34,9 @@ module RuboCop
34
34
  # rescue NameError
35
35
  # baz
36
36
  # end
37
- class RescueType < Cop
37
+ class RescueType < Base
38
38
  include RescueNode
39
+ extend AutoCorrector
39
40
 
40
41
  MSG = 'Rescuing from `%<invalid_exceptions>s` will raise a ' \
41
42
  '`TypeError` instead of catching the actual exception.'
@@ -50,24 +51,23 @@ module RuboCop
50
51
  return if invalid_exceptions.empty?
51
52
 
52
53
  add_offense(
53
- node,
54
- location: node.loc.keyword.join(rescued.loc.expression),
54
+ node.loc.keyword.join(rescued.loc.expression),
55
55
  message: format(
56
56
  MSG, invalid_exceptions: invalid_exceptions.map(&:source)
57
57
  .join(', ')
58
58
  )
59
- )
59
+ ) do |corrector|
60
+ autocorrect(corrector, node)
61
+ end
60
62
  end
61
63
 
62
- def autocorrect(node)
64
+ def autocorrect(corrector, node)
63
65
  rescued, _, _body = *node
64
66
  range = Parser::Source::Range.new(node.loc.expression.source_buffer,
65
67
  node.loc.keyword.end_pos,
66
68
  rescued.loc.expression.end_pos)
67
69
 
68
- lambda do |corrector|
69
- corrector.replace(range, correction(*rescued))
70
- end
70
+ corrector.replace(range, correction(*rescued))
71
71
  end
72
72
 
73
73
  private
@@ -31,7 +31,7 @@ module RuboCop
31
31
  # def foo=(bar)
32
32
  # return
33
33
  # end
34
- class ReturnInVoidContext < Cop
34
+ class ReturnInVoidContext < Base
35
35
  MSG = 'Do not return a value in `%<method>s`.'
36
36
 
37
37
  def on_return(return_node)
@@ -45,9 +45,7 @@ module RuboCop
45
45
 
46
46
  return unless method_name && void_context_method?(method_name)
47
47
 
48
- add_offense(return_node,
49
- location: :keyword,
50
- message: format(message, method: method_name))
48
+ add_offense(return_node.loc.keyword, message: format(message, method: method_name))
51
49
  end
52
50
 
53
51
  private