rubocop 1.12.0 → 1.16.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 (415) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/config/default.yml +77 -8
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +10 -1
  6. data/lib/rubocop/cached_data.rb +1 -3
  7. data/lib/rubocop/cli.rb +4 -6
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  11. data/lib/rubocop/comment_config.rb +2 -7
  12. data/lib/rubocop/config.rb +11 -26
  13. data/lib/rubocop/config_loader.rb +5 -11
  14. data/lib/rubocop/config_loader_resolver.rb +22 -14
  15. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  16. data/lib/rubocop/config_store.rb +1 -2
  17. data/lib/rubocop/config_validator.rb +5 -10
  18. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  19. data/lib/rubocop/cop/badge.rb +1 -2
  20. data/lib/rubocop/cop/base.rb +8 -6
  21. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  22. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
  23. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  24. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  25. data/lib/rubocop/cop/commissioner.rb +2 -8
  26. data/lib/rubocop/cop/cop.rb +4 -18
  27. data/lib/rubocop/cop/corrector.rb +1 -4
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
  29. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  30. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  31. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  32. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  33. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  35. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  36. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  37. data/lib/rubocop/cop/generator.rb +1 -4
  38. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  39. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  40. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  41. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  42. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  43. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  45. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  47. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
  48. data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
  49. data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
  50. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  51. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  52. data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
  53. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  54. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
  55. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
  56. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  57. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  58. data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
  59. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  60. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  61. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  62. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  63. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  65. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  66. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  67. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  68. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  70. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
  71. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  72. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  73. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/hash_alignment.rb +35 -15
  75. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  76. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  77. data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
  78. data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
  79. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  80. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  81. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  83. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  84. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  85. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +16 -10
  86. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +4 -0
  87. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  88. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  89. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  90. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  91. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  92. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  93. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  94. data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
  95. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  96. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  97. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  99. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  100. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  101. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  102. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  103. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  104. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  105. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  106. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  107. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  108. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  109. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  110. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  111. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  112. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  113. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  114. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  115. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  116. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  117. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  118. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  119. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  120. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  121. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  122. data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
  123. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  124. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  125. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  126. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  127. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  128. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  129. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  130. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  131. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  132. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  133. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  134. data/lib/rubocop/cop/lint/loop.rb +1 -2
  135. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  136. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  137. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  138. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  139. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  140. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  141. data/lib/rubocop/cop/lint/number_conversion.rb +4 -5
  142. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  143. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  144. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  145. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  146. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  147. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  148. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
  149. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  150. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  151. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  152. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  153. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  154. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  155. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  156. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  157. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  158. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  159. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  160. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  161. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  162. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  163. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  164. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  165. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  166. data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
  167. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  168. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  169. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  170. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  171. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  172. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  173. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  174. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  175. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  176. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  177. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  178. data/lib/rubocop/cop/lint/void.rb +5 -12
  179. data/lib/rubocop/cop/message_annotator.rb +1 -3
  180. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  181. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  182. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  183. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  184. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  185. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  186. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  187. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  188. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  189. data/lib/rubocop/cop/mixin/alignment.rb +2 -4
  190. data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
  191. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  192. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  193. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  194. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  195. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
  196. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  197. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  198. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  199. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  200. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  201. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  202. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  203. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
  204. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  205. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  206. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
  207. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  208. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  209. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  210. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
  211. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  212. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -37
  213. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  214. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  215. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  216. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  217. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  218. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  219. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
  220. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  221. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  222. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  223. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  224. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  225. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  226. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
  227. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  228. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  229. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  230. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
  231. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  232. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  233. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  234. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  235. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
  236. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  237. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  238. data/lib/rubocop/cop/offense.rb +3 -8
  239. data/lib/rubocop/cop/registry.rb +3 -11
  240. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -4
  241. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  242. data/lib/rubocop/cop/style/alias.rb +5 -12
  243. data/lib/rubocop/cop/style/and_or.rb +3 -1
  244. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  245. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  246. data/lib/rubocop/cop/style/attr.rb +1 -3
  247. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  248. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
  249. data/lib/rubocop/cop/style/case_like_if.rb +1 -2
  250. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  251. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  252. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  253. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  254. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  255. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  256. data/lib/rubocop/cop/style/command_literal.rb +3 -8
  257. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  258. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  259. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  260. data/lib/rubocop/cop/style/copyright.rb +3 -6
  261. data/lib/rubocop/cop/style/date_time.rb +2 -5
  262. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  263. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  264. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  265. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  266. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  267. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  268. data/lib/rubocop/cop/style/end_block.rb +1 -2
  269. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  270. data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
  271. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  272. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  273. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  274. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  275. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  276. data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
  277. data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
  278. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  279. data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
  280. data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
  281. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  282. data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
  283. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  284. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  285. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  286. data/lib/rubocop/cop/style/lambda.rb +2 -4
  287. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  288. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  289. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -3
  290. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +10 -18
  291. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  292. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  293. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  294. data/lib/rubocop/cop/style/min_max.rb +1 -2
  295. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  296. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  297. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  298. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  299. data/lib/rubocop/cop/style/module_function.rb +3 -6
  300. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  301. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
  302. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  303. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  304. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  305. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  306. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  307. data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
  308. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  309. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  310. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  311. data/lib/rubocop/cop/style/next.rb +4 -9
  312. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  313. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  314. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  315. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  316. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  317. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  318. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  319. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  320. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  321. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  322. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  323. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  324. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  325. data/lib/rubocop/cop/style/proc.rb +1 -2
  326. data/lib/rubocop/cop/style/quoted_symbols.rb +105 -0
  327. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  328. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  329. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  330. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  331. data/lib/rubocop/cop/style/redundant_begin.rb +15 -4
  332. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  333. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  334. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  335. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  336. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  337. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  338. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  339. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  340. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  341. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  342. data/lib/rubocop/cop/style/redundant_return.rb +3 -5
  343. data/lib/rubocop/cop/style/redundant_self.rb +2 -6
  344. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  345. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  346. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  347. data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
  348. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  349. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  350. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  351. data/lib/rubocop/cop/style/send.rb +1 -2
  352. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  353. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  354. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  355. data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
  356. data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
  357. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  358. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  359. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  360. data/lib/rubocop/cop/style/string_chars.rb +2 -1
  361. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  362. data/lib/rubocop/cop/style/string_literals.rb +3 -5
  363. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
  364. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
  365. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  366. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  367. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  368. data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
  369. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
  370. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  371. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  372. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  373. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  374. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  375. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
  376. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  377. data/lib/rubocop/cop/style/when_then.rb +4 -2
  378. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  379. data/lib/rubocop/cop/style/word_array.rb +1 -2
  380. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  381. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  382. data/lib/rubocop/cop/team.rb +2 -5
  383. data/lib/rubocop/cop/util.rb +8 -11
  384. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  385. data/lib/rubocop/cop/variable_force.rb +6 -15
  386. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  387. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  388. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  389. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  390. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  391. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  392. data/lib/rubocop/directive_comment.rb +10 -1
  393. data/lib/rubocop/file_finder.rb +1 -3
  394. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  395. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  396. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  397. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  398. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  399. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  400. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  401. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  402. data/lib/rubocop/options.rb +30 -50
  403. data/lib/rubocop/path_util.rb +1 -3
  404. data/lib/rubocop/rake_task.rb +3 -0
  405. data/lib/rubocop/remote_config.rb +4 -7
  406. data/lib/rubocop/result_cache.rb +5 -12
  407. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  408. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  409. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  410. data/lib/rubocop/runner.rb +7 -14
  411. data/lib/rubocop/target_finder.rb +18 -16
  412. data/lib/rubocop/target_ruby.rb +4 -8
  413. data/lib/rubocop/version.rb +1 -1
  414. metadata +16 -7
  415. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -63,8 +63,7 @@ module RuboCop
