rubocop 1.44.1 → 1.78.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 (711) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +95 -88
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +660 -117
  7. data/config/internal_affairs.yml +31 -0
  8. data/config/obsoletion.yml +13 -3
  9. data/exe/rubocop +4 -3
  10. data/lib/rubocop/cached_data.rb +21 -5
  11. data/lib/rubocop/cli/command/auto_generate_config.rb +33 -13
  12. data/lib/rubocop/cli/command/execute_runner.rb +11 -6
  13. data/lib/rubocop/cli/command/lsp.rb +19 -0
  14. data/lib/rubocop/cli/command/show_cops.rb +24 -2
  15. data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
  16. data/lib/rubocop/cli/command/suggest_extensions.rb +7 -1
  17. data/lib/rubocop/cli/command/version.rb +2 -2
  18. data/lib/rubocop/cli.rb +80 -11
  19. data/lib/rubocop/comment_config.rb +21 -2
  20. data/lib/rubocop/config.rb +99 -25
  21. data/lib/rubocop/config_finder.rb +14 -4
  22. data/lib/rubocop/config_loader.rb +68 -57
  23. data/lib/rubocop/config_loader_resolver.rb +48 -17
  24. data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
  25. data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
  26. data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
  27. data/lib/rubocop/config_obsoletion.rb +58 -11
  28. data/lib/rubocop/config_validator.rb +39 -20
  29. data/lib/rubocop/cop/autocorrect_logic.rb +69 -21
  30. data/lib/rubocop/cop/base.rb +112 -29
  31. data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -2
  32. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  33. data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
  34. data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
  35. data/lib/rubocop/cop/bundler/gem_version.rb +6 -7
  36. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
  37. data/lib/rubocop/cop/bundler/ordered_gems.rb +10 -2
  38. data/lib/rubocop/cop/commissioner.rb +8 -2
  39. data/lib/rubocop/cop/cop.rb +55 -9
  40. data/lib/rubocop/cop/corrector.rb +1 -1
  41. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -15
  42. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  43. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -15
  44. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  45. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -1
  46. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
  47. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
  48. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +7 -4
  49. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +12 -2
  50. data/lib/rubocop/cop/documentation.rb +32 -5
  51. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  52. data/lib/rubocop/cop/force.rb +12 -0
  53. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  54. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  55. data/lib/rubocop/cop/gemspec/dependency_version.rb +6 -8
  56. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +4 -5
  57. data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
  58. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
  59. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +10 -2
  60. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  61. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
  62. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
  63. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  64. data/lib/rubocop/cop/generator.rb +6 -0
  65. data/lib/rubocop/cop/internal_affairs/cop_description.rb +37 -17
  66. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  67. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
  68. data/lib/rubocop/cop/internal_affairs/example_description.rb +51 -25
  69. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +3 -3
  70. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
  71. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  72. data/lib/rubocop/cop/internal_affairs/location_expression.rb +38 -0
  73. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +6 -5
  74. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  75. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  76. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  77. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +129 -35
  78. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  79. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  80. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +231 -0
  81. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +91 -0
  82. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  83. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  84. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  85. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  86. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  87. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  88. data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
  89. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  90. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  91. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  92. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -22
  93. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  94. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +75 -0
  95. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  96. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  97. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
  98. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -5
  99. data/lib/rubocop/cop/internal_affairs.rb +12 -0
  100. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
  101. data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
  102. data/lib/rubocop/cop/layout/array_alignment.rb +2 -2
  103. data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
  104. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  105. data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
  106. data/lib/rubocop/cop/layout/block_end_newline.rb +8 -21
  107. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  108. data/lib/rubocop/cop/layout/class_structure.rb +59 -28
  109. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +2 -3
  110. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  111. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  112. data/lib/rubocop/cop/layout/condition_position.rb +0 -4
  113. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
  114. data/lib/rubocop/cop/layout/dot_position.rb +2 -6
  115. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  116. data/lib/rubocop/cop/layout/empty_comment.rb +6 -4
  117. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +46 -13
  118. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  119. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  120. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +34 -14
  121. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  122. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +39 -7
  123. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  124. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  125. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +14 -8
  126. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  127. data/lib/rubocop/cop/layout/end_alignment.rb +23 -3
  128. data/lib/rubocop/cop/layout/extra_spacing.rb +4 -5
  129. data/lib/rubocop/cop/layout/first_argument_indentation.rb +14 -14
  130. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
  131. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +25 -34
  132. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  133. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +8 -20
  134. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +50 -52
  135. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +38 -55
  136. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
  137. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -6
  138. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +13 -6
  139. data/lib/rubocop/cop/layout/heredoc_indentation.rb +7 -4
  140. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  141. data/lib/rubocop/cop/layout/indentation_width.rb +16 -16
  142. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
  143. data/lib/rubocop/cop/layout/leading_comment_space.rb +85 -3
  144. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +29 -14
  145. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +19 -9
  146. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +4 -2
  147. data/lib/rubocop/cop/layout/line_length.rb +168 -28
  148. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +8 -27
  149. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
  150. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +8 -27
  151. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +20 -12
  152. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  153. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +21 -6
  154. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  155. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +7 -30
  156. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -4
  157. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  158. data/lib/rubocop/cop/layout/redundant_line_break.rb +43 -48
  159. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +9 -10
  160. data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
  161. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  162. data/lib/rubocop/cop/layout/space_after_comma.rb +10 -2
  163. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  164. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  165. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  166. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -2
  167. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -3
  168. data/lib/rubocop/cop/layout/space_around_operators.rb +75 -38
  169. data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
  170. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  171. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  172. data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
  173. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  174. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -2
  175. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +28 -13
  176. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +8 -1
  177. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
  178. data/lib/rubocop/cop/layout/space_inside_parens.rb +3 -3
  179. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
  180. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  181. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +4 -4
  182. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +6 -7
  183. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
  184. data/lib/rubocop/cop/layout/trailing_whitespace.rb +6 -4
  185. data/lib/rubocop/cop/legacy/corrector.rb +12 -2
  186. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -4
  187. data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
  188. data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
  189. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
  190. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  191. data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
  192. data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
  193. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
  194. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
  195. data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
  196. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  197. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
  198. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  199. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  200. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
  201. data/lib/rubocop/cop/lint/debugger.rb +49 -30
  202. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +6 -6
  203. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -13
  204. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  205. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
  206. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -5
  207. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  208. data/lib/rubocop/cop/lint/duplicate_methods.rb +112 -34
  209. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +48 -23
  210. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  211. data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
  212. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  213. data/lib/rubocop/cop/lint/empty_block.rb +2 -2
  214. data/lib/rubocop/cop/lint/empty_conditional_body.rb +31 -58
  215. data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
  216. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  217. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  218. data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -6
  219. data/lib/rubocop/cop/lint/empty_when.rb +1 -3
  220. data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
  221. data/lib/rubocop/cop/lint/erb_new_arguments.rb +27 -27
  222. data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
  223. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
  224. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -12
  225. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  226. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  227. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  228. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -16
  229. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +24 -13
  230. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
  231. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -8
  232. data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
  233. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
  234. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  235. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
  236. data/lib/rubocop/cop/lint/literal_as_condition.rb +114 -11
  237. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  238. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +96 -17
  239. data/lib/rubocop/cop/lint/loop.rb +6 -12
  240. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  241. data/lib/rubocop/cop/lint/missing_super.rb +63 -5
  242. data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
  243. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  244. data/lib/rubocop/cop/lint/nested_method_definition.rb +11 -18
  245. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
  246. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
  247. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +22 -10
  248. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
  249. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  250. data/lib/rubocop/cop/lint/number_conversion.rb +13 -4
  251. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +3 -4
  252. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +93 -0
  253. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +3 -2
  254. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +0 -1
  255. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +11 -14
  256. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
  257. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -5
  258. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -5
  259. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  260. data/lib/rubocop/cop/lint/rand_one.rb +0 -4
  261. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +11 -5
  262. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +9 -7
  263. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  264. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -13
  265. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +79 -10
  266. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +10 -9
  267. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +36 -20
  268. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  269. data/lib/rubocop/cop/lint/redundant_with_index.rb +10 -3
  270. data/lib/rubocop/cop/lint/redundant_with_object.rb +6 -3
  271. data/lib/rubocop/cop/lint/refinement_import_methods.rb +3 -2
  272. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  273. data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
  274. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -5
  275. data/lib/rubocop/cop/lint/rescue_type.rb +4 -10
  276. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
  277. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +31 -13
  278. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
  279. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  280. data/lib/rubocop/cop/lint/self_assignment.rb +71 -10
  281. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -2
  282. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  283. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -13
  284. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +26 -12
  285. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  286. data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
  287. data/lib/rubocop/cop/lint/suppressed_exception.rb +3 -3
  288. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  289. data/lib/rubocop/cop/lint/symbol_conversion.rb +9 -4
  290. data/lib/rubocop/cop/lint/syntax.rb +14 -4
  291. data/lib/rubocop/cop/lint/to_enum_arguments.rb +17 -7
  292. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
  293. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  294. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  295. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  296. data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
  297. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
  298. data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
  299. data/lib/rubocop/cop/lint/unreachable_loop.rb +17 -11
  300. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  301. data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
  302. data/lib/rubocop/cop/lint/useless_access_modifier.rb +46 -17
  303. data/lib/rubocop/cop/lint/useless_assignment.rb +104 -15
  304. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  305. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  306. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  307. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
  308. data/lib/rubocop/cop/lint/useless_method_definition.rb +11 -3
  309. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +78 -0
  310. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  311. data/lib/rubocop/cop/lint/useless_rescue.rb +7 -3
  312. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  313. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
  314. data/lib/rubocop/cop/lint/useless_times.rb +3 -3
  315. data/lib/rubocop/cop/lint/void.rb +140 -19
  316. data/lib/rubocop/cop/message_annotator.rb +7 -3
  317. data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
  318. data/lib/rubocop/cop/metrics/block_length.rb +9 -7
  319. data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
  320. data/lib/rubocop/cop/metrics/class_length.rb +23 -16
  321. data/lib/rubocop/cop/metrics/collection_literal_length.rb +83 -0
  322. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  323. data/lib/rubocop/cop/metrics/method_length.rb +16 -7
  324. data/lib/rubocop/cop/metrics/module_length.rb +7 -6
  325. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  326. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -3
  327. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +40 -13
  328. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  329. data/lib/rubocop/cop/migration/department_name.rb +3 -3
  330. data/lib/rubocop/cop/mixin/alignment.rb +8 -4
  331. data/lib/rubocop/cop/mixin/allowed_methods.rb +10 -2
  332. data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
  333. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  334. data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -3
  335. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  336. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  337. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  338. data/lib/rubocop/cop/mixin/code_length.rb +12 -1
  339. data/lib/rubocop/cop/mixin/comments_help.rb +26 -11
  340. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  341. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
  342. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  343. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  344. data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
  345. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  346. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  347. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  348. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  349. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  350. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
  351. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  352. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +16 -15
  353. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +62 -43
  354. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  355. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  356. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  357. data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
  358. data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
  359. data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
  360. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +0 -3
  361. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +10 -11
  362. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +2 -2
  363. data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
  364. data/lib/rubocop/cop/mixin/percent_literal.rb +2 -2
  365. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +71 -35
  366. data/lib/rubocop/cop/mixin/range_help.rb +16 -10
  367. data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
  368. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
  369. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  370. data/lib/rubocop/cop/mixin/statement_modifier.rb +13 -7
  371. data/lib/rubocop/cop/mixin/string_help.rb +5 -3
  372. data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
  373. data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
  374. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  375. data/lib/rubocop/cop/mixin/trailing_comma.rb +24 -8
  376. data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
  377. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  378. data/lib/rubocop/cop/naming/block_forwarding.rb +40 -9
  379. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  380. data/lib/rubocop/cop/naming/constant_name.rb +8 -10
  381. data/lib/rubocop/cop/naming/file_name.rb +5 -7
  382. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  383. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  384. data/lib/rubocop/cop/naming/inclusive_language.rb +33 -6
  385. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +38 -24
  386. data/lib/rubocop/cop/naming/method_name.rb +146 -15
  387. data/lib/rubocop/cop/naming/predicate_method.rb +303 -0
  388. data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
  389. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +26 -17
  390. data/lib/rubocop/cop/naming/variable_name.rb +56 -7
  391. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  392. data/lib/rubocop/cop/offense.rb +4 -5
  393. data/lib/rubocop/cop/registry.rb +12 -7
  394. data/lib/rubocop/cop/security/compound_hash.rb +4 -2
  395. data/lib/rubocop/cop/security/eval.rb +2 -1
  396. data/lib/rubocop/cop/security/open.rb +3 -2
  397. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  398. data/lib/rubocop/cop/style/access_modifier_declarations.rb +177 -30
  399. data/lib/rubocop/cop/style/accessor_grouping.rb +69 -21
  400. data/lib/rubocop/cop/style/alias.rb +11 -9
  401. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  402. data/lib/rubocop/cop/style/and_or.rb +1 -1
  403. data/lib/rubocop/cop/style/arguments_forwarding.rb +478 -62
  404. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  405. data/lib/rubocop/cop/style/array_intersect.rb +54 -34
  406. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  407. data/lib/rubocop/cop/style/attr.rb +11 -1
  408. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  409. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  410. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +3 -3
  411. data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
  412. data/lib/rubocop/cop/style/block_comments.rb +2 -2
  413. data/lib/rubocop/cop/style/block_delimiters.rb +60 -19
  414. data/lib/rubocop/cop/style/case_like_if.rb +34 -20
  415. data/lib/rubocop/cop/style/class_and_module_children.rb +55 -14
  416. data/lib/rubocop/cop/style/class_check.rb +1 -0
  417. data/lib/rubocop/cop/style/class_equality_comparison.rb +59 -41
  418. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  419. data/lib/rubocop/cop/style/collection_compact.rb +35 -12
  420. data/lib/rubocop/cop/style/collection_methods.rb +4 -1
  421. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  422. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  423. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  424. data/lib/rubocop/cop/style/combinable_loops.rb +44 -8
  425. data/lib/rubocop/cop/style/command_literal.rb +2 -2
  426. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  427. data/lib/rubocop/cop/style/commented_keyword.rb +32 -6
  428. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  429. data/lib/rubocop/cop/style/concat_array_literals.rb +13 -4
  430. data/lib/rubocop/cop/style/conditional_assignment.rb +57 -42
  431. data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
  432. data/lib/rubocop/cop/style/copyright.rb +37 -24
  433. data/lib/rubocop/cop/style/data_inheritance.rb +82 -0
  434. data/lib/rubocop/cop/style/date_time.rb +5 -4
  435. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
  436. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  437. data/lib/rubocop/cop/style/dir.rb +1 -1
  438. data/lib/rubocop/cop/style/dir_empty.rb +54 -0
  439. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  440. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +3 -3
  441. data/lib/rubocop/cop/style/documentation.rb +36 -30
  442. data/lib/rubocop/cop/style/documentation_method.rb +30 -4
  443. data/lib/rubocop/cop/style/double_negation.rb +6 -6
  444. data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
  445. data/lib/rubocop/cop/style/each_with_object.rb +4 -5
  446. data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
  447. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  448. data/lib/rubocop/cop/style/empty_else.rb +10 -7
  449. data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
  450. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
  451. data/lib/rubocop/cop/style/empty_literal.rb +36 -23
  452. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  453. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  454. data/lib/rubocop/cop/style/endless_method.rb +150 -18
  455. data/lib/rubocop/cop/style/eval_with_location.rb +27 -35
  456. data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
  457. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  458. data/lib/rubocop/cop/style/explicit_block_argument.rb +19 -6
  459. data/lib/rubocop/cop/style/exponential_notation.rb +5 -5
  460. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  461. data/lib/rubocop/cop/style/file_empty.rb +71 -0
  462. data/lib/rubocop/cop/style/file_null.rb +89 -0
  463. data/lib/rubocop/cop/style/file_read.rb +5 -8
  464. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  465. data/lib/rubocop/cop/style/file_write.rb +3 -6
  466. data/lib/rubocop/cop/style/float_division.rb +8 -4
  467. data/lib/rubocop/cop/style/for.rb +4 -2
  468. data/lib/rubocop/cop/style/format_string.rb +33 -12
  469. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  470. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +7 -4
  471. data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
  472. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  473. data/lib/rubocop/cop/style/guard_clause.rb +48 -4
  474. data/lib/rubocop/cop/style/hash_conversion.rb +26 -9
  475. data/lib/rubocop/cop/style/hash_each_methods.rb +111 -34
  476. data/lib/rubocop/cop/style/hash_except.rb +38 -135
  477. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  478. data/lib/rubocop/cop/style/hash_like_case.rb +3 -9
  479. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  480. data/lib/rubocop/cop/style/hash_syntax.rb +38 -7
  481. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  482. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  483. data/lib/rubocop/cop/style/identical_conditional_branches.rb +57 -9
  484. data/lib/rubocop/cop/style/if_inside_else.rb +16 -14
  485. data/lib/rubocop/cop/style/if_unless_modifier.rb +140 -17
  486. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  487. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +10 -8
  488. data/lib/rubocop/cop/style/if_with_semicolon.rb +62 -8
  489. data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
  490. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  491. data/lib/rubocop/cop/style/inverse_methods.rb +21 -17
  492. data/lib/rubocop/cop/style/invertible_unless_condition.rb +58 -12
  493. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  494. data/lib/rubocop/cop/style/it_assignment.rb +36 -0
  495. data/lib/rubocop/cop/style/it_block_parameter.rb +119 -0
  496. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  497. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  498. data/lib/rubocop/cop/style/lambda.rb +5 -4
  499. data/lib/rubocop/cop/style/lambda_call.rb +14 -3
  500. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  501. data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
  502. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
  503. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  504. data/lib/rubocop/cop/style/map_to_hash.rb +31 -7
  505. data/lib/rubocop/cop/style/map_to_set.rb +6 -2
  506. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +62 -31
  507. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +65 -42
  508. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
  509. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  510. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
  511. data/lib/rubocop/cop/style/min_max.rb +3 -3
  512. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  513. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  514. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
  515. data/lib/rubocop/cop/style/mixin_grouping.rb +5 -5
  516. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  517. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  518. data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
  519. data/lib/rubocop/cop/style/multiline_method_signature.rb +17 -13
  520. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +21 -4
  521. data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
  522. data/lib/rubocop/cop/style/multiple_comparison.rb +66 -59
  523. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  524. data/lib/rubocop/cop/style/negated_if_else_condition.rb +18 -11
  525. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  526. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  527. data/lib/rubocop/cop/style/nested_ternary_operator.rb +8 -15
  528. data/lib/rubocop/cop/style/next.rb +45 -1
  529. data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
  530. data/lib/rubocop/cop/style/nil_lambda.rb +2 -2
  531. data/lib/rubocop/cop/style/not.rb +1 -1
  532. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +11 -3
  533. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  534. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  535. data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
  536. data/lib/rubocop/cop/style/object_then.rb +16 -14
  537. data/lib/rubocop/cop/style/one_line_conditional.rb +31 -6
  538. data/lib/rubocop/cop/style/open_struct_use.rb +6 -6
  539. data/lib/rubocop/cop/style/operator_method_call.rb +33 -9
  540. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  541. data/lib/rubocop/cop/style/parallel_assignment.rb +38 -40
  542. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  543. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +3 -4
  544. data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
  545. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  546. data/lib/rubocop/cop/style/proc.rb +2 -2
  547. data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
  548. data/lib/rubocop/cop/style/raise_args.rb +19 -14
  549. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  550. data/lib/rubocop/cop/style/redundant_argument.rb +35 -4
  551. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  552. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  553. data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
  554. data/lib/rubocop/cop/style/redundant_begin.rb +17 -4
  555. data/lib/rubocop/cop/style/redundant_condition.rb +114 -27
  556. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
  557. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
  558. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +91 -7
  559. data/lib/rubocop/cop/style/redundant_each.rb +7 -4
  560. data/lib/rubocop/cop/style/redundant_exception.rb +33 -13
  561. data/lib/rubocop/cop/style/redundant_fetch_block.rb +10 -16
  562. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  563. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  564. data/lib/rubocop/cop/style/redundant_format.rb +262 -0
  565. data/lib/rubocop/cop/style/redundant_freeze.rb +3 -3
  566. data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
  567. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  568. data/lib/rubocop/cop/style/redundant_interpolation.rb +3 -3
  569. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  570. data/lib/rubocop/cop/style/redundant_line_continuation.rb +236 -0
  571. data/lib/rubocop/cop/style/redundant_parentheses.rb +140 -40
  572. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  573. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
  574. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +8 -9
  575. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  576. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +20 -28
  577. data/lib/rubocop/cop/style/redundant_return.rb +16 -5
  578. data/lib/rubocop/cop/style/redundant_self.rb +32 -20
  579. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  580. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +12 -5
  581. data/lib/rubocop/cop/style/redundant_sort.rb +14 -13
  582. data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
  583. data/lib/rubocop/cop/style/redundant_string_escape.rb +8 -7
  584. data/lib/rubocop/cop/style/regexp_literal.rb +12 -3
  585. data/lib/rubocop/cop/style/require_order.rb +13 -9
  586. data/lib/rubocop/cop/style/rescue_modifier.rb +19 -7
  587. data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
  588. data/lib/rubocop/cop/style/return_nil.rb +8 -4
  589. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
  590. data/lib/rubocop/cop/style/safe_navigation.rb +145 -63
  591. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  592. data/lib/rubocop/cop/style/sample.rb +3 -4
  593. data/lib/rubocop/cop/style/select_by_regexp.rb +33 -16
  594. data/lib/rubocop/cop/style/self_assignment.rb +12 -18
  595. data/lib/rubocop/cop/style/semicolon.rb +22 -6
  596. data/lib/rubocop/cop/style/send.rb +4 -4
  597. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  598. data/lib/rubocop/cop/style/signal_exception.rb +3 -4
  599. data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
  600. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  601. data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
  602. data/lib/rubocop/cop/style/single_line_methods.rb +10 -8
  603. data/lib/rubocop/cop/style/slicing_with_range.rb +106 -11
  604. data/lib/rubocop/cop/style/sole_nested_conditional.rb +50 -90
  605. data/lib/rubocop/cop/style/special_global_vars.rb +5 -7
  606. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  607. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  608. data/lib/rubocop/cop/style/string_concatenation.rb +15 -15
  609. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  610. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  611. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  612. data/lib/rubocop/cop/style/strip.rb +7 -4
  613. data/lib/rubocop/cop/style/struct_inheritance.rb +10 -3
  614. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  615. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  616. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  617. data/lib/rubocop/cop/style/symbol_array.rb +35 -15
  618. data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
  619. data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
  620. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  621. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -0
  622. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +11 -2
  623. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  624. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  625. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  626. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +5 -5
  627. data/lib/rubocop/cop/style/trivial_accessors.rb +3 -3
  628. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -0
  629. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  630. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  631. data/lib/rubocop/cop/style/while_until_do.rb +0 -2
  632. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
  633. data/lib/rubocop/cop/style/word_array.rb +18 -6
  634. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  635. data/lib/rubocop/cop/style/yoda_condition.rb +25 -12
  636. data/lib/rubocop/cop/style/yoda_expression.rb +20 -9
  637. data/lib/rubocop/cop/style/zero_length_predicate.rb +41 -29
  638. data/lib/rubocop/cop/team.rb +58 -26
  639. data/lib/rubocop/cop/util.rb +33 -11
  640. data/lib/rubocop/cop/utils/format_string.rb +10 -5
  641. data/lib/rubocop/cop/variable_force/assignment.rb +66 -6
  642. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  643. data/lib/rubocop/cop/variable_force/scope.rb +3 -3
  644. data/lib/rubocop/cop/variable_force/variable.rb +18 -5
  645. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  646. data/lib/rubocop/cop/variable_force.rb +19 -12
  647. data/lib/rubocop/cops_documentation_generator.rb +138 -55
  648. data/lib/rubocop/core_ext/string.rb +2 -6
  649. data/lib/rubocop/directive_comment.rb +57 -21
  650. data/lib/rubocop/ext/comment.rb +18 -0
  651. data/lib/rubocop/ext/regexp_node.rb +17 -35
  652. data/lib/rubocop/ext/regexp_parser.rb +7 -21
  653. data/lib/rubocop/file_finder.rb +11 -9
  654. data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
  655. data/lib/rubocop/formatter/disabled_config_formatter.rb +26 -10
  656. data/lib/rubocop/formatter/formatter_set.rb +8 -2
  657. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  658. data/lib/rubocop/formatter/html_formatter.rb +38 -15
  659. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  660. data/lib/rubocop/formatter/junit_formatter.rb +74 -24
  661. data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
  662. data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
  663. data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
  664. data/lib/rubocop/formatter/tap_formatter.rb +3 -7
  665. data/lib/rubocop/formatter.rb +1 -1
  666. data/lib/rubocop/lockfile.rb +58 -7
  667. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  668. data/lib/rubocop/lsp/logger.rb +22 -0
  669. data/lib/rubocop/lsp/routes.rb +227 -0
  670. data/lib/rubocop/lsp/runtime.rb +69 -0
  671. data/lib/rubocop/lsp/server.rb +70 -0
  672. data/lib/rubocop/lsp/severity.rb +27 -0
  673. data/lib/rubocop/lsp/stdin_runner.rb +85 -0
  674. data/lib/rubocop/lsp.rb +36 -0
  675. data/lib/rubocop/magic_comment.rb +24 -14
  676. data/lib/rubocop/options.rb +78 -23
  677. data/lib/rubocop/path_util.rb +21 -10
  678. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  679. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  680. data/lib/rubocop/plugin/load_error.rb +26 -0
  681. data/lib/rubocop/plugin/loader.rb +100 -0
  682. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  683. data/lib/rubocop/plugin.rb +46 -0
  684. data/lib/rubocop/rake_task.rb +5 -2
  685. data/lib/rubocop/remote_config.rb +5 -1
  686. data/lib/rubocop/result_cache.rb +20 -23
  687. data/lib/rubocop/rspec/cop_helper.rb +21 -3
  688. data/lib/rubocop/rspec/expect_offense.rb +31 -12
  689. data/lib/rubocop/rspec/shared_contexts.rb +118 -21
  690. data/lib/rubocop/rspec/support.rb +8 -2
  691. data/lib/rubocop/runner.rb +80 -17
  692. data/lib/rubocop/server/cache.rb +66 -8
  693. data/lib/rubocop/server/cli.rb +39 -20
  694. data/lib/rubocop/server/client_command/base.rb +10 -0
  695. data/lib/rubocop/server/client_command/exec.rb +6 -5
  696. data/lib/rubocop/server/client_command/start.rb +17 -2
  697. data/lib/rubocop/server/core.rb +29 -9
  698. data/lib/rubocop/server/helper.rb +1 -1
  699. data/lib/rubocop/server/server_command/exec.rb +1 -2
  700. data/lib/rubocop/string_interpreter.rb +3 -3
  701. data/lib/rubocop/target_finder.rb +97 -82
  702. data/lib/rubocop/target_ruby.rb +105 -79
  703. data/lib/rubocop/version.rb +74 -12
  704. data/lib/rubocop/yaml_duplication_checker.rb +20 -26
  705. data/lib/rubocop.rb +81 -2
  706. data/lib/ruby_lsp/rubocop/addon.rb +75 -0
  707. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
  708. metadata +152 -63
  709. data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
  710. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
  711. /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -10,9 +10,9 @@ module RuboCop
