rubocop 0.89.0 → 0.92.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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/config/default.yml +128 -14
  4. data/lib/rubocop.rb +30 -4
  5. data/lib/rubocop/cached_data.rb +1 -0
  6. data/lib/rubocop/cli/command.rb +1 -0
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +9 -0
  10. data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
  11. data/lib/rubocop/cli/command/show_cops.rb +2 -1
  12. data/lib/rubocop/cli/command/version.rb +1 -0
  13. data/lib/rubocop/cli/environment.rb +1 -0
  14. data/lib/rubocop/comment_config.rb +17 -10
  15. data/lib/rubocop/config.rb +1 -1
  16. data/lib/rubocop/config_loader.rb +21 -10
  17. data/lib/rubocop/config_loader_resolver.rb +1 -0
  18. data/lib/rubocop/config_obsoletion.rb +1 -0
  19. data/lib/rubocop/config_regeneration.rb +33 -0
  20. data/lib/rubocop/config_store.rb +3 -3
  21. data/lib/rubocop/config_validator.rb +4 -1
  22. data/lib/rubocop/cop/base.rb +23 -0
  23. data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
  24. data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
  25. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
  26. data/lib/rubocop/cop/commissioner.rb +47 -7
  27. data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
  28. data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
  29. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
  30. data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
  31. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
  32. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
  33. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +5 -10
  34. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
  35. data/lib/rubocop/cop/documentation.rb +22 -0
  36. data/lib/rubocop/cop/generator.rb +2 -1
  37. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
  38. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
  39. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
  40. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  41. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
  42. data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
  43. data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
  44. data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
  45. data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
  46. data/lib/rubocop/cop/layout/class_structure.rb +14 -17
  47. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
  48. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  49. data/lib/rubocop/cop/layout/condition_position.rb +13 -15
  50. data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
  51. data/lib/rubocop/cop/layout/dot_position.rb +21 -17
  52. data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
  53. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
  54. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
  55. data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
  56. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
  57. data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
  58. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +18 -14
  59. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
  60. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +4 -7
  61. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
  62. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
  63. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
  65. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
  66. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
  67. data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
  68. data/lib/rubocop/cop/layout/extra_spacing.rb +14 -21
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
  70. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
  71. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
  72. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
  73. data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
  74. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
  75. data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
  76. data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
  77. data/lib/rubocop/cop/layout/leading_comment_space.rb +12 -10
  78. data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
  79. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
  80. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
  81. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
  83. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
  84. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
  85. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
  86. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
  87. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
  88. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
  89. data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
  90. data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
  91. data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
  92. data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
  93. data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
  94. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +22 -17
  95. data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
  96. data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
  97. data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
  98. data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
  99. data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
  100. data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
  101. data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
  102. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
  103. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
  104. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
  105. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +17 -16
  106. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
  107. data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
  108. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
  109. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
  110. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
  111. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
  112. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
  113. data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
  114. data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
  115. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
  116. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -1
  117. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
  118. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  119. data/lib/rubocop/cop/lint/debugger.rb +2 -3
  120. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
  121. data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
  122. data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
  123. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
  124. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  125. data/lib/rubocop/cop/lint/empty_file.rb +50 -0
  126. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
  127. data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
  128. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
  129. data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
  130. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
  131. data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
  132. data/lib/rubocop/cop/lint/missing_super.rb +11 -11
  133. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +2 -35
  134. data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
  135. data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
  136. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +33 -15
  137. data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
  138. data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
  139. data/lib/rubocop/cop/lint/rand_one.rb +2 -1
  140. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +36 -29
  141. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
  142. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  143. data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
  144. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
  145. data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
  146. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
  147. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
  148. data/lib/rubocop/cop/lint/to_json.rb +16 -5
  149. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
  150. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
  151. data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
  152. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
  153. data/lib/rubocop/cop/lint/uri_regexp.rb +10 -25
  154. data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
  155. data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
  156. data/lib/rubocop/cop/lint/useless_times.rb +106 -0
  157. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
  158. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
  159. data/lib/rubocop/cop/migration/department_name.rb +2 -2
  160. data/lib/rubocop/cop/mixin/alignment.rb +5 -1
  161. data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
  162. data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
  163. data/lib/rubocop/cop/mixin/check_line_breakable.rb +17 -8
  164. data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
  165. data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
  166. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  167. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
  168. data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
  169. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
  170. data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -2
  171. data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
  172. data/lib/rubocop/cop/mixin/hash_transform_method.rb +31 -12
  173. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  174. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
  175. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +13 -12
  176. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
  177. data/lib/rubocop/cop/mixin/percent_array.rb +16 -9
  178. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  179. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +1 -1
  180. data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
  181. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
  182. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
  183. data/lib/rubocop/cop/mixin/statement_modifier.rb +12 -6
  184. data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
  185. data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -11
  186. data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
  187. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  188. data/lib/rubocop/cop/naming/file_name.rb +1 -1
  189. data/lib/rubocop/cop/offense.rb +1 -0
  190. data/lib/rubocop/cop/security/eval.rb +1 -0
  191. data/lib/rubocop/cop/security/json_load.rb +1 -0
  192. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  193. data/lib/rubocop/cop/security/open.rb +1 -0
  194. data/lib/rubocop/cop/security/yaml_load.rb +1 -0
  195. data/lib/rubocop/cop/severity.rb +0 -8
  196. data/lib/rubocop/cop/style/access_modifier_declarations.rb +8 -19
  197. data/lib/rubocop/cop/style/accessor_grouping.rb +20 -20
  198. data/lib/rubocop/cop/style/alias.rb +36 -33
  199. data/lib/rubocop/cop/style/and_or.rb +9 -11
  200. data/lib/rubocop/cop/style/array_coercion.rb +4 -0
  201. data/lib/rubocop/cop/style/array_join.rb +7 -8
  202. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  203. data/lib/rubocop/cop/style/attr.rb +12 -9
  204. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +4 -5
  205. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  206. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  207. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -12
  208. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  209. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  210. data/lib/rubocop/cop/style/case_equality.rb +11 -3
  211. data/lib/rubocop/cop/style/case_like_if.rb +37 -18
  212. data/lib/rubocop/cop/style/class_and_module_children.rb +16 -11
  213. data/lib/rubocop/cop/style/class_check.rb +6 -11
  214. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  215. data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
  216. data/lib/rubocop/cop/style/class_vars.rb +7 -12
  217. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  218. data/lib/rubocop/cop/style/colon_method_call.rb +6 -7
  219. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  220. data/lib/rubocop/cop/style/combinable_loops.rb +84 -0
  221. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  222. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  223. data/lib/rubocop/cop/style/commented_keyword.rb +8 -9
  224. data/lib/rubocop/cop/style/conditional_assignment.rb +50 -61
  225. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  226. data/lib/rubocop/cop/style/copyright.rb +12 -12
  227. data/lib/rubocop/cop/style/date_time.rb +13 -2
  228. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  229. data/lib/rubocop/cop/style/dir.rb +8 -10
  230. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  231. data/lib/rubocop/cop/style/documentation.rb +2 -4
  232. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  233. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  234. data/lib/rubocop/cop/style/double_negation.rb +3 -2
  235. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  236. data/lib/rubocop/cop/style/each_with_object.rb +16 -17
  237. data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
  238. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  239. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  240. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
  241. data/lib/rubocop/cop/style/empty_literal.rb +18 -17
  242. data/lib/rubocop/cop/style/empty_method.rb +5 -8
  243. data/lib/rubocop/cop/style/encoding.rb +5 -9
  244. data/lib/rubocop/cop/style/end_block.rb +4 -6
  245. data/lib/rubocop/cop/style/eval_with_location.rb +6 -10
  246. data/lib/rubocop/cop/style/even_odd.rb +8 -11
  247. data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -26
  248. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
  249. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  250. data/lib/rubocop/cop/style/float_division.rb +3 -1
  251. data/lib/rubocop/cop/style/for.rb +11 -15
  252. data/lib/rubocop/cop/style/format_string.rb +18 -23
  253. data/lib/rubocop/cop/style/format_string_token.rb +4 -7
  254. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  255. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  256. data/lib/rubocop/cop/style/guard_clause.rb +4 -4
  257. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
  258. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  259. data/lib/rubocop/cop/style/hash_syntax.rb +6 -7
  260. data/lib/rubocop/cop/style/hash_transform_keys.rb +19 -11
  261. data/lib/rubocop/cop/style/hash_transform_values.rb +18 -10
  262. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
  263. data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
  264. data/lib/rubocop/cop/style/if_unless_modifier.rb +11 -17
  265. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
  266. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  267. data/lib/rubocop/cop/style/implicit_runtime_error.rb +2 -1
  268. data/lib/rubocop/cop/style/infinite_loop.rb +23 -23
  269. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  270. data/lib/rubocop/cop/style/inverse_methods.rb +20 -29
  271. data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
  272. data/lib/rubocop/cop/style/lambda.rb +7 -12
  273. data/lib/rubocop/cop/style/lambda_call.rb +17 -14
  274. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  275. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  276. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -11
  277. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  278. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -6
  279. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +12 -3
  280. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  281. data/lib/rubocop/cop/style/min_max.rb +8 -12
  282. data/lib/rubocop/cop/style/missing_else.rb +13 -13
  283. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
  284. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  285. data/lib/rubocop/cop/style/mixin_usage.rb +9 -28
  286. data/lib/rubocop/cop/style/module_function.rb +10 -13
  287. data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
  288. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  289. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  290. data/lib/rubocop/cop/style/multiline_memoization.rb +12 -10
  291. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
  292. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
  293. data/lib/rubocop/cop/style/multiline_when_then.rb +10 -11
  294. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  295. data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
  296. data/lib/rubocop/cop/style/negated_if.rb +6 -6
  297. data/lib/rubocop/cop/style/negated_unless.rb +6 -6
  298. data/lib/rubocop/cop/style/negated_while.rb +7 -15
  299. data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
  300. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +14 -12
  301. data/lib/rubocop/cop/style/nested_ternary_operator.rb +14 -16
  302. data/lib/rubocop/cop/style/next.rb +10 -14
  303. data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
  304. data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
  305. data/lib/rubocop/cop/style/not.rb +20 -26
  306. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
  307. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
  308. data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
  309. data/lib/rubocop/cop/style/option_hash.rb +1 -1
  310. data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
  311. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
  312. data/lib/rubocop/cop/style/or_assignment.rb +13 -10
  313. data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
  314. data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
  315. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
  316. data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
  317. data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
  318. data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
  319. data/lib/rubocop/cop/style/proc.rb +6 -6
  320. data/lib/rubocop/cop/style/raise_args.rb +15 -24
  321. data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
  322. data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
  323. data/lib/rubocop/cop/style/redundant_begin.rb +7 -9
  324. data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
  325. data/lib/rubocop/cop/style/redundant_condition.rb +5 -6
  326. data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
  327. data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
  328. data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
  329. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
  330. data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
  331. data/lib/rubocop/cop/style/redundant_interpolation.rb +25 -24
  332. data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
  333. data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
  334. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +6 -13
  335. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +5 -14
  336. data/lib/rubocop/cop/style/redundant_return.rb +17 -17
  337. data/lib/rubocop/cop/style/redundant_self.rb +9 -11
  338. data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
  339. data/lib/rubocop/cop/style/redundant_sort.rb +12 -31
  340. data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
  341. data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
  342. data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
  343. data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
  344. data/lib/rubocop/cop/style/return_nil.rb +5 -5
  345. data/lib/rubocop/cop/style/safe_navigation.rb +22 -16
  346. data/lib/rubocop/cop/style/sample.rb +12 -14
  347. data/lib/rubocop/cop/style/self_assignment.rb +26 -22
  348. data/lib/rubocop/cop/style/semicolon.rb +6 -9
  349. data/lib/rubocop/cop/style/send.rb +4 -5
  350. data/lib/rubocop/cop/style/signal_exception.rb +23 -19
  351. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
  352. data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
  353. data/lib/rubocop/cop/style/single_line_methods.rb +18 -17
  354. data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
  355. data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
  356. data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
  357. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
  358. data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
  359. data/lib/rubocop/cop/style/string_concatenation.rb +16 -2
  360. data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
  361. data/lib/rubocop/cop/style/string_methods.rb +7 -17
  362. data/lib/rubocop/cop/style/strip.rb +9 -14
  363. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
  364. data/lib/rubocop/cop/style/symbol_array.rb +5 -16
  365. data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
  366. data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
  367. data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
  368. data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
  369. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
  370. data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
  371. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
  372. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
  373. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
  374. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
  375. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
  376. data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
  377. data/lib/rubocop/cop/style/unless_else.rb +5 -8
  378. data/lib/rubocop/cop/style/unpack_first.rb +5 -8
  379. data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
  380. data/lib/rubocop/cop/style/when_then.rb +4 -6
  381. data/lib/rubocop/cop/style/while_until_do.rb +6 -16
  382. data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
  383. data/lib/rubocop/cop/style/word_array.rb +5 -23
  384. data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
  385. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
  386. data/lib/rubocop/cop/team.rb +1 -0
  387. data/lib/rubocop/cop/util.rb +2 -1
  388. data/lib/rubocop/cop/utils/format_string.rb +3 -5
  389. data/lib/rubocop/cop/variable_force.rb +2 -0
  390. data/lib/rubocop/cops_documentation_generator.rb +5 -3
  391. data/lib/rubocop/core_ext/string.rb +2 -2
  392. data/lib/rubocop/directive_comment.rb +32 -0
  393. data/lib/rubocop/ext/regexp_node.rb +46 -0
  394. data/lib/rubocop/file_finder.rb +1 -0
  395. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
  396. data/lib/rubocop/formatter/disabled_config_formatter.rb +13 -6
  397. data/lib/rubocop/formatter/html_formatter.rb +2 -0
  398. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  399. data/lib/rubocop/formatter/progress_formatter.rb +2 -1
  400. data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
  401. data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
  402. data/lib/rubocop/name_similarity.rb +1 -0
  403. data/lib/rubocop/options.rb +43 -20
  404. data/lib/rubocop/remote_config.rb +1 -0
  405. data/lib/rubocop/result_cache.rb +31 -13
  406. data/lib/rubocop/rspec/cop_helper.rb +4 -1
  407. data/lib/rubocop/rspec/expect_offense.rb +14 -9
  408. data/lib/rubocop/rspec/shared_contexts.rb +13 -5
  409. data/lib/rubocop/runner.rb +35 -15
  410. data/lib/rubocop/string_interpreter.rb +3 -0
  411. data/lib/rubocop/target_finder.rb +5 -1
  412. data/lib/rubocop/target_ruby.rb +7 -1
  413. data/lib/rubocop/version.rb +7 -1
  414. data/lib/rubocop/yaml_duplication_checker.rb +1 -0
  415. metadata +26 -14
  416. data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Extensions to the core String class
