rubocop 1.9.1 → 1.22.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (560) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -14
  3. data/assets/output.html.erb +1 -1
  4. data/config/default.yml +326 -73
  5. data/config/obsoletion.yml +4 -0
  6. data/exe/rubocop +1 -3
  7. data/lib/rubocop/cached_data.rb +1 -3
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  10. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  11. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  12. data/lib/rubocop/cli/command/suggest_extensions.rb +6 -5
  13. data/lib/rubocop/cli.rb +21 -5
  14. data/lib/rubocop/comment_config.rb +45 -101
  15. data/lib/rubocop/config.rb +16 -26
  16. data/lib/rubocop/config_loader.rb +11 -15
  17. data/lib/rubocop/config_loader_resolver.rb +44 -21
  18. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  19. data/lib/rubocop/config_store.rb +1 -2
  20. data/lib/rubocop/config_validator.rb +37 -21
  21. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  22. data/lib/rubocop/cop/badge.rb +1 -2
  23. data/lib/rubocop/cop/base.rb +13 -11
  24. data/lib/rubocop/cop/bundler/duplicated_gem.rb +4 -4
  25. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -10
  26. data/lib/rubocop/cop/bundler/gem_filename.rb +103 -0
  27. data/lib/rubocop/cop/bundler/gem_version.rb +133 -0
  28. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +46 -21
  29. data/lib/rubocop/cop/bundler/ordered_gems.rb +5 -16
  30. data/lib/rubocop/cop/commissioner.rb +2 -8
  31. data/lib/rubocop/cop/cop.rb +4 -18
  32. data/lib/rubocop/cop/corrector.rb +5 -8
  33. data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
  34. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  35. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  36. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +2 -2
  37. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  38. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  39. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +11 -12
  40. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  41. data/lib/rubocop/cop/correctors/require_library_corrector.rb +23 -0
  42. data/lib/rubocop/cop/documentation.rb +1 -1
  43. data/lib/rubocop/cop/gemspec/date_assignment.rb +57 -0
  44. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
  45. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +5 -16
  46. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -23
  47. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
  48. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  49. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  50. data/lib/rubocop/cop/generator.rb +18 -15
  51. data/lib/rubocop/cop/internal_affairs/example_description.rb +8 -5
  52. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +34 -0
  53. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +60 -0
  54. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
  55. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
  56. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
  57. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
  58. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
  59. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
  60. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
  61. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  62. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
  63. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
  64. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +71 -0
  65. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
  66. data/lib/rubocop/cop/internal_affairs.rb +4 -0
  67. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
  68. data/lib/rubocop/cop/layout/argument_alignment.rb +36 -19
  69. data/lib/rubocop/cop/layout/array_alignment.rb +9 -8
  70. data/lib/rubocop/cop/layout/assignment_indentation.rb +9 -8
  71. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  72. data/lib/rubocop/cop/layout/block_alignment.rb +12 -23
  73. data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
  74. data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
  75. data/lib/rubocop/cop/layout/class_structure.rb +12 -12
  76. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +24 -30
  77. data/lib/rubocop/cop/layout/comment_indentation.rb +18 -22
  78. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  79. data/lib/rubocop/cop/layout/dot_position.rb +42 -9
  80. data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
  81. data/lib/rubocop/cop/layout/empty_comment.rb +6 -13
  82. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +44 -23
  83. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  84. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  85. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  86. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +9 -12
  87. data/lib/rubocop/cop/layout/end_alignment.rb +10 -4
  88. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  89. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -9
  90. data/lib/rubocop/cop/layout/first_argument_indentation.rb +12 -6
  91. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +13 -11
  92. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  93. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +37 -21
  94. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  95. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  96. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  97. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +8 -7
  98. data/lib/rubocop/cop/layout/hash_alignment.rb +58 -31
  99. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -11
  100. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -13
  101. data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
  102. data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
  103. data/lib/rubocop/cop/layout/indentation_width.rb +34 -13
  104. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  105. data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
  106. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +141 -0
  107. data/lib/rubocop/cop/layout/line_length.rb +13 -22
  108. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +6 -6
  109. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  110. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +29 -3
  111. data/lib/rubocop/cop/layout/multiline_block_layout.rb +10 -18
  112. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +6 -6
  113. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  114. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +4 -2
  115. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +6 -6
  116. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
  117. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +6 -6
  118. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -8
  119. data/lib/rubocop/cop/layout/parameter_alignment.rb +8 -7
  120. data/lib/rubocop/cop/layout/redundant_line_break.rb +140 -0
  121. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +26 -16
  122. data/lib/rubocop/cop/layout/single_line_block_chain.rb +64 -0
  123. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  124. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  125. data/lib/rubocop/cop/layout/space_after_not.rb +1 -0
  126. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  127. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -2
  128. data/lib/rubocop/cop/layout/space_around_keyword.rb +33 -8
  129. data/lib/rubocop/cop/layout/space_around_operators.rb +23 -11
  130. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -3
  131. data/lib/rubocop/cop/layout/space_before_brackets.rb +3 -4
  132. data/lib/rubocop/cop/layout/space_before_comment.rb +3 -5
  133. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  134. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  135. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  136. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  137. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +6 -11
  138. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  139. data/lib/rubocop/cop/layout/space_inside_parens.rb +78 -32
  140. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  141. data/lib/rubocop/cop/layout/trailing_whitespace.rb +24 -1
  142. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  143. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  144. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  145. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  146. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +111 -0
  147. data/lib/rubocop/cop/lint/ambiguous_range.rb +105 -0
  148. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +5 -2
  149. data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -5
  150. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
  151. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +18 -5
  152. data/lib/rubocop/cop/lint/boolean_symbol.rb +7 -2
  153. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
  154. data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
  155. data/lib/rubocop/cop/lint/debugger.rb +59 -15
  156. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  157. data/lib/rubocop/cop/lint/deprecated_constants.rb +5 -4
  158. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +16 -9
  159. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +24 -1
  160. data/lib/rubocop/cop/lint/duplicate_branch.rb +4 -4
  161. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  162. data/lib/rubocop/cop/lint/duplicate_methods.rb +14 -12
  163. data/lib/rubocop/cop/lint/duplicate_require.rb +3 -2
  164. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  165. data/lib/rubocop/cop/lint/else_layout.rb +12 -10
  166. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  167. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  168. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  169. data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
  170. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  171. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  172. data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -7
  173. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  174. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
  175. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +13 -3
  176. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  177. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  178. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +67 -0
  179. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +4 -7
  180. data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
  181. data/lib/rubocop/cop/lint/interpolation_check.rb +8 -11
  182. data/lib/rubocop/cop/lint/literal_as_condition.rb +13 -1
  183. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  184. data/lib/rubocop/cop/lint/loop.rb +5 -5
  185. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +32 -21
  186. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  187. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  188. data/lib/rubocop/cop/lint/multiple_comparison.rb +5 -4
  189. data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
  190. data/lib/rubocop/cop/lint/nested_percent_literal.rb +2 -4
  191. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
  192. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +13 -4
  193. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
  194. data/lib/rubocop/cop/lint/number_conversion.rb +25 -6
  195. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
  196. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +4 -2
  197. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  198. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +18 -3
  199. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  200. data/lib/rubocop/cop/lint/percent_string_array.rb +11 -1
  201. data/lib/rubocop/cop/lint/percent_symbol_array.rb +2 -4
  202. data/lib/rubocop/cop/lint/raise_exception.rb +7 -2
  203. data/lib/rubocop/cop/lint/rand_one.rb +2 -2
  204. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +108 -90
  205. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +5 -0
  206. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  207. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +7 -7
  208. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +10 -10
  209. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
  210. data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
  211. data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -4
  212. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  213. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  214. data/lib/rubocop/cop/lint/require_relative_self_path.rb +50 -0
  215. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  216. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  217. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  218. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +2 -2
  219. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  220. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
  221. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
  222. data/lib/rubocop/cop/lint/shadowed_argument.rb +6 -12
  223. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  224. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -1
  225. data/lib/rubocop/cop/lint/struct_new_override.rb +2 -2
  226. data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
  227. data/lib/rubocop/cop/lint/symbol_conversion.rb +86 -11
  228. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  229. data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
  230. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  231. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  232. data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
  233. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  234. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +8 -3
  235. data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
  236. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
  237. data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
  238. data/lib/rubocop/cop/lint/unreachable_loop.rb +15 -7
  239. data/lib/rubocop/cop/lint/unused_block_argument.rb +10 -8
  240. data/lib/rubocop/cop/lint/unused_method_argument.rb +4 -5
  241. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
  242. data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
  243. data/lib/rubocop/cop/lint/useless_assignment.rb +5 -10
  244. data/lib/rubocop/cop/lint/useless_method_definition.rb +3 -2
  245. data/lib/rubocop/cop/lint/useless_setter_call.rb +9 -7
  246. data/lib/rubocop/cop/lint/useless_times.rb +8 -4
  247. data/lib/rubocop/cop/lint/void.rb +5 -12
  248. data/lib/rubocop/cop/message_annotator.rb +1 -3
  249. data/lib/rubocop/cop/metrics/abc_size.rb +6 -0
  250. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  251. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  252. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  253. data/lib/rubocop/cop/metrics/module_length.rb +3 -6
  254. data/lib/rubocop/cop/metrics/parameter_lists.rb +8 -7
  255. data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -3
  256. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +5 -8
  257. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +8 -6
  258. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -7
  259. data/lib/rubocop/cop/migration/department_name.rb +4 -6
  260. data/lib/rubocop/cop/mixin/alignment.rb +12 -7
  261. data/lib/rubocop/cop/mixin/annotation_comment.rb +57 -34
  262. data/lib/rubocop/cop/mixin/check_line_breakable.rb +29 -4
  263. data/lib/rubocop/cop/mixin/code_length.rb +2 -4
  264. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  265. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  266. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  267. data/lib/rubocop/cop/mixin/def_node.rb +3 -5
  268. data/lib/rubocop/cop/mixin/documentation_comment.rb +8 -8
  269. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
  270. data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
  271. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +2 -5
  272. data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
  273. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  274. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +30 -8
  275. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  276. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
  277. data/lib/rubocop/cop/mixin/hash_transform_method.rb +16 -25
  278. data/lib/rubocop/cop/mixin/heredoc.rb +5 -0
  279. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  280. data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
  281. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  282. data/lib/rubocop/cop/mixin/method_complexity.rb +2 -3
  283. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  284. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +5 -4
  285. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  286. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +13 -42
  287. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +2 -3
  288. data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -2
  289. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +10 -5
  290. data/lib/rubocop/cop/mixin/percent_array.rb +17 -8
  291. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  292. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +14 -12
  293. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +6 -9
  294. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  295. data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
  296. data/lib/rubocop/cop/mixin/require_library.rb +59 -0
  297. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  298. data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -2
  299. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  300. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +3 -4
  301. data/lib/rubocop/cop/mixin/statement_modifier.rb +2 -4
  302. data/lib/rubocop/cop/mixin/string_literals_help.rb +7 -5
  303. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  304. data/lib/rubocop/cop/mixin/trailing_body.rb +2 -3
  305. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  306. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
  307. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  308. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
  309. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -7
  310. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
  311. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  312. data/lib/rubocop/cop/naming/constant_name.rb +3 -1
  313. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  314. data/lib/rubocop/cop/naming/inclusive_language.rb +266 -0
  315. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -5
  316. data/lib/rubocop/cop/naming/method_name.rb +4 -2
  317. data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
  318. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +17 -0
  319. data/lib/rubocop/cop/offense.rb +3 -8
  320. data/lib/rubocop/cop/registry.rb +13 -12
  321. data/lib/rubocop/cop/security/eval.rb +1 -0
  322. data/lib/rubocop/cop/security/io_methods.rb +49 -0
  323. data/lib/rubocop/cop/security/json_load.rb +9 -7
  324. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  325. data/lib/rubocop/cop/security/open.rb +5 -0
  326. data/lib/rubocop/cop/security/yaml_load.rb +5 -0
  327. data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
  328. data/lib/rubocop/cop/style/accessor_grouping.rb +3 -5
  329. data/lib/rubocop/cop/style/alias.rb +6 -12
  330. data/lib/rubocop/cop/style/and_or.rb +8 -1
  331. data/lib/rubocop/cop/style/arguments_forwarding.rb +17 -5
  332. data/lib/rubocop/cop/style/array_coercion.rb +23 -3
  333. data/lib/rubocop/cop/style/array_join.rb +1 -0
  334. data/lib/rubocop/cop/style/ascii_comments.rb +1 -5
  335. data/lib/rubocop/cop/style/attr.rb +2 -3
  336. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  337. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  338. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
  339. data/lib/rubocop/cop/style/block_delimiters.rb +50 -2
  340. data/lib/rubocop/cop/style/case_equality.rb +8 -10
  341. data/lib/rubocop/cop/style/case_like_if.rb +21 -6
  342. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  343. data/lib/rubocop/cop/style/class_and_module_children.rb +42 -10
  344. data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
  345. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  346. data/lib/rubocop/cop/style/collection_compact.rb +10 -8
  347. data/lib/rubocop/cop/style/collection_methods.rb +8 -6
  348. data/lib/rubocop/cop/style/colon_method_call.rb +2 -3
  349. data/lib/rubocop/cop/style/combinable_loops.rb +6 -4
  350. data/lib/rubocop/cop/style/command_literal.rb +4 -9
  351. data/lib/rubocop/cop/style/comment_annotation.rb +57 -30
  352. data/lib/rubocop/cop/style/commented_keyword.rb +16 -16
  353. data/lib/rubocop/cop/style/conditional_assignment.rb +31 -29
  354. data/lib/rubocop/cop/style/constant_visibility.rb +28 -0
  355. data/lib/rubocop/cop/style/copyright.rb +3 -6
  356. data/lib/rubocop/cop/style/date_time.rb +10 -5
  357. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  358. data/lib/rubocop/cop/style/dir.rb +1 -0
  359. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  360. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
  361. data/lib/rubocop/cop/style/documentation.rb +52 -10
  362. data/lib/rubocop/cop/style/documentation_method.rb +1 -0
  363. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -7
  364. data/lib/rubocop/cop/style/double_negation.rb +30 -8
  365. data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
  366. data/lib/rubocop/cop/style/each_with_object.rb +1 -0
  367. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  368. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  369. data/lib/rubocop/cop/style/empty_literal.rb +21 -9
  370. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  371. data/lib/rubocop/cop/style/encoding.rb +26 -15
  372. data/lib/rubocop/cop/style/end_block.rb +1 -2
  373. data/lib/rubocop/cop/style/endless_method.rb +2 -3
  374. data/lib/rubocop/cop/style/eval_with_location.rb +91 -31
  375. data/lib/rubocop/cop/style/even_odd.rb +1 -0
  376. data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
  377. data/lib/rubocop/cop/style/explicit_block_argument.rb +48 -15
  378. data/lib/rubocop/cop/style/exponential_notation.rb +6 -7
  379. data/lib/rubocop/cop/style/float_division.rb +14 -2
  380. data/lib/rubocop/cop/style/format_string.rb +2 -0
  381. data/lib/rubocop/cop/style/format_string_token.rb +2 -4
  382. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +15 -12
  383. data/lib/rubocop/cop/style/global_std_stream.rb +5 -0
  384. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  385. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +11 -0
  386. data/lib/rubocop/cop/style/hash_conversion.rb +133 -0
  387. data/lib/rubocop/cop/style/hash_each_methods.rb +25 -3
  388. data/lib/rubocop/cop/style/hash_except.rb +5 -3
  389. data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
  390. data/lib/rubocop/cop/style/hash_syntax.rb +21 -25
  391. data/lib/rubocop/cop/style/hash_transform_keys.rb +8 -9
  392. data/lib/rubocop/cop/style/hash_transform_values.rb +8 -6
  393. data/lib/rubocop/cop/style/identical_conditional_branches.rb +83 -8
  394. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  395. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +20 -4
  396. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
  397. data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
  398. data/lib/rubocop/cop/style/infinite_loop.rb +6 -8
  399. data/lib/rubocop/cop/style/inverse_methods.rb +14 -9
  400. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  401. data/lib/rubocop/cop/style/lambda.rb +2 -4
  402. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  403. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -13
  404. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +32 -21
  405. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
  406. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  407. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  408. data/lib/rubocop/cop/style/method_def_parentheses.rb +14 -9
  409. data/lib/rubocop/cop/style/min_max.rb +2 -2
  410. data/lib/rubocop/cop/style/missing_else.rb +9 -4
  411. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  412. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  413. data/lib/rubocop/cop/style/mixin_usage.rb +3 -2
  414. data/lib/rubocop/cop/style/module_function.rb +16 -15
  415. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  416. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
  417. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  418. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  419. data/lib/rubocop/cop/style/multiline_when_then.rb +3 -12
  420. data/lib/rubocop/cop/style/multiple_comparison.rb +23 -6
  421. data/lib/rubocop/cop/style/mutable_constant.rb +85 -23
  422. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  423. data/lib/rubocop/cop/style/negated_if_else_condition.rb +24 -2
  424. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  425. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  426. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  427. data/lib/rubocop/cop/style/next.rb +4 -9
  428. data/lib/rubocop/cop/style/nil_comparison.rb +3 -0
  429. data/lib/rubocop/cop/style/nil_lambda.rb +30 -12
  430. data/lib/rubocop/cop/style/non_nil_check.rb +11 -7
  431. data/lib/rubocop/cop/style/not.rb +2 -2
  432. data/lib/rubocop/cop/style/numbered_parameters.rb +46 -0
  433. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +50 -0
  434. data/lib/rubocop/cop/style/numeric_literals.rb +6 -15
  435. data/lib/rubocop/cop/style/numeric_predicate.rb +10 -7
  436. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  437. data/lib/rubocop/cop/style/option_hash.rb +2 -3
  438. data/lib/rubocop/cop/style/optional_arguments.rb +6 -5
  439. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +14 -4
  440. data/lib/rubocop/cop/style/or_assignment.rb +4 -6
  441. data/lib/rubocop/cop/style/parallel_assignment.rb +13 -10
  442. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
  443. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -4
  444. data/lib/rubocop/cop/style/percent_q_literals.rb +3 -4
  445. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  446. data/lib/rubocop/cop/style/preferred_hash_methods.rb +10 -8
  447. data/lib/rubocop/cop/style/proc.rb +2 -2
  448. data/lib/rubocop/cop/style/quoted_symbols.rb +114 -0
  449. data/lib/rubocop/cop/style/raise_args.rb +6 -8
  450. data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
  451. data/lib/rubocop/cop/style/redundant_argument.rb +21 -20
  452. data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
  453. data/lib/rubocop/cop/style/redundant_begin.rb +72 -7
  454. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  455. data/lib/rubocop/cop/style/redundant_condition.rb +4 -8
  456. data/lib/rubocop/cop/style/redundant_conditional.rb +5 -6
  457. data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
  458. data/lib/rubocop/cop/style/redundant_fetch_block.rb +6 -0
  459. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +13 -3
  460. data/lib/rubocop/cop/style/redundant_freeze.rb +6 -6
  461. data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -3
  462. data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -20
  463. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -5
  464. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  465. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  466. data/lib/rubocop/cop/style/redundant_return.rb +6 -4
  467. data/lib/rubocop/cop/style/redundant_self.rb +42 -10
  468. data/lib/rubocop/cop/style/redundant_self_assignment.rb +8 -5
  469. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +83 -0
  470. data/lib/rubocop/cop/style/redundant_sort.rb +56 -25
  471. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
  472. data/lib/rubocop/cop/style/regexp_literal.rb +15 -10
  473. data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
  474. data/lib/rubocop/cop/style/rescue_standard_error.rb +5 -7
  475. data/lib/rubocop/cop/style/return_nil.rb +8 -2
  476. data/lib/rubocop/cop/style/safe_navigation.rb +25 -23
  477. data/lib/rubocop/cop/style/sample.rb +1 -0
  478. data/lib/rubocop/cop/style/select_by_regexp.rb +139 -0
  479. data/lib/rubocop/cop/style/semicolon.rb +32 -24
  480. data/lib/rubocop/cop/style/send.rb +1 -2
  481. data/lib/rubocop/cop/style/signal_exception.rb +6 -7
  482. data/lib/rubocop/cop/style/single_argument_dig.rb +7 -2
  483. data/lib/rubocop/cop/style/single_line_block_params.rb +5 -6
  484. data/lib/rubocop/cop/style/single_line_methods.rb +45 -18
  485. data/lib/rubocop/cop/style/slicing_with_range.rb +14 -0
  486. data/lib/rubocop/cop/style/sole_nested_conditional.rb +35 -7
  487. data/lib/rubocop/cop/style/special_global_vars.rb +33 -20
  488. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  489. data/lib/rubocop/cop/style/static_class.rb +5 -5
  490. data/lib/rubocop/cop/style/stderr_puts.rb +3 -6
  491. data/lib/rubocop/cop/style/string_chars.rb +41 -0
  492. data/lib/rubocop/cop/style/string_concatenation.rb +45 -15
  493. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -0
  494. data/lib/rubocop/cop/style/string_literals.rb +5 -7
  495. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
  496. data/lib/rubocop/cop/style/strip.rb +1 -0
  497. data/lib/rubocop/cop/style/struct_inheritance.rb +15 -0
  498. data/lib/rubocop/cop/style/swap_values.rb +5 -3
  499. data/lib/rubocop/cop/style/symbol_array.rb +3 -3
  500. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  501. data/lib/rubocop/cop/style/symbol_proc.rb +55 -10
  502. data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
  503. data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
  504. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
  505. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +21 -6
  506. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
  507. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  508. data/lib/rubocop/cop/style/trivial_accessors.rb +69 -5
  509. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  510. data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
  511. data/lib/rubocop/cop/style/unpack_first.rb +2 -1
  512. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  513. data/lib/rubocop/cop/style/when_then.rb +4 -2
  514. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  515. data/lib/rubocop/cop/style/word_array.rb +22 -5
  516. data/lib/rubocop/cop/style/yoda_condition.rb +28 -18
  517. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -2
  518. data/lib/rubocop/cop/team.rb +2 -5
  519. data/lib/rubocop/cop/util.rb +29 -16
  520. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  521. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  522. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  523. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  524. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  525. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  526. data/lib/rubocop/cop/variable_force/variable_table.rb +1 -1
  527. data/lib/rubocop/cop/variable_force.rb +6 -15
  528. data/lib/rubocop/cops_documentation_generator.rb +24 -26
  529. data/lib/rubocop/directive_comment.rb +123 -11
  530. data/lib/rubocop/ext/regexp_parser.rb +3 -6
  531. data/lib/rubocop/file_finder.rb +1 -3
  532. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  533. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  534. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +2 -6
  535. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  536. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  537. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  538. data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
  539. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  540. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  541. data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
  542. data/lib/rubocop/magic_comment.rb +45 -16
  543. data/lib/rubocop/name_similarity.rb +1 -1
  544. data/lib/rubocop/options.rb +153 -159
  545. data/lib/rubocop/path_util.rb +1 -3
  546. data/lib/rubocop/rake_task.rb +4 -1
  547. data/lib/rubocop/remote_config.rb +13 -8
  548. data/lib/rubocop/result_cache.rb +8 -15
  549. data/lib/rubocop/rspec/cop_helper.rb +3 -3
  550. data/lib/rubocop/rspec/expect_offense.rb +11 -12
  551. data/lib/rubocop/rspec/parallel_formatter.rb +90 -0
  552. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  553. data/lib/rubocop/rspec/support.rb +1 -0
  554. data/lib/rubocop/runner.rb +9 -17
  555. data/lib/rubocop/target_finder.rb +20 -17
  556. data/lib/rubocop/target_ruby.rb +25 -21
  557. data/lib/rubocop/version.rb +1 -1
  558. data/lib/rubocop.rb +30 -3
  559. metadata +44 -11
  560. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -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)
