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
@@ -25,9 +25,10 @@ module RuboCop
25
25
  # # good
26
26
  # %Q/Mix the foo into the baz./
27
27
  # %Q{They all said: 'Hooray!'}
28
- class PercentQLiterals < Cop
28
+ class PercentQLiterals < Base
29
29
  include PercentLiteral
30
30
  include ConfigurableEnforcedStyle
31
+ extend AutoCorrector
31
32
 
32
33
  LOWER_CASE_Q_MSG = 'Do not use `%Q` unless interpolation is ' \
33
34
  'needed. Use `%q`.'
@@ -37,12 +38,6 @@ module RuboCop
37
38
  process(node, '%Q', '%q')
38
39
  end
39
40
 
40
- def autocorrect(node)
41
- lambda do |corrector|
42
- corrector.replace(node, corrected(node.source))
43
- end
44
- end
45
-
46
41
  private
47
42
 
48
43
  def on_percent_literal(node)
@@ -50,9 +45,12 @@ module RuboCop
50
45
 
51
46
  # Report offense only if changing case doesn't change semantics,
52
47
  # i.e., if the string would become dynamic or has special characters.
53
- return if node.children != parse(corrected(node.source)).ast.children
48
+ ast = ProcessedSource.new(corrected(node.source), target_ruby_version).ast
49
+ return if node.children != ast.children
54
50
 
55
- add_offense(node, location: :begin)
51
+ add_offense(node.loc.begin) do |corrector|
52
+ corrector.replace(node, corrected(node.source))
53
+ end
56
54
  end
57
55
 
58
56
  def correct_literal_style?(node)
@@ -60,7 +58,7 @@ module RuboCop
60
58
  style == :upper_case_q && type(node) == '%Q'
61
59
  end
62
60
 
63
- def message(_node)
61
+ def message(_range)
64
62
  style == :lower_case_q ? LOWER_CASE_Q_MSG : UPPER_CASE_Q_MSG
65
63
  end
66
64
 
@@ -12,23 +12,21 @@ module RuboCop
12
12
  #
13
13
  # # good
14
14
  # puts Regexp.last_match(1)
15
- class PerlBackrefs < Cop
15
+ class PerlBackrefs < Base
16
+ extend AutoCorrector
17
+
16
18
  MSG = 'Avoid the use of Perl-style backrefs.'
17
19
 
18
20
  def on_nth_ref(node)
19
- add_offense(node)
20
- end
21
-
22
- def autocorrect(node)
23
- lambda do |corrector|
21
+ add_offense(node) do |corrector|
24
22
  backref, = *node
25
23
  parent_type = node.parent ? node.parent.type : nil
24
+
26
25
  if %i[dstr xstr regexp].include?(parent_type)
27
- corrector.replace(node,
28
- "{Regexp.last_match(#{backref})}")
26
+ corrector.replace(node, "{Regexp.last_match(#{backref})}")
27
+
29
28
  else
30
- corrector.replace(node,
31
- "Regexp.last_match(#{backref})")
29
+ corrector.replace(node, "Regexp.last_match(#{backref})")
32
30
  end
33
31
  end
34
32
  end
@@ -25,8 +25,9 @@ module RuboCop
25
25
  # # good
26
26
  # Hash#has_key?
27
27
  # Hash#has_value?
28
- class PreferredHashMethods < Cop
28
+ class PreferredHashMethods < Base
29
29
  include ConfigurableEnforcedStyle
30
+ extend AutoCorrector
30
31
 
31
32
  MSG = 'Use `Hash#%<prefer>s` instead of `Hash#%<current>s`.'
32
33
 
@@ -35,27 +36,23 @@ module RuboCop
35
36
  verbose: %i[key? value?]
36
37
  }.freeze
37
38
 
39
+ RESTRICT_ON_SEND = OFFENDING_SELECTORS.values.flatten.freeze
40
+
38
41
  def on_send(node)
39
- return unless node.arguments.one? &&
40
- offending_selector?(node.method_name)
42
+ return unless node.arguments.one? && offending_selector?(node.method_name)
41
43
 
42
- add_offense(node, location: :selector)
43
- end
44
- alias on_csend on_send
44
+ message = message(node.method_name)
45
45
 
