rubocop 1.52.1 → 1.79.2

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 (658) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +93 -88
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +1 -160
  6. data/config/default.yml +596 -91
  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 +28 -15
  12. data/lib/rubocop/cli/command/execute_runner.rb +4 -4
  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 +26 -3
  19. data/lib/rubocop/comment_config.rb +3 -3
  20. data/lib/rubocop/config.rb +92 -22
  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 +52 -20
  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 +56 -9
  28. data/lib/rubocop/config_validator.rb +39 -20
  29. data/lib/rubocop/cop/autocorrect_logic.rb +57 -25
  30. data/lib/rubocop/cop/base.rb +80 -19
  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 +3 -3
  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/cop.rb +30 -4
  39. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
  40. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  41. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +6 -14
  42. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
  43. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
  44. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +6 -3
  45. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
  46. data/lib/rubocop/cop/documentation.rb +32 -5
  47. data/lib/rubocop/cop/exclude_limit.rb +1 -1
  48. data/lib/rubocop/cop/force.rb +12 -0
  49. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  50. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  51. data/lib/rubocop/cop/gemspec/dependency_version.rb +5 -7
  52. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -4
  53. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +39 -17
  54. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +10 -2
  55. data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
  56. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -3
  57. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
  58. data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
  59. data/lib/rubocop/cop/generator.rb +6 -0
  60. data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
  61. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  62. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
  63. data/lib/rubocop/cop/internal_affairs/example_description.rb +51 -25
  64. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  65. data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
  66. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +6 -5
  67. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  68. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
  69. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  70. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +127 -33
  71. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  72. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  73. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +231 -0
  74. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  75. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  76. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  77. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
  78. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  79. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  80. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  81. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
  82. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  83. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
  84. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
  85. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +11 -2
  86. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
  87. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
  88. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +23 -2
  89. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -5
  90. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
  91. data/lib/rubocop/cop/internal_affairs.rb +9 -0
  92. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +6 -2
  93. data/lib/rubocop/cop/layout/argument_alignment.rb +3 -10
  94. data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
  95. data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
  96. data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
  97. data/lib/rubocop/cop/layout/block_alignment.rb +32 -13
  98. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
  99. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  100. data/lib/rubocop/cop/layout/class_structure.rb +51 -9
  101. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -1
  102. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
  103. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  104. data/lib/rubocop/cop/layout/condition_position.rb +0 -4
  105. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -2
  106. data/lib/rubocop/cop/layout/dot_position.rb +2 -6
  107. data/lib/rubocop/cop/layout/else_alignment.rb +2 -2
  108. data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
  109. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +46 -13
  110. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  111. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  112. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +33 -13
  113. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  114. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +37 -7
  115. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
  116. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
  117. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
  118. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
  119. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +14 -8
  120. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +23 -1
  121. data/lib/rubocop/cop/layout/end_alignment.rb +16 -4
  122. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -11
  123. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -11
  124. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +19 -10
  125. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
  126. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  127. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
  128. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +3 -3
  129. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -6
  130. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -3
  131. data/lib/rubocop/cop/layout/heredoc_indentation.rb +5 -2
  132. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  133. data/lib/rubocop/cop/layout/indentation_width.rb +16 -16
  134. data/lib/rubocop/cop/layout/leading_comment_space.rb +84 -2
  135. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +28 -11
  136. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +8 -2
  137. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +4 -2
  138. data/lib/rubocop/cop/layout/line_length.rb +168 -28
  139. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
  140. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  141. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
  142. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
  143. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +21 -6
  144. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  145. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
  146. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -4
  147. data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
  148. data/lib/rubocop/cop/layout/redundant_line_break.rb +40 -44
  149. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +8 -9
  150. data/lib/rubocop/cop/layout/single_line_block_chain.rb +6 -1
  151. data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
  152. data/lib/rubocop/cop/layout/space_after_comma.rb +10 -2
  153. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  154. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  155. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  156. data/lib/rubocop/cop/layout/space_around_keyword.rb +8 -2
  157. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -3
  158. data/lib/rubocop/cop/layout/space_around_operators.rb +83 -38
  159. data/lib/rubocop/cop/layout/space_before_block_braces.rb +20 -10
  160. data/lib/rubocop/cop/layout/space_before_brackets.rb +7 -40
  161. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  162. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  163. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +18 -3
  164. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -0
  165. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +8 -1
  166. data/lib/rubocop/cop/layout/space_inside_parens.rb +1 -1
  167. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  168. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -5
  169. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
  170. data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
  171. data/lib/rubocop/cop/legacy/corrector.rb +12 -2
  172. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -3
  173. data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
  174. data/lib/rubocop/cop/lint/ambiguous_range.rb +9 -1
  175. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
  176. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  177. data/lib/rubocop/cop/lint/assignment_in_condition.rb +7 -9
  178. data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
  179. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +11 -13
  180. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -4
  181. data/lib/rubocop/cop/lint/circular_argument_reference.rb +4 -14
  182. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
  183. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
  184. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  185. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
  186. data/lib/rubocop/cop/lint/debugger.rb +45 -10
  187. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +2 -2
  188. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -12
  189. data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
  190. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
  191. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -5
  192. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  193. data/lib/rubocop/cop/lint/duplicate_methods.rb +110 -32
  194. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +47 -20
  195. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  196. data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
  197. data/lib/rubocop/cop/lint/else_layout.rb +0 -2
  198. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  199. data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -58
  200. data/lib/rubocop/cop/lint/empty_ensure.rb +2 -12
  201. data/lib/rubocop/cop/lint/empty_expression.rb +0 -2
  202. data/lib/rubocop/cop/lint/empty_file.rb +0 -2
  203. data/lib/rubocop/cop/lint/empty_interpolation.rb +3 -5
  204. data/lib/rubocop/cop/lint/empty_when.rb +1 -3
  205. data/lib/rubocop/cop/lint/ensure_return.rb +2 -10
  206. data/lib/rubocop/cop/lint/erb_new_arguments.rb +24 -23
  207. data/lib/rubocop/cop/lint/float_comparison.rb +58 -15
  208. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -8
  209. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -12
  210. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
  211. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  212. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  213. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
  214. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
  215. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
  216. data/lib/rubocop/cop/lint/interpolation_check.rb +9 -4
  217. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  218. data/lib/rubocop/cop/lint/literal_as_condition.rb +126 -11
  219. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  220. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +50 -13
  221. data/lib/rubocop/cop/lint/loop.rb +6 -12
  222. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  223. data/lib/rubocop/cop/lint/missing_super.rb +33 -7
  224. data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
  225. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  226. data/lib/rubocop/cop/lint/nested_method_definition.rb +10 -12
  227. data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -25
  228. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -7
  229. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +22 -10
  230. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +6 -8
  231. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
  232. data/lib/rubocop/cop/lint/number_conversion.rb +13 -4
  233. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
  234. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  235. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  236. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
  237. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +6 -11
  238. data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
  239. data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
  240. data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
  241. data/lib/rubocop/cop/lint/rand_one.rb +0 -4
  242. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +4 -2
  243. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  244. data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -12
  245. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +178 -10
  246. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +9 -8
  247. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -6
  248. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  249. data/lib/rubocop/cop/lint/redundant_with_index.rb +9 -2
  250. data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -2
  251. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  252. data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
  253. data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
  254. data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
  255. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -5
  256. data/lib/rubocop/cop/lint/rescue_type.rb +5 -11
  257. data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -13
  258. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +31 -13
  259. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -41
  260. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  261. data/lib/rubocop/cop/lint/self_assignment.rb +71 -10
  262. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  263. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  264. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +26 -12
  265. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  266. data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
  267. data/lib/rubocop/cop/lint/suppressed_exception.rb +3 -3
  268. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  269. data/lib/rubocop/cop/lint/symbol_conversion.rb +9 -4
  270. data/lib/rubocop/cop/lint/syntax.rb +10 -4
  271. data/lib/rubocop/cop/lint/to_enum_arguments.rb +7 -7
  272. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  273. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  274. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  275. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +3 -1
  276. data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
  277. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +4 -3
  278. data/lib/rubocop/cop/lint/unreachable_code.rb +56 -9
  279. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -8
  280. data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
  281. data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
  282. data/lib/rubocop/cop/lint/useless_access_modifier.rb +36 -10
  283. data/lib/rubocop/cop/lint/useless_assignment.rb +51 -20
  284. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  285. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  286. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  287. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -4
  288. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  289. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
  290. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  291. data/lib/rubocop/cop/lint/useless_rescue.rb +2 -2
  292. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -5
  293. data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -29
  294. data/lib/rubocop/cop/lint/useless_times.rb +2 -2
  295. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  296. data/lib/rubocop/cop/lint/void.rb +88 -27
  297. data/lib/rubocop/cop/message_annotator.rb +7 -3
  298. data/lib/rubocop/cop/metrics/abc_size.rb +4 -4
  299. data/lib/rubocop/cop/metrics/block_length.rb +8 -6
  300. data/lib/rubocop/cop/metrics/block_nesting.rb +20 -8
  301. data/lib/rubocop/cop/metrics/class_length.rb +23 -17
  302. data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
  303. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +5 -2
  304. data/lib/rubocop/cop/metrics/method_length.rb +16 -7
  305. data/lib/rubocop/cop/metrics/module_length.rb +7 -6
  306. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  307. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  308. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +39 -12
  309. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +7 -7
  310. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  311. data/lib/rubocop/cop/mixin/alignment.rb +8 -4
  312. data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
  313. data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
  314. data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
  315. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  316. data/lib/rubocop/cop/mixin/check_line_breakable.rb +22 -12
  317. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  318. data/lib/rubocop/cop/mixin/code_length.rb +12 -1
  319. data/lib/rubocop/cop/mixin/comments_help.rb +24 -15
  320. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  321. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
  322. data/lib/rubocop/cop/mixin/def_node.rb +1 -1
  323. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  324. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
  325. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  326. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  327. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  328. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  329. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +23 -12
  330. data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
  331. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
  332. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +45 -35
  333. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  334. data/lib/rubocop/cop/mixin/hash_transform_method.rb +74 -74
  335. data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
  336. data/lib/rubocop/cop/mixin/line_length_help.rb +34 -12
  337. data/lib/rubocop/cop/mixin/method_complexity.rb +17 -7
  338. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +10 -11
  339. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
  340. data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
  341. data/lib/rubocop/cop/mixin/percent_literal.rb +2 -2
  342. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +71 -35
  343. data/lib/rubocop/cop/mixin/range_help.rb +15 -4
  344. data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
  345. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
  346. data/lib/rubocop/cop/mixin/statement_modifier.rb +11 -5
  347. data/lib/rubocop/cop/mixin/string_help.rb +5 -3
  348. data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
  349. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  350. data/lib/rubocop/cop/mixin/trailing_comma.rb +22 -6
  351. data/lib/rubocop/cop/naming/accessor_method_name.rb +11 -6
  352. data/lib/rubocop/cop/naming/block_forwarding.rb +40 -9
  353. data/lib/rubocop/cop/naming/constant_name.rb +7 -9
  354. data/lib/rubocop/cop/naming/file_name.rb +5 -7
  355. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
  356. data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
  357. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +16 -17
  358. data/lib/rubocop/cop/naming/method_name.rb +185 -15
  359. data/lib/rubocop/cop/naming/predicate_method.rb +306 -0
  360. data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
  361. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +14 -13
  362. data/lib/rubocop/cop/naming/variable_name.rb +50 -6
  363. data/lib/rubocop/cop/naming/variable_number.rb +2 -3
  364. data/lib/rubocop/cop/offense.rb +4 -5
  365. data/lib/rubocop/cop/registry.rb +9 -6
  366. data/lib/rubocop/cop/security/compound_hash.rb +4 -2
  367. data/lib/rubocop/cop/security/eval.rb +2 -1
  368. data/lib/rubocop/cop/security/open.rb +3 -2
  369. data/lib/rubocop/cop/security/yaml_load.rb +3 -2
  370. data/lib/rubocop/cop/style/access_modifier_declarations.rb +172 -32
  371. data/lib/rubocop/cop/style/accessor_grouping.rb +43 -9
  372. data/lib/rubocop/cop/style/alias.rb +11 -9
  373. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  374. data/lib/rubocop/cop/style/and_or.rb +1 -1
  375. data/lib/rubocop/cop/style/arguments_forwarding.rb +472 -63
  376. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  377. data/lib/rubocop/cop/style/array_intersect.rb +94 -44
  378. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
  379. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
  380. data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
  381. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  382. data/lib/rubocop/cop/style/block_delimiters.rb +56 -24
  383. data/lib/rubocop/cop/style/case_like_if.rb +14 -17
  384. data/lib/rubocop/cop/style/class_and_module_children.rb +52 -11
  385. data/lib/rubocop/cop/style/class_check.rb +1 -0
  386. data/lib/rubocop/cop/style/class_equality_comparison.rb +8 -1
  387. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  388. data/lib/rubocop/cop/style/collection_compact.rb +25 -15
  389. data/lib/rubocop/cop/style/collection_methods.rb +4 -1
  390. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  391. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  392. data/lib/rubocop/cop/style/combinable_loops.rb +25 -9
  393. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  394. data/lib/rubocop/cop/style/commented_keyword.rb +30 -4
  395. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  396. data/lib/rubocop/cop/style/concat_array_literals.rb +3 -2
  397. data/lib/rubocop/cop/style/conditional_assignment.rb +53 -38
  398. data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
  399. data/lib/rubocop/cop/style/copyright.rb +31 -21
  400. data/lib/rubocop/cop/style/data_inheritance.rb +8 -1
  401. data/lib/rubocop/cop/style/date_time.rb +5 -4
  402. data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -7
  403. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  404. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
  405. data/lib/rubocop/cop/style/documentation.rb +25 -25
  406. data/lib/rubocop/cop/style/documentation_method.rb +20 -0
  407. data/lib/rubocop/cop/style/double_negation.rb +4 -4
  408. data/lib/rubocop/cop/style/each_for_simple_loop.rb +11 -15
  409. data/lib/rubocop/cop/style/each_with_object.rb +3 -4
  410. data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
  411. data/lib/rubocop/cop/style/empty_else.rb +10 -7
  412. data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
  413. data/lib/rubocop/cop/style/empty_literal.rb +36 -23
  414. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  415. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  416. data/lib/rubocop/cop/style/endless_method.rb +150 -18
  417. data/lib/rubocop/cop/style/eval_with_location.rb +23 -31
  418. data/lib/rubocop/cop/style/exact_regexp_match.rb +6 -5
  419. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
  420. data/lib/rubocop/cop/style/explicit_block_argument.rb +18 -5
  421. data/lib/rubocop/cop/style/exponential_notation.rb +6 -5
  422. data/lib/rubocop/cop/style/fetch_env_var.rb +34 -7
  423. data/lib/rubocop/cop/style/file_null.rb +89 -0
  424. data/lib/rubocop/cop/style/file_read.rb +2 -5
  425. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  426. data/lib/rubocop/cop/style/file_write.rb +2 -5
  427. data/lib/rubocop/cop/style/float_division.rb +8 -4
  428. data/lib/rubocop/cop/style/for.rb +4 -2
  429. data/lib/rubocop/cop/style/format_string.rb +33 -12
  430. data/lib/rubocop/cop/style/format_string_token.rb +38 -11
  431. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
  432. data/lib/rubocop/cop/style/global_std_stream.rb +10 -1
  433. data/lib/rubocop/cop/style/global_vars.rb +1 -3
  434. data/lib/rubocop/cop/style/guard_clause.rb +46 -4
  435. data/lib/rubocop/cop/style/hash_conversion.rb +26 -9
  436. data/lib/rubocop/cop/style/hash_each_methods.rb +110 -12
  437. data/lib/rubocop/cop/style/hash_except.rb +38 -146
  438. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  439. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  440. data/lib/rubocop/cop/style/hash_syntax.rb +35 -7
  441. data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
  442. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
  443. data/lib/rubocop/cop/style/identical_conditional_branches.rb +57 -9
  444. data/lib/rubocop/cop/style/if_inside_else.rb +11 -15
  445. data/lib/rubocop/cop/style/if_unless_modifier.rb +36 -9
  446. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  447. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +8 -8
  448. data/lib/rubocop/cop/style/if_with_semicolon.rb +62 -8
  449. data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
  450. data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
  451. data/lib/rubocop/cop/style/inverse_methods.rb +22 -18
  452. data/lib/rubocop/cop/style/invertible_unless_condition.rb +49 -7
  453. data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
  454. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  455. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  456. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  457. data/lib/rubocop/cop/style/keyword_parameters_order.rb +14 -8
  458. data/lib/rubocop/cop/style/lambda.rb +5 -4
  459. data/lib/rubocop/cop/style/lambda_call.rb +14 -3
  460. data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
  461. data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
  462. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +82 -50
  463. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  464. data/lib/rubocop/cop/style/map_to_hash.rb +29 -10
  465. data/lib/rubocop/cop/style/map_to_set.rb +4 -5
  466. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +59 -25
  467. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +21 -5
  468. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +30 -13
  469. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +3 -4
  470. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
  471. data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
  472. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  473. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +35 -5
  474. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  475. data/lib/rubocop/cop/style/multiline_block_chain.rb +3 -2
  476. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
  477. data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
  478. data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -9
  479. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
  480. data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
  481. data/lib/rubocop/cop/style/multiple_comparison.rb +53 -60
  482. data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
  483. data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
  484. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  485. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -2
  486. data/lib/rubocop/cop/style/nested_ternary_operator.rb +8 -15
  487. data/lib/rubocop/cop/style/next.rb +45 -1
  488. data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
  489. data/lib/rubocop/cop/style/not.rb +1 -1
  490. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  491. data/lib/rubocop/cop/style/numeric_predicate.rb +12 -4
  492. data/lib/rubocop/cop/style/object_then.rb +16 -14
  493. data/lib/rubocop/cop/style/one_line_conditional.rb +31 -6
  494. data/lib/rubocop/cop/style/open_struct_use.rb +6 -6
  495. data/lib/rubocop/cop/style/operator_method_call.rb +32 -8
  496. data/lib/rubocop/cop/style/or_assignment.rb +3 -6
  497. data/lib/rubocop/cop/style/parallel_assignment.rb +47 -45
  498. data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
  499. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  500. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  501. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  502. data/lib/rubocop/cop/style/proc.rb +2 -2
  503. data/lib/rubocop/cop/style/quoted_symbols.rb +2 -4
  504. data/lib/rubocop/cop/style/raise_args.rb +19 -14
  505. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  506. data/lib/rubocop/cop/style/redundant_argument.rb +35 -4
  507. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  508. data/lib/rubocop/cop/style/redundant_assignment.rb +11 -3
  509. data/lib/rubocop/cop/style/redundant_begin.rb +17 -4
  510. data/lib/rubocop/cop/style/redundant_condition.rb +97 -25
  511. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
  512. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
  513. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +89 -5
  514. data/lib/rubocop/cop/style/redundant_each.rb +7 -4
  515. data/lib/rubocop/cop/style/redundant_exception.rb +33 -13
  516. data/lib/rubocop/cop/style/redundant_fetch_block.rb +4 -12
  517. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  518. data/lib/rubocop/cop/style/redundant_filter_chain.rb +23 -6
  519. data/lib/rubocop/cop/style/redundant_format.rb +262 -0
  520. data/lib/rubocop/cop/style/redundant_freeze.rb +4 -4
  521. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  522. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -1
  523. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  524. data/lib/rubocop/cop/style/redundant_line_continuation.rb +73 -20
  525. data/lib/rubocop/cop/style/redundant_parentheses.rb +155 -40
  526. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  527. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
  528. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
  529. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +10 -25
  530. data/lib/rubocop/cop/style/redundant_return.rb +16 -5
  531. data/lib/rubocop/cop/style/redundant_self.rb +32 -20
  532. data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
  533. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +12 -5
  534. data/lib/rubocop/cop/style/redundant_sort.rb +11 -10
  535. data/lib/rubocop/cop/style/redundant_sort_by.rb +19 -3
  536. data/lib/rubocop/cop/style/redundant_string_escape.rb +5 -3
  537. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  538. data/lib/rubocop/cop/style/require_order.rb +2 -2
  539. data/lib/rubocop/cop/style/rescue_modifier.rb +18 -4
  540. data/lib/rubocop/cop/style/return_nil.rb +8 -4
  541. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
  542. data/lib/rubocop/cop/style/safe_navigation.rb +145 -61
  543. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  544. data/lib/rubocop/cop/style/sample.rb +3 -4
  545. data/lib/rubocop/cop/style/select_by_regexp.rb +20 -13
  546. data/lib/rubocop/cop/style/self_assignment.rb +12 -18
  547. data/lib/rubocop/cop/style/semicolon.rb +10 -5
  548. data/lib/rubocop/cop/style/send.rb +4 -4
  549. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  550. data/lib/rubocop/cop/style/signal_exception.rb +3 -4
  551. data/lib/rubocop/cop/style/single_argument_dig.rb +16 -8
  552. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  553. data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
  554. data/lib/rubocop/cop/style/single_line_methods.rb +13 -11
  555. data/lib/rubocop/cop/style/slicing_with_range.rb +105 -10
  556. data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -88
  557. data/lib/rubocop/cop/style/special_global_vars.rb +2 -3
  558. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
  559. data/lib/rubocop/cop/style/string_chars.rb +1 -0
  560. data/lib/rubocop/cop/style/string_concatenation.rb +15 -15
  561. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  562. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
  563. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  564. data/lib/rubocop/cop/style/strip.rb +7 -4
  565. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -2
  566. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  567. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  568. data/lib/rubocop/cop/style/swap_values.rb +4 -15
  569. data/lib/rubocop/cop/style/symbol_array.rb +35 -15
  570. data/lib/rubocop/cop/style/symbol_proc.rb +78 -6
  571. data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
  572. data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -1
  573. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +11 -2
  574. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
  575. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  576. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
  577. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
  578. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
  579. data/lib/rubocop/cop/style/unpack_first.rb +11 -14
  580. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
  581. data/lib/rubocop/cop/style/while_until_do.rb +0 -2
  582. data/lib/rubocop/cop/style/while_until_modifier.rb +0 -2
  583. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  584. data/lib/rubocop/cop/style/yoda_condition.rb +12 -6
  585. data/lib/rubocop/cop/style/yoda_expression.rb +10 -8
  586. data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
  587. data/lib/rubocop/cop/team.rb +28 -4
  588. data/lib/rubocop/cop/util.rb +20 -7
  589. data/lib/rubocop/cop/utils/format_string.rb +10 -5
  590. data/lib/rubocop/cop/variable_force/assignment.rb +35 -7
  591. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  592. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  593. data/lib/rubocop/cop/variable_force/variable.rb +14 -3
  594. data/lib/rubocop/cop/variable_force/variable_table.rb +5 -5
  595. data/lib/rubocop/cop/variable_force.rb +40 -19
  596. data/lib/rubocop/cops_documentation_generator.rb +133 -56
  597. data/lib/rubocop/core_ext/string.rb +2 -6
  598. data/lib/rubocop/directive_comment.rb +54 -18
  599. data/lib/rubocop/ext/regexp_node.rb +17 -35
  600. data/lib/rubocop/ext/regexp_parser.rb +7 -21
  601. data/lib/rubocop/file_finder.rb +11 -9
  602. data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
  603. data/lib/rubocop/formatter/disabled_config_formatter.rb +26 -10
  604. data/lib/rubocop/formatter/formatter_set.rb +8 -2
  605. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  606. data/lib/rubocop/formatter/html_formatter.rb +38 -15
  607. data/lib/rubocop/formatter/json_formatter.rb +0 -1
  608. data/lib/rubocop/formatter/junit_formatter.rb +71 -24
  609. data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
  610. data/lib/rubocop/formatter/offense_count_formatter.rb +13 -3
  611. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  612. data/lib/rubocop/formatter/tap_formatter.rb +3 -7
  613. data/lib/rubocop/formatter.rb +1 -1
  614. data/lib/rubocop/lockfile.rb +58 -7
  615. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  616. data/lib/rubocop/lsp/logger.rb +22 -0
  617. data/lib/rubocop/lsp/routes.rb +227 -0
  618. data/lib/rubocop/lsp/runtime.rb +69 -0
  619. data/lib/rubocop/lsp/server.rb +70 -0
  620. data/lib/rubocop/lsp/severity.rb +27 -0
  621. data/lib/rubocop/lsp/stdin_runner.rb +85 -0
  622. data/lib/rubocop/lsp.rb +36 -0
  623. data/lib/rubocop/magic_comment.rb +24 -14
  624. data/lib/rubocop/options.rb +54 -23
  625. data/lib/rubocop/path_util.rb +21 -10
  626. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  627. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  628. data/lib/rubocop/plugin/load_error.rb +26 -0
  629. data/lib/rubocop/plugin/loader.rb +100 -0
  630. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  631. data/lib/rubocop/plugin.rb +46 -0
  632. data/lib/rubocop/rake_task.rb +5 -2
  633. data/lib/rubocop/remote_config.rb +5 -1
  634. data/lib/rubocop/result_cache.rb +29 -30
  635. data/lib/rubocop/rspec/cop_helper.rb +20 -2
  636. data/lib/rubocop/rspec/expect_offense.rb +31 -12
  637. data/lib/rubocop/rspec/shared_contexts.rb +114 -21
  638. data/lib/rubocop/rspec/support.rb +7 -2
  639. data/lib/rubocop/runner.rb +40 -13
  640. data/lib/rubocop/server/cache.rb +63 -10
  641. data/lib/rubocop/server/cli.rb +2 -2
  642. data/lib/rubocop/server/client_command/base.rb +10 -0
  643. data/lib/rubocop/server/client_command/exec.rb +4 -4
  644. data/lib/rubocop/server/client_command/start.rb +11 -1
  645. data/lib/rubocop/server/core.rb +5 -0
  646. data/lib/rubocop/server/server_command/exec.rb +0 -1
  647. data/lib/rubocop/string_interpreter.rb +3 -3
  648. data/lib/rubocop/target_finder.rb +97 -82
  649. data/lib/rubocop/target_ruby.rb +102 -77
  650. data/lib/rubocop/version.rb +67 -9
  651. data/lib/rubocop/yaml_duplication_checker.rb +20 -26
  652. data/lib/rubocop.rb +69 -2
  653. data/lib/ruby_lsp/rubocop/addon.rb +75 -0
  654. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
  655. metadata +136 -42
  656. data/lib/rubocop/cop/naming/predicate_name.rb +0 -134
  657. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
  658. /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for chained `dig` calls that can be collapsed into a single `dig`.