@@ -41,13 +41,14 @@ module RuboCop
41
41
  # second_param)
42
42
  # 123
43
43
  # end
44
- class FirstParameterIndentation < Cop
44
+ class FirstParameterIndentation < Base
45
45
  include Alignment
46
46
  include ConfigurableEnforcedStyle
47
47
  include MultilineElementIndentation
48
+ extend AutoCorrector
48
49
 
49
50
  MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
50
- 'in method args, relative to %<base_description>s.'
51
+ 'in method args, relative to %<base_description>s.'
51
52
 
52
53
  def on_def(node)
53
54
  return if node.arguments.empty?
@@ -57,12 +58,12 @@ module RuboCop
57
58
  end
58
59
  alias on_defs on_def
59
60
 
60
- def autocorrect(node)
61
- AlignmentCorrector.correct(processed_source, node, @column_delta)
62
- end
63
-
64
61
  private
65
62
 
63
+ def autocorrect(corrector, node)
64
+ AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
65
+ end
66
+
66
67
  def brace_alignment_style
67
68
  :align_parentheses
68
69
  end
@@ -73,7 +74,7 @@ module RuboCop
73
74
  left_parenthesis = def_node.arguments.loc.begin
74
75
  first_elem = def_node.arguments.first
75
76
  return unless first_elem