10
10
  #
11
11
  # Interpreting ABC size:
12
12
  #
13
- # * <= 17 satisfactory
14
- # * 18..30 unsatisfactory
15
- # * > 30 dangerous
13
+ # * ``<= 17`` satisfactory
14
+ # * `18..30` unsatisfactory
15
+ # * `>` 30 dangerous
16
16
  #
17
17
  # You can have repeated "attributes" calls count as a single "branch".
18
18
  # For this purpose, attributes are any method with no argument; no attempt
@@ -39,7 +39,7 @@ module RuboCop
39
39
  class AbcSize < Base
40
40
  include MethodComplexity
41
41
 
42
- MSG = 'Assignment Branch Condition size for %<method>s is too high. ' \
42
+ MSG = 'Assignment Branch Condition size for `%<method>s` is too high. ' \
43
43
  '[%<abc_vector>s %<complexity>.4g/%<max>.4g]'
44
44
 
45
45
  private
@@ -9,15 +9,17 @@ module RuboCop
9
9
  # The cop can be configured to ignore blocks passed to certain methods.
10
10
  #
11
11
  # You can set constructs you want to fold with `CountAsOne`.
12
- # Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct
13
- # will be counted as one line regardless of its actual size.
14
12
  #
13
+ # Available are: 'array', 'hash', 'heredoc', and 'method_call'.
14
+ # Each construct will be counted as one line regardless of its actual size.
15
+ #
16
+ # NOTE: This cop does not apply for `Struct` definitions.
15
17
  #
