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
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for `when;` uses in `case` expressions.
6
+ # Checks for `when;` uses in `case` expressions.
7
7
  #
8
8
  # @example
9
9
  # # bad
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop can check for array literals made up of word-like
6
+ # Checks for array literals made up of word-like
7
7
  # strings, that are not using the %w() syntax.
8
8
  #
9
9
  # Alternatively, it can check for uses of the %w() syntax, in projects
@@ -44,7 +44,7 @@ module RuboCop
44
44
  extend AutoCorrector
45
45
 
46
46
  PERCENT_MSG = 'Use `%w` or `%W` for an array of words.'
47
- ARRAY_MSG = 'Use `%<prefer>s` for an array of words.'
47
+ ARRAY_MSG = 'Use %<prefer>s for an array of words.'
48
48
 
49
49
  class << self
50
50
  attr_accessor :largest_brackets
@@ -87,13 +87,12 @@ module RuboCop
87
87
  if word.dstr_type?
88
88
  string_literal = to_string_literal(word.source)
89
89
 
90
- trim_string_interporation_escape_character(string_literal)
90
+ trim_string_interpolation_escape_character(string_literal)
91
91
  else
92
92
  to_string_literal(word.children[0])
93
93
  end
94
94
  end
95
-
96
- "[#{words.join(', ')}]"
95
+ build_bracketed_array_with_appropriate_whitespace(elements: words, node: node)
97
96
  end
98
97
  end
99
98
  end
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop can either enforce or forbid Yoda conditions,
6
+ # Enforces or forbids Yoda conditions,
7
7
  # i.e. comparison operations where the order of expression is reversed.
8
8
  # eg. `5 == x`
9
9
  #
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for numeric comparisons that can be replaced
6
+ # Checks for numeric comparisons that can be replaced
7
7
  # by a predicate method, such as receiver.length == 0,
8
8
  # receiver.length > 0, receiver.length != 0,
9
9
  # receiver.length < 1 and receiver.size == 0 that can be
@@ -49,7 +49,7 @@ module RuboCop
49
49
  end
50
50
 
51
51
  def autocorrect?
52
- @options[:auto_correct]
52
+ @options[:autocorrect]
53
53
  end
54
54
 
55
55
  def debug?
@@ -68,7 +68,7 @@ module RuboCop
68
68
 
69
69
  # The autocorrection process may have to be repeated multiple times
70
70
  # until there are no corrections left to perform
71
- # To speed things up, run auto-correcting cops by themselves, and only
71
+ # To speed things up, run autocorrecting cops by themselves, and only
72
72
  # run the other cops when no corrections are left
73
73
  on_duty = roundup_relevant_cops(processed_source.file_path)
74
74
 
@@ -34,7 +34,7 @@ module RuboCop
34
34
  def add_parentheses(node, corrector)
35
35
  if node.args_type?
36
36
  arguments_range = node.source_range
37
- args_with_space = range_with_surrounding_space(range: arguments_range, side: :left)
37
+ args_with_space = range_with_surrounding_space(arguments_range, side: :left)
38
38
  leading_space = range_between(args_with_space.begin_pos, arguments_range.begin_pos)
39
39
  corrector.replace(leading_space, '(')
40
40
  corrector.insert_after(arguments_range, ')')
@@ -126,7 +126,7 @@ module RuboCop
126
126
  end
127
127
  end
128
128
 