76
- return if first_elem.source_range.line == left_parenthesis.line
77
+ return if same_line?(first_elem, left_parenthesis)
77
78
 
78
79
  check_first(first_elem, left_parenthesis, nil, 0)
79
80
  end
@@ -180,12 +180,15 @@ module RuboCop
180
180
  include RangeHelp
181
181
  extend AutoCorrector
182
182
 
183
- MESSAGES = { KeyAlignment => 'Align the keys of a hash literal if ' \
184
- 'they span more than one line.',
185
- SeparatorAlignment => 'Align the separators of a hash ' \
186
- 'literal if they span more than one line.',
187
- TableAlignment => 'Align the keys and values of a hash ' \
188
- 'literal if they span more than one line.' }.freeze
183
+ MESSAGES = {
184
+ KeyAlignment => 'Align the keys of a hash literal if they span more than one line.',
185
+ SeparatorAlignment => 'Align the separators of a hash literal if they span more than ' \
186
+ 'one line.',
187
+ TableAlignment => 'Align the keys and values of a hash literal if they span more than ' \
188
+ 'one line.',
189
+ KeywordSplatAlignment => 'Align keyword splats with the rest of the hash if it spans ' \
190
+ 'more than one line.'
191
+ }.freeze
189
192
 
190
193
  def on_send(node)
