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
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # This cop enforces that optional keyword parameters are placed at the
7
+ # end of the parameters list.
8
+ #
9
+ # This improves readability, because when looking through the source,
10
+ # it is expected to find required parameters at the beginning of parameters list
11
+ # and optional parameters at the end.
12
+ #
13
+ # @example
14
+ # # bad
15
+ # def some_method(first: false, second:, third: 10)
16
+ # # body omitted
17
+ # end
18
+ #
19
+ # # good
20
+ # def some_method(second:, first: false, third: 10)
21
+ # # body omitted
22
+ # end
23
+ #
24
+ class KeywordParametersOrder < Base
25
+ include RangeHelp
26
+ extend AutoCorrector
27
+
28
+ MSG = 'Place optional keyword parameters at the end of the parameters list.'
29
+
30
+ def on_kwoptarg(node)
31
+ kwarg_nodes = node.right_siblings.select(&:kwarg_type?)
32
+ return if kwarg_nodes.empty?
33
+
34
+ add_offense(node) do |corrector|
35
+ if node.parent.find(&:kwoptarg_type?) == node
36
+ corrector.insert_before(node, "#{kwarg_nodes.map(&:source).join(', ')}, ")
37
+ remove_kwargs(kwarg_nodes, corrector)
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def remove_kwargs(kwarg_nodes, corrector)
45
+ kwarg_nodes.each do |kwarg|
46
+ with_space = range_with_surrounding_space(range: kwarg.source_range)
47
+ corrector.remove(range_with_surrounding_comma(with_space, :left))
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -46,8 +46,9 @@ module RuboCop
46
46
  # f = ->(x) do
47
47
  # x
48
48
  # end
49
- class Lambda < Cop
49
+ class Lambda < Base
50
50
  include ConfigurableEnforcedStyle
51
+ extend AutoCorrector
51
52
 
52
53
  LITERAL_MESSAGE = 'Use the `-> { ... }` lambda literal syntax for ' \
53
54
  '%<modifier>s lambdas.'
@@ -69,21 +70,15 @@ module RuboCop
69
70
 
70
71
  return unless offending_selector?(node, selector)
71
72
 
72
- add_offense(node,
73
- location: node.send_node.source_range,
74
- message: message(node, selector))
75
- end
76
- alias on_numblock on_block
77
-
78
- def autocorrect(node)
79
- if node.send_node.source == 'lambda'
80
- lambda do |corrector|
73
+ add_offense(node.send_node.source_range, message: message(node, selector)) do |corrector|
74
+ if node.send_node.source == 'lambda'
81
75
  autocorrect_method_to_literal(corrector, node)
76
+ else
77
+ LambdaLiteralToMethodCorrector.new(node).call(corrector)
82
78
  end
83
- else
84
- LambdaLiteralToMethodCorrector.new(node)
85
79
  end
86
80
  end
81
+ alias on_numblock on_block
87
82
 
88
83
  private
89
84
 
@@ -18,30 +18,33 @@ module RuboCop
18
18
  #
19
19
  # # good
20
20
  # lambda.(x, y)
21
- class LambdaCall < Cop
21
+ class LambdaCall < Base
22
22
  include ConfigurableEnforcedStyle
23
+ extend AutoCorrector
24
+
25
+ RESTRICT_ON_SEND = %i[call].freeze
23
26
 
24
27
  def on_send(node)
25
- return unless node.receiver && node.method?(:call)
28
+ return unless node.receiver
26
29
 
27
- if offense?(node)
28
- add_offense(node) { opposite_style_detected }
30
+ if offense?(node) && opposite_style_detected
31
+ add_offense(node) do |corrector|
32
+ autocorrect(corrector, node)
33
+ end
29
34
  else
30
35
  correct_style_detected
31
36
  end
32
37
  end
33
38
 
34
- def autocorrect(node)
35
- lambda do |corrector|
36
- if explicit_style?
37
- receiver = node.receiver.source
38
- replacement = node.source.sub("#{receiver}.", "#{receiver}.call")
39
+ def autocorrect(corrector, node)
40
+ if explicit_style?
41
+ receiver = node.receiver.source
42
+ replacement = node.source.sub("#{receiver}.", "#{receiver}.call")
39
43
 