4
4
  class String
5
- unless method_defined? :blank?
5
+ unless method_defined?(:blank?) && ' '.blank?
6
6
  # Checks whether a string is blank. A string is considered blank if it
7
7
  # is either empty or contains only whitespace characters.
8
8
  #
@@ -17,7 +17,7 @@ class String
17
17
  # @example
18
18
  # ' test'.blank? #=> false
19
19
  def blank?
20
- empty? || strip.empty?
20
+ empty? || lstrip.empty?
21
21
  end
22
22
  end
23
23
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ # This class wraps the `Parser::Source::Comment` object that represents a
5
+ # special `rubocop:disable` and `rubocop:enable` comment and exposes what
6
+ # cops it contains.
7
+ class DirectiveComment
8
+ attr_reader :comment
9
+
10
+ def initialize(comment)
11
+ @comment = comment
12
+ end
13
+
14
+ # Return all the cops specified in the directive
15
+ def cops
16
+ match = comment.text.match(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
17
+ return unless match
18
+
19
+ cops_string = match.captures[1]
20
+ cops_string.split(/,\s*/).uniq.sort
21
+ end
22
+
23
+ # Checks if this directive contains all the given cop names
24
+ def match?(cop_names)
25
+ cops == cop_names.uniq.sort
26
+ end
27
+
28
+ def range
29
+ comment.location.expression
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Ext
5
+ # Extensions to AST::RegexpNode for our cached parsed regexp info
6
+ module RegexpNode
7
+ ANY = Object.new
8
+ def ANY.==(_)
9
+ true
10
+ end
11
+ private_constant :ANY
12
+
13
+ class << self
14
+ attr_reader :parsed_cache
15
+ end
16
+ @parsed_cache = {}
17
+
18
+ # @return [Regexp::Expression::Root, nil]
19
+ def parsed_tree
20
+ return if interpolation?
21
+
22
+ str = content
23
+ Ext::RegexpNode.parsed_cache[str] ||= begin
24
+ Regexp::Parser.parse(str)
25
+ rescue StandardError
26
+ nil
27
+ end
28
+ end
29
+
30
+ def each_capture(named: ANY)
31
+ return enum_for(__method__, named: named) unless block_given?
32
+
33
+ parsed_tree&.traverse do |event, exp, _index|
34
+ yield(exp) if event == :enter &&
35
+ named == exp.respond_to?(:name) &&
36
+ exp.respond_to?(:capturing?) &&
37
+ exp.capturing?
38
+ end
39
+
40
+ self
41
+ end
42
+
43
+ AST::RegexpNode.include self
44
+ end
45
+ end
46
+ end
@@ -4,6 +4,7 @@ require 'pathname'
4
4
 
5
5
  module RuboCop
6
6
  # Common methods for finding files.
7
+ # @api private
7
8
  module FileFinder
8
9
  def self.root_level=(level)
9
10
  @root_level = level
@@ -9,7 +9,8 @@ module RuboCop
9
9
 
10
10
  report_summary(inspected_files.size,
11
11
  @total_offense_count,
12
- @total_correction_count)
12
+ @total_correction_count,
13
+ @total_correctable_count)
13
14
  end
