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
@@ -143,8 +143,7 @@ module RuboCop
143
143
 
144
144
  def expected_column(left_paren, elements)
145
145
  if line_break_after_left_paren?(left_paren, elements)
146
- source_indent = processed_source
147
- .line_indentation(first_argument_line(elements))
146
+ source_indent = processed_source.line_indentation(first_argument_line(elements))
148
147
  new_indent = source_indent - indentation_width
149
148
 
150
149
  new_indent.negative? ? 0 : new_indent
@@ -156,17 +155,11 @@ module RuboCop
156
155
  end
157
156
 
158
157
  def all_elements_aligned?(elements)
159
- elements
160
- .map { |e| e.loc.column }
161
- .uniq
162
- .count == 1
158
+ elements.map { |e| e.loc.column }.uniq.count == 1
163
159
  end
164
160
 
165
161
  def first_argument_line(elements)
166
- elements
167
- .first
168
- .loc
169
- .first_line
162
+ elements.first.loc.first_line
170
163
  end
171
164
 
172
165
  def correct_column_candidates(node, left_paren)
@@ -181,11 +174,7 @@ module RuboCop
181
174
  if correct_column == left_paren.column
182
175
  MSG_ALIGN
183
176
  else
184
- format(
185
- MSG_INDENT,
186
- expected: correct_column,
187
- actual: right_paren.column
188
- )
177
+ format(MSG_INDENT, expected: correct_column, actual: right_paren.column)
189
178
  end
190
179
  end
191
180
 
@@ -100,11 +100,7 @@ module RuboCop
100
100
  end
101
101
 
102
102
  def message(column, correct_comment_indentation)
103
- format(
104
- MSG,
105
- column: column,
106
- correct_comment_indentation: correct_comment_indentation
107
- )
103
+ format(MSG, column: column, correct_comment_indentation: correct_comment_indentation)
108
104
  end
109
105
 
110
106
  def own_line_comment?(comment)
@@ -51,12 +51,8 @@ module RuboCop
51
51
  method_def = node.each_descendant(:def, :defs).first
52
52
  expr = node.source_range
53
53
 
54
- line_start = range_between(expr.begin_pos,
55
- method_def.loc.keyword.end_pos)
56
- align_with = {
57
- def: method_def.loc.keyword,
58
- start_of_line: line_start
59
- }
54
+ line_start = range_between(expr.begin_pos, method_def.loc.keyword.end_pos)
55
+ align_with = { def: method_def.loc.keyword, start_of_line: line_start }
60
56
 
61
57
  check_end_kw_alignment(method_def, align_with)
62
58
  ignore_node(method_def) # Don't check the same `end` again.
@@ -35,9 +35,7 @@ module RuboCop
35
35
  dot = node.loc.dot
36
36
  message = message(dot)
37
37
 
38
- add_offense(dot, message: message) do |corrector|
39
- autocorrect(corrector, dot, node)
40
- end
38
+ add_offense(dot, message: message) { |corrector| autocorrect(corrector, dot, node) }
41
39
  end
42
40
  alias on_csend on_send
43
41
 
@@ -63,9 +63,7 @@ module RuboCop
63
63
  def on_case_match(node)
64
64
  return unless node.else?
65
65
 
66
- check_alignment(
67
- node.in_pattern_branches.last.loc.keyword, node.loc.else
68
- )
66
+ check_alignment(node.in_pattern_branches.last.loc.keyword, node.loc.else)
69
67
  end
70
68
 
71
69
  private
@@ -75,9 +75,7 @@ module RuboCop
75
75
  processed_source.comments.each do |comment|
76
76
  next unless empty_comment_only?(comment_text(comment))
77
77
 
78
- add_offense(comment) do |corrector|
79
- autocorrect(corrector, comment)
80
- end
78
+ add_offense(comment) { |corrector| autocorrect(corrector, comment) }
81
79
  end
82
80
  end
83
81
  end
@@ -99,19 +97,16 @@ module RuboCop
99
97
  def autocorrect(corrector, node)
100
98
  previous_token = previous_token(node)
101
99
  range = if previous_token && node.loc.line == previous_token.line
102
- range_with_surrounding_space(range: node.loc.expression,
103
- newlines: false)
100
+ range_with_surrounding_space(range: node.loc.expression, newlines: false)
104
101
  else
105
- range_by_whole_lines(node.loc.expression,
106
- include_final_newline: true)
102
+ range_by_whole_lines(node.loc.expression, include_final_newline: true)
107
103
  end
