rubocop 0.85.1 → 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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -4
  3. data/bin/rubocop-profile +32 -0
  4. data/config/default.yml +227 -26
  5. data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
  6. data/lib/rubocop/cli/command/base.rb +1 -0
  7. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  8. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  9. data/lib/rubocop/cli/command/show_cops.rb +3 -3
  10. data/lib/rubocop/cli/command/version.rb +2 -2
  11. data/lib/rubocop/cli.rb +2 -4
  12. data/lib/rubocop/comment_config.rb +5 -7
  13. data/lib/rubocop/config.rb +21 -4
  14. data/lib/rubocop/config_loader.rb +41 -69
  15. data/lib/rubocop/config_loader_resolver.rb +4 -4
  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 +39 -13
  33. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  34. data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
  35. data/lib/rubocop/cop/generator.rb +1 -1
  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 +4 -4
  47. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  48. data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
  49. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  50. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -8
  51. data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
  52. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  53. data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
  54. data/lib/rubocop/cop/layout/first_argument_indentation.rb +5 -1
  55. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  56. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  57. data/lib/rubocop/cop/layout/hash_alignment.rb +2 -3
  58. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  59. data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
  60. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  61. data/lib/rubocop/cop/layout/multiline_block_layout.rb +17 -7
  62. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  63. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
  64. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
  65. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
  66. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  67. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
  68. data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
  69. data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
  70. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +4 -3
  71. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
  72. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
  73. data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
  74. data/lib/rubocop/cop/legacy/corrector.rb +29 -0
  75. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
  76. data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
  77. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
  78. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  79. data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
  80. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
  81. data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
  82. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  83. data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
  84. data/lib/rubocop/cop/lint/debugger.rb +7 -1
  85. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
  86. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
  87. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
  88. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  89. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  90. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  91. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
  92. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
  93. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  94. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  95. data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
  96. data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
  97. data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
  98. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
  99. data/lib/rubocop/cop/lint/empty_when.rb +2 -2
  100. data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
  101. data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
  102. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  103. data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
  104. data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -2
  105. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -5
  106. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
  107. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
  108. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
  109. data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
  110. data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
  111. data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
  112. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
  113. data/lib/rubocop/cop/lint/loop.rb +23 -2
  114. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
  115. data/lib/rubocop/cop/lint/missing_super.rb +99 -0
  116. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  117. data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
  118. data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
  119. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  120. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  121. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +84 -13
  122. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  123. data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
  124. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
  125. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
  126. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
  127. data/lib/rubocop/cop/lint/percent_string_array.rb +14 -13
  128. data/lib/rubocop/cop/lint/percent_symbol_array.rb +14 -13
  129. data/lib/rubocop/cop/lint/raise_exception.rb +15 -5
  130. data/lib/rubocop/cop/lint/rand_one.rb +3 -3
  131. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +43 -40
  132. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
  133. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
  134. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
  135. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
  136. data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
  137. data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
  138. data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -2
  139. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
  140. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  141. data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
  142. data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
  143. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
  144. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
  145. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +10 -2
  146. data/lib/rubocop/cop/lint/script_permission.rb +10 -7
  147. data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
  148. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
  149. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
  150. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
  151. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
  152. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  153. data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
  154. data/lib/rubocop/cop/lint/syntax.rb +11 -26
  155. data/lib/rubocop/cop/lint/to_json.rb +4 -6
  156. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
  157. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
  158. data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
  159. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  160. data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
  161. data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
  162. data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
  163. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  164. data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
  165. data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
  166. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
  167. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
  168. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
  169. data/lib/rubocop/cop/lint/void.rb +3 -7
  170. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  171. data/lib/rubocop/cop/metrics/block_length.rb +24 -2
  172. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  173. data/lib/rubocop/cop/metrics/class_length.rb +26 -3
  174. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
  175. data/lib/rubocop/cop/metrics/method_length.rb +25 -2
  176. data/lib/rubocop/cop/metrics/module_length.rb +26 -3
  177. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
  178. data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
  179. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +47 -4
  180. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
  181. data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
  182. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
  183. data/lib/rubocop/cop/migration/department_name.rb +14 -16
  184. data/lib/rubocop/cop/mixin/alignment.rb +2 -1
  185. data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
  186. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
  187. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  188. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  189. data/lib/rubocop/cop/mixin/code_length.rb +26 -5
  190. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
  191. data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
  192. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
  193. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  194. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
  195. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
  196. data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
  197. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  198. data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
  199. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  200. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  201. data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
  202. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
  203. data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
  204. data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
  205. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
  206. data/lib/rubocop/cop/mixin/range_help.rb +19 -5
  207. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
  208. data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
  209. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  210. data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -27
  211. data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -5
  212. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -17
  213. data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
  214. data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
  215. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  216. data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
  217. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +4 -4
  218. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  219. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
  220. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  221. data/lib/rubocop/cop/naming/file_name.rb +4 -6
  222. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  223. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -3
  224. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
  225. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  226. data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
  227. data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
  228. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
  229. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  230. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  231. data/lib/rubocop/cop/offense.rb +16 -2
  232. data/lib/rubocop/cop/registry.rb +3 -3
  233. data/lib/rubocop/cop/security/eval.rb +2 -2
  234. data/lib/rubocop/cop/security/json_load.rb +6 -8
  235. data/lib/rubocop/cop/security/marshal_load.rb +2 -4
  236. data/lib/rubocop/cop/security/open.rb +2 -2
  237. data/lib/rubocop/cop/security/yaml_load.rb +6 -6
  238. data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
  239. data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
  240. data/lib/rubocop/cop/style/alias.rb +41 -36
  241. data/lib/rubocop/cop/style/and_or.rb +9 -11
  242. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  243. data/lib/rubocop/cop/style/array_join.rb +6 -8
  244. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  245. data/lib/rubocop/cop/style/attr.rb +11 -9
  246. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
  247. data/lib/rubocop/cop/style/bare_percent_literals.rb +11 -13
  248. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  249. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
  250. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  251. data/lib/rubocop/cop/style/block_delimiters.rb +25 -27
  252. data/lib/rubocop/cop/style/case_equality.rb +22 -3
  253. data/lib/rubocop/cop/style/case_like_if.rb +220 -0
  254. data/lib/rubocop/cop/style/class_and_module_children.rb +15 -12
  255. data/lib/rubocop/cop/style/class_check.rb +7 -9
  256. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  257. data/lib/rubocop/cop/style/class_vars.rb +24 -7
  258. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  259. data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
  260. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  261. data/lib/rubocop/cop/style/command_literal.rb +24 -25
  262. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  263. data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
  264. data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
  265. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  266. data/lib/rubocop/cop/style/copyright.rb +15 -15
  267. data/lib/rubocop/cop/style/date_time.rb +2 -2
  268. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  269. data/lib/rubocop/cop/style/dir.rb +9 -12
  270. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +8 -10
  271. data/lib/rubocop/cop/style/documentation.rb +8 -10
  272. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  273. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  274. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  275. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  276. data/lib/rubocop/cop/style/each_with_object.rb +16 -19
  277. data/lib/rubocop/cop/style/empty_case_condition.rb +27 -26
  278. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  279. data/lib/rubocop/cop/style/empty_literal.rb +20 -21
  280. data/lib/rubocop/cop/style/empty_method.rb +10 -13
  281. data/lib/rubocop/cop/style/encoding.rb +6 -10
  282. data/lib/rubocop/cop/style/end_block.rb +4 -6
  283. data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
  284. data/lib/rubocop/cop/style/even_odd.rb +7 -11
  285. data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
  286. data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
  287. data/lib/rubocop/cop/style/exponential_notation.rb +9 -11
  288. data/lib/rubocop/cop/style/float_division.rb +8 -11
  289. data/lib/rubocop/cop/style/for.rb +11 -15
  290. data/lib/rubocop/cop/style/format_string.rb +21 -19
  291. data/lib/rubocop/cop/style/format_string_token.rb +10 -12
  292. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +20 -42
  293. data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
  294. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  295. data/lib/rubocop/cop/style/guard_clause.rb +5 -6
  296. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
  297. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  298. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  299. data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
  300. data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
  301. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
  302. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  303. data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
  304. data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
  305. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
  306. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  307. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  308. data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
  309. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  310. data/lib/rubocop/cop/style/inverse_methods.rb +23 -33
  311. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  312. data/lib/rubocop/cop/style/lambda.rb +7 -12
  313. data/lib/rubocop/cop/style/lambda_call.rb +14 -13
  314. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  315. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
  316. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  317. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  318. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
  319. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  320. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  321. data/lib/rubocop/cop/style/min_max.rb +8 -12
  322. data/lib/rubocop/cop/style/missing_else.rb +11 -21
  323. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
  324. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  325. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  326. data/lib/rubocop/cop/style/module_function.rb +10 -13
  327. data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
  328. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  329. data/lib/rubocop/cop/style/multiline_if_then.rb +5 -11
  330. data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
  331. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  332. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -8
  333. data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
  334. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  335. data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
  336. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
  337. data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
  338. data/lib/rubocop/cop/style/next.rb +2 -2
  339. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
  340. data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
  341. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
  342. data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
  343. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
  344. data/lib/rubocop/cop/style/proc.rb +1 -1
  345. data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
  346. data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
  347. data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
  348. data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
  349. data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
  350. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  351. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  352. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -2
  353. data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
  354. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +4 -3
  355. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -32
  356. data/lib/rubocop/cop/style/redundant_self.rb +6 -9
  357. data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
  358. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
  359. data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
  360. data/lib/rubocop/cop/style/sample.rb +1 -1
  361. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  362. data/lib/rubocop/cop/style/signal_exception.rb +3 -1
  363. data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
  364. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  365. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
  366. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  367. data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
  368. data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
  369. data/lib/rubocop/cop/style/symbol_array.rb +6 -6
  370. data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
  371. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  372. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  373. data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
  374. data/lib/rubocop/cop/style/word_array.rb +1 -1
  375. data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
  376. data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
  377. data/lib/rubocop/cop/team.rb +98 -82
  378. data/lib/rubocop/cop/tokens_util.rb +84 -0
  379. data/lib/rubocop/cop/util.rb +5 -15
  380. data/lib/rubocop/cop/utils/format_string.rb +2 -3
  381. data/lib/rubocop/cop/variable_force/branch.rb +1 -0
  382. data/lib/rubocop/cop/variable_force/variable.rb +7 -5
  383. data/lib/rubocop/cop/variable_force.rb +0 -2
  384. data/lib/rubocop/cops_documentation_generator.rb +282 -0
  385. data/lib/rubocop/error.rb +1 -0
  386. data/lib/rubocop/file_finder.rb +12 -12
  387. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -3
  388. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  389. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  390. data/lib/rubocop/name_similarity.rb +7 -3
  391. data/lib/rubocop/options.rb +18 -11
  392. data/lib/rubocop/path_util.rb +19 -19
  393. data/lib/rubocop/platform.rb +1 -1
  394. data/lib/rubocop/rake_task.rb +7 -9
  395. data/lib/rubocop/result_cache.rb +12 -8
  396. data/lib/rubocop/rspec/cop_helper.rb +4 -4
  397. data/lib/rubocop/rspec/expect_offense.rb +63 -22
  398. data/lib/rubocop/rspec/shared_contexts.rb +16 -17
  399. data/lib/rubocop/runner.rb +35 -34
  400. data/lib/rubocop/target_finder.rb +14 -11
  401. data/lib/rubocop/target_ruby.rb +2 -2
  402. data/lib/rubocop/version.rb +2 -2
  403. data/lib/rubocop.rb +33 -5
  404. metadata +49 -11
  405. data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
  406. data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
  407. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
  408. data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
  409. data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -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
 
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # RuboCop will start looking for the configuration file in the directory
28
28
  # where the inspected file is and continue its way up to the root directory.
