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
@@ -1,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'optparse'
4
- require 'shellwords'
4
+ require_relative 'arguments_env'
5
+ require_relative 'arguments_file'
5
6
 
6
7
  module RuboCop
7
8
  class IncorrectCopNameError < StandardError; end
9
+
8
10
  class OptionArgumentError < StandardError; end
9
11
 
10
12
  # This class handles command line options.
11
13
  # @api private
12
14
  class Options
13
15
  E_STDIN_NO_PATH = '-s/--stdin requires exactly one path, relative to the ' \
14
- 'root of the project. RuboCop will use this path to determine which ' \
15
- 'cops are enabled (via eg. Include/Exclude), and so that certain cops ' \
16
- 'like Naming/FileName can be checked.'
17
- EXITING_OPTIONS = %i[version verbose_version show_cops].freeze
16
+ 'root of the project. RuboCop will use this path to determine which ' \
17
+ 'cops are enabled (via eg. Include/Exclude), and so that certain cops ' \
18
+ 'like Naming/FileName can be checked.'
19
+ EXITING_OPTIONS = %i[version verbose_version show_cops show_docs_url lsp].freeze
18
20
  DEFAULT_MAXIMUM_EXCLUSION_ITEMS = 15
19
21
 
20
22
  def initialize
@@ -23,7 +25,10 @@ module RuboCop
23
25
  end
24
26
 
25
27
  def parse(command_line_args)
28
+ args_from_file = ArgumentsFile.read_as_arguments
29
+ args_from_env = ArgumentsEnv.read_as_arguments
26
30
  args = args_from_file.concat(args_from_env).concat(command_line_args)
31
+
27
32
  define_options.parse!(args)
28
33
 
29
34
  @validator.validate_compatibility
@@ -44,108 +49,148 @@ module RuboCop
44
49
 
45
50
  private
46
51
 
47
- def args_from_file
48
- if File.exist?('.rubocop') && !File.directory?('.rubocop')
49
- File.read('.rubocop').shellsplit
50
- else
51
- []
52
- end
53
- end
54
-
55
- def args_from_env
56
- Shellwords.split(ENV.fetch('RUBOCOP_OPTS', ''))
57
- end
58
-
52
+ # rubocop:disable Metrics/AbcSize
59
53
  def define_options
60
54
  OptionParser.new do |opts|
61
- opts.banner = 'Usage: rubocop [options] [file1, file2, ...]'
55
+ opts.banner = rainbow.wrap('Usage: rubocop [options] [file1, file2, ...]').bright
62
56
 
63
- add_list_options(opts)
64
- add_only_options(opts)
65
- add_configuration_options(opts)
66
- add_formatting_options(opts)
67
-
68
- option(opts, '-r', '--require FILE') { |f| require f }
69
-
70
- add_severity_option(opts)
71
- add_flags_with_optional_args(opts)
57
+ add_check_options(opts)
72
58
  add_cache_options(opts)
73
- add_boolean_flags(opts)
74
- add_aliases(opts)
75
-
76
- option(opts, '-s', '--stdin FILE')
59
+ add_lsp_option(opts)
60
+ add_server_options(opts)
61
+ add_output_options(opts)
62
+ add_autocorrection_options(opts)
63
+ add_config_generation_options(opts)
64
+ add_additional_modes(opts)
65
+ add_general_options(opts)
66
+
67
+ # `stackprof` is not supported on JRuby and Windows.
68
+ add_profile_options(opts) if RUBY_ENGINE == 'ruby' && !Platform.windows?
77
69
  end
78
70
  end
71
+ # rubocop:enable Metrics/AbcSize
79
72
 