14
15
  end
15
16
  end
@@ -32,7 +32,6 @@ module RuboCop
32
32
  @exclude_limit_option = @options[:exclude_limit]
33
33
  @exclude_limit = Integer(@exclude_limit_option ||
34
34
  RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS)
35
- @show_offense_counts = !@options[:no_offense_counts]
36
35
  end
37
36
 
38
37
  def file_finished(file, offenses)
@@ -56,6 +55,14 @@ module RuboCop
56
55
 
57
56
  private
58
57
 
58
+ def show_timestamp?
59
+ @options.fetch(:auto_gen_timestamp, true)
60
+ end
61
+
62
+ def show_offense_counts?
63
+ @options.fetch(:offense_counts, true)
64
+ end
65
+
59
66
  def command
60
67
  command = 'rubocop --auto-gen-config'
61
68
 
@@ -66,15 +73,15 @@ module RuboCop
66
73
  format(' --exclude-limit %<limit>d',
67
74
  limit: Integer(@exclude_limit_option))
68
75
  end
69
- command += ' --no-offense-counts' if @options[:no_offense_counts]
76
+ command += ' --no-offense-counts' unless show_offense_counts?
70
77
 
71
- command += ' --no-auto-gen-timestamp' if @options[:no_auto_gen_timestamp]
78
+ command += ' --no-auto-gen-timestamp' unless show_timestamp?
72
79
 
