rubocop 0.83.0 → 0.87.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 (312) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -18
  3. data/config/default.yml +128 -23
  4. data/lib/rubocop.rb +21 -59
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli.rb +2 -4
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
  8. data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
  9. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  10. data/lib/rubocop/comment_config.rb +1 -1
  11. data/lib/rubocop/config.rb +1 -1
  12. data/lib/rubocop/config_loader.rb +24 -70
  13. data/lib/rubocop/config_loader_resolver.rb +21 -9
  14. data/lib/rubocop/config_obsoletion.rb +0 -1
  15. data/lib/rubocop/config_store.rb +12 -2
  16. data/lib/rubocop/cop/autocorrect_logic.rb +14 -25
  17. data/lib/rubocop/cop/base.rb +399 -0
  18. data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
  19. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
  20. data/lib/rubocop/cop/commissioner.rb +48 -71
  21. data/lib/rubocop/cop/cop.rb +91 -227
  22. data/lib/rubocop/cop/corrector.rb +38 -115
  23. data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
  24. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
  25. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  26. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  27. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
  28. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  29. data/lib/rubocop/cop/generator.rb +2 -2
  30. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
  31. data/lib/rubocop/cop/ignored_node.rb +1 -3
  32. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
  33. data/lib/rubocop/cop/layout/case_indentation.rb +21 -22
  34. data/lib/rubocop/cop/layout/class_structure.rb +19 -16
  35. data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
  36. data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
  37. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  38. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +57 -4
  39. data/lib/rubocop/cop/layout/end_of_line.rb +3 -3
  40. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -4
  41. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
  42. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
  43. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  44. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
  45. data/lib/rubocop/cop/layout/hash_alignment.rb +8 -9
  46. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +3 -7
  47. data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
  48. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  49. data/lib/rubocop/cop/layout/line_length.rb +17 -17
  50. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -2
  51. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  52. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
  53. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +19 -25
  54. data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
  55. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -3
  56. data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
  57. data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
  58. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  59. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +2 -4
  60. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
  61. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
  62. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
  63. data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
  64. data/lib/rubocop/cop/legacy/corrector.rb +29 -0
  65. data/lib/rubocop/cop/lint/ambiguous_operator.rb +5 -2
  66. data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
  67. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  68. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  69. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
  70. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  71. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +38 -2
  72. data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
  73. data/lib/rubocop/cop/lint/loop.rb +1 -1
  74. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
  75. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
  76. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  77. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
  78. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
  79. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +20 -5
  80. data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
  81. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
  82. data/lib/rubocop/cop/lint/raise_exception.rb +12 -4
  83. data/lib/rubocop/cop/lint/rand_one.rb +1 -1
  84. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +31 -25
  85. data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
  86. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
  87. data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
  88. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  89. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +9 -1
  90. data/lib/rubocop/cop/lint/suppressed_exception.rb +15 -2
  91. data/lib/rubocop/cop/lint/syntax.rb +11 -28
  92. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  93. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
  94. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  95. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +1 -1
  96. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  97. data/lib/rubocop/cop/metrics/block_length.rb +22 -0
  98. data/lib/rubocop/cop/metrics/class_length.rb +25 -2
  99. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +35 -3
  100. data/lib/rubocop/cop/metrics/method_length.rb +23 -0
  101. data/lib/rubocop/cop/metrics/module_length.rb +25 -2
  102. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
  103. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
  104. data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
  105. data/lib/rubocop/cop/migration/department_name.rb +7 -7
  106. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  107. data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
  108. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
  109. data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
  110. data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
  111. data/lib/rubocop/cop/mixin/code_length.rb +4 -0
  112. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  113. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -5
  114. data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
  115. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
  116. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
  117. data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
  118. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
  119. data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
  120. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  121. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  122. data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
  123. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
  124. data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
  125. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
  126. data/lib/rubocop/cop/mixin/range_help.rb +1 -1
  127. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
  128. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  129. data/lib/rubocop/cop/mixin/surrounding_space.rb +10 -5
  130. data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
  131. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  132. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -5
  133. data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
  134. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +3 -3
  135. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
  136. data/lib/rubocop/cop/naming/file_name.rb +28 -17
  137. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
  138. data/lib/rubocop/cop/naming/method_name.rb +1 -1
  139. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  140. data/lib/rubocop/cop/naming/predicate_name.rb +4 -6
  141. data/lib/rubocop/cop/naming/variable_name.rb +1 -1
  142. data/lib/rubocop/cop/naming/variable_number.rb +1 -1
  143. data/lib/rubocop/cop/offense.rb +16 -2
  144. data/lib/rubocop/cop/registry.rb +63 -10
  145. data/lib/rubocop/cop/severity.rb +1 -3
  146. data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
  147. data/lib/rubocop/cop/style/and_or.rb +2 -2
  148. data/lib/rubocop/cop/style/array_join.rb +1 -1
  149. data/lib/rubocop/cop/style/attr.rb +1 -3
  150. data/lib/rubocop/cop/style/bare_percent_literals.rb +2 -2
  151. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
  152. data/lib/rubocop/cop/style/block_delimiters.rb +4 -12
  153. data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
  154. data/lib/rubocop/cop/style/class_vars.rb +21 -0
  155. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  156. data/lib/rubocop/cop/style/commented_keyword.rb +2 -2
  157. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -4
  158. data/lib/rubocop/cop/style/copyright.rb +5 -5
  159. data/lib/rubocop/cop/style/date_time.rb +1 -1
  160. data/lib/rubocop/cop/style/dir.rb +2 -2
  161. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
  162. data/lib/rubocop/cop/style/documentation.rb +2 -2
  163. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  164. data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
  165. data/lib/rubocop/cop/style/empty_literal.rb +6 -8
  166. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  167. data/lib/rubocop/cop/style/encoding.rb +1 -1
  168. data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
  169. data/lib/rubocop/cop/style/exponential_notation.rb +5 -5
  170. data/lib/rubocop/cop/style/format_string_token.rb +2 -3
  171. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
  172. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
  173. data/lib/rubocop/cop/style/hash_syntax.rb +16 -7
  174. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
  175. data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
  176. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
  177. data/lib/rubocop/cop/style/inline_comment.rb +1 -1
  178. data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
  179. data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
  180. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  181. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  182. data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
  183. data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
  184. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
  185. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
  186. data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
  187. data/lib/rubocop/cop/style/negated_if.rb +3 -3
  188. data/lib/rubocop/cop/style/negated_unless.rb +3 -3
  189. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
  190. data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
  191. data/lib/rubocop/cop/style/next.rb +2 -2
  192. data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
  193. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
  194. data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
  195. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  196. data/lib/rubocop/cop/style/proc.rb +1 -1
  197. data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
  198. data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
  199. data/lib/rubocop/cop/style/redundant_conditional.rb +4 -3
  200. data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
  201. data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
  202. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
  203. data/lib/rubocop/cop/style/redundant_parentheses.rb +10 -8
  204. data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
  205. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +90 -0
  206. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
  207. data/lib/rubocop/cop/style/redundant_self.rb +6 -9
  208. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
  209. data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
  210. data/lib/rubocop/cop/style/sample.rb +1 -1
  211. data/lib/rubocop/cop/style/semicolon.rb +1 -1
  212. data/lib/rubocop/cop/style/signal_exception.rb +1 -1
  213. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
  214. data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
  215. data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
  216. data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
  217. data/lib/rubocop/cop/style/symbol_array.rb +5 -5
  218. data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
  219. data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -4
  220. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +3 -3
  221. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
  222. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +13 -13
  223. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
  224. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
  225. data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
  226. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  227. data/lib/rubocop/cop/style/when_then.rb +1 -1
  228. data/lib/rubocop/cop/style/word_array.rb +1 -1
  229. data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
  230. data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
  231. data/lib/rubocop/cop/team.rb +141 -81
  232. data/lib/rubocop/cop/util.rb +3 -3
  233. data/lib/rubocop/cop/utils/format_string.rb +19 -2
  234. data/lib/rubocop/cop/variable_force.rb +3 -9
  235. data/lib/rubocop/cop/variable_force/branch.rb +1 -3
  236. data/lib/rubocop/cop/variable_force/variable.rb +2 -6
  237. data/lib/rubocop/ext/processed_source.rb +18 -0
  238. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  239. data/lib/rubocop/formatter/disabled_config_formatter.rb +5 -13
  240. data/lib/rubocop/formatter/formatter_set.rb +2 -4
  241. data/lib/rubocop/formatter/junit_formatter.rb +14 -4
  242. data/lib/rubocop/magic_comment.rb +1 -1
  243. data/lib/rubocop/name_similarity.rb +7 -3
  244. data/lib/rubocop/options.rb +30 -15
  245. data/lib/rubocop/path_util.rb +2 -2
  246. data/lib/rubocop/platform.rb +1 -1
  247. data/lib/rubocop/rake_task.rb +6 -9
  248. data/lib/rubocop/remote_config.rb +1 -3
  249. data/lib/rubocop/result_cache.rb +5 -7
  250. data/lib/rubocop/rspec/cop_helper.rb +5 -28
  251. data/lib/rubocop/rspec/expect_offense.rb +60 -23
  252. data/lib/rubocop/rspec/shared_contexts.rb +55 -17
  253. data/lib/rubocop/runner.rb +42 -38
  254. data/lib/rubocop/target_finder.rb +2 -4
  255. data/lib/rubocop/target_ruby.rb +5 -2
  256. data/lib/rubocop/version.rb +5 -3
  257. metadata +60 -62
  258. data/lib/rubocop/ast/builder.rb +0 -85
  259. data/lib/rubocop/ast/node.rb +0 -637
  260. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  261. data/lib/rubocop/ast/node/and_node.rb +0 -29
  262. data/lib/rubocop/ast/node/args_node.rb +0 -29
  263. data/lib/rubocop/ast/node/array_node.rb +0 -70
  264. data/lib/rubocop/ast/node/block_node.rb +0 -121
  265. data/lib/rubocop/ast/node/break_node.rb +0 -17
  266. data/lib/rubocop/ast/node/case_match_node.rb +0 -56
  267. data/lib/rubocop/ast/node/case_node.rb +0 -56
  268. data/lib/rubocop/ast/node/class_node.rb +0 -31
  269. data/lib/rubocop/ast/node/def_node.rb +0 -82
  270. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  271. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  272. data/lib/rubocop/ast/node/float_node.rb +0 -12
  273. data/lib/rubocop/ast/node/for_node.rb +0 -53
  274. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  275. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  276. data/lib/rubocop/ast/node/if_node.rb +0 -175
  277. data/lib/rubocop/ast/node/int_node.rb +0 -12
  278. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  279. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  280. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  281. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  282. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  283. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  284. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
  285. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  286. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  287. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  288. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  289. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  290. data/lib/rubocop/ast/node/module_node.rb +0 -24
  291. data/lib/rubocop/ast/node/or_node.rb +0 -29
  292. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  293. data/lib/rubocop/ast/node/range_node.rb +0 -18
  294. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  295. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  296. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  297. data/lib/rubocop/ast/node/return_node.rb +0 -24
  298. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  299. data/lib/rubocop/ast/node/send_node.rb +0 -17
  300. data/lib/rubocop/ast/node/str_node.rb +0 -16
  301. data/lib/rubocop/ast/node/super_node.rb +0 -21
  302. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  303. data/lib/rubocop/ast/node/until_node.rb +0 -35
  304. data/lib/rubocop/ast/node/when_node.rb +0 -53
  305. data/lib/rubocop/ast/node/while_node.rb +0 -35
  306. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  307. data/lib/rubocop/ast/sexp.rb +0 -16
  308. data/lib/rubocop/ast/traversal.rb +0 -202
  309. data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
  310. data/lib/rubocop/node_pattern.rb +0 -887
  311. data/lib/rubocop/processed_source.rb +0 -213
  312. data/lib/rubocop/token.rb +0 -114