16
18
  # NOTE: The `ExcludedMethods` configuration is deprecated and only kept
17
19
  # for backwards compatibility. Please use `AllowedMethods` and `AllowedPatterns`
18
20
  # instead. By default, there are no methods to allowed.
19
21
  #
20
- # @example CountAsOne: ['array', 'heredoc', 'method_call']
22
+ # @example CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
21
23
  #
22
24
  # something do
23
25
  # array = [ # +1
@@ -25,7 +27,7 @@ module RuboCop
25
27
  # 2
26
28
  # ]
27
29
  #
28
- # hash = { # +3
30
+ # hash = { # +1
29
31
  # key: 'value'
30
32
  # }
31
33
  #
@@ -38,9 +40,8 @@ module RuboCop
38
40
  # 1,
39
41
  # 2
40
42
  # )
41
- # end # 6 points
43
+ # end # 4 points
42
44
  #
43
- # NOTE: This cop does not apply for `Struct` definitions.
44
45
  class BlockLength < Base
45
46
  include CodeLength
46
47
  include AllowedMethods
@@ -51,11 +52,12 @@ module RuboCop
51
52
  def on_block(node)
52
53
  return if allowed_method?(node.method_name) || matches_allowed_pattern?(node.method_name)
53
54
  return if method_receiver_excluded?(node)