80
- def add_only_options(opts)
81
- add_cop_selection_csv_option('except', opts)
82
- add_cop_selection_csv_option('only', opts)
83
- option(opts, '--only-guide-cops')
73
+ def add_check_options(opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
74
+ section(opts, 'Basic Options') do # rubocop:disable Metrics/BlockLength
75
+ option(opts, '-l', '--lint') do
76
+ @options[:only] ||= []
77
+ @options[:only] << 'Lint'
78
+ end
79
+ option(opts, '-x', '--fix-layout') do
80
+ @options[:only] ||= []
81
+ @options[:only] << 'Layout'
82
+ @options[:autocorrect] = true
83
+ end
84
+ option(opts, '--safe')
85
+ add_cop_selection_csv_option('except', opts)
86
+ add_cop_selection_csv_option('only', opts)
87
+ option(opts, '--only-guide-cops')
88
+ option(opts, '-F', '--fail-fast')
89
+ option(opts, '--disable-pending-cops')
90
+ option(opts, '--enable-pending-cops')
91
+ option(opts, '--ignore-disable-comments')
92
+ option(opts, '--force-exclusion')
93
+ option(opts, '--only-recognized-file-types')
94
+ option(opts, '--ignore-parent-exclusion')
95
+ option(opts, '--ignore-unrecognized-cops')
96
+ option(opts, '--force-default-config')
97
+ option(opts, '-s', '--stdin FILE')
98
+ option(opts, '--editor-mode')
99
+ option(opts, '-P', '--[no-]parallel')
100
+ option(opts, '--raise-cop-error')
101
+ add_severity_option(opts)
102
+ end
84
103
  end
85
104
 
86
- def add_cop_selection_csv_option(option, opts)
87
- option(opts, "--#{option} [COP1,COP2,...]") do |list|
88
- unless list
89
- message = "--#{option} argument should be [COP1,COP2,...]."
90
-
91
- raise OptionArgumentError, message
105
+ def add_output_options(opts) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
106
+ section(opts, 'Output Options') do
107
+ option(opts, '-f', '--format FORMATTER') do |key|
108
+ @options[:formatters] ||= []
109
+ @options[:formatters] << [key]
92
110
  end
93
111
 
94
- @options[:"#{option}"] =
95
- if list.empty?
96
- ['']
112
+ option(opts, '-D', '--[no-]display-cop-names')
113
+ option(opts, '-E', '--extra-details')
114
+ option(opts, '-S', '--display-style-guide')
115
+
116
+ option(opts, '-o', '--out FILE') do |path|
117
+ if @options[:formatters]
118
+ @options[:formatters].last << path
97
119
  else
98
- list.split(',').map do |c|
99
- Cop::Registry.qualified_cop_name(c, "--#{option} option")
100
- end
120
+ @options[:output_path] = path
101
121
  end
122
+ end
123
+
124
+ option(opts, '--stderr')
125
+ option(opts, '--display-time')
126
+ option(opts, '--display-only-failed')
127
+ option(opts, '--display-only-fail-level-offenses')
128
+ option(opts, '--display-only-correctable')
129
+ option(opts, '--display-only-safe-correctable')
102
130
  end
103
131
  end
104
132
 
105
- def add_configuration_options(opts)
106
- option(opts, '-c', '--config FILE')
107
- option(opts, '--force-exclusion')
108
- option(opts, '--only-recognized-file-types')
109
- option(opts, '--ignore-parent-exclusion')
110
- option(opts, '--force-default-config')
111
- add_auto_gen_options(opts)
112
- end
133
+ # rubocop:todo Naming/InclusiveLanguage
134
+ # the autocorrect command-line arguments map to the autocorrect @options values like so:
135
+ # :fix_layout :autocorrect :safe_autocorrect :autocorrect_all
136
+ # -x, --fix-layout true true - -
137
+ # -a, --auto-correct - true true -
138
+ # --safe-auto-correct - true true -
139
+ # -A, --auto-correct-all - true - true
140
+ def add_autocorrection_options(opts) # rubocop:disable Metrics/MethodLength
141
+ section(opts, 'Autocorrection') do
142
+ option(opts, '-a', '--autocorrect') { @options[:safe_autocorrect] = true }
143
+ option(opts, '--auto-correct') do
144
+ handle_deprecated_option('--auto-correct', '--autocorrect')
145
+ @options[:safe_autocorrect] = true
146
+ end
147
+ option(opts, '--safe-auto-correct') do
148
+ handle_deprecated_option('--safe-auto-correct', '--autocorrect')
149
+ @options[:safe_autocorrect] = true
150
+ end
113
151
 
114
- def add_auto_gen_options(opts)
115
- option(opts, '--auto-gen-config')
152
+ option(opts, '-A', '--autocorrect-all') { @options[:autocorrect] = true }
153
+ option(opts, '--auto-correct-all') do
154
+ handle_deprecated_option('--auto-correct-all', '--autocorrect-all')
155
+ @options[:autocorrect] = true
156
+ end
116
157
 
117
- option(opts, '--regenerate-todo') do
118
- @options.replace(ConfigRegeneration.new.options.merge(@options))
158
+ option(opts, '--disable-uncorrectable')
119
159
  end
160
+ end
161
+ # rubocop:enable Naming/InclusiveLanguage
120
162
 
121
- option(opts, '--exclude-limit COUNT') do
122
- @validator.validate_exclude_limit_option
123
- end
163
+ def add_config_generation_options(opts)
164
+ section(opts, 'Config Generation') do
165
+ option(opts, '--auto-gen-config')
124
166
 
125
- option(opts, '--disable-uncorrectable')
167
+ option(opts, '--regenerate-todo') do
168
+ @options.replace(ConfigRegeneration.new.options.merge(@options))
169
+ end
126
170
 
127
- option(opts, '--[no-]offense-counts')
128
- option(opts, '--[no-]auto-gen-only-exclude')
129
- option(opts, '--[no-]auto-gen-timestamp')
171
+ option(opts, '--exclude-limit COUNT') { @validator.validate_exclude_limit_option }
172
+ option(opts, '--no-exclude-limit')
130
173
 
131
- option(opts, '--init')
174
+ option(opts, '--[no-]offense-counts')
175
+ option(opts, '--[no-]auto-gen-only-exclude')
176
+ option(opts, '--[no-]auto-gen-timestamp')
177
+ option(opts, '--[no-]auto-gen-enforced-style')
178
+ end
132
179
  end
133
180
 
134
- def add_formatting_options(opts)
135
- option(opts, '-f', '--format FORMATTER') do |key|
136
- @options[:formatters] ||= []
137
- @options[:formatters] << [key]
138
- end
181
+ def add_cop_selection_csv_option(option, opts)
182
+ option(opts, "--#{option} [COP1,COP2,...]") do |list|
183
+ unless list
184
+ message = "--#{option} argument should be [COP1,COP2,...]."
139
185
 
140
- option(opts, '-o', '--out FILE') do |path|
141
- if @options[:formatters]
142
- @options[:formatters].last << path
143
- else
144
- @options[:output_path] = path
186
+ raise OptionArgumentError, message
145
187
  end
146
- end
147
188
 
148
- option(opts, '--display-only-failed')
189
+ cop_names = list.empty? ? [''] : list.split(',')
190
+ cop_names.unshift('Lint/Syntax') if option == 'only' && !cop_names.include?('Lint/Syntax')
191
+
192
+ @options[:"#{option}"] = cop_names
193
+ end
149
194
  end
150
195
 
151
196
  def add_severity_option(opts)
@@ -155,67 +200,86 @@ module RuboCop
155
200
  table) do |severity|