7
+ #
8
+ # @safety
9
+ # This cop is unsafe because it cannot be guaranteed that the receiver
10
+ # is an `Enumerable` or does not have a nonstandard implementation
11
+ # of `dig`.
12
+ #
13
+ # @example
14
+ # # bad
15
+ # x.dig(:foo).dig(:bar).dig(:baz)
16
+ # x.dig(:foo, :bar).dig(:baz)
17
+ # x.dig(:foo, :bar)&.dig(:baz)
18
+ #
19
+ # # good
20
+ # x.dig(:foo, :bar, :baz)
21
+ #
22
+ # # good - `dig`s cannot be combined
23
+ # x.dig(:foo).bar.dig(:baz)
24
+ #
25
+ class DigChain < Base
26
+ extend AutoCorrector
27
+ include CommentsHelp
28
+ include DigHelp
29
+
30
+ MSG = 'Use `%<replacement>s` instead of chaining.'
31
+ RESTRICT_ON_SEND = %i[dig].freeze
32
+
33
+ def on_send(node)
34
+ return if ignored_node?(node)
35
+ return unless node.loc.dot
36
+ return unless dig?(node)
37
+
38
+ range, arguments = inspect_chain(node)
39
+ return if invalid_arguments?(arguments)
40
+ return unless range
41
+
42
+ register_offense(node, range, arguments)
43
+ end
44
+ alias on_csend on_send
45
+
46
+ private
47
+
48
+ # Walk up the method chain while the receiver is `dig` with arguments.
49
+ def inspect_chain(node)
50
+ arguments = node.arguments.dup
51
+ end_range = node.source_range.end
52
+
53
+ while dig?(node = node.receiver)
54
+ begin_range = node.loc.selector
55
+ arguments.unshift(*node.arguments)
56
+ ignore_node(node)
57
+ end
58
+
59
+ return unless begin_range
60
+
61
+ [begin_range.join(end_range), arguments]
62
+ end
63
+
64
+ def invalid_arguments?(arguments)
65
+ # If any of the arguments are arguments forwarding (`...`), it can only be the
66
+ # first argument, or else the resulting code will have a syntax error.
67
+
68
+ return false unless arguments&.any?
69
+
70
+ forwarded_args_index = arguments.index(&:forwarded_args_type?)
71
+ forwarded_args_index && forwarded_args_index < (arguments.size - 1)
72
+ end
73
+
74
+ def register_offense(node, range, arguments)
75
+ arguments = arguments.map(&:source).join(', ')
76
+ replacement = "dig(#{arguments})"
77
+
78
+ add_offense(range, message: format(MSG, replacement: replacement)) do |corrector|
79
+ corrector.replace(range, replacement)
80
+
81
+ comments_in_range(node).reverse_each do |comment|
82
+ corrector.insert_before(node, "#{comment.source}\n")
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -108,7 +108,7 @@ module RuboCop
108
108
  comments = heredoc_comment_blocks(arg_node.loc.heredoc_body.line_span)
