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
@@ -43,13 +43,15 @@ module RuboCop
43
43
 
44
44
  def on_case(case_node)
45
45
  return if case_node.condition
46
- return if case_node.when_branches.any? do |when_branch|
47
- when_branch.each_descendant.any?(&:return_type?)
48
- end
49
46
 
50
- if (else_branch = case_node.else_branch)
51
- return if else_branch.return_type? ||
52
- else_branch.each_descendant.any?(&:return_type?)
47
+ branch_bodies = [
48
+ *case_node.when_branches.map(&:body),
49
+ case_node.else_branch
50
+ ].compact
51
+
52
+ return if branch_bodies.any? do |body|
53
+ body.return_type? ||
54
+ body.each_descendant.any?(&:return_type?)
53
55
  end
54
56
 
55
57
  add_offense(case_node, location: :keyword)
@@ -25,13 +25,13 @@ module RuboCop
25
25
  STR_MSG = 'Use string literal `%<prefer>s` instead of ' \
26
26
  '`String.new`.'
27
27
 
28
- def_node_matcher :array_node, '(send (const nil? :Array) :new)'
29
- def_node_matcher :hash_node, '(send (const nil? :Hash) :new)'
30
- def_node_matcher :str_node, '(send (const nil? :String) :new)'
28
+ def_node_matcher :array_node, '(send (const {nil? cbase} :Array) :new)'
29
+ def_node_matcher :hash_node, '(send (const {nil? cbase} :Hash) :new)'
30
+ def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
31
31
  def_node_matcher :array_with_block,
32
- '(block (send (const nil? :Array) :new) args _)'
32
+ '(block (send (const {nil? cbase} :Array) :new) args _)'
33
33
  def_node_matcher :hash_with_block,
34
- '(block (send (const nil? :Hash) :new) args _)'
34
+ '(block (send (const {nil? cbase} :Hash) :new) args _)'
35
35
 
36
36
  def on_send(node)
37
37
  add_offense(node, message: ARR_MSG) if offense_array_node?(node)
@@ -68,9 +68,7 @@ module RuboCop
68
68
 
69
69
  def first_argument_unparenthesized?(node)
70
70
  parent = node.parent
71
- unless parent && %i[send super zsuper].include?(parent.type)
72
- return false
73
- end
71
+ return false unless parent && %i[send super zsuper].include?(parent.type)
74
72
 
75
73
  node.object_id == parent.arguments.first.object_id &&
76
74
  !parentheses?(node.parent)
@@ -8,7 +8,7 @@ module RuboCop
8
8
  # line (compact style), but it can be configured to enforce the `end`
9
9
  # to go on its own line (expanded style).
10
10
  #
11
- # Note: A method definition is not considered empty if it contains
11
+ # NOTE: A method definition is not considered empty if it contains
12
12
  # comments.
13
13
  #
14
14
  # @example EnforcedStyle: compact (default)
@@ -42,7 +42,7 @@ module RuboCop
42
42
  end
43
43
 
44
44
  def encoding_omitable?(line)
45
- line =~ ENCODING_PATTERN
45
+ ENCODING_PATTERN.match?(line)
46
46
  end
47
47
 
48
48
  def encoding_line_number(processed_source)
@@ -53,7 +53,7 @@ module RuboCop
53
53
 
54
54
  def_node_matcher :file_expand_path, <<~PATTERN
55
55
  (send
56
- (const nil? :File) :expand_path
56
+ (const {nil? cbase} :File) :expand_path
57
57
  $_
58
58
  $_)
59
59
  PATTERN
@@ -69,7 +69,7 @@ module RuboCop
69
69
  (send
70
70
  (send
71
71
  (send
72
- (const nil? :Pathname) :new
72
+ (const {nil? cbase} :Pathname) :new
73
73
  $_) :parent) :expand_path)
74
74
  PATTERN
75
75
 
@@ -5,12 +5,12 @@ module RuboCop
5
5
  module Style
6
6
  # This cop enforces consistency when using exponential notation
7
7
  # for numbers in the code (eg 1.2e4). Different styles are supported:
8
- # - `scientific` which enforces a mantissa between 1 (inclusive)
8
+ # * `scientific` which enforces a mantissa between 1 (inclusive)
9
9
  # and 10 (exclusive).
10
- # - `engineering` which enforces the exponent to be a multiple of 3
10
+ # * `engineering` which enforces the exponent to be a multiple of 3
11
11
  # and the mantissa to be between 0.1 (inclusive)
12
12
  # and 10 (exclusive).
13
- # - `integral` which enforces the mantissa to always be a whole number
13
+ # * `integral` which enforces the mantissa to always be a whole number
14
14
  # without trailing zeroes.
15
15
  #
16
16
  # @example EnforcedStyle: scientific (default)