191
194
  return if double_splat?(node)
@@ -193,32 +196,39 @@ module RuboCop
193
196
 
194
197
  last_argument = node.last_argument
195
198
 
196
- return unless last_argument.hash_type? &&
197
- ignore_hash_argument?(last_argument)
199
+ return unless last_argument.hash_type? && ignore_hash_argument?(last_argument)
198
200
 
199
201
  ignore_node(last_argument)
200
202
  end
201
203
  alias on_super on_send
202
204
  alias on_yield on_send
203
205
 
204
- def on_hash(node) # rubocop:todo Metrics/CyclomaticComplexity
205
- return if ignored_node?(node)
206
- return if node.pairs.empty? || node.single_line?
206
+ def on_hash(node)
207
+ return if autocorrect_incompatible_with_other_cops?(node) || ignored_node?(node) ||
208
+ node.pairs.empty? || node.single_line?
207
209
 
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) }
210
+ proc = ->(a) { a.checkable_layout?(node) }
211
+ return unless alignment_for_hash_rockets.any?(proc) && alignment_for_colons.any?(proc)
212
212
 
213
213
  check_pairs(node)
214
214
  end
215
215
 
216
- attr_accessor :offences_by, :column_deltas
216
+ attr_accessor :offenses_by, :column_deltas
217
217
 