108
104
 
109
105
  corrector.remove(range)
110
106
  end
111
107
 
112
108
  def concat_consecutive_comments(comments)
113
- consecutive_comments =
114
- comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
109
+ consecutive_comments = comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
115
110
 
116
111
  consecutive_comments.map do |chunk|
117
112
  joined_text = chunk.map { |c| comment_text(c) }.join
@@ -142,9 +137,7 @@ module RuboCop
142
137
  end
143
138
 
144
139
  def current_token(comment)
145
- processed_source.find_token do |token|
146
- token.pos == comment.loc.expression
147
- end
140
+ processed_source.find_token { |token| token.pos == comment.loc.expression }
148
141
  end
149
142
 
150
143
  def previous_token(node)
@@ -47,18 +47,15 @@ module RuboCop
47
47
 
48
48
  if node.modifier_form? && last_argument_is_heredoc?(node)
49
49
  heredoc_node = last_heredoc_argument(node)
50
-
51
- return if next_line_empty?(heredoc_line(node, heredoc_node))
50
+ return if next_line_empty_or_enable_directive_comment?(heredoc_line(node, heredoc_node))
52
51
 
53
52
  add_offense(heredoc_node.loc.heredoc_end) do |corrector|
54
53
  autocorrect(corrector, heredoc_node)
55
54
  end
56
55
  else
57
- return if next_line_empty?(node.last_line)
56
+ return if next_line_empty_or_enable_directive_comment?(node.last_line)
58
57
 
59
- add_offense(offense_location(node)) do |corrector|
60
- autocorrect(corrector, node)
61
- end
58
+ add_offense(offense_location(node)) { |corrector| autocorrect(corrector, node) }
62
59
  end
63
60
  end
64
61
 
@@ -71,6 +68,11 @@ module RuboCop
71
68
  range_by_whole_lines(node.source_range)
72
69
  end
73
70
 
71
+ next_line = node_range.last_line + 1
72
+ if next_line_enable_directive_comment?(next_line)
73
+ node_range = processed_source.comment_at_line(next_line)
74
+ end
75
+
74
76
  corrector.insert_after(node_range, "\n")
75
77
  end
76
78
 
@@ -85,10 +87,23 @@ module RuboCop
85
87
  node.if_branch&.guard_clause?
86
88
  end
87
89
 
90
+ def next_line_empty_or_enable_directive_comment?(line)
91
+ return true if next_line_empty?(line)
92
+
93
+ next_line = line + 1
94
+ next_line_enable_directive_comment?(next_line) && next_line_empty?(next_line)
95
+ end
96
+
88
97
  def next_line_empty?(line)
89
98
  processed_source[line].blank?
90
99
  end
91
100
 
101
+ def next_line_enable_directive_comment?(line)
102
+ return false unless (comment = processed_source.comment_at_line(line))
103
+
104
+ DirectiveComment.new(comment).enabled?
105
+ end
106
+
92
107
  def next_line_rescue_or_ensure?(node)
93
108
  parent = node.parent
94
109
  parent.nil? || parent.rescue_type? || parent.ensure_type?
@@ -137,8 +152,7 @@ module RuboCop
137
152
 
138
153
  def heredoc_line(node, heredoc_node)
139
154
  heredoc_body = heredoc_node.loc.heredoc_body
140
- num_of_heredoc_lines =
141
- heredoc_body.last_line - heredoc_body.first_line
155
+ num_of_heredoc_lines = heredoc_body.last_line - heredoc_body.first_line
142
156
 
143
157
  node.last_line + num_of_heredoc_lines + END_OF_HEREDOC_LINE
144
158
  end
@@ -111,8 +111,7 @@ module RuboCop
111
111
 
112
112
  return if line_count_allowed?(count)
113
113
  return if multiple_blank_lines_groups?(*nodes)
114
- return if nodes.all?(&:single_line?) &&
115
- cop_config['AllowAdjacentOneLineDefs']
114
+ return if nodes.all?(&:single_line?) && cop_config['AllowAdjacentOneLineDefs']
116
115
 
117
116
  correction_node = nodes.last
118
117
  location = correction_node.loc.keyword.join(correction_node.loc.name)
@@ -160,10 +159,7 @@ module RuboCop
160
159
  def message(node, count: nil)
161
160
  type = node_type(node)
162
161
 
163
- format(MSG,
164
- type: type,
165
- expected: expected_lines,
166
- actual: count)
162
+ format(MSG, type: type, expected: expected_lines, actual: count)
167
163
  end