29
29
  #
30
- # See https://github.com/rubocop-hq/rubocop/blob/master/manual/configuration.md
30
+ # See https://docs.rubocop.org/rubocop/configuration
31
31
  DESC
32
32
 
33
33
  File.open(DOTFILE, 'w') do |f|
@@ -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
data/lib/rubocop/cli.rb CHANGED
@@ -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]]]
@@ -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
@@ -152,7 +169,7 @@ module RuboCop
152
169
  return true if File.extname(file) == '.gemspec'
153
170
 
154
171
  file_to_include?(file) do |pattern, relative_path, absolute_path|
155
- pattern.to_s =~ /[A-Z]/ &&
172
+ /[A-Z]/.match?(pattern.to_s) &&
156
173
  (match_path?(pattern, relative_path) ||
157
174
  match_path?(pattern, absolute_path))
158
175
  end
@@ -18,25 +18,23 @@ module RuboCop
18
18
  XDG_CONFIG = 'config.yml'
19
19
  RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
20
20
  DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml')
21
- AUTO_GENERATED_FILE = '.rubocop_todo.yml'
22
21
 
23
22
  class << self
24
23
  include FileFinder
25
24
 
26
- attr_accessor :debug, :auto_gen_config, :ignore_parent_exclusion,
27
- :options_config, :disable_pending_cops, :enable_pending_cops
28
- attr_writer :default_configuration
25
+ attr_accessor :debug, :ignore_parent_exclusion,
26
+ :disable_pending_cops, :enable_pending_cops
27
+ attr_writer :default_configuration, :project_root
29
28
 
