rubocop 1.12.1 → 1.16.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 (412) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/config/default.yml +78 -8
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +10 -1
  6. data/lib/rubocop/cached_data.rb +1 -3
  7. data/lib/rubocop/cli.rb +4 -6
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  11. data/lib/rubocop/comment_config.rb +2 -7
  12. data/lib/rubocop/config.rb +11 -26
  13. data/lib/rubocop/config_loader.rb +5 -11
  14. data/lib/rubocop/config_loader_resolver.rb +22 -14
  15. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  16. data/lib/rubocop/config_store.rb +1 -2
  17. data/lib/rubocop/config_validator.rb +5 -10
  18. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  19. data/lib/rubocop/cop/badge.rb +1 -2
  20. data/lib/rubocop/cop/base.rb +8 -6
  21. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  22. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
  23. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  24. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  25. data/lib/rubocop/cop/commissioner.rb +2 -8
  26. data/lib/rubocop/cop/cop.rb +4 -18
  27. data/lib/rubocop/cop/corrector.rb +1 -4
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
  29. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  30. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  31. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  32. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  33. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  35. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  36. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  37. data/lib/rubocop/cop/generator.rb +1 -4
  38. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  39. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  40. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  41. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  42. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  43. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  45. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  47. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
  48. data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
  49. data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
  50. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  51. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  52. data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
  53. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  54. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
  55. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
  56. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  57. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  58. data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
  59. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  60. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -5
  61. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  62. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  63. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  65. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  66. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  67. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  68. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  70. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
  71. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  72. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  73. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/hash_alignment.rb +36 -15
  75. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  76. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  77. data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
  78. data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
  79. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  80. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  81. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  83. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  84. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  85. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -10
  86. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  87. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  88. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  89. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  90. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  91. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  92. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  93. data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
  94. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  95. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  96. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  97. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  99. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  100. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  101. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  102. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  103. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  104. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  105. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  106. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  107. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  108. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  109. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  110. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  111. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  112. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  113. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  114. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  115. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  116. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  117. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  118. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  119. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  120. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  121. data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
  122. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  123. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  124. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  125. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  126. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  127. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  128. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  129. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  130. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  131. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  132. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  133. data/lib/rubocop/cop/lint/loop.rb +1 -2
  134. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  135. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  136. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  137. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  138. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  139. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  140. data/lib/rubocop/cop/lint/number_conversion.rb +2 -3
  141. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  142. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  143. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  144. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  145. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  146. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  147. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
  148. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  149. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  150. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  151. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  152. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  153. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  154. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  155. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  156. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  157. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  158. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  159. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  160. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  161. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  162. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  163. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  164. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  165. data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
  166. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  167. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  168. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  169. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  170. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  171. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  172. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  173. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  174. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  175. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  176. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  177. data/lib/rubocop/cop/lint/void.rb +5 -12
  178. data/lib/rubocop/cop/message_annotator.rb +1 -3
  179. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  180. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  181. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  182. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  183. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  184. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  185. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  186. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  187. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  188. data/lib/rubocop/cop/mixin/alignment.rb +2 -4
  189. data/lib/rubocop/cop/mixin/check_line_breakable.rb +19 -3
  190. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  191. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  192. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  193. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  194. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
  195. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  196. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  197. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  198. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  199. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  200. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  201. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  202. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
  203. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  204. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  205. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
  206. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  207. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  208. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  209. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
  210. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  211. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -17
  212. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  213. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  214. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  215. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  216. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  217. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  218. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
  219. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  220. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  221. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  222. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  223. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  224. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  225. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
  226. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  227. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  228. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  229. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
  230. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  231. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  232. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  233. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  234. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
  235. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  236. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  237. data/lib/rubocop/cop/offense.rb +3 -8
  238. data/lib/rubocop/cop/registry.rb +3 -11
  239. data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -3
  240. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  241. data/lib/rubocop/cop/style/alias.rb +5 -12
  242. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  243. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  244. data/lib/rubocop/cop/style/attr.rb +1 -3
  245. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  246. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
  247. data/lib/rubocop/cop/style/case_like_if.rb +1 -2
  248. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  249. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  250. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  251. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  252. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  253. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  254. data/lib/rubocop/cop/style/command_literal.rb +3 -8
  255. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  256. data/lib/rubocop/cop/style/commented_keyword.rb +2 -8
  257. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  258. data/lib/rubocop/cop/style/copyright.rb +3 -6
  259. data/lib/rubocop/cop/style/date_time.rb +2 -5
  260. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  261. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  262. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  263. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  264. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  265. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  266. data/lib/rubocop/cop/style/end_block.rb +1 -2
  267. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  268. data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
  269. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  270. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  271. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  272. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -8
  273. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  274. data/lib/rubocop/cop/style/hash_conversion.rb +28 -3
  275. data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
  276. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  277. data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
  278. data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
  279. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  280. data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
  281. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  282. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  283. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  284. data/lib/rubocop/cop/style/lambda.rb +2 -4
  285. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  286. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  287. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
  288. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +7 -12
  289. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  290. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  291. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  292. data/lib/rubocop/cop/style/min_max.rb +1 -2
  293. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  294. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  295. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  296. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  297. data/lib/rubocop/cop/style/module_function.rb +3 -6
  298. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  299. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
  300. data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -3
  301. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  302. data/lib/rubocop/cop/style/multiline_when_then.rb +2 -11
  303. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  304. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  305. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  306. data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
  307. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  308. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  309. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  310. data/lib/rubocop/cop/style/next.rb +4 -9
  311. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  312. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  313. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  314. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  315. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  316. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  317. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  318. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  319. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  320. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  321. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  322. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  323. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  324. data/lib/rubocop/cop/style/proc.rb +1 -2
  325. data/lib/rubocop/cop/style/quoted_symbols.rb +110 -0
  326. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  327. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  328. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  329. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  330. data/lib/rubocop/cop/style/redundant_begin.rb +4 -4
  331. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  332. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  333. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  334. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  335. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  336. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  337. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  338. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  339. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  340. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  341. data/lib/rubocop/cop/style/redundant_return.rb +3 -5
  342. data/lib/rubocop/cop/style/redundant_self.rb +25 -7
  343. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  344. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  345. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  346. data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
  347. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  348. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  349. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  350. data/lib/rubocop/cop/style/send.rb +1 -2
  351. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  352. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  353. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  354. data/lib/rubocop/cop/style/single_line_methods.rb +20 -4
  355. data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
  356. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  357. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  358. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  359. data/lib/rubocop/cop/style/string_chars.rb +2 -1
  360. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  361. data/lib/rubocop/cop/style/string_literals.rb +3 -5
  362. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
  363. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
  364. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  365. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  366. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  367. data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
  368. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
  369. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  370. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  371. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  372. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  373. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  374. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
  375. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  376. data/lib/rubocop/cop/style/when_then.rb +4 -2
  377. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  378. data/lib/rubocop/cop/style/word_array.rb +1 -2
  379. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  380. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  381. data/lib/rubocop/cop/team.rb +2 -5
  382. data/lib/rubocop/cop/util.rb +4 -10
  383. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  384. data/lib/rubocop/cop/variable_force.rb +6 -15
  385. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  386. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  387. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  388. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  389. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  390. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  391. data/lib/rubocop/directive_comment.rb +5 -1
  392. data/lib/rubocop/file_finder.rb +1 -3
  393. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  394. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  395. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  396. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  397. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  398. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  399. data/lib/rubocop/options.rb +30 -50
  400. data/lib/rubocop/path_util.rb +1 -3
  401. data/lib/rubocop/rake_task.rb +3 -0
  402. data/lib/rubocop/remote_config.rb +4 -7
  403. data/lib/rubocop/result_cache.rb +5 -12
  404. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  405. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  406. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  407. data/lib/rubocop/runner.rb +7 -14
  408. data/lib/rubocop/target_finder.rb +18 -16
  409. data/lib/rubocop/target_ruby.rb +4 -8
  410. data/lib/rubocop/version.rb +1 -1
  411. metadata +16 -7
  412. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -66,8 +66,7 @@ module RuboCop