46
- def autocorrect(node)
47
- lambda do |corrector|
48
- corrector.replace(node.loc.selector,
49
- proper_method_name(node.loc.selector.source))
46
+ add_offense(node.loc.selector, message: message) do |corrector|
47
+ corrector.replace(node.loc.selector, proper_method_name(node.loc.selector.source))
50
48
  end
51
49
  end
50
+ alias on_csend on_send
52
51
 
53
52
  private
54
53
 
55
- def message(node)
56
- format(MSG,
57
- prefer: proper_method_name(node.method_name),
58
- current: node.method_name)
54
+ def message(method_name)
55
+ format(MSG, prefer: proper_method_name(method_name), current: method_name)
59
56
  end
60
57
 
61
58
  def proper_method_name(method_name)
@@ -13,7 +13,9 @@ module RuboCop
13
13
  # # good
14
14
  # p = proc { |n| puts n }
15
15
  #
16
- class Proc < Cop
16
+ class Proc < Base
17
+ extend AutoCorrector
18
+
17
19
  MSG = 'Use `proc` instead of `Proc.new`.'
18
20
 
19
21
  def_node_matcher :proc_new?,
@@ -21,13 +23,11 @@ module RuboCop
21
23
 
22
24
  def on_block(node)
23
25
  proc_new?(node) do |block_method|
24
- add_offense(block_method)
26
+ add_offense(block_method) do |corrector|
27
+ corrector.replace(block_method, 'proc')
28
+ end
25
29
  end
26
30
  end
27
-
28
- def autocorrect(node)
29
- ->(corrector) { corrector.replace(node, 'proc') }
30
- end
31
31
  end
32
32
  end
33
33
  end
@@ -32,14 +32,17 @@ module RuboCop
32
32
  # raise StandardError.new("message")
33
33
  # raise MyCustomError.new(arg1, arg2, arg3)
34
34
  # fail "message"
35
- class RaiseArgs < Cop
35
+ class RaiseArgs < Base
36
36
  include ConfigurableEnforcedStyle
37
+ extend AutoCorrector
37
38
 
38
39
  EXPLODED_MSG = 'Provide an exception class and message ' \
39
40
  'as arguments to `%<method>s`.'
40
41
  COMPACT_MSG = 'Provide an exception object ' \
41
42
  'as an argument to `%<method>s`.'
42
43
 
44
+ RESTRICT_ON_SEND = %i[raise fail].freeze
45
+
43
46
  def on_send(node)
44
47
  return unless node.command?(:raise) || node.command?(:fail)
45
48
 
@@ -51,16 +54,6 @@ module RuboCop
51
54
  end
52
55
  end
53
56
 
54
- def autocorrect(node)
55
- replacement = if style == :compact
56
- correction_exploded_to_compact(node)
57
- else
58
- correction_compact_to_exploded(node)
59
- end
60
-
61
- ->(corrector) { corrector.replace(node, replacement) }
62
- end
63
-
64
57
  private
65
58
 
66
59
  def correction_compact_to_exploded(node)
@@ -91,8 +84,12 @@ module RuboCop
91
84
 
92
85
  def check_compact(node)
93
86
  if node.arguments.size > 1
94
- add_offense(node) do
95
- opposite_style_detected
87
+ return unless opposite_style_detected
88
+
89
+ add_offense(node, message: format(COMPACT_MSG, method: node.method_name)) do |corrector|
90
+ replacement = correction_exploded_to_compact(node)
91
+
92
+ corrector.replace(node, replacement)
96
93
  end
97
94
  else
98
95
  correct_style_detected
@@ -105,11 +102,13 @@ module RuboCop
105
102
  first_arg = node.first_argument
106
103
 
107
104
  return unless first_arg.send_type? && first_arg.method?(:new)
108
-
109
105
  return if acceptable_exploded_args?(first_arg.arguments)
106
+ return unless opposite_style_detected
107
+
108
+ add_offense(node, message: format(EXPLODED_MSG, method: node.method_name)) do |corrector|
109
+ replacement = correction_compact_to_exploded(node)
110
110
 
111
- add_offense(node) do
112
- opposite_style_detected
111
+ corrector.replace(node, replacement)
113
112
  end
114
113
  end
115
114
 
@@ -131,14 +130,6 @@ module RuboCop
131
130
  parent.and_type? || parent.or_type? ||
132
131
  parent.if_type? && parent.ternary?
133
132
  end
