rubocop 0.93.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 (881) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +133 -103
  4. data/assets/output.css.erb +159 -0
  5. data/assets/output.html.erb +2 -161
  6. data/config/default.yml +1864 -271
  7. data/config/internal_affairs.yml +31 -0
  8. data/config/obsoletion.yml +243 -0
  9. data/exe/rubocop +16 -9
  10. data/lib/rubocop/arguments_env.rb +17 -0
  11. data/lib/rubocop/arguments_file.rb +17 -0
  12. data/lib/rubocop/cache_config.rb +29 -0
  13. data/lib/rubocop/cached_data.rb +22 -8
  14. data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +55 -29
  15. data/lib/rubocop/cli/command/execute_runner.rb +39 -19
  16. data/lib/rubocop/cli/command/init_dotfile.rb +2 -4
  17. data/lib/rubocop/cli/command/lsp.rb +19 -0
  18. data/lib/rubocop/cli/command/show_cops.rb +26 -7
  19. data/lib/rubocop/cli/command/show_docs_url.rb +48 -0
  20. data/lib/rubocop/cli/command/suggest_extensions.rb +132 -0
  21. data/lib/rubocop/cli/command/version.rb +2 -2
  22. data/lib/rubocop/cli.rb +108 -16
  23. data/lib/rubocop/comment_config.rb +107 -104
  24. data/lib/rubocop/config.rb +160 -58
  25. data/lib/rubocop/config_finder.rb +78 -0
  26. data/lib/rubocop/config_loader.rb +112 -102
  27. data/lib/rubocop/config_loader_resolver.rb +124 -47
  28. data/lib/rubocop/config_obsoletion/changed_enforced_styles.rb +33 -0
  29. data/lib/rubocop/config_obsoletion/changed_parameter.rb +26 -0
  30. data/lib/rubocop/config_obsoletion/cop_rule.rb +33 -0
  31. data/lib/rubocop/config_obsoletion/extracted_cop.rb +47 -0
  32. data/lib/rubocop/config_obsoletion/parameter_rule.rb +56 -0
  33. data/lib/rubocop/config_obsoletion/removed_cop.rb +41 -0
  34. data/lib/rubocop/config_obsoletion/renamed_cop.rb +49 -0
  35. data/lib/rubocop/config_obsoletion/rule.rb +41 -0
  36. data/lib/rubocop/config_obsoletion/split_cop.rb +27 -0
  37. data/lib/rubocop/config_obsoletion.rb +110 -238
  38. data/lib/rubocop/config_regeneration.rb +1 -1
  39. data/lib/rubocop/config_store.rb +13 -3
  40. data/lib/rubocop/config_validator.rb +110 -43
  41. data/lib/rubocop/cop/autocorrect_logic.rb +82 -18
  42. data/lib/rubocop/cop/badge.rb +21 -26
  43. data/lib/rubocop/cop/base.rb +235 -118
  44. data/lib/rubocop/cop/bundler/duplicated_gem.rb +33 -16
  45. data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
  46. data/lib/rubocop/cop/bundler/gem_comment.rb +46 -13
  47. data/lib/rubocop/cop/bundler/gem_filename.rb +102 -0
  48. data/lib/rubocop/cop/bundler/gem_version.rb +132 -0
  49. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +46 -22
  50. data/lib/rubocop/cop/bundler/ordered_gems.rb +17 -20
  51. data/lib/rubocop/cop/commissioner.rb +57 -36
  52. data/lib/rubocop/cop/cop.rb +86 -54
  53. data/lib/rubocop/cop/corrector.rb +41 -22
  54. data/lib/rubocop/cop/correctors/alignment_corrector.rb +10 -27
  55. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  56. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +8 -14
  57. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  58. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +11 -18
  59. data/lib/rubocop/cop/correctors/if_then_corrector.rb +55 -0
  60. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +10 -7
  61. data/lib/rubocop/cop/correctors/line_break_corrector.rb +13 -8
  62. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -12
  63. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +10 -16
  64. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +65 -4
  65. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +17 -13
  66. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  67. data/lib/rubocop/cop/correctors/require_library_corrector.rb +23 -0
  68. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
  69. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +7 -9
  70. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +2 -2
  71. data/lib/rubocop/cop/documentation.rb +47 -3
  72. data/lib/rubocop/cop/exclude_limit.rb +26 -0
  73. data/lib/rubocop/cop/force.rb +13 -1
  74. data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
  75. data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
  76. data/lib/rubocop/cop/gemspec/dependency_version.rb +152 -0
  77. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +91 -0
  78. data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
  79. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +47 -40
  80. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +16 -19
  81. data/lib/rubocop/cop/gemspec/require_mfa.rb +159 -0
  82. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +50 -32
  83. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +9 -14
  84. data/lib/rubocop/cop/generator/configuration_injector.rb +2 -3
  85. data/lib/rubocop/cop/generator/require_file_injector.rb +5 -8
  86. data/lib/rubocop/cop/generator.rb +38 -39
  87. data/lib/rubocop/cop/internal_affairs/cop_description.rb +118 -0
  88. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  89. data/lib/rubocop/cop/internal_affairs/create_empty_file.rb +37 -0
  90. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +69 -0
  91. data/lib/rubocop/cop/internal_affairs/example_description.rb +118 -0
  92. data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +111 -0
  93. data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +34 -0
  94. data/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb +46 -0
  95. data/lib/rubocop/cop/internal_affairs/location_exists.rb +116 -0
  96. data/lib/rubocop/cop/internal_affairs/location_expression.rb +38 -0
  97. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +61 -0
  98. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +82 -0
  99. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -22
  100. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
  101. data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +54 -0
  102. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +241 -0
  103. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
  104. data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
  105. data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +231 -0
  106. data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
  107. data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
  108. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +5 -5
  109. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
  110. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
  111. data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
  112. data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
  113. data/lib/rubocop/cop/internal_affairs/plugin.rb +33 -0
  114. data/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +42 -0
  115. data/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb +46 -0
  116. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +63 -0
  117. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  118. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +73 -0
  119. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +2 -1
  120. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +9 -21
  121. data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +56 -0
  122. data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +75 -0
  123. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +63 -0
  124. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +146 -0
  125. data/lib/rubocop/cop/internal_affairs/undefined_config.rb +94 -0
  126. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +6 -9
  127. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
  128. data/lib/rubocop/cop/internal_affairs.rb +32 -1
  129. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +18 -12
  130. data/lib/rubocop/cop/layout/argument_alignment.rb +79 -21
  131. data/lib/rubocop/cop/layout/array_alignment.rb +11 -10
  132. data/lib/rubocop/cop/layout/assignment_indentation.rb +13 -11
  133. data/lib/rubocop/cop/layout/begin_end_alignment.rb +2 -6
  134. data/lib/rubocop/cop/layout/block_alignment.rb +64 -53
  135. data/lib/rubocop/cop/layout/block_end_newline.rb +34 -15
  136. data/lib/rubocop/cop/layout/case_indentation.rb +73 -11
  137. data/lib/rubocop/cop/layout/class_structure.rb +114 -38
  138. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +2 -3
  139. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +26 -36
  140. data/lib/rubocop/cop/layout/comment_indentation.rb +55 -28
  141. data/lib/rubocop/cop/layout/condition_position.rb +1 -5
  142. data/lib/rubocop/cop/layout/def_end_alignment.rb +6 -10
  143. data/lib/rubocop/cop/layout/dot_position.rb +48 -15
  144. data/lib/rubocop/cop/layout/else_alignment.rb +27 -13
  145. data/lib/rubocop/cop/layout/empty_comment.rb +9 -14
  146. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +82 -28
  147. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
  148. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +2 -2
  149. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +170 -27
  150. data/lib/rubocop/cop/layout/empty_lines.rb +4 -4
  151. data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
  152. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +48 -22
  153. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +13 -29
  154. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +26 -5
  155. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +6 -7
  156. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +8 -5
  157. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +11 -11
  158. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +24 -17
  159. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +24 -2
  160. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
  161. data/lib/rubocop/cop/layout/end_alignment.rb +36 -10
  162. data/lib/rubocop/cop/layout/end_of_line.rb +11 -11
  163. data/lib/rubocop/cop/layout/extra_spacing.rb +19 -21
  164. data/lib/rubocop/cop/layout/first_argument_indentation.rb +70 -39
  165. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +49 -31
  166. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +37 -11
  167. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +79 -29
  168. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +39 -5
  169. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +67 -11
  170. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +54 -22
  171. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +12 -11
  172. data/lib/rubocop/cop/layout/hash_alignment.rb +73 -37
  173. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +41 -15
  174. data/lib/rubocop/cop/layout/heredoc_indentation.rb +16 -27
  175. data/lib/rubocop/cop/layout/indentation_consistency.rb +10 -7
  176. data/lib/rubocop/cop/layout/indentation_style.rb +32 -32
  177. data/lib/rubocop/cop/layout/indentation_width.rb +64 -37
  178. data/lib/rubocop/cop/layout/initial_indentation.rb +3 -6
  179. data/lib/rubocop/cop/layout/leading_comment_space.rb +87 -5
  180. data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
  181. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +153 -0
  182. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +146 -0
  183. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +143 -0
  184. data/lib/rubocop/cop/layout/line_length.rb +200 -64
  185. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +7 -7
  186. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +33 -4
  187. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +31 -5
  188. data/lib/rubocop/cop/layout/multiline_block_layout.rb +15 -20
  189. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +7 -7
  190. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +32 -5
  191. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +68 -4
  192. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +9 -8
  193. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +69 -26
  194. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +8 -8
  195. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +78 -0
  196. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +21 -18
  197. data/lib/rubocop/cop/layout/parameter_alignment.rb +11 -11
  198. data/lib/rubocop/cop/layout/redundant_line_break.rb +134 -0
  199. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +38 -36
  200. data/lib/rubocop/cop/layout/single_line_block_chain.rb +69 -0
  201. data/lib/rubocop/cop/layout/space_after_colon.rb +4 -6
  202. data/lib/rubocop/cop/layout/space_after_comma.rb +10 -2
  203. data/lib/rubocop/cop/layout/space_after_method_name.rb +3 -5
  204. data/lib/rubocop/cop/layout/space_after_not.rb +3 -2
  205. data/lib/rubocop/cop/layout/space_after_semicolon.rb +11 -1
  206. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +32 -34
  207. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +3 -2
  208. data/lib/rubocop/cop/layout/space_around_keyword.rb +42 -11
  209. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -3
  210. data/lib/rubocop/cop/layout/space_around_operators.rb +101 -41
  211. data/lib/rubocop/cop/layout/space_before_block_braces.rb +29 -16
  212. data/lib/rubocop/cop/layout/space_before_brackets.rb +40 -0
  213. data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
  214. data/lib/rubocop/cop/layout/space_before_comment.rb +4 -6
  215. data/lib/rubocop/cop/layout/space_before_first_arg.rb +10 -12
  216. data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
  217. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +16 -12
  218. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +51 -39
  219. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +5 -7
  220. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +56 -33
  221. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +41 -8
  222. data/lib/rubocop/cop/layout/space_inside_parens.rb +93 -25
  223. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +34 -0
  224. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
  225. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +12 -9
  226. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +7 -8
  227. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +15 -10
  228. data/lib/rubocop/cop/layout/trailing_whitespace.rb +72 -16
  229. data/lib/rubocop/cop/legacy/corrections_proxy.rb +3 -9
  230. data/lib/rubocop/cop/legacy/corrector.rb +13 -5
  231. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +54 -0
  232. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +50 -12
  233. data/lib/rubocop/cop/lint/ambiguous_operator.rb +11 -9
  234. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +111 -0
  235. data/lib/rubocop/cop/lint/ambiguous_range.rb +113 -0
  236. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +13 -7
  237. data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +118 -0
  238. data/lib/rubocop/cop/lint/assignment_in_condition.rb +25 -15
  239. data/lib/rubocop/cop/lint/big_decimal_new.rb +5 -7
  240. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +30 -14
  241. data/lib/rubocop/cop/lint/boolean_symbol.rb +10 -7
  242. data/lib/rubocop/cop/lint/circular_argument_reference.rb +5 -15
  243. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +30 -4
  244. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
  245. data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
  246. data/lib/rubocop/cop/lint/constant_resolution.rb +7 -3
  247. data/lib/rubocop/cop/lint/cop_directive_syntax.rb +84 -0
  248. data/lib/rubocop/cop/lint/debugger.rb +99 -35
  249. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +73 -63
  250. data/lib/rubocop/cop/lint/deprecated_constants.rb +88 -0
  251. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +25 -21
  252. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +24 -1
  253. data/lib/rubocop/cop/lint/duplicate_branch.rb +188 -0
  254. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +4 -18
  255. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
  256. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +4 -9
  257. data/lib/rubocop/cop/lint/duplicate_magic_comment.rb +73 -0
  258. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
  259. data/lib/rubocop/cop/lint/duplicate_methods.rb +168 -58
  260. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +121 -0
  261. data/lib/rubocop/cop/lint/duplicate_require.rb +14 -4
  262. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
  263. data/lib/rubocop/cop/lint/duplicate_set_element.rb +87 -0
  264. data/lib/rubocop/cop/lint/each_with_object_argument.rb +3 -6
  265. data/lib/rubocop/cop/lint/else_layout.rb +32 -10
  266. data/lib/rubocop/cop/lint/empty_block.rb +94 -0
  267. data/lib/rubocop/cop/lint/empty_class.rb +95 -0
  268. data/lib/rubocop/cop/lint/empty_conditional_body.rb +85 -4
  269. data/lib/rubocop/cop/lint/empty_ensure.rb +3 -15
  270. data/lib/rubocop/cop/lint/empty_expression.rb +1 -3
  271. data/lib/rubocop/cop/lint/empty_file.rb +2 -6
  272. data/lib/rubocop/cop/lint/empty_in_pattern.rb +64 -0
  273. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -9
  274. data/lib/rubocop/cop/lint/empty_when.rb +5 -5
  275. data/lib/rubocop/cop/lint/ensure_return.rb +3 -13
  276. data/lib/rubocop/cop/lint/erb_new_arguments.rb +40 -43
  277. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  278. data/lib/rubocop/cop/lint/float_comparison.rb +59 -16
  279. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -9
  280. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +17 -22
  281. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +15 -4
  282. data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
  283. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +18 -21
  284. data/lib/rubocop/cop/lint/identity_comparison.rb +19 -16
  285. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +25 -15
  286. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +81 -0
  287. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +6 -16
  288. data/lib/rubocop/cop/lint/inherit_exception.rb +29 -29
  289. data/lib/rubocop/cop/lint/interpolation_check.rb +21 -13
  290. data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +50 -0
  291. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +51 -0
  292. data/lib/rubocop/cop/lint/literal_as_condition.rb +145 -13
  293. data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
  294. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +130 -18
  295. data/lib/rubocop/cop/lint/loop.rb +13 -19
  296. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +48 -22
  297. data/lib/rubocop/cop/lint/missing_super.rb +70 -10
  298. data/lib/rubocop/cop/lint/mixed_case_range.rb +113 -0
  299. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +3 -3
  300. data/lib/rubocop/cop/lint/multiple_comparison.rb +5 -4
  301. data/lib/rubocop/cop/lint/nested_method_definition.rb +64 -20
  302. data/lib/rubocop/cop/lint/nested_percent_literal.rb +17 -5
  303. data/lib/rubocop/cop/lint/next_without_accumulator.rb +11 -10
  304. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +53 -0
  305. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +174 -0
  306. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +41 -18
  307. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -4
  308. data/lib/rubocop/cop/lint/number_conversion.rb +142 -21
  309. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +46 -0
  310. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +94 -0
  311. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +41 -0
  312. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +5 -8
  313. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +63 -13
  314. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +17 -15
  315. data/lib/rubocop/cop/lint/percent_string_array.rb +13 -7
  316. data/lib/rubocop/cop/lint/percent_symbol_array.rb +4 -10
  317. data/lib/rubocop/cop/lint/raise_exception.rb +36 -12
  318. data/lib/rubocop/cop/lint/rand_one.rb +3 -7
  319. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +156 -97
  320. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +33 -23
  321. data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +62 -0
  322. data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
  323. data/lib/rubocop/cop/lint/redundant_require_statement.rb +36 -6
  324. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +196 -15
  325. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +67 -33
  326. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +37 -21
  327. data/lib/rubocop/cop/lint/redundant_type_conversion.rb +261 -0
  328. data/lib/rubocop/cop/lint/redundant_with_index.rb +22 -14
  329. data/lib/rubocop/cop/lint/redundant_with_object.rb +17 -15
  330. data/lib/rubocop/cop/lint/refinement_import_methods.rb +52 -0
  331. data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -6
  332. data/lib/rubocop/cop/lint/require_parentheses.rb +6 -10
  333. data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
  334. data/lib/rubocop/cop/lint/require_relative_self_path.rb +50 -0
  335. data/lib/rubocop/cop/lint/rescue_exception.rb +2 -7
  336. data/lib/rubocop/cop/lint/rescue_type.rb +7 -18
  337. data/lib/rubocop/cop/lint/return_in_void_context.rb +13 -30
  338. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +73 -19
  339. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +109 -47
  340. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +3 -3
  341. data/lib/rubocop/cop/lint/script_permission.rb +4 -4
  342. data/lib/rubocop/cop/lint/self_assignment.rb +72 -11
  343. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +8 -12
  344. data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -13
  345. data/lib/rubocop/cop/lint/shadowed_exception.rb +30 -43
  346. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +68 -5
  347. data/lib/rubocop/cop/lint/shared_mutable_default.rb +76 -0
  348. data/lib/rubocop/cop/lint/struct_new_override.rb +16 -16
  349. data/lib/rubocop/cop/lint/suppressed_exception.rb +48 -5
  350. data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +111 -0
  351. data/lib/rubocop/cop/lint/symbol_conversion.rb +184 -0
  352. data/lib/rubocop/cop/lint/syntax.rb +17 -10
  353. data/lib/rubocop/cop/lint/to_enum_arguments.rb +99 -0
  354. data/lib/rubocop/cop/lint/to_json.rb +2 -3
  355. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +24 -10
  356. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +4 -6
  357. data/lib/rubocop/cop/lint/triple_quotes.rb +71 -0
  358. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +2 -4
  359. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
  360. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +92 -0
  361. data/lib/rubocop/cop/lint/unified_integer.rb +4 -5
  362. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +205 -0
  363. data/lib/rubocop/cop/lint/unreachable_code.rb +59 -14
  364. data/lib/rubocop/cop/lint/unreachable_loop.rb +48 -11
  365. data/lib/rubocop/cop/lint/unused_block_argument.rb +11 -9
  366. data/lib/rubocop/cop/lint/unused_method_argument.rb +29 -9
  367. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -1
  368. data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
  369. data/lib/rubocop/cop/lint/useless_access_modifier.rb +57 -24
  370. data/lib/rubocop/cop/lint/useless_assignment.rb +109 -25
  371. data/lib/rubocop/cop/lint/useless_constant_scoping.rb +71 -0
  372. data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
  373. data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
  374. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -7
  375. data/lib/rubocop/cop/lint/useless_method_definition.rb +18 -11
  376. data/lib/rubocop/cop/lint/useless_numeric_operation.rb +79 -0
  377. data/lib/rubocop/cop/lint/useless_or.rb +98 -0
  378. data/lib/rubocop/cop/lint/useless_rescue.rb +89 -0
  379. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +127 -0
  380. data/lib/rubocop/cop/lint/useless_setter_call.rb +29 -37
  381. data/lib/rubocop/cop/lint/useless_times.rb +25 -17
  382. data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
  383. data/lib/rubocop/cop/lint/void.rb +156 -31
  384. data/lib/rubocop/cop/message_annotator.rb +12 -7
  385. data/lib/rubocop/cop/metrics/abc_size.rb +35 -3
  386. data/lib/rubocop/cop/metrics/block_length.rb +30 -16
  387. data/lib/rubocop/cop/metrics/block_nesting.rb +23 -16
  388. data/lib/rubocop/cop/metrics/class_length.rb +30 -20
  389. data/lib/rubocop/cop/metrics/collection_literal_length.rb +83 -0
  390. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +7 -14
  391. data/lib/rubocop/cop/metrics/method_length.rb +32 -11
  392. data/lib/rubocop/cop/metrics/module_length.rb +17 -14
  393. data/lib/rubocop/cop/metrics/parameter_lists.rb +104 -7
  394. data/lib/rubocop/cop/metrics/perceived_complexity.rb +3 -4
  395. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +28 -26
  396. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +69 -18
  397. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +143 -0
  398. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +6 -1
  399. data/lib/rubocop/cop/migration/department_name.rb +8 -10
  400. data/lib/rubocop/cop/mixin/alignment.rb +20 -11
  401. data/lib/rubocop/cop/mixin/allowed_identifiers.rb +18 -0
  402. data/lib/rubocop/cop/mixin/allowed_methods.rb +29 -2
  403. data/lib/rubocop/cop/mixin/allowed_pattern.rb +68 -0
  404. data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
  405. data/lib/rubocop/cop/mixin/annotation_comment.rb +56 -28
  406. data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
  407. data/lib/rubocop/cop/mixin/check_line_breakable.rb +53 -9
  408. data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
  409. data/lib/rubocop/cop/mixin/code_length.rb +17 -6
  410. data/lib/rubocop/cop/mixin/comments_help.rb +62 -15
  411. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +23 -11
  412. data/lib/rubocop/cop/mixin/configurable_formatting.rb +4 -8
  413. data/lib/rubocop/cop/mixin/configurable_max.rb +5 -0
  414. data/lib/rubocop/cop/mixin/configurable_numbering.rb +4 -3
  415. data/lib/rubocop/cop/mixin/def_node.rb +5 -12
  416. data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
  417. data/lib/rubocop/cop/mixin/documentation_comment.rb +8 -8
  418. data/lib/rubocop/cop/mixin/duplication.rb +1 -1
  419. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +7 -8
  420. data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
  421. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +3 -6
  422. data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
  423. data/lib/rubocop/cop/mixin/enforce_superclass.rb +19 -7
  424. data/lib/rubocop/cop/mixin/first_element_line_break.rb +13 -11
  425. data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
  426. data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
  427. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +53 -16
  428. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  429. data/lib/rubocop/cop/mixin/gemspec_help.rb +52 -0
  430. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +34 -24
  431. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +236 -0
  432. data/lib/rubocop/cop/mixin/hash_subset.rb +203 -0
  433. data/lib/rubocop/cop/mixin/hash_transform_method.rb +83 -88
  434. data/lib/rubocop/cop/mixin/heredoc.rb +11 -2
  435. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  436. data/lib/rubocop/cop/mixin/line_length_help.rb +65 -20
  437. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  438. data/lib/rubocop/cop/mixin/method_complexity.rb +33 -19
  439. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  440. data/lib/rubocop/cop/mixin/min_branches_count.rb +40 -0
  441. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +39 -16
  442. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +6 -9
  443. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +26 -55
  444. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +2 -3
  445. data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -2
  446. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +12 -7
  447. data/lib/rubocop/cop/mixin/percent_array.rb +75 -9
  448. data/lib/rubocop/cop/mixin/percent_literal.rb +2 -8
  449. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +79 -41
  450. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +6 -9
  451. data/lib/rubocop/cop/mixin/range_help.rb +51 -22
  452. data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
  453. data/lib/rubocop/cop/mixin/require_library.rb +61 -0
  454. data/lib/rubocop/cop/mixin/rescue_node.rb +9 -7
  455. data/lib/rubocop/cop/mixin/safe_assignment.rb +7 -3
  456. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +3 -5
  457. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +3 -4
  458. data/lib/rubocop/cop/mixin/statement_modifier.rb +34 -10
  459. data/lib/rubocop/cop/mixin/string_help.rb +10 -5
  460. data/lib/rubocop/cop/mixin/string_literals_help.rb +15 -5
  461. data/lib/rubocop/cop/mixin/surrounding_space.rb +17 -13
  462. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  463. data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
  464. data/lib/rubocop/cop/mixin/trailing_body.rb +2 -3
  465. data/lib/rubocop/cop/mixin/trailing_comma.rb +26 -11
  466. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -14
  467. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  468. data/lib/rubocop/cop/mixin/visibility_help.rb +42 -8
  469. data/lib/rubocop/cop/naming/accessor_method_name.rb +23 -2
  470. data/lib/rubocop/cop/naming/ascii_identifiers.rb +4 -9
  471. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +15 -5
  472. data/lib/rubocop/cop/naming/block_forwarding.rb +156 -0
  473. data/lib/rubocop/cop/naming/block_parameter_name.rb +3 -3
  474. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +4 -2
  475. data/lib/rubocop/cop/naming/constant_name.rb +14 -14
  476. data/lib/rubocop/cop/naming/file_name.rb +48 -26
  477. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +12 -6
  478. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +4 -2
  479. data/lib/rubocop/cop/naming/inclusive_language.rb +297 -0
  480. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +155 -32
  481. data/lib/rubocop/cop/naming/method_name.rb +191 -19
  482. data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
  483. data/lib/rubocop/cop/naming/predicate_method.rb +306 -0
  484. data/lib/rubocop/cop/naming/predicate_prefix.rb +204 -0
  485. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +72 -13
  486. data/lib/rubocop/cop/naming/variable_name.rb +65 -5
  487. data/lib/rubocop/cop/naming/variable_number.rb +107 -13
  488. data/lib/rubocop/cop/offense.rb +9 -15
  489. data/lib/rubocop/cop/registry.rb +95 -53
  490. data/lib/rubocop/cop/security/compound_hash.rb +108 -0
  491. data/lib/rubocop/cop/security/eval.rb +4 -2
  492. data/lib/rubocop/cop/security/io_methods.rb +49 -0
  493. data/lib/rubocop/cop/security/json_load.rb +10 -8
  494. data/lib/rubocop/cop/security/marshal_load.rb +2 -1
  495. data/lib/rubocop/cop/security/open.rb +28 -10
  496. data/lib/rubocop/cop/security/yaml_load.rb +16 -4
  497. data/lib/rubocop/cop/severity.rb +3 -3
  498. data/lib/rubocop/cop/style/access_modifier_declarations.rb +238 -8
  499. data/lib/rubocop/cop/style/accessor_grouping.rb +91 -29
  500. data/lib/rubocop/cop/style/alias.rb +26 -22
  501. data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
  502. data/lib/rubocop/cop/style/and_or.rb +29 -14
  503. data/lib/rubocop/cop/style/arguments_forwarding.rb +564 -0
  504. data/lib/rubocop/cop/style/array_coercion.rb +24 -4
  505. data/lib/rubocop/cop/style/array_first_last.rb +80 -0
  506. data/lib/rubocop/cop/style/array_intersect.rb +161 -0
  507. data/lib/rubocop/cop/style/array_join.rb +2 -1
  508. data/lib/rubocop/cop/style/ascii_comments.rb +4 -8
  509. data/lib/rubocop/cop/style/attr.rb +13 -4
  510. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +22 -18
  511. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  512. data/lib/rubocop/cop/style/begin_block.rb +1 -2
  513. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  514. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +61 -77
  515. data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
  516. data/lib/rubocop/cop/style/block_comments.rb +4 -4
  517. data/lib/rubocop/cop/style/block_delimiters.rb +144 -23
  518. data/lib/rubocop/cop/style/case_equality.rb +49 -21
  519. data/lib/rubocop/cop/style/case_like_if.rb +56 -31
  520. data/lib/rubocop/cop/style/character_literal.rb +20 -16
  521. data/lib/rubocop/cop/style/class_and_module_children.rb +97 -26
  522. data/lib/rubocop/cop/style/class_check.rb +2 -1
  523. data/lib/rubocop/cop/style/class_equality_comparison.rb +83 -13
  524. data/lib/rubocop/cop/style/class_methods.rb +2 -4
  525. data/lib/rubocop/cop/style/class_methods_definitions.rb +3 -2
  526. data/lib/rubocop/cop/style/class_vars.rb +4 -4
  527. data/lib/rubocop/cop/style/collection_compact.rb +143 -0
  528. data/lib/rubocop/cop/style/collection_methods.rb +27 -7
  529. data/lib/rubocop/cop/style/collection_querying.rb +167 -0
  530. data/lib/rubocop/cop/style/colon_method_call.rb +4 -5
  531. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
  532. data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
  533. data/lib/rubocop/cop/style/combinable_loops.rb +52 -12
  534. data/lib/rubocop/cop/style/command_literal.rb +6 -11
  535. data/lib/rubocop/cop/style/comment_annotation.rb +59 -32
  536. data/lib/rubocop/cop/style/commented_keyword.rb +65 -22
  537. data/lib/rubocop/cop/style/comparable_between.rb +78 -0
  538. data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
  539. data/lib/rubocop/cop/style/concat_array_literals.rb +95 -0
  540. data/lib/rubocop/cop/style/conditional_assignment.rb +88 -76
  541. data/lib/rubocop/cop/style/constant_visibility.rb +28 -9
  542. data/lib/rubocop/cop/style/copyright.rb +39 -29
  543. data/lib/rubocop/cop/style/data_inheritance.rb +82 -0
  544. data/lib/rubocop/cop/style/date_time.rb +16 -10
  545. data/lib/rubocop/cop/style/def_with_parentheses.rb +30 -15
  546. data/lib/rubocop/cop/style/dig_chain.rb +89 -0
  547. data/lib/rubocop/cop/style/dir.rb +5 -1
  548. data/lib/rubocop/cop/style/dir_empty.rb +54 -0
  549. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -9
  550. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +169 -0
  551. data/lib/rubocop/cop/style/documentation.rb +95 -30
  552. data/lib/rubocop/cop/style/documentation_method.rb +31 -4
  553. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -7
  554. data/lib/rubocop/cop/style/double_negation.rb +97 -11
  555. data/lib/rubocop/cop/style/each_for_simple_loop.rb +45 -14
  556. data/lib/rubocop/cop/style/each_with_object.rb +42 -11
  557. data/lib/rubocop/cop/style/empty_block_parameter.rb +3 -3
  558. data/lib/rubocop/cop/style/empty_case_condition.rb +21 -12
  559. data/lib/rubocop/cop/style/empty_else.rb +52 -18
  560. data/lib/rubocop/cop/style/empty_heredoc.rb +60 -0
  561. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +3 -3
  562. data/lib/rubocop/cop/style/empty_literal.rb +62 -33
  563. data/lib/rubocop/cop/style/empty_method.rb +19 -8
  564. data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
  565. data/lib/rubocop/cop/style/encoding.rb +27 -16
  566. data/lib/rubocop/cop/style/end_block.rb +2 -3
  567. data/lib/rubocop/cop/style/endless_method.rb +233 -0
  568. data/lib/rubocop/cop/style/env_home.rb +56 -0
  569. data/lib/rubocop/cop/style/eval_with_location.rb +144 -63
  570. data/lib/rubocop/cop/style/even_odd.rb +2 -1
  571. data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
  572. data/lib/rubocop/cop/style/expand_path_arguments.rb +7 -11
  573. data/lib/rubocop/cop/style/explicit_block_argument.rb +78 -18
  574. data/lib/rubocop/cop/style/exponential_notation.rb +12 -12
  575. data/lib/rubocop/cop/style/fetch_env_var.rb +159 -0
  576. data/lib/rubocop/cop/style/file_empty.rb +71 -0
  577. data/lib/rubocop/cop/style/file_null.rb +89 -0
  578. data/lib/rubocop/cop/style/file_read.rb +109 -0
  579. data/lib/rubocop/cop/style/file_touch.rb +75 -0
  580. data/lib/rubocop/cop/style/file_write.rb +133 -0
  581. data/lib/rubocop/cop/style/float_division.rb +68 -6
  582. data/lib/rubocop/cop/style/for.rb +13 -3
  583. data/lib/rubocop/cop/style/format_string.rb +44 -16
  584. data/lib/rubocop/cop/style/format_string_token.rb +163 -26
  585. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +27 -18
  586. data/lib/rubocop/cop/style/global_std_stream.rb +16 -2
  587. data/lib/rubocop/cop/style/global_vars.rb +2 -4
  588. data/lib/rubocop/cop/style/guard_clause.rb +206 -32
  589. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +12 -0
  590. data/lib/rubocop/cop/style/hash_conversion.rb +151 -0
  591. data/lib/rubocop/cop/style/hash_each_methods.rb +147 -12
  592. data/lib/rubocop/cop/style/hash_except.rb +80 -0
  593. data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
  594. data/lib/rubocop/cop/style/hash_like_case.rb +6 -11
  595. data/lib/rubocop/cop/style/hash_slice.rb +80 -0
  596. data/lib/rubocop/cop/style/hash_syntax.rb +117 -33
  597. data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -15
  598. data/lib/rubocop/cop/style/hash_transform_values.rb +19 -14
  599. data/lib/rubocop/cop/style/identical_conditional_branches.rb +153 -10
  600. data/lib/rubocop/cop/style/if_inside_else.rb +67 -2
  601. data/lib/rubocop/cop/style/if_unless_modifier.rb +188 -29
  602. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
  603. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +163 -0
  604. data/lib/rubocop/cop/style/if_with_semicolon.rb +96 -7
  605. data/lib/rubocop/cop/style/implicit_runtime_error.rb +4 -3
  606. data/lib/rubocop/cop/style/in_pattern_then.rb +60 -0
  607. data/lib/rubocop/cop/style/infinite_loop.rb +9 -10
  608. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  609. data/lib/rubocop/cop/style/inverse_methods.rb +41 -28
  610. data/lib/rubocop/cop/style/invertible_unless_condition.rb +160 -0
  611. data/lib/rubocop/cop/style/ip_addresses.rb +5 -6
  612. data/lib/rubocop/cop/style/it_assignment.rb +93 -0
  613. data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
  614. data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
  615. data/lib/rubocop/cop/style/keyword_parameters_order.rb +34 -6
  616. data/lib/rubocop/cop/style/lambda.rb +8 -9
  617. data/lib/rubocop/cop/style/lambda_call.rb +27 -24
  618. data/lib/rubocop/cop/style/line_end_concatenation.rb +31 -16
  619. data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
  620. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +168 -0
  621. data/lib/rubocop/cop/style/map_into_array.rb +236 -0
  622. data/lib/rubocop/cop/style/map_to_hash.rb +90 -0
  623. data/lib/rubocop/cop/style/map_to_set.rb +63 -0
  624. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +138 -53
  625. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +11 -11
  626. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +109 -36
  627. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +62 -18
  628. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +7 -7
  629. data/lib/rubocop/cop/style/method_def_parentheses.rb +37 -14
  630. data/lib/rubocop/cop/style/min_max.rb +6 -6
  631. data/lib/rubocop/cop/style/min_max_comparison.rb +91 -0
  632. data/lib/rubocop/cop/style/missing_else.rb +48 -33
  633. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +37 -8
  634. data/lib/rubocop/cop/style/mixin_grouping.rb +10 -20
  635. data/lib/rubocop/cop/style/mixin_usage.rb +4 -3
  636. data/lib/rubocop/cop/style/module_function.rb +41 -18
  637. data/lib/rubocop/cop/style/multiline_block_chain.rb +7 -5
  638. data/lib/rubocop/cop/style/multiline_if_modifier.rb +4 -6
  639. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  640. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +60 -0
  641. data/lib/rubocop/cop/style/multiline_memoization.rb +5 -5
  642. data/lib/rubocop/cop/style/multiline_method_signature.rb +37 -3
  643. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +54 -12
  644. data/lib/rubocop/cop/style/multiline_when_then.rb +8 -21
  645. data/lib/rubocop/cop/style/multiple_comparison.rb +104 -32
  646. data/lib/rubocop/cop/style/mutable_constant.rb +99 -28
  647. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  648. data/lib/rubocop/cop/style/negated_if_else_condition.rb +137 -0
  649. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  650. data/lib/rubocop/cop/style/nested_file_dirname.rb +66 -0
  651. data/lib/rubocop/cop/style/nested_modifier.rb +5 -9
  652. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +17 -4
  653. data/lib/rubocop/cop/style/nested_ternary_operator.rb +23 -19
  654. data/lib/rubocop/cop/style/next.rb +51 -14
  655. data/lib/rubocop/cop/style/nil_comparison.rb +9 -1
  656. data/lib/rubocop/cop/style/nil_lambda.rb +70 -0
  657. data/lib/rubocop/cop/style/non_nil_check.rb +32 -18
  658. data/lib/rubocop/cop/style/not.rb +5 -5
  659. data/lib/rubocop/cop/style/numbered_parameters.rb +46 -0
  660. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +58 -0
  661. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
  662. data/lib/rubocop/cop/style/numeric_literals.rb +44 -29
  663. data/lib/rubocop/cop/style/numeric_predicate.rb +73 -20
  664. data/lib/rubocop/cop/style/object_then.rb +76 -0
  665. data/lib/rubocop/cop/style/one_line_conditional.rb +46 -46
  666. data/lib/rubocop/cop/style/open_struct_use.rb +69 -0
  667. data/lib/rubocop/cop/style/operator_method_call.rb +91 -0
  668. data/lib/rubocop/cop/style/option_hash.rb +3 -4
  669. data/lib/rubocop/cop/style/optional_arguments.rb +7 -6
  670. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +16 -5
  671. data/lib/rubocop/cop/style/or_assignment.rb +8 -13
  672. data/lib/rubocop/cop/style/parallel_assignment.rb +81 -66
  673. data/lib/rubocop/cop/style/parentheses_around_condition.rb +22 -3
  674. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +6 -9
  675. data/lib/rubocop/cop/style/percent_q_literals.rb +6 -7
  676. data/lib/rubocop/cop/style/perl_backrefs.rb +101 -10
  677. data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -9
  678. data/lib/rubocop/cop/style/proc.rb +6 -3
  679. data/lib/rubocop/cop/style/quoted_symbols.rb +122 -0
  680. data/lib/rubocop/cop/style/raise_args.rb +57 -30
  681. data/lib/rubocop/cop/style/random_with_offset.rb +12 -12
  682. data/lib/rubocop/cop/style/redundant_argument.rb +129 -0
  683. data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
  684. data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
  685. data/lib/rubocop/cop/style/redundant_assignment.rb +14 -7
  686. data/lib/rubocop/cop/style/redundant_begin.rb +96 -8
  687. data/lib/rubocop/cop/style/redundant_capital_w.rb +3 -5
  688. data/lib/rubocop/cop/style/redundant_condition.rb +235 -32
  689. data/lib/rubocop/cop/style/redundant_conditional.rb +6 -19
  690. data/lib/rubocop/cop/style/redundant_constant_base.rb +85 -0
  691. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +50 -0
  692. data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +129 -0
  693. data/lib/rubocop/cop/style/redundant_each.rb +119 -0
  694. data/lib/rubocop/cop/style/redundant_exception.rb +36 -17
  695. data/lib/rubocop/cop/style/redundant_fetch_block.rb +17 -17
  696. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +15 -5
  697. data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
  698. data/lib/rubocop/cop/style/redundant_format.rb +262 -0
  699. data/lib/rubocop/cop/style/redundant_freeze.rb +12 -8
  700. data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
  701. data/lib/rubocop/cop/style/redundant_initialize.rb +165 -0
  702. data/lib/rubocop/cop/style/redundant_interpolation.rb +42 -8
  703. data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
  704. data/lib/rubocop/cop/style/redundant_line_continuation.rb +236 -0
  705. data/lib/rubocop/cop/style/redundant_parentheses.rb +184 -66
  706. data/lib/rubocop/cop/style/redundant_percent_q.rb +6 -8
  707. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +107 -0
  708. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +27 -6
  709. data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
  710. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +24 -9
  711. data/lib/rubocop/cop/style/redundant_return.rb +28 -8
  712. data/lib/rubocop/cop/style/redundant_self.rb +70 -21
  713. data/lib/rubocop/cop/style/redundant_self_assignment.rb +27 -37
  714. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +90 -0
  715. data/lib/rubocop/cop/style/redundant_sort.rb +81 -34
  716. data/lib/rubocop/cop/style/redundant_sort_by.rb +41 -8
  717. data/lib/rubocop/cop/style/redundant_string_escape.rb +185 -0
  718. data/lib/rubocop/cop/style/regexp_literal.rb +25 -11
  719. data/lib/rubocop/cop/style/require_order.rb +139 -0
  720. data/lib/rubocop/cop/style/rescue_modifier.rb +39 -20
  721. data/lib/rubocop/cop/style/rescue_standard_error.rb +19 -21
  722. data/lib/rubocop/cop/style/return_nil.rb +16 -6
  723. data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +137 -0
  724. data/lib/rubocop/cop/style/safe_navigation.rb +222 -89
  725. data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
  726. data/lib/rubocop/cop/style/sample.rb +10 -8
  727. data/lib/rubocop/cop/style/select_by_regexp.rb +169 -0
  728. data/lib/rubocop/cop/style/self_assignment.rb +15 -21
  729. data/lib/rubocop/cop/style/semicolon.rb +101 -27
  730. data/lib/rubocop/cop/style/send.rb +6 -7
  731. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +105 -0
  732. data/lib/rubocop/cop/style/signal_exception.rb +17 -17
  733. data/lib/rubocop/cop/style/single_argument_dig.rb +26 -8
  734. data/lib/rubocop/cop/style/single_line_block_params.rb +38 -16
  735. data/lib/rubocop/cop/style/single_line_do_end_block.rb +78 -0
  736. data/lib/rubocop/cop/style/single_line_methods.rb +78 -15
  737. data/lib/rubocop/cop/style/slicing_with_range.rb +119 -10
  738. data/lib/rubocop/cop/style/sole_nested_conditional.rb +178 -7
  739. data/lib/rubocop/cop/style/special_global_vars.rb +97 -40
  740. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +2 -3
  741. data/lib/rubocop/cop/style/static_class.rb +128 -0
  742. data/lib/rubocop/cop/style/stderr_puts.rb +4 -7
  743. data/lib/rubocop/cop/style/string_chars.rb +42 -0
  744. data/lib/rubocop/cop/style/string_concatenation.rb +96 -24
  745. data/lib/rubocop/cop/style/string_hash_keys.rb +11 -2
  746. data/lib/rubocop/cop/style/string_literals.rb +21 -21
  747. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +35 -8
  748. data/lib/rubocop/cop/style/string_methods.rb +2 -2
  749. data/lib/rubocop/cop/style/strip.rb +9 -5
  750. data/lib/rubocop/cop/style/struct_inheritance.rb +27 -5
  751. data/lib/rubocop/cop/style/super_arguments.rb +221 -0
  752. data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
  753. data/lib/rubocop/cop/style/swap_values.rb +101 -0
  754. data/lib/rubocop/cop/style/symbol_array.rb +47 -22
  755. data/lib/rubocop/cop/style/symbol_literal.rb +2 -4
  756. data/lib/rubocop/cop/style/symbol_proc.rb +198 -22
  757. data/lib/rubocop/cop/style/ternary_parentheses.rb +49 -29
  758. data/lib/rubocop/cop/style/top_level_method_definition.rb +86 -0
  759. data/lib/rubocop/cop/style/trailing_body_on_class.rb +2 -1
  760. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +7 -3
  761. data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
  762. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +16 -7
  763. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +48 -7
  764. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +24 -9
  765. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +49 -7
  766. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +5 -11
  767. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +12 -16
  768. data/lib/rubocop/cop/style/trivial_accessors.rb +82 -16
  769. data/lib/rubocop/cop/style/unless_else.rb +6 -3
  770. data/lib/rubocop/cop/style/unless_logical_operators.rb +106 -0
  771. data/lib/rubocop/cop/style/unpack_first.rb +16 -15
  772. data/lib/rubocop/cop/style/variable_interpolation.rb +2 -3
  773. data/lib/rubocop/cop/style/when_then.rb +5 -3
  774. data/lib/rubocop/cop/style/while_until_do.rb +0 -2
  775. data/lib/rubocop/cop/style/while_until_modifier.rb +11 -7
  776. data/lib/rubocop/cop/style/word_array.rb +79 -8
  777. data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
  778. data/lib/rubocop/cop/style/yoda_condition.rb +52 -29
  779. data/lib/rubocop/cop/style/yoda_expression.rb +92 -0
  780. data/lib/rubocop/cop/style/zero_length_predicate.rb +77 -38
  781. data/lib/rubocop/cop/team.rb +94 -61
  782. data/lib/rubocop/cop/util.rb +100 -24
  783. data/lib/rubocop/cop/utils/format_string.rb +11 -8
  784. data/lib/rubocop/cop/variable_force/assignment.rb +66 -7
  785. data/lib/rubocop/cop/variable_force/branch.rb +19 -5
  786. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  787. data/lib/rubocop/cop/variable_force/scope.rb +8 -12
  788. data/lib/rubocop/cop/variable_force/variable.rb +20 -9
  789. data/lib/rubocop/cop/variable_force/variable_table.rb +9 -7
  790. data/lib/rubocop/cop/variable_force.rb +63 -66
  791. data/lib/rubocop/cops_documentation_generator.rb +197 -75
  792. data/lib/rubocop/core_ext/string.rb +2 -6
  793. data/lib/rubocop/directive_comment.rb +158 -10
  794. data/lib/rubocop/ext/comment.rb +18 -0
  795. data/lib/rubocop/ext/processed_source.rb +2 -0
  796. data/lib/rubocop/ext/range.rb +15 -0
  797. data/lib/rubocop/ext/regexp_node.rb +18 -11
  798. data/lib/rubocop/ext/regexp_parser.rb +78 -0
  799. data/lib/rubocop/feature_loader.rb +94 -0
  800. data/lib/rubocop/file_finder.rb +12 -12
  801. data/lib/rubocop/file_patterns.rb +43 -0
  802. data/lib/rubocop/formatter/clang_style_formatter.rb +8 -10
  803. data/lib/rubocop/formatter/disabled_config_formatter.rb +92 -32
  804. data/lib/rubocop/formatter/emacs_style_formatter.rb +2 -0
  805. data/lib/rubocop/formatter/formatter_set.rb +29 -20
  806. data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
  807. data/lib/rubocop/formatter/github_actions_formatter.rb +57 -0
  808. data/lib/rubocop/formatter/html_formatter.rb +50 -38
  809. data/lib/rubocop/formatter/json_formatter.rb +5 -7
  810. data/lib/rubocop/formatter/junit_formatter.rb +85 -26
  811. data/lib/rubocop/formatter/markdown_formatter.rb +79 -0
  812. data/lib/rubocop/formatter/offense_count_formatter.rb +28 -9
  813. data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
  814. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  815. data/lib/rubocop/formatter/simple_text_formatter.rb +13 -9
  816. data/lib/rubocop/formatter/tap_formatter.rb +10 -10
  817. data/lib/rubocop/formatter/worst_offenders_formatter.rb +8 -6
  818. data/lib/rubocop/formatter.rb +34 -0
  819. data/lib/rubocop/lockfile.rb +91 -0
  820. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  821. data/lib/rubocop/lsp/logger.rb +22 -0
  822. data/lib/rubocop/lsp/routes.rb +227 -0
  823. data/lib/rubocop/lsp/runtime.rb +69 -0
  824. data/lib/rubocop/lsp/server.rb +70 -0
  825. data/lib/rubocop/lsp/severity.rb +27 -0
  826. data/lib/rubocop/lsp/stdin_runner.rb +85 -0
  827. data/lib/rubocop/lsp.rb +36 -0
  828. data/lib/rubocop/magic_comment.rb +115 -21
  829. data/lib/rubocop/name_similarity.rb +1 -1
  830. data/lib/rubocop/options.rb +348 -197
  831. data/lib/rubocop/path_util.rb +62 -25
  832. data/lib/rubocop/pending_cops_reporter.rb +56 -0
  833. data/lib/rubocop/plugin/configuration_integrator.rb +143 -0
  834. data/lib/rubocop/plugin/load_error.rb +26 -0
  835. data/lib/rubocop/plugin/loader.rb +100 -0
  836. data/lib/rubocop/plugin/not_supported_error.rb +29 -0
  837. data/lib/rubocop/plugin.rb +46 -0
  838. data/lib/rubocop/rake_task.rb +42 -11
  839. data/lib/rubocop/remote_config.rb +20 -13
  840. data/lib/rubocop/result_cache.rb +60 -57
  841. data/lib/rubocop/rspec/cop_helper.rb +45 -8
  842. data/lib/rubocop/rspec/expect_offense.rb +80 -45
  843. data/lib/rubocop/rspec/parallel_formatter.rb +90 -0
  844. data/lib/rubocop/rspec/shared_contexts.rb +164 -33
  845. data/lib/rubocop/rspec/support.rb +24 -3
  846. data/lib/rubocop/runner.rb +168 -52
  847. data/lib/rubocop/server/cache.rb +208 -0
  848. data/lib/rubocop/server/cli.rb +147 -0
  849. data/lib/rubocop/server/client_command/base.rb +54 -0
  850. data/lib/rubocop/server/client_command/exec.rb +65 -0
  851. data/lib/rubocop/server/client_command/restart.rb +25 -0
  852. data/lib/rubocop/server/client_command/start.rb +58 -0
  853. data/lib/rubocop/server/client_command/status.rb +28 -0
  854. data/lib/rubocop/server/client_command/stop.rb +31 -0
  855. data/lib/rubocop/server/client_command.rb +26 -0
  856. data/lib/rubocop/server/core.rb +116 -0
  857. data/lib/rubocop/server/errors.rb +23 -0
  858. data/lib/rubocop/server/helper.rb +34 -0
  859. data/lib/rubocop/server/server_command/base.rb +50 -0
  860. data/lib/rubocop/server/server_command/exec.rb +33 -0
  861. data/lib/rubocop/server/server_command/stop.rb +24 -0
  862. data/lib/rubocop/server/server_command.rb +21 -0
  863. data/lib/rubocop/server/socket_reader.rb +69 -0
  864. data/lib/rubocop/server.rb +53 -0
  865. data/lib/rubocop/string_interpreter.rb +7 -7
  866. data/lib/rubocop/target_finder.rb +113 -93
  867. data/lib/rubocop/target_ruby.rb +156 -19
  868. data/lib/rubocop/util.rb +16 -0
  869. data/lib/rubocop/version.rb +139 -8
  870. data/lib/rubocop/yaml_duplication_checker.rb +20 -26
  871. data/lib/rubocop.rb +219 -39
  872. data/lib/ruby_lsp/rubocop/addon.rb +75 -0
  873. data/lib/ruby_lsp/rubocop/runtime_adapter.rb +65 -0
  874. metadata +352 -66
  875. data/bin/console +0 -10
  876. data/bin/rubocop-profile +0 -32
  877. data/bin/setup +0 -7
  878. data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -19
  879. data/lib/rubocop/cop/mixin/ignored_pattern.rb +0 -29
  880. data/lib/rubocop/cop/naming/predicate_name.rb +0 -104
  881. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