54
- return if node.class_constructor? || node.struct_constructor?
55
+ return if node.class_constructor?
55
56
 
56
57
  check_code_length(node)
57
58
  end
58
59
  alias on_numblock on_block
60
+ alias on_itblock on_block
59
61
 
60
62
  private
61
63
 
@@ -3,12 +3,12 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Metrics
6
- # Checks for excessive nesting of conditional and looping
7
- # constructs.
6
+ # Checks for excessive nesting of conditional and looping constructs.
8
7
  #
9
- # You can configure if blocks are considered using the `CountBlocks`
10
- # option. When set to `false` (the default) blocks are not counted
11
- # towards the nesting level. Set to `true` to count blocks as well.
8
+ # You can configure if blocks are considered using the `CountBlocks` and `CountModifierForms`
9
+ # options. When both are set to `false` (the default) blocks and modifier forms are not
10
+ # counted towards the nesting level. Set them to `true` to include these in the nesting level
11
+ # calculation as well.
12
12
  #
13
13
  # The maximum level of nesting allowed is configurable.
14
14
  class BlockNesting < Base
@@ -27,7 +27,7 @@ module RuboCop
27
27
 
28
28
  def check_nesting_level(node, max, current_level)
29
29
  if consider_node?(node)
30
- current_level += 1 unless node.if_type? && node.elsif?
30
+ current_level += 1 if count_if_block?(node)
31
31
  if current_level > max