168
164
 
169
165
  def expected_lines
@@ -29,9 +29,7 @@ module RuboCop
29
29
  return if processed_source.tokens.empty?
30
30
 
31
31
  lines = Set.new
32
- processed_source.each_token do |token|
33
- lines << token.line
34
- end
32
+ processed_source.each_token { |token| lines << token.line }
35
33
 
36
34
  each_extra_empty_line(lines.sort) do |range|
37
35
  add_offense(range) do |corrector|
@@ -46,8 +46,7 @@ module RuboCop
46
46
  extend AutoCorrector
47
47
 
48
48
  MSG_AFTER = 'Keep a blank line after `%<modifier>s`.'
49
- MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after ' \
50
- '`%<modifier>s`.'
49
+ MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after `%<modifier>s`.'
51
50
 
52
51
  MSG_BEFORE_FOR_ONLY_BEFORE = 'Keep a blank line before `%<modifier>s`.'
53
52
  MSG_AFTER_FOR_ONLY_BEFORE = 'Remove a blank line after `%<modifier>s`.'
@@ -73,10 +72,8 @@ module RuboCop
73
72
  end
74
73
 
75
74
  def on_sclass(node)
76
- @class_or_module_def_first_line =
77
- node.identifier.source_range.first_line
78
- @class_or_module_def_last_line =
79
- node.source_range.last_line
75
+ @class_or_module_def_first_line = node.identifier.source_range.first_line
76
+ @class_or_module_def_last_line = node.source_range.last_line
80
77
  end
81
78
 
82
79
  def on_block(node)
@@ -133,19 +130,14 @@ module RuboCop
133
130
  end
134
131
 
135
132
  def previous_line_ignoring_comments(processed_source, send_line)
136
- processed_source[0..send_line - 2].reverse.find do |line|
137
- !comment_line?(line)
138
- end
133
+ processed_source[0..send_line - 2].reverse.find { |line| !comment_line?(line) }
139
134
  end
140
135
 
141
136
  def previous_line_empty?(send_line)
142
- previous_line = previous_line_ignoring_comments(processed_source,
143
- send_line)
137
+ previous_line = previous_line_ignoring_comments(processed_source, send_line)
144
138
  return true unless previous_line
145
139
 
146
- block_start?(send_line) ||
147
- class_def?(send_line) ||
148
- previous_line.blank?
140
+ block_start?(send_line) || class_def?(send_line) || previous_line.blank?
149
141
  end
150
142
 
151
143
  def next_line_empty?(last_send_line)
@@ -155,8 +147,7 @@ module RuboCop
155
147
  end
156
148
 
157
149
  def empty_lines_around?(node)
158
- previous_line_empty?(node.first_line) &&
159
- next_line_empty?(node.last_line)
150
+ previous_line_empty?(node.first_line) && next_line_empty?(node.last_line)
160
151
  end
161
152
 
162
153
  def class_def?(line)
@@ -193,8 +184,7 @@ module RuboCop
193
184
  def message_for_around_style(node)
194
185
  send_line = node.first_line
195
186
 
196
- if block_start?(send_line) ||
197
- class_def?(send_line)
187
+ if block_start?(send_line) || class_def?(send_line)
198
188
  format(MSG_AFTER, modifier: node.loc.selector.source)
199
189
  else
200
190
  format(MSG_BEFORE_AND_AFTER, modifier: node.loc.selector.source)
@@ -84,10 +84,7 @@ module RuboCop
84
84
  # below the keyword
85
85
  check_line(style, line, message('after', keyword), &:empty?)
86
86
  # above the keyword
87
- check_line(style,
88
- line - 2,
89
- message('before', keyword),
90
- &:empty?)
87
+ check_line(style, line - 2, message('before', keyword), &:empty?)
91
88
  end
92
89
  end
93
90
 
@@ -113,10 +110,7 @@ module RuboCop
113
110
  end
114
111
 
115
112
  def keyword_locations_in_rescue(node)
116
- [
117
- node.loc.else,
118
- *node.resbody_branches.map { |body| body.loc.keyword }
119
- ].compact
113
+ [node.loc.else, *node.resbody_branches.map { |body| body.loc.keyword }].compact
120
114
  end
121
115
 
122
116
  def keyword_locations_in_ensure(node)
@@ -168,8 +168,7 @@ module RuboCop
168
168
  return node.parent if node.case_type? && node.argument?
169
169
 