@@ -69,7 +69,7 @@ module RuboCop
69
69
 
70
70
  def scientific?(node)
71
71
  mantissa, = node.source.split('e')
72
- mantissa =~ /^-?[1-9](\.\d*[0-9])?$/
72
+ /^-?[1-9](\.\d*[0-9])?$/.match?(mantissa)
73
73
  end
74
74
 
75
75
  def engineering?(node)
@@ -85,7 +85,7 @@ module RuboCop
85
85
 
86
86
  def integral(node)
87
87
  mantissa, = node.source.split('e')
88
- mantissa =~ /^-?[1-9](\d*[1-9])?$/
88
+ /^-?[1-9](\d*[1-9])?$/.match?(mantissa)
89
89
  end
90
90
 
91
91
  def offense?(node)
@@ -5,11 +5,10 @@ module RuboCop
5
5
  module Style
6
6
  # Use a consistent style for named format string tokens.
7
7
  #
8
- # **Note:**
9
- # `unannotated` style cop only works for strings
8
+ # NOTE: `unannotated` style cop only works for strings
10
9
  # which are passed as arguments to those methods:
11
10
  # `printf`, `sprintf`, `format`, `%`.
12
- # The reason is that *unannotated* format is very similar
11
+ # The reason is that _unannotated_ format is very similar
13
12
  # to encoded URLs or Date/Time formatting strings.
14
13
  #
15
14
  # @example EnforcedStyle: annotated (default)
@@ -8,8 +8,7 @@ module RuboCop
8
8
  # It will add the comment `# frozen_string_literal: true` to the top of
9
9
  # files to enable frozen string literals. Frozen string literals may be
10
10
  # default in future Ruby. The comment will be added below a shebang and
11
- # encoding comment. The frozen string literal comment is only valid in
12
- # Ruby 2.3+.
11
+ # encoding comment.
13
12
  #
14
13
  # Note that the cop will ignore files where the comment exists but is set
15
14
  # to `false` instead of `true`.
@@ -149,9 +148,7 @@ module RuboCop
149
148
  end
150
149
 
151
150
  next_token = processed_source.tokens[token_number]
152
- if next_token && next_token.text =~ Encoding::ENCODING_PATTERN
153
- token = next_token
154
- end
151
+ token = next_token if Encoding::ENCODING_PATTERN.match?(next_token&.text)
155
152
 
156
153
  token
157
154
  end
@@ -216,7 +213,7 @@ module RuboCop
216
213
  if comment
217
214
  corrector.insert_after(line_range(comment.line), following_comment)
218
215
  else
219
- corrector.insert_before(line_range(1), preceding_comment)
216
+ corrector.insert_before(processed_source.buffer.source_range, preceding_comment)
220
217
  end
221
218
  end
222
219
 
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Style
6
6
  # This cop checks for uses of `each_key` and `each_value` Hash methods.
7
7
  #
8
- # Note: If you have an array of two-element arrays, you can put
8
+ # NOTE: If you have an array of two-element arrays, you can put
9
9
  # parentheses around the block arguments to indicate that you're not
10
10
  # working with a hash, and suppress RuboCop offenses.
11
11
  #
@@ -13,11 +13,11 @@ module RuboCop
13
13
  # The supported styles are:
14
14
  #
15
15
  # * ruby19 - forces use of the 1.9 syntax (e.g. `{a: 1}`) when hashes have
16
- # all symbols for keys
16
+ # all symbols for keys
17
17
  # * hash_rockets - forces use of hash rockets for all hashes
18
18
  # * no_mixed_keys - simply checks for hashes with mixed syntaxes
19
19
  # * ruby19_no_mixed_keys - forces use of ruby 1.9 syntax and forbids mixed
20
- # syntax hashes
20
+ # syntax hashes
21
21
  #
22
22
  # @example EnforcedStyle: ruby19 (default)
23
23
  # # bad
@@ -168,11 +168,7 @@ module RuboCop
168
168
  end
169
169
 
170
170
  def autocorrect_ruby19(corrector, pair_node)
171
- key = pair_node.key.source_range
172
- op = pair_node.loc.operator
173
-
174
- range = key.join(op)
175
- range = range_with_surrounding_space(range: range, side: :right)
171
+ range = range_for_autocorrect_ruby19(pair_node)
176
172
 
177
173
  space = argument_without_space?(pair_node.parent) ? ' ' : ''
178
174
 
@@ -180,6 +176,19 @@ module RuboCop
180
176
  range,
181
177
  range.source.sub(/^:(.*\S)\s*=>\s*$/, space.to_s + '\1: ')
182
178
  )
