rubocop 0.86.0 → 0.89.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 (377) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/rubocop-profile +32 -0
  4. data/config/default.yml +198 -25
  5. data/lib/rubocop.rb +30 -5
  6. data/lib/rubocop/cli.rb +2 -4
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  10. data/lib/rubocop/cli/command/show_cops.rb +3 -3
  11. data/lib/rubocop/cli/command/version.rb +2 -2
  12. data/lib/rubocop/comment_config.rb +5 -7
  13. data/lib/rubocop/config.rb +20 -3
  14. data/lib/rubocop/config_loader.rb +41 -69
  15. data/lib/rubocop/config_loader_resolver.rb +3 -3
  16. data/lib/rubocop/config_obsoletion.rb +6 -2
  17. data/lib/rubocop/config_store.rb +4 -0
  18. data/lib/rubocop/config_validator.rb +2 -4
  19. data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
  20. data/lib/rubocop/cop/badge.rb +1 -1
  21. data/lib/rubocop/cop/base.rb +407 -0
  22. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
  23. data/lib/rubocop/cop/commissioner.rb +47 -50
  24. data/lib/rubocop/cop/cop.rb +85 -236
  25. data/lib/rubocop/cop/corrector.rb +38 -115
  26. data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
  27. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
  28. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  29. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  30. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
  31. data/lib/rubocop/cop/force.rb +1 -0
  32. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +38 -12
  33. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  34. data/lib/rubocop/cop/generator.rb +1 -1
  35. data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
  36. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
  37. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
  38. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
  39. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
  40. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
  41. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
  42. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  43. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  44. data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
  45. data/lib/rubocop/cop/layout/class_structure.rb +5 -44
  46. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  47. data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
  48. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  49. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
  50. data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
  51. data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
  52. data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
  53. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  54. data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
  55. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  56. data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
  57. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  58. data/lib/rubocop/cop/layout/multiline_block_layout.rb +16 -6
  59. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  60. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
  61. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
  62. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
  63. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
  64. data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
  65. data/lib/rubocop/cop/legacy/corrector.rb +29 -0
  66. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
  67. data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
  68. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
  69. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  70. data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
  71. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
  72. data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
  73. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  74. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  75. data/lib/rubocop/cop/lint/debugger.rb +7 -1
  76. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
  77. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
  78. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
  79. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  80. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  81. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  82. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
  83. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
  84. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  85. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  86. data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
  87. data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
  88. data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
  89. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
  90. data/lib/rubocop/cop/lint/empty_when.rb +2 -2
  91. data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
  92. data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
  93. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  94. data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
  95. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  96. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
  97. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
  98. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
  99. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
  100. data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
  101. data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
  102. data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
  103. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
  104. data/lib/rubocop/cop/lint/loop.rb +23 -2
  105. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
  106. data/lib/rubocop/cop/lint/missing_super.rb +99 -0
  107. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  108. data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
  109. data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
  110. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  111. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  112. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +84 -13
  113. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  114. data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
  115. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
  116. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
  117. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
  118. data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
  119. data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
  120. data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
  121. data/lib/rubocop/cop/lint/rand_one.rb +3 -3
  122. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +41 -40
  123. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
  124. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
  125. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
  126. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
  127. data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
  128. data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
  129. data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
  130. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
  131. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  132. data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
  133. data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
  134. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
  135. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
  136. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +10 -2
  137. data/lib/rubocop/cop/lint/script_permission.rb +10 -7
  138. data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
  139. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
  140. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
  141. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
  142. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
  143. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  144. data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
  145. data/lib/rubocop/cop/lint/syntax.rb +11 -26
  146. data/lib/rubocop/cop/lint/to_json.rb +4 -6
  147. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
  148. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
  149. data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
  150. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  151. data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
  152. data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
  153. data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
  154. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  155. data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
  156. data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
  157. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
  158. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
  159. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
  160. data/lib/rubocop/cop/lint/void.rb +3 -7
  161. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  162. data/lib/rubocop/cop/metrics/block_length.rb +24 -2
  163. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  164. data/lib/rubocop/cop/metrics/class_length.rb +26 -3
  165. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  166. data/lib/rubocop/cop/metrics/method_length.rb +25 -2
  167. data/lib/rubocop/cop/metrics/module_length.rb +26 -3
  168. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
  169. data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
  170. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
  171. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
  172. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
  173. data/lib/rubocop/cop/migration/department_name.rb +14 -16
  174. data/lib/rubocop/cop/mixin/alignment.rb +2 -1
  175. data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
  176. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
  177. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  178. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  179. data/lib/rubocop/cop/mixin/code_length.rb +26 -5
  180. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  181. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
  182. data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
  183. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  184. data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
  185. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  186. data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
  187. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
  188. data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
  189. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  190. data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
  191. data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -24
  192. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  193. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +10 -15
  194. data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
  195. data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
  196. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  197. data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
  198. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +3 -3
  199. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  200. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
  201. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  202. data/lib/rubocop/cop/naming/file_name.rb +3 -3
  203. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  204. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
  205. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
  206. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  207. data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
  208. data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
  209. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
  210. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  211. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  212. data/lib/rubocop/cop/offense.rb +16 -2
  213. data/lib/rubocop/cop/registry.rb +3 -3
  214. data/lib/rubocop/cop/security/eval.rb +2 -2
  215. data/lib/rubocop/cop/security/json_load.rb +6 -8
  216. data/lib/rubocop/cop/security/marshal_load.rb +2 -4
  217. data/lib/rubocop/cop/security/open.rb +2 -2
  218. data/lib/rubocop/cop/security/yaml_load.rb +6 -6
  219. data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
  220. data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
  221. data/lib/rubocop/cop/style/alias.rb +41 -36
  222. data/lib/rubocop/cop/style/and_or.rb +9 -11
  223. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  224. data/lib/rubocop/cop/style/array_join.rb +6 -8
  225. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  226. data/lib/rubocop/cop/style/attr.rb +11 -9
  227. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
  228. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  229. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  230. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
  231. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  232. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  233. data/lib/rubocop/cop/style/case_equality.rb +22 -3
  234. data/lib/rubocop/cop/style/case_like_if.rb +220 -0
  235. data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
  236. data/lib/rubocop/cop/style/class_check.rb +7 -9
  237. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  238. data/lib/rubocop/cop/style/class_vars.rb +24 -7
  239. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  240. data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
  241. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  242. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  243. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  244. data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
  245. data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
  246. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  247. data/lib/rubocop/cop/style/copyright.rb +12 -12
  248. data/lib/rubocop/cop/style/date_time.rb +2 -2
  249. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  250. data/lib/rubocop/cop/style/dir.rb +9 -12
  251. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  252. data/lib/rubocop/cop/style/documentation.rb +6 -8
  253. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  254. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  255. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  256. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  257. data/lib/rubocop/cop/style/each_with_object.rb +16 -19
  258. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  259. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  260. data/lib/rubocop/cop/style/empty_literal.rb +20 -21
  261. data/lib/rubocop/cop/style/empty_method.rb +10 -13
  262. data/lib/rubocop/cop/style/encoding.rb +5 -9
  263. data/lib/rubocop/cop/style/end_block.rb +4 -6
  264. data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
  265. data/lib/rubocop/cop/style/even_odd.rb +7 -11
  266. data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
  267. data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
  268. data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
  269. data/lib/rubocop/cop/style/float_division.rb +8 -11
  270. data/lib/rubocop/cop/style/for.rb +11 -15
  271. data/lib/rubocop/cop/style/format_string.rb +21 -19
  272. data/lib/rubocop/cop/style/format_string_token.rb +10 -12
  273. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  274. data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
  275. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  276. data/lib/rubocop/cop/style/guard_clause.rb +5 -6
  277. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
  278. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  279. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  280. data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
  281. data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
  282. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
  283. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  284. data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
  285. data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
  286. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
  287. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  288. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  289. data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
  290. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  291. data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
  292. data/lib/rubocop/cop/style/lambda.rb +7 -12
  293. data/lib/rubocop/cop/style/lambda_call.rb +14 -13
  294. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  295. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  296. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
  297. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  298. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
  299. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  300. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  301. data/lib/rubocop/cop/style/min_max.rb +8 -12
  302. data/lib/rubocop/cop/style/missing_else.rb +11 -21
  303. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
  304. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  305. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  306. data/lib/rubocop/cop/style/module_function.rb +10 -13
  307. data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
  308. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  309. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  310. data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
  311. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  312. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
  313. data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
  314. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  315. data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
  316. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
  317. data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
  318. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
  319. data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
  320. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  321. data/lib/rubocop/cop/style/proc.rb +1 -1
  322. data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
  323. data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
  324. data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
  325. data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
  326. data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
  327. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  328. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  329. data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
  330. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
  331. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +11 -11
  332. data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
  333. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
  334. data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
  335. data/lib/rubocop/cop/style/signal_exception.rb +3 -1
  336. data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
  337. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  338. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
  339. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  340. data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
  341. data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
  342. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  343. data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
  344. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  345. data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
  346. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
  347. data/lib/rubocop/cop/team.rb +98 -82
  348. data/lib/rubocop/cop/tokens_util.rb +84 -0
  349. data/lib/rubocop/cop/util.rb +3 -13
  350. data/lib/rubocop/cop/utils/format_string.rb +1 -2
  351. data/lib/rubocop/cop/variable_force.rb +0 -2
  352. data/lib/rubocop/cop/variable_force/branch.rb +1 -0
  353. data/lib/rubocop/cop/variable_force/variable.rb +7 -5
  354. data/lib/rubocop/cops_documentation_generator.rb +282 -0
  355. data/lib/rubocop/error.rb +1 -0
  356. data/lib/rubocop/file_finder.rb +12 -12
  357. data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -2
  358. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  359. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  360. data/lib/rubocop/name_similarity.rb +1 -3
  361. data/lib/rubocop/options.rb +18 -11
  362. data/lib/rubocop/path_util.rb +17 -17
  363. data/lib/rubocop/rake_task.rb +7 -9
  364. data/lib/rubocop/result_cache.rb +12 -8
  365. data/lib/rubocop/rspec/cop_helper.rb +4 -4
  366. data/lib/rubocop/rspec/expect_offense.rb +53 -22
  367. data/lib/rubocop/rspec/shared_contexts.rb +16 -17
  368. data/lib/rubocop/runner.rb +35 -34
  369. data/lib/rubocop/target_finder.rb +13 -10
  370. data/lib/rubocop/target_ruby.rb +1 -1
  371. data/lib/rubocop/version.rb +2 -2
  372. metadata +40 -11
  373. data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
  374. data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
  375. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
  376. data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
  377. data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -23,6 +23,7 @@ require_relative 'rubocop/string_interpreter'
