rubocop 1.9.1 → 1.13.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 (488) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -14
  3. data/assets/output.html.erb +1 -1
  4. data/config/default.yml +77 -17
  5. data/config/obsoletion.yml +4 -0
  6. data/exe/rubocop +1 -3
  7. data/lib/rubocop.rb +5 -1
  8. data/lib/rubocop/cached_data.rb +1 -3
  9. data/lib/rubocop/cli.rb +4 -6
  10. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  11. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  12. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  13. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  14. data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
  15. data/lib/rubocop/comment_config.rb +45 -101
  16. data/lib/rubocop/config.rb +11 -26
  17. data/lib/rubocop/config_loader.rb +5 -11
  18. data/lib/rubocop/config_loader_resolver.rb +22 -14
  19. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  20. data/lib/rubocop/config_store.rb +1 -2
  21. data/lib/rubocop/config_validator.rb +5 -10
  22. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  23. data/lib/rubocop/cop/badge.rb +1 -2
  24. data/lib/rubocop/cop/base.rb +8 -6
  25. data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
  26. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -8
  27. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
  28. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -4
  29. data/lib/rubocop/cop/commissioner.rb +2 -8
  30. data/lib/rubocop/cop/cop.rb +4 -18
  31. data/lib/rubocop/cop/corrector.rb +1 -4
  32. data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
  33. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  34. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  35. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  36. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  37. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  38. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  39. data/lib/rubocop/cop/gemspec/date_assignment.rb +57 -0
  40. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
  41. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -4
  42. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
  43. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
  44. data/lib/rubocop/cop/generator.rb +3 -6
  45. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  46. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  47. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  48. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -4
  49. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
  50. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
  51. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
  52. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
  53. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
  54. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
  55. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
  56. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  57. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
  58. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
  59. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
  60. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
  61. data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
  62. data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
  63. data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
  64. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  65. data/lib/rubocop/cop/layout/block_alignment.rb +8 -19
  66. data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
  67. data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
  68. data/lib/rubocop/cop/layout/class_structure.rb +5 -10
  69. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
  70. data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
  71. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  72. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  73. data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
  74. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  75. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  76. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  77. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  78. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  79. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  80. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  81. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  82. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -9
  83. data/lib/rubocop/cop/layout/first_argument_indentation.rb +12 -6
  84. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
  85. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  86. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +24 -20
  87. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  88. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  89. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  90. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
  91. data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
  92. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  93. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  94. data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
  95. data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
  96. data/lib/rubocop/cop/layout/indentation_width.rb +21 -11
  97. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  98. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  99. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  100. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +26 -0
  101. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  102. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  103. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  104. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
  105. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
  106. data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
  107. data/lib/rubocop/cop/layout/redundant_line_break.rb +125 -0
  108. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  109. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  110. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  111. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  112. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  113. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
  114. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  115. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -3
  116. data/lib/rubocop/cop/layout/space_before_brackets.rb +2 -4
  117. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  118. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  119. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  120. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  121. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  122. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +6 -11
  123. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  124. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  125. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  126. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  127. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  128. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  129. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
  130. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
  131. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
  132. data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
  133. data/lib/rubocop/cop/lint/debugger.rb +60 -14
  134. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -4
  135. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  136. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +16 -9
  137. data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -3
  138. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  139. data/lib/rubocop/cop/lint/duplicate_methods.rb +6 -7
  140. data/lib/rubocop/cop/lint/duplicate_require.rb +3 -2
  141. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  142. data/lib/rubocop/cop/lint/else_layout.rb +2 -4
  143. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  144. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  145. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  146. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  147. data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -7
  148. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  149. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
  150. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
  151. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  152. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  153. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +4 -7
  154. data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
  155. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  156. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  157. data/lib/rubocop/cop/lint/loop.rb +1 -2
  158. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  159. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  160. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  161. data/lib/rubocop/cop/lint/multiple_comparison.rb +5 -4
  162. data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
  163. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  164. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
  165. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +8 -3
  166. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
  167. data/lib/rubocop/cop/lint/number_conversion.rb +12 -4
  168. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  169. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  170. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  171. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  172. data/lib/rubocop/cop/lint/raise_exception.rb +3 -2
  173. data/lib/rubocop/cop/lint/rand_one.rb +2 -2
  174. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
  175. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  176. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +2 -3
  177. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +10 -10
  178. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
  179. data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
  180. data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -4
  181. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  182. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  183. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  184. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  185. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  186. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +2 -2
  187. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  188. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
  189. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
  190. data/lib/rubocop/cop/lint/shadowed_argument.rb +5 -11
  191. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  192. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
  193. data/lib/rubocop/cop/lint/struct_new_override.rb +2 -2
  194. data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
  195. data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
  196. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  197. data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
  198. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  199. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  200. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  201. data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
  202. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
  203. data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
  204. data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -5
  205. data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -8
  206. data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
  207. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
  208. data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
  209. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  210. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -3
  211. data/lib/rubocop/cop/lint/useless_times.rb +3 -0
  212. data/lib/rubocop/cop/lint/void.rb +4 -11
  213. data/lib/rubocop/cop/message_annotator.rb +1 -3
  214. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  215. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  216. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  217. data/lib/rubocop/cop/metrics/module_length.rb +3 -6
  218. data/lib/rubocop/cop/metrics/parameter_lists.rb +3 -5
  219. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  220. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  221. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +6 -4
  222. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -7
  223. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  224. data/lib/rubocop/cop/mixin/alignment.rb +12 -7
  225. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  226. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  227. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  228. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  229. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  230. data/lib/rubocop/cop/mixin/def_node.rb +3 -5
  231. data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
  232. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
  233. data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
  234. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  235. data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
  236. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  237. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
  238. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
  239. data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -22
  240. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  241. data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
  242. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  243. data/lib/rubocop/cop/mixin/method_complexity.rb +2 -3
  244. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  245. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
  246. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  247. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
  248. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  249. data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -2
  250. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  251. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  252. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  253. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  254. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +6 -9
  255. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  256. data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
  257. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  258. data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -2
  259. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  260. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  261. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  262. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  263. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  264. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
  265. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  266. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
  267. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  268. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
  269. data/lib/rubocop/cop/naming/constant_name.rb +2 -0
  270. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  271. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +8 -3
  272. data/lib/rubocop/cop/naming/method_name.rb +4 -2
  273. data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
  274. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
  275. data/lib/rubocop/cop/offense.rb +3 -8
  276. data/lib/rubocop/cop/registry.rb +13 -12
  277. data/lib/rubocop/cop/security/eval.rb +1 -0
  278. data/lib/rubocop/cop/security/json_load.rb +1 -0
  279. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  280. data/lib/rubocop/cop/security/open.rb +1 -0
  281. data/lib/rubocop/cop/security/yaml_load.rb +1 -0
  282. data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
  283. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  284. data/lib/rubocop/cop/style/alias.rb +6 -12
  285. data/lib/rubocop/cop/style/and_or.rb +3 -1
  286. data/lib/rubocop/cop/style/arguments_forwarding.rb +4 -3
  287. data/lib/rubocop/cop/style/array_coercion.rb +2 -0
  288. data/lib/rubocop/cop/style/array_join.rb +1 -0
  289. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  290. data/lib/rubocop/cop/style/attr.rb +2 -3
  291. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  292. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
  293. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  294. data/lib/rubocop/cop/style/case_equality.rb +2 -1
  295. data/lib/rubocop/cop/style/case_like_if.rb +16 -6
  296. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  297. data/lib/rubocop/cop/style/class_and_module_children.rb +3 -6
  298. data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
  299. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  300. data/lib/rubocop/cop/style/collection_compact.rb +3 -3
  301. data/lib/rubocop/cop/style/colon_method_call.rb +2 -3
  302. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  303. data/lib/rubocop/cop/style/command_literal.rb +4 -9
  304. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  305. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  306. data/lib/rubocop/cop/style/conditional_assignment.rb +12 -24
  307. data/lib/rubocop/cop/style/constant_visibility.rb +28 -0
  308. data/lib/rubocop/cop/style/copyright.rb +3 -6
  309. data/lib/rubocop/cop/style/date_time.rb +5 -5
  310. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  311. data/lib/rubocop/cop/style/dir.rb +1 -0
  312. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  313. data/lib/rubocop/cop/style/documentation.rb +30 -3
  314. data/lib/rubocop/cop/style/documentation_method.rb +1 -0
  315. data/lib/rubocop/cop/style/double_negation.rb +3 -2
  316. data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
  317. data/lib/rubocop/cop/style/each_with_object.rb +1 -0
  318. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  319. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  320. data/lib/rubocop/cop/style/empty_literal.rb +13 -8
  321. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  322. data/lib/rubocop/cop/style/end_block.rb +1 -2
  323. data/lib/rubocop/cop/style/endless_method.rb +2 -3
  324. data/lib/rubocop/cop/style/eval_with_location.rb +91 -31
  325. data/lib/rubocop/cop/style/even_odd.rb +1 -0
  326. data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
  327. data/lib/rubocop/cop/style/explicit_block_argument.rb +3 -5
  328. data/lib/rubocop/cop/style/exponential_notation.rb +6 -7
  329. data/lib/rubocop/cop/style/float_division.rb +4 -0
  330. data/lib/rubocop/cop/style/format_string.rb +2 -0
  331. data/lib/rubocop/cop/style/format_string_token.rb +2 -4
  332. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  333. data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
  334. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  335. data/lib/rubocop/cop/style/hash_conversion.rb +133 -0
  336. data/lib/rubocop/cop/style/hash_each_methods.rb +2 -2
  337. data/lib/rubocop/cop/style/hash_except.rb +1 -0
  338. data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
  339. data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
  340. data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
  341. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
  342. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
  343. data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -13
  344. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
  345. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
  346. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  347. data/lib/rubocop/cop/style/inverse_methods.rb +5 -7
  348. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  349. data/lib/rubocop/cop/style/lambda.rb +2 -4
  350. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  351. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  352. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
  353. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
  354. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  355. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  356. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  357. data/lib/rubocop/cop/style/min_max.rb +2 -2
  358. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  359. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  360. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  361. data/lib/rubocop/cop/style/mixin_usage.rb +3 -2
  362. data/lib/rubocop/cop/style/module_function.rb +8 -6
  363. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  364. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  365. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  366. data/lib/rubocop/cop/style/multiple_comparison.rb +22 -5
  367. data/lib/rubocop/cop/style/mutable_constant.rb +7 -10
  368. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  369. data/lib/rubocop/cop/style/negated_if_else_condition.rb +16 -2
  370. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  371. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  372. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  373. data/lib/rubocop/cop/style/next.rb +4 -9
  374. data/lib/rubocop/cop/style/nil_comparison.rb +3 -0
  375. data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
  376. data/lib/rubocop/cop/style/non_nil_check.rb +9 -5
  377. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  378. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -7
  379. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  380. data/lib/rubocop/cop/style/option_hash.rb +2 -3
  381. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  382. data/lib/rubocop/cop/style/or_assignment.rb +4 -6
  383. data/lib/rubocop/cop/style/parallel_assignment.rb +12 -9
  384. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
  385. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  386. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  387. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  388. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  389. data/lib/rubocop/cop/style/proc.rb +2 -2
  390. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  391. data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
  392. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  393. data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
  394. data/lib/rubocop/cop/style/redundant_begin.rb +47 -7
  395. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  396. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  397. data/lib/rubocop/cop/style/redundant_conditional.rb +5 -6
  398. data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
  399. data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
  400. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +2 -1
  401. data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
  402. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  403. data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -20
  404. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  405. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  406. data/lib/rubocop/cop/style/redundant_return.rb +6 -4
  407. data/lib/rubocop/cop/style/redundant_self.rb +9 -9
  408. data/lib/rubocop/cop/style/redundant_self_assignment.rb +4 -2
  409. data/lib/rubocop/cop/style/redundant_sort.rb +3 -5
  410. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
  411. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  412. data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
  413. data/lib/rubocop/cop/style/rescue_standard_error.rb +5 -7
  414. data/lib/rubocop/cop/style/return_nil.rb +7 -2
  415. data/lib/rubocop/cop/style/safe_navigation.rb +12 -21
  416. data/lib/rubocop/cop/style/sample.rb +1 -0
  417. data/lib/rubocop/cop/style/send.rb +1 -2
  418. data/lib/rubocop/cop/style/signal_exception.rb +6 -7
  419. data/lib/rubocop/cop/style/single_argument_dig.rb +2 -2
  420. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  421. data/lib/rubocop/cop/style/single_line_methods.rb +16 -4
  422. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
  423. data/lib/rubocop/cop/style/sole_nested_conditional.rb +17 -2
  424. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  425. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  426. data/lib/rubocop/cop/style/stderr_puts.rb +3 -6
  427. data/lib/rubocop/cop/style/string_chars.rb +39 -0
  428. data/lib/rubocop/cop/style/string_concatenation.rb +9 -10
  429. data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
  430. data/lib/rubocop/cop/style/string_literals.rb +2 -5
  431. data/lib/rubocop/cop/style/strip.rb +1 -0
  432. data/lib/rubocop/cop/style/struct_inheritance.rb +11 -0
  433. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  434. data/lib/rubocop/cop/style/symbol_proc.rb +29 -10
  435. data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
  436. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
  437. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  438. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
  439. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  440. data/lib/rubocop/cop/style/trivial_accessors.rb +3 -4
  441. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  442. data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
  443. data/lib/rubocop/cop/style/unpack_first.rb +1 -0
  444. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  445. data/lib/rubocop/cop/style/when_then.rb +1 -3
  446. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  447. data/lib/rubocop/cop/style/word_array.rb +1 -2
  448. data/lib/rubocop/cop/style/yoda_condition.rb +4 -11
  449. data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -2
  450. data/lib/rubocop/cop/team.rb +2 -5
  451. data/lib/rubocop/cop/util.rb +8 -11
  452. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  453. data/lib/rubocop/cop/variable_force.rb +6 -15
  454. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  455. data/lib/rubocop/cop/variable_force/branch.rb +1 -2
  456. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  457. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  458. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  459. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  460. data/lib/rubocop/directive_comment.rb +69 -9
  461. data/lib/rubocop/ext/regexp_parser.rb +3 -6
  462. data/lib/rubocop/file_finder.rb +1 -3
  463. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  464. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  465. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  466. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  467. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  468. data/lib/rubocop/formatter/junit_formatter.rb +3 -9
  469. data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
  470. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  471. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  472. data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
  473. data/lib/rubocop/magic_comment.rb +1 -1
  474. data/lib/rubocop/name_similarity.rb +1 -1
  475. data/lib/rubocop/options.rb +27 -41
  476. data/lib/rubocop/path_util.rb +1 -3
  477. data/lib/rubocop/rake_task.rb +3 -0
  478. data/lib/rubocop/remote_config.rb +4 -7
  479. data/lib/rubocop/result_cache.rb +5 -12
  480. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  481. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  482. data/lib/rubocop/rspec/shared_contexts.rb +4 -15
  483. data/lib/rubocop/runner.rb +7 -14
  484. data/lib/rubocop/target_finder.rb +12 -16
  485. data/lib/rubocop/target_ruby.rb +25 -21
  486. data/lib/rubocop/version.rb +1 -1
  487. metadata +15 -9
  488. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -22,8 +22,7 @@ module RuboCop