179
+
180
+ hash_node = pair_node.parent
181
+ return unless hash_node.parent&.return_type? && !hash_node.braces?
182
+
183
+ corrector.wrap(hash_node, '{', '}')
184
+ end
185
+
186
+ def range_for_autocorrect_ruby19(pair_node)
187
+ key = pair_node.key.source_range
188
+ operator = pair_node.loc.operator
189
+
190
+ range = key.join(operator)
191
+ range_with_surrounding_space(range: range, side: :right)
183
192
  end
184
193
 
185
194
  def argument_without_space?(node)
@@ -81,7 +81,7 @@ module RuboCop
81
81
 
82
82
  private
83
83
 
84
- def check_branches(branches)
84
+ def check_branches(branches) # rubocop:todo Metrics/CyclomaticComplexity
85
85
  # return if any branch is empty. An empty branch can be an `if`
86
86
  # without an `else` or a branch that contains only comments.
87
87
  return if branches.any?(&:nil?)
@@ -61,7 +61,7 @@ module RuboCop
61
61
  class IfInsideElse < Cop
62
62
  MSG = 'Convert `if` nested inside `else` to `elsif`.'
63
63
 
64
- def on_if(node)
64
+ def on_if(node) # rubocop:todo Metrics/CyclomaticComplexity
65
65
  return if node.ternary? || node.unless?
66
66
 
67
67
  else_branch = node.else_branch
@@ -33,6 +33,18 @@ module RuboCop
33
33
  add_offense(node, location: :keyword,
34
34
  message: format(MSG, keyword: node.keyword))
35
35
  end
36
+
37
+ def autocorrect(node)
38
+ lambda do |corrector|
39
+ keyword = node.if? ? 'if' : 'unless'
40
+
41
+ corrector.replace(node, <<~RUBY.chop)
42
+ #{keyword} #{node.condition.source}
43
+ #{node.if_branch.source}
44
+ end
45
+ RUBY
46
+ end
47
+ end
36
48
  end
37
49
  end
38
50
  end
@@ -23,7 +23,7 @@ module RuboCop
23
23
  def investigate(processed_source)
24
24
  processed_source.each_comment do |comment|
25
25
  next if comment_line?(processed_source[comment.loc.line - 1]) ||
26
- comment.text.match(/\A# rubocop:(enable|disable)/)
26
+ comment.text.match?(/\A# rubocop:(enable|disable)/)
27
27
 
28
28
  add_offense(comment)
29
29
  end
@@ -178,7 +178,7 @@ module RuboCop
178
178
  end
179
179
 
180
180
  def camel_case_constant?(node)
181
- node.const_type? && node.source =~ CAMEL_CASE
181
+ node.const_type? && CAMEL_CASE.match?(node.source)
182
182
  end
183
183
 
184
184
  def dot_range(loc)
@@ -34,7 +34,7 @@ module RuboCop
34
34
  # shortcut out if the string does not look like an IP address
35
35
  return false unless could_be_ip?(contents)
36
36
 
37
- contents =~ ::Resolv::IPv4::Regex || contents =~ ::Resolv::IPv6::Regex
37
+ ::Resolv::IPv4::Regex.match?(contents) || ::Resolv::IPv6::Regex.match?(contents)
38
38
  end
39
39
 
40
40
  # Dummy implementation of method in ConfigurableEnforcedStyle that is
@@ -22,9 +22,7 @@ module RuboCop
22
22
  lambda do |corrector|
23
23
  corrector.replace(args_begin(node), '(')
24
24
 
25
- unless args_parenthesized?(node)
26
- corrector.insert_after(args_end(node), ')')
27
- end
25
+ corrector.insert_after(args_end(node), ')') unless args_parenthesized?(node)
28
26
  end
29
27
  end
30
28
 
@@ -41,9 +41,7 @@ module RuboCop
41
41
 
42
42
  def same_name_assignment?(node)
43
43
  any_assignment?(node) do |asgn_node|
44
- if asgn_node.masgn_type?
45
- next variable_in_mass_assignment?(node.method_name, asgn_node)
46
- end
44
+ next variable_in_mass_assignment?(node.method_name, asgn_node) if asgn_node.masgn_type?
47
45
 
48
46
  asgn_node.loc.name.source == node.method_name.to_s
49
47
  end
@@ -8,11 +8,20 @@ module RuboCop
8
8
  #
9
9
  # @example
10
10
  #
11
- # Thread.list.find_all do |t|
11
+ # # bad
12
+ # Thread.list.select do |t|
12
13
  # t.alive?
13
14
  # end.map do |t|
14
15
  # t.object_id
15
16
  # end
17
+ #
18
+ # # good
19
+ # alive_threads = Thread.list.select do |t|
20
+ # t.alive?
21
+ # end
22
+ # alive_threads.map do |t|
23
+ # t.object_id
24
+ # end
16
25
  class MultilineBlockChain < Cop
17
26
  include RangeHelp
18
27
 
@@ -42,7 +42,7 @@ module RuboCop
42
42
  private
43
43
 
44
44
  def non_modifier_then?(node)
45
- node.loc.begin && node.loc.begin.source_line =~ NON_MODIFIER_THEN
45
+ NON_MODIFIER_THEN.match?(node.loc.begin&.source_line)
46
46
  end
47
47
  end
48
48
  end
@@ -82,7 +82,7 @@ module RuboCop
82
82
  end
83
83
 
84
84
  def keyword_end_str(node, node_buf)
85
- if /[^\s\)]/.match?(node_buf.source_line(node.loc.end.line))
85
+ if /[^\s)]/.match?(node_buf.source_line(node.loc.end.line))
86
86
  "\n" + (' ' * node.loc.column) + 'end'
