rubocop 1.29.0 → 1.30.1

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 (459) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/config/default.yml +31 -17
  4. data/lib/rubocop/cli/command/auto_genenerate_config.rb +19 -4
  5. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  6. data/lib/rubocop/cli/command/show_cops.rb +1 -1
  7. data/lib/rubocop/cli.rb +1 -0
  8. data/lib/rubocop/config_loader.rb +2 -1
  9. data/lib/rubocop/config_validator.rb +19 -2
  10. data/lib/rubocop/cop/autocorrect_logic.rb +4 -2
  11. data/lib/rubocop/cop/base.rb +1 -1
  12. data/lib/rubocop/cop/bundler/gem_filename.rb +1 -1
  13. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  14. data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
  15. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +1 -1
  16. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
  17. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +4 -2
  18. data/lib/rubocop/cop/correctors/if_then_corrector.rb +1 -1
  19. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  20. data/lib/rubocop/cop/correctors/line_break_corrector.rb +7 -1
  21. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -1
  22. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
  23. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  24. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  25. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -1
  26. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +1 -1
  27. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +1 -1
  28. data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -1
  29. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +77 -0
  30. data/lib/rubocop/cop/internal_affairs/cop_description.rb +96 -0
  31. data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +1 -1
  32. data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -1
  33. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +1 -1
  34. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -1
  35. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -1
  36. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  37. data/lib/rubocop/cop/layout/argument_alignment.rb +22 -1
  38. data/lib/rubocop/cop/layout/assignment_indentation.rb +1 -1
  39. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
  40. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  41. data/lib/rubocop/cop/layout/block_end_newline.rb +1 -1
  42. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  43. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
  44. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  45. data/lib/rubocop/cop/layout/condition_position.rb +1 -1
  46. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  47. data/lib/rubocop/cop/layout/dot_position.rb +1 -1
  48. data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
  49. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  50. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
  51. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
  52. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
  53. data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
  54. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
  55. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
  56. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +5 -5
  57. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +10 -10
  58. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
  59. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
  60. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +10 -10
  61. data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
  62. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  63. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  64. data/lib/rubocop/cop/layout/first_argument_indentation.rb +28 -28
  65. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -1
  66. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  67. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
  68. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
  69. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  70. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -1
  71. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
  72. data/lib/rubocop/cop/layout/hash_alignment.rb +2 -0
  73. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
  74. data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
  75. data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
  76. data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
  77. data/lib/rubocop/cop/layout/indentation_width.rb +8 -5
  78. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
  79. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  80. data/lib/rubocop/cop/layout/leading_empty_lines.rb +1 -1
  81. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +1 -1
  82. data/lib/rubocop/cop/layout/line_length.rb +1 -1
  83. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
  84. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -1
  85. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
  86. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
  87. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +1 -1
  88. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
  89. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  90. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
  91. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
  92. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
  93. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +1 -1
  94. data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
  95. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +1 -1
  96. data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
  97. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  98. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -2
  99. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
  100. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
  101. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +10 -10
  102. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +3 -3
  103. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +1 -1
  104. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +8 -8
  105. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  106. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -1
  107. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
  108. data/lib/rubocop/cop/lint/ambiguous_operator.rb +1 -1
  109. data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -1
  110. data/lib/rubocop/cop/lint/ambiguous_range.rb +3 -3
  111. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  112. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  113. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
  114. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
  115. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  116. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  117. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
  118. data/lib/rubocop/cop/lint/deprecated_constants.rb +1 -1
  119. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
  120. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
  121. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  122. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +1 -1
  123. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  124. data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
  125. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
  126. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -1
  127. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +1 -1
  128. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  129. data/lib/rubocop/cop/lint/else_layout.rb +3 -3
  130. data/lib/rubocop/cop/lint/empty_block.rb +1 -1
  131. data/lib/rubocop/cop/lint/empty_class.rb +1 -1
  132. data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
  133. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  134. data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
  135. data/lib/rubocop/cop/lint/empty_file.rb +1 -1
  136. data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
  137. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
  138. data/lib/rubocop/cop/lint/empty_when.rb +1 -1
  139. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  140. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -0
  141. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  142. data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
  143. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  144. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
  145. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  146. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +1 -1
  147. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
  148. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
  149. data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
  150. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +2 -2
  151. data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
  152. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
  153. data/lib/rubocop/cop/lint/loop.rb +1 -1
  154. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
  155. data/lib/rubocop/cop/lint/missing_super.rb +1 -1
  156. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  157. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  158. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +4 -4
  159. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
  160. data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
  161. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
  162. data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +2 -3
  163. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -1
  164. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  165. data/lib/rubocop/cop/lint/raise_exception.rb +1 -1
  166. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  167. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
  168. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
  169. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -0
  170. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +3 -3
  171. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
  172. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  173. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
  174. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
  175. data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
  176. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -1
  177. data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
  178. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  179. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -1
  180. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -0
  181. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +1 -1
  182. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
  183. data/lib/rubocop/cop/lint/script_permission.rb +1 -1
  184. data/lib/rubocop/cop/lint/self_assignment.rb +1 -1
  185. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
  186. data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
  187. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
  188. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  189. data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
  190. data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
  191. data/lib/rubocop/cop/lint/syntax.rb +1 -1
  192. data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
  193. data/lib/rubocop/cop/lint/to_json.rb +1 -1
  194. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  195. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
  196. data/lib/rubocop/cop/lint/triple_quotes.rb +1 -1
  197. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -1
  198. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
  199. data/lib/rubocop/cop/lint/unified_integer.rb +3 -1
  200. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  201. data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -1
  202. data/lib/rubocop/cop/lint/unused_block_argument.rb +1 -1
  203. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
  204. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  205. data/lib/rubocop/cop/lint/uri_regexp.rb +1 -1
  206. data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
  207. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
  208. data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
  209. data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +1 -1
  210. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -2
  211. data/lib/rubocop/cop/lint/useless_times.rb +1 -1
  212. data/lib/rubocop/cop/lint/void.rb +1 -1
  213. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  214. data/lib/rubocop/cop/metrics/block_length.rb +1 -1
  215. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
  216. data/lib/rubocop/cop/metrics/class_length.rb +1 -1
  217. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
  218. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  219. data/lib/rubocop/cop/metrics/module_length.rb +1 -1
  220. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
  221. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
  222. data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +7 -2
  223. data/lib/rubocop/cop/mixin/string_help.rb +1 -1
  224. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  225. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
  226. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  227. data/lib/rubocop/cop/naming/block_forwarding.rb +2 -2
  228. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  229. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
  230. data/lib/rubocop/cop/naming/constant_name.rb +1 -1
  231. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  232. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +1 -1
  233. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  234. data/lib/rubocop/cop/naming/inclusive_language.rb +3 -2
  235. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  236. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  237. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  238. data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
  239. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
  240. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  241. data/lib/rubocop/cop/naming/variable_number.rb +18 -18
  242. data/lib/rubocop/cop/security/compound_hash.rb +1 -1
  243. data/lib/rubocop/cop/security/eval.rb +1 -1
  244. data/lib/rubocop/cop/security/json_load.rb +1 -1
  245. data/lib/rubocop/cop/security/marshal_load.rb +1 -1
  246. data/lib/rubocop/cop/security/open.rb +1 -1
  247. data/lib/rubocop/cop/security/yaml_load.rb +1 -1
  248. data/lib/rubocop/cop/style/accessor_grouping.rb +3 -3
  249. data/lib/rubocop/cop/style/alias.rb +1 -1
  250. data/lib/rubocop/cop/style/and_or.rb +11 -11
  251. data/lib/rubocop/cop/style/array_coercion.rb +1 -1
  252. data/lib/rubocop/cop/style/array_join.rb +1 -1
  253. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  254. data/lib/rubocop/cop/style/attr.rb +1 -1
  255. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
  256. data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
  257. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +1 -1
  258. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  259. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  260. data/lib/rubocop/cop/style/case_like_if.rb +1 -1
  261. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  262. data/lib/rubocop/cop/style/class_check.rb +1 -1
  263. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
  264. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  265. data/lib/rubocop/cop/style/class_methods_definitions.rb +1 -1
  266. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  267. data/lib/rubocop/cop/style/collection_compact.rb +1 -1
  268. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  269. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  270. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -1
  271. data/lib/rubocop/cop/style/combinable_loops.rb +1 -1
  272. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  273. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  274. data/lib/rubocop/cop/style/commented_keyword.rb +3 -3
  275. data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
  276. data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
  277. data/lib/rubocop/cop/style/date_time.rb +1 -1
  278. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -1
  279. data/lib/rubocop/cop/style/dir.rb +4 -1
  280. data/lib/rubocop/cop/style/documentation.rb +1 -1
  281. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  282. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  283. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
  284. data/lib/rubocop/cop/style/each_with_object.rb +1 -1
  285. data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
  286. data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
  287. data/lib/rubocop/cop/style/empty_else.rb +10 -10
  288. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
  289. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  290. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  291. data/lib/rubocop/cop/style/encoding.rb +1 -1
  292. data/lib/rubocop/cop/style/end_block.rb +1 -1
  293. data/lib/rubocop/cop/style/endless_method.rb +1 -1
  294. data/lib/rubocop/cop/style/env_home.rb +1 -1
  295. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  296. data/lib/rubocop/cop/style/even_odd.rb +1 -1
  297. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
  298. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
  299. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  300. data/lib/rubocop/cop/style/fetch_env_var.rb +64 -82
  301. data/lib/rubocop/cop/style/float_division.rb +1 -1
  302. data/lib/rubocop/cop/style/for.rb +1 -1
  303. data/lib/rubocop/cop/style/format_string.rb +1 -1
  304. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +5 -2
  305. data/lib/rubocop/cop/style/global_std_stream.rb +1 -1
  306. data/lib/rubocop/cop/style/global_vars.rb +1 -1
  307. data/lib/rubocop/cop/style/guard_clause.rb +1 -1
  308. data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
  309. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
  310. data/lib/rubocop/cop/style/hash_except.rb +1 -1
  311. data/lib/rubocop/cop/style/hash_like_case.rb +1 -1
  312. data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
  313. data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -1
  314. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -1
  315. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  316. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -2
  317. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  318. data/lib/rubocop/cop/style/in_pattern_then.rb +1 -1
  319. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  320. data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
  321. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  322. data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
  323. data/lib/rubocop/cop/style/lambda.rb +1 -1
  324. data/lib/rubocop/cop/style/lambda_call.rb +1 -1
  325. data/lib/rubocop/cop/style/line_end_concatenation.rb +1 -1
  326. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +136 -0
  327. data/lib/rubocop/cop/style/map_to_hash.rb +5 -2
  328. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
  329. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
  330. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +1 -1
  331. data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
  332. data/lib/rubocop/cop/style/min_max.rb +1 -1
  333. data/lib/rubocop/cop/style/missing_else.rb +24 -24
  334. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  335. data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
  336. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  337. data/lib/rubocop/cop/style/module_function.rb +1 -1
  338. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  339. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +1 -1
  340. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  341. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
  342. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +2 -2
  343. data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
  344. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  345. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  346. data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -1
  347. data/lib/rubocop/cop/style/nested_file_dirname.rb +1 -1
  348. data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
  349. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
  350. data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
  351. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  352. data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
  353. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  354. data/lib/rubocop/cop/style/not.rb +1 -1
  355. data/lib/rubocop/cop/style/numbered_parameters.rb +1 -1
  356. data/lib/rubocop/cop/style/numbered_parameters_limit.rb +1 -1
  357. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
  358. data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
  359. data/lib/rubocop/cop/style/numeric_predicate.rb +10 -2
  360. data/lib/rubocop/cop/style/object_then.rb +1 -1
  361. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
  362. data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
  363. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  364. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  365. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +1 -1
  366. data/lib/rubocop/cop/style/or_assignment.rb +1 -1
  367. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
  368. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  369. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  370. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  371. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
  372. data/lib/rubocop/cop/style/proc.rb +1 -1
  373. data/lib/rubocop/cop/style/raise_args.rb +4 -1
  374. data/lib/rubocop/cop/style/random_with_offset.rb +1 -1
  375. data/lib/rubocop/cop/style/redundant_argument.rb +1 -1
  376. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
  377. data/lib/rubocop/cop/style/redundant_begin.rb +17 -6
  378. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -1
  379. data/lib/rubocop/cop/style/redundant_condition.rb +38 -7
  380. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  381. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  382. data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
  383. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  384. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  385. data/lib/rubocop/cop/style/redundant_interpolation.rb +22 -1
  386. data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -1
  387. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
  388. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
  389. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  390. data/lib/rubocop/cop/style/redundant_return.rb +1 -1
  391. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  392. data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
  393. data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +1 -1
  394. data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
  395. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
  396. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  397. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  398. data/lib/rubocop/cop/style/rescue_standard_error.rb +13 -13
  399. data/lib/rubocop/cop/style/return_nil.rb +1 -1
  400. data/lib/rubocop/cop/style/safe_navigation.rb +4 -1
  401. data/lib/rubocop/cop/style/sample.rb +1 -1
  402. data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
  403. data/lib/rubocop/cop/style/self_assignment.rb +1 -1
  404. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  405. data/lib/rubocop/cop/style/send.rb +1 -1
  406. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  407. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  408. data/lib/rubocop/cop/style/single_line_methods.rb +2 -2
  409. data/lib/rubocop/cop/style/slicing_with_range.rb +4 -1
  410. data/lib/rubocop/cop/style/sole_nested_conditional.rb +26 -7
  411. data/lib/rubocop/cop/style/static_class.rb +1 -1
  412. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  413. data/lib/rubocop/cop/style/string_concatenation.rb +6 -7
  414. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
  415. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -1
  416. data/lib/rubocop/cop/style/string_methods.rb +1 -1
  417. data/lib/rubocop/cop/style/strip.rb +1 -1
  418. data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
  419. data/lib/rubocop/cop/style/swap_values.rb +1 -1
  420. data/lib/rubocop/cop/style/symbol_array.rb +6 -2
  421. data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
  422. data/lib/rubocop/cop/style/symbol_proc.rb +3 -3
  423. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  424. data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -1
  425. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
  426. data/lib/rubocop/cop/style/trailing_body_on_module.rb +1 -1
  427. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +1 -1
  428. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -1
  429. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
  430. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +1 -1
  431. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  432. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -1
  433. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
  434. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  435. data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -1
  436. data/lib/rubocop/cop/style/unpack_first.rb +4 -1
  437. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  438. data/lib/rubocop/cop/style/when_then.rb +1 -1
  439. data/lib/rubocop/cop/style/word_array.rb +1 -1
  440. data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
  441. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
  442. data/lib/rubocop/cop/team.rb +2 -2
  443. data/lib/rubocop/cop/util.rb +1 -1
  444. data/lib/rubocop/cops_documentation_generator.rb +18 -1
  445. data/lib/rubocop/formatter/disabled_config_formatter.rb +10 -7
  446. data/lib/rubocop/formatter/markdown_formatter.rb +2 -0
  447. data/lib/rubocop/formatter/simple_text_formatter.rb +4 -2
  448. data/lib/rubocop/magic_comment.rb +27 -2
  449. data/lib/rubocop/options.rb +60 -38
  450. data/lib/rubocop/rake_task.rb +3 -3
  451. data/lib/rubocop/result_cache.rb +2 -1
  452. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  453. data/lib/rubocop/rspec/expect_offense.rb +3 -3
  454. data/lib/rubocop/rspec/shared_contexts.rb +24 -0
  455. data/lib/rubocop/runner.rb +5 -5
  456. data/lib/rubocop/target_ruby.rb +7 -5
  457. data/lib/rubocop/version.rb +1 -1
  458. data/lib/rubocop.rb +2 -0
  459. metadata +9 -6
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for accessing the first element of `String#unpack`
6
+ # Checks for accessing the first element of `String#unpack`
7
7
  # which can be replaced with the shorter method `unpack1`.