66
66
 
67
67
  def meta_assignment_node
68
68
  unless instance_variable_defined?(:@meta_assignment_node)
69
- @meta_assignment_node =
70
- operator_assignment_node || multiple_assignment_node
69
+ @meta_assignment_node = operator_assignment_node || multiple_assignment_node
71
70
  end
72
71
 
73
72
  @meta_assignment_node
@@ -121,8 +121,7 @@ module RuboCop
121
121
  def ==(other)
122
122
  return false unless other
123
123
 
124
- control_node.equal?(other.control_node) &&
125
- child_node.equal?(other.child_node)
124
+ control_node.equal?(other.control_node) && child_node.equal?(other.child_node)
126
125
  end
127
126
 
128
127
  alias_method :eql?, :==
@@ -227,6 +226,21 @@ module RuboCop
227
226
  end
228
227
  end
229
228
 
229
+ # case target
230
+ # in pattern # in_pattern
231
+ # else
232
+ # else_body
233
+ # end
234
+ class CaseMatch < Base
235
+ define_predicate :target?, child_index: 0
236
+ define_predicate :in_pattern?, child_index: 1..-2
237
+ define_predicate :else_body?, child_index: -1
238
+
239
+ def always_run?
240
+ target?
241
+ end
242
+ end
243
+
230
244
  # for element in collection