129
- def trim_string_interporation_escape_character(str)
129
+ def trim_string_interpolation_escape_character(str)
130
130
  str.gsub(/\\\#\{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
131
131
  end
132
132
 
@@ -159,7 +159,7 @@ module RuboCop
159
159
  private
160
160
 
161
161
  def compatible_external_encoding_for?(src)
162
- src = src.dup if RUBY_ENGINE == 'jruby'
162
+ src = src.dup if RUBY_VERSION < '2.3' || RUBY_ENGINE == 'jruby'
163
163
  src.force_encoding(Encoding.default_external).valid_encoding?
164
164
  end
165
165
  end
@@ -34,17 +34,34 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
34
34
  end
35
35
 
36
36
  def cops_body(cop, description, examples_objects, safety_objects, pars) # rubocop:disable Metrics/AbcSize
37
+ check_examples_to_have_the_default_enforced_style!(examples_objects, cop)
38
+
37
39
  content = h2(cop.cop_name)
38
40
  content << required_ruby_version(cop)
39
41
  content << properties(cop)
40
42
  content << "#{description}\n"
41
43
  content << safety_object(safety_objects) if safety_objects.any? { |s| !s.text.blank? }
42
- content << examples(examples_objects) if examples_objects.count.positive?
44
+ content << examples(examples_objects) if examples_objects.any?
43
45
  content << configurations(pars)
44
46
  content << references(cop)
45
47
  content
46
48
  end
47
49
 
50
+ def check_examples_to_have_the_default_enforced_style!(examples_object, cop)
51
+ return if examples_object.none?
52
+
53
+ examples_describing_enforced_style = examples_object.map(&:name).grep(/EnforcedStyle:/)
54
+ return if examples_describing_enforced_style.none?
55
+
56
+ if examples_describing_enforced_style.index { |name| name.match?('default') }.nonzero?
57
+ raise "Put the example with the default EnforcedStyle on top for #{cop.cop_name}"
58
+ end
59
+
60
+ return if examples_describing_enforced_style.any? { |name| name.match?('default') }
61
+
62
+ raise "Specify the default EnforcedStyle for #{cop.cop_name}"
63
+ end
64
+
48
65
  def examples(examples_object)
49
66
  examples_object.each_with_object(h3('Examples').dup) do |example, content|
50
67
  content << "\n" unless content.end_with?("\n\n")
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Ext
5
+ # Extensions to Parser::Source::Range
6
+ module Range
7
+ # Adds `Range#single_line?` to parallel `Node#single_line?`
8
+ def single_line?
9
+ first_line == last_line
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ Parser::Source::Range.include RuboCop::Ext::Range
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ # This class handles loading files (a.k.a. features in Ruby) specified
5
+ # by `--require` command line option and `require` directive in the config.
6
+ #
7
+ # Normally, the given string is directly passed to `require`. If a string
8
+ # beginning with `.` is given, it is assumed to be relative to the given
9
+ # directory.
10
+ #
11
+ # If a string containing `-` is given, it will be used as is, but if we
12
+ # cannot find the file to load, we will replace `-` with `/` and try it
13
+ # again as when Bundler loads gems.
14
+ #
15
+ # @api private
16
+ class FeatureLoader
17
+ class << self
18
+ # @param [String] config_directory_path
19
+ # @param [String] feature
20
+ def load(config_directory_path:, feature:)
21
+ new(config_directory_path: config_directory_path, feature: feature).load
22
+ end
23
+ end
24
+
25
+ # @param [String] config_directory_path
26
+ # @param [String] feature
27
+ def initialize(config_directory_path:, feature:)
28
+ @config_directory_path = config_directory_path
29
+ @feature = feature
30
+ end
31
+
32
+ def load
33
+ # Don't use `::Kernel.require(target)` to prevent the following error:
34
+ # https://github.com/rubocop/rubocop/issues/10893
35
+ require(target)
36
+ rescue ::LoadError => e
37
+ raise if e.path != target
38
+
39
+ begin
40
+ # Don't use `::Kernel.require(target)` to prevent the following error:
41
+ # https://github.com/rubocop/rubocop/issues/10893
42
+ require(namespaced_target)
43
+ rescue ::LoadError => error_for_namespaced_target
44
+ # NOTE: This wrap is necessary due to JRuby 9.3.4.0 incompatibility:
45
+ # https://github.com/jruby/jruby/issues/7316
46
+ raise LoadError, e if error_for_namespaced_target.path == namespaced_target
47
+
48
+ raise error_for_namespaced_target
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ # @return [String]
55
+ def namespaced_feature
56
+ @feature.tr('-', '/')
57
+ end
58
+
59
+ # @return [String]
60
+ def namespaced_target
61
+ if relative?
62
+ relative(namespaced_feature)
63
+ else
64
+ namespaced_feature
65
+ end
66
+ end
67
+
68
+ # @param [String]
69
+ # @return [String]
70
+ def relative(feature)
71
+ ::File.join(@config_directory_path, feature)
72
+ end
73
+
74
+ # @return [Boolean]
75
+ def relative?
76
+ @feature.start_with?('.')
77
+ end
78
+
79
+ # @param [LoadError] error
80
+ # @return [Boolean]
81
+ def seems_cannot_load_such_file_error?(error)
82
+ error.path == target
83
+ end
84
+
85
+ # @return [String]
86
+ def target
87
+ if relative?
88
+ relative(@feature)
89
+ else
90
+ @feature
91
+ end
92
+ end
93
+ end
94
+ end
@@ -41,7 +41,7 @@ module RuboCop
41
41
  def report_line(location)
42
42
  source_line = location.source_line
43
43
 
44
- if location.first_line == location.last_line
44
+ if location.single_line?
45
45
  output.puts(source_line)
46
46
  else
47
47
  output.puts("#{source_line} #{yellow(ELLIPSES)}")
@@ -123,10 +123,10 @@ module RuboCop
123
123
  cop_class = Cop::Registry.global.find_by_cop_name(cop_name)
124
124
  default_cfg = default_config(cop_name)
125
125
 
126
- if supports_safe_auto_correct?(cop_class, default_cfg)
127
- output_buffer.puts '# This cop supports safe auto-correction (--auto-correct).'
126
+ if supports_safe_autocorrect?(cop_class, default_cfg)
127
+ output_buffer.puts '# This cop supports safe autocorrection (--autocorrect).'
128
128
  elsif supports_unsafe_autocorrect?(cop_class, default_cfg)
129
- output_buffer.puts '# This cop supports unsafe auto-correction (--auto-correct-all).'
129
+ output_buffer.puts '# This cop supports unsafe autocorrection (--autocorrect-all).'
130
130
  end
131
131
 
132
132
  return unless default_cfg
@@ -137,13 +137,12 @@ module RuboCop
137
137
  output_cop_param_comments(output_buffer, params, default_cfg)
138
138
  end
139
139
 
140
- def supports_safe_auto_correct?(cop_class, default_cfg)
141
- cop_class&.support_autocorrect? &&
142
- (default_cfg.nil? || default_cfg['Safe'] || default_cfg['Safe'].nil?)
140
+ def supports_safe_autocorrect?(cop_class, default_cfg)
141
+ cop_class&.support_autocorrect? && (default_cfg.nil? || safe_autocorrect?(default_cfg))
143
142
  end
144
143
 
145
144
  def supports_unsafe_autocorrect?(cop_class, default_cfg)
146
- cop_class&.support_autocorrect? && !default_cfg.nil? && default_cfg['Safe'] == false
145
+ cop_class&.support_autocorrect? && !safe_autocorrect?(default_cfg)
147
146
  end
148
147
 
149
148
  def cop_config_params(default_cfg, cfg)
@@ -162,7 +161,7 @@ module RuboCop
162
161
  next unless value.is_a?(Array)
163
162
  next if value.empty?
164
163
 
165
- output_buffer.puts "# #{param}: #{value.join(', ')}"
164
+ output_buffer.puts "# #{param}: #{value.uniq.join(', ')}"
166
165
  end
167
166
  end
168
167
 
@@ -242,6 +241,10 @@ module RuboCop
242
241
  regexp = exclude_path
243
242
  output_buffer.puts " - !ruby/regexp /#{regexp.source}/"
244
243
  end
244
+
245
+ def safe_autocorrect?(config)
246
+ config.fetch('Safe', true) && config.fetch('SafeAutoCorrect', true)
247
+ end
245
248
  end
246
249
  end
247
250
  end
@@ -9,23 +9,23 @@ module RuboCop
9
9
  # which invoke same method of each formatters.
10
10
  class FormatterSet < Array
11
11
  BUILTIN_FORMATTERS_FOR_KEYS = {
12
- '[a]utogenconf' => AutoGenConfigFormatter,
13
- '[c]lang' => ClangStyleFormatter,
14
- '[e]macs' => EmacsStyleFormatter,
15
- '[fi]les' => FileListFormatter,
16
- '[fu]ubar' => FuubarStyleFormatter,
17
- '[g]ithub' => GitHubActionsFormatter,
18
- '[h]tml' => HTMLFormatter,
19
- '[j]son' => JSONFormatter,
20
- '[ju]nit' => JUnitFormatter,
21
- '[m]arkdown' => MarkdownFormatter,
22
- '[o]ffenses' => OffenseCountFormatter,
23
- '[pa]cman' => PacmanFormatter,
24
- '[p]rogress' => ProgressFormatter,
25
- '[q]uiet' => QuietFormatter,
26
- '[s]imple' => SimpleTextFormatter,
27
- '[t]ap' => TapFormatter,
28
- '[w]orst' => WorstOffendersFormatter
12
+ '[a]utogenconf' => 'AutoGenConfigFormatter',
13
+ '[c]lang' => 'ClangStyleFormatter',
14
+ '[e]macs' => 'EmacsStyleFormatter',
15
+ '[fi]les' => 'FileListFormatter',
16
+ '[fu]ubar' => 'FuubarStyleFormatter',
17
+ '[g]ithub' => 'GitHubActionsFormatter',
18
+ '[h]tml' => 'HTMLFormatter',
19
+ '[j]son' => 'JSONFormatter',
20
+ '[ju]nit' => 'JUnitFormatter',
21
+ '[m]arkdown' => 'MarkdownFormatter',
22
+ '[o]ffenses' => 'OffenseCountFormatter',
23
+ '[pa]cman' => 'PacmanFormatter',
24
+ '[p]rogress' => 'ProgressFormatter',
25
+ '[q]uiet' => 'QuietFormatter',
26
+ '[s]imple' => 'SimpleTextFormatter',
27
+ '[t]ap' => 'TapFormatter',
28
+ '[w]orst' => 'WorstOffendersFormatter'
29
29
  }.freeze
30
30
 
31
31
  FORMATTER_APIS = %i[started finished].freeze
@@ -55,7 +55,7 @@ module RuboCop
55
55
  def add_formatter(formatter_type, output_path = nil)
56
56
  if output_path
57
57
  dir_path = File.dirname(output_path)
58
- FileUtils.mkdir_p(dir_path) unless File.exist?(dir_path)
58
+ FileUtils.mkdir_p(dir_path)
59
59
  output = File.open(output_path, 'w')
60
60
  else
61
61
  output = $stdout
@@ -92,7 +92,8 @@ module RuboCop
92
92
 
93
93
  raise %(Cannot determine formatter for "#{specified_key}") if matching_keys.size > 1
94
94
 
95
- BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
95
+ formatter_name = BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
96
+ RuboCop::Formatter.const_get(formatter_name)
96
97
  end
97
98
 
98
99
  def custom_formatter_class(specified_class_name)
@@ -7,8 +7,21 @@ module RuboCop
7
7
  class GitHubActionsFormatter < BaseFormatter
8
8
  ESCAPE_MAP = { '%' => '%25', "\n" => '%0A', "\r" => '%0D' }.freeze
9
9
 
10
+ def started(_target_files)
11
+ @offenses_for_files = {}
12
+ end
13
+
10
14
  def file_finished(file, offenses)
11
- offenses.each { |offense| report_offense(file, offense) }
15
+ @offenses_for_files[file] = offenses unless offenses.empty?
16
+ end
17
+
18
+ def finished(_inspected_files)
19
+ @offenses_for_files.each do |file, offenses|
20
+ offenses.each do |offense|
21
+ report_offense(file, offense)
22
+ end
23
+ end
24
+ output.puts
12
25
  end
13
26
 
14
27
  private
@@ -31,7 +44,7 @@ module RuboCop
31
44
 
32
45
  def report_offense(file, offense)
33
46
  output.printf(
34
- "\n::%<severity>s file=%<file>s,line=%<line>d,col=%<column>d::%<message>s\n",
47
+ "\n::%<severity>s file=%<file>s,line=%<line>d,col=%<column>d::%<message>s",
35
48
  severity: github_severity(offense),
36
49
  file: PathUtil.smart_path(file),
37
50
  line: offense.line,
@@ -4,7 +4,6 @@ require 'cgi'
4
4
  require 'erb'
5
5
  require 'ostruct'
6
6
  require 'base64'
7
- require_relative 'text_util'
8
7
 
9
8
  module RuboCop
10
9
  module Formatter
@@ -94,12 +93,12 @@ module RuboCop
94
93
 
95
94
  def highlighted_source_line(offense)
96
95
  source_before_highlight(offense) +
97
- hightlight_source_tag(offense) +
96
+ highlight_source_tag(offense) +
98
97
  source_after_highlight(offense) +
99
98
  possible_ellipses(offense.location)
100
99
  end
101
100
 
102
- def hightlight_source_tag(offense)
101
+ def highlight_source_tag(offense)
103
102
  "<span class=\"highlight #{offense.severity}\">" \
104
103
  "#{escape(offense.highlighted_area.source)}" \
105
104
  '</span>'
@@ -116,7 +115,7 @@ module RuboCop
116
115
  end
117
116
 
118
117
  def possible_ellipses(location)
119
- location.first_line == location.last_line ? '' : " #{ELLIPSES}"
118
+ location.single_line? ? '' : " #{ELLIPSES}"
120
119
  end
121
120
 
122
121
  def escape(string)
@@ -41,6 +41,8 @@ module RuboCop
41
41
 
42
42
  def write_file_messages
43
43
  files.each do |file|
44
+ next if file.offenses.empty?
45
+
44
46
  write_heading(file)
45
47
  file.offenses.each do |offense|
46
48
  write_context(offense)
@@ -69,7 +71,7 @@ module RuboCop
69
71
  end
70
72
 
71
73
  def possible_ellipses(location)
72
- location.first_line == location.last_line ? '' : ' ...'
74
+ location.single_line? ? '' : ' ...'
73
75
  end
74
76
  end
75
77
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ruby-progressbar'
4
+
3
5
  module RuboCop
4
6
  module Formatter
5
7
  # This formatter displays the list of offended cops with a count of how
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'colorizable'
4
- require_relative 'text_util'
5
4
 
6
5
  module RuboCop
7
6
  module Formatter
@@ -61,7 +60,9 @@ module RuboCop
61
60
  correction_count,
62
61
  correctable_count,
63
62
  rainbow,
64
- safe_auto_correct: @options[:safe_auto_correct])
63
+ # :safe_autocorrect is a derived option based on several command-line
64
+ # arguments - see Rubocop::Options#add_autocorrection_options
65
+ safe_autocorrect: @options[:safe_autocorrect])
65
66
 