30
29
  alias debug? debug
31
- alias auto_gen_config? auto_gen_config
32
30
  alias ignore_parent_exclusion? ignore_parent_exclusion
33
31
 
34
32
  def clear_options
35
- @debug = @auto_gen_config = @options_config = nil
33
+ @debug = nil
36
34
  FileFinder.root_level = nil
37
35
  end
38
36
 
39
- def load_file(file) # rubocop:disable Metrics/AbcSize
37
+ def load_file(file)
40
38
  path = File.absolute_path(file.is_a?(RemoteConfig) ? file.file : file)
41
39
 
42
40
  hash = load_yaml_configuration(path)
@@ -55,12 +53,27 @@ module RuboCop
55
53
  Config.create(hash, path)
56
54
  end
57
55
 
56
+ def load_yaml_configuration(absolute_path)
57
+ file_contents = read_file(absolute_path)
58
+ yaml_code = Dir.chdir(File.dirname(absolute_path)) do
59
+ ERB.new(file_contents).result
60
+ end
61
+ check_duplication(yaml_code, absolute_path)
62
+ hash = yaml_safe_load(yaml_code, absolute_path) || {}
63
+
64
+ puts "configuration from #{absolute_path}" if debug?
65
+
66
+ raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
67
+
68
+ hash
69
+ end
70
+
58
71
  def add_missing_namespaces(path, hash)