22
22
 
23
23
  MSG = 'Use `%<q_type>s` only for strings that contain both ' \
24
24
  'single quotes and double quotes%<extra>s.'
25
- DYNAMIC_MSG = ', or for dynamic strings that contain ' \
26
- 'double quotes'
25
+ DYNAMIC_MSG = ', or for dynamic strings that contain double quotes'
27
26
  SINGLE_QUOTE = "'"
28
27
  QUOTE = '"'
29
28
  EMPTY = ''
@@ -72,10 +72,7 @@ module RuboCop
72
72
  end
73
73
 
74
74
  def delimiter?(node, char)
75
- delimiters = [
76
- node.loc.begin.source[-1],
77
- node.loc.end.source[0]
78
- ]
75
+ delimiters = [node.loc.begin.source[-1], node.loc.end.source[0]]
79
76
 
80
77
  delimiters.include?(char)
81
78
  end
@@ -71,9 +71,12 @@ module RuboCop
71
71
  elsif hash_without_braces?(return_node.first_argument)
72
72
  add_braces(corrector, return_node.first_argument)
73
73
  end
74
+ if return_node.splat_argument?
75
+ first_argument = return_node.first_argument
76
+ corrector.replace(first_argument, first_argument.source.delete_prefix('*'))
77
+ end
74
78
 