134
-
135
- def message(node)
136
- if style == :compact
137
- format(COMPACT_MSG, method: node.method_name)
138
- else
139
- format(EXPLODED_MSG, method: node.method_name)
140
- end
141
- end
142
133
  end
143
134
  end
144
135
  end
@@ -23,9 +23,12 @@ module RuboCop
23
23
  # # good
24
24
  # rand(1..6)
25
25
  # rand(1...7)
26
- class RandomWithOffset < Cop
26
+ class RandomWithOffset < Base
27
+ extend AutoCorrector
28
+
27
29
  MSG = 'Prefer ranges when generating random numbers instead of ' \
28
30
  'integers with offsets.'
31
+ RESTRICT_ON_SEND = %i[+ - succ pred next].freeze
29
32
 
30
33
  def_node_matcher :integer_op_rand?, <<~PATTERN
31
34
  (send
@@ -33,7 +36,7 @@ module RuboCop
33
36
  (send
34
37
  {nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
35
38
  :rand
36
- {int irange erange}))
39
+ {int (irange int int) (erange int int)}))
37
40
  PATTERN
38
41
 
39
42
  def_node_matcher :rand_op_integer?, <<~PATTERN
@@ -41,7 +44,7 @@ module RuboCop
41
44
  (send
42
45
  {nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
43
46
  :rand
44
- {int irange erange})
47
+ {int (irange int int) (erange int int)})
45
48
  {:+ :-}
46
49
  int)
47
50
  PATTERN
@@ -51,7 +54,7 @@ module RuboCop
51
54
  (send
52
55
  {nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
53
56
  :rand
54
- {int irange erange})
57
+ {int (irange int int) (erange int int)})
55
58
  {:succ :pred :next})
56
59
  PATTERN
57
60
 
@@ -61,21 +64,8 @@ module RuboCop
61
64
  rand_op_integer?(node) ||
62
65
  rand_modified?(node)
63
66
 
64
- add_offense(node)
65
- end
66
-
67
- def autocorrect(node)
68
- lambda do |corrector|
69
- if integer_op_rand?(node)
70
- corrector.replace(node,
71
- corrected_integer_op_rand(node))
72
- elsif rand_op_integer?(node)
73
- corrector.replace(node,
74
- corrected_rand_op_integer(node))
75
- elsif rand_modified?(node)
76
- corrector.replace(node,
77
- corrected_rand_modified(node))
78
- end
67
+ add_offense(node) do |corrector|
68
+ autocorrect(corrector, node)
79
69
  end
80
70
  end
81
71
 
@@ -86,6 +76,16 @@ module RuboCop
86
76
  (send _ _ (send $_ _ $_))}
87
77
  PATTERN
88
78
 
79
+ def autocorrect(corrector, node)
80
+ if integer_op_rand?(node)
81
+ corrector.replace(node, corrected_integer_op_rand(node))
82
+ elsif rand_op_integer?(node)
83
+ corrector.replace(node, corrected_rand_op_integer(node))
84
+ elsif rand_modified?(node)
85
+ corrector.replace(node, corrected_rand_modified(node))
86
+ end
87
+ end
88
+
89
89
  def corrected_integer_op_rand(node)
90
90
  random_call(node) do |prefix_node, random_node|
91
91
  prefix = prefix_from_prefix_node(prefix_node)
@@ -37,7 +37,9 @@ module RuboCop
37
37
  # end
38
38
  # end
39
39
  #
40
- class RedundantAssignment < Cop
40
+ class RedundantAssignment < Base
41
+ extend AutoCorrector
42
+
41
43
  MSG = 'Redundant assignment before returning detected.'
42
44
 
43
45
  def_node_matcher :redundant_assignment?, <<~PATTERN
@@ -49,14 +51,6 @@ module RuboCop
49
51
  end
50
52
  alias on_defs on_def
51
53
 
52
- def autocorrect(node)
53
- lambda do |corrector|
54
- expression = node.children[1]
55
- corrector.replace(node, expression.source)
56
- corrector.remove(right_sibling_of(node))
57
- end
58
- end
59
-
60
54
  private
61
55
 
62
56
  def check_branch(node)
@@ -97,20 +91,16 @@ module RuboCop
97
91
 
98
92
  def check_begin_node(node)
99
93
  if (assignment = redundant_assignment?(node))