156
201
  @options[:fail_level] = severity
157
202
  end
158
- option(opts, '--display-only-fail-level-offenses')
159
203
  end
160
204
 
161
- def add_flags_with_optional_args(opts)
162
- option(opts, '--show-cops [COP1,COP2,...]') do |list|
163
- @options[:show_cops] = list.nil? ? [] : list.split(',')
205
+ def add_cache_options(opts)
206
+ section(opts, 'Caching') do
207
+ option(opts, '-C', '--cache FLAG')
208
+ option(opts, '--cache-root DIR') { @validator.validate_cache_enabled_for_cache_root }
164
209
  end
165
210
  end
166
211
 
167
- def add_cache_options(opts)
168
- option(opts, '-C', '--cache FLAG')
169
- option(opts, '--cache-root DIR') do
170
- @validator.validate_cache_enabled_for_cache_root
212
+ def add_lsp_option(opts)
213
+ section(opts, 'LSP Option') do
214
+ option(opts, '--lsp')
171
215
  end
172
216
  end
173
217
 
174
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
175
- def add_boolean_flags(opts)
176
- option(opts, '-F', '--fail-fast')
177
- option(opts, '-d', '--debug')
178
- option(opts, '-D', '--[no-]display-cop-names')
179
- option(opts, '-E', '--extra-details')
180
- option(opts, '-S', '--display-style-guide')
181
- option(opts, '-a', '--auto-correct') do
182
- @options[:safe_auto_correct] = true
183
- end
184
- option(opts, '--safe-auto-correct') do
185
- warn '--safe-auto-correct is deprecated; use --auto-correct'
186
- @options[:safe_auto_correct] = @options[:auto_correct] = true
218
+ def add_server_options(opts)
219
+ section(opts, 'Server Options') do
220
+ option(opts, '--[no-]server')
221
+ option(opts, '--restart-server')
222
+ option(opts, '--start-server')
223
+ option(opts, '--stop-server')
224
+ option(opts, '--server-status')
225
+ option(opts, '--no-detach')
187
226
  end