8
8
  #
9
9
  # @example
@@ -19,6 +19,9 @@ module RuboCop
19
19
  #
20
20
  class UnpackFirst < Base
21
21
  extend AutoCorrector
22
+ extend TargetRubyVersion
23
+
24
+ minimum_target_ruby_version 2.4
22
25
 
23
26
  MSG = 'Use `%<receiver>s.unpack1(%<format>s)` instead of '\
24
27
  '`%<receiver>s.unpack(%<format>s)%<method>s`.'
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for variable interpolation (like "#@ivar").
6
+ # Checks for variable interpolation (like "#@ivar").
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 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
@@ -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
 
@@ -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")
@@ -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)
@@ -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
@@ -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)
@@ -61,7 +61,9 @@ module RuboCop
61
61
  correction_count,
62
62
  correctable_count,
63
63
  rainbow,
64
- safe_auto_correct: @options[:safe_auto_correct])
64
+ # :safe_autocorrect is a derived option based on several command-line
65
+ # arguments - see Rubocop::Options#add_autocorrection_options
66
+ safe_auto_correct: @options[:safe_autocorrect])
65
67
 
66
68
  output.puts
67
69
  output.puts report.summary
@@ -162,7 +164,7 @@ module RuboCop
162
164
  "#{colorize(text, :yellow)} can be corrected with `rubocop -A`"