@@ -5,7 +5,6 @@ module RuboCop
5
5
  # Common functionality for checking documentation.
6
6
  module DocumentationComment
7
7
  extend NodePattern::Macros
8
- include Style::AnnotationComment
9
8
 
10
9
  private
11
10
 
@@ -15,7 +14,7 @@ module RuboCop
15
14
  return false unless preceding_comment?(node, preceding_lines.last)
16
15
 
17
16
  preceding_lines.any? do |comment|
18
- !annotation?(comment) &&
17
+ !AnnotationComment.new(comment, annotation_keywords).annotation? &&
19
18
  !interpreter_directive_comment?(comment) &&
20
19
  !rubocop_directive_comment?(comment)
21
20
  end
@@ -24,8 +23,7 @@ module RuboCop
24
23
  # The args node1 & node2 may represent a RuboCop::AST::Node
25
24
  # or a Parser::Source::Comment. Both respond to #loc.
26
25
  def preceding_comment?(node1, node2)
27
- node1 && node2 && precede?(node2, node1) &&
28
- comment_line?(node2.loc.expression.source)
26
+ node1 && node2 && precede?(node2, node1) && comment_line?(node2.source)
29
27
  end
30
28
 
31
29
  # The args node1 & node2 may represent a RuboCop::AST::Node