188
- option(opts, '-A', '--auto-correct-all') do
189
- @options[:auto_correct] = true
227
+ end
228
+
229
+ def add_additional_modes(opts)
230
+ section(opts, 'Additional Modes') do
231
+ option(opts, '-L', '--list-target-files')
232
+ option(opts, '--show-cops [COP1,COP2,...]') do |list|
233
+ @options[:show_cops] = list.nil? ? [] : list.split(',')
234
+ end
235
+ option(opts, '--show-docs-url [COP1,COP2,...]') do |list|
236
+ @options[:show_docs_url] = list.nil? ? [] : list.split(',')
237
+ end
190
238
  end
191
- option(opts, '--disable-pending-cops')
192
- option(opts, '--enable-pending-cops')
193
- option(opts, '--ignore-disable-comments')
239
+ end
194
240
 
195
- option(opts, '--safe')
241
+ def add_general_options(opts)
242
+ section(opts, 'General Options') do
243
+ option(opts, '--init')
244
+ option(opts, '-c', '--config FILE')
245
+ option(opts, '-d', '--debug')
246
+ option(opts, '--plugin FILE') { |f| plugin_feature(f) }
247
+ option(opts, '-r', '--require FILE') { |f| require_feature(f) }
248
+ option(opts, '--[no-]color')
249
+ option(opts, '-v', '--version')
250
+ option(opts, '-V', '--verbose-version')
251
+ end
252
+ end
196
253
 
197
- option(opts, '--[no-]color')
254
+ def add_profile_options(opts)
255
+ section(opts, 'Profiling Options') do
256
+ option(opts, '--profile') do
257
+ @options[:profile] = true
258
+ @options[:cache] = 'false' unless @options.key?(:cache)
259
+ end
260
+ option(opts, '--memory')
261
+ end
262
+ end
198
263
 
199
- option(opts, '-v', '--version')
200
- option(opts, '-V', '--verbose-version')
201
- option(opts, '-P', '--parallel')
264
+ def handle_deprecated_option(old_option, new_option)
265
+ warn rainbow.wrap("#{old_option} is deprecated; use #{new_option} instead.").yellow
266
+ @options[long_opt_symbol([new_option])] = @options.delete(long_opt_symbol([old_option]))
202
267
  end
203
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
204
268
 
205
- def add_aliases(opts)
206
- option(opts, '-l', '--lint') do
207
- @options[:only] ||= []
208
- @options[:only] << 'Lint'
209
- end
210
- option(opts, '-x', '--fix-layout') do
211
- @options[:only] ||= []
212
- @options[:only] << 'Layout'
213
- @options[:auto_correct] = true
269
+ def rainbow
270
+ @rainbow ||= begin
271
+ rainbow = Rainbow.new
272
+ rainbow.enabled = false if ARGV.include?('--no-color')
273
+ rainbow
214
274
  end
215
275
  end
216
276
 
217
- def add_list_options(opts)
218
- option(opts, '-L', '--list-target-files')
277
+ # Creates a section of options in order to separate them visually when
278
+ # using `--help`.
279
+ def section(opts, heading, &_block)
280
+ heading = rainbow.wrap(heading).bright
281
+ opts.separator("\n#{heading}:\n")
282
+ yield
219
283
  end
220
284
 
221
285
  # Sets a value in the @options hash, based on the given long option and its
@@ -230,11 +294,31 @@ module RuboCop
230
294
  end
231
295
 
232
296
  # Finds the option in `args` starting with -- and converts it to a symbol,
233
- # e.g. [..., '--auto-correct', ...] to :auto_correct.
297
+ # e.g. [..., '--autocorrect', ...] to :autocorrect.
234
298
  def long_opt_symbol(args)
235
299
  long_opt = args.find { |arg| arg.start_with?('--') }
236
- long_opt[2..-1].sub('[no-]', '').sub(/ .*/, '')
237
- .tr('-', '_').gsub(/[\[\]]/, '').to_sym
300
+ long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
301
+ end
302
+
303
+ def plugin_feature(file)
304
+ # If any features were added on the CLI from `--plugin`,
305
+ # add them to the config.
306
+ ConfigLoaderResolver.new.resolve_plugins(Config.new, file)
307
+ end
308
+
309
+ def require_feature(file)
310
+ if Plugin.plugin_capable?(file)
311
+ # NOTE: Compatibility for before plugins style.
312
+ warn Rainbow(<<~MESSAGE).yellow
313
+ #{file} gem supports plugin, use `--plugin` instead of `--require`.
314
+ MESSAGE
315
+ plugin_feature(file)
316
+ else
317
+ # If any features were added on the CLI from `--require`,
318
+ # add them to the config.
319
+ require file
320
+ ConfigLoader.add_loaded_features(file)
321
+ end
238
322
  end
