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
@@ -20,8 +20,7 @@ module RuboCop
20
20
  include FirstElementLineBreak
21
21
  extend AutoCorrector
22
22
 
23
- MSG = 'Add a line break before the first element of a ' \
24
- 'multi-line hash.'
23
+ MSG = 'Add a line break before the first element of a multi-line hash.'
25
24
 
26
25
  def on_hash(node)
27
26
  # node.loc.begin tells us whether the hash opens with a {
@@ -24,8 +24,7 @@ module RuboCop
24
24
  include FirstElementLineBreak
25
25
  extend AutoCorrector
26
26
 
27
- MSG = 'Add a line break before the first argument of a ' \
28
- 'multi-line method argument list.'
27
+ MSG = 'Add a line break before the first argument of a multi-line method argument list.'
29
28
 
30
29
  def on_send(node)
31
30
  args = node.arguments.dup
@@ -30,8 +30,7 @@ module RuboCop
30
30
  include FirstElementLineBreak
31
31
  extend AutoCorrector
32
32
 
33
- MSG = 'Add a line break before the first parameter of a ' \
34
- 'multi-line method parameter list.'
33
+ MSG = 'Add a line break before the first parameter of a multi-line method parameter list.'
35
34
 
36
35
  def on_def(node)
37
36
  check_method_line_break(node, node.arguments)
@@ -185,7 +185,9 @@ module RuboCop
185
185
  SeparatorAlignment => 'Align the separators of a hash ' \
186
186
  'literal if they span more than one line.',
187
187
  TableAlignment => 'Align the keys and values of a hash ' \
188
- 'literal if they span more than one line.' }.freeze
188
+ 'literal if they span more than one line.',
189
+ KeywordSplatAlignment => 'Align keyword splats with the ' \
190
+ 'rest of the hash if it spans more than one line.' }.freeze
189
191
 
190
192
  def on_send(node)
191
193
  return if double_splat?(node)
@@ -193,22 +195,19 @@ module RuboCop
193
195
 
194
196
  last_argument = node.last_argument
195
197
 
196
- return unless last_argument.hash_type? &&
197
- ignore_hash_argument?(last_argument)
198
+ return unless last_argument.hash_type? && ignore_hash_argument?(last_argument)
198
199
 
199
200
  ignore_node(last_argument)
200
201
  end
201
202
  alias on_super on_send
202
203
  alias on_yield on_send
203
204
 
204
- def on_hash(node) # rubocop:todo Metrics/CyclomaticComplexity
205
- return if ignored_node?(node)
206
- return if node.pairs.empty? || node.single_line?
205
+ def on_hash(node)
206
+ return if autocorrect_incompatible_with_other_cops?(node) || ignored_node?(node) ||
207
+ node.pairs.empty? || node.single_line?
207
208
 
208
- return unless alignment_for_hash_rockets
209
- .any? { |a| a.checkable_layout?(node) } &&
210
- alignment_for_colons
211
- .any? { |a| a.checkable_layout?(node) }
209
+ proc = ->(a) { a.checkable_layout?(node) }
210
+ return unless alignment_for_hash_rockets.any?(proc) && alignment_for_colons.any?(proc)
212
211
 
213
212
  check_pairs(node)
214
213
  end
@@ -217,6 +216,10 @@ module RuboCop
217
216
 
218
217
  private
219
218
 
219
+ def autocorrect_incompatible_with_other_cops?(node)
220
+ enforce_first_argument_with_fixed_indentation? && !node.braces? && node.parent&.call_type?
221
+ end
222
+
220
223
  def reset!
221
224
  self.offences_by = {}
222
225
  self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
@@ -246,7 +249,14 @@ module RuboCop
246
249
  end
247
250
 
248
251
  def add_offences
252
+ kwsplat_offences = offences_by.delete(KeywordSplatAlignment)
253
+ register_offences_with_format(kwsplat_offences, KeywordSplatAlignment)
254
+
249
255
  format, offences = offences_by.min_by { |_, v| v.length }
256
+ register_offences_with_format(offences, format)
257
+ end
258
+
259
+ def register_offences_with_format(offences, format)
250
260
  (offences || []).each do |offence|
251
261
  add_offense(offence, message: MESSAGES[format]) do |corrector|
252
262
  delta = column_deltas[alignment_for(offence).first.class][offence]
@@ -274,7 +284,9 @@ module RuboCop
274
284
  end
275
285
 
276
286
  def alignment_for(pair)