@@ -35,9 +33,7 @@ module RuboCop
35
33
  end
36
34
 
37
35
  def preceding_lines(node)
38
- processed_source.ast_with_comments[node].select do |line|
39
- line.loc.line < node.loc.line
40
- end
36
+ processed_source.ast_with_comments[node].select { |line| line.loc.line < node.loc.line }
41
37
  end
42
38
 
43
39
  def interpreter_directive_comment?(comment)
@@ -45,7 +41,11 @@ module RuboCop
45
41
  end
46
42
 
47
43
  def rubocop_directive_comment?(comment)
48
- CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
44
+ !!DirectiveComment.new(comment).match_captures
45
+ end
46
+
47
+ def annotation_keywords
48
+ config.for_cop('Style/CommentAnnotation')['Keywords']
49
49
  end
50
50
  end
51
51
  end
@@ -29,7 +29,7 @@ module RuboCop
29
29
  # @param [Array] collection an array to return consecutive duplicates for
30
30
  # @return [Array] the consecutive duplicates
31
31
  def consecutive_duplicates(collection)
32
- grouped_duplicates(collection).flat_map { |items| items[1..-1] }
32
+ grouped_duplicates(collection).flat_map { |items| items[1..] }
33
33
  end
34
34
 
35
35
  # Returns a hash of grouped duplicates. The key will be the first