239
323
  end
240
324
 
@@ -242,6 +326,9 @@ module RuboCop
242
326
  # @api private
243
327
  class OptionsValidator
244
328
  class << self
329
+ SYNTAX_DEPARTMENTS = %w[Syntax Lint/Syntax].freeze
330
+ private_constant :SYNTAX_DEPARTMENTS
331
+
245
332
  # Cop name validation must be done later than option parsing, so it's not
246
333
  # called from within Options.
247
334
  def validate_cop_list(names)
@@ -253,7 +340,7 @@ module RuboCop
253
340
  names.each do |name|
254
341
  next if cop_names.include?(name)
255
342
  next if departments.include?(name)
256
- next if %w[Syntax Lint/Syntax].include?(name)
343
+ next if SYNTAX_DEPARTMENTS.include?(name)
257
344
 
258
345
  raise IncorrectCopNameError, format_message_from(name, cop_names)
259
346
  end
@@ -280,35 +367,30 @@ module RuboCop
280
367
  end
281
368
 
282
369
  def validate_cop_options
283
- %i[only except].each do |opt|
284
- OptionsValidator.validate_cop_list(@options[opt])
285
- end
370
+ %i[only except].each { |opt| OptionsValidator.validate_cop_list(@options[opt]) }
286
371
  end
287
372
 
288
373
  # rubocop:disable Metrics/AbcSize
289
374
  def validate_compatibility # rubocop:disable Metrics/MethodLength
290
375
  if only_includes_redundant_disable?
291
- raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
292
- 'be used with --only.'
376
+ raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot be used with --only.'
293
377
  end
294
378
  raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
295
379
  unless boolean_or_empty_cache?
296
380
  raise OptionArgumentError, '-C/--cache argument must be true or false'
297
381
  end
298
382
 
299
- if display_only_fail_level_offenses_with_autocorrect?
300
- raise OptionArgumentError, '--autocorrect cannot be used with ' \
301
- '--display-only-fail-level-offenses'
302
- end
303
383
  validate_auto_gen_config
304
- validate_auto_correct
384
+ validate_autocorrect
305
385
  validate_display_only_failed
306
- validate_parallel
386
+ validate_display_only_failed_and_display_only_correctable
387
+ validate_display_only_correctable_and_autocorrect
388
+ validate_lsp_and_editor_mode
389
+ disable_parallel_when_invalid_option_combo
307
390
 
308
391
  return if incompatible_options.size <= 1
309
392
 
310
- raise OptionArgumentError, 'Incompatible cli options: ' \
311
- "#{incompatible_options.inspect}"
393
+ raise OptionArgumentError, "Incompatible cli options: #{incompatible_options.inspect}"
312
394
  end
313
395
  # rubocop:enable Metrics/AbcSize
314
396
 
@@ -320,8 +402,7 @@ module RuboCop
320
402
  %i[exclude_limit offense_counts auto_gen_timestamp
321
403
  auto_gen_only_exclude].each do |option|
322
404
  if @options.key?(option)
323
- raise OptionArgumentError,
324
- format(message, flag: option.to_s.tr('_', '-'))
405
+ raise OptionArgumentError, format(message, flag: option.to_s.tr('_', '-'))
325
406
  end
326
407
  end
327
408
  end
@@ -331,56 +412,75 @@ module RuboCop
331
412
  return if @options[:format] == 'junit'
332
413
 
333
414
  raise OptionArgumentError,
334
- format('--display-only-failed can only be used together with --format junit.')
415
+ '--display-only-failed can only be used together with --format junit.'
335
416
  end
336
417
 
337
- def validate_auto_correct
338
- return if @options.key?(:auto_correct)
339
- return unless @options.key?(:disable_uncorrectable)
418
+ def validate_display_only_correctable_and_autocorrect
419
+ return unless @options.key?(:autocorrect)
420
+ return if !@options.key?(:display_only_correctable) &&
421
+ !@options.key?(:display_only_safe_correctable)
340
422
 