66
67
  output.puts
67
68
  output.puts report.summary
@@ -108,22 +109,22 @@ module RuboCop
108
109
  # rubocop:disable Metrics/ParameterLists
109
110
  def initialize(
110
111
  file_count, offense_count, correction_count, correctable_count, rainbow,
111
- safe_auto_correct: false
112
+ safe_autocorrect: false
112
113
  )
113
114
  @file_count = file_count
114
115
  @offense_count = offense_count
115
116
  @correction_count = correction_count
116
117
  @correctable_count = correctable_count
117
118
  @rainbow = rainbow
118
- @safe_auto_correct = safe_auto_correct
119
+ @safe_autocorrect = safe_autocorrect
119
120
  end
120
121
  # rubocop:enable Metrics/ParameterLists
121
122
 
122
123
  def summary
123
124
  if @correction_count.positive?
124
125
  if @correctable_count.positive?
125
- "#{files} inspected, #{offenses} detected, #{corrections} corrected,"\
126
- " #{correctable}"
126
+ "#{files} inspected, #{offenses} detected, #{corrections} corrected, " \
127
+ "#{correctable}"
127
128
  else
128
129
  "#{files} inspected, #{offenses} detected, #{corrections} corrected"
129
130
  end
@@ -157,12 +158,12 @@ module RuboCop
157
158
  end