163
165
  else
164
166
  text = pluralize(@correctable_count, 'offense')
165
- "#{colorize(text, :yellow)} auto-correctable"
167
+ "#{colorize(text, :yellow)} autocorrectable"
166
168
  end
167
169
  end
168
170
  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
@@ -80,7 +80,7 @@ module RuboCop
80
80
  option(opts, '-x', '--fix-layout') do
81
81
  @options[:only] ||= []
82
82
  @options[:only] << 'Layout'
83
- @options[:auto_correct] = true
83
+ @options[:autocorrect] = true
84
84
  end
85
85
  option(opts, '--safe')
86
86
  add_cop_selection_csv_option('except', opts)
@@ -93,6 +93,7 @@ module RuboCop
93
93
  option(opts, '--force-exclusion')
94
94
  option(opts, '--only-recognized-file-types')
95
95
  option(opts, '--ignore-parent-exclusion')
96
+ option(opts, '--ignore-unrecognized-cops')
96
97
  option(opts, '--force-default-config')
97
98
  option(opts, '-s', '--stdin FILE')
98
99
  option(opts, '-P', '--[no-]parallel')
@@ -128,14 +129,30 @@ module RuboCop
128
129
  end
129
130
  end
130
131
 
131
- def add_autocorrection_options(opts)
132
- section(opts, 'Auto-correction') do
133
- option(opts, '-a', '--auto-correct') { @options[:safe_auto_correct] = true }
132
+ # the autocorrect command-line arguments map to the autocorrect @options values like so:
133
+ # :fix_layout :autocorrect :safe_autocorrect :autocorrect_all
134
+ # -x, --fix-layout true true - -
135
+ # -a, --auto-correct - true true -
136
+ # --safe-auto-correct - true true -
137
+ # -A, --auto-correct-all - true - true
138
+ def add_autocorrection_options(opts) # rubocop:disable Metrics/MethodLength
139
+ section(opts, 'Autocorrection') do
140
+ option(opts, '-a', '--autocorrect') { @options[:safe_autocorrect] = true }
141
+ option(opts, '--auto-correct') do
142
+ handle_deprecated_option('--auto-correct', '--autocorrect')
143
+ @options[:safe_autocorrect] = true
144
+ end
134
145
  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