63
63
  end
64
64
 
65
65
  def setter_method?(method_name)
66
- method_name.to_s.end_with?('=') &&
67
- !AST::Node::COMPARISON_OPERATORS.include?(method_name)
66
+ method_name.to_s.end_with?('=') && !AST::Node::COMPARISON_OPERATORS.include?(method_name)
68
67
  end
69
68
  end
70
69
  end
@@ -26,8 +26,7 @@ module RuboCop
26
26
  class SafeNavigationChain < Base
27
27
  include NilMethods
28
28
 
29
- MSG = 'Do not chain ordinary method call' \
30
- ' after safe navigation operator.'
29
+ MSG = 'Do not chain ordinary method call after safe navigation operator.'
31
30
 
32
31
  # @!method bad_method?(node)
33
32
  def_node_matcher :bad_method?, <<~PATTERN
@@ -31,8 +31,7 @@ module RuboCop
31
31
  include NilMethods
32
32
  extend AutoCorrector
33
33
 
34
- MSG = 'Ensure that safe navigation is used consistently ' \
35
- 'inside of `&&` and `||`.'
34
+ MSG = 'Ensure that safe navigation is used consistently inside of `&&` and `||`.'
36
35
 
37
36
  def on_csend(node)
38
37
  return unless node.parent&.operator_keyword?