231
245
  # loop_body
232
246
  # end
@@ -8,9 +8,7 @@ module RuboCop
8
8
  include Branchable
9
9
 
10
10
  VARIABLE_REFERENCE_TYPES = (
11
- [VARIABLE_REFERENCE_TYPE] +
12
- OPERATOR_ASSIGNMENT_TYPES +
13
- [ZERO_ARITY_SUPER_TYPE, SEND_TYPE]
11
+ [VARIABLE_REFERENCE_TYPE] + OPERATOR_ASSIGNMENT_TYPES + [ZERO_ARITY_SUPER_TYPE, SEND_TYPE]
14
12
  ).freeze
15
13
 
16
14
  attr_reader :node, :scope
@@ -23,10 +23,9 @@ module RuboCop
23
23
  unless SCOPE_TYPES.include?(node.type)
24
24
  # Accept any node type for top level scope
25
25
  if node.parent
26
- raise ArgumentError,
27
- "Node type must be any of #{SCOPE_TYPES}, " \
28
- "passed #{node.type}"
26
+ raise ArgumentError, "Node type must be any of #{SCOPE_TYPES}, passed #{node.type}"
29
27
  end
28
+
30
29
  @naked_top_level = true
31
30
  end
32
31
  @node = node
@@ -56,8 +55,7 @@ module RuboCop
56
55
  end
57
56
 
58
57
  def include?(target_node)
59
- !belong_to_outer_scope?(target_node) &&
60
- !belong_to_inner_scope?(target_node)
58
+ !belong_to_outer_scope?(target_node) && !belong_to_inner_scope?(target_node)
61
59
  end
62
60
 
63
61
  def each_node(&block)
@@ -100,9 +98,7 @@ module RuboCop
100
98
  end
101
99
 
102
100
  def ancestor_node?(target_node)
103
- node.each_ancestor.any? do |ancestor_node|
104
- ancestor_node.equal?(target_node)
105
- end
101
+ node.each_ancestor.any? { |ancestor_node| ancestor_node.equal?(target_node) }
106
102
  end
107
103
  end
108
104
  end
@@ -6,11 +6,9 @@ module RuboCop
6
6
  # A Variable represents existence of a local variable.
7
7
  # This holds a variable declaration node and some states of the variable.
8
8
  class Variable
9
- VARIABLE_DECLARATION_TYPES =
10
- (VARIABLE_ASSIGNMENT_TYPES + ARGUMENT_DECLARATION_TYPES).freeze
9
+ VARIABLE_DECLARATION_TYPES = (VARIABLE_ASSIGNMENT_TYPES + ARGUMENT_DECLARATION_TYPES).freeze
11
10
 
12
- attr_reader :name, :declaration_node, :scope,
13
- :assignments, :references, :captured_by_block
11
+ attr_reader :name, :declaration_node, :scope, :assignments, :references, :captured_by_block
14
12
 
15
13
  alias captured_by_block? captured_by_block
16
14
 
@@ -18,9 +18,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
18
18
 
19
19
  def call
20
20
  YARD::Registry.load!