73
80
  command
74
81
  end
75
82
 
76
83
  def timestamp
77
- @options[:no_auto_gen_timestamp] ? '' : "on #{Time.now.utc} "
84
+ show_timestamp? ? "on #{Time.now.utc} " : ''
78
85
  end
79
86
 
80
87
  def output_offenses
@@ -112,9 +119,9 @@ module RuboCop
112
119
  end
113
120
 
114
121
  def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
115
- output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
122
+ output_buffer.puts "# Offense count: #{offense_count}" if show_offense_counts?
116
123
 
117
- cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
124
+ cop_class = Cop::Registry.global.find_by_cop_name(cop_name)
118
125
  output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.support_autocorrect?
119
126
 
120
127
  default_cfg = default_config(cop_name)
@@ -90,9 +90,11 @@ module RuboCop
90
90
  end
91
91
 
92
92
  # Make Kernel#binding public.
93
+ # rubocop:disable Lint/UselessMethodDefinition
93
94
  def binding
94
95
  super
95
96
  end
97
+ # rubocop:enable Lint/UselessMethodDefinition
96
98
 
97
99
  def decorated_message(offense)
98
100
  offense.message.gsub(/`(.+?)`/) do
@@ -34,7 +34,7 @@ module RuboCop
34
34
  # https://github.com/mikian/rubocop-junit-formatter/blob/v0.1.4/lib/rubocop/formatter/junit_formatter.rb#L9