40
- corrector.replace(node, replacement)
41
- else
42
- add_parentheses(node, corrector) unless node.parenthesized?
43
- corrector.remove(node.loc.selector)
44
- end
44
+ corrector.replace(node, replacement)
45
+ else
46
+ add_parentheses(node, corrector) unless node.parenthesized?
47
+ corrector.remove(node.loc.selector)
45
48
  end
46
49
  end
47
50
 
@@ -19,8 +19,9 @@ module RuboCop
19
19
  # some_str = 'ala' \
20
20
  # 'bala'
21
21
  #
22
- class LineEndConcatenation < Cop
22
+ class LineEndConcatenation < Base
23
23
  include RangeHelp
24
+ extend AutoCorrector
24
25
 
25
26
  MSG = 'Use `\\` instead of `+` or `<<` to concatenate ' \
26
27
  'those strings.'
@@ -36,25 +37,12 @@ module RuboCop
36
37
  [Style::RedundantInterpolation]
37
38
  end
38
39
 
39
- def investigate(processed_source)
40
+ def on_new_investigation
40
41
  processed_source.tokens.each_index do |index|
41
42
  check_token_set(index)
42
43
  end
43
44
  end
44
45
 
45
- def autocorrect(operator_range)
46
- # Include any trailing whitespace so we don't create a syntax error.
47
- operator_range = range_with_surrounding_space(range: operator_range,
48
- side: :right,
49
- newlines: false)
50
- one_more_char = operator_range.resize(operator_range.size + 1)
51
- # Don't create a double backslash at the end of the line, in case
52
- # there already was a backslash after the concatenation operator.
53
- operator_range = one_more_char if one_more_char.source.end_with?('\\')
54
-
55
- ->(corrector) { corrector.replace(operator_range, '\\') }
56
- end
57
-
58
46
  private
59
47
 
60
48
  def check_token_set(index)
@@ -68,7 +56,22 @@ module RuboCop
68
56
 
69
57
  return unless eligible_next_successor?(next_successor)
70
58
 
71
- add_offense(operator.pos, location: operator.pos)
59
+ add_offense(operator.pos) do |corrector|
60
+ autocorrect(corrector, operator.pos)
61
+ end
62
+ end
63
+
64
+ def autocorrect(corrector, operator_range)
65
+ # Include any trailing whitespace so we don't create a syntax error.
66
+ operator_range = range_with_surrounding_space(range: operator_range,
67
+ side: :right,
68
+ newlines: false)
69
+ one_more_char = operator_range.resize(operator_range.size + 1)
70
+ # Don't create a double backslash at the end of the line, in case
71
+ # there already was a backslash after the concatenation operator.
72
+ operator_range = one_more_char if one_more_char.source.end_with?('\\')
73
+
74
+ corrector.replace(operator_range, '\\')
72
75
  end
73
76
 
74
77
  def eligible_token_set?(predecessor, operator, successor)
@@ -143,10 +143,11 @@ module RuboCop
143
143
  #
144
144
  # # good
145
145
  # Array 1
146
- class MethodCallWithArgsParentheses < Cop
146
+ class MethodCallWithArgsParentheses < Base
147
147
  include ConfigurableEnforcedStyle
148
148
  include IgnoredMethods
149
149
  include IgnoredPattern
150
+ extend AutoCorrector
150
151
 
151
152
  def initialize(*)
152
153
  super
@@ -15,14 +15,7 @@ module RuboCop
15
15
  return if allowed_camel_case_method_call?(node)
16
16
  return if legitimate_call_with_parentheses?(node)
17
17
 
18
- add_offense(node, location: node.loc.begin.join(node.loc.end))
19
- end
20
- alias on_csend on_send
21
- alias on_super on_send
22
- alias on_yield on_send
23
-
24
- def autocorrect(node)
25
- lambda do |corrector|
18
+ add_offense(offense_range(node)) do |corrector|
26
19
  if parentheses_at_the_end_of_multiline_call?(node)
27
20
  corrector.replace(args_begin(node), ' \\')
28
21
  else