21
- departments.each do |department|
22
- print_cops_of_department(department)
23
- end
21
+ departments.each { |department| print_cops_of_department(department) }
24
22
 
25
23
  print_table_of_contents
26
24
  ensure
@@ -105,8 +103,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
105
103
 
106
104
  def code_example(ruby_code)
107
105
  content = +"[source,ruby]\n----\n"
108
- content << ruby_code.text.gsub('@good', '# good')
109
- .gsub('@bad', '# bad').strip
106
+ content << ruby_code.text.gsub('@good', '# good').gsub('@bad', '# bad').strip
110
107
  content << "\n----\n"
111
108
  content
112
109
  end
@@ -158,10 +155,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
158
155
  # rubocop:enable Metrics/CyclomaticComplexity,Metrics/MethodLength
159
156
 
160
157
  def to_table(header, content)
161
- table = [
162
- '|===',
163
- "| #{header.join(' | ')}\n\n"
164
- ].join("\n")
158
+ table = ['|===', "| #{header.join(' | ')}\n\n"].join("\n")
165
159
  marked_contents = content.map do |plain_content|
166
160
  plain_content.map { |c| "| #{c}" }.join("\n")
167
161
  end
@@ -195,9 +189,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
195
189
 
196
190
  def references(cop)
197
191
  cop_config = config.for_cop(cop)
198
- urls = RuboCop::Cop::MessageAnnotator.new(
199
- config, cop.name, cop_config, {}
200
- ).urls
192
+ urls = RuboCop::Cop::MessageAnnotator.new(config, cop.name, cop_config, {}).urls
201
193
  return '' if urls.empty?
202
194
 
203
195
  content = h3('References')
@@ -209,9 +201,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
209
201
  def print_cops_of_department(department)
210
202
  selected_cops = cops_of_department(department)
211
203
  content = +"= #{department}\n"
212
- selected_cops.each do |cop|
213
- content << print_cop_with_doc(cop)
214
- end
204
+ selected_cops.each { |cop| content << print_cop_with_doc(cop) }
215
205
  file_name = "#{Dir.pwd}/docs/modules/ROOT/pages/#{department_to_basename(department)}.adoc"
216
206
  File.open(file_name, 'w') do |file|
217
207
  puts "* generated #{file_name}"
@@ -264,16 +254,12 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
264
254
 
265
255
  content << "\n// END_COP_LIST"
266
256
 
