rubocop 1.29.1 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -3
  3. data/config/default.yml +164 -26
  4. data/config/obsoletion.yml +25 -1
  5. data/exe/rubocop +15 -7
  6. data/lib/rubocop/cache_config.rb +29 -0
  7. data/lib/rubocop/cli/command/{auto_genenerate_config.rb → auto_generate_config.rb} +20 -5
  8. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -1
  11. data/lib/rubocop/cli/command/suggest_extensions.rb +53 -15
  12. data/lib/rubocop/cli.rb +2 -0
  13. data/lib/rubocop/config.rb +6 -2
  14. data/lib/rubocop/config_finder.rb +68 -0
  15. data/lib/rubocop/config_loader.rb +15 -41
  16. data/lib/rubocop/config_loader_resolver.rb +2 -6
  17. data/lib/rubocop/config_obsoletion/changed_parameter.rb +5 -0
  18. data/lib/rubocop/config_obsoletion/parameter_rule.rb +4 -0
  19. data/lib/rubocop/config_obsoletion.rb +7 -2
  20. data/lib/rubocop/config_validator.rb +21 -4
  21. data/lib/rubocop/cop/autocorrect_logic.rb +4 -2
  22. data/lib/rubocop/cop/base.rb +6 -2
  23. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -1
  24. data/lib/rubocop/cop/bundler/gem_filename.rb +5 -5
  25. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
  26. data/lib/rubocop/cop/cop.rb +1 -1
  27. data/lib/rubocop/cop/corrector.rb +2 -2
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  29. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  30. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
  31. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  32. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +4 -2
  33. data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
  34. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  35. data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -1
  36. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +3 -3
  37. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
  38. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +59 -1
  39. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  40. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  41. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
  42. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
  43. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +2 -2
  44. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +92 -0
  45. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -1
  46. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
  47. data/lib/rubocop/cop/gemspec/require_mfa.rb +21 -21
  48. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -2
  49. data/lib/rubocop/cop/generator.rb +5 -1
  50. data/lib/rubocop/cop/internal_affairs/cop_description.rb +96 -0
  51. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
  52. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
  53. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +1 -1
  54. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -5
  55. data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +69 -0
  56. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
  57. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -1
  58. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
  59. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
  60. data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +62 -0
  61. data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +60 -0
  62. data/lib/rubocop/cop/internal_affairs.rb +4 -0
  63. data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
  64. data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
  65. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
  66. data/lib/rubocop/cop/layout/block_alignment.rb +17 -13
  67. data/lib/rubocop/cop/layout/block_end_newline.rb +36 -6
  68. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  69. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
  70. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  71. data/lib/rubocop/cop/layout/condition_position.rb +1 -1
  72. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  73. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  74. data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
  75. data/lib/rubocop/cop/layout/empty_comment.rb +2 -2
  76. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
  77. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  78. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
  79. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  80. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +5 -2
  81. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
  82. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +25 -4
  83. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
  84. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +7 -5
  85. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +10 -10
  86. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
  87. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
  88. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
  89. data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
  90. data/lib/rubocop/cop/layout/end_of_line.rb +5 -5
  91. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  92. data/lib/rubocop/cop/layout/first_argument_indentation.rb +34 -29
  93. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +21 -14
  94. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  95. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +52 -13
  96. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  97. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  98. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -1
  99. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  100. data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
  101. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
  102. data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
  103. data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
  104. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  105. data/lib/rubocop/cop/layout/indentation_width.rb +13 -6
  106. data/lib/rubocop/cop/layout/initial_indentation.rb +2 -2
  107. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  108. data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
  109. data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +112 -0
  110. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +130 -0
  111. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +1 -1
  112. data/lib/rubocop/cop/layout/line_length.rb +7 -2
  113. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
  114. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -1
  115. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +2 -2
  116. data/lib/rubocop/cop/layout/multiline_block_layout.rb +4 -2
  117. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
  118. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  119. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -2
  120. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
  121. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +3 -3
  122. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  123. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +45 -0
  124. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +3 -3
  125. data/lib/rubocop/cop/layout/redundant_line_break.rb +2 -2
  126. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
  127. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  128. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  129. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +2 -2
  130. data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
  131. data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
  132. data/lib/rubocop/cop/layout/space_before_block_braces.rb +5 -3
  133. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  134. data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
  135. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  136. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +10 -10
  137. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +33 -15
  138. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
  139. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +8 -8
  140. data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
  141. data/lib/rubocop/cop/legacy/corrections_proxy.rb +1 -1
  142. data/lib/rubocop/cop/legacy/corrector.rb +1 -1
  143. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
  144. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +27 -7
  145. data/lib/rubocop/cop/lint/ambiguous_operator.rb +1 -1
  146. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
  147. data/lib/rubocop/cop/lint/ambiguous_range.rb +3 -3
  148. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  149. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  150. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  151. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  152. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  153. data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +51 -0
  154. data/lib/rubocop/cop/lint/debugger.rb +27 -17
  155. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +15 -9
  156. data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
  157. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
  158. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
  159. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  160. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
  161. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  162. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
  163. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
  164. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -1
  165. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
  166. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  167. data/lib/rubocop/cop/lint/else_layout.rb +3 -3
  168. data/lib/rubocop/cop/lint/empty_block.rb +2 -2
  169. data/lib/rubocop/cop/lint/empty_class.rb +1 -1
  170. data/lib/rubocop/cop/lint/empty_conditional_body.rb +96 -2
  171. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  172. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  173. data/lib/rubocop/cop/lint/empty_file.rb +1 -1
  174. data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
  175. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  176. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  177. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  178. data/lib/rubocop/cop/lint/erb_new_arguments.rb +9 -9
  179. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  180. data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
  181. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  182. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  183. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  184. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +1 -1
  185. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
  186. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  187. data/lib/rubocop/cop/lint/interpolation_check.rb +2 -2
  188. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +2 -2
  189. data/lib/rubocop/cop/lint/literal_as_condition.rb +6 -1
  190. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +5 -1
  191. data/lib/rubocop/cop/lint/loop.rb +1 -1
  192. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  193. data/lib/rubocop/cop/lint/missing_super.rb +1 -1
  194. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  195. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  196. data/lib/rubocop/cop/lint/next_without_accumulator.rb +25 -6
  197. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +157 -0
  198. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +12 -0
  199. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  200. data/lib/rubocop/cop/lint/number_conversion.rb +32 -10
  201. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
  202. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  203. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
  204. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
  205. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  206. data/lib/rubocop/cop/lint/raise_exception.rb +1 -1
  207. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  208. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +6 -6
  209. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +2 -2
  210. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -1
  211. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +16 -3
  212. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
  213. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  214. data/lib/rubocop/cop/lint/redundant_with_index.rb +14 -11
  215. data/lib/rubocop/cop/lint/redundant_with_object.rb +13 -12
  216. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  217. data/lib/rubocop/cop/lint/regexp_as_condition.rb +3 -3
  218. data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
  219. data/lib/rubocop/cop/lint/require_range_parentheses.rb +57 -0
  220. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  221. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -1
  222. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +38 -1
  223. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
  224. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  225. data/lib/rubocop/cop/lint/script_permission.rb +1 -1
  226. data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
  227. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
  228. data/lib/rubocop/cop/lint/shadowed_exception.rb +16 -1
  229. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +25 -4
  230. data/lib/rubocop/cop/lint/struct_new_override.rb +3 -3
  231. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  232. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  233. data/lib/rubocop/cop/lint/syntax.rb +1 -1
  234. data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
  235. data/lib/rubocop/cop/lint/to_json.rb +1 -1
  236. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  237. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +2 -2
  238. data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
  239. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  240. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
  241. data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
  242. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  243. data/lib/rubocop/cop/lint/unreachable_loop.rb +9 -3
  244. data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
  245. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
  246. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  247. data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
  248. data/lib/rubocop/cop/lint/useless_access_modifier.rb +9 -7
  249. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
  250. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +44 -0
  251. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  252. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
  253. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
  254. data/lib/rubocop/cop/lint/useless_times.rb +1 -1
  255. data/lib/rubocop/cop/lint/void.rb +3 -1
  256. data/lib/rubocop/cop/metrics/abc_size.rb +4 -2
  257. data/lib/rubocop/cop/metrics/block_length.rb +7 -7
  258. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  259. data/lib/rubocop/cop/metrics/class_length.rb +1 -1
  260. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
  261. data/lib/rubocop/cop/metrics/method_length.rb +9 -8
  262. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  263. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
  264. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  265. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
  266. data/lib/rubocop/cop/mixin/allowed_methods.rb +20 -1
  267. data/lib/rubocop/cop/mixin/allowed_pattern.rb +17 -1
  268. data/lib/rubocop/cop/mixin/check_line_breakable.rb +5 -1
  269. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  270. data/lib/rubocop/cop/mixin/def_node.rb +2 -7
  271. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -1
  272. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +82 -2
  273. data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -6
  274. data/lib/rubocop/cop/mixin/method_complexity.rb +8 -13
  275. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +34 -12
  276. data/lib/rubocop/cop/mixin/percent_array.rb +60 -1
  277. data/lib/rubocop/cop/mixin/range_help.rb +10 -7
  278. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  279. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  280. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  281. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  282. data/lib/rubocop/cop/naming/block_forwarding.rb +2 -2
  283. data/lib/rubocop/cop/naming/block_parameter_name.rb +2 -2
  284. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  285. data/lib/rubocop/cop/naming/constant_name.rb +3 -3
  286. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  287. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  288. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  289. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  290. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  291. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  292. data/lib/rubocop/cop/naming/predicate_name.rb +30 -1
  293. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  294. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  295. data/lib/rubocop/cop/naming/variable_number.rb +18 -18
  296. data/lib/rubocop/cop/security/compound_hash.rb +1 -1
  297. data/lib/rubocop/cop/security/eval.rb +1 -1
  298. data/lib/rubocop/cop/security/json_load.rb +1 -1
  299. data/lib/rubocop/cop/security/marshal_load.rb +1 -1
  300. data/lib/rubocop/cop/security/open.rb +1 -1
  301. data/lib/rubocop/cop/security/yaml_load.rb +1 -1
  302. data/lib/rubocop/cop/style/access_modifier_declarations.rb +77 -1
  303. data/lib/rubocop/cop/style/accessor_grouping.rb +4 -4
  304. data/lib/rubocop/cop/style/alias.rb +1 -1
  305. data/lib/rubocop/cop/style/and_or.rb +11 -11
  306. data/lib/rubocop/cop/style/arguments_forwarding.rb +3 -3
  307. data/lib/rubocop/cop/style/array_coercion.rb +1 -1
  308. data/lib/rubocop/cop/style/array_join.rb +1 -1
  309. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  310. data/lib/rubocop/cop/style/attr.rb +1 -1
  311. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
  312. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  313. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
  314. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  315. data/lib/rubocop/cop/style/block_delimiters.rb +30 -9
  316. data/lib/rubocop/cop/style/case_equality.rb +41 -11
  317. data/lib/rubocop/cop/style/case_like_if.rb +1 -1
  318. data/lib/rubocop/cop/style/class_and_module_children.rb +5 -5
  319. data/lib/rubocop/cop/style/class_check.rb +1 -1
  320. data/lib/rubocop/cop/style/class_equality_comparison.rb +51 -4
  321. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  322. data/lib/rubocop/cop/style/class_methods_definitions.rb +3 -2
  323. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  324. data/lib/rubocop/cop/style/collection_compact.rb +1 -1
  325. data/lib/rubocop/cop/style/collection_methods.rb +3 -1
  326. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  327. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
  328. data/lib/rubocop/cop/style/combinable_loops.rb +4 -2
  329. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  330. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  331. data/lib/rubocop/cop/style/commented_keyword.rb +4 -4
  332. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -1
  333. data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
  334. data/lib/rubocop/cop/style/date_time.rb +1 -1
  335. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
  336. data/lib/rubocop/cop/style/dir.rb +4 -1
  337. data/lib/rubocop/cop/style/documentation.rb +1 -1
  338. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  339. data/lib/rubocop/cop/style/double_negation.rb +3 -1
  340. data/lib/rubocop/cop/style/each_for_simple_loop.rb +42 -7
  341. data/lib/rubocop/cop/style/each_with_object.rb +40 -9
  342. data/lib/rubocop/cop/style/empty_block_parameter.rb +2 -2
  343. data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
  344. data/lib/rubocop/cop/style/empty_else.rb +40 -3
  345. data/lib/rubocop/cop/style/empty_heredoc.rb +73 -0
  346. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +2 -2
  347. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  348. data/lib/rubocop/cop/style/empty_method.rb +17 -2
  349. data/lib/rubocop/cop/style/encoding.rb +2 -2
  350. data/lib/rubocop/cop/style/end_block.rb +1 -1
  351. data/lib/rubocop/cop/style/endless_method.rb +1 -1
  352. data/lib/rubocop/cop/style/env_home.rb +1 -1
  353. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  354. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  355. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
  356. data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
  357. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  358. data/lib/rubocop/cop/style/fetch_env_var.rb +37 -224
  359. data/lib/rubocop/cop/style/float_division.rb +1 -1
  360. data/lib/rubocop/cop/style/for.rb +3 -1
  361. data/lib/rubocop/cop/style/format_string.rb +1 -1
  362. data/lib/rubocop/cop/style/format_string_token.rb +73 -23
  363. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +6 -3
  364. data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
  365. data/lib/rubocop/cop/style/global_vars.rb +1 -1
  366. data/lib/rubocop/cop/style/guard_clause.rb +35 -22
  367. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +1 -1
  368. data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
  369. data/lib/rubocop/cop/style/hash_each_methods.rb +4 -2
  370. data/lib/rubocop/cop/style/hash_except.rb +85 -9
  371. data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
  372. data/lib/rubocop/cop/style/hash_syntax.rb +20 -3
  373. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
  374. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
  375. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  376. data/lib/rubocop/cop/style/if_unless_modifier.rb +1 -1
  377. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -2
  378. data/lib/rubocop/cop/style/implicit_runtime_error.rb +3 -3
  379. data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
  380. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  381. data/lib/rubocop/cop/style/inverse_methods.rb +10 -8
  382. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  383. data/lib/rubocop/cop/style/keyword_parameters_order.rb +2 -2
  384. data/lib/rubocop/cop/style/lambda.rb +1 -1
  385. data/lib/rubocop/cop/style/lambda_call.rb +1 -1
  386. data/lib/rubocop/cop/style/line_end_concatenation.rb +2 -2
  387. data/lib/rubocop/cop/style/magic_comment_format.rb +307 -0
  388. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
  389. data/lib/rubocop/cop/style/map_to_hash.rb +3 -3
  390. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +4 -4
  391. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +5 -1
  392. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +8 -8
  393. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +20 -3
  394. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +5 -2
  395. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  396. data/lib/rubocop/cop/style/min_max.rb +1 -1
  397. data/lib/rubocop/cop/style/missing_else.rb +24 -24
  398. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  399. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  400. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  401. data/lib/rubocop/cop/style/module_function.rb +3 -3
  402. data/lib/rubocop/cop/style/multiline_block_chain.rb +4 -2
  403. data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -2
  404. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  405. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +3 -5
  406. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  407. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  408. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +3 -3
  409. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -4
  410. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  411. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  412. data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
  413. data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
  414. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  415. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -2
  416. data/lib/rubocop/cop/style/nested_ternary_operator.rb +20 -8
  417. data/lib/rubocop/cop/style/next.rb +3 -5
  418. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  419. data/lib/rubocop/cop/style/nil_lambda.rb +3 -3
  420. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  421. data/lib/rubocop/cop/style/not.rb +2 -2
  422. data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
  423. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +1 -1
  424. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  425. data/lib/rubocop/cop/style/numeric_literals.rb +16 -1
  426. data/lib/rubocop/cop/style/numeric_predicate.rb +53 -11
  427. data/lib/rubocop/cop/style/object_then.rb +3 -1
  428. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
  429. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  430. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  431. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  432. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +1 -1
  433. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  434. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
  435. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  436. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  437. data/lib/rubocop/cop/style/perl_backrefs.rb +23 -2
  438. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  439. data/lib/rubocop/cop/style/proc.rb +5 -2
  440. data/lib/rubocop/cop/style/raise_args.rb +1 -1
  441. data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
  442. data/lib/rubocop/cop/style/redundant_argument.rb +2 -2
  443. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  444. data/lib/rubocop/cop/style/redundant_begin.rb +19 -6
  445. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -1
  446. data/lib/rubocop/cop/style/redundant_condition.rb +28 -9
  447. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  448. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  449. data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -2
  450. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  451. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  452. data/lib/rubocop/cop/style/redundant_interpolation.rb +22 -1
  453. data/lib/rubocop/cop/style/redundant_parentheses.rb +22 -24
  454. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  455. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
  456. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  457. data/lib/rubocop/cop/style/redundant_return.rb +2 -2
  458. data/lib/rubocop/cop/style/redundant_self.rb +3 -1
  459. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  460. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
  461. data/lib/rubocop/cop/style/redundant_sort.rb +22 -7
  462. data/lib/rubocop/cop/style/redundant_sort_by.rb +25 -9
  463. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  464. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  465. data/lib/rubocop/cop/style/rescue_standard_error.rb +13 -13
  466. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  467. data/lib/rubocop/cop/style/safe_navigation.rb +8 -3
  468. data/lib/rubocop/cop/style/sample.rb +1 -1
  469. data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
  470. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  471. data/lib/rubocop/cop/style/semicolon.rb +28 -4
  472. data/lib/rubocop/cop/style/send.rb +1 -1
  473. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  474. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
  475. data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
  476. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
  477. data/lib/rubocop/cop/style/sole_nested_conditional.rb +42 -14
  478. data/lib/rubocop/cop/style/static_class.rb +1 -1
  479. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  480. data/lib/rubocop/cop/style/string_concatenation.rb +6 -7
  481. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  482. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
  483. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  484. data/lib/rubocop/cop/style/strip.rb +1 -1
  485. data/lib/rubocop/cop/style/struct_inheritance.rb +4 -4
  486. data/lib/rubocop/cop/style/swap_values.rb +2 -2
  487. data/lib/rubocop/cop/style/symbol_array.rb +9 -6
  488. data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
  489. data/lib/rubocop/cop/style/symbol_proc.rb +48 -14
  490. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -14
  491. data/lib/rubocop/cop/style/top_level_method_definition.rb +3 -1
  492. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -1
  493. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
  494. data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
  495. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +1 -1
  496. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
  497. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -2
  498. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
  499. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  500. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
  501. data/lib/rubocop/cop/style/trivial_accessors.rb +4 -1
  502. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  503. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
  504. data/lib/rubocop/cop/style/unpack_first.rb +5 -2
  505. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  506. data/lib/rubocop/cop/style/when_then.rb +1 -1
  507. data/lib/rubocop/cop/style/word_array.rb +4 -5
  508. data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
  509. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  510. data/lib/rubocop/cop/team.rb +2 -2
  511. data/lib/rubocop/cop/util.rb +3 -3
  512. data/lib/rubocop/cops_documentation_generator.rb +18 -1
  513. data/lib/rubocop/ext/range.rb +15 -0
  514. data/lib/rubocop/feature_loader.rb +94 -0
  515. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  516. data/lib/rubocop/formatter/disabled_config_formatter.rb +11 -8
  517. data/lib/rubocop/formatter/formatter_set.rb +20 -19
  518. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +15 -2
  519. data/lib/rubocop/formatter/html_formatter.rb +3 -4
  520. data/lib/rubocop/formatter/markdown_formatter.rb +3 -1
  521. data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
  522. data/lib/rubocop/formatter/simple_text_formatter.rb +9 -8
  523. data/lib/rubocop/formatter/tap_formatter.rb +1 -1
  524. data/lib/rubocop/formatter.rb +31 -0
  525. data/lib/rubocop/magic_comment.rb +27 -2
  526. data/lib/rubocop/options.rb +81 -39
  527. data/lib/rubocop/rake_task.rb +34 -9
  528. data/lib/rubocop/result_cache.rb +24 -21
  529. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  530. data/lib/rubocop/rspec/expect_offense.rb +3 -3
  531. data/lib/rubocop/rspec/shared_contexts.rb +29 -9
  532. data/lib/rubocop/rspec/support.rb +14 -0
  533. data/lib/rubocop/runner.rb +13 -5
  534. data/lib/rubocop/server/cache.rb +144 -0
  535. data/lib/rubocop/server/cli.rb +121 -0
  536. data/lib/rubocop/server/client_command/base.rb +44 -0
  537. data/lib/rubocop/server/client_command/exec.rb +59 -0
  538. data/lib/rubocop/server/client_command/restart.rb +25 -0
  539. data/lib/rubocop/server/client_command/start.rb +43 -0
  540. data/lib/rubocop/server/client_command/status.rb +28 -0
  541. data/lib/rubocop/server/client_command/stop.rb +31 -0
  542. data/lib/rubocop/server/client_command.rb +26 -0
  543. data/lib/rubocop/server/core.rb +79 -0
  544. data/lib/rubocop/server/errors.rb +23 -0
  545. data/lib/rubocop/server/helper.rb +34 -0
  546. data/lib/rubocop/server/server_command/base.rb +50 -0
  547. data/lib/rubocop/server/server_command/exec.rb +34 -0
  548. data/lib/rubocop/server/server_command/stop.rb +24 -0
  549. data/lib/rubocop/server/server_command.rb +21 -0
  550. data/lib/rubocop/server/socket_reader.rb +65 -0
  551. data/lib/rubocop/server.rb +53 -0
  552. data/lib/rubocop/target_ruby.rb +7 -5
  553. data/lib/rubocop/version.rb +17 -9
  554. data/lib/rubocop.rb +18 -30
  555. metadata +60 -10
  556. data/lib/rubocop/cop/gemspec/date_assignment.rb +0 -49
  557. data/lib/rubocop/cop/mixin/ignored_methods.rb +0 -52