@@ -31,13 +24,20 @@ module RuboCop
31
24
  corrector.remove(node.loc.end)
32
25
  end
33
26
  end
27
+ alias on_csend on_send
28
+ alias on_super on_send
29
+ alias on_yield on_send
30
+
31
+ private
32
+
33
+ def offense_range(node)
34
+ node.loc.begin.join(node.loc.end)
35
+ end
34
36
 
35
- def message(_node = nil)
37
+ def message(_range = nil)
36
38
  'Omit parentheses for method calls with arguments.'
37
39
  end
38
40
 
39
- private
40
-
41
41
  def super_call_without_arguments?(node)
42
42
  node.super_type? && node.arguments.none?
43
43
  end
@@ -12,19 +12,15 @@ module RuboCop
12
12
  return if eligible_for_parentheses_omission?(node)
13
13
  return unless node.arguments? && !node.parenthesized?
14
14
 
15
- add_offense(node)
16
- end
17
- alias on_csend on_send
18
- alias on_super on_send
19
- alias on_yield on_send
20
-
21
- def autocorrect(node)
22
- lambda do |corrector|
15
+ add_offense(node) do |corrector|
23
16
  corrector.replace(args_begin(node), '(')
24
17
 
25
18
  corrector.insert_after(args_end(node), ')') unless args_parenthesized?(node)
26
19
  end
27
20
  end
21
+ alias on_csend on_send
22
+ alias on_super on_send
23
+ alias on_yield on_send
28
24
 
29
25
  def message(_node = nil)
30
26
  'Use parentheses for method calls with arguments.'
@@ -11,8 +11,9 @@ module RuboCop
11
11
  #
12
12
  # # good
13
13
  # object.some_method
14
- class MethodCallWithoutArgsParentheses < Cop
14
+ class MethodCallWithoutArgsParentheses < Base
15
15
  include IgnoredMethods
16
+ extend AutoCorrector
16
17
 
17
18
  MSG = 'Do not use parentheses for method calls with ' \
18
19
  'no arguments.'
@@ -23,11 +24,7 @@ module RuboCop
23
24
  return if ignored_method?(node.method_name)
24
25
  return if same_name_assignment?(node)
25
26
 
26
- add_offense(node, location: node.loc.begin.join(node.loc.end))
27
- end
28
-
29
- def autocorrect(node)
30
- lambda do |corrector|
27
+ add_offense(offense_range(node)) do |corrector|
31
28
  corrector.remove(node.loc.begin)
32
29
  corrector.remove(node.loc.end)
33
30
  end
@@ -69,6 +66,10 @@ module RuboCop
69
66
 
70
67
  var_nodes.any? { |n| n.to_a.first == variable_name }
71
68
  end
69
+
70
+ def offense_range(node)
71
+ node.loc.begin.join(node.loc.end)
72
+ end
72
73
  end
73
74
  end
74
75
  end
@@ -8,11 +8,20 @@ module RuboCop
8
8
  # when reading code.
9
9
  #
10
10
  # @example
11
- #
11
+ # # bad
12
12
  # a do
13
13
  # b
14
14
  # end.c
15
- class MethodCalledOnDoEndBlock < Cop
15
+ #
16
+ # # good
17
+ # a { b }.c
18
+ #
19
+ # # good
20
+ # foo = a do
21
+ # b
22
+ # end
23
+ # foo.c
24
+ class MethodCalledOnDoEndBlock < Base
16
25
  include RangeHelp
17
26
 
18
27
  MSG = 'Avoid chaining a method call on a do...end block.'
@@ -37,7 +46,7 @@ module RuboCop
37
46
  range = range_between(receiver.loc.end.begin_pos,
38
47
  node.source_range.end_pos)
39
48
 
40
- add_offense(nil, location: range)
49
+ add_offense(range)
41
50
  end
42
51
  alias on_csend on_send
43
52
  end
@@ -84,9 +84,10 @@ module RuboCop
84
84
  # last_descriptive_var_name)
85
85
  # do_something
86
86
  # end
87
- class MethodDefParentheses < Cop
87
+ class MethodDefParentheses < Base
88
88
  include ConfigurableEnforcedStyle