32
32
  self.max = current_level
33
33
  unless part_of_ignored_node?(node)
@@ -41,10 +41,18 @@ module RuboCop
41
41
  end
42
42
  end
43
43
 
44
+ def count_if_block?(node)
45
+ return true unless node.if_type?
46
+ return false if node.elsif?
47
+ return count_modifier_forms? if node.modifier_form?
48
+
49
+ true
50
+ end
51
+
44
52
  def consider_node?(node)
45
53
  return true if NESTING_BLOCKS.include?(node.type)
46
54
 
47
- count_blocks? && node.block_type?
55
+ count_blocks? && node.any_block_type?
48
56
  end
49
57
 
50
58
  def message(max)
@@ -52,7 +60,11 @@ module RuboCop
52
60
  end
53
61
 
54
62
  def count_blocks?
55
- cop_config['CountBlocks']
63
+ cop_config.fetch('CountBlocks', false)
64
+ end
65
+
66
+ def count_modifier_forms?
67
+ cop_config.fetch('CountModifierForms', false)
56
68
  end
57
69
  end
58
70
  end
@@ -8,10 +8,13 @@ module RuboCop
8
8
  # The maximum allowed length is configurable.
9
9
  #
10
10
  # You can set constructs you want to fold with `CountAsOne`.
11
- # Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct
12
- # will be counted as one line regardless of its actual size.
13
11
  #