146
+ handle_deprecated_option('--safe-auto-correct', '--autocorrect')
147
+ @options[:safe_autocorrect] = true
148
+ end
149
+
150
+ option(opts, '-A', '--autocorrect-all') { @options[:autocorrect] = true }
151
+ option(opts, '--auto-correct-all') do
152
+ handle_deprecated_option('--auto-correct-all', '--autocorrect-all')
153
+ @options[:autocorrect] = true
137
154
  end
138
- option(opts, '-A', '--auto-correct-all') { @options[:auto_correct] = true }
155
+
139
156
  option(opts, '--disable-uncorrectable')
140
157
  end
141
158
  end
@@ -208,6 +225,11 @@ module RuboCop
208
225
  end
209
226
  end
210
227
 
228
+ def handle_deprecated_option(old_option, new_option)
229
+ warn rainbow.wrap("#{old_option} is deprecated; use #{new_option} instead.").yellow
230
+ @options[long_opt_symbol([new_option])] = @options.delete(long_opt_symbol([old_option]))
231
+ end
232
+
211
233
  def rainbow
212
234
  @rainbow ||= begin
213
235
  rainbow = Rainbow.new
@@ -236,7 +258,7 @@ module RuboCop
236
258
  end
237
259
 
238
260
  # Finds the option in `args` starting with -- and converts it to a symbol,
