rubocop 1.11.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/config/default.yml +58 -6
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +6 -1
  6. data/lib/rubocop/cached_data.rb +1 -3
  7. data/lib/rubocop/cli.rb +4 -6
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  11. data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
  12. data/lib/rubocop/comment_config.rb +45 -101
  13. data/lib/rubocop/config.rb +11 -26
  14. data/lib/rubocop/config_loader.rb +5 -11
  15. data/lib/rubocop/config_loader_resolver.rb +22 -14
  16. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  17. data/lib/rubocop/config_store.rb +1 -2
  18. data/lib/rubocop/config_validator.rb +5 -10
  19. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  20. data/lib/rubocop/cop/badge.rb +1 -2
  21. data/lib/rubocop/cop/base.rb +8 -6
  22. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  23. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
  24. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  25. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  26. data/lib/rubocop/cop/commissioner.rb +2 -8
  27. data/lib/rubocop/cop/cop.rb +4 -18
  28. data/lib/rubocop/cop/corrector.rb +1 -4
  29. data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
  30. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  31. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  32. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  33. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  35. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  36. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  37. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  38. data/lib/rubocop/cop/generator.rb +1 -4
  39. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  40. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  41. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  42. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  43. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  45. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  47. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  48. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
  49. data/lib/rubocop/cop/layout/argument_alignment.rb +34 -18
  50. data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
  51. data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
  52. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  53. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  54. data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
  55. data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
  56. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  57. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
  58. data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
  59. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  60. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  61. data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
  62. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  63. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  64. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  65. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  66. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  67. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  68. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  69. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  70. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  71. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -5
  72. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
  73. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +36 -20
  75. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  76. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  77. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  78. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
  79. data/lib/rubocop/cop/layout/hash_alignment.rb +18 -13
  80. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  81. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  82. data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
  83. data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
  84. data/lib/rubocop/cop/layout/indentation_width.rb +24 -12
  85. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  86. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  87. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  88. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  89. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  90. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  91. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
  92. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
  93. data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
  94. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  95. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  96. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  97. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  99. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  100. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  101. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
  102. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  103. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  104. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  105. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  106. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  107. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  108. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  109. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  110. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  111. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  112. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  113. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  114. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  115. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  116. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  117. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  118. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  119. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  120. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  121. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  122. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  123. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  124. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  125. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  126. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  127. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  128. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  129. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  130. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  131. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  132. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  133. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  134. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  135. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  136. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  137. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  138. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  139. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  140. data/lib/rubocop/cop/lint/loop.rb +1 -2
  141. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  142. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  143. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  144. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  145. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  146. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  147. data/lib/rubocop/cop/lint/number_conversion.rb +11 -5
  148. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  149. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  150. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  151. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  152. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  153. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  154. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
  155. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  156. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  157. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  158. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  159. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  160. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  161. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  162. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  163. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  164. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  165. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  166. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  167. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  168. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  169. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  170. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  171. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  172. data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
  173. data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
  174. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  175. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  176. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  177. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  178. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  179. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  180. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  181. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  182. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  183. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  184. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  185. data/lib/rubocop/cop/lint/void.rb +5 -12
  186. data/lib/rubocop/cop/message_annotator.rb +1 -3
  187. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  188. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  189. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  190. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  191. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  192. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  193. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  194. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  195. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  196. data/lib/rubocop/cop/mixin/alignment.rb +12 -7
  197. data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
  198. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  199. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  200. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  201. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  202. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  203. data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
  204. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  205. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  206. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  207. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  208. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  209. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  210. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  211. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
  212. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  213. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  214. data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
  215. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  216. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  217. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  218. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
  219. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  220. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
  221. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  222. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  223. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  224. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  225. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  226. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  227. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +4 -7
  228. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  229. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  230. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  231. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  232. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  233. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  234. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  235. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  236. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  237. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
  238. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  239. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  240. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  241. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  242. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +6 -3
  243. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  244. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  245. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
  246. data/lib/rubocop/cop/offense.rb +3 -8
  247. data/lib/rubocop/cop/registry.rb +12 -11
  248. data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -5
  249. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  250. data/lib/rubocop/cop/style/alias.rb +5 -12
  251. data/lib/rubocop/cop/style/and_or.rb +3 -1
  252. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  253. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  254. data/lib/rubocop/cop/style/attr.rb +1 -3
  255. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  256. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
  257. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  258. data/lib/rubocop/cop/style/case_like_if.rb +16 -6
  259. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  260. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  261. data/lib/rubocop/cop/style/class_equality_comparison.rb +2 -0
  262. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  263. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  264. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  265. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  266. data/lib/rubocop/cop/style/command_literal.rb +4 -9
  267. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  268. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  269. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  270. data/lib/rubocop/cop/style/copyright.rb +3 -6
  271. data/lib/rubocop/cop/style/date_time.rb +2 -5
  272. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  273. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  274. data/lib/rubocop/cop/style/documentation.rb +25 -3
  275. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  276. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  277. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  278. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  279. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  280. data/lib/rubocop/cop/style/end_block.rb +1 -2
  281. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  282. data/lib/rubocop/cop/style/eval_with_location.rb +3 -5
  283. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  284. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  285. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  286. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  287. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  288. data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
  289. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -2
  290. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  291. data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
  292. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
  293. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  294. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  295. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  296. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  297. data/lib/rubocop/cop/style/lambda.rb +2 -4
  298. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  299. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  300. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
  301. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
  302. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  303. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  304. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  305. data/lib/rubocop/cop/style/min_max.rb +1 -2
  306. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  307. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  308. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  309. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  310. data/lib/rubocop/cop/style/module_function.rb +3 -6
  311. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  312. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  313. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  314. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  315. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  316. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  317. data/lib/rubocop/cop/style/negated_if_else_condition.rb +23 -2
  318. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  319. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  320. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  321. data/lib/rubocop/cop/style/next.rb +4 -9
  322. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  323. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  324. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  325. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  326. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  327. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  328. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  329. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  330. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  331. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  332. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  333. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  334. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  335. data/lib/rubocop/cop/style/proc.rb +1 -2
  336. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  337. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  338. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  339. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  340. data/lib/rubocop/cop/style/redundant_begin.rb +40 -6
  341. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  342. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  343. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  344. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  345. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  346. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  347. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  348. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  349. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  350. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  351. data/lib/rubocop/cop/style/redundant_return.rb +6 -4
  352. data/lib/rubocop/cop/style/redundant_self.rb +9 -9
  353. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  354. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  355. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  356. data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
  357. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  358. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  359. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  360. data/lib/rubocop/cop/style/send.rb +1 -2
  361. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  362. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  363. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  364. data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
  365. data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
  366. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  367. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  368. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  369. data/lib/rubocop/cop/style/string_chars.rb +39 -0
  370. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  371. data/lib/rubocop/cop/style/string_literals.rb +2 -5
  372. data/lib/rubocop/cop/style/struct_inheritance.rb +10 -0
  373. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  374. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  375. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  376. data/lib/rubocop/cop/style/top_level_method_definition.rb +75 -0
  377. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -3
  378. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  379. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  380. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  381. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  382. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  383. data/lib/rubocop/cop/style/unless_logical_operators.rb +8 -2
  384. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  385. data/lib/rubocop/cop/style/when_then.rb +1 -3
  386. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  387. data/lib/rubocop/cop/style/word_array.rb +1 -2
  388. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  389. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  390. data/lib/rubocop/cop/team.rb +2 -5
  391. data/lib/rubocop/cop/util.rb +8 -11
  392. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  393. data/lib/rubocop/cop/variable_force.rb +6 -15
  394. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  395. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  396. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  397. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  398. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  399. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  400. data/lib/rubocop/directive_comment.rb +69 -9
  401. data/lib/rubocop/ext/regexp_parser.rb +3 -6
  402. data/lib/rubocop/file_finder.rb +1 -3
  403. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  404. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  405. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  406. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  407. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  408. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  409. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  410. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  411. data/lib/rubocop/magic_comment.rb +1 -1
  412. data/lib/rubocop/options.rb +30 -50
  413. data/lib/rubocop/path_util.rb +1 -3
  414. data/lib/rubocop/rake_task.rb +3 -0
  415. data/lib/rubocop/remote_config.rb +4 -7
  416. data/lib/rubocop/result_cache.rb +5 -12
  417. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  418. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  419. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  420. data/lib/rubocop/runner.rb +7 -14
  421. data/lib/rubocop/target_finder.rb +19 -16
  422. data/lib/rubocop/target_ruby.rb +4 -8
  423. data/lib/rubocop/version.rb +1 -1
  424. metadata +13 -7
  425. data/lib/rubocop/core_ext/hash.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dac7fff2f013c47a104cadfc9ca1a02a9f0996c13da30cf53c96f9c427f528bf