158
159
 
159
160
  def correctable
160
- if @safe_auto_correct
161
+ if @safe_autocorrect
161
162
  text = pluralize(@correctable_count, 'more offense')
162
163
  "#{colorize(text, :yellow)} can be corrected with `rubocop -A`"
163
164
  else
164
165
  text = pluralize(@correctable_count, 'offense')
165
- "#{colorize(text, :yellow)} auto-correctable"
166
+ "#{colorize(text, :yellow)} autocorrectable"
166
167
  end
167
168
  end
168
169
  end
@@ -29,7 +29,7 @@ module RuboCop
29
29
  def report_line(location)
30
30
  source_line = location.source_line
31
31
 
32
- if location.first_line == location.last_line
32
+ if location.single_line?
33
33
  output.puts("# #{source_line}")
34
34
  else
35
35
  output.puts("# #{source_line} #{yellow(ELLIPSES)}")
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Formatter
5
+ require_relative 'formatter/text_util'
6
+
7
+ require_relative 'formatter/base_formatter'
8
+ require_relative 'formatter/simple_text_formatter'
9
+ # relies on simple text
10
+ require_relative 'formatter/clang_style_formatter'
11
+ require_relative 'formatter/disabled_config_formatter'
12
+ require_relative 'formatter/emacs_style_formatter'
13
+ require_relative 'formatter/file_list_formatter'
14
+ require_relative 'formatter/fuubar_style_formatter'
15
+ require_relative 'formatter/git_hub_actions_formatter'
16
+ require_relative 'formatter/html_formatter'
17
+ require_relative 'formatter/json_formatter'
18
+ require_relative 'formatter/junit_formatter'
19
+ require_relative 'formatter/markdown_formatter'
20
+ require_relative 'formatter/offense_count_formatter'
21
+ require_relative 'formatter/progress_formatter'
22
+ require_relative 'formatter/quiet_formatter'
23
+ require_relative 'formatter/tap_formatter'
24
+ require_relative 'formatter/worst_offenders_formatter'
25
+ require_relative 'formatter/pacman_formatter'
26
+ # relies on progress formatter
27
+ require_relative 'formatter/auto_gen_config_formatter'
28
+
29
+ require_relative 'formatter/formatter_set'
30
+ end
31
+ end
@@ -11,7 +11,8 @@ module RuboCop
11
11
  KEYWORDS = {
12
12
  encoding: '(?:en)?coding',
13
13
  frozen_string_literal: 'frozen[_-]string[_-]literal',
14
- shareable_constant_value: 'shareable[_-]constant[_-]value'
14
+ shareable_constant_value: 'shareable[_-]constant[_-]value',
15
+ typed: 'typed'
15
16
  }.freeze