239
- # e.g. [..., '--auto-correct', ...] to :auto_correct.
261
+ # e.g. [..., '--autocorrect', ...] to :autocorrect.
240
262
  def long_opt_symbol(args)
241
263
  long_opt = args.find { |arg| arg.start_with?('--') }
242
264
  long_opt[2..].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
@@ -309,15 +331,14 @@ module RuboCop
309
331
  end
310
332
 
311
333
  if display_only_fail_level_offenses_with_autocorrect?
312
- raise OptionArgumentError, '--auto-correct cannot be used with ' \
313
- '--display-only-fail-level-offenses'
334
+ raise OptionArgumentError, '--autocorrect cannot be used with ' \
335
+ '--display-only-fail-level-offenses.'
314
336
  end
315
-
316
337
  validate_auto_gen_config
317
- validate_auto_correct
338
+ validate_autocorrect
318
339
  validate_display_only_failed
319
340
  validate_display_only_failed_and_display_only_correctable
320
- validate_display_only_correctable_and_auto_correct
341
+ validate_display_only_correctable_and_autocorrect
321
342
  disable_parallel_when_invalid_option_combo
322
343
 
323
344
  return if incompatible_options.size <= 1
@@ -347,13 +368,13 @@ module RuboCop
347
368
  format('--display-only-failed can only be used together with --format junit.')