@@ -63,6 +63,7 @@ module RuboCop
63
63
 
64
64
  add_check_options(opts)
65
65
  add_cache_options(opts)
66
+ add_server_options(opts)
66
67
  add_output_options(opts)
67
68
  add_autocorrection_options(opts)
68
69
  add_config_generation_options(opts)
@@ -80,7 +81,7 @@ module RuboCop
80
81
  option(opts, '-x', '--fix-layout') do
81
82
  @options[:only] ||= []
82
83
  @options[:only] << 'Layout'
83
- @options[:auto_correct] = true
84
+ @options[:autocorrect] = true
84
85
  end
85
86
  option(opts, '--safe')
86
87
  add_cop_selection_csv_option('except', opts)
@@ -93,6 +94,7 @@ module RuboCop
93
94
  option(opts, '--force-exclusion')
94
95
  option(opts, '--only-recognized-file-types')
95
96
  option(opts, '--ignore-parent-exclusion')
97
+ option(opts, '--ignore-unrecognized-cops')
96
98
  option(opts, '--force-default-config')
97
99
  option(opts, '-s', '--stdin FILE')
98
100
  option(opts, '-P', '--[no-]parallel')
@@ -128,17 +130,35 @@ module RuboCop
128
130
  end
129
131
  end
130
132
 