341
423
  raise OptionArgumentError,
342
- format('--disable-uncorrectable can only be used together with --auto-correct.')
424
+ '--autocorrect cannot be used with --display-only-[safe-]correctable.'
343
425
  end
344
426
 
345
- def validate_parallel
346
- return unless @options.key?(:parallel)
427
+ def validate_display_only_failed_and_display_only_correctable
428
+ return unless @options.key?(:display_only_failed)
429
+ return if !@options.key?(:display_only_correctable) &&
430
+ !@options.key?(:display_only_safe_correctable)
431
+
432
+ raise OptionArgumentError,
433
+ '--display-only-failed cannot be used together with other display options.'
434
+ end
435
+
436
+ def validate_lsp_and_editor_mode
437
+ return if !@options.key?(:lsp) || !@options.key?(:editor_mode)
438
+
439
+ raise OptionArgumentError, 'Do not specify `--editor-mode` as it is redundant in `--lsp`.'
440
+ end
347
441
 
348
- if @options[:cache] == 'false'
349
- raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
350
- 'execution, so combining with --cache ' \
351
- 'false is not allowed.'
442
+ def validate_autocorrect
443
+ if @options.key?(:safe_autocorrect) && @options.key?(:autocorrect_all)
444
+ message = Rainbow(<<~MESSAGE).red
445
+ Error: Both safe and unsafe autocorrect options are specified, use only one.
446
+ MESSAGE
447
+ raise OptionArgumentError, message
352
448
  end
449
+ return if @options.key?(:autocorrect)
450
+ return unless @options.key?(:disable_uncorrectable)
353
451
 
354
- validate_parallel_with_combo_option
452
+ raise OptionArgumentError,
453
+ '--disable-uncorrectable can only be used together with --autocorrect.'
355
454
  end
356
455
 
357
- def validate_parallel_with_combo_option
358
- combos = {
359
- auto_gen_config: '-P/--parallel uses caching to speed up execution, ' \
360
- 'while --auto-gen-config needs a non-cached run, ' \
361
- 'so they cannot be combined.',
362
- fail_fast: '-P/--parallel cannot be combined with -F/--fail-fast.',
363
- auto_correct: '-P/--parallel cannot be combined with --auto-correct.'
364
- }
456
+ def disable_parallel_when_invalid_option_combo
457
+ return unless @options.key?(:parallel)
458
+
459
+ invalid_flags = invalid_arguments_for_parallel
365
460
 
366
- combos.each do |key, msg|
367
- raise OptionArgumentError, msg if @options.key?(key)
368
- end
461
+ return if invalid_flags.empty?
462
+
463
+ @options.delete(:parallel)
464
+
465
+ puts '-P/--parallel is being ignored because ' \
466
+ "it is not compatible with #{invalid_flags.join(', ')}."
369
467
  end
370
468
 
371
- def only_includes_redundant_disable?
372
- @options.key?(:only) &&
373
- (@options[:only] & %w[Lint/RedundantCopDisableDirective
374
- RedundantCopDisableDirective]).any?
469
+ def invalid_arguments_for_parallel
470
+ [('--auto-gen-config' if @options.key?(:auto_gen_config)),
471
+ ('-F/--fail-fast' if @options.key?(:fail_fast)),
472
+ ('--profile' if @options[:profile]),
473
+ ('--memory' if @options[:memory]),
474
+ ('--cache false' if @options > { cache: 'false' })].compact
375
475
  end
376
476
 
377
- def display_only_fail_level_offenses_with_autocorrect?
378
- @options[:display_only_fail_level_offenses] && @options[:autocorrect]
477
+ def only_includes_redundant_disable?
478
+ @options.key?(:only) &&
479
+ (@options[:only] & %w[Lint/RedundantCopDisableDirective RedundantCopDisableDirective]).any?
379
480
  end
380
481
 
381
482
  def except_syntax?
382
- @options.key?(:except) &&
383
- (@options[:except] & %w[Lint/Syntax Syntax]).any?
483
+ @options.key?(:except) && (@options[:except] & %w[Lint/Syntax Syntax]).any?
384
484
  end
385
485
 
386
486
  def boolean_or_empty_cache?
@@ -402,13 +502,13 @@ module RuboCop
402
502
  def validate_cache_enabled_for_cache_root
403
503
  return unless @options[:cache] == 'false'
404
504
 