109
109
  .concat(preceding_comment_blocks(arg_node.parent))
110
110
 
111
- return if comments.none?
111
+ return false if comments.none?
112
112
 
113
113
  regexp = comment_regexp(arg_node)
114
114
  comments.any?(regexp) || regexp.match?(comments.join)
@@ -29,36 +29,36 @@ module RuboCop
29
29
  # end
30
30
  #
31
31
  # # allowed
32
- # # Class without body
32
+ # # Class without body
33
+ # class Person
34
+ # end
35
+ #
36
+ # # Namespace - A namespace can be a class or a module
37
+ # # Containing a class
38
+ # module Namespace
39
+ # # Description/Explanation of Person class
33
40
  # class Person
41
+ # # ...
34
42
  # end
43
+ # end
35
44
  #
36
- # # Namespace - A namespace can be a class or a module
37
- # # Containing a class
38
- # module Namespace
39
- # # Description/Explanation of Person class
40
- # class Person
41
- # # ...
42
- # end
45
+ # # Containing constant visibility declaration
46
+ # module Namespace
47
+ # class Private
43
48
  # end
44
49
  #
45
- # # Containing constant visibility declaration
46
- # module Namespace
47
- # class Private
48
- # end
49
- #
50
- # private_constant :Private
51
- # end
50
+ # private_constant :Private
51
+ # end
52
52
  #