170
170
  assignment = node.ancestors.find(&:assignment_or_similar?)
171
- if assignment && !line_break_before_keyword?(assignment.source_range,
172
- node)
171
+ if assignment && !line_break_before_keyword?(assignment.source_range, node)
173
172
  assignment
174
173
  else
175
174
  # Fall back to 'keyword' style if this node is not on the RHS of an
@@ -65,7 +65,7 @@ module RuboCop
65
65
 
66
66
  # If there is no LF on the last line, we don't care if there's no CR.
67
67
  def unimportant_missing_cr?(index, last_line, line)
68
- style == :crlf && index == last_line - 1 && !/\n$/.match?(line)
68
+ style == :crlf && index == last_line - 1 && !line.end_with?("\n")
69
69
  end
70
70
 
71
71
  def offense_message(line)
@@ -34,8 +34,7 @@ module RuboCop
34
34
  include RangeHelp
35
35
 
36
36
  MSG_UNNECESSARY = 'Unnecessary spacing detected.'
37
- MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s ' \
38
- 'assignment.'
37
+ MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s assignment.'
39
38
 
40
39
  def on_new_investigation
41
40
  return if processed_source.blank?
@@ -81,15 +80,12 @@ module RuboCop
81
80
  end
82
81
 
83
82
  def check_other(token1, token2, ast)
84
- return false if allow_for_trailing_comments? &&
85
- token2.text.start_with?('#')
83
+ return false if allow_for_trailing_comments? && token2.text.start_with?('#')
86
84
 
87
85
  extra_space_range(token1, token2) do |range|
88
86
  next if ignored_range?(ast, range.begin_pos)
89
87
 
90
- add_offense(range, message: MSG_UNNECESSARY) do |corrector|
91
- corrector.remove(range)
92
- end
88
+ add_offense(range, message: MSG_UNNECESSARY) { |corrector| corrector.remove(range) }
93
89
  end
94
90
  end
95
91
 
@@ -120,8 +120,7 @@ module RuboCop
120
120
  check_first(first_elem, left_bracket, left_parenthesis, 0)
121
121
  end
122
122
 
123
- check_right_bracket(array_node.loc.end, left_bracket,
124
- left_parenthesis)
123
+ check_right_bracket(array_node.loc.end, left_bracket, left_parenthesis)
125
124
  end
126
125
 
127
126
  def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
@@ -21,8 +21,7 @@ module RuboCop
21
21
  include FirstElementLineBreak
22
22
  extend AutoCorrector
23
23
 
24
- MSG = 'Add a line break before the first element of a ' \
25
- 'multi-line array.'
24
+ MSG = 'Add a line break before the first element of a multi-line array.'
26
25
 
27
26
  def on_array(node)
28
27
  return if !node.loc.begin && !assignment_on_same_line?(node)
@@ -91,6 +91,8 @@ module RuboCop
91
91
  end
92
92
 
93
93
  def on_send(node)
94
+ return if enforce_first_argument_with_fixed_indentation?
95
+
94
96
  each_argument_node(node, :hash) do |hash_node, left_parenthesis|
95
97
  check(hash_node, left_parenthesis)
96
98
  end
@@ -117,8 +119,7 @@ module RuboCop
117
119
  return if first_pair.first_line == left_brace.line
118
120
 
119
121
  if separator_style?(first_pair)
120
- check_based_on_longest_key(hash_node, left_brace,
121
- left_parenthesis)
122
+ check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
122
123
  else
123
124
  check_first(first_pair, left_brace, left_parenthesis, 0)
124
125
  end
@@ -148,9 +149,7 @@ module RuboCop
148
149
  end
149
150
 
150
151
  def check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
151
- key_lengths = hash_node.keys.map do |key|
152
- key.source_range.length
153
- end
152
+ key_lengths = hash_node.keys.map { |key| key.source_range.length }
154
153
  check_first(hash_node.pairs.first, left_brace, left_parenthesis,
155
154
  key_lengths.max - key_lengths.first)
156
155
  end
@@ -185,6 +184,16 @@ module RuboCop
185
184
  'where the left brace is.'
186
185
  end
187
186
  end
187
+
188
+ def enforce_first_argument_with_fixed_indentation?
189
+ return false unless argument_alignment_config['Enabled']
190
+
191
+ argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
192
+ end
193
+
194
+ def argument_alignment_config
195
+ config.for_cop('Layout/ArgumentAlignment')
196
+ end
188
197
  end
189
198
  end
190
199
  end