131
- def add_autocorrection_options(opts)
132
- section(opts, 'Auto-correction') do
133
- option(opts, '-a', '--auto-correct') { @options[:safe_auto_correct] = true }
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
134
147
  option(opts, '--safe-auto-correct') do
135
- warn '--safe-auto-correct is deprecated; use --auto-correct'
136
- @options[:safe_auto_correct] = @options[:auto_correct] = true
148
+ handle_deprecated_option('--safe-auto-correct', '--autocorrect')
149
+ @options[:safe_autocorrect] = true
150
+ end
151
+
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
137
156
  end
138
- option(opts, '-A', '--auto-correct-all') { @options[:auto_correct] = true }
157
+
139
158
  option(opts, '--disable-uncorrectable')
140
159
  end
141
160
  end
161
+ # rubocop:enable Naming/InclusiveLanguage
142
162
 
143
163
  def add_config_generation_options(opts)
144
164
  section(opts, 'Config Generation') do
@@ -184,6 +204,16 @@ module RuboCop
184
204
  end
185
205
  end
186
206
 
207
+ def add_server_options(opts)
208
+ section(opts, 'Server Options') do
209
+ option(opts, '--[no-]server')
210
+ option(opts, '--restart-server')
211
+ option(opts, '--start-server')
212
+ option(opts, '--stop-server')
213
+ option(opts, '--server-status')
214
+ end
215
+ end
216
+
187
217
  def add_additional_modes(opts)