53
- # # Containing constant definition
54
- # module Namespace
55
- # Public = Class.new
56
- # end
53
+ # # Containing constant definition
54
+ # module Namespace
55
+ # Public = Class.new
56
+ # end
57
57
  #
58
- # # Macro calls
59
- # module Namespace
60
- # extend Foo
61
- # end
58
+ # # Macro calls
59
+ # module Namespace
60
+ # extend Foo
61
+ # end
62
62
  #
63
63
  # @example AllowedConstants: ['ClassMethods']
64
64
  #
@@ -67,7 +67,7 @@ module RuboCop
67
67
  # module ClassMethods
68
68
  # # ...
69
69
  # end
70
- # end
70
+ # end
71
71
  #
72
72
  class Documentation < Base
73
73
  include DocumentationComment
@@ -186,7 +186,7 @@ module RuboCop
186
186
  def qualify_const(node)
187
187
  return if node.nil?
188
188
 
189
- if node.cbase_type? || node.self_type? || node.call_type? || node.variable?
189
+ if node.type?(:cbase, :self, :call) || node.variable?
190
190
  node.source
191
191
  else
192
192
  [qualify_const(node.namespace), node.short_name].compact
@@ -95,6 +95,17 @@ module RuboCop
95
95
  # end
96
96
  # end