218
218
  private
219
219
 
220
+ def autocorrect_incompatible_with_other_cops?(node)
221
+ return false unless enforce_first_argument_with_fixed_indentation? &&
222
+ node.pairs.any? &&
223
+ node.parent&.call_type?
224
+
225
+ parent_loc = node.parent.loc
226
+ selector = parent_loc.selector || parent_loc.expression
227
+ same_line?(selector, node.pairs.first)
228
+ end
229
+
220
230
  def reset!
221
- self.offences_by = {}
231
+ self.offenses_by = {}
222
232
  self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
223
233
  end
224
234
 
@@ -242,26 +252,33 @@ module RuboCop
242
252
  end
243
253
  end
244
254
 
245
- add_offences
255
+ add_offenses
256
+ end
257
+
258
+ def add_offenses
259
+ kwsplat_offenses = offenses_by.delete(KeywordSplatAlignment)
260
+ register_offenses_with_format(kwsplat_offenses, KeywordSplatAlignment)
261
+
262
+ format, offenses = offenses_by.min_by { |_, v| v.length }
263
+ register_offenses_with_format(offenses, format)
246
264
  end
247
265
 
248
- def add_offences
249
- format, offences = offences_by.min_by { |_, v| v.length }
250
- (offences || []).each do |offence|
251
- add_offense(offence, message: MESSAGES[format]) do |corrector|
252
- delta = column_deltas[alignment_for(offence).first.class][offence]
266
+ def register_offenses_with_format(offenses, format)
267
+ (offenses || []).each do |offense|
268
+ add_offense(offense, message: MESSAGES[format]) do |corrector|
269
+ delta = column_deltas[alignment_for(offense).first.class][offense]
253
270
 