23
23
  require_relative 'rubocop/error'
24
24
  require_relative 'rubocop/warning'
25
25
 
26
+ require_relative 'rubocop/cop/tokens_util'
26
27
  require_relative 'rubocop/cop/util'
27
28
  require_relative 'rubocop/cop/offense'
28
29
  require_relative 'rubocop/cop/message_annotator'
@@ -30,6 +31,7 @@ require_relative 'rubocop/cop/ignored_node'
30
31
  require_relative 'rubocop/cop/autocorrect_logic'
31
32
  require_relative 'rubocop/cop/badge'
32
33
  require_relative 'rubocop/cop/registry'
34
+ require_relative 'rubocop/cop/base'
33
35
  require_relative 'rubocop/cop/cop'
34
36
  require_relative 'rubocop/cop/commissioner'
35
37
  require_relative 'rubocop/cop/corrector'
@@ -52,11 +54,12 @@ require_relative 'rubocop/cop/mixin/annotation_comment'
52
54
  require_relative 'rubocop/cop/mixin/array_min_size'
53
55
  require_relative 'rubocop/cop/mixin/array_syntax'
54
56
  require_relative 'rubocop/cop/mixin/alignment'
57
+ require_relative 'rubocop/cop/mixin/allowed_methods'
58
+ require_relative 'rubocop/cop/mixin/auto_corrector'
55
59
  require_relative 'rubocop/cop/mixin/check_assignment'