97
97
  #
98
+ # @example AllowedMethods: ['method_missing', 'respond_to_missing?']
99
+ #
100
+ # # good
101
+ # class Foo
102
+ # def method_missing(name, *args)
103
+ # end
104
+ #
105
+ # def respond_to_missing?(symbol, include_private)
106
+ # end
107
+ # end
108
+ #
98
109
  class DocumentationMethod < Base
99
110
  include DocumentationComment
100
111
  include DefNode
@@ -119,6 +130,7 @@ module RuboCop
119
130
  def check(node)
120
131
  return if non_public?(node) && !require_for_non_public_methods?
121
132
  return if documentation_comment?(node)
133
+ return if method_allowed?(node)
122
134
 
123
135
  add_offense(node)
124
136
  end
@@ -126,6 +138,14 @@ module RuboCop
126
138
  def require_for_non_public_methods?
127
139
  cop_config['RequireForNonPublicMethods']
128
140
  end
141
+
142
+ def method_allowed?(node)
143
+ allowed_methods.include?(node.method_name)
144
+ end
145
+
146
+ def allowed_methods
147
+ @allowed_methods ||= cop_config.fetch('AllowedMethods', []).map(&:to_sym)
148
+ end
129
149
  end
130
150
  end
131
151
  end
@@ -93,7 +93,7 @@ module RuboCop
93
93
 