35
35
  #
36
36
  # In the future, it would be preferable to return only enabled cops.
37
- Cop::Cop.all.each do |cop|
37
+ Cop::Registry.all.each do |cop|
38
38
  target_offenses = offenses_for_cop(offenses, cop)
39
39
 
40
40
  next unless relevant_for_output?(options, target_offenses)
@@ -45,7 +45,8 @@ module RuboCop
45
45
 
46
46
  report_summary(inspected_files.size,
47
47
  @total_offense_count,
48
- @total_correction_count)
48
+ @total_correction_count,
49
+ @total_correctable_count)
49
50
  end
50
51
 
51
52
  def report_file_as_mark(offenses)
@@ -5,7 +5,7 @@ module RuboCop
5
5
  # If no offenses are found, no output is displayed.
6
6
  # Otherwise, SimpleTextFormatter's output is displayed.
7
7
  class QuietFormatter < SimpleTextFormatter
8
- def report_summary(file_count, offense_count, correction_count)
8
+ def report_summary(file_count, offense_count, correction_count, correctable_count)
9
9
  super unless offense_count.zero?
10
10
  end
11
11
  end
@@ -23,6 +23,7 @@ module RuboCop
23
23
  def started(_target_files)
24
24
  @total_offense_count = 0
25
25
  @total_correction_count = 0