188
218
  section(opts, 'Additional Modes') do
189
219
  option(opts, '-L', '--list-target-files')
@@ -208,6 +238,11 @@ module RuboCop
208
238
  end
209
239
  end
210
240
 
241
+ def handle_deprecated_option(old_option, new_option)
242
+ warn rainbow.wrap("#{old_option} is deprecated; use #{new_option} instead.").yellow
243
+ @options[long_opt_symbol([new_option])] = @options.delete(long_opt_symbol([old_option]))
244
+ end
245
+
211
246
  def rainbow
212
247
  @rainbow ||= begin
213
248
  rainbow = Rainbow.new
@@ -236,7 +271,7 @@ module RuboCop
236
271
  end
237
272
 
238
273
  # Finds the option in `args` starting with -- and converts it to a symbol,
239
- # e.g. [..., '--auto-correct', ...] to :auto_correct.
274
+ # e.g. [..., '--autocorrect', ...] to :autocorrect.
240
275
  def long_opt_symbol(args)
241
276
  long_opt = args.find { |arg| arg.start_with?('--') }
242
277
  long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
@@ -309,15 +344,14 @@ module RuboCop
309
344
  end
310
345
 
311
346
  if display_only_fail_level_offenses_with_autocorrect?
312
- raise OptionArgumentError, '--auto-correct cannot be used with ' \
313
- '--display-only-fail-level-offenses'
347
+ raise OptionArgumentError, '--autocorrect cannot be used with ' \
348
+ '--display-only-fail-level-offenses.'
314
349
  end