75
- keyword = range_with_surrounding_space(range: return_node.loc.keyword,
76
- side: :right)
79
+ keyword = range_with_surrounding_space(range: return_node.loc.keyword, side: :right)
77
80
  corrector.remove(keyword)
78
81
  end
79
82
 
@@ -109,8 +112,7 @@ module RuboCop
109
112
  # rubocop:enable Metrics/CyclomaticComplexity
110
113
 
111
114
  def check_return_node(node)
112
- return if cop_config['AllowMultipleReturnValues'] &&
113
- node.children.size > 1
115
+ return if cop_config['AllowMultipleReturnValues'] && node.children.size > 1
114
116
 
115
117
  add_offense(node.loc.keyword, message: message(node)) do |corrector|
116
118
  if node.arguments?
@@ -11,7 +11,7 @@ module RuboCop
11
11
  # presence of a method name clash with an argument or a local
12
12
  # variable.
13
13
  #
14
- # * Calling an attribute writer to prevent an local variable assignment.
14
+ # * Calling an attribute writer to prevent a local variable assignment.
15
15
  #
16
16
  # Note, with using explicit self you can only send messages with public or
17
17
  # protected scope, you cannot send private messages this way.
@@ -92,9 +92,7 @@ module RuboCop
92
92
 
93
93
  def on_masgn(node)