348
369
  end
349
370
 
350
- def validate_display_only_correctable_and_auto_correct
351
- return if !@options.key?(:safe_auto_correct) && !@options.key?(:auto_correct)
371
+ def validate_display_only_correctable_and_autocorrect
372
+ return unless @options.key?(:autocorrect)
352
373
  return if !@options.key?(:display_only_correctable) &&
353
374
  !@options.key?(:display_only_safe_correctable)
354
375
 
355
376
  raise OptionArgumentError,
356
- '--auto-correct cannot be used with --display-only-[safe-]correctable.'
377
+ '--autocorrect cannot be used with --display-only-[safe-]correctable.'
357
378
  end
358
379
 
359
380
  def validate_display_only_failed_and_display_only_correctable
@@ -365,35 +386,34 @@ module RuboCop
365
386
  format('--display-only-failed cannot be used together with other display options.')
366
387
  end
367
388
 
368
- def validate_auto_correct
369
- return if @options.key?(:auto_correct)
389
+ def validate_autocorrect
390
+ return if @options.key?(:autocorrect)
370
391
  return unless @options.key?(:disable_uncorrectable)
371
392
 
372
393
  raise OptionArgumentError,
373
- format('--disable-uncorrectable can only be used together with --auto-correct.')
394
+ format('--disable-uncorrectable can only be used together with --autocorrect.')
374
395
  end
375
396
 
376
397
  def disable_parallel_when_invalid_option_combo
377
398
  return unless @options.key?(:parallel)
378
399
 
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
400
+ invalid_flags = invalid_arguments_for_parallel
390
401
 
391
402
  return if invalid_flags.empty?
392
403
 
393
404
  @options.delete(:parallel)
394
405
 
395
406
  puts '-P/--parallel is being ignored because ' \
396
- "it is not compatible with #{invalid_flags.join(', ')}"
407
+ "it is not compatible with #{invalid_flags.join(', ')}."
408
+ end
409
+
410
+ def invalid_arguments_for_parallel
411
+ [('--auto-gen-config' if @options.key?(:auto_gen_config)),
412
+ ('-F/--fail-fast' if @options.key?(:fail_fast)),
413
+ ('-x/--fix-layout' if @options.key?(:fix_layout)),
414
+ ('-a/--autocorrect' if @options.key?(:safe_autocorrect)),
415
+ ('-A/--autocorrect-all' if @options.key?(:autocorrect_all)),
416
+ ('--cache false' if @options > { cache: 'false' })].compact
397
417
  end
398
418
 
399
419
  def only_includes_redundant_disable?
@@ -402,8 +422,7 @@ module RuboCop
402
422
  end
403
423
 
404
424
  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))
425
+ @options.key?(:display_only_fail_level_offenses) && @options.key?(:autocorrect)
407
426
  end
408
427
 