89
89
  include RangeHelp
90
+ extend AutoCorrector
90
91
 
91
92
  MSG_PRESENT = 'Use def without parentheses.'
92
93
  MSG_MISSING = 'Use def with parentheses when there are ' \
@@ -109,17 +110,6 @@ module RuboCop
109
110
  end
110
111
  alias on_defs on_def
111
112
 
112
- def autocorrect(node)
113
- lambda do |corrector|
114
- if node.args_type?
115
- # offense is registered on args node when parentheses are unwanted
116
- correct_arguments(node, corrector)
117
- else
118
- correct_definition(node, corrector)
119
- end
120
- end
121
- end
122
-
123
113
  private
124
114
 
125
115
  def correct_arguments(arg_node, corrector)
@@ -150,14 +140,19 @@ module RuboCop
150
140
  def missing_parentheses(node)
151
141
  location = node.arguments.source_range
152
142
 
153
- add_offense(node, location: location, message: MSG_MISSING) do
154
- unexpected_style_detected(:require_no_parentheses)
143
+ return unless unexpected_style_detected(:require_no_parentheses)
144
+
145
+ add_offense(location, message: MSG_MISSING) do |corrector|
146
+ correct_definition(node, corrector)
155
147
  end
156
148
  end
157
149
 
158
150
  def unwanted_parentheses(args)
159
- add_offense(args, message: MSG_PRESENT) do
160
- unexpected_style_detected(:require_parentheses)
151
+ return unless unexpected_style_detected(:require_parentheses)
152
+
153
+ add_offense(args, message: MSG_PRESENT) do |corrector|
154
+ # offense is registered on args node when parentheses are unwanted
155
+ correct_arguments(args, corrector)
161
156
  end
162
157
  end
163
158
  end
@@ -14,27 +14,23 @@ module RuboCop
14
14
  # # good
15
15
  # bar = foo.minmax
16
16
  # return foo.minmax
17
- class MinMax < Cop
17
+ class MinMax < Base
18
+ extend AutoCorrector
19
+
18
20
  MSG = 'Use `%<receiver>s.minmax` instead of `%<offender>s`.'
19
21
 
20
22
  def on_array(node)
21
23
  min_max_candidate(node) do |receiver|
22
24
  offender = offending_range(node)
23
25
 
24
- add_offense(node, location: offender,
25
- message: message(offender, receiver))
26
- end
27
- end
28
- alias on_return on_array
29
-
30
- def autocorrect(node)
31
- receiver = node.children.first.receiver
26
+ add_offense(offender, message: message(offender, receiver)) do |corrector|
27
+ receiver = node.children.first.receiver
32
28
 
33
- lambda do |corrector|
34
- corrector.replace(offending_range(node),
35
- "#{receiver.source}.minmax")
29
+ corrector.replace(offending_range(node), "#{receiver.source}.minmax")
30
+ end
36
31
  end
37
32
  end
33
+ alias on_return on_array
38
34
 
39
35
  private
40
36
 
@@ -93,7 +93,7 @@ module RuboCop
93
93
  # else
94
94
  # # the content of `else` branch will be determined by Style/EmptyElse
95
95
  # end
96
- class MissingElse < Cop
96
+ class MissingElse < Base
97
97
  include OnNormalIfUnless
98
98
  include ConfigurableEnforcedStyle
99
99
 
@@ -119,20 +119,20 @@ module RuboCop
119
119
  private
120
120
 
121
121
  def check(node)
122
- add_offense(node) unless node.else?
122
+ return if node.else?
123
+
124
+ add_offense(node, message: format(message_template, type: node.type))
123
125
  end
124
126
 
125
- def message(node)
126
- template = case empty_else_style
127
- when :empty
128
- MSG_NIL
129
- when :nil
130
- MSG_EMPTY
131
- else
132
- MSG
133
- end
134
-
135
- format(template, type: node.type)
127
+ def message_template
128
+ case empty_else_style
129
+ when :empty
130
+ MSG_NIL
131
+ when :nil
132
+ MSG_EMPTY
133
+ else
134
+ MSG
135
+ end
136
136
  end
137
137
 
138
138
  def if_style?