26
+ @total_correctable_count = 0
26
27
  end
27
28
 
28
29
  def file_finished(file, offenses)
@@ -35,7 +36,8 @@ module RuboCop
35
36
  def finished(inspected_files)
36
37
  report_summary(inspected_files.count,
37
38
  @total_offense_count,
38
- @total_correction_count)
39
+ @total_correction_count,
40
+ @total_correctable_count)
39
41
  end
40
42
 
41
43
  def report_file(file, offenses)
@@ -52,11 +54,13 @@ module RuboCop
52
54
  end
53
55
  end
54
56
 
55
- def report_summary(file_count, offense_count, correction_count)
57
+ def report_summary(file_count, offense_count, correction_count, correctable_count)
56
58
  report = Report.new(file_count,
57
59
  offense_count,
58
60
  correction_count,
59
- rainbow)
61
+ correctable_count,
62
+ rainbow,
63
+ safe_auto_correct: @options[:safe_auto_correct])
60
64
 
61
65
  output.puts
62
66
  output.puts report.summary
@@ -66,7 +70,9 @@ module RuboCop
66
70
 
67
71
  def count_stats(offenses)
68
72
  @total_offense_count += offenses.count
69
- @total_correction_count += offenses.count(&:corrected?)
73
+ corrected = offenses.count(&:corrected?)
74
+ @total_correction_count += corrected
75
+ @total_correctable_count += offenses.count(&:correctable?) - corrected
70
76
  end
71
77
 
72
78
  def colored_severity_code(offense)
@@ -96,16 +102,30 @@ module RuboCop
96
102
  include Colorizable
97
103
  include TextUtil
98
104
 
99
- def initialize(file_count, offense_count, correction_count, rainbow)
105
+ # rubocop:disable Metrics/ParameterLists
106
+ def initialize(
107
+ file_count, offense_count, correction_count, correctable_count, rainbow,
108
+ safe_auto_correct: false
109
+ )
100
110
  @file_count = file_count
101
111
  @offense_count = offense_count
102
112
  @correction_count = correction_count
113
+ @correctable_count = correctable_count
103
114
  @rainbow = rainbow
115
+ @safe_auto_correct = safe_auto_correct
104
116
  end
117
+ # rubocop:enable Metrics/ParameterLists
105
118
 