14
- # @example CountAsOne: ['array', 'heredoc', 'method_call']
12
+ # Available are: 'array', 'hash', 'heredoc', and 'method_call'.
13
+ # Each construct will be counted as one line regardless of its actual size.
14
+ #
15
+ # NOTE: This cop also applies for `Struct` definitions.
16
+ #
17
+ # @example CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
15
18
  #
16
19
  # class Foo
17
20
  # ARRAY = [ # +1
@@ -19,7 +22,7 @@ module RuboCop
19
22
  # 2
20
23
  # ]
21
24
  #
22
- # HASH = { # +3
25
+ # HASH = { # +1
23
26
  # key: 'value'
24
27
  # }
25
28
  #
@@ -32,10 +35,8 @@ module RuboCop
32
35
  # 1,
33
36
  # 2
34
37
  # )
35
- # end # 6 points
38
+ # end # 4 points
36
39
  #
37
- #
38
- # NOTE: This cop also applies for `Struct` definitions.
39
40
  class ClassLength < Base
40
41
  include CodeLength
41
42
 
@@ -43,16 +44,14 @@ module RuboCop
43
44
  check_code_length(node)
44
45
  end
45
46
 
46
- def on_casgn(node)
47
- parent = node.parent
47
+ def on_sclass(node)
48
+ return if node.each_ancestor(:class).any?
48
49
 
49
- if parent&.assignment?
50
- block_node = parent.children[1]
51
- elsif parent&.parent&.masgn_type?
52
- block_node = parent.parent.children[1]
53
- else
54
- _scope, _name, block_node = *node
55
- end
50
+ on_class(node)
51
+ end
52
+
53
+ def on_casgn(node)
54
+ block_node = node.expression || find_expression_within_parent(node.parent)
56
55
 
57
56
  return unless block_node.respond_to?(:class_definition?) && block_node.class_definition?
58
57
 
@@ -64,6 +63,14 @@ module RuboCop
64
63
  def message(length, max_length)
65
64
  format('Class has too many lines. [%<length>d/%<max>d]', length: length, max: max_length)
66
65
  end
66
+
67
+ def find_expression_within_parent(parent)
68
+ if parent&.assignment?
69
+ parent.expression
70
+ elsif parent&.parent&.masgn_type?
71
+ parent.parent.expression
72
+ end
73
+ end
67
74
  end
68
75
  end
69
76
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Metrics
6
+ # Checks for literals with extremely many entries. This is indicative of
7
+ # configuration or data that may be better extracted somewhere else, like
8
+ # a database, fetched from an API, or read from a non-code file (CSV,
9
+ # JSON, YAML, etc.).
10
+ #
11
+ # @example
12
+ # # bad
13
+ # # Huge Array literal
14
+ # [1, 2, '...', 999_999_999]
15
+ #
16
+ # # bad
17
+ # # Huge Hash literal
18
+ # { 1 => 1, 2 => 2, '...' => '...', 999_999_999 => 999_999_999}
19
+ #
20
+ # # bad
21
+ # # Huge Set "literal"
22
+ # Set[1, 2, '...', 999_999_999]
23
+ #
24
+ # # good
25
+ # # Reasonably sized Array literal
26
+ # [1, 2, '...', 10]
27
+ #
28
+ # # good
29
+ # # Reading huge Array from external data source
30
+ # # File.readlines('numbers.txt', chomp: true).map!(&:to_i)
31
+ #
32
+ # # good
33
+ # # Reasonably sized Hash literal
34
+ # { 1 => 1, 2 => 2, '...' => '...', 10 => 10}
35
+ #
36
+ # # good
37
+ # # Reading huge Hash from external data source
38
+ # CSV.foreach('numbers.csv', headers: true).each_with_object({}) do |row, hash|
39
+ # hash[row["key"].to_i] = row["value"].to_i
40
+ # end
41
+ #
42
+ # # good
43
+ # # Reasonably sized Set "literal"
44
+ # Set[1, 2, '...', 10]
45
+ #
46
+ # # good
47
+ # # Reading huge Set from external data source
48
+ # SomeFramework.config_for(:something)[:numbers].to_set
49
+ #
50
+ class CollectionLiteralLength < Base
51
+ MSG = 'Avoid hard coding large quantities of data in code. ' \
52
+ 'Prefer reading the data from an external source.'
53
+ RESTRICT_ON_SEND = [:[]].freeze
54
+
55
+ # @!method set_const?(node)
56
+ def_node_matcher :set_const?, <<~PATTERN
57
+ (const {cbase nil?} :Set)
58
+ PATTERN
59
+
60
+ def on_array(node)
61
+ add_offense(node) if node.children.length >= collection_threshold
62
+ end
63
+ alias on_hash on_array
64
+
65
+ def on_index(node)
66
+ return unless set_const?(node.receiver)
67
+
68
+ add_offense(node) if node.arguments.length >= collection_threshold
69
+ end
70
+
71
+ def on_send(node)
72
+ on_index(node) if node.method?(:[])
73
+ end
74
+
75
+ private
76
+
77
+ def collection_threshold
78
+ cop_config.fetch('LengthThreshold', Float::INFINITY)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -14,11 +14,14 @@ module RuboCop
14
14
  # and ||/or is shorthand for a sequence of ifs, so they also add one.
15
15
  # Loops can be said to have an exit condition, so they add one.
16
16
  # Blocks that are calls to builtin iteration methods
17
- # (e.g. `ary.map{...}) also add one, others are ignored.
17
+ # (e.g. `ary.map{...}`) also add one, others are ignored.
18
+ #
19
+ # @example
18
20
  #
19
21
  # def each_child_node(*types) # count begins: 1
20
22
  # unless block_given? # unless: +1
21
23
  # return to_enum(__method__, *types)
24
+ # end
22
25
  #
23
26
  # children.each do |child| # each{}: +1
24
27
  # next unless child.is_a?(Node) # unless: +1
@@ -33,7 +36,7 @@ module RuboCop
33
36
  include MethodComplexity
34
37
  include Utils::IteratingBlock
35
38
 
36
- MSG = 'Cyclomatic complexity for %<method>s is too high. [%<complexity>d/%<max>d]'
39
+ MSG = 'Cyclomatic complexity for `%<method>s` is too high. [%<complexity>d/%<max>d]'
37
40
  COUNTED_NODES = %i[if while until for csend block block_pass
38
41
  rescue when in_pattern and or or_asgn and_asgn].freeze
39
42
 