59
72
  # Using `hash.each_key` will cause the
60
73
  # `can't add a new key into hash during iteration` error
61
74
  hash_keys = hash.keys
62
75
  hash_keys.each do |key|
63
- q = Cop::Cop.qualified_cop_name(key, path)
76
+ q = Cop::Registry.qualified_cop_name(key, path)
64
77
  next if q == key
65
78
 
66
79
  hash[q] = hash.delete(key)
@@ -85,7 +98,7 @@ module RuboCop
85
98
  end
86
99
 
87
100
  def configuration_from_file(config_file)
88
- return ConfigLoader.default_configuration if config_file == DEFAULT_FILE
101
+ return default_configuration if config_file == DEFAULT_FILE
89
102
 
90
103
  config = load_file(config_file)
91
104
  if ignore_parent_exclusion?
@@ -105,15 +118,13 @@ module RuboCop
105
118
  end
106
119
 
107
120
  def add_excludes_from_files(config, config_file)
108
- found_files = find_files_upwards(DOTFILE, config_file) +
109
- [find_user_dotfile, find_user_xdg_config].compact
121
+ exclusion_file = find_last_file_upwards(DOTFILE, config_file, project_root)
110
122
 
111
- return if found_files.empty?
112
- return if PathUtil.relative_path(found_files.last) ==
113
- PathUtil.relative_path(config_file)
123
+ return unless exclusion_file
124
+ return if PathUtil.relative_path(exclusion_file) == PathUtil.relative_path(config_file)
114
125
 