56
60
  require_relative 'rubocop/cop/mixin/check_line_breakable'
57
61
  require_relative 'rubocop/cop/mixin/configurable_max'
58
62
  require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
59
- require_relative 'rubocop/cop/mixin/classish_length' # relies on code_length
60
63
  require_relative 'rubocop/cop/mixin/configurable_enforced_style'
61
64
  require_relative 'rubocop/cop/mixin/configurable_formatting'
62
65
  require_relative 'rubocop/cop/mixin/configurable_naming'
@@ -79,6 +82,7 @@ require_relative 'rubocop/cop/mixin/integer_node'
79
82
  require_relative 'rubocop/cop/mixin/interpolation'
80
83
  require_relative 'rubocop/cop/mixin/line_length_help'
81
84
  require_relative 'rubocop/cop/mixin/match_range'
85
+ require_relative 'rubocop/cop/metrics/utils/repeated_csend_discount'
82
86
  require_relative 'rubocop/cop/mixin/method_complexity'
83
87
  require_relative 'rubocop/cop/mixin/method_preference'
84
88
  require_relative 'rubocop/cop/mixin/min_body_length'
@@ -92,7 +96,6 @@ require_relative 'rubocop/cop/mixin/nil_methods'
92
96
  require_relative 'rubocop/cop/mixin/on_normal_if_unless'
93
97
  require_relative 'rubocop/cop/mixin/ordered_gem_node'
94
98
  require_relative 'rubocop/cop/mixin/parentheses'
95
- require_relative 'rubocop/cop/mixin/parser_diagnostic'
96
99
  require_relative 'rubocop/cop/mixin/percent_array'
97
100
  require_relative 'rubocop/cop/mixin/percent_literal'
98
101
  require_relative 'rubocop/cop/mixin/preceding_following_alignment'
@@ -108,11 +111,11 @@ require_relative 'rubocop/cop/mixin/statement_modifier'
108
111
  require_relative 'rubocop/cop/mixin/string_help'
109
112
  require_relative 'rubocop/cop/mixin/string_literals_help'
110
113
  require_relative 'rubocop/cop/mixin/target_ruby_version'
111
- require_relative 'rubocop/cop/mixin/too_many_lines'
112
114
  require_relative 'rubocop/cop/mixin/trailing_body'
113
115
  require_relative 'rubocop/cop/mixin/trailing_comma'
114
116
  require_relative 'rubocop/cop/mixin/uncommunicative_name'
115
117
  require_relative 'rubocop/cop/mixin/unused_argument'