16
17
 
17
18
  # Detect magic comment format and pass it to the appropriate wrapper.
@@ -33,7 +34,10 @@ module RuboCop
33
34
  end
34
35
 
35
36
  def any?
36
- frozen_string_literal_specified? || encoding_specified? || shareable_constant_value_specified?
37
+ frozen_string_literal_specified? ||
38
+ encoding_specified? ||
39
+ shareable_constant_value_specified? ||
40
+ typed_specified?
37
41
  end
38
42
 
39
43
  def valid?
@@ -101,6 +105,17 @@ module RuboCop
101
105
  specified?(encoding)
102
106
  end
103
107
 
108
+ # Was the Sorbet `typed` sigil specified?
109
+ #
110
+ # @return [Boolean]
111
+ def typed_specified?
112
+ specified?(extract_typed)
113
+ end
114
+
115
+ def typed
116
+ extract_typed
117
+ end
118
+
104
119
  private
105
120
 
106
121
  def specified?(value)
@@ -187,6 +202,9 @@ module RuboCop
187
202
  def extract_shareable_constant_value
188
203
  match(KEYWORDS[:shareable_constant_value])
189
204
  end
205
+
206
+ # Emacs comments cannot specify Sorbet typechecking behavior.
207
+ def extract_typed; end
190
208
  end
191
209
 
192
210
  # Wrapper for Vim style magic comments.
@@ -222,6 +240,9 @@ module RuboCop
222
240
 
223
241
  # Vim comments cannot specify shareable constant values behavior.
224
242
  def shareable_constant_value; end
243
+
244
+ # Vim comments cannot specify Sorbet typechecking behavior.
245
+ def extract_typed; end
225
246
  end
226
247
 
227
248
  # Wrapper for regular magic comments not bound to an editor.
@@ -268,6 +289,10 @@ module RuboCop
268
289
  def extract_shareable_constant_value
269
290
  extract(/\A\s*#\s*#{KEYWORDS[:shareable_constant_value]}:\s*(#{TOKEN})\s*\z/io)
270
291
  end
292
+
293
+ def extract_typed
294
+ extract(/\A\s*#\s*#{KEYWORDS[:typed]}:\s*(#{TOKEN})\s*\z/io)
295
+ end
271
296
  end
272
297
  end
273
298
  end