@@ -10,17 +10,18 @@ module RuboCop
10
10
  include ConfigurableEnforcedStyle
11
11
  include RangeHelp
12
12
 
13
- MSG_EXTRA = 'Extra empty line detected at %<kind>s body ' \
14
- '%<location>s.'
13
+ MSG_EXTRA = 'Extra empty line detected at %<kind>s body %<location>s.'
15
14
  MSG_MISSING = 'Empty line missing at %<kind>s body %<location>s.'
16
- MSG_DEFERRED = 'Empty line missing before first %<type>s ' \
17
- 'definition'
15
+ MSG_DEFERRED = 'Empty line missing before first %<type>s definition'
18
16
 
19
17
  private
20
18
 
19
+ # @!method constant_definition?(node)
21
20
  def_node_matcher :constant_definition?, '{class module}'
21
+
22
+ # @!method empty_line_required?(node)
22
23
  def_node_matcher :empty_line_required?,
23
- '{def defs class module (send nil? {:private :protected :public})}'
24
+ '{any_def class module (send nil? {:private :protected :public})}'
24
25
 
25
26
  def check(node, body, adjusted_first_line: nil)
26
27
  return if valid_body_style?(body)
@@ -90,9 +91,7 @@ module RuboCop
90
91
  when :no_empty_lines