118
+ require_relative 'rubocop/cop/mixin/visibility_help'
116
119
 
117
120
  require_relative 'rubocop/cop/utils/format_string'
118
121
 
@@ -240,6 +243,7 @@ require_relative 'rubocop/cop/lint/ambiguous_operator'
240
243
  require_relative 'rubocop/cop/lint/ambiguous_regexp_literal'
241
244
  require_relative 'rubocop/cop/lint/assignment_in_condition'
242
245
  require_relative 'rubocop/cop/lint/big_decimal_new'
246
+ require_relative 'rubocop/cop/lint/binary_operator_with_identical_operands'
243
247
  require_relative 'rubocop/cop/lint/boolean_symbol'
244
248
  require_relative 'rubocop/cop/lint/circular_argument_reference'
245
249
  require_relative 'rubocop/cop/lint/constant_resolution'
@@ -248,10 +252,13 @@ require_relative 'rubocop/cop/lint/deprecated_class_methods'
248
252
  require_relative 'rubocop/cop/lint/deprecated_open_ssl_constant'
249
253
  require_relative 'rubocop/cop/lint/disjunctive_assignment_in_constructor'
250
254
  require_relative 'rubocop/cop/lint/duplicate_case_condition'
255
+ require_relative 'rubocop/cop/lint/duplicate_elsif_condition'
251
256
  require_relative 'rubocop/cop/lint/duplicate_hash_key'
252
257
  require_relative 'rubocop/cop/lint/duplicate_methods'
258
+ require_relative 'rubocop/cop/lint/duplicate_rescue_exception'
253
259
  require_relative 'rubocop/cop/lint/each_with_object_argument'
254
260
  require_relative 'rubocop/cop/lint/else_layout'
261
+ require_relative 'rubocop/cop/lint/empty_conditional_body'
255
262
  require_relative 'rubocop/cop/lint/empty_ensure'
256
263
  require_relative 'rubocop/cop/lint/empty_expression'
257
264
  require_relative 'rubocop/cop/lint/empty_interpolation'
@@ -259,6 +266,7 @@ require_relative 'rubocop/cop/lint/empty_when'
259
266
  require_relative 'rubocop/cop/lint/ensure_return'
260
267
  require_relative 'rubocop/cop/lint/erb_new_arguments'
261
268
  require_relative 'rubocop/cop/lint/flip_flop'
269
+ require_relative 'rubocop/cop/lint/float_comparison'
262
270
  require_relative 'rubocop/cop/lint/float_out_of_range'
263
271
  require_relative 'rubocop/cop/lint/format_parameter_mismatch'
264
272
  require_relative 'rubocop/cop/lint/heredoc_method_call_position'
@@ -270,6 +278,7 @@ require_relative 'rubocop/cop/lint/literal_as_condition'
270
278
  require_relative 'rubocop/cop/lint/literal_in_interpolation'
271
279
  require_relative 'rubocop/cop/lint/loop'
272
280
  require_relative 'rubocop/cop/lint/missing_cop_enable_directive'
281
+ require_relative 'rubocop/cop/lint/missing_super'
273
282
  require_relative 'rubocop/cop/lint/mixed_regexp_capture_types'
274
283
  require_relative 'rubocop/cop/lint/multiple_comparison'
275
284
  require_relative 'rubocop/cop/lint/nested_method_definition'
@@ -279,6 +288,7 @@ require_relative 'rubocop/cop/lint/non_deterministic_require_order'
279
288
  require_relative 'rubocop/cop/lint/non_local_exit_from_iterator'
280
289
  require_relative 'rubocop/cop/lint/number_conversion'
281
290
  require_relative 'rubocop/cop/lint/ordered_magic_comments'
291
+ require_relative 'rubocop/cop/lint/out_of_range_regexp_ref'
282
292
  require_relative 'rubocop/cop/lint/parentheses_as_grouped_expression'
283
293
  require_relative 'rubocop/cop/lint/percent_string_array'
284
294
  require_relative 'rubocop/cop/lint/percent_symbol_array'
@@ -300,6 +310,7 @@ require_relative 'rubocop/cop/lint/safe_navigation_consistency'
300
310
  require_relative 'rubocop/cop/lint/safe_navigation_chain'
301
311
  require_relative 'rubocop/cop/lint/safe_navigation_with_empty'
302
312
  require_relative 'rubocop/cop/lint/script_permission'
313
+ require_relative 'rubocop/cop/lint/self_assignment'
303
314
  require_relative 'rubocop/cop/lint/send_with_mixin_argument'
304
315
  require_relative 'rubocop/cop/lint/shadowed_argument'
305
316
  require_relative 'rubocop/cop/lint/shadowed_exception'
@@ -308,16 +319,17 @@ require_relative 'rubocop/cop/lint/struct_new_override'
308
319
  require_relative 'rubocop/cop/lint/suppressed_exception'
309
320
  require_relative 'rubocop/cop/lint/syntax'