@@ -46,15 +45,12 @@ module RuboCop
46
45
  safe_nav_receiver = node.receiver
47
46
 
48
47
  method_calls = conditions.select(&:send_type?)
49
- unsafe_method_calls =
50
- unsafe_method_calls(method_calls, safe_nav_receiver)
48
+ unsafe_method_calls = unsafe_method_calls(method_calls, safe_nav_receiver)
51
49
 
52
50
  unsafe_method_calls.each do |unsafe_method_call|
53
51
  location = location(node, unsafe_method_call)
54
52
 
55
- add_offense(location) do |corrector|
56
- autocorrect(corrector, unsafe_method_call)
57
- end
53
+ add_offense(location) { |corrector| autocorrect(corrector, unsafe_method_call) }
58
54
 
59
55
  ignore_node(unsafe_method_call)
60
56
  end
@@ -76,9 +72,7 @@ module RuboCop
76
72
  parent = node.parent
77
73
  unless parent &&
78
74
  (parent.operator_keyword? ||
79
- (parent.begin_type? &&
80
- parent.parent &&
81
- parent.parent.operator_keyword?))
75
+ (parent.begin_type? && parent.parent && parent.parent.operator_keyword?))
82
76
  return node
83
77
  end
84
78
 
@@ -22,8 +22,7 @@ module RuboCop
22
22
  class SafeNavigationWithEmpty < Base
23
23
  extend AutoCorrector
24
24
 
25
- MSG = 'Avoid calling `empty?` with the safe navigation operator ' \
26
- 'in conditionals.'
25
+ MSG = 'Avoid calling `empty?` with the safe navigation operator in conditionals.'
27
26
 
28
27
  # @!method safe_navigation_empty_in_conditional?(node)
29
28
  def_node_matcher :safe_navigation_empty_in_conditional?, <<~PATTERN
@@ -53,9 +53,7 @@ module RuboCop
53
53
 
54
54
  def on_send(node)
55
55
  send_with_mixin_argument?(node) do |method, module_name|
56
- message = message(
57
- method, module_name.source, bad_location(node).source
58
- )
56
+ message = message(method, module_name.source, bad_location(node).source)
59
57
 
60
58
  bad_location = bad_location(node)
61
59
  add_offense(bad_location, message: message) do |corrector|
@@ -73,10 +71,7 @@ module RuboCop
73
71
  end
74
72
 
75
73
  def message(method, module_name, bad_method)
76
- format(
77
- MSG,
78
- method: method, module_name: module_name, bad_method: bad_method
79
- )
74
+ format(MSG, method: method, module_name: module_name, bad_method: bad_method)
80
75
  end
81
76
 
82
77
  def mixin_method?(node)
@@ -64,8 +64,7 @@ module RuboCop
64
64
  # end
65
65
  #
66
66
  class ShadowedArgument < Base
67
- MSG = 'Argument `%<argument>s` was shadowed by a local variable ' \
68
- 'before it was used.'
67
+ MSG = 'Argument `%<argument>s` was shadowed by a local variable before it was used.'
69
68
 
70
69
  # @!method uses_var?(node)
71
70
  def_node_search :uses_var?, '(lvar %)'
@@ -75,9 +74,7 @@ module RuboCop
75
74
  end
76
75
 
77
76
  def after_leaving_scope(scope, _variable_table)
78
- scope.variables.each_value do |variable|
79
- check_argument(variable)
80
- end
77
+ scope.variables.each_value { |variable| check_argument(variable) }
81
78
  end
82
79
 
83
80
  private
@@ -128,8 +125,7 @@ module RuboCop
128
125
  next false if assignment_node.shorthand_asgn?
129
126
 
130
127
  node_within_block_or_conditional =
131
- node_within_block_or_conditional?(assignment_node.parent,
132
- argument.scope.node)
128
+ node_within_block_or_conditional?(assignment_node.parent, argument.scope.node)
133
129
 
134
130
  unless uses_var?(assignment_node, argument.name)
135
131
  # It's impossible to decide whether a branch or block is executed,
@@ -162,10 +158,7 @@ module RuboCop
162
158
  # Get argument references without assignments' references