405
- raise OptionArgumentError, '--cache-root can not be used with ' \
406
- '--cache false'
505
+ raise OptionArgumentError, '--cache-root cannot be used with --cache false'
407
506
  end
408
507
  end
409
508
 
410
509
  # This module contains help texts for command line options.
411
510
  # @api private
511
+ # rubocop:disable Metrics/ModuleLength
412
512
  module OptionsHelp
413
513
  MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
414
514
  FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
@@ -417,7 +517,8 @@ module RuboCop
417
517
  only: 'Run only the given cop(s).',
418
518
  only_guide_cops: ['Run only cops for rules that link to a',
419
519
  'style guide.'],
420
- except: 'Disable the given cop(s).',
520
+ except: 'Exclude the given cop(s).',
521
+ plugin: 'Load a RuboCop plugin.',
421
522
  require: 'Require Ruby file.',
422
523
  config: 'Specify configuration file.',
423
524
  auto_gen_config: ['Generate a configuration file acting as a',
@@ -431,49 +532,72 @@ module RuboCop
431
532
  auto_gen_timestamp:
432
533
  ['Include the date and time when the --auto-gen-config',
433
534
  'was run in the file it generates. Default is true.'],
535
+ auto_gen_enforced_style:
536
+ ['Add a setting to the TODO configuration file to enforce',
537
+ 'the style used, rather than a per-file exclusion',
538
+ 'if one style is used in all files for cop with',
539
+ 'EnforcedStyle as a configurable option',
540
+ 'when the --auto-gen-config was run',
541
+ 'in the file it generates. Default is true.'],
434
542
  auto_gen_only_exclude:
435
543
  ['Generate only Exclude parameters and not Max',
436
544
  'when running --auto-gen-config, except if the',
437
545
  'number of files with offenses is bigger than',
438
546
  'exclude-limit. Default is false.'],
439
- exclude_limit: ['Used together with --auto-gen-config to',
440
- 'set the limit for how many Exclude',
441
- "properties to generate. Default is #{MAX_EXCL}."],
442
- disable_uncorrectable: ['Used with --auto-correct to annotate any',
547
+ exclude_limit: ['Set the limit for how many files to explicitly exclude.',
548
+ 'If there are more files than the limit, the cop will',
549
+ "be disabled instead. Default is #{MAX_EXCL}."],
550
+ disable_uncorrectable: ['Used with --autocorrect to annotate any',
443
551
  'offenses that do not support autocorrect',
444
552
  'with `rubocop:todo` comments.'],
445
- force_exclusion: ['Force excluding files specified in the',
446
- 'configuration `Exclude` even if they are',
447
- 'explicitly passed as arguments.'],
553
+ no_exclude_limit: ['Do not set the limit for how many files to exclude.'],
554
+ force_exclusion: ['Any files excluded by `Exclude` in configuration',
555
+ 'files will be excluded, even if given explicitly',
556
+ 'as arguments.'],
448
557
  only_recognized_file_types: ['Inspect files given on the command line only if',
449
- 'they are listed in AllCops/Include parameters',
558
+ 'they are listed in `AllCops/Include` parameters',
450
559
  'of user configuration or default configuration.'],
451
- ignore_disable_comments: ['Run cops even when they are disabled locally',
452
- 'with a comment.'],
453
- ignore_parent_exclusion: ['Prevent from inheriting AllCops/Exclude from',
560
+ ignore_disable_comments: ['Report offenses even if they have been manually disabled',
561
+ 'with a `rubocop:disable` or `rubocop:todo` directive.'],
562
+ ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
454
563
  'parent folders.'],
564
+ ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
455
565
  force_default_config: ['Use default configuration even if configuration',
456
566
  'files are present in the directory tree.'],
457
567
  format: ['Choose an output formatter. This option',
458
568
  'can be specified multiple times to enable',
459
569
  'multiple formatters at the same time.',
460
- '[p]rogress is used by default',
461
- *FORMATTER_OPTION_LIST.map { |item| " #{item}" },
570
+ *FORMATTER_OPTION_LIST.map do |item|
571
+ " #{item}#{' (default)' if item == '[p]rogress'}"
572
+ end,
462
573
  ' custom formatter class name'],
463
574
  out: ['Write output to a file instead of STDOUT.',
464
575
  'This option applies to the previously',
465
576
  'specified --format, or the default format',
466
577
  'if no format is specified.'],
467
- fail_level: ['Minimum severity (A/R/C/W/E/F) for exit',
468
- 'with error code.'],
578
+ fail_level: ['Minimum severity for exit with error code.',
579
+ ' [A] autocorrect',
580
+ ' [I] info',
581
+ ' [R] refactor',
582
+ ' [C] convention',
583
+ ' [W] warning',
584
+ ' [E] error',
585
+ ' [F] fatal'],
586
+ display_time: 'Display elapsed time in seconds.',
469
587
  display_only_failed: ['Only output offense messages. Omit passing',
470
588
  'cops. Only valid for --format junit.'],
471
589
  display_only_fail_level_offenses:
472
590
  ['Only output offense messages at',
473
- 'the specified --fail-level or above'],
591
+ 'the specified --fail-level or above.'],
592
+ display_only_correctable: ['Only output correctable offense messages.'],
593
+ display_only_safe_correctable: ['Only output safe-correctable offense messages',
594
+ 'when combined with --display-only-correctable.'],
474
595
  show_cops: ['Shows the given cops, or all cops by',
475
596
  'default, and their configurations for the',
476
- 'current directory.'],
597
+ 'current directory.',
598
+ 'You can use `*` as a wildcard.'],
599
+ show_docs_url: ['Display url to documentation for the given',
600
+ 'cops, or base url by default.'],
477
601
  fail_fast: ['Inspect files in order of modification',
478
602
  'time and stop after the first file',
479
603
  'containing offenses.'],