4
- data.tar.gz: 55120478bfcd4ff14e326c6be7af570852b226ad27a02e9b2835ddda7d8e4324
3
+ metadata.gz: 1009c9da04982d8684219d15bcaaf8a09f5aa3523d8fb668fb47b885281e11ef
4
+ data.tar.gz: fac46c18283c960c698d18f5fd6206cef3d309b2d74bc5046c0c6ba30ca60431
5
5
  SHA512:
6
- metadata.gz: 8b47ab24450c94098487e2efcaf3c6c45314e07523ca7272356908792f06689f95ab4032eed06f9a55a1f68ad75432c599f6bbcec83b5a3ce3e611dab9e2f608
7
- data.tar.gz: 1ba4a1fef00d332d644f242d97954cad9ad4cbcb2cf7cad1d2a2bec48540a2ae12d895a107283aac1933dd34230a45b02cb0470290f0c502bae2c5d3e762662f
6
+ metadata.gz: 292b418ad2da13f7357a6b3189128ed35a84fa662506de26d4973797e430751b158e9cb0c7a0753c0cded518ba0299cf5bcf1394abb9793aa728b4dedf36863a
7
+ data.tar.gz: cfca1c661ace6abafa34d5506c27ef48afe3ba2abc7187d3fabf41db0abce0c93d59d2f5411671d22fbadea6a09987cda71f2600cc85b5b88b18fca7f526f451
data/README.md CHANGED
@@ -10,6 +10,7 @@
10
10
  [![Test Coverage](https://api.codeclimate.com/v1/badges/d2d67f728e88ea84ac69/test_coverage)](https://codeclimate.com/github/rubocop/rubocop/test_coverage)
11
11
  [![Maintainability](https://api.codeclimate.com/v1/badges/d2d67f728e88ea84ac69/maintainability)](https://codeclimate.com/github/rubocop/rubocop/maintainability)
12
12
  [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=rubocop&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score.html?dependency-name=rubocop&package-manager=bundler&version-scheme=semver)
13
+ [![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/wJjWvGRDmm)
13
14
 
14
15
  > Role models are important. <br/>
15
16
  > -- Officer Alex J. Murphy / RoboCop
@@ -28,6 +29,8 @@ RuboCop is extremely flexible and most aspects of its behavior can be tweaked vi
28
29
  [![OpenCollective](https://opencollective.com/rubocop/sponsors/badge.svg)](#open-collective-sponsors)
29
30
  [![Tidelift](https://tidelift.com/badges/package/rubygems/rubocop)](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme)
30
31
 
32
+ Working on RuboCop is often fun, but it also requires a great deal of time and energy.
33
+
31
34
  **Please consider [financially supporting its ongoing development](#funding).**
32
35
 
33
36
  ## Installation
@@ -51,10 +54,10 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
51
54
  in your `Gemfile`:
52
55
 
53
56
  ```rb
54
- gem 'rubocop', '~> 1.11', require: false
57
+ gem 'rubocop', '~> 1.15', require: false
55
58
  ```
56
59
 
57
- See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
60
+ See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
58
61
 
59
62
  ## Quickstart
60
63
 
@@ -73,7 +76,7 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
73
76
 
74
77
  RuboCop officially supports the following Ruby implementations:
75
78
 
76
- * MRI 2.4+
79
+ * MRI 2.5+
77
80
  * JRuby 9.2+
78
81
 
79
82
  See the [compatibility documentation](https://docs.rubocop.org/rubocop/compatibility.html) for further details.
data/config/default.yml CHANGED
@@ -130,7 +130,7 @@ AllCops:
130
130
  # What MRI version of the Ruby interpreter is the inspected code intended to
131
131
  # run on? (If there is more than one, set this to the lowest version.)
132
132
  # If a value is specified for TargetRubyVersion then it is used. Acceptable
133
- # values are specificed as a float (i.e. 2.5); the teeny version of Ruby
133
+ # values are specificed as a float (i.e. 3.0); the teeny version of Ruby
134
134
  # should not be included. If the project specifies a Ruby version in the
135
135
  # .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will
136
136
  # try to determine the desired version of Ruby by inspecting the
@@ -138,7 +138,7 @@ AllCops:
138
138
  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
139
139
  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
140
140
  # Ruby version is still unresolved, RuboCop will use the oldest officially
141
- # supported Ruby version (currently Ruby 2.4).
141
+ # supported Ruby version (currently Ruby 2.5).
142
142
  TargetRubyVersion: ~
143
143
  # Determines if a notification for extension libraries should be shown when
144
144
  # rubocop is run. Keys are the name of the extension, and values are an array
@@ -174,6 +174,20 @@ Bundler/GemComment:
174
174
  IgnoredGems: []
175
175
  OnlyFor: []
176
176
 
177
+ Bundler/GemVersion:
178
+ Description: 'Requires or forbids specifying gem versions.'
179
+ Enabled: false
180
+ VersionAdded: '1.14'
181
+ EnforcedStyle: 'required'
182
+ SupportedStyles:
183
+ - 'required'
184
+ - 'forbidden'
185
+ Include:
186
+ - '**/*.gemfile'
187
+ - '**/Gemfile'
188
+ - '**/gems.rb'
189
+ AllowedGems: []
190
+
177
191
  Bundler/InsecureProtocolSource:
178
192
  Description: >-
179
193
  The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated
@@ -1101,11 +1115,24 @@ Layout/ParameterAlignment:
1101
1115
  # But it can be overridden by setting this parameter
1102
1116
  IndentationWidth: ~
1103
1117
 
1118
+ Layout/RedundantLineBreak:
1119
+ Description: >-
1120
+ Do not break up an expression into multiple lines when it fits
1121
+ on a single line.
1122
+ Enabled: false
1123
+ InspectBlocks: false
1124
+ VersionAdded: '1.13'
1125
+
1104
1126
  Layout/RescueEnsureAlignment:
1105
1127
  Description: 'Align rescues and ensures correctly.'
1106
1128
  Enabled: true
1107
1129
  VersionAdded: '0.49'
1108
1130
 
1131
+ Layout/SingleLineBlockChain:
1132
+ Description: 'Put method call on a separate line if chained to a single line block.'
1133
+ Enabled: false
1134
+ VersionAdded: '1.14'
1135
+
1109
1136
  Layout/SpaceAfterColon:
1110
1137
  Description: 'Use spaces after colons.'
1111
1138
  StyleGuide: '#spaces-operators'
@@ -1380,6 +1407,8 @@ Lint/AmbiguousBlockAssociation:
1380
1407
  StyleGuide: '#syntax'
1381
1408
  Enabled: true
1382
1409
  VersionAdded: '0.48'
1410
+ VersionChanged: '1.13'
1411
+ IgnoredMethods: []
1383
1412
 
1384
1413
  Lint/AmbiguousOperator:
1385
1414
  Description: >-
@@ -1583,7 +1612,7 @@ Lint/EmptyBlock:
1583
1612
  Description: 'This cop checks for blocks without a body.'
1584
1613
  Enabled: pending
1585
1614
  VersionAdded: '1.1'
1586
- VersionChanged: '1.3'
1615
+ VersionChanged: '1.15'
1587
1616
  AllowComments: true
1588
1617
  AllowEmptyLambdas: true
1589
1618
 
@@ -2055,13 +2084,18 @@ Lint/SuppressedException:
2055
2084
  StyleGuide: '#dont-hide-exceptions'
2056
2085
  Enabled: true
2057
2086
  AllowComments: true
2087
+ AllowNil: true
2058
2088
  VersionAdded: '0.9'
2059
- VersionChanged: '0.81'
2089
+ VersionChanged: '1.12'
2060
2090
 
2061
2091
  Lint/SymbolConversion:
2062
2092
  Description: 'Checks for unnecessary symbol conversions.'
2063
2093
  Enabled: pending
2064
2094
  VersionAdded: '1.9'
2095
+ EnforcedStyle: strict
2096
+ SupportedStyles:
2097
+ - strict
2098
+ - consistent
2065
2099
 
2066
2100
  Lint/Syntax:
2067
2101
  Description: 'Checks for syntax errors.'
@@ -2489,6 +2523,7 @@ Naming/MemoizedInstanceVariableName:
2489
2523
  - disallowed
2490
2524
  - required
2491
2525
  - optional
2526
+ Safe: false
2492
2527
 
2493
2528
  Naming/MethodName:
2494
2529
  Description: 'Use the configured style when naming methods.'
@@ -3174,6 +3209,7 @@ Style/Documentation:
3174
3209
  Description: 'Document classes and non-namespace modules.'
3175
3210
  Enabled: true
3176
3211
  VersionAdded: '0.9'
3212
+ AllowedConstants: []
3177
3213
  Exclude:
3178
3214
  - 'spec/**/*'
3179
3215
  - 'test/**/*'
@@ -3444,6 +3480,7 @@ Style/HashAsLastArrayItem:
3444
3480
 
3445
3481
  Style/HashConversion:
3446
3482
  Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
3483
+ StyleGuide: '#avoid-hash-constructor'
3447
3484
  Enabled: pending
3448
3485
  VersionAdded: '1.10'
3449
3486
  VersionChanged: '1.11'
@@ -3672,6 +3709,7 @@ Style/MethodCallWithArgsParentheses:
3672
3709
  AllowParenthesesInMultilineCall: false
3673
3710
  AllowParenthesesInChaining: false
3674
3711
  AllowParenthesesInCamelCaseMethod: false
3712
+ AllowParenthesesInStringInterpolation: false
3675
3713
  EnforcedStyle: require_parentheses
3676
3714
  SupportedStyles:
3677
3715
  - require_parentheses
@@ -3961,6 +3999,7 @@ Style/NilLambda:
3961
3999
  Description: 'Prefer `-> {}` to `-> { nil }`.'
3962
4000
  Enabled: pending
3963
4001
  VersionAdded: '1.3'
4002
+ VersionChanged: '1.15'
3964
4003
 
3965
4004
  Style/NonNilCheck:
3966
4005
  Description: 'Checks for redundant nil checks.'
@@ -4491,6 +4530,13 @@ Style/StderrPuts:
4491
4530
  Enabled: true
4492
4531
  VersionAdded: '0.51'
4493
4532
 
4533
+ Style/StringChars:
4534
+ Description: 'Checks for uses of `String#split` with empty string or regexp literal argument.'
4535
+ StyleGuide: '#string-chars'
4536
+ Enabled: pending
4537
+ Safe: false
4538
+ VersionAdded: '1.12'
4539
+
4494
4540
  Style/StringConcatenation:
4495
4541
  Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
4496
4542
  StyleGuide: '#string-interpolation'
@@ -4607,6 +4653,12 @@ Style/TernaryParentheses:
4607
4653
  - require_parentheses_when_complex
4608
4654
  AllowSafeAssignment: true
4609
4655
 
4656
+ Style/TopLevelMethodDefinition:
4657
+ Description: 'This cop looks for top-level method definitions.'
4658
+ StyleGuide: '#top-level-methods'
4659
+ Enabled: false
4660
+ VersionAdded: '1.15'
4661
+
4610
4662
  Style/TrailingBodyOnClass:
4611
4663
  Description: 'Class body goes below class statement.'
4612
4664
  Enabled: true
@@ -4693,7 +4745,7 @@ Style/TrivialAccessors:
4693
4745
  StyleGuide: '#attr_family'
4694
4746
  Enabled: true
4695
4747
  VersionAdded: '0.9'
4696
- VersionChanged: '0.77'
4748
+ VersionChanged: '1.15'
4697
4749
  # When set to `false` the cop will suggest the use of accessor methods
4698
4750
  # in situations like:
4699
4751
  #
@@ -4712,7 +4764,7 @@ Style/TrivialAccessors:
4712
4764
  # on_exception :restart
4713
4765
  #
4714
4766
  # Commonly used in DSLs
4715
- AllowDSLWriters: false
4767
+ AllowDSLWriters: true
4716
4768
  IgnoreClassMethods: false
4717
4769
  AllowedMethods:
4718
4770
  - to_ary
data/exe/rubocop CHANGED
@@ -9,9 +9,7 @@ require 'benchmark'
9
9
  cli = RuboCop::CLI.new
10
10
  result = 0
11
11
 
12
- time = Benchmark.realtime do
13
- result = cli.run
14
- end
12
+ time = Benchmark.realtime { result = cli.run }
15
13
 
16
14
  puts "Finished in #{time} seconds" if cli.options[:debug] || cli.options[:display_time]
17
15
  exit result
data/lib/rubocop.rb CHANGED
@@ -18,7 +18,6 @@ require_relative 'rubocop/ext/regexp_node'
18
18
  require_relative 'rubocop/ext/regexp_parser'
19
19
 
20
20
  require_relative 'rubocop/core_ext/string'
21
- require_relative 'rubocop/core_ext/hash'
22
21
  require_relative 'rubocop/ext/processed_source'
23
22
 
24
23
  require_relative 'rubocop/path_util'
@@ -83,6 +82,7 @@ require_relative 'rubocop/cop/mixin/end_keyword_alignment'
83
82
  require_relative 'rubocop/cop/mixin/enforce_superclass'
84
83
  require_relative 'rubocop/cop/mixin/first_element_line_break'
85
84
  require_relative 'rubocop/cop/mixin/frozen_string_literal'
85
+ require_relative 'rubocop/cop/mixin/gem_declaration'
86
86
  require_relative 'rubocop/cop/mixin/hash_alignment_styles'
87
87
  require_relative 'rubocop/cop/mixin/hash_transform_method'
88
88
  require_relative 'rubocop/cop/mixin/ignored_pattern'
@@ -149,6 +149,7 @@ require_relative 'rubocop/cop/correctors/unused_arg_corrector'
149
149
 
150
150
  require_relative 'rubocop/cop/bundler/duplicated_gem'
151
151
  require_relative 'rubocop/cop/bundler/gem_comment'
152
+ require_relative 'rubocop/cop/bundler/gem_version'
152
153
  require_relative 'rubocop/cop/bundler/insecure_protocol_source'
153
154
  require_relative 'rubocop/cop/bundler/ordered_gems'
154
155
 
@@ -222,7 +223,9 @@ require_relative 'rubocop/cop/layout/multiline_method_call_indentation'
222
223
  require_relative 'rubocop/cop/layout/multiline_method_definition_brace_layout'
223
224
  require_relative 'rubocop/cop/layout/multiline_operation_indentation'
224
225
  require_relative 'rubocop/cop/layout/parameter_alignment'
226
+ require_relative 'rubocop/cop/layout/redundant_line_break'
225
227
  require_relative 'rubocop/cop/layout/rescue_ensure_alignment'
228
+ require_relative 'rubocop/cop/layout/single_line_block_chain'
226
229
  require_relative 'rubocop/cop/layout/space_after_colon'
227
230
  require_relative 'rubocop/cop/layout/space_after_comma'
228
231
  require_relative 'rubocop/cop/layout/space_after_method_name'
@@ -582,6 +585,7 @@ require_relative 'rubocop/cop/style/slicing_with_range'
582
585
  require_relative 'rubocop/cop/style/special_global_vars'
583
586
  require_relative 'rubocop/cop/style/stabby_lambda_parentheses'
584
587
  require_relative 'rubocop/cop/style/stderr_puts'
588
+ require_relative 'rubocop/cop/style/string_chars'
585
589
  require_relative 'rubocop/cop/style/string_concatenation'
586
590
  require_relative 'rubocop/cop/style/string_hash_keys'
587
591
  require_relative 'rubocop/cop/style/string_literals'
@@ -594,6 +598,7 @@ require_relative 'rubocop/cop/style/symbol_array'
594
598
  require_relative 'rubocop/cop/style/symbol_literal'
595
599
  require_relative 'rubocop/cop/style/symbol_proc'
596
600
  require_relative 'rubocop/cop/style/ternary_parentheses'
601
+ require_relative 'rubocop/cop/style/top_level_method_definition'
597
602
  require_relative 'rubocop/cop/style/trailing_body_on_class'
598
603
  require_relative 'rubocop/cop/style/trailing_body_on_method_definition'
599
604
  require_relative 'rubocop/cop/style/trailing_body_on_module'
@@ -51,9 +51,7 @@ module RuboCop
51
51
  location = Parser::Source::Range.new(source_buffer,
52
52
  o['location']['begin_pos'],
53
53
  o['location']['end_pos'])
54
- Cop::Offense.new(o['severity'], location,
55
- o['message'],
56
- o['cop_name'], o['status'].to_sym)
54
+ Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym)
57
55
  end
58
56
  end
59
57
  end
data/lib/rubocop/cli.rb CHANGED
@@ -78,12 +78,10 @@ module RuboCop
78
78
  end
79
79
 
80
80
  def validate_options_vs_config
81
- if @options[:parallel] &&
82
- !@config_store.for_pwd.for_all_cops['UseCache']
83
- raise OptionArgumentError, '-P/--parallel uses caching to speed up ' \
84
- 'execution, so combining with AllCops: ' \
85
- 'UseCache: false is not allowed.'
86
- end
81
+ return unless @options[:parallel] && !@config_store.for_pwd.for_all_cops['UseCache']
82
+
83
+ raise OptionArgumentError, '-P/--parallel uses caching to speed up execution, so combining ' \
84
+ 'with AllCops: UseCache: false is not allowed.'
87
85
  end
88
86
 
89
87
  def act_on_options
@@ -14,10 +14,8 @@ module RuboCop
14
14
  PHASE_1 = 'Phase 1 of 2: run Layout/LineLength cop'
15
15
  PHASE_2 = 'Phase 2 of 2: run all cops'
16
16
 
17
- PHASE_1_OVERRIDDEN =
18
- '(skipped because the default Layout/LineLength:Max is overridden)'
19
- PHASE_1_DISABLED =
20
- '(skipped because Layout/LineLength is disabled)'
17
+ PHASE_1_OVERRIDDEN = '(skipped because the default Layout/LineLength:Max is overridden)'
18
+ PHASE_1_DISABLED = '(skipped because Layout/LineLength is disabled)'
21
19
 
22
20
  def run
23
21
  add_formatter
@@ -31,9 +29,7 @@ module RuboCop
31
29
  def maybe_run_line_length_cop
32
30
  if !line_length_enabled?(@config_store.for_pwd)
33
31
  skip_line_length_cop(PHASE_1_DISABLED)
34
- elsif !same_max_line_length?(
35
- @config_store.for_pwd, ConfigLoader.default_configuration
36
- )
32
+ elsif !same_max_line_length?(@config_store.for_pwd, ConfigLoader.default_configuration)
37
33
  skip_line_length_cop(PHASE_1_OVERRIDDEN)
38
34
  else
39
35
  run_line_length_cop
@@ -71,10 +67,7 @@ module RuboCop
71
67
  @options.delete(:only)
72
68
  @config_store = ConfigStore.new
73
69
  # Save the todo configuration of the LineLength cop.
74
- IO.read(AUTO_GENERATED_FILE)
75
- .lines
76
- .drop_while { |line| line.start_with?('#') }
77
- .join
70
+ File.read(AUTO_GENERATED_FILE).lines.drop_while { |line| line.start_with?('#') }.join
78
71
  end
79
72
 
80
73
  def run_all_cops(line_length_contents)
@@ -82,9 +75,7 @@ module RuboCop
82
75
  result = execute_runner
83
76
  # This run was made with the current maximum length allowed, so append
84
77
  # the saved setting for LineLength.
85
- File.open(AUTO_GENERATED_FILE, 'a') do |f|
86
- f.write(line_length_contents)
87
- end
78
+ File.open(AUTO_GENERATED_FILE, 'a') { |f| f.write(line_length_contents) }
88
79
  result
89
80
  end
90
81
 
@@ -96,8 +87,7 @@ module RuboCop
96
87
  end
97
88
 
98
89
  def add_formatter
99
- @options[:formatters] << [Formatter::DisabledConfigFormatter,
100
- AUTO_GENERATED_FILE]
90
+ @options[:formatters] << [Formatter::DisabledConfigFormatter, AUTO_GENERATED_FILE]
101
91
  end
102
92
 
103
93
  def execute_runner
@@ -125,9 +115,9 @@ module RuboCop
125
115
  end
126
116
 
127
117
  def existing_configuration(config_file)
128
- IO.read(config_file, encoding: Encoding::UTF_8)
129
- .sub(/^inherit_from: *[^\n]+/, '')
130
- .sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
118
+ File.read(config_file, encoding: Encoding::UTF_8)
119
+ .sub(/^inherit_from: *[^\n]+/, '')
120
+ .sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
131
121
  end
132
122
 
133
123
  def write_config_file(file_name, file_string, rubocop_yml_contents)
@@ -31,9 +31,7 @@ module RuboCop
31
31
  # See https://docs.rubocop.org/rubocop/configuration
32
32
  DESC
33
33
 
34
- File.open(DOTFILE, 'w') do |f|
35
- f.write(description)
36
- end
34
+ File.open(DOTFILE, 'w') { |f| f.write(description) }
37
35
 
38
36
  puts "Writing new #{DOTFILE} to #{path}"
39
37
 
@@ -26,10 +26,7 @@ module RuboCop
26
26
  registry = Cop::Registry.global
27
27
  show_all = @options[:show_cops].empty?
28
28
 
29
- if show_all
30
- puts "# Available cops (#{registry.length}) " \
31
- "+ config for #{Dir.pwd}: "
32
- end
29
+ puts "# Available cops (#{registry.length}) + config for #{Dir.pwd}: " if show_all
33
30
 
34
31
  registry.departments.sort!.each do |department|
35
32
  print_cops_of_department(registry, department, show_all)
@@ -22,7 +22,7 @@ module RuboCop
22
22
  'RuboCop extension libraries might be helpful:'
23
23
 
24
24
  extensions.sort.each do |extension|
25
- puts " * #{extension} (http://github.com/rubocop/#{extension})"
25
+ puts " * #{extension} (https://github.com/rubocop/#{extension})"
26
26
  end
27
27
 
28
28
  puts
@@ -43,7 +43,8 @@ module RuboCop
43
43
  # 2. When given RuboCop options that it doesn't make sense for
44
44
  # 3. For all formatters except specified in `INCLUDED_FORMATTERS'`
45
45
  ENV['CI'] ||
46
- @options[:only] || @options[:debug] || @options[:list_target_files] || @options[:out] ||
46
+ @options[:only] || @options[:debug] || @options[:list_target_files] ||
47
+ @options[:out] || @options[:stdin] ||
47
48
  !INCLUDED_FORMATTERS.include?(current_formatter)
48
49
  end
49
50
 
@@ -4,22 +4,6 @@ module RuboCop
4
4
  # This class parses the special `rubocop:disable` comments in a source
5
5
  # and provides a way to check if each cop is enabled at arbitrary line.
6
6
  class CommentConfig
7
- # @api private
8
- REDUNDANT_DISABLE = 'Lint/RedundantCopDisableDirective'
9
-
10
- # @api private
11
- COP_NAME_PATTERN = '([A-Z]\w+/)*(?:[A-Z]\w+)'
12
- # @api private
13
- COP_NAMES_PATTERN = "(?:#{COP_NAME_PATTERN} , )*#{COP_NAME_PATTERN}"
14
- # @api private
15
- COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
16
-
17
- # @api private
18
- COMMENT_DIRECTIVE_REGEXP = Regexp.new(
19
- "# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
20
- .gsub(' ', '\s*')
21
- )
22
-
23
7
  CopAnalysis = Struct.new(:line_ranges, :start_line_number)
24
8
 
25
9
  attr_reader :processed_source
@@ -41,28 +25,23 @@ module RuboCop
41
25
  end
42
26
 
43
27
  def extra_enabled_comments
44
- extra_enabled_comments_with_names(
45
- extras: Hash.new { |h, k| h[k] = [] },
46
- names: Hash.new(0)
47
- )
28
+ extra_enabled_comments_with_names(extras: Hash.new { |h, k| h[k] = [] }, names: Hash.new(0))
48
29
  end
49
30
 
50
31
  def comment_only_line?(line_number)
51
- non_comment_token_line_numbers.none? do |non_comment_line_number|
52
- non_comment_line_number == line_number
53
- end
32
+ non_comment_token_line_numbers.none?(line_number)
54
33
  end
55
34
 
56
35
  private
57
36
 
58
37
  def extra_enabled_comments_with_names(extras:, names:)
59
- each_directive do |comment, cop_names, disabled|
60
- next unless comment_only_line?(comment.loc.expression.line)
38
+ each_directive do |directive|
39
+ next unless comment_only_line?(directive.line_number)
61
40
 
62
- if !disabled && enable_all?(comment)
63
- handle_enable_all(names, extras, comment)
41
+ if directive.enabled_all?
42
+ handle_enable_all(directive, names, extras)
64
43
  else
65
- handle_switch(cop_names, names, disabled, extras, comment)
44
+ handle_switch(directive, names, extras)
66
45
  end
67
46
  end
68
47
 
@@ -72,9 +51,11 @@ module RuboCop
72
51
  def analyze # rubocop:todo Metrics/AbcSize
73
52
  analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
74
53
 
75
- each_mentioned_cop do |cop_name, disabled, line, single_line|
76
- analyses[cop_name] =
77
- analyze_cop(analyses[cop_name], disabled, line, single_line)
54
+ each_directive do |directive|
55
+ directive.cop_names.each do |cop_name|
56
+ cop_name = qualified_cop_name(cop_name)
57
+ analyses[cop_name] = analyze_cop(analyses[cop_name], directive)
58
+ end
78
59
  end
79
60
 
80
61
  analyses.each_with_object({}) do |element, hash|
@@ -83,37 +64,42 @@ module RuboCop
83
64
  end
84
65
  end
85
66
 
86
- def analyze_cop(analysis, disabled, line, single_line)
87
- if single_line
88
- analyze_single_line(analysis, line, disabled)
89
- elsif disabled
90
- analyze_disabled(analysis, line)
67
+ def analyze_cop(analysis, directive)
68
+ # Disabling cops after comments like `#=SomeDslDirective` does not related to single line
69
+ if !comment_only_line?(directive.line_number) || directive.single_line?
70
+ analyze_single_line(analysis, directive)
71
+ elsif directive.disabled?
72
+ analyze_disabled(analysis, directive)
91
73
  else
92
- analyze_rest(analysis, line)
74
+ analyze_rest(analysis, directive)
93
75
  end
94
76
  end
95
77
 
96
- def analyze_single_line(analysis, line, disabled)
97
- return analysis unless disabled
78
+ def analyze_single_line(analysis, directive)
79
+ return analysis unless directive.disabled?
80
+
81
+ line = directive.line_number
82
+ start_line = analysis.start_line_number
98
83
 
99
- CopAnalysis.new(analysis.line_ranges + [(line..line)],
100
- analysis.start_line_number)
84
+ CopAnalysis.new(analysis.line_ranges + [(line..line)], start_line)
101
85
  end
102
86
 
103
- def analyze_disabled(analysis, line)
104
- if (start_line = analysis.start_line_number)
105
- # Cop already disabled on this line, so we end the current disabled
106
- # range before we start a new range.
107
- return CopAnalysis.new(analysis.line_ranges + [start_line..line], line)
108
- end
87
+ def analyze_disabled(analysis, directive)
88
+ line = directive.line_number
89
+ start_line = analysis.start_line_number
90
+
91
+ # Cop already disabled on this line, so we end the current disabled
92
+ # range before we start a new range.
93
+ return CopAnalysis.new(analysis.line_ranges + [start_line..line], line) if start_line
109
94
 
110
95
  CopAnalysis.new(analysis.line_ranges, line)
111
96
  end
112
97
 
113
- def analyze_rest(analysis, line)
114
- if (start_line = analysis.start_line_number)
115
- return CopAnalysis.new(analysis.line_ranges + [start_line..line], nil)
116
- end
98
+ def analyze_rest(analysis, directive)
99
+ line = directive.line_number
100
+ start_line = analysis.start_line_number
101
+
102
+ return CopAnalysis.new(analysis.line_ranges + [start_line..line], nil) if start_line
117
103
 
118
104
  CopAnalysis.new(analysis.line_ranges, nil)
119
105
  end
@@ -124,54 +110,17 @@ module RuboCop
124
110
  analysis.line_ranges + [(analysis.start_line_number..Float::INFINITY)]
125
111
  end
126
112
 
127
- def each_mentioned_cop
128
- each_directive do |comment, cop_names, disabled|
129
- comment_line_number = comment.loc.expression.line
130
- single_line = !comment_only_line?(comment_line_number) ||
131
- directive_on_comment_line?(comment)
132
-
133
- cop_names.each do |cop_name|
134
- yield qualified_cop_name(cop_name), disabled, comment_line_number,
135
- single_line
136
- end
137
- end
138
- end
139
-
140
- def directive_on_comment_line?(comment)
141
- comment.text[1..-1].match?(COMMENT_DIRECTIVE_REGEXP)
142
- end
143
-
144
113
  def each_directive
145
114
  processed_source.comments.each do |comment|
146
- directive = directive_parts(comment)
147
- next unless directive
148
-
149
- yield comment, *directive
115
+ directive = DirectiveComment.new(comment)
116
+ yield directive if directive.cop_names
150
117
  end
151
118
  end
152
119
 
153
- def directive_parts(comment)
154
- match = comment.text.match(COMMENT_DIRECTIVE_REGEXP)
155
- return unless match
156
-
157
- switch, cops_string = match.captures
158
-
159
- cop_names =
160
- cops_string == 'all' ? all_cop_names : cops_string.split(/,\s*/)
161
-
162
- disabled = %w[disable todo].include?(switch)
163
-
164
- [cop_names, disabled]
165
- end
166
-
167
120
  def qualified_cop_name(cop_name)
168
121
  Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path)
169
122
  end
170
123
 
171
- def all_cop_names
172
- @all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
173
- end
174
-
175
124
  def non_comment_token_line_numbers
176
125
  @non_comment_token_line_numbers ||= begin
177
126
  non_comment_tokens = processed_source.tokens.reject(&:comment?)
@@ -179,12 +128,7 @@ module RuboCop
179
128
  end
180
129
  end
181
130
 
182
- def enable_all?(comment)
183
- _, cops = comment.text.match(COMMENT_DIRECTIVE_REGEXP).captures
184
- cops == 'all'
185
- end
186
-
187
- def handle_enable_all(names, extras, comment)
131
+ def handle_enable_all(directive, names, extras)
188
132
  enabled_cops = 0
189
133
  names.each do |name, counter|
190
134
  next unless counter.positive?
@@ -193,19 +137,19 @@ module RuboCop
193
137
  enabled_cops += 1
194
138
  end
195
139
 
196
- extras[comment] << 'all' if enabled_cops.zero?
140
+ extras[directive.comment] << 'all' if enabled_cops.zero?
197
141
  end
198
142
 
199
143
  # Collect cops that have been disabled or enabled by name in a directive comment
200
144
  # so that `Lint/RedundantCopEnableDirective` can register offenses correctly.
201
- def handle_switch(cop_names, names, disabled, extras, comment)
202
- cop_names.each do |name|
203
- if disabled
145
+ def handle_switch(directive, names, extras)
146
+ directive.cop_names.each do |name|
147
+ if directive.disabled?
204
148
  names[name] += 1
205
149
  elsif (names[name]).positive?
206
150
  names[name] -= 1
207
151
  else
208
- extras[comment] << name
152
+ extras[directive.comment] << name
209
153
  end
210
154
  end
211
155
  end