409
428
  def except_syntax?
@@ -465,7 +484,7 @@ module RuboCop
465
484
  exclude_limit: ['Set the limit for how many files to explicitly exclude.',
466
485
  'If there are more files than the limit, the cop will',
467
486
  "be disabled instead. Default is #{MAX_EXCL}."],
468
- disable_uncorrectable: ['Used with --auto-correct to annotate any',
487
+ disable_uncorrectable: ['Used with --autocorrect to annotate any',
469
488
  'offenses that do not support autocorrect',
470
489
  'with `rubocop:todo` comments.'],
471
490
  force_exclusion: ['Any files excluded by `Exclude` in configuration',
@@ -478,6 +497,7 @@ module RuboCop
478
497
  'by a `rubocop:disable` directive.'],
479
498
  ignore_parent_exclusion: ['Prevent from inheriting `AllCops/Exclude` from',
480
499
  'parent folders.'],
500
+ ignore_unrecognized_cops: ['Ignore unrecognized cops or departments in the config.'],
481
501
  force_default_config: ['Use default configuration even if configuration',
482
502
  'files are present in the directory tree.'],
483
503
  format: ['Choose an output formatter. This option',
@@ -534,12 +554,14 @@ module RuboCop
534
554
  safe: 'Run only safe cops.',
535
555
  stderr: ['Write all output to stderr except for the',
536
556
  'autocorrected source. This is especially useful',
537
- 'when combined with --auto-correct and --stdin.'],
557
+ 'when combined with --autocorrect and --stdin.'],
538
558
  list_target_files: 'List all files RuboCop will inspect.',
539
- auto_correct: 'Auto-correct offenses (only when it\'s safe).',
559
+ autocorrect: 'Autocorrect offenses (only when it\'s safe).',
560
+ auto_correct: '(same, deprecated)',
540
561
  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.',
562
+ autocorrect_all: 'Autocorrect offenses (safe and unsafe).',
563
+ auto_correct_all: '(same, deprecated)',
564
+ fix_layout: 'Run only layout cops, with autocorrect on.',
543
565
  color: 'Force color output on or off.',
544
566
  version: 'Display version.',
545
567
  verbose_version: 'Display verbose version.',
@@ -62,15 +62,15 @@ module RuboCop
62
62
 
63
63
  def setup_subtasks(name, *args, &task_block)
64
64
  namespace(name) do
65
- desc 'Auto-correct RuboCop offenses'
65
+ desc 'Autocorrect RuboCop offenses'
66
66
 
67
67
  task(:auto_correct, *args) do |_, task_args|
68
68
  RakeFileUtils.verbose(verbose) do
69
69
  yield(*[self, task_args].slice(0, task_block.arity)) if task_block
70
- options = full_options.unshift('--auto-correct-all')
70
+ options = full_options.unshift('--autocorrect-all')
71
71
  # `parallel` will automatically be removed from the options internally.
72
72
  # This is a nice to have to suppress the warning message
73
- # about parallel and auto-correct not being compatible.
73
+ # about --parallel and --autocorrect not being compatible.
74
74
  options.delete('--parallel')
75
75
  run_cli(verbose, options)
76
76
  end
@@ -9,7 +9,8 @@ module RuboCop
9
9
  # Provides functionality for caching RuboCop runs.
10
10
  # @api private
11
11
  class ResultCache
12
- NON_CHANGING = %i[color format formatters out debug fail_level auto_correct
12
+ NON_CHANGING = %i[color format formatters out debug fail_level
13
+ fix_layout autocorrect safe_autocorrect autocorrect_all
13
14
  cache fail_fast stdin parallel].freeze
14
15
 
15
16
  # Remove old files so that the cache doesn't grow too big. When the
@@ -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
@@ -116,6 +116,30 @@ RSpec.shared_context 'mock console output' do
116
116
  end
117
117
  end
118
118
 
119
+ RSpec.shared_context 'ruby 2.0', :ruby20 do
120
+ let(:ruby_version) { 2.0 }
121
+ end
122
+
123
+ RSpec.shared_context 'ruby 2.1', :ruby21 do
124
+ let(:ruby_version) { 2.1 }
125
+ end
126
+
127
+ RSpec.shared_context 'ruby 2.2', :ruby22 do
128
+ let(:ruby_version) { 2.2 }
129
+ end
130
+
131
+ RSpec.shared_context 'ruby 2.3', :ruby23 do
132
+ let(:ruby_version) { 2.3 }
133
+ end
134
+
135
+ RSpec.shared_context 'ruby 2.4', :ruby24 do
136
+ let(:ruby_version) { 2.4 }
137
+ end
138
+
139
+ RSpec.shared_context 'ruby 2.5', :ruby25 do
140
+ let(:ruby_version) { 2.5 }
141
+ end
142
+
119
143
  RSpec.shared_context 'ruby 2.6', :ruby26 do
120
144
  let(:ruby_version) { 2.6 }
121
145
  end
@@ -143,10 +143,10 @@ module RuboCop
143
143
 
144
144
  if cache&.valid?
145
145
  offenses = cache.load
146
- # If we're running --auto-correct and the cache says there are
146
+ # If we're running --autocorrect and the cache says there are
147
147
  # offenses, we need to actually inspect the file. If the cache shows no
148
148
  # offenses, we're good.
149
- real_run_needed = @options[:auto_correct] && offenses.any?
149
+ real_run_needed = @options[:autocorrect] && offenses.any?
150
150
  else
151
151
  real_run_needed = true
152
152
  end
@@ -240,7 +240,7 @@ module RuboCop
240
240
  # error message.
241
241
  offenses_by_iteration = []
242
242
 
243
- # When running with --auto-correct, we need to inspect the file (which
243
+ # When running with --autocorrect, we need to inspect the file (which
244
244
  # includes writing a corrected version of it) until no more corrections
245
245
  # are made. This is because automatic corrections can introduce new
246
246
  # offenses. In the normal case the loop is only executed once.
@@ -382,7 +382,7 @@ module RuboCop
382
382
  if @options[:display_only_fail_level_offenses]
383
383
  offenses.select { |o| considered_failure?(o) }
384
384
  elsif @options[:display_only_safe_correctable]
385
- offenses.select { |o| supports_safe_auto_correct?(o) }
385
+ offenses.select { |o| supports_safe_autocorrect?(o) }
386
386
  elsif @options[:display_only_correctable]
387
387
  offenses.select(&:correctable?)
388
388
  else
@@ -390,7 +390,7 @@ module RuboCop
390
390
  end
391
391
  end
392
392
 
393
- def supports_safe_auto_correct?(offense)
393
+ def supports_safe_autocorrect?(offense)
394
394
  cop_class = Cop::Registry.global.find_by_cop_name(offense.cop_name)
395
395
  default_cfg = default_config(offense.cop_name)
396
396
 
@@ -4,8 +4,8 @@ module RuboCop
4
4
  # The kind of Ruby that code inspected by RuboCop is written in.
5
5
  # @api private
6
6
  class TargetRuby
7
- KNOWN_RUBIES = [2.6, 2.7, 3.0, 3.1, 3.2].freeze
8
- DEFAULT_VERSION = KNOWN_RUBIES.first
7
+ KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2].freeze
8
+ DEFAULT_VERSION = 2.6
9
9
 
10
10
  OBSOLETE_RUBIES = {
11
11
  1.9 => '0.41',
@@ -172,7 +172,7 @@ module RuboCop
172
172
  right_hand_side = version_from_gemspec_file(file)
173
173
  return if right_hand_side.nil?
174
174
 
175
- find_minimal_known_ruby(right_hand_side)
175
+ find_default_minimal_known_ruby(right_hand_side)
176
176
  end
177
177
 
178
178
  def gemspec_filename
@@ -206,11 +206,13 @@ module RuboCop
206
206
  array.children.map(&:value)
207
207
  end
208
208
 
209
- def find_minimal_known_ruby(right_hand_side)
209
+ def find_default_minimal_known_ruby(right_hand_side)
210
210
  version = version_from_right_hand_side(right_hand_side)
211
211
  requirement = Gem::Requirement.new(version)
212
212
 
213
- KNOWN_RUBIES.detect { |v| requirement.satisfied_by?(Gem::Version.new("#{v}.99")) }
213
+ KNOWN_RUBIES.detect do |v|
214
+ v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
215
+ end
214
216
  end
215
217
  end
216
218