106
119
  def summary
107
120
  if @correction_count.positive?
108
- "#{files} inspected, #{offenses} detected, #{corrections} corrected"
121
+ if @correctable_count.positive?
122
+ "#{files} inspected, #{offenses} detected, #{corrections} corrected,"\
123
+ " #{correctable}"
124
+ else
125
+ "#{files} inspected, #{offenses} detected, #{corrections} corrected"
126
+ end
127
+ elsif @correctable_count.positive?
128
+ "#{files} inspected, #{offenses} detected, #{correctable}"
109
129
  else
110
130
  "#{files} inspected, #{offenses} detected"
111
131
  end
@@ -132,6 +152,16 @@ module RuboCop
132
152
 
133
153
  colorize(text, color)
134
154
  end
155
+
156
+ def correctable
157
+ if @safe_auto_correct
158
+ text = pluralize(@correctable_count, 'more offense')
159
+ "#{colorize(text, :yellow)} can be corrected with `rubocop -A`"
160
+ else
161
+ text = pluralize(@correctable_count, 'offense')
162
+ "#{colorize(text, :yellow)} auto-correctable"
163
+ end
164
+ end
135
165
  end
136
166
  end
137
167
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module RuboCop
4
4
  # Common functionality for finding names that are similar to a given name.
5
+ # @api private
5
6
  module NameSimilarity
6
7
  module_function
7
8
 
@@ -8,6 +8,7 @@ module RuboCop
8
8
  class OptionArgumentError < StandardError; end
9
9
 
10
10
  # This class handles command line options.
11
+ # @api private
11
12
  class Options
12
13
  E_STDIN_NO_PATH = '-s/--stdin requires exactly one path, relative to the ' \
13
14
  'root of the project. RuboCop will use this path to determine which ' \
@@ -68,6 +69,7 @@ module RuboCop
68
69
 
69
70
  add_severity_option(opts)
70
71
  add_flags_with_optional_args(opts)
72
+ add_cache_options(opts)
71
73
  add_boolean_flags(opts)
72
74
  add_aliases(opts)
73
75
 
@@ -94,7 +96,7 @@ module RuboCop
94
96
  ['']
95
97
  else
96
98
  list.split(',').map do |c|
97
- Cop::Cop.qualified_cop_name(c, "--#{option} option")
99
+ Cop::Registry.qualified_cop_name(c, "--#{option} option")
98
100
  end
99
101
  end
100
102
  end
@@ -112,20 +114,19 @@ module RuboCop
112
114
  def add_auto_gen_options(opts)
113
115
  option(opts, '--auto-gen-config')
114
116
 
117
+ option(opts, '--regenerate-todo') do
118
+ @options.replace(ConfigRegeneration.new.options.merge(@options))
119
+ end
120
+
115
121
  option(opts, '--exclude-limit COUNT') do
116
122
  @validator.validate_exclude_limit_option
117
123
  end
118
124
 
119
125
  option(opts, '--disable-uncorrectable')
120
126
 
121
- option(opts, '--no-offense-counts') do
122
- @options[:no_offense_counts] = true
123
- end
124
-
125
- option(opts, '--auto-gen-only-exclude')
126
- option(opts, '--no-auto-gen-timestamp') do
127
- @options[:no_auto_gen_timestamp] = true
128
- end
127
+ option(opts, '--[no-]offense-counts')
128
+ option(opts, '--[no-]auto-gen-only-exclude')
129
+ option(opts, '--[no-]auto-gen-timestamp')
129
130
 
130
131
  option(opts, '--init')
131
132
  end
@@ -163,10 +164,16 @@ module RuboCop
163
164
  end
164
165
  end
165
166
 
167
+ def add_cache_options(opts)
168
+ option(opts, '-C', '--cache FLAG')
169
+ option(opts, '--cache-root DIR') do
170
+ @validator.validate_cache_enabled_for_cache_root
171
+ end
172
+ end
173
+
166
174
  # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
167
175
  def add_boolean_flags(opts)
168
176
  option(opts, '-F', '--fail-fast')
169
- option(opts, '-C', '--cache FLAG')
170
177
  option(opts, '-d', '--debug')