310
321
  require_relative 'rubocop/cop/lint/to_json'
322
+ require_relative 'rubocop/cop/lint/top_level_return_with_argument'
311
323
  require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name'
312
324
  require_relative 'rubocop/cop/lint/unified_integer'
313
325
  require_relative 'rubocop/cop/lint/unreachable_code'
326
+ require_relative 'rubocop/cop/lint/unreachable_loop'
314
327
  require_relative 'rubocop/cop/lint/unused_block_argument'
315
328
  require_relative 'rubocop/cop/lint/unused_method_argument'
316
329
  require_relative 'rubocop/cop/lint/uri_escape_unescape'
317
330
  require_relative 'rubocop/cop/lint/uri_regexp'
318
331
  require_relative 'rubocop/cop/lint/useless_access_modifier'
319
332
  require_relative 'rubocop/cop/lint/useless_assignment'
320
- require_relative 'rubocop/cop/lint/useless_comparison'
321
333
  require_relative 'rubocop/cop/lint/useless_else_without_rescue'
322
334
  require_relative 'rubocop/cop/lint/useless_setter_call'
323
335
  require_relative 'rubocop/cop/lint/void'
@@ -326,6 +338,7 @@ require_relative 'rubocop/cop/metrics/utils/iterating_block'
326
338
  require_relative 'rubocop/cop/metrics/cyclomatic_complexity'
327
339
  # relies on cyclomatic_complexity
328
340
  require_relative 'rubocop/cop/metrics/utils/abc_size_calculator'
341
+ require_relative 'rubocop/cop/metrics/utils/code_length_calculator'
329
342
  require_relative 'rubocop/cop/metrics/abc_size'
330
343
  require_relative 'rubocop/cop/metrics/block_length'
331
344
  require_relative 'rubocop/cop/metrics/block_nesting'
@@ -353,17 +366,21 @@ require_relative 'rubocop/cop/naming/variable_name'
353
366
  require_relative 'rubocop/cop/naming/variable_number'
354
367
 
355
368
  require_relative 'rubocop/cop/style/access_modifier_declarations'
369
+ require_relative 'rubocop/cop/style/accessor_grouping'
356
370
  require_relative 'rubocop/cop/style/alias'
357
371
  require_relative 'rubocop/cop/style/and_or'
372
+ require_relative 'rubocop/cop/style/array_coercion'
358
373
  require_relative 'rubocop/cop/style/array_join'
359
374
  require_relative 'rubocop/cop/style/ascii_comments'
360
375
  require_relative 'rubocop/cop/style/attr'
361
376
  require_relative 'rubocop/cop/style/auto_resource_cleanup'
362
377
  require_relative 'rubocop/cop/style/bare_percent_literals'
363
378
  require_relative 'rubocop/cop/style/begin_block'
379
+ require_relative 'rubocop/cop/style/bisected_attr_accessor'
364
380
  require_relative 'rubocop/cop/style/block_comments'
365
381
  require_relative 'rubocop/cop/style/block_delimiters'
366
382
  require_relative 'rubocop/cop/style/case_equality'
383
+ require_relative 'rubocop/cop/style/case_like_if'
367
384
  require_relative 'rubocop/cop/style/character_literal'
368
385
  require_relative 'rubocop/cop/style/class_and_module_children'
369
386
  require_relative 'rubocop/cop/style/class_check'
@@ -399,15 +416,19 @@ require_relative 'rubocop/cop/style/end_block'
399
416
  require_relative 'rubocop/cop/style/eval_with_location'
400
417
  require_relative 'rubocop/cop/style/even_odd'
401
418
  require_relative 'rubocop/cop/style/expand_path_arguments'
419
+ require_relative 'rubocop/cop/style/explicit_block_argument'
402
420
  require_relative 'rubocop/cop/style/exponential_notation'
403
421
  require_relative 'rubocop/cop/style/float_division'
404
422
  require_relative 'rubocop/cop/style/for'
405
423
  require_relative 'rubocop/cop/style/format_string'
406
424
  require_relative 'rubocop/cop/style/format_string_token'
407
425
  require_relative 'rubocop/cop/style/frozen_string_literal_comment'
426
+ require_relative 'rubocop/cop/style/global_std_stream'
408
427
  require_relative 'rubocop/cop/style/global_vars'
409
428
  require_relative 'rubocop/cop/style/guard_clause'
429
+ require_relative 'rubocop/cop/style/hash_as_last_array_item'
410
430
  require_relative 'rubocop/cop/style/hash_each_methods'
431
+ require_relative 'rubocop/cop/style/hash_like_case'
411
432
  require_relative 'rubocop/cop/style/hash_syntax'
412
433
  require_relative 'rubocop/cop/style/hash_transform_keys'
413
434
  require_relative 'rubocop/cop/style/hash_transform_values'
@@ -426,12 +447,13 @@ require_relative 'rubocop/cop/style/lambda_call'
426
447
  require_relative 'rubocop/cop/style/line_end_concatenation'