94
94
  if conditional_node
95
95
  double_negative_condition_return_value?(node, last_child, conditional_node)
96
- elsif last_child.pair_type? || last_child.hash_type? || last_child.parent.array_type?
96
+ elsif last_child.type?(:pair, :hash) || last_child.parent.array_type?
97
97
  false
98
98
  else
99
99
  last_child.last_line <= node.last_line
@@ -102,14 +102,14 @@ module RuboCop
102
102
 
103
103
  def find_def_node_from_ascendant(node)
104
104
  return unless (parent = node.parent)
105
- return parent if parent.def_type? || parent.defs_type?
105
+ return parent if parent.any_def_type?
106
106
  return node.parent.child_nodes.first if define_method?(parent)
107
107
 
108
108
  find_def_node_from_ascendant(node.parent)
109
109
  end
110
110
 
111
111
  def define_method?(node)
112
- return false unless node.block_type?
112
+ return false unless node.any_block_type?
113
113
 
114
114
  child = node.child_nodes.first
115
115
  return false unless child.send_type?
@@ -147,7 +147,7 @@ module RuboCop
147
147
  def find_parent_not_enumerable(node)
148
148
  return unless (parent = node.parent)
149
149
 
150
- if parent.pair_type? || parent.hash_type? || parent.array_type?
150
+ if parent.type?(:pair, :hash, :array)
151
151
  find_parent_not_enumerable(parent)
152
152
  else
153
153
  parent
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module Style
6
6
  # Checks for loops which iterate a constant number of times,
7
- # using a Range literal and `#each`. This can be done more readably using
7
+ # using a `Range` literal and `#each`. This can be done more readably using
8
8
  # `Integer#times`.
9
9
  #
10
10
  # This check only applies if the block takes no parameters.
@@ -16,7 +16,6 @@ module RuboCop
16
16
  # # good
17
17
  # 5.times { }
18
18
  #
19
- # @example
20
19
  # # bad
21
20
  # (0...10).each {}
22
21
  #
@@ -32,30 +31,29 @@ module RuboCop
32
31
 
33
32
  send_node = node.send_node
34
33
 
35
- range = send_node.receiver.source_range.join(send_node.loc.selector)
36
-
37
- add_offense(range) do |corrector|
34
+ add_offense(send_node) do |corrector|
38
35
  range_type, min, max = each_range(node)
39
36
 
40
37
  max += 1 if range_type == :irange
41
38
 
42
- corrector.replace(node.send_node, "#{max - min}.times")
39
+ corrector.replace(send_node, "#{max - min}.times")
43
40
  end
44
41
  end
45
42
 
46
43
  private
47
44
 
48
45
  def offending?(node)