@@ -8,15 +8,16 @@ module RuboCop
8
8
  # The maximum allowed length is configurable.
9
9
  #
10
10
  # You can set constructs you want to fold with `CountAsOne`.
11
- # Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct
12
- # will be counted as one line regardless of its actual size.
11
+ #
12
+ # Available are: 'array', 'hash', 'heredoc', and 'method_call'.
13
+ # Each construct will be counted as one line regardless of its actual size.
13
14
  #
14
15
  # NOTE: The `ExcludedMethods` and `IgnoredMethods` configuration is
15
16
  # deprecated and only kept for backwards compatibility.
16
17
  # Please use `AllowedMethods` and `AllowedPatterns` instead.
17
18
  # By default, there are no methods to allowed.
18
19
  #
19
- # @example CountAsOne: ['array', 'heredoc', 'method_call']
20
+ # @example CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
20
21
  #
21
22
  # def m
22
23
  # array = [ # +1
@@ -24,7 +25,7 @@ module RuboCop
24
25
  # 2
25
26
  # ]
26
27
  #
27
- # hash = { # +3
28
+ # hash = { # +1
28
29
  # key: 'value'
29
30
  # }
30
31
  #
@@ -37,7 +38,7 @@ module RuboCop
37
38
  # 1,
38
39
  # 2
39
40
  # )
40
- # end # 6 points
41
+ # end # 4 points
41
42
  #
42
43
  class MethodLength < Base
43
44
  include CodeLength
@@ -47,24 +48,32 @@ module RuboCop
47
48
  LABEL = 'Method'
48
49
 
49
50
  def on_def(node)
50
- return if allowed_method?(node.method_name) || matches_allowed_pattern?(node.method_name)
51
+ return if allowed?(node.method_name)
51
52
 
52
53
  check_code_length(node)
53
54
  end
54
55
  alias on_defs on_def
55
56
 
56
57
  def on_block(node)
57
- return unless node.send_node.method?(:define_method)
58
+ return unless node.method?(:define_method)
59
+
60
+ method_name = node.send_node.first_argument
61
+ return if method_name.basic_literal? && allowed?(method_name.value)
58
62
 
59
63
  check_code_length(node)
60
64
  end
61
65
  alias on_numblock on_block
66
+ alias on_itblock on_block
62
67
 
63
68
  private
64
69
 
65
70
  def cop_label
66
71
  LABEL
67
72
  end
73
+
74
+ def allowed?(method_name)
75
+ allowed_method?(method_name) || matches_allowed_pattern?(method_name)
76
+ end
68
77
  end
69
78
  end
70
79
  end
@@ -8,10 +8,11 @@ module RuboCop
8
8
  # The maximum allowed length is configurable.
9
9
  #
10
10
  # You can set constructs you want to fold with `CountAsOne`.
11
- # Available are: 'array', 'hash', 'heredoc', and 'method_call'. Each construct
12
- # will be counted as one line regardless of its actual size.
13
11
  #
14
- # @example CountAsOne: ['array', 'heredoc', 'method_call']
12
+ # Available are: 'array', 'hash', 'heredoc', and 'method_call'.
13
+ # Each construct will be counted as one line regardless of its actual size.
14
+ #
15
+ # @example CountAsOne: ['array', 'hash', 'heredoc', 'method_call']
15
16
  #
16
17
  # module M
17
18
  # ARRAY = [ # +1
@@ -19,7 +20,7 @@ module RuboCop
19
20
  # 2
20
21
  # ]
21
22
  #
22
- # HASH = { # +3
23
+ # HASH = { # +1
23
24
  # key: 'value'
24
25
  # }
25
26
  #
@@ -32,7 +33,7 @@ module RuboCop
32
33
  # 1,
33
34
  # 2
34
35
  # )
35
- # end # 6 points
36
+ # end # 4 points
36
37
  #
37
38
  class ModuleLength < Base
38
39
  include CodeLength
@@ -49,7 +50,7 @@ module RuboCop
49
50
 
50
51
  # @!method module_definition?(node)
51
52
  def_node_matcher :module_definition?, <<~PATTERN
52
- (casgn nil? _ ({block numblock} (send (const {nil? cbase} :Module) :new) ...))
53
+ (casgn nil? _ (any_block (send (const {nil? cbase} :Module) :new) ...))
53
54
  PATTERN
54
55
 
55
56
  def message(length, max_length)
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # end # ===
28
28
  # end # 7 complexity points
29
29
  class PerceivedComplexity < CyclomaticComplexity
30
- MSG = 'Perceived complexity for %<method>s is too high. [%<complexity>d/%<max>d]'
30
+ MSG = 'Perceived complexity for `%<method>s` is too high. [%<complexity>d/%<max>d]'
31
31
 
32
32
  COUNTED_NODES = (CyclomaticComplexity::COUNTED_NODES - [:when] + [:case]).freeze
33
33
 
@@ -95,7 +95,7 @@ module RuboCop
95
95
  def compound_assignment(node)
96
96
  # Methods setter cannot be detected for multiple assignments
97
97
  # and shorthand assigns, so we'll count them here instead
98
- children = node.masgn_type? ? node.children[0].children : node.children
98
+ children = node.masgn_type? ? node.assignments : node.children
99
99
 
100
100
  will_be_miscounted = children.count do |child|
101
101
  child.respond_to?(:setter_method?) && !child.setter_method?
@@ -117,8 +117,7 @@ module RuboCop
117
117
  end
118
118
 
119
119
  def capturing_variable?(name)
120
- # TODO: Remove `Symbol#to_s` after supporting only Ruby >= 2.7.
121
- name && !name.to_s.start_with?('_')
120
+ name && !name.start_with?('_')
122
121
  end
123
122
 
124
123
  def branch?(node)
@@ -9,7 +9,7 @@ module RuboCop
9
9
  extend NodePattern::Macros
10
10
  include Util
11
11
 
12
- FOLDABLE_TYPES = %i[array hash heredoc send csend].freeze
12
+ FOLDABLE_TYPES = %i[array hash heredoc method_call].freeze
13
13
  CLASSLIKE_TYPES = %i[class module].freeze
14
14
  private_constant :FOLDABLE_TYPES, :CLASSLIKE_TYPES
15
15
 
@@ -43,16 +43,16 @@ module RuboCop
43
43
  types.map do |type|
44
44
  case type
45
45
  when :array
46
- ->(node) { node.array_type? }
46
+ lambda(&:array_type?)
47
47
  when :hash
48
- ->(node) { node.hash_type? }
48
+ lambda(&:hash_type?)
49
49
  when :heredoc
50
50
  ->(node) { heredoc_node?(node) }
51
51
  when :method_call
52
- ->(node) { node.call_type? }
52
+ lambda(&:call_type?)
53
53
  else