94
94
  lhs, rhs = *node
95
- lhs.children.each do |child|
96
- add_lhs_to_local_variables_scopes(rhs, child.to_a.first)
97
- end
95
+ lhs.children.each { |child| add_lhs_to_local_variables_scopes(rhs, child.to_a.first) }
98
96
  end
99
97
 
100
98
  def on_lvasgn(node)
@@ -144,8 +142,12 @@ module RuboCop
144
142
  end
145
143
 
146
144
  def on_argument(node)
147
- name, = *node
148
- @local_variables_scopes[node] << name
145
+ if node.mlhs_type?
146
+ on_args(node)
147
+ else
148
+ name, = *node
149
+ @local_variables_scopes[node] << name
150
+ end
149
151
  end
150
152
 
151
153
  def allow_self(node)
@@ -156,9 +158,7 @@ module RuboCop
156
158
 
157
159
  def add_lhs_to_local_variables_scopes(rhs, lhs)
158
160
  if rhs&.send_type? && !rhs.arguments.empty?
159
- rhs.arguments.each do |argument|
160
- @local_variables_scopes[argument] << lhs
161
- end
161
+ rhs.arguments.each { |argument| @local_variables_scopes[argument] << lhs }
162
162
  else
163
163
  @local_variables_scopes[rhs] << lhs