254
- correct_node(corrector, offence, delta) unless delta.nil?
271
+ correct_node(corrector, offense, delta) unless delta.nil?
255
272
  end
256
273
  end
257
274
  end
258
275
 
259
276
  def check_delta(delta, node:, alignment:)
260
- offences_by[alignment.class] ||= []
277
+ offenses_by[alignment.class] ||= []
261
278
  return if good_alignment? delta
262
279
 
263
280
  column_deltas[alignment.class][node] = delta
264
- offences_by[alignment.class].push(node)
281
+ offenses_by[alignment.class].push(node)
265
282
  end
266
283
 
267
284
  def ignore_hash_argument?(node)
@@ -274,7 +291,9 @@ module RuboCop
274
291
  end
275
292
 
276
293
  def alignment_for(pair)
277
- if pair.hash_rocket?
294
+ if pair.kwsplat_type?
295
+ [KeywordSplatAlignment.new]
296
+ elsif pair.hash_rocket?
278
297
  alignment_for_hash_rockets
279
298
  else
280
299
  alignment_for_colons
@@ -282,13 +301,11 @@ module RuboCop
282
301
  end
283
302
 
284
303
  def alignment_for_hash_rockets
285
- @alignment_for_hash_rockets ||=
286
- new_alignment('EnforcedHashRocketStyle')
304
+ @alignment_for_hash_rockets ||= new_alignment('EnforcedHashRocketStyle')
287
305
  end
288
306
 
289
307
  def alignment_for_colons
290
- @alignment_for_colons ||=
291
- new_alignment('EnforcedColonStyle')
308
+ @alignment_for_colons ||= new_alignment('EnforcedColonStyle')
292
309
  end
293
310
 
294
311
  def correct_node(corrector, node, delta)
@@ -356,6 +373,16 @@ module RuboCop
356
373
  def good_alignment?(column_deltas)
357
374
  column_deltas.values.all?(&:zero?)
358
375
  end
376
+
377
+ def enforce_first_argument_with_fixed_indentation?
378
+ return false unless argument_alignment_config['Enabled']
379
+
380
+ argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
381
+ end
382
+
383
+ def argument_alignment_config
384
+ config.for_cop('Layout/ArgumentAlignment')
385
+ end
359
386
  end
360
387
  end
361
388
  end
@@ -55,7 +55,7 @@ module RuboCop
55
55
  extend AutoCorrector
56
56
 
57
57
  MSG = 'Put the closing parenthesis for a method call with a ' \