91
92
  check_line(style, line_no, message(MSG_EXTRA, desc), &:empty?)
92
93
  when :empty_lines
93
- check_line(style, line_no, message(MSG_MISSING, desc)) do |line|
94
- !line.empty?
95
- end
94
+ check_line(style, line_no, message(MSG_MISSING, desc)) { |line| !line.empty? }
96
95
  end
97
96
  end
98
97
 
@@ -8,6 +8,7 @@ module RuboCop
8
8
 
9
9
  private
10
10
 
11
+ # @!method empty_arguments?(node)
11
12
  def_node_matcher :empty_arguments?, <<~PATTERN
12
13
  (block _ $(args) _)
13
14
  PATTERN
@@ -16,9 +17,7 @@ module RuboCop
16
17
  empty_arguments?(node) do |args|
17
18
  return if args.empty_and_without_delimiters?
18
19
 
19
- add_offense(args) do |corrector|
20
- autocorrect(corrector, args)
21
- end
20
+ add_offense(args) { |corrector| autocorrect(corrector, args) }
22
21
  end
23
22
  end
24
23
  end
@@ -34,8 +34,7 @@ module RuboCop
34
34
 
35
35
  def matching_ranges(end_loc, align_ranges)
36
36
  align_ranges.select do |_, range|
37
- range.line == end_loc.line ||
38
- column_offset_between(range, end_loc).zero?
37
+ same_line?(range, end_loc) || column_offset_between(range, end_loc).zero?
39
38
  end