@@ -14,7 +14,7 @@ module RuboCop
14
14
  module_function
15
15
 
16
16
  def comment_line?(line_source)
17
- line_source =~ /^\s*#/
17
+ /^\s*#/.match?(line_source)
18
18
  end
19
19
 
20
20
  def comment_lines?(node)
@@ -88,7 +88,7 @@ module RuboCop
88
88
 
89
89
  # Regex matches IF there is a ' or there is a \\ in the string that is
90
90
  # not preceded/followed by another \\ (e.g. "\\x34") but not "\\\\".
91
- string =~ /'|(?<! \\) \\{2}* \\ (?![\\"])/x
91
+ /'|(?<! \\) \\{2}* \\ (?![\\"])/x.match?(string)
92
92
  end
93
93
 
94
94
  def needs_escaping?(string)
@@ -108,7 +108,7 @@ module RuboCop
108
108
  end
109
109
 
110
110
  def trim_string_interporation_escape_character(str)
111
- str.gsub(/\\\#{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
111
+ str.gsub(/\\\#\{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
112
112
  end
113
113
 
114
114
  def interpret_string_escapes(string)
@@ -41,8 +41,7 @@ module RuboCop
41
41
  #
42
42
  # @see https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-format
43
43
  class FormatSequence
44
- attr_reader :begin_pos, :end_pos
45
- attr_reader :flags, :width, :precision, :name, :type
44
+ attr_reader :begin_pos, :end_pos, :flags, :width, :precision, :name, :type
46
45
 
47
46
  def initialize(match)
48
47
  @source = match[0]
@@ -97,6 +96,10 @@ module RuboCop
97
96
  @format_sequences ||= parse
98
97
  end
99
98
 
99
+ def valid?
100
+ !mixed_formats?
101
+ end
102
+
100
103
  def named_interpolation?
101
104
  format_sequences.any?(&:name)
102
105
  end
@@ -114,6 +117,20 @@ module RuboCop
114
117
  )
115
118
  end
116
119
  end
120
+
121
+ def mixed_formats?
122
+ formats = format_sequences.reject(&:percent?).map do |seq|
123
+ if seq.name
124
+ :named
125
+ elsif seq.max_digit_dollar_num
126
+ :numbered
127
+ else
128
+ :unnumbered
129
+ end
130
+ end
131
+
132
+ formats.uniq.size > 1
133
+ end
117
134
  end
118
135
  end
119
136
  end
@@ -152,9 +152,7 @@ module RuboCop
152
152
  def process_variable_assignment(node)
153
153
  name = node.children.first
154
154
 
155
- unless variable_table.variable_exist?(name)
156
- variable_table.declare_variable(name, node)
157
- end
155
+ variable_table.declare_variable(name, node) unless variable_table.variable_exist?(name)
158
156
 
159
157
  # Need to scan rhs before assignment so that we can mark previous
160
158
  # assignments as referenced if rhs has referencing to the variable
@@ -211,9 +209,7 @@ module RuboCop
211
209
 
212
210
  name = asgn_node.children.first
213
211
 
214
- unless variable_table.variable_exist?(name)
215
- variable_table.declare_variable(name, asgn_node)
216
- end
212
+ variable_table.declare_variable(name, asgn_node) unless variable_table.variable_exist?(name)
217
213
 
218
214
  # The following statements:
219
215
  #
@@ -369,9 +365,7 @@ module RuboCop
369
365
  AssignmentReference.new(node)
370
366
  when *OPERATOR_ASSIGNMENT_TYPES
371
367
  asgn_node = node.children.first
372
- if asgn_node.lvasgn_type?
373
- VariableReference.new(asgn_node.children.first)
374
- end
368
+ VariableReference.new(asgn_node.children.first) if asgn_node.lvasgn_type?
375
369
  end
376
370
  end
377
371
 
@@ -81,9 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def each_ancestor(include_self: false, &block)
84
- unless block_given?
85
- return to_enum(__method__, include_self: include_self)
86
- end
84
+ return to_enum(__method__, include_self: include_self) unless block_given?
87
85
 
88
86
  yield self if include_self
89
87
  scan_ancestors(&block)
@@ -47,9 +47,7 @@ module RuboCop
47
47
  @assignments.reverse_each do |assignment|
48
48
  next if consumed_branches.include?(assignment.branch)
49
49
 
50
- unless assignment.run_exclusively_with?(reference)
51
- assignment.reference!(node)
52
- end
50
+ assignment.reference!(node) unless assignment.run_exclusively_with?(reference)
53
51
 
54
52
  # Modifier if/unless conditions are special. Assignments made in
55
53
  # them do not put the assigned variable in scope to the left of the
@@ -60,9 +58,7 @@ module RuboCop
60
58
 
61
59
  break if !assignment.branch || assignment.branch == reference.branch
62
60
 
63
- unless assignment.branch.may_run_incompletely?
64
- consumed_branches << assignment.branch
65
- end
61
+ consumed_branches << assignment.branch unless assignment.branch.may_run_incompletely?
66
62
  end
67
63
  end
68
64
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Ext
5
+ # Extensions to AST::ProcessedSource for our cached comment_config
6
+ module ProcessedSource
7
+ def comment_config
8
+ @comment_config ||= CommentConfig.new(self)
9
+ end
10
+
11
+ def disabled_line_ranges
12
+ comment_config.cop_disabled_line_ranges
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ RuboCop::ProcessedSource.include RuboCop::Ext::ProcessedSource
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Layout/LineLength
4
-
5
3
  module RuboCop
6
4
  module Formatter
7
5
  # Abstract base class for formatter, implements all public API methods.
@@ -41,8 +39,6 @@ module RuboCop
41
39
  # * `#finished`
42
40
  #
43
41
  class BaseFormatter
44
- # rubocop:enable Layout/LineLength
45
-
46
42
  # @api public
47
43
  #
48
44
  # @!attribute [r] output
@@ -59,9 +59,7 @@ module RuboCop
59
59
  def command
60
60
  command = 'rubocop --auto-gen-config'
61
61
 
62
- if @options[:auto_gen_only_exclude]
63
- command += ' --auto-gen-only-exclude'
64
- end
62
+ command += ' --auto-gen-only-exclude' if @options[:auto_gen_only_exclude]
65
63
 
66
64
  if @exclude_limit_option
67
65
  command +=
@@ -70,15 +68,13 @@ module RuboCop
70
68
  end
71
69
  command += ' --no-offense-counts' if @options[:no_offense_counts]
72
70
 
73
- if @options[:no_auto_gen_timestamp]
74
- command += ' --no-auto-gen-timestamp'
75
- end
71
+ command += ' --no-auto-gen-timestamp' if @options[:no_auto_gen_timestamp]
76
72
 
77
73
  command
78
74
  end
79
75
 
80
76
  def timestamp
81
- @options[:no_auto_gen_timestamp] ? '' : "on #{Time.now} "
77
+ @options[:no_auto_gen_timestamp] ? '' : "on #{Time.now.utc} "
82
78
  end
83
79
 
84
80
  def output_offenses
@@ -116,14 +112,10 @@ module RuboCop
116
112
  end
117
113
 
118
114
  def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
119
- if @show_offense_counts
120
- output_buffer.puts "# Offense count: #{offense_count}"
121
- end
115
+ output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
122
116
 
123
117
  cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
124
- if cop_class&.new&.support_autocorrect?
125
- output_buffer.puts '# Cop supports --auto-correct.'
126
- end
118
+ output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.new&.support_autocorrect?
127
119
 
128
120
  default_cfg = default_config(cop_name)
129
121
  return unless default_cfg
@@ -82,14 +82,12 @@ module RuboCop
82
82
 
83
83
  def builtin_formatter_class(specified_key)
84
84
  matching_keys = BUILTIN_FORMATTERS_FOR_KEYS.keys.select do |key|
85
- key =~ /^\[#{specified_key}\]/ || specified_key == key.delete('[]')
85
+ /^\[#{specified_key}\]/.match?(key) || specified_key == key.delete('[]')
86
86
  end
87
87
 
88
88
  raise %(No formatter for "#{specified_key}") if matching_keys.empty?
89
89
 
90
- if matching_keys.size > 1
91
- raise %(Cannot determine formatter for "#{specified_key}")
92
- end
90
+ raise %(Cannot determine formatter for "#{specified_key}") if matching_keys.size > 1
93
91
 
94
92
  BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
95
93
  end
@@ -35,19 +35,29 @@ module RuboCop
35
35
  #
36
36
  # In the future, it would be preferable to return only enabled cops.
37
37
  Cop::Cop.all.each do |cop|
38
+ target_offenses = offenses_for_cop(offenses, cop)
39
+
40
+ next unless relevant_for_output?(options, target_offenses)
41
+
38
42
  REXML::Element.new('testcase', @testsuite).tap do |testcase|
39
43
  testcase.attributes['classname'] = classname_attribute_value(file)
40
44
  testcase.attributes['name'] = cop.cop_name
41
45
 
42
- target_offenses = offenses.select do |offense|
43
- offense.cop_name == cop.cop_name
44
- end
45
-
46
46
  add_failure_to(testcase, target_offenses, cop.cop_name)
47
47
  end
48
48
  end
49
49
  end
50
50
 
51
+ def relevant_for_output?(options, target_offenses)
52
+ !options[:display_only_failed] || target_offenses.any?
53
+ end
54
+
55
+ def offenses_for_cop(all_offenses, cop)
56
+ all_offenses.select do |offense|
57
+ offense.cop_name == cop.cop_name
58
+ end
59
+ end
60
+
51
61
  def classname_attribute_value(file)
52
62
  file.gsub(/\.rb\Z/, '').gsub("#{Dir.pwd}/", '').tr('/', '.')
53
63
  end
@@ -133,7 +133,7 @@ module RuboCop
133
133
  # @see https://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html
134
134
  # @see https://git.io/vMCXh Emacs handling in Ruby's parse.y
135
135
  class EmacsComment < EditorComment
136
- FORMAT = /\-\*\-(.+)\-\*\-/.freeze
136
+ FORMAT = /-\*-(.+)-\*-/.freeze
137
137
  SEPARATOR = ';'
138
138
  OPERATOR = ':'
139
139
 
@@ -12,13 +12,17 @@ module RuboCop
12
12
  end
13
13
 
14
14
  def find_similar_names(target_name, names)
15
+ # DidYouMean::SpellChecker is not available in all versions of Ruby, and
16
+ # even on versions where it *is* available (>= 2.3), it is not always
17
+ # required correctly. So we do a feature check first.
18
+ # See: https://github.com/rubocop-hq/rubocop/issues/7979
19
+ return [] unless defined?(DidYouMean::SpellChecker)
20
+
15
21
  names = names.dup
16
22
  names.delete(target_name)
17
23
 
18
24
  spell_checker = DidYouMean::SpellChecker.new(dictionary: names)
19
- similar_names = spell_checker.correct(target_name)
20
-
21
- similar_names
25
+ spell_checker.correct(target_name)
22
26
  end
23
27
  end
24
28
  end
@@ -143,6 +143,8 @@ module RuboCop
143
143
  @options[:output_path] = path
144
144
  end
145
145
  end
146
+
147
+ option(opts, '--display-only-failed')
146
148
  end
147
149
 
148
150
  def add_severity_option(opts)
@@ -161,7 +163,7 @@ module RuboCop
161
163
  end
162
164
  end
163
165
 
164
- # rubocop:disable Metrics/MethodLength
166
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
165
167
  def add_boolean_flags(opts)
166
168
  option(opts, '-F', '--fail-fast')
167
169
  option(opts, '-C', '--cache FLAG')
@@ -169,7 +171,16 @@ module RuboCop
169
171
  option(opts, '-D', '--[no-]display-cop-names')
170
172
  option(opts, '-E', '--extra-details')
171
173
  option(opts, '-S', '--display-style-guide')
172
- option(opts, '-a', '--auto-correct')
174
+ option(opts, '-a', '--auto-correct') do
175
+ @options[:safe_auto_correct] = true
176
+ end
177
+ option(opts, '--safe-autocorrect') do
178
+ warn '--safe-autocorrect is deprecated; use --autocorrect'
179
+ @options[:safe_auto_correct] = @options[:auto_correct] = true
180
+ end
181
+ option(opts, '-A', '--auto-correct-all') do
182
+ @options[:auto_correct] = true
183
+ end
173
184
  option(opts, '--disable-pending-cops')
174
185
  option(opts, '--enable-pending-cops')
175
186
  option(opts, '--ignore-disable-comments')
@@ -182,7 +193,7 @@ module RuboCop
182
193
  option(opts, '-V', '--verbose-version')
183
194
  option(opts, '-P', '--parallel')
184
195
  end
185
- # rubocop:enable Metrics/MethodLength
196
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
186
197
 
187
198
  def add_aliases(opts)
188
199
  option(opts, '-l', '--lint') do
@@ -194,9 +205,6 @@ module RuboCop
194
205
  @options[:only] << 'Layout'
195
206
  @options[:auto_correct] = true
196
207
  end
197
- option(opts, '--safe-auto-correct') do
198
- @options[:auto_correct] = true
199
- end
200
208
  end
201
209
 
202
210
  def add_list_options(opts)
@@ -275,9 +283,7 @@ module RuboCop
275
283
  raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
276
284
  'be used with --only.'
277
285
  end
278
- if except_syntax?
279
- raise OptionArgumentError, 'Syntax checking cannot be turned off.'
280
- end
286
+ raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
281
287
  unless boolean_or_empty_cache?
282
288
  raise OptionArgumentError, '-C/--cache argument must be true or false'
283
289
  end
@@ -288,6 +294,7 @@ module RuboCop
288
294
  end
289
295
  validate_auto_gen_config
290
296
  validate_auto_correct
297
+ validate_display_only_failed
291
298
  validate_parallel
292
299
 
293
300
  return if incompatible_options.size <= 1
@@ -311,13 +318,20 @@ module RuboCop
311
318
  end
312
319
  end
313
320
 
321
+ def validate_display_only_failed
322
+ return unless @options.key?(:display_only_failed)
323
+ return if @options[:format] == 'junit'
324
+
325
+ raise OptionArgumentError,
326
+ format('--display-only-failed can only be used together with --format junit.')
327
+ end
328
+
314
329
  def validate_auto_correct
315
330
  return if @options.key?(:auto_correct)
316
331
  return unless @options.key?(:disable_uncorrectable)
317
332
 
318
333
  raise OptionArgumentError,
319
- format('--%<flag>s can only be used together with --auto-correct.',
320
- flag: '--disable-uncorrectable')
334
+ format('--disable-uncorrectable can only be used together with --auto-correct.')
321
335
  end
322
336
 
323
337
  def validate_parallel
@@ -381,7 +395,6 @@ module RuboCop
381
395
  # This module contains help texts for command line options.
382
396
  module OptionsHelp
383
397
  MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
384
- # rubocop:disable Layout/LineLength
385
398
  FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
386
399
 
387
400
  TEXT = {
@@ -434,6 +447,8 @@ module RuboCop
434
447
  'if no format is specified.'],
435
448
  fail_level: ['Minimum severity (A/R/C/W/E/F) for exit',
436
449
  'with error code.'],
450
+ display_only_failed: ['Only output offense messages. Omit passing',
451
+ 'cops. Only valid for --format junit.'],
437
452
  display_only_fail_level_offenses:
438
453
  ['Only output offense messages at',
439
454
  'the specified --fail-level or above'],
@@ -456,8 +471,9 @@ module RuboCop
456
471
  lint: 'Run only lint cops.',
457
472
  safe: 'Run only safe cops.',
458
473
  list_target_files: 'List all files RuboCop will inspect.',
459
- auto_correct: 'Auto-correct offenses.',
460
- safe_auto_correct: 'Run auto-correct only when it\'s safe.',
474
+ auto_correct: 'Auto-correct offenses (only when it\'s safe).',
475
+ safe_autocorrect: '(same, deprecated)',
476
+ auto_correct_all: 'Auto-correct offenses (safe and unsafe)',
461
477
  fix_layout: 'Run only layout cops, with auto-correct on.',
462
478
  color: 'Force color output on or off.',
463
479
  version: 'Display version.',
@@ -468,6 +484,5 @@ module RuboCop
468
484
  'reports. This is useful for editor integration.'],
469
485
  init: 'Generate a .rubocop.yml file in the current directory.'
470
486
  }.freeze
471
- # rubocop:enable Layout/LineLength
472
487
  end
473
488
  end
@@ -40,7 +40,7 @@ module RuboCop
40
40
  hidden_file_in_not_hidden_dir?(pattern, path)
41
41
  when Regexp
42
42
  begin
43
- path =~ pattern
43
+ pattern.match?(path)
44
44
  rescue ArgumentError => e
45
45
  return false if e.message.start_with?('invalid byte sequence')
46
46
 
@@ -51,7 +51,7 @@ module RuboCop
51
51
 
52
52
  # Returns true for an absolute Unix or Windows path.
53
53
  def absolute?(path)
54
- path =~ %r{\A([A-Z]:)?/}i
54
+ %r{\A([A-Z]:)?/}i.match?(path)
55
55
  end
56
56
 
57
57
  def self.pwd
@@ -5,7 +5,7 @@ module RuboCop
5
5
  # on.
6
6
  module Platform
7
7
  def self.windows?
8
- RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/
8
+ /cygwin|mswin|mingw|bccwin|wince|emx/.match?(RbConfig::CONFIG['host_os'])
9
9
  end
10
10
  end
11
11
  end