54
- raise ArgumentError, "Unknown foldable type: #{type.inspect}. " \
55
- "Valid foldable types are: #{FOLDABLE_TYPES.join(', ')}."
54
+ raise Warning, "Unknown foldable type: #{type.inspect}. " \
55
+ "Valid foldable types are: #{FOLDABLE_TYPES.join(', ')}."
56
56
  end
57
57
  end
58
58
  end
@@ -63,7 +63,7 @@ module RuboCop
63
63
  types
64
64
  end
65
65
 
66
- def code_length(node)
66
+ def code_length(node) # rubocop:disable Metrics/MethodLength
67
67
  if classlike_node?(node)
68
68
  classlike_code_length(node)
69
69
  elsif heredoc_node?(node)
@@ -72,7 +72,14 @@ module RuboCop
72
72
  body = extract_body(node)
73
73
  return 0 unless body
74
74
 
75
- body.source.each_line.count { |line| !irrelevant_line?(line) }
75
+ source =
76
+ if node_with_heredoc?(body)
77
+ source_from_node_with_heredoc(body)
78
+ else
79
+ body.source.lines
80
+ end
81
+
82
+ source.count { |line| !irrelevant_line?(line) }
76
83
  end
77
84
  end
78
85
 
@@ -138,11 +145,10 @@ module RuboCop
138
145
 
139
146
  def extract_body(node)
140
147
  case node.type
141
- when :class, :module, :block, :numblock, :def, :defs
148
+ when :class, :module, :sclass, :block, :numblock, :itblock, :def, :defs
142
149
  node.body
143
150
  when :casgn
144
- _scope, _name, value = *node
145
- extract_body(value)
151
+ extract_body(node.expression)
146
152
  else
147
153
  node
148
154
  end
@@ -163,8 +169,8 @@ module RuboCop
163
169
  return 0 unless parenthesized?(parent)
164
170
 
165
171
  [
166
- parent.loc.begin.end_pos != descendant.loc.expression.begin_pos,
167
- parent.loc.end.begin_pos != descendant.loc.expression.end_pos
172
+ parent.loc.begin.end_pos != descendant.source_range.begin_pos,
173
+ parent.loc.end.begin_pos != descendant.source_range.end_pos
168
174
  ].count(true)
169
175
  end
170
176
 
@@ -175,6 +181,27 @@ module RuboCop
175
181
  def another_args?(node)
176
182
  node.call_type? && node.arguments.count > 1
177
183
  end
184
+
185
+ def node_with_heredoc?(node)
186
+ node.each_descendant(:str, :dstr).any? { |descendant| heredoc_node?(descendant) }
187
+ end
188
+
189
+ def source_from_node_with_heredoc(node)
190
+ last_line = -1
191
+ node.each_descendant do |descendant|
192
+ next unless descendant.source
193
+
194
+ descendant_last_line =
195
+ if heredoc_node?(descendant)
196
+ descendant.loc.heredoc_end.line
197
+ else
198
+ descendant.last_line
199
+ end
200
+
201
+ last_line = [last_line, descendant_last_line].max
202
+ end
203
+ @processed_source[(node.first_line - 1)..(last_line - 1)]
204
+ end
178
205
  end
179
206
  end
180
207
  end
@@ -26,6 +26,13 @@ module RuboCop
26
26
  extend NodePattern::Macros
27
27
  include RuboCop::AST::Sexp
28
28
 
29
+ VAR_SETTER_TO_GETTER = {
30
+ lvasgn: :lvar,
31
+ ivasgn: :ivar,
32
+ cvasgn: :cvar,
33
+ gvasgn: :gvar
34
+ }.freeze
35
+
29
36
  # Plug into the calculator
30
37
  def initialize(node, discount_repeated_attributes: false)
31
38
  super(node)
@@ -114,13 +121,6 @@ module RuboCop
114
121
  calls.fetch(value) { yield [calls, value] }
115
122
  end
116
123
 
117
- VAR_SETTER_TO_GETTER = {
118
- lvasgn: :lvar,
119
- ivasgn: :ivar,
120
- cvasgn: :cvar,
121
- gvasgn: :gvar
122
- }.freeze
123
-
124
124
  # @returns `[receiver, method | nil]` for the given setter `node`
125
125
  # or `nil` if it is not a setter.
126
126
  def setter_to_getter(node)
@@ -16,7 +16,7 @@ module RuboCop
16
16
  # The token that makes up a disable comment.
17
17
  # The allowed specification for comments after `# rubocop: disable` is
18
18
  # `DepartmentName/CopName` or` all`.
19
- DISABLING_COPS_CONTENT_TOKEN = %r{[A-z]+/[A-z]+|all}.freeze
19
+ DISABLING_COPS_CONTENT_TOKEN = %r{[A-Za-z]+/[A-Za-z]+|all}.freeze
20
20
 
21
21
  def on_new_investigation
22
22
  processed_source.comments.each do |comment|
@@ -45,7 +45,7 @@ module RuboCop
45
45
  end
46
46
 
47
47
  def check_cop_name(name, comment, offset)
48
- start = comment.location.expression.begin_pos + offset
48
+ start = comment.source_range.begin_pos + offset
49
49
  range = range_between(start, start + name.length)
50
50
 
51
51
  add_offense(range) do |corrector|
@@ -67,7 +67,7 @@ module RuboCop
67
67
  end
68
68
 
69
69
  def contain_unexpected_character_for_department_name?(name)
70
- name.match?(%r{[^A-z/, ]})
70
+ name.match?(%r{[^A-Za-z/, ]})
71
71
  end
72
72
 
73
73
  def qualified_legacy_cop_name(cop_name)
@@ -5,10 +5,10 @@ module RuboCop
5
5
  # This module checks for nodes that should be aligned to the left or right.
6
6
  # This amount is determined by the instance variable @column_delta.
7
7
  module Alignment
8
- private
9
-
10
8
  SPACE = ' '
11
9
 
10
+ private
11
+
12
12
  attr_reader :column_delta
13
13
 
14
14
  def configured_indentation_width
@@ -65,8 +65,12 @@ module RuboCop
65
65
  inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
66
66
  end
67
67
 
68
- # @deprecated Use processed_source.comment_at_line(line)
69
- def end_of_line_comment(line)
68
+ # @deprecated Use processed_source.line_with_comment?(line)
69
+ def end_of_line_comment(line) # rubocop:disable Naming/PredicateMethod
70
+ warn Rainbow(<<~WARNING).yellow, uplevel: 1
71
+ `end_of_line_comment` is deprecated. Use `processed_source.line_with_comment?` instead.
72
+ WARNING
73
+
70
74
  processed_source.line_with_comment?(line)
71
75
  end
72
76