87
87
  else
88
88
  'end'
@@ -17,12 +17,11 @@ module RuboCop
17
17
  #
18
18
  # # good
19
19
  # a = cond ? b : c
20
- # a =
21
- # if cond
22
- # b
23
- # else
24
- # c
25
- # end
20
+ # a = if cond
21
+ # b
22
+ # else
23
+ # c
24
+ # end
26
25
  class MultilineTernaryOperator < Cop
27
26
  MSG = 'Avoid multi-line ternary operators, ' \
28
27
  'use `if` or `unless` instead.'
@@ -32,6 +31,18 @@ module RuboCop
32
31
 
33
32
  add_offense(node)
34
33
  end
34
+
35
+ def autocorrect(node)
36
+ lambda do |corrector|
37
+ corrector.replace(node, <<~RUBY.chop)
38
+ if #{node.condition.source}
39
+ #{node.if_branch.source}
40
+ else
41
+ #{node.else_branch.source}
42
+ end
43
+ RUBY
44
+ end
45
+ end
35
46
  end
36
47
  end
37
48
  end
@@ -150,14 +150,14 @@ module RuboCop
150
150
  def_node_matcher :operation_produces_immutable_object?, <<~PATTERN
151
151
  {
152
152
  (const _ _)
153
- (send (const nil? :Struct) :new ...)
154
- (block (send (const nil? :Struct) :new ...) ...)
153
+ (send (const {nil? cbase} :Struct) :new ...)
154
+ (block (send (const {nil? cbase} :Struct) :new ...) ...)
155
155
  (send _ :freeze)
156
156
  (send {float int} {:+ :- :* :** :/ :% :<<} _)
157
157
  (send _ {:+ :- :* :** :/ :%} {float int})
158
158
  (send _ {:== :=== :!= :<= :>= :< :>} _)
159
- (send (const nil? :ENV) :[] _)
160
- (or (send (const nil? :ENV) :[] _) _)
159
+ (send (const {nil? cbase} :ENV) :[] _)
160
+ (or (send (const {nil? cbase} :ENV) :[] _) _)
161
161
  (send _ {:count :length :size} ...)
162
162
  (block (send _ {:count :length :size} ...) ...)
163
163
  }
@@ -6,9 +6,9 @@ module RuboCop
6
6
  # Checks for uses of if with a negated condition. Only ifs
7
7
  # without else are considered. There are three different styles:
8
8
  #
9
- # - both
10
- # - prefix
11
- # - postfix
9
+ # * both
10
+ # * prefix
11
+ # * postfix
12
12
  #
13
13
  # @example EnforcedStyle: both (default)
14
14
  # # enforces `unless` for `prefix` and `postfix` conditionals
@@ -6,9 +6,9 @@ module RuboCop
6
6
  # Checks for uses of unless with a negated condition. Only unless
7
7
  # without else are considered. There are three different styles:
8
8
  #
9
- # - both
10
- # - prefix
11
- # - postfix
9
+ # * both
10
+ # * prefix
11
+ # * postfix
12
12
  #
13
13
  # @example EnforcedStyle: both (default)
14
14
  # # enforces `if` for `prefix` and `postfix` conditionals
@@ -14,6 +14,7 @@ module RuboCop
14
14
  # method1(method2 arg)
15
15
  class NestedParenthesizedCalls < Cop
16
16
  include RangeHelp
17
+ include AllowedMethods
17
18
 
18
19
  MSG = 'Add parentheses to nested method call `%<source>s`.'
19
20
 
@@ -54,13 +55,9 @@ module RuboCop
54
55
 
55
56
  def allowed?(send_node)
56
57
  send_node.parent.arguments.one? &&
57
- allowed_methods.include?(send_node.method_name.to_s) &&
58
+ allowed_method?(send_node.method_name) &&
58
59
  send_node.arguments.one?
59
60
  end
60
-
61
- def allowed_methods
62
- cop_config['AllowedMethods'] || []
63
- end
64
61
  end
65
62
  end
66
63
  end