315
-
316
350
  validate_auto_gen_config
317
- validate_auto_correct
351
+ validate_autocorrect
318
352
  validate_display_only_failed
319
353
  validate_display_only_failed_and_display_only_correctable
320
- validate_display_only_correctable_and_auto_correct
354
+ validate_display_only_correctable_and_autocorrect
321
355
  disable_parallel_when_invalid_option_combo
322
356
 
323
357
  return if incompatible_options.size <= 1
@@ -347,13 +381,13 @@ module RuboCop
347
381
  format('--display-only-failed can only be used together with --format junit.')
348
382
  end
349
383
 
350
- def validate_display_only_correctable_and_auto_correct
351
- return if !@options.key?(:safe_auto_correct) && !@options.key?(:auto_correct)
384
+ def validate_display_only_correctable_and_autocorrect
385
+ return unless @options.key?(:autocorrect)
352
386
  return if !@options.key?(:display_only_correctable) &&
353
387
  !@options.key?(:display_only_safe_correctable)
354
388
 
355
389
  raise OptionArgumentError,
356
- '--auto-correct cannot be used with --display-only-[safe-]correctable.'
390
+ '--autocorrect cannot be used with --display-only-[safe-]correctable.'
357
391
  end
358
392
 
359
393
  def validate_display_only_failed_and_display_only_correctable
@@ -365,35 +399,31 @@ module RuboCop
365
399
  format('--display-only-failed cannot be used together with other display options.')
366
400
  end
367
401
 
368
- def validate_auto_correct
369
- return if @options.key?(:auto_correct)
402
+ def validate_autocorrect
403
+ return if @options.key?(:autocorrect)
370
404
  return unless @options.key?(:disable_uncorrectable)
371
405
 
372
406
  raise OptionArgumentError,
373
- format('--disable-uncorrectable can only be used together with --auto-correct.')
407
+ format('--disable-uncorrectable can only be used together with --autocorrect.')
374
408
  end
375
409
 
376
410
  def disable_parallel_when_invalid_option_combo
377
411
  return unless @options.key?(:parallel)
378
412
 
379
- invalid_options = [
380
- { name: :auto_gen_config, value: true, flag: '--auto-gen-config' },
381
- { name: :fail_fast, value: true, flag: '-F/--fail-fast.' },
382
- { name: :auto_correct, value: true, flag: '--auto-correct.' },
383
- { name: :cache, value: 'false', flag: '--cache false' }
384
- ]
385
-
386
- invalid_flags = invalid_options.each_with_object([]) do |option, flags|
387
- # `>` rather than `>=` because `@options` will also contain `parallel: true`
388
- flags << option[:flag] if @options > { option[:name] => option[:value] }
389
- end
413
+ invalid_flags = invalid_arguments_for_parallel
390
414
 
391
415
  return if invalid_flags.empty?
392
416
 
393
417
  @options.delete(:parallel)
394
418
 
395
419
  puts '-P/--parallel is being ignored because ' \
396
- "it is not compatible with #{invalid_flags.join(', ')}"
420
+ "it is not compatible with #{invalid_flags.join(', ')}."
421
+ end
422
+
423
+ def invalid_arguments_for_parallel
424
+ [('--auto-gen-config' if @options.key?(:auto_gen_config)),
425
+ ('-F/--fail-fast' if @options.key?(:fail_fast)),
426
+ ('--cache false' if @options > { cache: 'false' })].compact
397
427
  end
398
428
 
399
429
  def only_includes_redundant_disable?
@@ -402,8 +432,7 @@ module RuboCop
402
432
  end
403
433
 
404
434
  def display_only_fail_level_offenses_with_autocorrect?
405
- @options[:display_only_fail_level_offenses] &&
406
- (@options.key?(:auto_correct) || @options.key?(:safe_auto_correct))
435
+ @options.key?(:display_only_fail_level_offenses) && @options.key?(:autocorrect)
407
436
  end