163
159
  #
164
160
  def argument_references(argument)
165
- assignment_references = argument
166
- .assignments
167
- .flat_map(&:references)
168
- .map(&:source_range)
161
+ assignment_references = argument.assignments.flat_map(&:references).map(&:source_range)
169
162
 
170
163
  argument.references.reject do |ref|
171
164
  next false unless ref.explicit?
@@ -59,8 +59,7 @@ module RuboCop
59
59
  contains_multiple_levels_of_exceptions?(group)
60
60
  end
61
61
 
62
- return if !rescue_group_rescues_multiple_levels &&
63
- sorted?(rescued_groups)
62
+ return if !rescue_group_rescues_multiple_levels && sorted?(rescued_groups)
64
63
 
65
64
  add_offense(offense_range(rescues))
66
65
  end
@@ -74,18 +73,14 @@ module RuboCop
74
73
  end
75
74
 
76
75
  def rescued_groups_for(rescues)
77
- rescues.map do |group|
78
- evaluate_exceptions(group)
79
- end
76
+ rescues.map { |group| evaluate_exceptions(group) }
80
77
  end
81
78
 
82
79
  def contains_multiple_levels_of_exceptions?(group)
83
80
  # Always treat `Exception` as the highest level exception.
84
81
  return true if group.size > 1 && group.include?(Exception)
85
82
 
86
- group.combination(2).any? do |a, b|
87
- compare_exceptions(a, b)
88
- end
83
+ group.combination(2).any? { |a, b| compare_exceptions(a, b) }
89
84
  end
90
85
 
91
86
  def compare_exceptions(exception, other_exception)
@@ -111,6 +106,9 @@ module RuboCop
111
106
 
112
107
  if rescued_exceptions.any?
113
108
  rescued_exceptions.each_with_object([]) do |exception, converted|
109
+ # FIXME: Workaround `rubocop:disable` comment for JRuby.
110
+ # https://github.com/jruby/jruby/issues/6642
111
+ # rubocop:disable Style/RedundantBegin
114
112
  begin
115
113
  RuboCop::Util.silence_warnings do
116
114
  # Avoid printing deprecation warnings about constants
@@ -119,6 +117,7 @@ module RuboCop
119
117
  rescue NameError
120
118
  converted << nil
121
119
  end
120
+ # rubocop:enable Style/RedundantBegin
122
121
  end
123
122
  else
124
123
  # treat an empty `rescue` as `rescue StandardError`
@@ -48,8 +48,7 @@ module RuboCop
48
48
 
49
49
  next unless STRUCT_METHOD_NAMES.include?(member_name.to_sym)
50
50
 
51
- message = format(MSG, member_name: member_name.inspect,
52
- method_name: member_name.to_s)
51
+ message = format(MSG, member_name: member_name.inspect, method_name: member_name.to_s)
53
52
  add_offense(arg, message: message)
54
53
  end
55
54
  end
@@ -66,6 +66,7 @@ module RuboCop
66
66
  class SymbolConversion < Base
67
67
  extend AutoCorrector
68
68
  include ConfigurableEnforcedStyle
69
+ include SymbolHelp
69
70
 
70
71
  MSG = 'Unnecessary symbol conversion; use `%<correction>s` instead.'
71
72
  MSG_CONSISTENCY = 'Symbol hash key should be quoted for consistency; ' \
@@ -114,9 +115,7 @@ module RuboCop
114
115
  private
115
116
 
116
117
  def register_offense(node, correction:, message: format(MSG, correction: correction))
117
- add_offense(node, message: message) do |corrector|
118
- corrector.replace(node, correction)
119
- end
118
+ add_offense(node, message: message) { |corrector| corrector.replace(node, correction) }
120
119
  end
121
120
 
122
121
  def properly_quoted?(source, value)
@@ -140,10 +139,6 @@ module RuboCop
140
139
  node.parent&.array_type? && node.parent&.percent_literal?
141
140
  end
142
141
 
143
- def hash_key?(node)
144
- node.parent&.pair_type? && node == node.parent.child_nodes.first
145
- end
146
-
147
142
  def correct_hash_key(node)
148
143
  # Although some operators can be converted to symbols normally
149
144
  # (ie. `:==`), these are not accepted as hash keys and will
@@ -152,7 +147,7 @@ module RuboCop
152
147
  # will be ignored.
153
148
  return unless node.value.to_s.match?(/\A[a-z0-9_]/i)