171
178
  option(opts, '-D', '--[no-]display-cop-names')
172
179
  option(opts, '-E', '--extra-details')
@@ -232,6 +239,7 @@ module RuboCop
232
239
  end
233
240
 
234
241
  # Validates option arguments and the options' compatibility with each other.
242
+ # @api private
235
243
  class OptionsValidator
236
244
  class << self
237
245
  # Cop name validation must be done later than option parsing, so it's not
@@ -239,8 +247,8 @@ module RuboCop
239
247
  def validate_cop_list(names)
240
248
  return unless names
241
249
 
242
- cop_names = Cop::Cop.registry.names
243
- departments = Cop::Cop.registry.departments.map(&:to_s)
250
+ cop_names = Cop::Registry.global.names
251
+ departments = Cop::Registry.global.departments.map(&:to_s)
244
252
 
245
253
  names.each do |name|
246
254
  next if cop_names.include?(name)
@@ -309,7 +317,7 @@ module RuboCop
309
317
 
310
318
  message = '--%<flag>s can only be used together with --auto-gen-config.'
311
319
 
312
- %i[exclude_limit no_offense_counts no_auto_gen_timestamp
320
+ %i[exclude_limit offense_counts auto_gen_timestamp
313
321
  auto_gen_only_exclude].each do |option|
314
322
  if @options.key?(option)
315
323
  raise OptionArgumentError,
@@ -390,9 +398,17 @@ module RuboCop
390
398
  # of option order.
391
399
  raise OptionParser::MissingArgument
392
400
  end
401
+
402
+ def validate_cache_enabled_for_cache_root
403
+ return unless @options[:cache] == 'false'
404
+
405
+ raise OptionArgumentError, '--cache-root can not be used with ' \
406
+ '--cache false'
407
+ end
393
408
  end
394
409
 
395
410
  # This module contains help texts for command line options.
411
+ # @api private
396
412
  module OptionsHelp
397
413
  MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
398
414
  FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
@@ -406,17 +422,20 @@ module RuboCop
406
422
  config: 'Specify configuration file.',
407
423
  auto_gen_config: ['Generate a configuration file acting as a',
408
424
  'TODO list.'],
409
- no_offense_counts: ['Do not include offense counts in configuration',
410
- 'file generated by --auto-gen-config.'],
411
- no_auto_gen_timestamp:
412
- ['Do not include the date and time when',
413
- 'the --auto-gen-config was run in the file it',
414
- 'generates.'],
425
+ regenerate_todo: ['Regenerate the TODO configuration file using',
426
+ 'the last configuration. If there is no existing',
427
+ 'TODO file, acts like --auto-gen-config.'],
428
+ offense_counts: ['Include offense counts in configuration',
429
+ 'file generated by --auto-gen-config.',
430
+ 'Default is true.'],
431
+ auto_gen_timestamp:
432
+ ['Include the date and time when the --auto-gen-config',
433
+ 'was run in the file it generates. Default is true.'],
415
434
  auto_gen_only_exclude:
416
435
  ['Generate only Exclude parameters and not Max',
417
436
  'when running --auto-gen-config, except if the',
418
437
  'number of files with offenses is bigger than',
419
- 'exclude-limit.'],
438
+ 'exclude-limit. Default is false.'],
420
439
  exclude_limit: ['Used together with --auto-gen-config to',
421
440
  'set the limit for how many Exclude',
422
441
  "properties to generate. Default is #{MAX_EXCL}."],
@@ -461,6 +480,10 @@ module RuboCop
461
480
  cache: ["Use result caching (FLAG=true) or don't",
462
481
  '(FLAG=false), default determined by',
463
482
  'configuration parameter AllCops: UseCache.'],
483
+ cache_root: ['Set the cache root directory.',
484
+ 'Takes precedence over the configuration',
485
+ 'parameter AllCops: CacheRootDirectory and',
486
+ 'the $RUBOCOP_CACHE_ROOT environment variable.'],
464
487
  debug: 'Display debug info.',
465
488
  display_cop_names: ['Display cop names in offense messages.',
466
489
  'Default is true.'],