408
437
 
409
438
  def except_syntax?
@@ -465,7 +494,7 @@ module RuboCop
465
494
  exclude_limit: ['Set the limit for how many files to explicitly exclude.',
466
495
  'If there are more files than the limit, the cop will',
467
496
  "be disabled instead. Default is #{MAX_EXCL}."],
468
- disable_uncorrectable: ['Used with --auto-correct to annotate any',
497
+ disable_uncorrectable: ['Used with --autocorrect to annotate any',
469
498
  'offenses that do not support autocorrect',
470
499
  'with `rubocop:todo` comments.'],
471
500
  force_exclusion: ['Any files excluded by `Exclude` in configuration',
@@ -478,6 +507,7 @@ module RuboCop
478
507
  'by a `rubocop:disable` directive.'],
479
508
  ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
480
509
  'parent folders.'],
510
+ ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
481
511
  force_default_config: ['Use default configuration even if configuration',
482
512
  'files are present in the directory tree.'],
483
513
  format: ['Choose an output formatter. This option',
@@ -534,12 +564,14 @@ module RuboCop
534
564
  safe: 'Run only safe cops.',
535
565
  stderr: ['Write all output to stderr except for the',
536
566
  'autocorrected source. This is especially useful',
537
- 'when combined with --auto-correct and --stdin.'],
567
+ 'when combined with --autocorrect and --stdin.'],
538
568
  list_target_files: 'List all files RuboCop will inspect.',
539
- auto_correct: 'Auto-correct offenses (only when it\'s safe).',
569
+ autocorrect: 'Autocorrect offenses (only when it\'s safe).',
570
+ auto_correct: '(same, deprecated)',
540
571
  safe_auto_correct: '(same, deprecated)',
541
- auto_correct_all: 'Auto-correct offenses (safe and unsafe)',
542
- fix_layout: 'Run only layout cops, with auto-correct on.',
572
+ autocorrect_all: 'Autocorrect offenses (safe and unsafe).',
573
+ auto_correct_all: '(same, deprecated)',
574
+ fix_layout: 'Run only layout cops, with autocorrect on.',
543
575
  color: 'Force color output on or off.',
544
576
  version: 'Display version.',
545
577
  verbose_version: 'Display verbose version.',
@@ -547,7 +579,17 @@ module RuboCop
547
579
  'parallel. Default is true.'],
548
580
  stdin: ['Pipe source from STDIN, using FILE in offense',
549
581
  'reports. This is useful for editor integration.'],
550
- init: 'Generate a .rubocop.yml file in the current directory.'
582
+ init: 'Generate a .rubocop.yml file in the current directory.',
583
+ server: ['If a server process has not been started yet, start',
584
+ 'the server process and execute inspection with server.',
585
+ 'Default is false.',
586
+ 'You can specify the server host and port with the',
587
+ '$RUBOCOP_SERVER_HOST and the $RUBOCOP_SERVER_PORT',
588
+ 'environment variables.'],
589
+ restart_server: 'Restart server process.',
590
+ start_server: 'Start server process.',
591
+ stop_server: 'Stop server process.',
592
+ server_status: 'Show server status.'
551
593
  }.freeze
552
594
  end
553
595
  end
@@ -32,6 +32,15 @@ module RuboCop
32
32
 
33
33
  private
34
34
 
35
+ def perform(option)
36
+ options = full_options.unshift(option)
37
+ # `parallel` will automatically be removed from the options internally.
38
+ # This is a nice to have to suppress the warning message
39
+ # about --parallel and --autocorrect not being compatible.
40
+ options.delete('--parallel')
41
+ run_cli(verbose, options)
42
+ end
43
+
35
44
  def run_cli(verbose, options)
36
45
  # We lazy-load RuboCop so that the task doesn't dramatically impact the
37
46
  # load time of your Rakefile.
@@ -60,19 +69,35 @@ module RuboCop
60
69
  @formatters = []
61
70
  end
62
71
 
63
- def setup_subtasks(name, *args, &task_block)
72
+ def setup_subtasks(name, *args, &task_block) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
64
73
  namespace(name) do
65
- desc 'Auto-correct RuboCop offenses'
74
+ # rubocop:todo Naming/InclusiveLanguage
75
+ task(:auto_correct, *args) do
76
+ require 'rainbow'
77
+ warn Rainbow(
78
+ 'rubocop:auto_correct task is deprecated; ' \
79
+ 'use rubocop:autocorrect task or rubocop:autocorrect_all task instead.'
80
+ ).yellow
81
+ RakeFileUtils.verbose(verbose) do
82
+ yield(*[self, task_args].slice(0, task_block.arity)) if task_block
83
+ perform('--autocorrect')
84
+ end
85
+ end
86
+ # rubocop:enable Naming/InclusiveLanguage
87
+
88
+ desc "Autocorrect RuboCop offenses (only when it's safe)."
89
+ task(:autocorrect, *args) do |_, task_args|
90
+ RakeFileUtils.verbose(verbose) do
91
+ yield(*[self, task_args].slice(0, task_block.arity)) if task_block
92
+ perform('--autocorrect')
93
+ end
94
+ end
66
95
 
67
- task(:auto_correct, *args) do |_, task_args|
96
+ desc 'Autocorrect RuboCop offenses (safe and unsafe).'
97
+ task(:autocorrect_all, *args) do |_, task_args|
68
98
  RakeFileUtils.verbose(verbose) do
69
99
  yield(*[self, task_args].slice(0, task_block.arity)) if task_block
70
- options = full_options.unshift('--auto-correct-all')
71
- # `parallel` will automatically be removed from the options internally.
72
- # This is a nice to have to suppress the warning message
73
- # about parallel and auto-correct not being compatible.
74
- options.delete('--parallel')
75
- run_cli(verbose, options)
100
+ perform('--autocorrect-all')
76
101
  end
77
102
  end
78
103
  end
@@ -4,14 +4,22 @@ require 'digest/sha1'
4
4
  require 'find'
5
5
  require 'etc'
6
6
  require 'zlib'
7
+ require_relative 'cache_config'
7
8
 