58
- 'HEREDOC parameter on the same line as the HEREDOC opening.'
58
+ 'HEREDOC parameter on the same line as the HEREDOC opening.'
59
59
 
60
60
  def self.autocorrect_incompatible_with
61
61
  [Style::TrailingCommaInArguments]
@@ -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)
@@ -169,7 +167,7 @@ module RuboCop
169
167
 
170
168
  end_of_outer_send = outermost_send.loc.end
171
169
 
172
- end_of_outer_send.line == end_of_last_arg_of_outer_send.line &&
170
+ same_line?(end_of_outer_send, end_of_last_arg_of_outer_send) &&
173
171
  end_of_outer_send.column == end_of_last_arg_of_outer_send.column + 1
174
172
  end
175
173
 
@@ -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)
@@ -147,13 +143,6 @@ module RuboCop
147
143
  indent_level(base_line)
148
144
  end
149
145
 
150
- def indent_level(str)
151
- indentations = str.lines
152
- .map { |line| line[/^\s*/] }
153
- .reject { |line| line.end_with?("\n") }
154
- indentations.empty? ? 0 : indentations.min_by(&:size).size
155
- end
156
-
157
146
  # Returns '~', '-' or nil
158
147
  def heredoc_indent_type(node)
159
148
  node.source[/^<<([~-])/, 1]
@@ -118,9 +118,10 @@ module RuboCop
118
118
  # def bar
119
119
  # end
120
120
  # end
121
- class IndentationConsistency < Cop
121
+ class IndentationConsistency < Base
122
122
  include Alignment
123
123
  include ConfigurableEnforcedStyle
124
+ extend AutoCorrector
124
125
 
125
126
  MSG = 'Inconsistent indentation detected.'
126
127
 
@@ -132,12 +133,12 @@ module RuboCop
132
133
  check(node)
133
134
  end
134
135
 
135
- def autocorrect(node)
136
- AlignmentCorrector.correct(processed_source, node, column_delta)
137
- end
138
-
139
136
  private
140
137
 
138
+ def autocorrect(corrector, node)
139
+ AlignmentCorrector.correct(corrector, processed_source, node, column_delta)
140
+ end
141
+
141
142
  # Not all nodes define `bare_access_modifier?` (for example,
142
143
  # `RuboCop::AST::DefNode` does not), so we must check `send_type?` first
143
144
  # to avoid a NoMethodError.
@@ -161,8 +162,10 @@ module RuboCop
161
162
  # to the level of the module (see `AccessModifierIndentation` cop) we
162
163
  # return nil so that `check_alignment` will derive the correct
163
164
  # indentation from the first child that is not an access modifier.
164
- module_indent = display_column(node.parent.source_range)
165
165
  access_modifier_indent = display_column(first_child.source_range)
166
+ return access_modifier_indent unless node.parent
167
+
168
+ module_indent = display_column(node.parent.source_range)
166
169
  access_modifier_indent if access_modifier_indent > module_indent
167
170
  end
168
171
 
@@ -31,60 +31,55 @@ module RuboCop
31
31
  # def foo
32
32
  # bar
33
33
  # end
34
- class IndentationStyle < Cop
34
+ class IndentationStyle < Base
35
35
  include Alignment
36
36
  include ConfigurableEnforcedStyle
37
37
  include RangeHelp
38
+ extend AutoCorrector
38
39
 
39
40
  MSG = '%<type>s detected in indentation.'
40
41
 
41
- def investigate(processed_source)
42
+ def on_new_investigation
42
43
  str_ranges = string_literal_ranges(processed_source.ast)
43
44
 
44
45
  processed_source.lines.each.with_index(1) do |line, lineno|
45
- match = find_offence(line)
46
- next unless match
47
-
48
- range = source_range(processed_source.buffer,
49
- lineno,
50
- match.begin(0)...match.end(0))
46
+ next unless (range = find_offense(line, lineno))
51
47
  next if in_string_literal?(str_ranges, range)
52
48
 
53
- add_offense(range, location: range)
49
+ add_offense(range) { |corrector| autocorrect(corrector, range) }
54
50
  end
55
51
  end
56
52
 
57
- def autocorrect(range)
53
+ private
54
+
55
+ def autocorrect(corrector, range)
58
56
  if range.source.include?("\t")
59
- autocorrect_lambda_for_tabs(range)
57
+ autocorrect_lambda_for_tabs(corrector, range)
60
58
  else
61
- autocorrect_lambda_for_spaces(range)
59
+ autocorrect_lambda_for_spaces(corrector, range)
62
60
  end
63
61
  end
64
62
 
65
- private
63
+ def find_offense(line, lineno)
64
+ match = if style == :spaces
65
+ line.match(/\A\s*\t+/)
66
+ else
67
+ line.match(/\A\s* +/)
68
+ end
69
+ return unless match
66
70
 
67
- def find_offence(line)
68
- if style == :spaces
69
- line.match(/\A\s*\t+/)
70
- else
71
- line.match(/\A\s* +/)
72
- end
71
+ source_range(processed_source.buffer, lineno, match.begin(0)...match.end(0))
73
72
  end
74
73
 
75
- def autocorrect_lambda_for_tabs(range)
76
- lambda do |corrector|
77
- spaces = ' ' * configured_indentation_width
78
- corrector.replace(range, range.source.gsub(/\t/, spaces))
79
- end
74
+ def autocorrect_lambda_for_tabs(corrector, range)
75
+ spaces = ' ' * configured_indentation_width
76
+ corrector.replace(range, range.source.gsub(/\t/, spaces))
80
77
  end