46
+ return false unless node.arguments.empty?
47
+
49
48
  each_range_with_zero_origin?(node) || each_range_without_block_argument?(node)
50
49
  end
51
50
 
52
51
  # @!method each_range(node)
53
52
  def_node_matcher :each_range, <<~PATTERN
54
53
  (block
55
- (send
54
+ (call
56
55
  (begin
57
- (${irange erange}
58
- (int $_) (int $_)))
56
+ ($range (int $_) (int $_)))
59
57
  :each)
60
58
  (args ...)
61
59
  ...)
@@ -64,10 +62,9 @@ module RuboCop
64
62
  # @!method each_range_with_zero_origin?(node)
65
63
  def_node_matcher :each_range_with_zero_origin?, <<~PATTERN
66
64
  (block
67
- (send
65
+ (call
68
66
  (begin
69
- ({irange erange}
70
- (int 0) (int _)))
67
+ (range (int 0) (int _)))
71
68
  :each)
72
69
  (args ...)
73
70
  ...)
@@ -76,10 +73,9 @@ module RuboCop
76
73
  # @!method each_range_without_block_argument?(node)
77
74
  def_node_matcher :each_range_without_block_argument?, <<~PATTERN
78
75
  (block
79
- (send
76
+ (call
80
77
  (begin
81
- ({irange erange}
82
- (int _) (int _)))
78
+ (range (int _) (int _)))
83
79
  :each)
84
80
  (args)
85
81
  ...)
@@ -58,12 +58,12 @@ module RuboCop
58
58
 
59
59
  # @!method each_with_object_block_candidate?(node)
60
60
  def_node_matcher :each_with_object_block_candidate?, <<~PATTERN
61
- (block $(send _ {:inject :reduce} _) $_ $_)
61
+ (block $(call _ {:inject :reduce} _) $(args _ _) $_)
62
62
  PATTERN
63
63
 
64
64
  # @!method each_with_object_numblock_candidate?(node)
65
65
  def_node_matcher :each_with_object_numblock_candidate?, <<~PATTERN
66
- (numblock $(send _ {:inject :reduce} _) 2 $_)
66
+ (numblock $(call _ {:inject :reduce} _) 2 $_)
67
67
  PATTERN
68
68
 
69
69
  def autocorrect_block(corrector, node, return_value)
@@ -71,8 +71,7 @@ module RuboCop
71
71
 
72
72
  first_arg, second_arg = *node.arguments
73
73
 
74
- corrector.replace(first_arg, second_arg.source)
75
- corrector.replace(second_arg, first_arg.source)
74
+ corrector.swap(first_arg, second_arg)
76
75
 
77
76
  if return_value_occupies_whole_line?(return_value)
78
77
  corrector.remove(whole_line_expression(return_value))
@@ -40,9 +40,13 @@ module RuboCop
40
40
  extend AutoCorrector
41
41
 
42
42
  MSG = 'Do not use empty `case` condition, instead use an `if` expression.'
43
+ NOT_SUPPORTED_PARENT_TYPES = %i[return break next send csend].freeze
43
44
 
45
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
44
46
  def on_case(case_node)
45
- return if case_node.condition
47
+ if case_node.condition || NOT_SUPPORTED_PARENT_TYPES.include?(case_node.parent&.type)
48
+ return
49
+ end
46
50
 
47
51
  branch_bodies = [*case_node.when_branches.map(&:body), case_node.else_branch].compact
48
52
 
@@ -52,6 +56,7 @@ module RuboCop
52
56
 
53
57
  add_offense(case_node.loc.keyword) { |corrector| autocorrect(corrector, case_node) }
54
58
  end
59
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
55
60
 
56
61
  private
57
62
 
@@ -131,6 +131,8 @@ module RuboCop
131
131
  extend AutoCorrector
132
132
 
133
133
  MSG = 'Redundant `else`-clause.'
134
+ NIL_STYLES = %i[nil both].freeze
135
+ EMPTY_STYLES = %i[empty both].freeze
134
136
 
135
137
  def on_normal_if_unless(node)
136
138
  check(node)
@@ -143,18 +145,18 @@ module RuboCop
143
145
  private
144
146
 
145
147
  def check(node)
146
- return if cop_config['AllowComments'] && comment_in_else?(node.loc)
148
+ return if cop_config['AllowComments'] && comment_in_else?(node)
147
149
 
148
150
  empty_check(node) if empty_style?
149
151
  nil_check(node) if nil_style?
150
152
  end
151
153
 
152
154
  def nil_style?
153
- style == :nil || style == :both
155
+ NIL_STYLES.include?(style)
154
156
  end
155
157
 
156
158
  def empty_style?
157
- style == :empty || style == :both
159
+ EMPTY_STYLES.include?(style)
158
160
  end
159
161
 
160
162
  def empty_check(node)
@@ -171,16 +173,17 @@ module RuboCop
171
173
 
172
174
  def autocorrect(corrector, node)
173
175
  return false if autocorrect_forbidden?(node.type.to_s)
174
- return false if comment_in_else?(node.loc)
176
+ return false if comment_in_else?(node)
175
177
 
176
178
  end_pos = base_node(node).loc.end.begin_pos
177
179
  corrector.remove(range_between(node.loc.else.begin_pos, end_pos))
178
180
  end
179
181
 
180
- def comment_in_else?(loc)
181
- return false if loc.else.nil? || loc.end.nil?
182
+ def comment_in_else?(node)
183
+ node = node.parent while node.if_type? && node.elsif?
184
+ return false unless node.else?
182
185
 
183
- processed_source.contains_comment?(loc.else.join(loc.end))
186
+ processed_source.contains_comment?(node.loc.else.join(node.source_range.end))
184
187
  end
185
188
 
186
189
  def base_node(node)
@@ -36,6 +36,7 @@ module RuboCop
36
36
  class EmptyHeredoc < Base
37
37
  include Heredoc
38
38
  include RangeHelp
39
+ include StringLiteralsHelp
39
40
  extend AutoCorrector
40
41
 
41
42
  MSG = 'Use an empty string literal instead of heredoc.'
@@ -53,20 +54,6 @@ module RuboCop
53
54
  corrector.remove(range_by_whole_lines(heredoc_end, include_final_newline: true))