115
126
  print 'AllCops/Exclude ' if debug?
116
- config.add_excludes_from_higher_level(load_file(found_files.last))
127
+ config.add_excludes_from_higher_level(load_file(exclusion_file))
117
128
  end
118
129
 
119
130
  def default_configuration
@@ -123,6 +134,12 @@ module RuboCop
123
134
  end
124
135
  end
125
136
 
137
+ # Returns the path rubocop inferred as the root of the project. No file
138
+ # searches will go past this directory.
139
+ def project_root
140
+ @project_root ||= find_project_root
141
+ end
142
+
126
143
  def warn_on_pending_cops(pending_cops)
127
144
  return if pending_cops.empty?
128
145
 
@@ -139,40 +156,23 @@ module RuboCop
139
156
  warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
140
157
  end
141
158
 
142
- # Merges the given configuration with the default one. If
143
- # AllCops:DisabledByDefault is true, it changes the Enabled params so
144
- # that only cops from user configuration are enabled.
145
- # If AllCops::EnabledByDefault is true, it changes the Enabled params
146
- # so that only cops explicitly disabled in user configuration are
147
- # disabled.
159
+ # Merges the given configuration with the default one.
148
160
  def merge_with_default(config, config_file, unset_nil: true)
149
161
  resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
150
162
  end
151
163
 
152
- def add_inheritance_from_auto_generated_file
153
- file_string = " #{AUTO_GENERATED_FILE}"
154
-
155
- config_file = options_config || DOTFILE
156
-
157
- if File.exist?(config_file)
158
- files = Array(load_yaml_configuration(config_file)['inherit_from'])
159
-
160
- return if files.include?(AUTO_GENERATED_FILE)
161
-
162
- files.unshift(AUTO_GENERATED_FILE)
163
- file_string = "\n - " + files.join("\n - ") if files.size > 1
164
- rubocop_yml_contents = existing_configuration(config_file)
165
- end
166
-
167
- write_config_file(config_file, file_string, rubocop_yml_contents)
164
+ private
168
165
 
169
- puts "Added inheritance from `#{AUTO_GENERATED_FILE}` in `#{DOTFILE}`."
166
+ def find_project_dotfile(target_dir)
167
+ find_file_upwards(DOTFILE, target_dir, project_root)
170
168
  end
171
169
 
172
- private
170
+ def find_project_root
171
+ pwd = Dir.pwd
172
+ gems_file = find_last_file_upwards('Gemfile', pwd) || find_last_file_upwards('gems.rb', pwd)
173
+ return unless gems_file
173
174
 
174
- def find_project_dotfile(target_dir)
175
- find_file_upwards(DOTFILE, target_dir)
175
+ File.dirname(gems_file)
176
176
  end
177
177
 
178
178
  def find_user_dotfile
@@ -196,38 +196,10 @@ module RuboCop
196
196
  path
197
197
  end
198
198
 
199
- def existing_configuration(config_file)
200
- IO.read(config_file, encoding: Encoding::UTF_8)
201
- .sub(/^inherit_from: *[^\n]+/, '')
202
- .sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
203
- end
204
-
205
- def write_config_file(file_name, file_string, rubocop_yml_contents)
206
- File.open(file_name, 'w') do |f|
207
- f.write "inherit_from:#{file_string}\n"
208
- f.write "\n#{rubocop_yml_contents}" if /\S/.match?(rubocop_yml_contents)
209
- end
210
- end
211
-
212
199
  def resolver
213
200
  @resolver ||= ConfigLoaderResolver.new
214
201
  end
215
202
 
216
- def load_yaml_configuration(absolute_path)
217
- file_contents = read_file(absolute_path)
218
- yaml_code = Dir.chdir(File.dirname(absolute_path)) do
219
- ERB.new(file_contents).result
220
- end
221
- check_duplication(yaml_code, absolute_path)
222
- hash = yaml_safe_load(yaml_code, absolute_path) || {}
223
-
224
- puts "configuration from #{absolute_path}" if debug?
225
-
226
- raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
227
-
228
- hash
229
- end
230
-
231
203
  def check_duplication(yaml_code, absolute_path)