8
9
  module RuboCop
9
10
  # Provides functionality for caching RuboCop runs.
10
11
  # @api private
11
12
  class ResultCache
12
- NON_CHANGING = %i[color format formatters out debug fail_level auto_correct
13
+ NON_CHANGING = %i[color format formatters out debug fail_level
14
+ fix_layout autocorrect safe_autocorrect autocorrect_all
13
15
  cache fail_fast stdin parallel].freeze
14
16
 
17
+ DL_EXTENSIONS = ::RbConfig::CONFIG
18
+ .values_at('DLEXT', 'DLEXT2')
19
+ .reject { |ext| !ext || ext.empty? }
20
+ .map { |ext| ".#{ext}" }
21
+ .freeze
22
+
15
23
  # Remove old files so that the cache doesn't grow too big. When the
16
24
  # threshold MaxFilesInCache has been exceeded, the oldest 50% of all the
17
25
  # files in the cache are removed. The reason for removing so much is that
@@ -66,24 +74,9 @@ module RuboCop
66
74
  end
67
75
 
68
76
  def self.cache_root(config_store)
69
- root = ENV.fetch('RUBOCOP_CACHE_ROOT', nil)
70
- root ||= config_store.for_pwd.for_all_cops['CacheRootDirectory']
71
- root ||= if ENV.key?('XDG_CACHE_HOME')
72
- # Include user ID in the path to make sure the user has write
73
- # access.
74
- File.join(ENV.fetch('XDG_CACHE_HOME'), Process.uid.to_s)
75
- else
76
- # On FreeBSD, the /home path is a symbolic link to /usr/home
77
- # and the $HOME environment variable returns the /home path.
78
- #
79
- # As $HOME is a built-in environment variable, FreeBSD users
80
- # always get a warning message.
81
- #
82
- # To avoid raising warn log messages on FreeBSD, we retrieve
83
- # the real path of the home folder.
84
- File.join(File.realpath(Dir.home), '.cache')
85
- end
86
- File.join(root, 'rubocop_cache')
77
+ CacheConfig.root_dir do
78
+ config_store.for_pwd.for_all_cops['CacheRootDirectory']
79
+ end
87
80
  end
88
81
 
89
82
  def self.allow_symlinks_in_cache_location?(config_store)
@@ -187,14 +180,24 @@ module RuboCop
187
180
  .select { |path| File.file?(path) }
188
181
  .sort!
189
182
  .each do |path|
190
- content = File.binread(path)
191
- digest << Zlib.crc32(content).to_s # mtime not reliable
183
+ digest << digest(path)
192
184
  end
193
185
  digest << RuboCop::Version::STRING << RuboCop::AST::Version::STRING
194
186
  digest.hexdigest
195
187
  end
196
188
  end
197
189
 
190
+ def digest(path)
191
+ content = if path.end_with?(*DL_EXTENSIONS)
192
+ # Shared libraries often contain timestamps of when
193
+ # they were compiled and other non-stable data.
194
+ File.basename(path)
195
+ else
196
+ File.binread(path) # mtime not reliable
197
+ end
198
+ Zlib.crc32(content).to_s
199
+ end
200
+
198
201
  def rubocop_extra_features
199
202
  lib_root = File.join(File.dirname(__FILE__), '..')
200
203
  exe_root = File.join(lib_root, '..', 'exe')
@@ -38,7 +38,7 @@ module CopHelper
38
38
  def autocorrect_source(source, file = nil)
39
39
  RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
40
40
  RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
41
- cop.instance_variable_get(:@options)[:auto_correct] = true
41
+ cop.instance_variable_get(:@options)[:autocorrect] = true
42
42
  processed_source = parse_source(source, file)
43
43
  _investigate(cop, processed_source)
44
44
 
@@ -38,7 +38,7 @@ module RuboCop
38
38
  # 'Avoid chaining a method call on a do...end block.'
39
39
  # )
40
40
  #
41
- # Auto-correction can be tested using `expect_correction` after
41
+ # Autocorrection can be tested using `expect_correction` after
42
42
  # `expect_offense`.
43
43
  #
44
44
  # @example `expect_offense` and `expect_correction`
@@ -58,7 +58,7 @@ module RuboCop
58
58
  # that there were no offenses. The `expect_offense` method has
59
59
  # to do more work by parsing out lines that contain carets.
60
60
  #
61
- # If the code produces an offense that could not be auto-corrected, you can
61
+ # If the code produces an offense that could not be autocorrected, you can
62
62
  # use `expect_no_corrections` after `expect_offense`.
63
63
  #
64
64
  # @example `expect_offense` and `expect_no_corrections`
@@ -205,7 +205,7 @@ module RuboCop
205
205
  def set_formatter_options
206
206
  RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
207
207
  RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
208
- cop.instance_variable_get(:@options)[:auto_correct] = true
208
+ cop.instance_variable_get(:@options)[:autocorrect] = true
209
209
  end
210
210
 
211
211
  # Parsed representation of code annotated with the `^^^ Message` style
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'tmpdir'
4
4
 
5
- RSpec.shared_context 'isolated environment', :isolated_environment do
5
+ RSpec.shared_context 'isolated environment' do
6
6
  around do |example|
7
7
  Dir.mktmpdir do |tmpdir|
8
8
  original_home = Dir.home
@@ -38,7 +38,7 @@ RSpec.shared_context 'isolated environment', :isolated_environment do
38
38
  end
39
39
  end
40
40
 
41
- RSpec.shared_context 'maintain registry', :restore_registry do
41
+ RSpec.shared_context 'maintain registry' do
42
42
  around(:each) { |example| RuboCop::Cop::Registry.with_temporary_global { example.run } }
43
43
 
44
44
  def stub_cop_class(name, inherit: RuboCop::Cop::Base, &block)
@@ -49,7 +49,7 @@ RSpec.shared_context 'maintain registry', :restore_registry do
49
49
  end
50
50
 
51
51
  # This context assumes nothing and defines `cop`, among others.
52
- RSpec.shared_context 'config', :config do # rubocop:disable Metrics/BlockLength
52
+ RSpec.shared_context 'config' do # rubocop:disable Metrics/BlockLength
53
53
  ### Meant to be overridden at will
54
54
 
55
55
  let(:cop_class) do
@@ -116,26 +116,46 @@ RSpec.shared_context 'mock console output' do
116
116
  end
117
117
  end
118
118
 
119
- RSpec.shared_context 'ruby 2.5', :ruby25 do
119
+ RSpec.shared_context 'ruby 2.0' do
120
+ let(:ruby_version) { 2.0 }
121
+ end
122
+
123
+ RSpec.shared_context 'ruby 2.1' do
124
+ let(:ruby_version) { 2.1 }
125
+ end
126
+
127
+ RSpec.shared_context 'ruby 2.2' do
128
+ let(:ruby_version) { 2.2 }
129
+ end
130
+
131
+ RSpec.shared_context 'ruby 2.3' do
132
+ let(:ruby_version) { 2.3 }
133
+ end
134
+
135
+ RSpec.shared_context 'ruby 2.4' do
136
+ let(:ruby_version) { 2.4 }
137
+ end
138
+
139
+ RSpec.shared_context 'ruby 2.5' do
120
140
  let(:ruby_version) { 2.5 }
121
141
  end
122
142
 
123
- RSpec.shared_context 'ruby 2.6', :ruby26 do
143
+ RSpec.shared_context 'ruby 2.6' do
124
144
  let(:ruby_version) { 2.6 }
125
145
  end
126
146
 
127
- RSpec.shared_context 'ruby 2.7', :ruby27 do
147
+ RSpec.shared_context 'ruby 2.7' do
128
148
  let(:ruby_version) { 2.7 }
129
149
  end
130
150
 
131
- RSpec.shared_context 'ruby 3.0', :ruby30 do
151
+ RSpec.shared_context 'ruby 3.0' do
132
152
  let(:ruby_version) { 3.0 }
133
153
  end
134
154
 
135
- RSpec.shared_context 'ruby 3.1', :ruby31 do
155
+ RSpec.shared_context 'ruby 3.1' do
136
156
  let(:ruby_version) { 3.1 }
137
157
  end
138
158
 
139
- RSpec.shared_context 'ruby 3.2', :ruby32 do
159
+ RSpec.shared_context 'ruby 3.2' do
140
160
  let(:ruby_version) { 3.2 }
141
161
  end
@@ -11,4 +11,18 @@ require_relative 'parallel_formatter'
11
11
  RSpec.configure do |config|
12
12
  config.include CopHelper
13
13
  config.include HostEnvironmentSimulatorHelper
14
+ config.include_context 'config', :config
15
+ config.include_context 'isolated environment', :isolated_environment
16
+ config.include_context 'maintain registry', :restore_registry
17
+ config.include_context 'ruby 2.0', :ruby20
18
+ config.include_context 'ruby 2.1', :ruby21
19
+ config.include_context 'ruby 2.2', :ruby22
20
+ config.include_context 'ruby 2.3', :ruby23
21
+ config.include_context 'ruby 2.4', :ruby24
22
+ config.include_context 'ruby 2.5', :ruby25
23
+ config.include_context 'ruby 2.6', :ruby26
24
+ config.include_context 'ruby 2.7', :ruby27
25
+ config.include_context 'ruby 3.0', :ruby30
26
+ config.include_context 'ruby 3.1', :ruby31
27
+ config.include_context 'ruby 3.2', :ruby32
14
28
  end
@@ -63,8 +63,16 @@ module RuboCop
63
63
  # Warms up the RuboCop cache by forking a suitable number of RuboCop
64
64
  # instances that each inspects its allotted group of files.
65
65
  def warm_cache(target_files)
66
+ saved_options = @options.dup
67
+ if target_files.length <= 1
68
+ puts 'Skipping parallel inspection: only a single file needs inspection' if @options[:debug]
69
+ return
70
+ end
66
71
  puts 'Running parallel inspection' if @options[:debug]
72
+ %i[autocorrect safe_autocorrect].each { |opt| @options[opt] = false }
67
73
  Parallel.each(target_files) { |target_file| file_offenses(target_file) }
74
+ ensure
75
+ @options = saved_options
68
76
  end
69
77
 
70
78
  def find_target_files(paths)
@@ -143,10 +151,10 @@ module RuboCop
143
151
 
144
152
  if cache&.valid?
145
153
  offenses = cache.load
146
- # If we're running --auto-correct and the cache says there are
154
+ # If we're running --autocorrect and the cache says there are
147
155
  # offenses, we need to actually inspect the file. If the cache shows no
148
156
  # offenses, we're good.
149
- real_run_needed = @options[:auto_correct] && offenses.any?
157
+ real_run_needed = @options[:autocorrect] && offenses.any?
150
158
  else
151
159
  real_run_needed = true
152
160
  end
@@ -240,7 +248,7 @@ module RuboCop
240
248
  # error message.
241
249
  offenses_by_iteration = []
242
250
 
243
- # When running with --auto-correct, we need to inspect the file (which
251
+ # When running with --autocorrect, we need to inspect the file (which
244
252
  # includes writing a corrected version of it) until no more corrections
245
253
  # are made. This is because automatic corrections can introduce new
246
254
  # offenses. In the normal case the loop is only executed once.
@@ -382,7 +390,7 @@ module RuboCop
382
390
  if @options[:display_only_fail_level_offenses]
383
391
  offenses.select { |o| considered_failure?(o) }
384
392
  elsif @options[:display_only_safe_correctable]
385
- offenses.select { |o| supports_safe_auto_correct?(o) }
393
+ offenses.select { |o| supports_safe_autocorrect?(o) }
386
394
  elsif @options[:display_only_correctable]
387
395
  offenses.select(&:correctable?)
388
396
  else
@@ -390,7 +398,7 @@ module RuboCop
390
398
  end
391
399
  end
392
400
 
393
- def supports_safe_auto_correct?(offense)
401
+ def supports_safe_autocorrect?(offense)
394
402
  cop_class = Cop::Registry.global.find_by_cop_name(offense.cop_name)
395
403
  default_cfg = default_config(offense.cop_name)
396
404