427
448
  require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
428
449
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
450
+ require_relative 'rubocop/cop/style/redundant_assignment'
429
451
  require_relative 'rubocop/cop/style/redundant_fetch_block'
452
+ require_relative 'rubocop/cop/style/redundant_file_extension_in_require'
430
453
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses'
431
454
  require_relative 'rubocop/cop/style/method_call_with_args_parentheses/require_parentheses'
432
455
  require_relative 'rubocop/cop/style/method_called_on_do_end_block'
433
456
  require_relative 'rubocop/cop/style/method_def_parentheses'
434
- require_relative 'rubocop/cop/style/method_missing_super'
435
457
  require_relative 'rubocop/cop/style/min_max'
436
458
  require_relative 'rubocop/cop/style/missing_else'
437
459
  require_relative 'rubocop/cop/style/missing_respond_to_missing'
@@ -464,6 +486,7 @@ require_relative 'rubocop/cop/style/one_line_conditional'
464
486
  require_relative 'rubocop/cop/style/or_assignment'
465
487
  require_relative 'rubocop/cop/style/option_hash'
466
488
  require_relative 'rubocop/cop/style/optional_arguments'
489
+ require_relative 'rubocop/cop/style/optional_boolean_parameter'
467
490
  require_relative 'rubocop/cop/style/parallel_assignment'
468
491
  require_relative 'rubocop/cop/style/parentheses_around_condition'
469
492
  require_relative 'rubocop/cop/style/percent_literal_delimiters'
@@ -498,12 +521,14 @@ require_relative 'rubocop/cop/style/self_assignment'
498
521
  require_relative 'rubocop/cop/style/semicolon'
499
522
  require_relative 'rubocop/cop/style/send'
500
523
  require_relative 'rubocop/cop/style/signal_exception'
524
+ require_relative 'rubocop/cop/style/single_argument_dig'
501
525
  require_relative 'rubocop/cop/style/single_line_block_params'
502
526
  require_relative 'rubocop/cop/style/single_line_methods'
503
527
  require_relative 'rubocop/cop/style/slicing_with_range'
504
528
  require_relative 'rubocop/cop/style/special_global_vars'
505
529
  require_relative 'rubocop/cop/style/stabby_lambda_parentheses'
506
530
  require_relative 'rubocop/cop/style/stderr_puts'
531
+ require_relative 'rubocop/cop/style/string_concatenation'
507
532
  require_relative 'rubocop/cop/style/string_hash_keys'
508
533
  require_relative 'rubocop/cop/style/string_literals'
509
534
  require_relative 'rubocop/cop/style/string_literals_in_interpolation'
@@ -75,7 +75,7 @@ module RuboCop
75
75
 
76
76
  def validate_options_vs_config
77
77
  if @options[:parallel] &&
78
- !@config_store.for_dir(Dir.pwd).for_all_cops['UseCache']
78
+ !@config_store.for_pwd.for_all_cops['UseCache']
79
79
  raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
80
80
  'execution, so combining with AllCops: ' \
81
81
  'UseCache: false is not allowed.'
@@ -101,11 +101,9 @@ module RuboCop
101
101
 
102
102
  def set_options_to_config_loader
103
103
  ConfigLoader.debug = @options[:debug]
104
- ConfigLoader.auto_gen_config = @options[:auto_gen_config]
105
104
  ConfigLoader.disable_pending_cops = @options[:disable_pending_cops]
106
105
  ConfigLoader.enable_pending_cops = @options[:enable_pending_cops]
107
106
  ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
108
- ConfigLoader.options_config = @options[:config]
109
107
  end
110
108
 
111
109
  def handle_exiting_options
@@ -123,7 +121,7 @@ module RuboCop
123
121
  if @options[:auto_gen_config]
124
122
  formatter = 'autogenconf'
125
123
  else
126
- cfg = @config_store.for_dir(Dir.pwd).for_all_cops
124
+ cfg = @config_store.for_pwd.for_all_cops
127
125
  formatter = cfg['DefaultFormatter'] || 'progress'
128
126
  end
129
127
  [[formatter, @options[:output_path]]]
@@ -7,6 +7,8 @@ module RuboCop
7
7
  class AutoGenerateConfig < Base
8
8
  self.command_name = :auto_gen_config
9
9
 
10
+ AUTO_GENERATED_FILE = '.rubocop_todo.yml'
11
+
10
12
  PHASE_1 = 'Phase 1 of 2: run Layout/LineLength cop'
11
13
  PHASE_2 = 'Phase 2 of 2: run all cops'
12
14
 
@@ -25,10 +27,10 @@ module RuboCop
25
27
  private
26
28
 
27
29
  def maybe_run_line_length_cop
28
- if !line_length_enabled?(@config_store.for_dir(Dir.pwd))
30
+ if !line_length_enabled?(@config_store.for_pwd)
29
31
  skip_line_length_cop(PHASE_1_DISABLED)