232
204
  smart_path = PathUtil.smart_path(absolute_path)
233
205
  YAMLDuplicationChecker.check(yaml_code, absolute_path) do |key1, key2|
@@ -192,7 +192,7 @@ module RuboCop
192
192
 
193
193
  def remote_file?(uri)
194
194
  regex = URI::DEFAULT_PARSER.make_regexp(%w[http https])
195
- uri =~ /\A#{regex}\z/
195
+ /\A#{regex}\z/.match?(uri)
196
196
  end
197
197
 
198
198
  def handle_disabled_by_default(config, new_default_configuration)
@@ -201,7 +201,7 @@ module RuboCop
201
201
  next unless dept_params['Enabled']
202
202
 
203
203
  new_default_configuration.each do |cop, params|
204
- next unless cop.start_with?(dept + '/')
204
+ next unless cop.start_with?("#{dept}/")
205
205
 
206
206
  # Retain original default configuration for cops in the department.
207
207
  params['Enabled'] = ConfigLoader.default_configuration[cop]['Enabled']
@@ -213,8 +213,8 @@ module RuboCop
213
213
  end
214
214
  end
215
215
 
216
- def transform(config)
217
- config.transform_values { |params| yield(params) }
216
+ def transform(config, &block)
217
+ config.transform_values(&block)
218
218
  end
219
219
 
220
220
  def gem_config_path(gem_name, relative_config_path)
@@ -63,7 +63,6 @@ module RuboCop
63
63
  'Layout/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
64
64
  'Layout/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
65
65
  'Lint/RescueWithoutErrorClass' => 'Style/RescueStandardError',
66
- 'Rails/DefaultScope' => nil,
67
66
  'Style/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
68
67
  'Style/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
69
68
  'Style/TrailingComma' => 'Style/TrailingCommaInArguments, ' \
@@ -85,7 +84,12 @@ module RuboCop
85
84
  'Lint/InvalidCharacterLiteral' => 'it was never being actually triggered',
86
85
  'Lint/SpaceBeforeFirstArg' =>
87
86
  'it was a duplicate of `Layout/SpaceBeforeFirstArg`. Please use ' \
88
- '`Layout/SpaceBeforeFirstArg` instead'
87
+ '`Layout/SpaceBeforeFirstArg` instead',
88
+ 'Style/MethodMissingSuper' => 'it has been superseded by `Lint/MissingSuper`. Please use ' \
89
+ '`Lint/MissingSuper` instead',
90
+ 'Lint/UselessComparison' => 'it has been superseded by '\
91
+ '`Lint/BinaryOperatorWithIdenticalOperands`. Please use '\
92
+ '`Lint/BinaryOperatorWithIdenticalOperands` instead'
89
93
  }.map do |cop_name, reason|
90
94
  [cop_name, "The `#{cop_name}` cop has been removed since #{reason}."]
91
95
  end
@@ -33,6 +33,10 @@ module RuboCop
33
33
  for_dir(File.dirname(file))
34
34
  end
35
35
 
36
+ def for_pwd
37
+ for_dir(Dir.pwd)
38
+ end
39
+
36
40
  # If type (file/dir) is known beforehand,
37
41
  # prefer using #for_file or #for_dir for improved performance
38
42
  def for(file_or_dir)
@@ -23,7 +23,6 @@ module RuboCop
23
23
  @target_ruby = TargetRuby.new(config)
24
24
  end
25
25
 
26
- # rubocop:disable Metrics/AbcSize
27
26
  def validate
28
27
  check_cop_config_value(@config)
29
28
  reject_conflicting_safe_settings
@@ -45,7 +44,6 @@ module RuboCop
45
44
  validate_syntax_cop
46
45
  reject_mutually_exclusive_defaults
47
46
  end
48
- # rubocop:enable Metrics/AbcSize
49
47
 
50
48
  def target_ruby_version