267
- content = original.sub(
268
- %r{// START_COP_LIST.+// END_COP_LIST}m, content
269
- )
257
+ content = original.sub(%r{// START_COP_LIST.+// END_COP_LIST}m, content)
270
258
  File.write(path, content)
271
259
  end
272
260
 
273
261
  def table_contents
274
- departments
275
- .map { |department| table_of_content_for_department(department) }
276
- .join("\n")
262
+ departments.map { |department| table_of_content_for_department(department) }.join("\n")
277
263
  end
278
264
 
279
265
  def cop_status(status)
@@ -41,7 +41,11 @@ module RuboCop
41
41
  end
42
42
 
43
43
  def range
44
- comment.location.expression
44
+ match = comment.text.match(DIRECTIVE_COMMENT_REGEXP)
45
+ begin_pos = comment.loc.expression.begin_pos
46
+ Parser::Source::Range.new(
47
+ comment.loc.expression.source_buffer, begin_pos + match.begin(0), begin_pos + match.end(0)
48
+ )
45
49
  end
46
50
 
47
51
  # Returns match captures to directive comment pattern
@@ -23,9 +23,7 @@ module RuboCop
23
23
 
24
24
  def find_last_file_upwards(filename, start_dir, stop_dir = nil)
25
25
  last_file = nil
26
- traverse_files_upwards(filename, start_dir, stop_dir) do |file|
27
- last_file = file
28
- end
26
+ traverse_files_upwards(filename, start_dir, stop_dir) { |file| last_file = file }
29
27
  last_file
30
28
  end
31
29
 
@@ -71,9 +71,7 @@ module RuboCop
71
71
  command += ' --auto-gen-only-exclude' if @options[:auto_gen_only_exclude]
72
72
 
73
73
  if @exclude_limit_option
74
- command +=
75
- format(' --exclude-limit %<limit>d',
76
- limit: Integer(@exclude_limit_option))
74
+ command += format(' --exclude-limit %<limit>d', limit: Integer(@exclude_limit_option))
77
75
  end
78
76
  command += ' --no-offense-counts' unless show_offense_counts?
79
77
 
@@ -111,8 +109,7 @@ module RuboCop
111
109
 
112
110
  # In case auto_gen_only_exclude is set, only modify the maximum if the
113
111
  # files are not excluded one by one.
114
- if !@options[:auto_gen_only_exclude] ||
115
- @files_with_offenses[cop_name].size > @exclude_limit
112
+ if !@options[:auto_gen_only_exclude] || @files_with_offenses[cop_name].size > @exclude_limit
116
113
  cfg.merge!(cfg[:exclude_limit])
117
114
  end
118
115
 
@@ -144,9 +141,7 @@ module RuboCop
144
141
 
145
142
  def output_cop_param_comments(output_buffer, params, default_cfg)
146
143
  config_params = params.reject { |p| p.start_with?('Supported') }
147
- output_buffer.puts(
148
- "# Configuration parameters: #{config_params.join(', ')}."
149
- )
144
+ output_buffer.puts("# Configuration parameters: #{config_params.join(', ')}.")
150
145
 
151
146
  params.each do |param|
152
147
  value = default_cfg[param]
@@ -5,11 +5,7 @@ module RuboCop
5
5
  # This formatter formats report data as GitHub Workflow commands resulting
6
6
  # in GitHub check annotations when run within GitHub Actions.
7
7
  class GitHubActionsFormatter < BaseFormatter
8
- ESCAPE_MAP = {
9
- '%' => '%25',
10
- "\n" => '%0A',
11
- "\r" => '%0D'
12
- }.freeze
8
+ ESCAPE_MAP = { '%' => '%25', "\n" => '%0A', "\r" => '%0D' }.freeze
13
9
 
14
10
  def file_finished(file, offenses)
15
11
  offenses.each { |offense| report_offense(file, offense) }
@@ -11,8 +11,7 @@ module RuboCop
11
11
  # This formatter saves the output as an html file.
12
12
  class HTMLFormatter < BaseFormatter
13
13
  ELLIPSES = '<span class="extra-code">...</span>'
14
- TEMPLATE_PATH =
15
- File.expand_path('../../../assets/output.html.erb', __dir__)
14
+ TEMPLATE_PATH = File.expand_path('../../../assets/output.html.erb', __dir__)
16
15
 
17
16
  Color = Struct.new(:red, :green, :blue, :alpha) do
18
17
  def to_s
@@ -20,9 +19,7 @@ module RuboCop
20
19
  end
21
20
 
22
21
  def fade_out(amount)
23
- dup.tap do |color|
24
- color.alpha -= amount
25
- end
22
+ dup.tap { |color| color.alpha -= amount }
26
23
  end
27
24
  end
28
25
 
@@ -79,8 +76,7 @@ module RuboCop
79
76
  fatal: Color.new(0xD2, 0x32, 0x2D, 1.0)
80
77
  }.freeze
81
78
 
82
- LOGO_IMAGE_PATH =
83
- File.expand_path('../../../assets/logo.png', __dir__)
79
+ LOGO_IMAGE_PATH = File.expand_path('../../../assets/logo.png', __dir__)
84
80
 
85
81
  attr_reader :files, :summary
86
82
 
@@ -97,9 +93,7 @@ module RuboCop
97
93
  # rubocop:enable Lint/UselessMethodDefinition
98
94
 
99
95
  def decorated_message(offense)
100
- offense.message.gsub(/`(.+?)`/) do
101
- "<code>#{Regexp.last_match(1)}</code>"
102
- end
96
+ offense.message.gsub(/`(.+?)`/) { "<code>#{Regexp.last_match(1)}</code>" }
103
97
  end
104
98
 
105
99
  def highlighted_source_line(offense)
@@ -13,11 +13,7 @@ module RuboCop
13
13
 
14
14
  def initialize(output, options = {})
15
15
  super
16
- @output_hash = {
17
- metadata: metadata_hash,
18
- files: [],
19
- summary: { offense_count: 0 }
20
- }
16
+ @output_hash = { metadata: metadata_hash, files: [], summary: { offense_count: 0 } }
21
17
  end
22
18
 
23
19
  def started(target_files)
@@ -18,17 +18,17 @@ module RuboCop
18
18
  def initialize(output, options = {})
19
19
  super
20
20
 
21
- @document = REXML::Document.new.tap do |document|
22
- document << REXML::XMLDecl.new
23
- end
21
+ @document = REXML::Document.new.tap { |document| document << REXML::XMLDecl.new }
24
22
  testsuites = REXML::Element.new('testsuites', @document)
25
23
  testsuite = REXML::Element.new('testsuite', testsuites)
26
- @testsuite = testsuite.tap do |element|
27
- element.add_attributes('name' => 'rubocop')
28
- end
24
+ @testsuite = testsuite.tap { |element| element.add_attributes('name' => 'rubocop') }
25
+
26
+ reset_count
29
27
  end
30
28
 
31
29
  def file_finished(file, offenses)
30
+ @inspected_file_count += 1
31
+
32
32
  # TODO: Returns all cops with the same behavior as
33
33
  # the original rubocop-junit-formatter.
34
34
  # https://github.com/mikian/rubocop-junit-formatter/blob/v0.1.4/lib/rubocop/formatter/junit_formatter.rb#L9
@@ -36,15 +36,11 @@ module RuboCop
36
36
  # In the future, it would be preferable to return only enabled cops.
37
37
  Cop::Registry.all.each do |cop|
38
38
  target_offenses = offenses_for_cop(offenses, cop)
39
+ @offense_count += target_offenses.count
39
40
 
40
41
  next unless relevant_for_output?(options, target_offenses)
41
42
 
42
- REXML::Element.new('testcase', @testsuite).tap do |testcase|
43
- testcase.attributes['classname'] = classname_attribute_value(file)
44
- testcase.attributes['name'] = cop.cop_name
45
-
46
- add_failure_to(testcase, target_offenses, cop.cop_name)
47
- end
43
+ add_testcase_element_to_testsuite_element(file, target_offenses, cop)
48
44
  end
49
45
  end
50
46
 
@@ -53,8 +49,15 @@ module RuboCop
53
49
  end
54
50
 
55
51
  def offenses_for_cop(all_offenses, cop)
56
- all_offenses.select do |offense|
57
- offense.cop_name == cop.cop_name
52
+ all_offenses.select { |offense| offense.cop_name == cop.cop_name }
53
+ end
54
+
55
+ def add_testcase_element_to_testsuite_element(file, target_offenses, cop)
56
+ REXML::Element.new('testcase', @testsuite).tap do |testcase|
57
+ testcase.attributes['classname'] = classname_attribute_value(file)
58
+ testcase.attributes['name'] = cop.cop_name
59
+
60
+ add_failure_to(testcase, target_offenses, cop.cop_name)
58
61
  end
59
62
  end
60
63
 
@@ -63,11 +66,17 @@ module RuboCop
63
66
  end
64
67
 
65
68
  def finished(_inspected_files)
69
+ @testsuite.add_attributes('tests' => @inspected_file_count, 'failures' => @offense_count)
66
70
  @document.write(output, 2)
67
71
  end
68
72
 
69
73
  private
70
74
 
75
+ def reset_count
76
+ @inspected_file_count = 0
77
+ @offense_count = 0
78
+ end
79
+
71
80
  def add_failure_to(testcase, offenses, cop_name)
72
81
  # One failure per offense. Zero failures is a passing test case,
73
82
  # for most surefire/nUnit parsers.
@@ -38,9 +38,7 @@ module RuboCop
38
38
  output.puts 'Offenses:'
39
39
  output.puts
40
40
 
41
- @offenses_for_files.each do |file, offenses|
42
- report_file(file, offenses)
43
- end
41
+ @offenses_for_files.each { |file, offenses| report_file(file, offenses) }
44
42
  end
45
43
 
46
44
  report_summary(inspected_files.size,
@@ -112,9 +112,7 @@ module RuboCop
112
112
  @options.replace(ConfigRegeneration.new.options.merge(@options))
113
113
  end
114
114
 
115
- option(opts, '--exclude-limit COUNT') do
116
- @validator.validate_exclude_limit_option
117
- end
115
+ option(opts, '--exclude-limit COUNT') { @validator.validate_exclude_limit_option }
118
116
 
119
117
  option(opts, '--disable-uncorrectable')
120
118
 
@@ -161,9 +159,7 @@ module RuboCop
161
159
 
162
160
  def add_cache_options(opts)
163
161
  option(opts, '-C', '--cache FLAG')
164
- option(opts, '--cache-root DIR') do
165
- @validator.validate_cache_enabled_for_cache_root
166
- end
162
+ option(opts, '--cache-root DIR') { @validator.validate_cache_enabled_for_cache_root }
167
163
  end
168
164
 
169
165
  # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
@@ -173,16 +169,12 @@ module RuboCop
173
169
  option(opts, '-D', '--[no-]display-cop-names')
174
170
  option(opts, '-E', '--extra-details')
175
171
  option(opts, '-S', '--display-style-guide')
176
- option(opts, '-a', '--auto-correct') do
177
- @options[:safe_auto_correct] = true
178
- end
172
+ option(opts, '-a', '--auto-correct') { @options[:safe_auto_correct] = true }
179
173
  option(opts, '--safe-auto-correct') do
180
174
  warn '--safe-auto-correct is deprecated; use --auto-correct'
181
175
  @options[:safe_auto_correct] = @options[:auto_correct] = true
182
176
  end
183
- option(opts, '-A', '--auto-correct-all') do
184
- @options[:auto_correct] = true
185
- end
177
+ option(opts, '-A', '--auto-correct-all') { @options[:auto_correct] = true }
186
178
  option(opts, '--disable-pending-cops')
187
179
  option(opts, '--enable-pending-cops')
188
180
  option(opts, '--ignore-disable-comments')
@@ -194,7 +186,7 @@ module RuboCop
194
186
 
195
187
  option(opts, '-v', '--version')
196
188
  option(opts, '-V', '--verbose-version')
197
- option(opts, '-P', '--parallel')
189
+ option(opts, '-P', '--[no-]parallel')
198
190
  end
199
191
  # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
200
192
 
@@ -229,8 +221,7 @@ module RuboCop
229
221
  # e.g. [..., '--auto-correct', ...] to :auto_correct.
230
222
  def long_opt_symbol(args)
231
223
  long_opt = args.find { |arg| arg.start_with?('--') }
232
- long_opt[2..-1].sub('[no-]', '').sub(/ .*/, '')
233
- .tr('-', '_').gsub(/[\[\]]/, '').to_sym
224
+ long_opt[2..-1].sub('[no-]', '').sub(/ .*/, '').tr('-', '_').gsub(/[\[\]]/, '').to_sym
234
225
  end
235
226
 
236
227
  def require_feature(file)
@@ -286,16 +277,13 @@ module RuboCop
286
277
  end
287
278
 
288
279
  def validate_cop_options
289
- %i[only except].each do |opt|
290
- OptionsValidator.validate_cop_list(@options[opt])
291
- end
280
+ %i[only except].each { |opt| OptionsValidator.validate_cop_list(@options[opt]) }
292
281
  end
293
282
 
294
283
  # rubocop:disable Metrics/AbcSize
295
284
  def validate_compatibility # rubocop:disable Metrics/MethodLength
296
285
  if only_includes_redundant_disable?
297
- raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
298
- 'be used with --only.'
286
+ raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot be used with --only.'
299
287
  end
300
288
  raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
301
289
  unless boolean_or_empty_cache?
@@ -309,12 +297,11 @@ module RuboCop
309
297
  validate_auto_gen_config
310
298
  validate_auto_correct
311
299
  validate_display_only_failed
312
- validate_parallel
300
+ disable_parallel_when_invalid_option_combo
313
301
 
314
302
  return if incompatible_options.size <= 1
315
303
 
316
- raise OptionArgumentError, 'Incompatible cli options: ' \
317
- "#{incompatible_options.inspect}"
304
+ raise OptionArgumentError, "Incompatible cli options: #{incompatible_options.inspect}"
318
305
  end
319
306
  # rubocop:enable Metrics/AbcSize
320
307
 
@@ -326,8 +313,7 @@ module RuboCop
326
313
  %i[exclude_limit offense_counts auto_gen_timestamp
327
314
  auto_gen_only_exclude].each do |option|
328
315
  if @options.key?(option)
329
- raise OptionArgumentError,
330
- format(message, flag: option.to_s.tr('_', '-'))
316
+ raise OptionArgumentError, format(message, flag: option.to_s.tr('_', '-'))
331
317
  end
332
318
  end
333
319
  end
@@ -348,36 +334,32 @@ module RuboCop
348
334
  format('--disable-uncorrectable can only be used together with --auto-correct.')
349
335
  end
350
336
 
351
- def validate_parallel
337
+ def disable_parallel_when_invalid_option_combo
352
338
  return unless @options.key?(:parallel)
353
339
 
354
- if @options[:cache] == 'false'
355
- raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
356
- 'execution, so combining with --cache ' \
357
- 'false is not allowed.'
340
+ invalid_options = [
341
+ { name: :auto_gen_config, value: true, flag: '--auto-gen-config' },
342
+ { name: :fail_fast, value: true, flag: '-F/--fail-fast.' },
343
+ { name: :auto_correct, value: true, flag: '--auto-correct.' },
344
+ { name: :cache, value: 'false', flag: '--cache false' }
345
+ ]
346
+
347
+ invalid_flags = invalid_options.each_with_object([]) do |option, flags|
348
+ # `>` rather than `>=` because `@options` will also contain `parallel: true`
349
+ flags << option[:flag] if @options > { option[:name] => option[:value] }
358
350
  end
359
351
 
360
- validate_parallel_with_combo_option
361
- end
352
+ return if invalid_flags.empty?
362
353
 
363
- def validate_parallel_with_combo_option
364
- combos = {
365
- auto_gen_config: '-P/--parallel uses caching to speed up execution, ' \
366
- 'while --auto-gen-config needs a non-cached run, ' \
367
- 'so they cannot be combined.',
368
- fail_fast: '-P/--parallel cannot be combined with -F/--fail-fast.',
369
- auto_correct: '-P/--parallel cannot be combined with --auto-correct.'
370
- }
354
+ @options.delete(:parallel)
371
355
 
372
- combos.each do |key, msg|
373
- raise OptionArgumentError, msg if @options.key?(key)
374
- end
356
+ puts '-P/--parallel is being ignored because ' \
357
+ "it is not compatible with #{invalid_flags.join(', ')}"
375
358
  end
376
359
 
377
360
  def only_includes_redundant_disable?
378
361
  @options.key?(:only) &&
379
- (@options[:only] & %w[Lint/RedundantCopDisableDirective
380
- RedundantCopDisableDirective]).any?
362
+ (@options[:only] & %w[Lint/RedundantCopDisableDirective RedundantCopDisableDirective]).any?
381
363
  end
382
364
 
383
365
  def display_only_fail_level_offenses_with_autocorrect?
@@ -385,8 +367,7 @@ module RuboCop
385
367
  end
386
368
 
387
369
  def except_syntax?
388
- @options.key?(:except) &&
389
- (@options[:except] & %w[Lint/Syntax Syntax]).any?
370
+ @options.key?(:except) && (@options[:except] & %w[Lint/Syntax Syntax]).any?
390
371
  end
391
372
 
392
373
  def boolean_or_empty_cache?
@@ -408,8 +389,7 @@ module RuboCop
408
389
  def validate_cache_enabled_for_cache_root
409
390
  return unless @options[:cache] == 'false'
410
391
 
411
- raise OptionArgumentError, '--cache-root can not be used with ' \
412
- '--cache false'
392
+ raise OptionArgumentError, '--cache-root can not be used with --cache false'
413
393
  end
414
394
  end
415
395
 
@@ -512,7 +492,7 @@ module RuboCop
512
492
  version: 'Display version.',
513
493
  verbose_version: 'Display verbose version.',
514
494
  parallel: ['Use available CPUs to execute inspection in',
515
- 'parallel.'],
495
+ 'parallel. Default is false.'],
516
496
  stdin: ['Pipe source from STDIN, using FILE in offense',
517
497
  'reports. This is useful for editor integration.'],
518
498
  init: 'Generate a .rubocop.yml file in the current directory.'