164
164
  end
@@ -66,8 +66,8 @@ module RuboCop
66
66
  alias on_gvasgn on_lvasgn
67
67
 
68
68
  def on_send(node)
69
- # TODO: replace with #end_with? after supporting only ruby >= 2.7
70
- return unless node.method_name.match?(/=$/)
69
+ # TODO: Remove `Symbol#to_s` after supporting only Ruby >= 2.7.
70
+ return unless node.method_name.to_s.end_with?('=')
71
71
  return unless redundant_assignment?(node)
72
72
 
73
73
  message = format(MSG, method_name: node.first_argument.method_name)
@@ -82,6 +82,7 @@ module RuboCop
82
82
  METHODS_RETURNING_SELF.include?(method_name)
83
83
  end
84
84
 
85
+ # @!method redundant_self_assignment?(node, method_name)
85
86
  def_node_matcher :redundant_self_assignment?, <<~PATTERN
86
87
  (send
87
88
  (self) _
@@ -91,6 +92,7 @@ module RuboCop
91
92
  ...))
92
93
  PATTERN
93
94
 
95
+ # @!method redundant_nonself_assignment?(node, receiver, method_name)
94
96
  def_node_matcher :redundant_nonself_assignment?, <<~PATTERN
95
97
  (send
96
98
  %1 _
@@ -53,11 +53,11 @@ module RuboCop
53
53
  include RangeHelp
54
54
  extend AutoCorrector
55
55
 
56
- MSG = 'Use `%<suggestion>s` instead of '\
57
- '`%<sorter>s...%<accessor_source>s`.'
56
+ MSG = 'Use `%<suggestion>s` instead of `%<sorter>s...%<accessor_source>s`.'
58
57
 
59
58
  RESTRICT_ON_SEND = %i[sort sort_by].freeze
60
59
 
60
+ # @!method redundant_sort?(node)
61
61
  def_node_matcher :redundant_sort?, <<~MATCHER
62
62
  {
63
63
  (send $(send _ $:sort ...) ${:last :first})
@@ -111,9 +111,7 @@ module RuboCop
111
111
  ).source
112
112
 
113
113
  format(MSG,
114
- suggestion: suggestion(sorter,
115
- accessor,
116
- arg_value(node)),
114
+ suggestion: suggestion(sorter, accessor, arg_value(node)),
117
115
  sorter: sorter,
118
116
  accessor_source: accessor_source)
119
117
  end
@@ -21,6 +21,7 @@ module RuboCop
21
21
 
22
22
  MSG = 'Use `sort` instead of `sort_by { |%<var>s| %<var>s }`.'
23
23
 
24
+ # @!method redundant_sort_by(node)
24
25
  def_node_matcher :redundant_sort_by, <<~PATTERN
25
26
  (block $(send _ :sort_by) (args (arg $_x)) (lvar _x))
26
27
  PATTERN
@@ -107,13 +107,11 @@ module RuboCop
107
107
  private
108
108
 
109
109
  def allowed_slash_literal?(node)
110
- style == :slashes && !contains_disallowed_slash?(node) ||
111
- allowed_mixed_slash?(node)
110
+ style == :slashes && !contains_disallowed_slash?(node) || allowed_mixed_slash?(node)
112
111
  end
113
112
 
114
113
  def allowed_mixed_slash?(node)
115
- style == :mixed && node.single_line? &&
116
- !contains_disallowed_slash?(node)
114
+ style == :mixed && node.single_line? && !contains_disallowed_slash?(node)
117
115
  end
118
116
 
119
117
  def allowed_percent_r_literal?(node)
@@ -123,8 +121,7 @@ module RuboCop
123
121
  end
124
122
 
125
123
  def allowed_mixed_percent_r?(node)
126
- style == :mixed && node.multiline? ||
127
- contains_disallowed_slash?(node)
124
+ style == :mixed && node.multiline? || contains_disallowed_slash?(node)
128
125
  end
129
126
 
130
127
  def contains_disallowed_slash?(node)
@@ -149,8 +146,7 @@ module RuboCop
149
146
  end
150
147
 
151
148
  def preferred_delimiters
152
- config.for_cop('Style/PercentLiteralDelimiters') \
153
- ['PreferredDelimiters']['%r'].split(//)
149
+ config.for_cop('Style/PercentLiteralDelimiters') ['PreferredDelimiters']['%r'].chars
154
150
  end
155
151
 
156
152
  def correct_delimiters(node, corrector)
@@ -39,23 +39,27 @@ module RuboCop
39
39
  # rescue SomeException
40
40
  # handle_error
41
41
  # end
42
- class RescueModifier < Cop
42
+ class RescueModifier < Base
43
43
  include Alignment
44
+ include RangeHelp
44
45
  include RescueNode
46
+ extend AutoCorrector
45
47
 
46
48
  MSG = 'Avoid using `rescue` in its modifier form.'
47
49
 
50
+ def self.autocorrect_incompatible_with
51
+ [Style::MethodCallWithArgsParentheses]
52
+ end
53
+
48
54
  def on_resbody(node)
49
55
  return unless rescue_modifier?(node)
50
56
 
51
- add_offense(node.parent)
52
- end
57
+ rescue_node = node.parent
58
+ add_offense(rescue_node) do |corrector|
59
+ parenthesized = parenthesized?(rescue_node)
53
60
 
54
- def autocorrect(node)
55
- parenthesized = parenthesized?(node)
56
- lambda do |corrector|
57
- corrector.replace(node, corrected_block(node, parenthesized))
58
- ParenthesesCorrector.correct(corrector, node.parent) if parenthesized
61
+ correct_rescue_block(corrector, rescue_node, parenthesized)
62
+ ParenthesesCorrector.correct(corrector, rescue_node.parent) if parenthesized
59
63
  end
60
64
  end
61
65
 
@@ -65,17 +69,20 @@ module RuboCop
65
69
  node.parent && parentheses?(node.parent)
66
70
  end
67
71
 
68
- def corrected_block(node, parenthesized)
72
+ def correct_rescue_block(corrector, node, parenthesized)
69
73
  operation, rescue_modifier, = *node
70
74
  *_, rescue_args = *rescue_modifier
71
75
 
72
76
  node_indentation, node_offset = indentation_and_offset(node, parenthesized)
73
77
 
74
- "begin\n" \
75
- "#{operation.source.gsub(/^/, node_indentation)}" \
76
- "\n#{node_offset}rescue\n" \
77
- "#{rescue_args.source.gsub(/^/, node_indentation)}" \
78
- "\n#{node_offset}end"
78
+ corrector.remove(range_between(operation.source_range.end_pos, node.source_range.end_pos))
79
+ corrector.insert_before(operation, "begin\n#{node_indentation}")
80
+ corrector.insert_after(operation, <<~RESCUE_CLAUSE.chop)
81
+
82
+ #{node_offset}rescue
83
+ #{node_indentation}#{rescue_args.source}
84
+ #{node_offset}end
85
+ RESCUE_CLAUSE
79
86
  end
80
87
 
81
88
  def indentation_and_offset(node, parenthesized)
@@ -76,15 +76,15 @@ module RuboCop
76
76
  include RangeHelp
77
77
  extend AutoCorrector
78
78
 
79
- MSG_IMPLICIT = 'Omit the error class when rescuing ' \
80
- '`StandardError` by itself.'
81
- MSG_EXPLICIT = 'Avoid rescuing without specifying ' \
82
- 'an error class.'
79
+ MSG_IMPLICIT = 'Omit the error class when rescuing `StandardError` by itself.'
80
+ MSG_EXPLICIT = 'Avoid rescuing without specifying an error class.'
83
81
 
82
+ # @!method rescue_without_error_class?(node)
84
83
  def_node_matcher :rescue_without_error_class?, <<~PATTERN
85
84
  (resbody nil? _ _)
86
85
  PATTERN
87
86
 
87
+ # @!method rescue_standard_error?(node)
88
88
  def_node_matcher :rescue_standard_error?, <<~PATTERN
89
89
  (resbody $(array (const {nil? cbase} :StandardError)) _ _)
90
90
  PATTERN
@@ -98,9 +98,7 @@ module RuboCop
98
98
  offense_for_implicit_enforced_style(node, error)
99
99
  end
100
100
  when :explicit
101
- rescue_without_error_class?(node) do
102
- offense_for_exlicit_enforced_style(node)
103
- end
101
+ rescue_without_error_class?(node) { offense_for_exlicit_enforced_style(node) }
104
102
  end
105
103
  end
106
104
 
@@ -35,7 +35,10 @@ module RuboCop
35
35
  RETURN_MSG = 'Use `return` instead of `return nil`.'
36
36
  RETURN_NIL_MSG = 'Use `return nil` instead of `return`.'
37
37
 
38
+ # @!method return_node?(node)
38
39
  def_node_matcher :return_node?, '(return)'
40
+
41
+ # @!method return_nil_node?(node)
39
42
  def_node_matcher :return_nil_node?, '(return nil)'
40
43
 
41
44
  def on_return(node)
@@ -71,15 +74,17 @@ module RuboCop
71
74
  end
72
75
 
73
76
  def correct_style?(node)
74
- style == :return && !return_nil_node?(node) ||
75
- style == :return_nil && !return_node?(node)
77
+ style == :return && !return_nil_node?(node) || style == :return_nil && !return_node?(node)
76
78
  end
77
79
 
78
80
  def scoped_node?(node)
79
81
  node.def_type? || node.defs_type? || node.lambda?
80
82
  end
81
83
 
84
+ # @!method chained_send?(node)
82
85
  def_node_matcher :chained_send?, '(send !nil? ...)'
86
+
87
+ # @!method define_method?(node)
83
88
  def_node_matcher :define_method?, <<~PATTERN
84
89
  (send _ {:define_method :define_singleton_method} _)
85
90
  PATTERN
@@ -69,11 +69,11 @@ module RuboCop
69
69
 
70
70
  MSG = 'Use safe navigation (`&.`) instead of checking if an object ' \
71
71
  'exists before calling the method.'
72
- LOGIC_JUMP_KEYWORDS = %i[break fail next raise
73
- return throw yield].freeze
72
+ LOGIC_JUMP_KEYWORDS = %i[break fail next raise return throw yield].freeze
74
73
 
75
74
  # if format: (if checked_variable body nil)
76
75
  # unless format: (if checked_variable nil body)
76
+ # @!method modifier_if_safe_navigation_candidate(node)
77
77
  def_node_matcher :modifier_if_safe_navigation_candidate, <<~PATTERN
78
78
  {
79
79
  (if {
@@ -88,6 +88,7 @@ module RuboCop
88
88
  }
89
89
  PATTERN
90
90
 
91
+ # @!method not_nil_check?(node)
91
92
  def_node_matcher :not_nil_check?, '(send (send $_ :nil?) :!)'
92
93
 
93
94
  def on_if(node)
@@ -110,9 +111,7 @@ module RuboCop
110
111
  return if unsafe_method_used?(method_chain, method)
111
112
  return if method_chain.method?(:empty?)
112
113
 
113
- add_offense(node) do |corrector|
114
- autocorrect(corrector, node)
115
- end
114
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
116
115
  end
117
116
 
118
117
  def use_var_only_in_unless_modifier?(node, variable)
@@ -137,8 +136,7 @@ module RuboCop
137
136
  comments = comments(node)
138
137
  return if comments.empty?
139
138
 
140
- corrector.insert_before(method_call,
141
- "#{comments.map(&:text).join("\n")}\n")
139
+ corrector.insert_before(method_call, "#{comments.map(&:text).join("\n")}\n")
142
140
  end
143
141
 
144
142
  def comments(node)
@@ -179,11 +177,9 @@ module RuboCop
179
177
  end
180
178
 
181
179
  def extract_parts_from_if(node)
182
- variable, receiver =
183
- modifier_if_safe_navigation_candidate(node)
180
+ variable, receiver = modifier_if_safe_navigation_candidate(node)
184
181
 
185
- checked_variable, matching_receiver, method =
186
- extract_common_parts(receiver, variable)
182
+ checked_variable, matching_receiver, method = extract_common_parts(receiver, variable)
187
183
 
188
184
  matching_receiver = nil if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
189
185
 
@@ -193,18 +189,15 @@ module RuboCop
193
189
  def extract_parts_from_and(node)
194
190
  checked_variable, rhs = *node
195
191
  if cop_config['ConvertCodeThatCanStartToReturnNil']
196
- checked_variable =
197
- not_nil_check?(checked_variable) || checked_variable
192
+ checked_variable = not_nil_check?(checked_variable) || checked_variable
198
193
  end
199
194
 
200
- checked_variable, matching_receiver, method =
201
- extract_common_parts(rhs, checked_variable)
195
+ checked_variable, matching_receiver, method = extract_common_parts(rhs, checked_variable)
202
196
  [checked_variable, matching_receiver, rhs, method]
203
197
  end
204
198
 
205
199
  def extract_common_parts(method_chain, checked_variable)
206
- matching_receiver =
207
- find_matching_receiver_invocation(method_chain, checked_variable)
200
+ matching_receiver = find_matching_receiver_invocation(method_chain, checked_variable)
208
201
 
209
202
  method = matching_receiver.parent if matching_receiver
210
203
 
@@ -262,13 +255,11 @@ module RuboCop
262
255
  end
263
256
 
264
257
  def begin_range(node, method_call)
265
- range_between(node.loc.expression.begin_pos,
266
- method_call.loc.expression.begin_pos)
258
+ range_between(node.loc.expression.begin_pos, method_call.loc.expression.begin_pos)
267
259
  end
268
260
 
269
261
  def end_range(node, method_call)
270
- range_between(method_call.loc.expression.end_pos,
271
- node.loc.expression.end_pos)
262
+ range_between(method_call.loc.expression.end_pos, node.loc.expression.end_pos)
272
263
  end
273
264
 
274
265
  def add_safe_nav_to_all_methods_in_chain(corrector,
@@ -33,6 +33,7 @@ module RuboCop
33
33
  MSG = 'Use `%<correct>s` instead of `%<incorrect>s`.'
34
34
  RESTRICT_ON_SEND = %i[first last [] at slice].freeze
35
35
 
36
+ # @!method sample_candidate?(node)
36
37
  def_node_matcher :sample_candidate?, <<~PATTERN
37
38
  (send $(send _ :shuffle $...) ${:#{RESTRICT_ON_SEND.join(' :')}} $...)
38
39
  PATTERN
@@ -14,8 +14,7 @@ module RuboCop
14
14
  # Foo.__send__(:bar)
15
15
  # quuz.public_send(:fred)
16
16
  class Send < Base
17
- MSG = 'Prefer `Object#__send__` or `Object#public_send` to ' \
18
- '`send`.'
17
+ MSG = 'Prefer `Object#__send__` or `Object#public_send` to `send`.'
19
18
  RESTRICT_ON_SEND = %i[send].freeze
20
19
 
21
20
  def on_send(node)
@@ -109,14 +109,15 @@ module RuboCop
109
109
  extend AutoCorrector
110
110
 
111
111
  FAIL_MSG = 'Use `fail` instead of `raise` to signal exceptions.'
112
- RAISE_MSG = 'Use `raise` instead of `fail` to ' \
113
- 'rethrow exceptions.'
112
+ RAISE_MSG = 'Use `raise` instead of `fail` to rethrow exceptions.'
114
113
 
115
114
  RESTRICT_ON_SEND = %i[raise fail].freeze
116
115
 
116
+ # @!method kernel_call?(node, name)
117
117
  def_node_matcher :kernel_call?, '(send (const {nil? cbase} :Kernel) %1 ...)'
118
- def_node_search :custom_fail_methods,
119
- '{(def :fail ...) (defs _ :fail ...)}'
118
+
119
+ # @!method custom_fail_methods(node)
120
+ def_node_search :custom_fail_methods, '{(def :fail ...) (defs _ :fail ...)}'
120
121
 
121
122
  def on_new_investigation
122
123
  ast = processed_source.ast
@@ -201,9 +202,7 @@ module RuboCop
201
202
  end
202
203
 
203
204
  def allow(method_name, node)
204
- each_command_or_kernel_call(method_name, node) do |send_node|
205
- ignore_node(send_node)
206
- end
205
+ each_command_or_kernel_call(method_name, node) { |send_node| ignore_node(send_node) }
207
206
  end
208
207
 
209
208
  def each_command_or_kernel_call(method_name, node)