30
32
  elsif !same_max_line_length?(
31
- @config_store.for_dir(Dir.pwd), ConfigLoader.default_configuration
33
+ @config_store.for_pwd, ConfigLoader.default_configuration
32
34
  )
33
35
  skip_line_length_cop(PHASE_1_OVERRIDDEN)
34
36
  else
@@ -67,7 +69,7 @@ module RuboCop
67
69
  @options.delete(:only)
68
70
  @config_store = ConfigStore.new
69
71
  # Save the todo configuration of the LineLength cop.
70
- IO.read(ConfigLoader::AUTO_GENERATED_FILE)
72
+ IO.read(AUTO_GENERATED_FILE)
71
73
  .lines
72
74
  .drop_while { |line| line.start_with?('#') }
73
75
  .join
@@ -78,7 +80,7 @@ module RuboCop
78
80
  result = execute_runner
79
81
  # This run was made with the current maximum length allowed, so append
80
82
  # the saved setting for LineLength.
81
- File.open(ConfigLoader::AUTO_GENERATED_FILE, 'a') do |f|
83
+ File.open(AUTO_GENERATED_FILE, 'a') do |f|
82
84
  f.write(line_length_contents)
83
85
  end
84
86
  result
@@ -87,18 +89,51 @@ module RuboCop
87
89
  def reset_config_and_auto_gen_file
88
90
  @config_store = ConfigStore.new
89
91
  @config_store.options_config = @options[:config] if @options[:config]
90
- File.open(ConfigLoader::AUTO_GENERATED_FILE, 'w') {}
91
- ConfigLoader.add_inheritance_from_auto_generated_file
92
+ File.open(AUTO_GENERATED_FILE, 'w') {}
93
+ add_inheritance_from_auto_generated_file(@options[:config])
92
94
  end
93
95
 
94
96
  def add_formatter
95
97
  @options[:formatters] << [Formatter::DisabledConfigFormatter,
96
- ConfigLoader::AUTO_GENERATED_FILE]
98
+ AUTO_GENERATED_FILE]
97
99
  end
98
100
 
99
101
  def execute_runner
100
102
  Environment.new(@options, @config_store, @paths).run(:execute_runner)
101
103
  end
104
+
105
+ def add_inheritance_from_auto_generated_file(config_file)
106
+ file_string = " #{AUTO_GENERATED_FILE}"
107
+
108
+ config_file ||= ConfigLoader::DOTFILE
109
+
110
+ if File.exist?(config_file)
111
+ files = Array(ConfigLoader.load_yaml_configuration(config_file)['inherit_from'])
112
+
113
+ return if files.include?(AUTO_GENERATED_FILE)
114
+
115
+ files.unshift(AUTO_GENERATED_FILE)
116
+ file_string = "\n - #{files.join("\n - ")}" if files.size > 1
117
+ rubocop_yml_contents = existing_configuration(config_file)
118
+ end
119
+
120
+ write_config_file(config_file, file_string, rubocop_yml_contents)
121
+
122
+ puts "Added inheritance from `#{AUTO_GENERATED_FILE}` in `#{ConfigLoader::DOTFILE}`."
123
+ end
124
+
125
+ def existing_configuration(config_file)
126
+ IO.read(config_file, encoding: Encoding::UTF_8)
127
+ .sub(/^inherit_from: *[^\n]+/, '')
128
+ .sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
129
+ end
130
+
131
+ def write_config_file(file_name, file_string, rubocop_yml_contents)
132
+ File.open(file_name, 'w') do |f|
133
+ f.write "inherit_from:#{file_string}\n"
134
+ f.write "\n#{rubocop_yml_contents}" if /\S/.match?(rubocop_yml_contents)
135
+ end
136
+ end
102
137
  end
103
138
  end
104
139
  end
@@ -13,6 +13,7 @@ module RuboCop
13
13
  attr_accessor :command_name
14
14
 
15
15
  def inherited(subclass)
16
+ super
16
17
  @subclasses << subclass
17
18
  end
18
19
 
@@ -55,7 +55,7 @@ module RuboCop
55
55
  #{Gem.loaded_specs['rubocop'].metadata['bug_tracker_uri']}
56
56
 
57
57
  Mention the following information in the issue report:
58
- #{RuboCop::Version.version(true)}
58
+ #{RuboCop::Version.version(debug: true)}
59
59
  WARNING
60
60
  end
61
61
 
@@ -22,7 +22,7 @@ module RuboCop
22
22
  private
23
23
 
24
24
  def print_available_cops
25
- registry = Cop::Cop.registry
25
+ registry = Cop::Registry.global
26
26
  show_all = @options[:show_cops].empty?
27
27
 
28
28
  if show_all
@@ -49,7 +49,7 @@ module RuboCop
49
49
 
50
50
  def print_cop_details(cops)
51
51
  cops.each do |cop|