51
49
  target_ruby.version
@@ -86,7 +84,7 @@ module RuboCop
86
84
  unknown_cops = []
87
85
  invalid_cop_names.each do |name|
88
86
  # There could be a custom cop with this name. If so, don't warn
89
- next if Cop::Cop.registry.contains_cop_matching?([name])
87
+ next if Cop::Registry.global.contains_cop_matching?([name])
90
88
 
91
89
  # Special case for inherit_mode, which is a directive that we keep in
92
90
  # the configuration (even though it's not a cop), because it's easier
@@ -150,7 +148,7 @@ module RuboCop
150
148
  end
151
149
  end
152
150
 
153
- def validate_enforced_styles(valid_cop_names)
151
+ def validate_enforced_styles(valid_cop_names) # rubocop:todo Metrics/AbcSize
154
152
  valid_cop_names.each do |name|
155
153
  styles = @config[name].select { |key, _| key.start_with?('Enforced') }
156
154
 
@@ -13,11 +13,7 @@ module RuboCop
13
13
  end
14
14
 
15
15
  def correctable?
16
- support_autocorrect? || disable_uncorrectable?
17
- end
18
-
19
- def support_autocorrect?
20
- respond_to?(:autocorrect)
16
+ self.class.support_autocorrect? || disable_uncorrectable?
21
17
  end
22
18
 
23
19
  def disable_uncorrectable?
@@ -40,8 +36,9 @@ module RuboCop
40
36
  true
41
37
  end
42
38
 
43
- def disable_offense(node)
44
- range = node.location.expression
39
+ private
40
+
41
+ def disable_offense(range)
45
42
  eol_comment = " # rubocop:todo #{cop_name}"
46
43
  needed_line_length = (range.source_line + eol_comment).length
47
44
  if needed_line_length <= max_line_length
@@ -52,8 +49,6 @@ module RuboCop
52
49
  end
53
50
  end
54
51
 
55
- private
56
-
57
52
  def range_of_first_line(range)
58
53
  begin_of_first_line = range.begin_pos - range.column
59
54
  end_of_first_line = begin_of_first_line + range.source_line.length
@@ -78,27 +73,22 @@ module RuboCop
78
73
  end
79
74
 
80
75
  def max_line_length
81
- config.for_cop('Layout/LineLength')['Max'] || 80
76
+ config.for_cop('Layout/LineLength')['Max'] || 120
82
77
  end
83
78
 
84
79
  def disable_offense_at_end_of_line(range, eol_comment)
85
- ->(corrector) { corrector.insert_after(range, eol_comment) }
80
+ Corrector.new(range).insert_after(range, eol_comment)
86
81
  end
87
82
 
88
83
  def disable_offense_before_and_after(range_by_lines)
89
- lambda do |corrector|
90
- range_with_newline = range_by_lines.resize(range_by_lines.size + 1)
91
- leading_whitespace = range_by_lines.source_line[/^\s*/]
92
-
93
- corrector.insert_before(
94
- range_with_newline,
95
- "#{leading_whitespace}# rubocop:todo #{cop_name}\n"
96
- )
97
- corrector.insert_after(
98
- range_with_newline,
99
- "#{leading_whitespace}# rubocop:enable #{cop_name}\n"
100
- )
101
- end
84
+ range_with_newline = range_by_lines.resize(range_by_lines.size + 1)
85
+ leading_whitespace = range_by_lines.source_line[/^\s*/]
86
+
87
+ Corrector.new(range_by_lines).wrap(
88
+ range_with_newline,
89
+ "#{leading_whitespace}# rubocop:todo #{cop_name}\n",
90
+ "#{leading_whitespace}# rubocop:enable #{cop_name}\n"
91
+ )
102
92
  end
103
93
  end
104
94
  end
@@ -58,7 +58,7 @@ module RuboCop
58
58
  end
59
59
 
60
60
  def to_s
61
- qualified? ? "#{department}/#{cop_name}" : cop_name
61
+ @to_s ||= qualified? ? "#{department}/#{cop_name}" : cop_name
62
62
  end
63
63
 
64
64
  def qualified?