154
149
 
155
- correction = node.value.inspect.gsub(/\A:/, '')
150
+ correction = node.value.inspect.delete_prefix(':')
156
151
  return if properly_quoted?(node.source, correction)
157
152
 
158
153
  register_offense(
@@ -169,7 +164,7 @@ module RuboCop
169
164
  next if requires_quotes?(key)
170
165
  next if properly_quoted?(key.source, %("#{key.value}"))
171
166
 
172
- correction = "#{quote_type}#{key.value}#{quote_type}"
167
+ correction = %("#{key.value}")
173
168
  register_offense(
174
169
  key,
175
170
  correction: correction,
@@ -177,13 +172,6 @@ module RuboCop
177
172
  )
178
173
  end
179
174
  end
180
-
181
- def quote_type
182
- # Use the `Style/StringLiterals` configuration for quoting symbols
183
- return '"' unless config.for_cop('Style/StringLiterals')['Enabled']
184
-
185
- config.for_cop('Style/StringLiterals')['EnforcedStyle'] == 'single_quotes' ? "'" : '"'
186
- end
187
175
  end
188
176
  end
189
177
  end
@@ -21,9 +21,7 @@ module RuboCop
21
21
  message =
22
22
  "#{diagnostic.message}\n(Using Ruby #{ruby_version} parser; " \
23
23
  'configure using `TargetRubyVersion` parameter, under `AllCops`)'
24
- add_offense(diagnostic.location,
25
- message: message,
26
- severity: diagnostic.level)
24
+ add_offense(diagnostic.location, message: message, severity: diagnostic.level)
27
25
  end
28
26
 
29
27
  def add_offense_from_error(error)
@@ -31,8 +31,7 @@ module RuboCop
31
31
  class ToJSON < Base
32
32
  extend AutoCorrector
33
33
 
34
- MSG = '`#to_json` requires an optional argument to be parsable ' \
35
- 'via JSON.generate(obj).'
34
+ MSG = '`#to_json` requires an optional argument to be parsable via JSON.generate(obj).'
36
35
 
37
36
  def on_def(node)
38
37
  return unless node.method?(:to_json) && node.arguments.empty?
@@ -38,9 +38,7 @@ module RuboCop
38
38
 
39
39
  trailing_comma = trailing_comma_range(node)
40
40
 
41
- add_offense(trailing_comma) do |corrector|
42
- corrector.remove(trailing_comma)
43
- end
41
+ add_offense(trailing_comma) { |corrector| corrector.remove(trailing_comma) }
44
42
  end
45
43
 
46
44
  private
@@ -48,9 +48,7 @@ module RuboCop
48
48
  end
49
49
 
50
50
  def after_leaving_scope(scope, _variable_table)
51
- scope.variables.each_value do |variable|
52
- check_variable(variable)
53
- end
51
+ scope.variables.each_value { |variable| check_variable(variable) }
54
52
  end
55
53
 
56
54
  def check_variable(variable)
@@ -81,8 +81,7 @@ module RuboCop
81
81
  def check_if(node)
82
82
  if_branch = node.if_branch
83
83
  else_branch = node.else_branch
84
- if_branch && else_branch &&
85
- flow_expression?(if_branch) && flow_expression?(else_branch)
84
+ if_branch && else_branch && flow_expression?(if_branch) && flow_expression?(else_branch)
86
85
  end
87
86
 
88
87
  def check_case(node)
@@ -90,9 +89,7 @@ module RuboCop
90
89
  return false unless else_branch
91
90
  return false unless flow_expression?(else_branch)
92
91
 
93
- node.when_branches.all? do |branch|
94
- branch.body && flow_expression?(branch.body)
95
- end
92
+ node.when_branches.all? { |branch| branch.body && flow_expression?(branch.body) }
96
93
  end
97
94
  end
98
95
  end
@@ -87,6 +87,7 @@ module RuboCop
87
87
  include IgnoredPattern
88
88
 
89
89
  MSG = 'This loop will have at most one iteration.'
90
+ CONTINUE_KEYWORDS = %i[next redo].freeze
90
91
 
91
92
  def on_while(node)
92
93
  check(node)
@@ -116,7 +117,10 @@ module RuboCop
116
117
  break_statement = statements.find { |statement| break_statement?(statement) }
117
118
  return unless break_statement
118
119
 
119
- add_offense(node) unless preceded_by_continue_statement?(break_statement)
120
+ unless preceded_by_continue_statement?(break_statement) ||
121
+ conditional_continue_keyword?(break_statement)
122
+ add_offense(node)
123
+ end
120
124
  end
121
125
 
122
126
  def statements(node)
@@ -162,8 +166,7 @@ module RuboCop
162
166
  def check_if(node)
163
167
  if_branch = node.if_branch
164
168
  else_branch = node.else_branch
165
- if_branch && else_branch &&
166
- break_statement?(if_branch) && break_statement?(else_branch)
169
+ if_branch && else_branch && break_statement?(if_branch) && break_statement?(else_branch)
167
170
  end
168
171
 
169
172
  def check_case(node)
@@ -171,18 +174,22 @@ module RuboCop
171
174
  return false unless else_branch
172
175
  return false unless break_statement?(else_branch)
173
176
 
174
- node.when_branches.all? do |branch|
175
- branch.body && break_statement?(branch.body)
176
- end
177
+ node.when_branches.all? { |branch| branch.body && break_statement?(branch.body) }
177
178
  end
178
179
 
179
180
  def preceded_by_continue_statement?(break_statement)
180
181
  break_statement.left_siblings.any? do |sibling|
181
182
  next if sibling.loop_keyword? || loop_method?(sibling)
182
183
 
183
- sibling.each_descendant(:next, :redo).any?
184
+ sibling.each_descendant(*CONTINUE_KEYWORDS).any?
184
185
  end
185
186
  end
187
+
188
+ def conditional_continue_keyword?(break_statement)
189
+ or_node = break_statement.each_descendant(:or).to_a.last
190
+
191
+ or_node && CONTINUE_KEYWORDS.include?(or_node.rhs.type)
192
+ end
186
193
  end
187
194
  end
188
195
  end
@@ -68,19 +68,22 @@ module RuboCop
68
68
 
69
69
  def check_argument(variable)
70
70
  return if allowed_block?(variable) ||
71
- allowed_keyword_argument?(variable)
71
+ allowed_keyword_argument?(variable) ||
72
+ used_block_local?(variable)
72
73
 
73
74
  super
74
75
  end
75
76
 
77
+ def used_block_local?(variable)
78
+ variable.explicit_block_local_variable? && !variable.assignments.empty?
79
+ end
80
+
76
81
  def allowed_block?(variable)
77
- !variable.block_argument? ||
78
- (ignore_empty_blocks? && empty_block?(variable))
82
+ !variable.block_argument? || (ignore_empty_blocks? && empty_block?(variable))
79
83
  end
80
84
 
81
85
  def allowed_keyword_argument?(variable)
82
- variable.keyword_argument? &&
83
- allow_unused_keyword_arguments?
86
+ variable.keyword_argument? && allow_unused_keyword_arguments?
84
87
  end
85
88
 
86
89
  def message(variable)
@@ -115,8 +118,7 @@ module RuboCop
115
118
  end
116
119
 
117
120
  def message_for_normal_block(variable, all_arguments)
118
- if all_arguments.none?(&:referenced?) &&
119
- !define_method_call?(variable)
121
+ if all_arguments.none?(&:referenced?) && !define_method_call?(variable)
120
122
  if all_arguments.count > 1
121
123
  "You can omit all the arguments if you don't care about them."
122
124
  else
@@ -80,8 +80,7 @@ module RuboCop
80
80
 
81
81
  def check_argument(variable)
82
82
  return unless variable.method_argument?
83
- return if variable.keyword_argument? &&
84
- cop_config['AllowUnusedKeywordArguments']
83
+ return if variable.keyword_argument? && cop_config['AllowUnusedKeywordArguments']
85
84
  return if ignored_method?(variable.scope.node.body)
86
85
 
87
86
  super
@@ -183,8 +183,7 @@ module RuboCop
183
183
  end
184
184
 
185
185
  def access_modifier?(node)
186
- node.bare_access_modifier? ||
187
- node.method?(:private_class_method)
186
+ node.bare_access_modifier? || node.method?(:private_class_method)
188
187
  end
189
188
 
190
189
  def check_scope(node)
@@ -264,8 +263,7 @@ module RuboCop
264
263
  end
265
264
 
266
265
  def start_of_new_scope?(child)
267
- child.module_type? || child.class_type? ||
268
- child.sclass_type? || eval_call?(child)
266
+ child.module_type? || child.class_type? || child.sclass_type? || eval_call?(child)
269
267
  end
270
268
 
271
269
  def eval_call?(child)