40
39
  end
41
40
 
@@ -55,9 +54,7 @@ module RuboCop
55
54
  source: align_with.source,
56
55
  align_line: align_with.line,
57
56
  align_col: align_with.column)
58
- add_offense(end_loc, message: msg) do |corrector|
59
- autocorrect(corrector, node)
60
- end
57
+ add_offense(end_loc, message: msg) { |corrector| autocorrect(corrector, node) }
61
58
  end
62
59
 
63
60
  def accept_end_kw_alignment?(end_loc)
@@ -70,7 +67,7 @@ module RuboCop
70
67
  end
71
68
 
72
69
  def variable_alignment?(whole_expression, rhs, end_alignment_style)
73
- return if end_alignment_style == :keyword
70
+ return false if end_alignment_style == :keyword
74
71
 
75
72
  !line_break_before_keyword?(whole_expression, rhs)
76
73
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for rewriting endless methods to normal method definitions
6
+ module EndlessMethodRewriter
7
+ def correct_to_multiline(corrector, node)
8
+ replacement = <<~RUBY.strip
9
+ def #{node.method_name}#{arguments(node)}
10
+ #{node.body.source}
11
+ end
12
+ RUBY
13
+
14
+ corrector.replace(node, replacement)
15
+ end
16
+
17
+ private
18
+
19
+ def arguments(node, missing = '')
20
+ node.arguments.any? ? node.arguments.source : missing
21
+ end
22
+ end
23
+ end
24
+ end
@@ -2,13 +2,29 @@
2
2
 