277
- if pair.hash_rocket?
287
+ if pair.kwsplat_type?
288
+ [KeywordSplatAlignment.new]
289
+ elsif pair.hash_rocket?
278
290
  alignment_for_hash_rockets
279
291
  else
280
292
  alignment_for_colons
@@ -282,13 +294,11 @@ module RuboCop
282
294
  end
283
295
 
284
296
  def alignment_for_hash_rockets
285
- @alignment_for_hash_rockets ||=
286
- new_alignment('EnforcedHashRocketStyle')
297
+ @alignment_for_hash_rockets ||= new_alignment('EnforcedHashRocketStyle')
287
298
  end
288
299
 
289
300
  def alignment_for_colons
290
- @alignment_for_colons ||=
291
- new_alignment('EnforcedColonStyle')
301
+ @alignment_for_colons ||= new_alignment('EnforcedColonStyle')
292
302
  end
293
303
 
294
304
  def correct_node(corrector, node, delta)
@@ -356,6 +366,16 @@ module RuboCop
356
366
  def good_alignment?(column_deltas)
357
367
  column_deltas.values.all?(&:zero?)
358
368
  end
369
+
370
+ def enforce_first_argument_with_fixed_indentation?
371
+ return false unless argument_alignment_config['Enabled']
372
+
373
+ argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
374
+ end
375
+
376
+ def argument_alignment_config
377
+ config.for_cop('Layout/ArgumentAlignment')
378
+ end
359
379
  end
360
380
  end
361
381
  end
@@ -132,9 +132,7 @@ module RuboCop
132
132
  end
133
133
 
134
134
  def extract_heredoc_argument(node)
135
- node.arguments.find do |arg_node|
136
- extract_heredoc(arg_node)
137
- end
135
+ node.arguments.find { |arg_node| extract_heredoc(arg_node) }
138
136
  end
139
137
 
140
138
  def extract_heredoc(node)
@@ -234,12 +232,7 @@ module RuboCop
234
232
  def remove_internal_trailing_comma(node, corrector)
235
233
  offset = internal_trailing_comma_offset_from_last_arg(node)
236
234
  last_arg_end_pos = node.children.last.source_range.end_pos
237
- corrector.remove(
238
- range_between(
239
- last_arg_end_pos,
240
- last_arg_end_pos + offset
241
- )
242
- )
235
+ corrector.remove(range_between(last_arg_end_pos, last_arg_end_pos + offset))
243
236
  end
244
237
 
245
238
  def internal_trailing_comma?(node)
@@ -81,10 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def width_message(indentation_width)
84
- format(
85
- WIDTH_MSG,
86
- indentation_width: indentation_width
87
- )
84
+ format(WIDTH_MSG, indentation_width: indentation_width)
88
85
  end
89
86
 
90
87
  def line_too_long?(node)
@@ -126,8 +123,7 @@ module RuboCop
126
123
  body = heredoc_body(node)
127
124
  body_indent_level = indent_level(body)
128
125
  correct_indent_level = base_indent_level(node) + indentation_width