@@ -493,19 +617,46 @@ module RuboCop
493
617
  extra_details: 'Display extra details in offense messages.',
494
618
  lint: 'Run only lint cops.',
495
619
  safe: 'Run only safe cops.',
620
+ stderr: ['Write all output to stderr except for the',
621
+ 'autocorrected source. This is especially useful',
622
+ 'when combined with --autocorrect and --stdin.'],
496
623
  list_target_files: 'List all files RuboCop will inspect.',
497
- auto_correct: 'Auto-correct offenses (only when it\'s safe).',
624
+ autocorrect: 'Autocorrect offenses (only when it\'s safe).',
625
+ auto_correct: '(same, deprecated)',
498
626
  safe_auto_correct: '(same, deprecated)',
499
- auto_correct_all: 'Auto-correct offenses (safe and unsafe)',
500
- fix_layout: 'Run only layout cops, with auto-correct on.',
627
+ autocorrect_all: 'Autocorrect offenses (safe and unsafe).',
628
+ auto_correct_all: '(same, deprecated)',
629
+ fix_layout: 'Run only layout cops, with autocorrect on.',
501
630
  color: 'Force color output on or off.',
502
631
  version: 'Display version.',
503
632
  verbose_version: 'Display verbose version.',
504
633
  parallel: ['Use available CPUs to execute inspection in',
505
- 'parallel.'],
634
+ 'parallel. Default is true.',
635
+ 'You can specify the number of parallel processes using',
636
+ 'the $PARALLEL_PROCESSOR_COUNT environment variable.'],
506
637
  stdin: ['Pipe source from STDIN, using FILE in offense',
507
638
  'reports. This is useful for editor integration.'],
508
- init: 'Generate a .rubocop.yml file in the current directory.'
639
+ editor_mode: ['Optimize real-time feedback in editors,',
640
+ 'adjusting behaviors for editing experience.'],
641
+ init: 'Generate a .rubocop.yml file in the current directory.',
642
+ server: ['If a server process has not been started yet, start',
643
+ 'the server process and execute inspection with server.',
644
+ 'Default is false.',
645
+ 'You can specify the server host and port with the',
646
+ '$RUBOCOP_SERVER_HOST and the $RUBOCOP_SERVER_PORT',
647
+ 'environment variables.'],
648
+ restart_server: 'Restart server process.',
649
+ start_server: 'Start server process.',
650
+ stop_server: 'Stop server process.',
651
+ server_status: 'Show server status.',
652
+ no_detach: 'Run the server process in the foreground.',
653
+ lsp: 'Start a language server listening on STDIN.',
654
+ raise_cop_error: ['Raise cop-related errors with cause and location.',
655
+ 'This is used to prevent cops from failing silently.',
656
+ 'Default is false.'],
657
+ profile: 'Profile rubocop.',
658
+ memory: 'Profile rubocop memory usage.'
509
659
  }.freeze
510
660
  end
661
+ # rubocop:enable Metrics/ModuleLength
511
662
  end