54
55
  end
55
56
  end
56
-
57
- private
58
-
59
- def preferred_string_literal
60
- enforce_double_quotes? ? '""' : "''"
61
- end
62
-
63
- def enforce_double_quotes?
64
- string_literals_config['EnforcedStyle'] == 'double_quotes'
65
- end
66
-
67
- def string_literals_config
68
- config.for_cop('Style/StringLiterals')
69
- end
70
57
  end
71
58
  end
72
59
  end
@@ -6,10 +6,16 @@ module RuboCop
6
6
  # Checks for the use of a method, the result of which
7
7
  # would be a literal, like an empty array, hash, or string.
8
8
  #
9
+ # NOTE: When frozen string literals are enabled, `String.new`
10
+ # isn't corrected to an empty string since the former is
11
+ # mutable and the latter would be frozen.
12
+ #
9
13
  # @example
10
14
  # # bad
11
15
  # a = Array.new
16
+ # a = Array[]
12
17
  # h = Hash.new
18
+ # h = Hash[]
13
19
  # s = String.new
14
20
  #
15
21
  # # good
@@ -19,16 +25,17 @@ module RuboCop
19
25
  class EmptyLiteral < Base
20
26
  include FrozenStringLiteral
21
27
  include RangeHelp
28
+ include StringLiteralsHelp
22
29
  extend AutoCorrector
23
30
 
24
- ARR_MSG = 'Use array literal `[]` instead of `Array.new`.'
25
- HASH_MSG = 'Use hash literal `{}` instead of `Hash.new`.'
31
+ ARR_MSG = 'Use array literal `[]` instead of `%<current>s`.'
32
+ HASH_MSG = 'Use hash literal `{}` instead of `%<current>s`.'
26
33
  STR_MSG = 'Use string literal `%<prefer>s` instead of `String.new`.'
27
34
 
28
- RESTRICT_ON_SEND = %i[new].freeze
35
+ RESTRICT_ON_SEND = %i[new [] Array Hash].freeze
29
36
 
30
37
  # @!method array_node(node)
31
- def_node_matcher :array_node, '(send (const {nil? cbase} :Array) :new)'
38
+ def_node_matcher :array_node, '(send (const {nil? cbase} :Array) :new (array)?)'
32
39
 
33
40
  # @!method hash_node(node)
34
41
  def_node_matcher :hash_node, '(send (const {nil? cbase} :Hash) :new)'
@@ -47,6 +54,22 @@ module RuboCop
47
54
  }
48
55
  PATTERN
49
56
 
57
+ # @!method array_with_index(node)
58
+ def_node_matcher :array_with_index, <<~PATTERN
59
+ {
60
+ (send (const {nil? cbase} :Array) :[])
61
+ (send nil? :Array (array))
62
+ }
63
+ PATTERN
64
+
65
+ # @!method hash_with_index(node)
66
+ def_node_matcher :hash_with_index, <<~PATTERN
67
+ {
68
+ (send (const {nil? cbase} :Hash) :[])
69
+ (send nil? :Hash (array))
70
+ }
71
+ PATTERN
72
+
50
73
  def on_send(node)
51
74
  return unless (message = offense_message(node))
52
75
 
@@ -59,31 +82,19 @@ module RuboCop
59
82
 
60
83
  def offense_message(node)
61
84
  if offense_array_node?(node)
62
- ARR_MSG
85
+ format(ARR_MSG, current: node.source)
63
86
  elsif offense_hash_node?(node)
64
- HASH_MSG
87
+ format(HASH_MSG, current: node.source)
65
88
  elsif str_node(node) && !frozen_strings?
66
89
  format(STR_MSG, prefer: preferred_string_literal)
67
90
  end
68
91
  end
69
92
 
70
- def preferred_string_literal
71
- enforce_double_quotes? ? '""' : "''"
72
- end
73
-
74
- def enforce_double_quotes?
75
- string_literals_config['EnforcedStyle'] == 'double_quotes'
76
- end
77
-
78
- def string_literals_config
79
- config.for_cop('Style/StringLiterals')
80
- end
81
-
82
93
  def first_argument_unparenthesized?(node)
83
94
  parent = node.parent
84
95
  return false unless parent && %i[send super zsuper].include?(parent.type)
85
96
 
86
- node.equal?(parent.arguments.first) && !parentheses?(node.parent)
97
+ node.equal?(parent.first_argument) && !parentheses?(node.parent)
87
98
  end
88
99
 
89
100
  def replacement_range(node)
@@ -100,12 +111,12 @@ module RuboCop
100
111
  end
101
112
 
102
113
  def offense_array_node?(node)
103
- array_node(node) && !array_with_block(node.parent)
114
+ (array_node(node) && !array_with_block(node.parent)) || array_with_index(node)
104
115
  end
105
116
 
106
117
  def offense_hash_node?(node)
107
118
  # If Hash.new takes a block, it can't be changed to {}.
108
- hash_node(node) && !hash_with_block(node.parent)
119
+ (hash_node(node) && !hash_with_block(node.parent)) || hash_with_index(node)
109
120
  end
110
121
 
111
122
  def correction(node)
@@ -129,8 +140,10 @@ module RuboCop
129
140
  def frozen_strings?
130
141
  return true if frozen_string_literals_enabled?
131
142
 
132
- frozen_string_cop_enabled = config.for_cop('Style/FrozenStringLiteral')['Enabled']
133
- frozen_string_cop_enabled && !frozen_string_literals_disabled?
143
+ frozen_string_cop_enabled = config.cop_enabled?('Style/FrozenStringLiteralComment')
144
+ frozen_string_cop_enabled &&
145
+ !frozen_string_literals_disabled? &&
146
+ string_literals_frozen_by_default?.nil?
134
147
  end
135
148
  end
136
149
  end
@@ -109,7 +109,7 @@ module RuboCop
109
109
  end
110
110
 
111
111
  def max_line_length
112
- return unless config.for_cop('Layout/LineLength')['Enabled']
112
+ return unless config.cop_enabled?('Layout/LineLength')
113
113
 
114
114
  config.for_cop('Layout/LineLength')['Max']
115
115
  end