52
- puts '# Supports --auto-correct' if cop.new(@config).support_autocorrect?
52
+ puts '# Supports --auto-correct' if cop.support_autocorrect?
53
53
  puts "#{cop.cop_name}:"
54
54
  puts config_lines(cop)
55
55
  puts
@@ -68,7 +68,7 @@ module RuboCop
68
68
 
69
69
  def config_lines(cop)
70
70
  cnf = @config.for_cop(cop)
71
- cnf.to_yaml.lines.to_a.drop(1).map { |line| ' ' + line }
71
+ cnf.to_yaml.lines.to_a.drop(1).map { |line| " #{line}" }
72
72
  end
73
73
  end
74
74
  end
@@ -8,8 +8,8 @@ module RuboCop
8
8
  self.command_name = :version
9
9
 
10
10
  def run
11
- puts RuboCop::Version.version(false) if @options[:version]
12
- puts RuboCop::Version.version(true) if @options[:verbose_version]
11
+ puts RuboCop::Version.version(debug: false) if @options[:version]
12
+ puts RuboCop::Version.version(debug: true) if @options[:verbose_version]
13
13
  end
14
14
  end
15
15
  end
@@ -11,7 +11,7 @@ module RuboCop
11
11
  COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
12
12
 
13
13
  COMMENT_DIRECTIVE_REGEXP = Regexp.new(
14
- ('# rubocop : ((?:disable|enable|todo))\b ' + COPS_PATTERN)
14
+ "# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
15
15
  .gsub(' ', '\s*')
16
16
  )
17
17
 
@@ -55,7 +55,7 @@ module RuboCop
55
55
  extras
56
56
  end
57
57
 
58
- def analyze
58
+ def analyze # rubocop:todo Metrics/AbcSize
59
59
  analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
60
60
 
61
61
  each_mentioned_cop do |cop_name, disabled, line, single_line|
@@ -128,9 +128,7 @@ module RuboCop
128
128
  end
129
129
 
130
130
  def each_directive
131
- return if processed_source.comments.nil?
132
-
133
- processed_source.each_comment do |comment|
131
+ processed_source.comments.each do |comment|
134
132
  directive = directive_parts(comment)
135
133
  next unless directive
136
134
 
@@ -153,11 +151,11 @@ module RuboCop
153
151
  end
154
152
 
155
153
  def qualified_cop_name(cop_name)
156
- Cop::Cop.qualified_cop_name(cop_name.strip, processed_source.file_path)
154
+ Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path)
157
155
  end
158
156
 
159
157
  def all_cop_names
160
- @all_cop_names ||= Cop::Cop.registry.names - [REDUNDANT_DISABLE]
158
+ @all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
161
159
  end
162
160
 
163
161
  def comment_only_line?(line_number)
@@ -24,7 +24,7 @@ module RuboCop
24
24
  def initialize(hash = {}, loaded_path = nil)
25
25
  @loaded_path = loaded_path
26
26
  @for_cop = Hash.new do |h, cop|
27
- qualified_cop_name = Cop::Cop.qualified_cop_name(cop, loaded_path)
27
+ qualified_cop_name = Cop::Registry.qualified_cop_name(cop, loaded_path)
28
28
  cop_options = self[qualified_cop_name] || {}
29
29
  cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
30
30
  h[cop] = cop_options
@@ -47,7 +47,7 @@ module RuboCop
47
47
  end
48
48
 
49
49
  def_delegators :@hash, :[], :[]=, :delete, :each, :key?, :keys, :each_key,
50
- :map, :merge, :to_h, :to_hash, :transform_values
50
+ :fetch, :map, :merge, :to_h, :to_hash, :transform_values
51
51
  def_delegators :@validator, :validate, :target_ruby_version
52
52
 
53
53
  def to_s
@@ -104,12 +104,29 @@ module RuboCop
104
104
  end
105
105
  end
106
106
 
107
+ # @return [Config] for the given cop / cop name.
108
+ # Note: the 'Enabled' attribute is calculated according to the department's
109
+ # and 'AllCops' configuration; other attributes are not inherited.
107
110
  def for_cop(cop)
108
111
  @for_cop[cop.respond_to?(:cop_name) ? cop.cop_name : cop]
109
112
  end
110
113
 
114
+ # @return [Config] for the given cop merged with that of its department (if any)
115
+ # Note: the 'Enabled' attribute is same as that returned by `for_cop`
116
+ def for_badge(badge)
117
+ cop_config = for_cop(badge.to_s)
118
+ fetch(badge.department.to_s) { return cop_config }
119
+ .merge(cop_config)
120
+ end
121
+
122
+ # @return [Config] for the given department name.
123
+ # Note: the 'Enabled' attribute will be present only if specified
124
+ # at the department's level
111
125
  def for_department(department_name)
112
- @for_cop[department_name]
126
+ @for_department ||= Hash.new do |h, dept|
127
+ h[dept] = self[dept] || {}
128
+ end
129
+ @for_department[department_name.to_s]
113
130
  end
114
131
 
115
132
  def for_all_cops