3
3
  module RuboCop
4
4
  module Cop
5
- # Common functionality for enforcing a specific superclass
5
+ # Common functionality for enforcing a specific superclass.
6
+ #
7
+ # IMPORTANT: RuboCop core depended on this module when it supported Rails department.
8
+ # Rails department has been extracted to RuboCop Rails gem.
9
+ #
10
+ # @deprecated This module is deprecated and will be removed by RuboCop 2.0.
11
+ # It will not be updated to `RuboCop::Cop::Base` v1 API to maintain compatibility
12
+ # with existing RuboCop Rails 2.8 or lower.
13
+ #
14
+ # @api private
6
15
  module EnforceSuperclass
7
16
  def self.included(base)
17
+ warn Rainbow(
18
+ '`RuboCop::Cop::EnforceSuperclass` is deprecated and will be removed in RuboCop 2.0. ' \
19
+ 'Please upgrade to RuboCop Rails 2.9 or newer to continue.'
20
+ ).yellow
21
+
22
+ # @!method class_definition(node)
8
23
  base.def_node_matcher :class_definition, <<~PATTERN
9
24
  (class (const _ !:#{base::SUPERCLASS}) #{base::BASE_PATTERN} ...)
10
25
  PATTERN
11
26
 
27
+ # @!method class_new_definition(node)
12
28
  base.def_node_matcher :class_new_definition, <<~PATTERN
13
29
  [!^(casgn {nil? cbase} :#{base::SUPERCLASS} ...)
14
30
  !^^(casgn {nil? cbase} :#{base::SUPERCLASS} (block ...))
@@ -17,15 +33,11 @@ module RuboCop
17
33
  end
18
34
 
19
35
  def on_class(node)
20
- class_definition(node) do
21
- add_offense(node.children[1])
22
- end
36
+ class_definition(node) { add_offense(node.children[1]) }
23
37
  end
24
38
 
25
39
  def on_send(node)
26
- class_new_definition(node) do
27
- add_offense(node.children.last)
28
- end
40
+ class_new_definition(node) { add_offense(node.children.last) }
29
41
  end
30
42
  end
31
43
  end
@@ -7,12 +7,12 @@ module RuboCop
7
7
  module FirstElementLineBreak
8
8
  private
9
9
 
10
- def check_method_line_break(node, children)
10
+ def check_method_line_break(node, children, ignore_last: false)
11
11
  return if children.empty?
12
12
 
13
13
  return unless method_uses_parens?(node, children.first)
14
14
 
15
- check_children_line_break(node, children)
15
+ check_children_line_break(node, children, ignore_last: ignore_last)
16
16
  end
17
17
 
18
18
  def method_uses_parens?(node, limit)
@@ -20,28 +20,30 @@ module RuboCop
20
20
  /\s*\(\s*$/.match?(source)
21
21
  end
22
22
 
23
- def check_children_line_break(node, children, start = node)
24
- return if children.size < 2
23
+ def check_children_line_break(node, children, start = node, ignore_last: false)
24
+ return if children.empty?
25
25
 
26
26
  line = start.first_line
27
27
 
28
28
  min = first_by_line(children)
29
29
  return if line != min.first_line
30
30
 
31
- max = last_by_line(children)
32
- return if line == max.last_line
31
+ max_line = last_line(children, ignore_last: ignore_last)
32
+ return if line == max_line
33
33
 
34
- add_offense(min) do |corrector|
35
- EmptyLineCorrector.insert_before(corrector, min)
36
- end
34
+ add_offense(min) { |corrector| EmptyLineCorrector.insert_before(corrector, min) }
37
35
  end
38
36
 
39
37
  def first_by_line(nodes)
40
38
  nodes.min_by(&:first_line)
41
39
  end
42
40
 
43
- def last_by_line(nodes)
44
- nodes.max_by(&:last_line)
41
+ def last_line(nodes, ignore_last:)
42
+ if ignore_last
43
+ nodes.map(&:first_line)
44
+ else
45
+ nodes.map(&:last_line)
46
+ end.max
45
47
  end
46
48
  end
47
49
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # This module encapsulates the ability to forbid certain identifiers in a cop.
6
+ module ForbiddenIdentifiers
7
+ SIGILS = '@$' # if a variable starts with a sigil it will be removed
8
+
9
+ def forbidden_identifier?(name)
10
+ name = name.to_s.delete(SIGILS)
11
+
12
+ forbidden_identifiers.any? && forbidden_identifiers.include?(name)
13
+ end
14
+
15
+ def forbidden_identifiers
16
+ cop_config.fetch('ForbiddenIdentifiers', [])
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # This module encapsulates the ability to forbid certain patterns in a cop.
6
+ module ForbiddenPattern
7
+ def forbidden_pattern?(name)
8
+ forbidden_patterns.any? { |pattern| Regexp.new(pattern).match?(name) }
9
+ end
10
+
11
+ def forbidden_patterns
12
+ cop_config.fetch('ForbiddenPatterns', [])
13
+ end
14
+ end
15
+ end
16
+ end
@@ -6,36 +6,71 @@ module RuboCop
6
6
  module FrozenStringLiteral
7
7
  module_function
8
8
 
9
- FROZEN_STRING_LITERAL = '# frozen_string_literal:'
10
9
  FROZEN_STRING_LITERAL_ENABLED = '# frozen_string_literal: true'
11
- FROZEN_STRING_LITERAL_TYPES = %i[str dstr].freeze
10
+ FROZEN_STRING_LITERAL_TYPES_RUBY27 = %i[str dstr].freeze
11
+
12
+ private_constant :FROZEN_STRING_LITERAL_TYPES_RUBY27
12
13
 
13
14
  def frozen_string_literal_comment_exists?
14
- leading_comment_lines.any? do |line|
15
- MagicComment.parse(line).valid_literal_value?
16
- end
15
+ leading_comment_lines.any? { |line| MagicComment.parse(line).valid_literal_value? }
17
16
  end
18
17
 
19
18
  private
20
19
 
20
+ def frozen_string_literal?(node)
21
+ frozen_string = if target_ruby_version >= 3.0
22
+ uninterpolated_string?(node) || uninterpolated_heredoc?(node)
23
+ else
24
+ FROZEN_STRING_LITERAL_TYPES_RUBY27.include?(node.type)
25
+ end
26
+
27
+ frozen_string && frozen_string_literals_enabled?
28
+ end
29
+
30
+ def uninterpolated_string?(node)
31
+ node.str_type? || (
32
+ node.dstr_type? && node.each_descendant(:begin, :ivar, :cvar, :gvar).none?
33
+ )
34
+ end
35
+
36
+ def uninterpolated_heredoc?(node)
37
+ return false unless node.dstr_type? && node.heredoc?
38
+
39
+ node.children.all?(&:str_type?)
40
+ end
41
+ alias frozen_heredoc? uninterpolated_heredoc?
42
+
21
43
  def frozen_string_literals_enabled?
22
44
  ruby_version = processed_source.ruby_version
23
45
  return false unless ruby_version
24
46
 
47
+ # Check if a magic string literal comment specifies what to do
48
+ magic_comments = leading_comment_lines.filter_map { |line| MagicComment.parse(line) }
49
+ if (literal_magic_comment = magic_comments.find(&:frozen_string_literal_specified?))
50
+ return literal_magic_comment.frozen_string_literal?
51
+ end
52
+
25
53
  # TODO: Ruby officially abandon making frozen string literals default
26
54
  # for Ruby 3.0.
27
55
  # https://bugs.ruby-lang.org/issues/11473#note-53
28
- # Whether frozen string literals will be the default after Ruby 3.0
29
- # or not is still unclear as of January 2019.
56
+ # Whether frozen string literals will be the default after Ruby 4.0
57
+ # or not is still unclear as of July 2024.
30
58
  # It may be necessary to add this code in the future.
31
59
  #
32
- # return true if ruby_version >= 3.1
60
+ # return ruby_version >= 4.0 if string_literals_frozen_by_default?.nil?
33
61
  #
34
- # And the above `ruby_version >= 3.1` is undecided whether it will be
35
- # Ruby 3.1, 3.2, 4.0 or others.
36
- # See https://bugs.ruby-lang.org/issues/8976#note-41 for details.
62
+ # And the above `ruby_version >= 4.0` is undecided whether it will be
63
+ # Ruby 4.0 or others.
64
+ # See https://bugs.ruby-lang.org/issues/20205 for details.
65
+ # For now, offer a configuration value to override behavior is using RUBYOPT.
66
+ return false if string_literals_frozen_by_default?.nil?
67
+
68
+ string_literals_frozen_by_default?
69
+ end
70
+
71
+ def frozen_string_literals_disabled?
37
72
  leading_comment_lines.any? do |line|
38
- MagicComment.parse(line).frozen_string_literal?
73
+ MagicComment.parse(line).frozen_string_literal == false
39
74
  end
40
75
  end
41
76
 
@@ -45,14 +80,16 @@ module RuboCop
45
80
  end
46
81
  end
47
82
 
83
+ def leading_magic_comments
84
+ leading_comment_lines.map { |line| MagicComment.parse(line) }
85
+ end
86
+
48
87
  def leading_comment_lines
49
- first_non_comment_token = processed_source.tokens.find do |token|
50
- !token.comment?
51
- end
88
+ first_non_comment_token = processed_source.tokens.find { |token| !token.comment? }
52
89
 
53
90
  if first_non_comment_token
54
91
  # `line` is 1-indexed so we need to subtract 1 to get the array index
55
- processed_source.lines[0...first_non_comment_token.line - 1]
92
+ processed_source.lines[0...(first_non_comment_token.line - 1)]
56
93
  else
57
94
  processed_source.lines
58
95
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking gem declarations.
6
+ module GemDeclaration
7
+ extend NodePattern::Macros
8
+
9
+ # @!method gem_declaration?(node)
10
+ def_node_matcher :gem_declaration?, '(send nil? :gem str ...)'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking gem declarations.
6
+ module GemspecHelp
7
+ extend NodePattern::Macros
8
+
9
+ # @!method gem_specification?(node)
10
+ def_node_matcher :gem_specification?, <<~PATTERN
11
+ (block
12
+ (send
13
+ (const
14
+ (const {cbase nil?} :Gem) :Specification) :new)
15
+ (args
16
+ (arg $_)) ...)
17
+ PATTERN
18
+
19
+ # @!method gem_specification(node)
20
+ def_node_search :gem_specification, <<~PATTERN
21
+ (block
22
+ (send
23
+ (const
24
+ (const {cbase nil?} :Gem) :Specification) :new)
25
+ (args
26
+ (arg $_)) ...)
27
+ PATTERN
28
+
29
+ # @!method assignment_method_declarations(node)
30
+ def_node_search :assignment_method_declarations, <<~PATTERN
31
+ (send
32
+ (lvar {#match_block_variable_name? :_1 :it}) _ ...)
33
+ PATTERN
34
+
35
+ # @!method indexed_assignment_method_declarations(node)
36
+ def_node_search :indexed_assignment_method_declarations, <<~PATTERN
37
+ (send
38
+ (send (lvar {#match_block_variable_name? :_1 :it}) _)
39
+ :[]=
40
+ literal?
41
+ _
42
+ )
43
+ PATTERN
44
+
45
+ def match_block_variable_name?(receiver_name)
46
+ gem_specification(processed_source.ast) do |block_variable_name|
47
+ return block_variable_name == receiver_name
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -10,7 +10,7 @@ module RuboCop
10
10
  true
11
11
  end
12
12
 
13
- def deltas_for_first_pair(first_pair, _node)
13
+ def deltas_for_first_pair(first_pair)
14
14
  {
15
15
  separator: separator_delta(first_pair),
16
16
  value: value_delta(first_pair)
@@ -33,7 +33,7 @@ module RuboCop
33
33
 
34
34
  def separator_delta(pair)
35
35
  if pair.hash_rocket?
36
- correct_separator_column = pair.key.loc.expression.end.column + 1
36
+ correct_separator_column = pair.key.source_range.end.column + 1
37
37
  actual_separator_column = pair.loc.operator.column
38
38
 
39
39
  correct_separator_column - actual_separator_column
@@ -43,7 +43,7 @@ module RuboCop
43
43
  end
44
44
 
45
45
  def value_delta(pair)
46
- return 0 if pair.kwsplat_type? || pair.value_on_new_line?
46
+ return 0 if pair.value_on_new_line? || pair.value_omission?
47
47
 
48
48
  correct_value_column = pair.loc.operator.end.column + 1
49
49
  actual_value_column = pair.value.loc.column
@@ -60,10 +60,8 @@ module RuboCop
60
60
 
61
61
  def deltas(first_pair, current_pair)
62
62
  key_delta = key_delta(first_pair, current_pair)
63
- separator_delta = separator_delta(first_pair, current_pair,
64
- key_delta)
65
- value_delta = value_delta(first_pair, current_pair) -
66
- key_delta - separator_delta
63
+ separator_delta = separator_delta(first_pair, current_pair, key_delta)
64
+ value_delta = value_delta(first_pair, current_pair) - key_delta - separator_delta
67
65
 
68
66
  { key: key_delta, separator: separator_delta, value: value_delta }
69
67
  end
@@ -83,13 +81,7 @@ module RuboCop
83
81
  class TableAlignment
84
82
  include ValueAlignment
85
83
 
86
- def initialize
87
- self.max_key_width = 0
88
- end
89
-
90
- def deltas_for_first_pair(first_pair, node)
91
- self.max_key_width = node.keys.map { |key| key.source.length }.max
92
-
84
+ def deltas_for_first_pair(first_pair)
93
85
  separator_delta = separator_delta(first_pair, first_pair, 0)
94
86
  {
95
87
  separator: separator_delta,
@@ -99,24 +91,29 @@ module RuboCop
99
91
 
100
92
  private
101
93
 
102
- attr_accessor :max_key_width
103
-
104
94
  def key_delta(first_pair, current_pair)
105
95
  first_pair.key_delta(current_pair)
106
96
  end
107
97
 
108
98
  def hash_rocket_delta(first_pair, current_pair)
109
- first_pair.loc.column + max_key_width + 1 -
99
+ first_pair.loc.column + max_key_width(first_pair.parent) + 1 -
110
100
  current_pair.loc.operator.column
111
101
  end
112
102
 
113
103
  def value_delta(first_pair, current_pair)
114
- return 0 if current_pair.kwsplat_type?
115
-
116
104
  correct_value_column = first_pair.key.loc.column +
117
- current_pair.delimiter(true).length +
118
- max_key_width
119
- correct_value_column - current_pair.value.loc.column
105
+ max_key_width(first_pair.parent) +
106
+ max_delimiter_width(first_pair.parent)
107
+
108
+ current_pair.value_omission? ? 0 : correct_value_column - current_pair.value.loc.column
109
+ end
110
+
111
+ def max_key_width(hash_node)
112
+ hash_node.keys.map { |key| key.source.length }.max
113
+ end
114
+
115
+ def max_delimiter_width(hash_node)
116
+ hash_node.pairs.map { |pair| pair.delimiter(true).length }.max
120
117
  end
121
118
  end
122
119
 
@@ -124,7 +121,7 @@ module RuboCop
124
121
  class SeparatorAlignment
125
122
  include ValueAlignment
126
123
 
127
- def deltas_for_first_pair(*_nodes)
124
+ def deltas_for_first_pair(_first_pair)
128
125
  {}
129
126
  end
130
127
 
@@ -139,7 +136,20 @@ module RuboCop
139
136
  end
140
137
 
141
138
  def value_delta(first_pair, current_pair)
142
- first_pair.value_delta(current_pair)
139
+ current_pair.value_omission? ? 0 : first_pair.value_delta(current_pair)
140
+ end
141
+ end
142
+
143
+ # Handles calculation of deltas for `kwsplat` nodes.
144
+ # This is a special case that just ensures the kwsplat is aligned with the rest of the hash
145
+ # since a `kwsplat` does not have a key, separator or value.
146
+ class KeywordSplatAlignment
147
+ def deltas(first_pair, current_pair)
148
+ if Util.begins_its_line?(current_pair.source_range)
149
+ { key: first_pair.key_delta(current_pair) }
150
+ else
151
+ {}
152
+ end
143
153
  end
144
154
  end
145
155
  end