129
- body.gsub(/^[^\S\r\n]{#{body_indent_level}}/,
130
- ' ' * correct_indent_level)
126
+ body.gsub(/^[^\S\r\n]{#{body_indent_level}}/, ' ' * correct_indent_level)
131
127
  end
132
128
 
133
129
  def indented_end(node)
@@ -46,9 +46,7 @@ module RuboCop
46
46
  next unless (range = find_offence(line, lineno))
47
47
  next if in_string_literal?(str_ranges, range)
48
48
 
49
- add_offense(range) do |corrector|
50
- autocorrect(corrector, range)
51
- end
49
+ add_offense(range) { |corrector| autocorrect(corrector, range) }
52
50
  end
53
51
  end
54
52
 
@@ -135,8 +135,7 @@ module RuboCop
135
135
  check_indentation(when_node.loc.keyword, when_node.body)
136
136
  end
137
137
 
138
- check_indentation(case_node.when_branches.last.loc.keyword,
139
- case_node.else_branch)
138
+ check_indentation(case_node.when_branches.last.loc.keyword, case_node.else_branch)
140
139
  end
141
140
 
142
141
  def on_if(node, base = node)
@@ -314,9 +313,12 @@ module RuboCop
314
313
  check_rescue?(body_node)
315
314
  elsif body_node.ensure_type?
316
315
  block_body, = *body_node
317
- return unless block_body
318
316
 
319
- check_rescue?(block_body) if block_body.rescue_type?
317
+ if block_body&.rescue_type?
318
+ check_rescue?(block_body)
319
+ else
320
+ !block_body.nil?
321
+ end
320
322
  else
321
323
  true
322
324
  end
@@ -41,10 +41,7 @@ module RuboCop
41
41
  return unless token
42
42
  return if token.column.zero?
43
43
 
44
- space_range =
45
- range_with_surrounding_space(range: token.pos,
46
- side: :left,
47
- newlines: false)
44
+ space_range = range_with_surrounding_space(range: token.pos, side: :left, newlines: false)
48
45
  # If the file starts with a byte order mark (BOM), the column can be
49
46
  # non-zero, but then we find out here if there's no space to the left
50
47
  # of the first token.
@@ -122,8 +122,7 @@ module RuboCop
122
122
  range = breakable_block_range(block_node)
123
123
  pos = range.begin_pos + 1
124
124
 
125
- breakable_range_by_line_index[line_index] =
126
- range_between(pos, pos + 1)
125
+ breakable_range_by_line_index[line_index] = range_between(pos, pos + 1)
127
126
  end
128
127
 
129
128
  def breakable_block_range(block_node)
@@ -171,11 +170,7 @@ module RuboCop
171
170
  end
172
171
  return check_uri_line(line, line_index) if allow_uri?
173
172
 
174
- register_offense(
175
- excess_range(nil, line, line_index),
176
- line,
177
- line_index
178
- )
173
+ register_offense(excess_range(nil, line, line_index), line, line_index)
179
174
  end
180
175
 
181
176
  def ignored_line?(line, line_index)
@@ -242,9 +237,7 @@ module RuboCop
242
237
  end
243
238
 
244
239
  def line_in_heredoc?(line_number)
245
- heredocs.any? do |range, _delimiter|
246
- range.cover?(line_number)
247
- end
240
+ heredocs.any? { |range, _delimiter| range.cover?(line_number) }
248
241
  end
249
242
 
250
243
  def check_directive_line(line, line_index)
@@ -266,11 +259,7 @@ module RuboCop
266
259
  uri_range = find_excessive_uri_range(line)
267
260
  return if uri_range && allowed_uri_position?(line, uri_range)
268
261
 
269
- register_offense(
270
- excess_range(uri_range, line, line_index),
271
- line,
272
- line_index
273
- )
262
+ register_offense(excess_range(uri_range, line, line_index), line, line_index)
274
263
  end
275
264
  end
276
265
  end
@@ -24,8 +24,7 @@ module RuboCop
24
24
  include MultilineElementLineBreaks
25
25
  extend AutoCorrector
26
26
 
27
- MSG = 'Each item in a multi-line array must start ' \
28
- 'on a separate line.'
27
+ MSG = 'Each item in a multi-line array must start on a separate line.'
29
28
 
30
29
  def on_array(node)
31
30
  check_line_breaks(node, node.children)
@@ -52,17 +52,14 @@ module RuboCop
52
52
  include RangeHelp
53
53
  extend AutoCorrector
54
54
 
55
- MSG = 'Block body expression is on the same line as ' \
56
- 'the block start.'
57
- ARG_MSG = 'Block argument expression is not on the same line as the ' \
58
- 'block start.'
55
+ MSG = 'Block body expression is on the same line as the block start.'
56
+ ARG_MSG = 'Block argument expression is not on the same line as the block start.'
59
57
  PIPE_SIZE = '|'.length
60
58
 
61
59
  def on_block(node)
62
60
  return if node.single_line?
63
61
 
64
- unless args_on_beginning_line?(node) ||
65
- line_break_necessary_in_args?(node)
62
+ unless args_on_beginning_line?(node) || line_break_necessary_in_args?(node)
66
63
  add_offense_for_expression(node, node.arguments, ARG_MSG)
67
64
  end
68
65
 
@@ -74,8 +71,7 @@ module RuboCop
74
71
  private
75
72
 
76
73
  def args_on_beginning_line?(node)
77
- !node.arguments? ||
78
- node.loc.begin.line == node.arguments.loc.last_line
74
+ !node.arguments? || node.loc.begin.line == node.arguments.loc.last_line
79
75
  end
80
76
 
81
77
  def line_break_necessary_in_args?(node)
@@ -101,9 +97,7 @@ module RuboCop
101
97
  expression = expr.source_range
102
98
  range = range_between(expression.begin_pos, expression.end_pos)
103
99
 
104
- add_offense(range, message: msg) do |corrector|
105
- autocorrect(corrector, node)
106
- end
100
+ add_offense(range, message: msg) { |corrector| autocorrect(corrector, node) }
107
101
  end
108
102
 
109
103
  def autocorrect(corrector, node)
@@ -128,8 +122,7 @@ module RuboCop
128
122
  newlines: false
129
123
  ).end_pos
130
124
  range = range_between(node.loc.begin.end.begin_pos, end_pos)
131
- corrector.replace(range,
132
- " |#{block_arg_string(node, node.arguments)}|")
125
+ corrector.replace(range, " |#{block_arg_string(node, node.arguments)}|")
133
126
  end
134
127
 
135
128
  def autocorrect_body(corrector, node, block_body)
@@ -141,8 +134,7 @@ module RuboCop
141
134
 
142
135
  block_start_col = node.source_range.column
143
136
 
144
- corrector.insert_before(first_node,
145
- "\n #{' ' * block_start_col}")
137
+ corrector.insert_before(first_node, "\n #{' ' * block_start_col}")
146
138
  end
147
139
 
148
140
  def block_arg_string(node, args)
@@ -24,8 +24,7 @@ module RuboCop
24
24
  include MultilineElementLineBreaks
25
25
  extend AutoCorrector
26
26
 
27
- MSG = 'Each key in a multi-line hash must start on a ' \
28
- 'separate line.'
27
+ MSG = 'Each key in a multi-line hash must start on a separate line.'
29
28
 
30
29
  def on_hash(node)
31
30
  # This cop only deals with hashes wrapped by a set of curly
@@ -23,8 +23,7 @@ module RuboCop
23
23
  include MultilineElementLineBreaks
24
24
  extend AutoCorrector
25
25
 
26
- MSG = 'Each argument in a multi-line method call must start ' \
27
- 'on a separate line.'
26
+ MSG = 'Each argument in a multi-line method call must start on a separate line.'
28
27
 
29
28
  def on_send(node)
30
29
  return if node.method?(:[]=)
@@ -72,6 +72,18 @@ module RuboCop
72
72
  send_node.loc.dot # Only check method calls with dot operator
73
73
  end
74
74
 
75
+ def right_hand_side(send_node)
76
+ dot = send_node.loc.dot
77
+ selector = send_node.loc.selector
78
+ if send_node.dot? && selector && dot.line == selector.line
79
+ dot.join(selector)
80
+ elsif selector
81
+ selector
82
+ elsif send_node.implicit_call?
83
+ dot.join(send_node.loc.begin)
84
+ end
85
+ end
86
+
75
87
  def offending_range(node, lhs, rhs, given_style)
76
88
  return false unless begins_its_line?(rhs)
77
89
  return false if not_for_this_cop?(node)
@@ -140,8 +152,7 @@ module RuboCop
140
152
  def alignment_base(node, rhs, given_style)
141
153
  case given_style
142
154
  when :aligned
143
- semantic_alignment_base(node, rhs) ||
144
- syntactic_alignment_base(node, rhs)
155
+ semantic_alignment_base(node, rhs) || syntactic_alignment_base(node, rhs)
145
156
  when :indented
146
157
  nil
147
158
  when :indented_relative_to_receiver
@@ -158,15 +169,11 @@ module RuboCop
158
169
 
159
170
  # a = b
160
171
  # .c
161
- part_of_assignment_rhs(lhs, rhs) do |base|
162
- return assignment_rhs(base).source_range
163
- end
172
+ part_of_assignment_rhs(lhs, rhs) { |base| return assignment_rhs(base).source_range }
164
173
 
165
174
  # a + b
166
175
  # .c
167
- operation_rhs(lhs) do |base|
168
- return base.source_range
169
- end
176
+ operation_rhs(lhs) { |base| return base.source_range }
170
177
  end
171
178
 
172
179
  # a.b
@@ -216,8 +223,7 @@ module RuboCop
216
223
  end
217
224
 
218
225
  def operator_rhs?(node, receiver)
219
- node.operator_method? && node.arguments? &&
220
- within_node?(receiver, node.first_argument)
226
+ node.operator_method? && node.arguments? && within_node?(receiver, node.first_argument)
221
227
  end
222
228
  end
223
229
  end
@@ -118,6 +118,10 @@ module RuboCop
118
118
  "spaces for indenting #{what} spanning multiple lines."
119
119
  end
120
120
  end
121
+
122
+ def right_hand_side(send_node)
123
+ send_node.first_argument.source_range
124
+ end
121
125
  end
122
126
  end
123
127
  end