81
78
 
82
- def autocorrect_lambda_for_spaces(range)
83
- lambda do |corrector|
84
- corrector.replace(range, range.source.gsub(/\A\s+/) do |match|
85
- "\t" * (match.size / configured_indentation_width)
86
- end)
87
- end
79
+ def autocorrect_lambda_for_spaces(corrector, range)
80
+ corrector.replace(range, range.source.gsub(/\A\s+/) do |match|
81
+ "\t" * (match.size / configured_indentation_width)
82
+ end)
88
83
  end
89
84
 
90
85
  def in_string_literal?(ranges, tabs_range)
@@ -42,16 +42,18 @@ module RuboCop
42
42
  # end
43
43
  # end
44
44
  # end
45
- class IndentationWidth < Cop # rubocop:disable Metrics/ClassLength
45
+ class IndentationWidth < Base # rubocop:disable Metrics/ClassLength
46
46
  include EndKeywordAlignment
47
47
  include Alignment
48
48
  include CheckAssignment
49
49
  include IgnoredPattern
50
50
  include RangeHelp
51
+ extend AutoCorrector
51
52
 
52
53
  MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
53
54
  'spaces for%<name>s indentation.'
54
55
 
56
+ # @!method access_modifier?(node)
55
57
  def_node_matcher :access_modifier?, <<~PATTERN
56
58
  [(send ...) access_modifier?]
57
59
  PATTERN
@@ -133,8 +135,15 @@ module RuboCop
133
135
  check_indentation(when_node.loc.keyword, when_node.body)
134
136
  end
135
137
 
136
- check_indentation(case_node.when_branches.last.loc.keyword,
137
- case_node.else_branch)
138
+ check_indentation(case_node.when_branches.last.loc.keyword, case_node.else_branch)
139
+ end
140
+
141
+ def on_case_match(case_match)
142
+ case_match.each_in_pattern do |in_pattern_node|
143
+ check_indentation(in_pattern_node.loc.keyword, in_pattern_node.body)
144
+ end
145
+
146
+ check_indentation(case_match.in_pattern_branches.last.loc.keyword, case_match.else_branch)
138
147
  end
139
148
 
140
149
  def on_if(node, base = node)
@@ -144,12 +153,12 @@ module RuboCop
144
153
  check_if(node, node.body, node.else_branch, base.loc)
145
154
  end
146
155
 
147
- def autocorrect(node)
148
- AlignmentCorrector.correct(processed_source, node, @column_delta)
149
- end
150
-
151
156
  private
152
157
 
158
+ def autocorrect(corrector, node)
159
+ AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
160
+ end
161
+
153
162
  def check_members(base, members)
154
163
  check_indentation(base, select_check_member(members.first))
155
164
 
@@ -279,8 +288,9 @@ module RuboCop
279
288
  name = style == 'normal' ? '' : " #{style}"
280
289
  message = message(configured_indentation_width, indentation, name)
281
290
 
282
- add_offense(node, location: offending_range(body_node, indentation),
283
- message: message)
291
+ add_offense(offending_range(body_node, indentation), message: message) do |corrector|
292
+ autocorrect(corrector, node)
293
+ end
284
294
  end
285
295
 
286
296
  def message(configured_indentation_width, indentation, name)
@@ -307,12 +317,23 @@ module RuboCop
307
317
  def indentation_to_check?(base_loc, body_node)
308
318
  return false if skip_check?(base_loc, body_node)
309
319
 
310
- if %i[rescue ensure].include?(body_node.type)
320
+ if body_node.rescue_type?
321
+ check_rescue?(body_node)
322
+ elsif body_node.ensure_type?
311
323
  block_body, = *body_node
312
- return unless block_body
324
+
325
+ if block_body&.rescue_type?
326
+ check_rescue?(block_body)
327
+ else
328
+ !block_body.nil?
329
+ end
330
+ else
331
+ true
313
332
  end
333
+ end
314
334
 
315
- true
335
+ def check_rescue?(rescue_node)
336
+ rescue_node.body
316
337
  end
317
338
 
318
339
  def skip_check?(base_loc, body_node)
@@ -320,7 +341,7 @@ module RuboCop
320
341
  return true unless body_node
321
342
 
322
343
  # Don't check if expression is on same line as "then" keyword, etc.
323
- return true if body_node.loc.line == base_loc.line
344
+ return true if same_line?(body_node, base_loc)
324
345
 
325
346
  return true if starts_with_access_modifier?(body_node)
326
347
 
@@ -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.
@@ -57,7 +57,7 @@ module RuboCop
57
57
 
58
58
  def on_new_investigation
59
59
  processed_source.comments.each do |comment|
60
- next unless /\A#+[^#\s=:+-]/.match?(comment.text)
60
+ next unless /\A#+[^#\s=+-]/.match?(comment.text)
61
61
  next if comment.loc.line == 1 && allowed_on_first_line?(comment)
62
62
  next if doxygen_comment_style?(comment)
63
63
  next if gemfile_ruby_comment?(comment)
@@ -77,7 +77,7 @@ module RuboCop
77
77
  end
78
78
 
79
79
  def allowed_on_first_line?(comment)
80
- shebang?(comment) || rackup_config_file? && rackup_options?(comment)
80
+ shebang?(comment) || (rackup_config_file? && rackup_options?(comment))
81
81
  end
82
82
 
83
83
  def shebang?(comment)