100
- add_offense(assignment)
94
+ add_offense(assignment) do |corrector|
95
+ expression = assignment.children[1]
96
+ corrector.replace(assignment, expression.source)
97
+ corrector.remove(assignment.right_sibling)
98
+ end
101
99
  else
102
100
  last_expr = node.children.last
103
101
  check_branch(last_expr)
104
102
  end
105
103
  end
106
-
107
- def right_sibling_of(node)
108
- siblings_of(node)[node.sibling_index + 1]
109
- end
110
-
111
- def siblings_of(node)
112
- node.parent.children
113
- end
114
104
  end
115
105
  end
116
106
  end
@@ -54,7 +54,9 @@ module RuboCop
54
54
  # baz
55
55
  # end
56
56
  # end
57
- class RedundantBegin < Cop
57
+ class RedundantBegin < Base
58
+ extend AutoCorrector
59
+
58
60
  MSG = 'Redundant `begin` block detected.'
59
61
 
60
62
  def on_def(node)
@@ -71,19 +73,15 @@ module RuboCop
71
73
  check(node)
72
74
  end
73
75
 
74
- def autocorrect(node)
75
- lambda do |corrector|
76
- corrector.remove(node.loc.begin)
77
- corrector.remove(node.loc.end)
78
- end
79
- end
80
-
81
76
  private
82
77
 
83
78
  def check(node)
84
79
  return unless node.body&.kwbegin_type?
85
80
 
86
- add_offense(node.body, location: :begin)
81
+ add_offense(node.body.loc.begin) do |corrector|
82
+ corrector.remove(node.body.loc.begin)
83
+ corrector.remove(node.body.loc.end)
84
+ end
87
85
  end
88
86
  end
89
87
  end
@@ -14,8 +14,9 @@ module RuboCop
14
14
  # %w/swim run bike/
15
15
  # %w[shirt pants shoes]
16
16
  # %W(apple #{fruit} grape)
17
- class RedundantCapitalW < Cop
17
+ class RedundantCapitalW < Base
18
18
  include PercentLiteral
19
+ extend AutoCorrector
19
20
 
20
21
  MSG = 'Do not use `%W` unless interpolation is needed. ' \
21
22
  'If not, use `%w`.'
@@ -24,19 +25,15 @@ module RuboCop
24
25
  process(node, '%W')
25
26
  end
26
27
 
27
- def autocorrect(node)
28
- lambda do |corrector|
29
- src = node.loc.begin.source
30
- corrector.replace(node.loc.begin, src.tr('W', 'w'))
31
- end
32
- end
33
-
34
28
  private
35
29
 
36
30
  def on_percent_literal(node)
37
31
  return if requires_interpolation?(node)
38
32
 
39
- add_offense(node)
33
+ add_offense(node) do |corrector|
34
+ src = node.loc.begin.source
35
+ corrector.replace(node.loc.begin, src.tr('W', 'w'))
36
+ end
40
37
  end
41
38
 
42
39
  def requires_interpolation?(node)
@@ -30,8 +30,9 @@ module RuboCop
30
30
  # c
31
31
  # end
32
32
  #
33
- class RedundantCondition < Cop
33
+ class RedundantCondition < Base
34
34
  include RangeHelp
35
+ extend AutoCorrector
35
36
 
36
37
  MSG = 'Use double pipes `||` instead.'
37
38
  REDUNDANT_CONDITION = 'This condition is not needed.'
@@ -40,11 +41,9 @@ module RuboCop
40
41
  return if node.elsif_conditional?
41
42
  return unless offense?(node)
42
43
 
43
- add_offense(node, location: range_of_offense(node))
44
- end
44
+ message = message(node)
45
45
 
46
- def autocorrect(node)
47
- lambda do |corrector|
46
+ add_offense(range_of_offense(node), message: message) do |corrector|
48
47
  if node.ternary?
49
48
  correct_ternary(corrector, node)
50
49
  elsif node.modifier_form? || !node.else_branch
@@ -68,7 +67,7 @@ module RuboCop
68
67
  end
69
68
 
70
69
  def range_of_offense(node)
71
- return :expression unless node.ternary?
70
+ return node.loc.expression unless node.ternary?
72
71
 
73
72
  range_between(node.loc.question.begin_pos, node.loc.colon.end_pos)
74
73
  end