rubocop 1.10.0 → 1.14.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 (487) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -14
  3. data/assets/output.html.erb +1 -1
  4. data/config/default.yml +60 -3
  5. data/exe/rubocop +1 -3
  6. data/lib/rubocop.rb +6 -1
  7. data/lib/rubocop/cached_data.rb +1 -3
  8. data/lib/rubocop/cli.rb +4 -6
  9. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  10. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  11. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  12. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  13. data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
  14. data/lib/rubocop/comment_config.rb +45 -101
  15. data/lib/rubocop/config.rb +11 -26
  16. data/lib/rubocop/config_loader.rb +5 -11
  17. data/lib/rubocop/config_loader_resolver.rb +22 -14
  18. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  19. data/lib/rubocop/config_store.rb +1 -2
  20. data/lib/rubocop/config_validator.rb +5 -10
  21. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  22. data/lib/rubocop/cop/badge.rb +1 -2
  23. data/lib/rubocop/cop/base.rb +8 -6
  24. data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
  25. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -10
  26. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  27. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
  28. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -4
  29. data/lib/rubocop/cop/commissioner.rb +2 -8
  30. data/lib/rubocop/cop/cop.rb +4 -18
  31. data/lib/rubocop/cop/corrector.rb +1 -4
  32. data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
  33. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  34. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  35. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  36. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  37. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  38. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  39. data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -0
  40. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
  41. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -4
  42. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
  43. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
  44. data/lib/rubocop/cop/generator.rb +3 -6
  45. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  46. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  47. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  48. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -4
  49. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
  50. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
  51. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
  52. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
  53. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
  54. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
  55. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
  56. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  57. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
  58. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
  59. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
  60. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
  61. data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
  62. data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
  63. data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
  64. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  65. data/lib/rubocop/cop/layout/block_alignment.rb +8 -19
  66. data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
  67. data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
  68. data/lib/rubocop/cop/layout/class_structure.rb +5 -10
  69. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
  70. data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
  71. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  72. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  73. data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
  74. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  75. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  76. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  77. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  78. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  79. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  80. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  81. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  82. data/lib/rubocop/cop/layout/extra_spacing.rb +5 -9
  83. data/lib/rubocop/cop/layout/first_argument_indentation.rb +11 -5
  84. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
  85. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  86. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +24 -20
  87. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  88. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  89. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  90. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
  91. data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
  92. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  93. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  94. data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
  95. data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
  96. data/lib/rubocop/cop/layout/indentation_width.rb +21 -11
  97. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  98. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  99. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  100. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  101. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  102. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  103. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
  104. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
  105. data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
  106. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  107. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  108. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  109. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  110. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  111. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  112. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  113. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
  114. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  115. data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -3
  116. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  117. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  118. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  119. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  120. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  121. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  122. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +6 -11
  123. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  124. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  125. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  126. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  127. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  128. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  129. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
  130. data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
  131. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
  132. data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
  133. data/lib/rubocop/cop/lint/debugger.rb +3 -1
  134. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +79 -41
  135. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  136. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -5
  137. data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -3
  138. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  139. data/lib/rubocop/cop/lint/duplicate_methods.rb +6 -7
  140. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -0
  141. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  142. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  143. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  144. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  145. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  146. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  147. data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -7
  148. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  149. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
  150. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
  151. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  152. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  153. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +4 -7
  154. data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
  155. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  156. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  157. data/lib/rubocop/cop/lint/loop.rb +1 -2
  158. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  159. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  160. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  161. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -0
  162. data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
  163. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  164. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
  165. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +8 -3
  166. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
  167. data/lib/rubocop/cop/lint/number_conversion.rb +13 -5
  168. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  169. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  170. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  171. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  172. data/lib/rubocop/cop/lint/raise_exception.rb +3 -2
  173. data/lib/rubocop/cop/lint/rand_one.rb +2 -2
  174. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
  175. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  176. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +2 -3
  177. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +5 -7
  178. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
  179. data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
  180. data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -4
  181. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  182. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  183. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  184. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  185. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  186. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +2 -2
  187. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  188. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
  189. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
  190. data/lib/rubocop/cop/lint/shadowed_argument.rb +5 -11
  191. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  192. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
  193. data/lib/rubocop/cop/lint/struct_new_override.rb +2 -2
  194. data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
  195. data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
  196. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  197. data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
  198. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  199. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  200. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  201. data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
  202. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
  203. data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
  204. data/lib/rubocop/cop/lint/unreachable_loop.rb +15 -7
  205. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  206. data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
  207. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
  208. data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
  209. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  210. data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -3
  211. data/lib/rubocop/cop/lint/useless_times.rb +3 -0
  212. data/lib/rubocop/cop/lint/void.rb +4 -11
  213. data/lib/rubocop/cop/message_annotator.rb +1 -3
  214. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  215. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  216. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  217. data/lib/rubocop/cop/metrics/module_length.rb +3 -6
  218. data/lib/rubocop/cop/metrics/parameter_lists.rb +3 -5
  219. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  220. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  221. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +6 -4
  222. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -7
  223. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  224. data/lib/rubocop/cop/mixin/alignment.rb +12 -7
  225. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  226. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  227. data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
  228. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  229. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  230. data/lib/rubocop/cop/mixin/def_node.rb +3 -5
  231. data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
  232. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
  233. data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
  234. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  235. data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
  236. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  237. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
  238. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  239. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
  240. data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -22
  241. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  242. data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
  243. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  244. data/lib/rubocop/cop/mixin/method_complexity.rb +2 -3
  245. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  246. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
  247. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  248. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
  249. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  250. data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -2
  251. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  252. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  253. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  254. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  255. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +4 -7
  256. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  257. data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
  258. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  259. data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -2
  260. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  261. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  262. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  263. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  264. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  265. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  266. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
  267. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  268. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
  269. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  270. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
  271. data/lib/rubocop/cop/naming/constant_name.rb +2 -0
  272. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  273. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +8 -3
  274. data/lib/rubocop/cop/naming/method_name.rb +4 -2
  275. data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
  276. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
  277. data/lib/rubocop/cop/offense.rb +3 -8
  278. data/lib/rubocop/cop/registry.rb +12 -11
  279. data/lib/rubocop/cop/security/eval.rb +1 -0
  280. data/lib/rubocop/cop/security/json_load.rb +1 -0
  281. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  282. data/lib/rubocop/cop/security/open.rb +1 -0
  283. data/lib/rubocop/cop/security/yaml_load.rb +1 -0
  284. data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
  285. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  286. data/lib/rubocop/cop/style/alias.rb +6 -12
  287. data/lib/rubocop/cop/style/and_or.rb +3 -1
  288. data/lib/rubocop/cop/style/arguments_forwarding.rb +4 -3
  289. data/lib/rubocop/cop/style/array_coercion.rb +2 -0
  290. data/lib/rubocop/cop/style/array_join.rb +1 -0
  291. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  292. data/lib/rubocop/cop/style/attr.rb +2 -3
  293. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  294. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
  295. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
  296. data/lib/rubocop/cop/style/case_equality.rb +2 -1
  297. data/lib/rubocop/cop/style/case_like_if.rb +16 -6
  298. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  299. data/lib/rubocop/cop/style/class_and_module_children.rb +6 -9
  300. data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
  301. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  302. data/lib/rubocop/cop/style/collection_compact.rb +3 -3
  303. data/lib/rubocop/cop/style/colon_method_call.rb +2 -3
  304. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  305. data/lib/rubocop/cop/style/command_literal.rb +4 -9
  306. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  307. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  308. data/lib/rubocop/cop/style/conditional_assignment.rb +12 -24
  309. data/lib/rubocop/cop/style/constant_visibility.rb +1 -0
  310. data/lib/rubocop/cop/style/copyright.rb +3 -6
  311. data/lib/rubocop/cop/style/date_time.rb +5 -5
  312. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  313. data/lib/rubocop/cop/style/dir.rb +1 -0
  314. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
  315. data/lib/rubocop/cop/style/documentation.rb +30 -3
  316. data/lib/rubocop/cop/style/documentation_method.rb +1 -0
  317. data/lib/rubocop/cop/style/double_negation.rb +1 -0
  318. data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
  319. data/lib/rubocop/cop/style/each_with_object.rb +1 -0
  320. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  321. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  322. data/lib/rubocop/cop/style/empty_literal.rb +13 -8
  323. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  324. data/lib/rubocop/cop/style/end_block.rb +1 -2
  325. data/lib/rubocop/cop/style/endless_method.rb +2 -3
  326. data/lib/rubocop/cop/style/eval_with_location.rb +5 -5
  327. data/lib/rubocop/cop/style/even_odd.rb +1 -0
  328. data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
  329. data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -4
  330. data/lib/rubocop/cop/style/float_division.rb +4 -0
  331. data/lib/rubocop/cop/style/format_string.rb +2 -0
  332. data/lib/rubocop/cop/style/format_string_token.rb +2 -4
  333. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  334. data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
  335. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  336. data/lib/rubocop/cop/style/hash_conversion.rb +57 -5
  337. data/lib/rubocop/cop/style/hash_each_methods.rb +2 -2
  338. data/lib/rubocop/cop/style/hash_except.rb +1 -0
  339. data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
  340. data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
  341. data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
  342. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
  343. data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
  344. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  345. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
  346. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
  347. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  348. data/lib/rubocop/cop/style/inverse_methods.rb +5 -7
  349. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  350. data/lib/rubocop/cop/style/lambda.rb +2 -4
  351. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  352. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  353. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
  354. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
  355. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  356. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  357. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  358. data/lib/rubocop/cop/style/min_max.rb +2 -2
  359. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  360. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  361. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  362. data/lib/rubocop/cop/style/mixin_usage.rb +3 -2
  363. data/lib/rubocop/cop/style/module_function.rb +8 -6
  364. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  365. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  366. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  367. data/lib/rubocop/cop/style/multiple_comparison.rb +22 -5
  368. data/lib/rubocop/cop/style/mutable_constant.rb +7 -10
  369. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  370. data/lib/rubocop/cop/style/negated_if_else_condition.rb +24 -2
  371. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  372. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  373. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  374. data/lib/rubocop/cop/style/next.rb +4 -9
  375. data/lib/rubocop/cop/style/nil_comparison.rb +3 -0
  376. data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
  377. data/lib/rubocop/cop/style/non_nil_check.rb +9 -5
  378. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  379. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -7
  380. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  381. data/lib/rubocop/cop/style/option_hash.rb +2 -3
  382. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  383. data/lib/rubocop/cop/style/or_assignment.rb +4 -6
  384. data/lib/rubocop/cop/style/parallel_assignment.rb +12 -9
  385. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
  386. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  387. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  388. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  389. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  390. data/lib/rubocop/cop/style/proc.rb +2 -2
  391. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  392. data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
  393. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  394. data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
  395. data/lib/rubocop/cop/style/redundant_begin.rb +47 -7
  396. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  397. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  398. data/lib/rubocop/cop/style/redundant_conditional.rb +5 -6
  399. data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
  400. data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
  401. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +2 -1
  402. data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
  403. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  404. data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -20
  405. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  406. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  407. data/lib/rubocop/cop/style/redundant_return.rb +6 -4
  408. data/lib/rubocop/cop/style/redundant_self.rb +9 -9
  409. data/lib/rubocop/cop/style/redundant_self_assignment.rb +4 -2
  410. data/lib/rubocop/cop/style/redundant_sort.rb +3 -5
  411. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
  412. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  413. data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
  414. data/lib/rubocop/cop/style/rescue_standard_error.rb +5 -7
  415. data/lib/rubocop/cop/style/return_nil.rb +7 -2
  416. data/lib/rubocop/cop/style/safe_navigation.rb +12 -21
  417. data/lib/rubocop/cop/style/sample.rb +1 -0
  418. data/lib/rubocop/cop/style/send.rb +1 -2
  419. data/lib/rubocop/cop/style/signal_exception.rb +6 -7
  420. data/lib/rubocop/cop/style/single_argument_dig.rb +2 -2
  421. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  422. data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
  423. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
  424. data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
  425. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  426. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  427. data/lib/rubocop/cop/style/stderr_puts.rb +3 -6
  428. data/lib/rubocop/cop/style/string_chars.rb +39 -0
  429. data/lib/rubocop/cop/style/string_concatenation.rb +9 -10
  430. data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
  431. data/lib/rubocop/cop/style/string_literals.rb +2 -5
  432. data/lib/rubocop/cop/style/strip.rb +1 -0
  433. data/lib/rubocop/cop/style/struct_inheritance.rb +11 -0
  434. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  435. data/lib/rubocop/cop/style/symbol_proc.rb +29 -10
  436. data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
  437. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
  438. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  439. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
  440. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  441. data/lib/rubocop/cop/style/trivial_accessors.rb +3 -4
  442. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  443. data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
  444. data/lib/rubocop/cop/style/unpack_first.rb +1 -0
  445. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  446. data/lib/rubocop/cop/style/when_then.rb +1 -3
  447. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  448. data/lib/rubocop/cop/style/word_array.rb +1 -2
  449. data/lib/rubocop/cop/style/yoda_condition.rb +4 -11
  450. data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -2
  451. data/lib/rubocop/cop/team.rb +2 -5
  452. data/lib/rubocop/cop/util.rb +8 -11
  453. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  454. data/lib/rubocop/cop/variable_force.rb +6 -15
  455. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  456. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  457. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  458. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  459. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  460. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  461. data/lib/rubocop/directive_comment.rb +69 -9
  462. data/lib/rubocop/ext/regexp_parser.rb +3 -6
  463. data/lib/rubocop/file_finder.rb +1 -3
  464. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  465. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  466. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  467. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  468. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  469. data/lib/rubocop/formatter/junit_formatter.rb +3 -9
  470. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  471. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  472. data/lib/rubocop/magic_comment.rb +1 -1
  473. data/lib/rubocop/name_similarity.rb +1 -1
  474. data/lib/rubocop/options.rb +27 -41
  475. data/lib/rubocop/path_util.rb +1 -3
  476. data/lib/rubocop/rake_task.rb +3 -0
  477. data/lib/rubocop/remote_config.rb +4 -7
  478. data/lib/rubocop/result_cache.rb +5 -12
  479. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  480. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  481. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  482. data/lib/rubocop/runner.rb +7 -14
  483. data/lib/rubocop/target_finder.rb +19 -16
  484. data/lib/rubocop/target_ruby.rb +25 -21
  485. data/lib/rubocop/version.rb +1 -1
  486. metadata +18 -11
  487. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -76,15 +76,15 @@ module RuboCop
76
76
  include RangeHelp
77
77
  extend AutoCorrector
78
78
 
79
- MSG_IMPLICIT = 'Omit the error class when rescuing ' \
80
- '`StandardError` by itself.'
81
- MSG_EXPLICIT = 'Avoid rescuing without specifying ' \
82
- 'an error class.'
79
+ MSG_IMPLICIT = 'Omit the error class when rescuing `StandardError` by itself.'
80
+ MSG_EXPLICIT = 'Avoid rescuing without specifying an error class.'
83
81
 
82
+ # @!method rescue_without_error_class?(node)
84
83
  def_node_matcher :rescue_without_error_class?, <<~PATTERN
85
84
  (resbody nil? _ _)
86
85
  PATTERN
87
86
 
87
+ # @!method rescue_standard_error?(node)
88
88
  def_node_matcher :rescue_standard_error?, <<~PATTERN
89
89
  (resbody $(array (const {nil? cbase} :StandardError)) _ _)
90
90
  PATTERN
@@ -98,9 +98,7 @@ module RuboCop
98
98
  offense_for_implicit_enforced_style(node, error)
99
99
  end
100
100
  when :explicit
101
- rescue_without_error_class?(node) do
102
- offense_for_exlicit_enforced_style(node)
103
- end
101
+ rescue_without_error_class?(node) { offense_for_exlicit_enforced_style(node) }
104
102
  end
105
103
  end
106
104
 
@@ -35,7 +35,10 @@ module RuboCop
35
35
  RETURN_MSG = 'Use `return` instead of `return nil`.'
36
36
  RETURN_NIL_MSG = 'Use `return nil` instead of `return`.'
37
37
 
38
+ # @!method return_node?(node)
38
39
  def_node_matcher :return_node?, '(return)'
40
+
41
+ # @!method return_nil_node?(node)
39
42
  def_node_matcher :return_nil_node?, '(return nil)'
40
43
 
41
44
  def on_return(node)
@@ -71,15 +74,17 @@ module RuboCop
71
74
  end
72
75
 
73
76
  def correct_style?(node)
74
- style == :return && !return_nil_node?(node) ||
75
- style == :return_nil && !return_node?(node)
77
+ style == :return && !return_nil_node?(node) || style == :return_nil && !return_node?(node)
76
78
  end
77
79
 
78
80
  def scoped_node?(node)
79
81
  node.def_type? || node.defs_type? || node.lambda?
80
82
  end
81
83
 
84
+ # @!method chained_send?(node)
82
85
  def_node_matcher :chained_send?, '(send !nil? ...)'
86
+
87
+ # @!method define_method?(node)
83
88
  def_node_matcher :define_method?, <<~PATTERN
84
89
  (send _ {:define_method :define_singleton_method} _)
85
90
  PATTERN
@@ -69,11 +69,11 @@ module RuboCop
69
69
 
70
70
  MSG = 'Use safe navigation (`&.`) instead of checking if an object ' \
71
71
  'exists before calling the method.'
72
- LOGIC_JUMP_KEYWORDS = %i[break fail next raise
73
- return throw yield].freeze
72
+ LOGIC_JUMP_KEYWORDS = %i[break fail next raise return throw yield].freeze
74
73
 
75
74
  # if format: (if checked_variable body nil)
76
75
  # unless format: (if checked_variable nil body)
76
+ # @!method modifier_if_safe_navigation_candidate(node)
77
77
  def_node_matcher :modifier_if_safe_navigation_candidate, <<~PATTERN
78
78
  {
79
79
  (if {
@@ -88,6 +88,7 @@ module RuboCop
88
88
  }
89
89
  PATTERN
90
90
 
91
+ # @!method not_nil_check?(node)
91
92
  def_node_matcher :not_nil_check?, '(send (send $_ :nil?) :!)'
92
93
 
93
94
  def on_if(node)
@@ -110,9 +111,7 @@ module RuboCop
110
111
  return if unsafe_method_used?(method_chain, method)
111
112
  return if method_chain.method?(:empty?)
112
113
 
113
- add_offense(node) do |corrector|
114
- autocorrect(corrector, node)
115
- end
114
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
116
115
  end
117
116
 
118
117
  def use_var_only_in_unless_modifier?(node, variable)
@@ -137,8 +136,7 @@ module RuboCop
137
136
  comments = comments(node)
138
137
  return if comments.empty?
139
138
 
140
- corrector.insert_before(method_call,
141
- "#{comments.map(&:text).join("\n")}\n")
139
+ corrector.insert_before(method_call, "#{comments.map(&:text).join("\n")}\n")
142
140
  end
143
141
 
144
142
  def comments(node)
@@ -179,11 +177,9 @@ module RuboCop
179
177
  end
180
178
 
181
179
  def extract_parts_from_if(node)
182
- variable, receiver =
183
- modifier_if_safe_navigation_candidate(node)
180
+ variable, receiver = modifier_if_safe_navigation_candidate(node)
184
181
 
185
- checked_variable, matching_receiver, method =
186
- extract_common_parts(receiver, variable)
182
+ checked_variable, matching_receiver, method = extract_common_parts(receiver, variable)
187
183
 
188
184
  matching_receiver = nil if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
189
185
 
@@ -193,18 +189,15 @@ module RuboCop
193
189
  def extract_parts_from_and(node)
194
190
  checked_variable, rhs = *node
195
191
  if cop_config['ConvertCodeThatCanStartToReturnNil']
196
- checked_variable =
197
- not_nil_check?(checked_variable) || checked_variable
192
+ checked_variable = not_nil_check?(checked_variable) || checked_variable
198
193
  end
199
194
 
200
- checked_variable, matching_receiver, method =
201
- extract_common_parts(rhs, checked_variable)
195
+ checked_variable, matching_receiver, method = extract_common_parts(rhs, checked_variable)
202
196
  [checked_variable, matching_receiver, rhs, method]
203
197
  end
204
198
 
205
199
  def extract_common_parts(method_chain, checked_variable)
206
- matching_receiver =
207
- find_matching_receiver_invocation(method_chain, checked_variable)
200
+ matching_receiver = find_matching_receiver_invocation(method_chain, checked_variable)
208
201
 
209
202
  method = matching_receiver.parent if matching_receiver
210
203
 
@@ -262,13 +255,11 @@ module RuboCop
262
255
  end
263
256
 
264
257
  def begin_range(node, method_call)
265
- range_between(node.loc.expression.begin_pos,
266
- method_call.loc.expression.begin_pos)
258
+ range_between(node.loc.expression.begin_pos, method_call.loc.expression.begin_pos)
267
259
  end
268
260
 
269
261
  def end_range(node, method_call)
270
- range_between(method_call.loc.expression.end_pos,
271
- node.loc.expression.end_pos)
262
+ range_between(method_call.loc.expression.end_pos, node.loc.expression.end_pos)
272
263
  end
273
264
 
274
265
  def add_safe_nav_to_all_methods_in_chain(corrector,
@@ -33,6 +33,7 @@ module RuboCop
33
33
  MSG = 'Use `%<correct>s` instead of `%<incorrect>s`.'
34
34
  RESTRICT_ON_SEND = %i[first last [] at slice].freeze
35
35
 
36
+ # @!method sample_candidate?(node)
36
37
  def_node_matcher :sample_candidate?, <<~PATTERN
37
38
  (send $(send _ :shuffle $...) ${:#{RESTRICT_ON_SEND.join(' :')}} $...)
38
39
  PATTERN
@@ -14,8 +14,7 @@ module RuboCop
14
14
  # Foo.__send__(:bar)
15
15
  # quuz.public_send(:fred)
16
16
  class Send < Base
17
- MSG = 'Prefer `Object#__send__` or `Object#public_send` to ' \
18
- '`send`.'
17
+ MSG = 'Prefer `Object#__send__` or `Object#public_send` to `send`.'
19
18
  RESTRICT_ON_SEND = %i[send].freeze
20
19
 
21
20
  def on_send(node)
@@ -109,14 +109,15 @@ module RuboCop
109
109
  extend AutoCorrector
110
110
 
111
111
  FAIL_MSG = 'Use `fail` instead of `raise` to signal exceptions.'
112
- RAISE_MSG = 'Use `raise` instead of `fail` to ' \
113
- 'rethrow exceptions.'
112
+ RAISE_MSG = 'Use `raise` instead of `fail` to rethrow exceptions.'
114
113
 
115
114
  RESTRICT_ON_SEND = %i[raise fail].freeze
116
115
 
116
+ # @!method kernel_call?(node, name)
117
117
  def_node_matcher :kernel_call?, '(send (const {nil? cbase} :Kernel) %1 ...)'
118
- def_node_search :custom_fail_methods,
119
- '{(def :fail ...) (defs _ :fail ...)}'
118
+
119
+ # @!method custom_fail_methods(node)
120
+ def_node_search :custom_fail_methods, '{(def :fail ...) (defs _ :fail ...)}'
120
121
 
121
122
  def on_new_investigation
122
123
  ast = processed_source.ast
@@ -201,9 +202,7 @@ module RuboCop
201
202
  end
202
203
 
203
204
  def allow(method_name, node)
204
- each_command_or_kernel_call(method_name, node) do |send_node|
205
- ignore_node(send_node)
206
- end
205
+ each_command_or_kernel_call(method_name, node) { |send_node| ignore_node(send_node) }
207
206
  end
208
207
 
209
208
  def each_command_or_kernel_call(method_name, node)
@@ -29,6 +29,7 @@ module RuboCop
29
29
  MSG = 'Use `%<receiver>s[%<argument>s]` instead of `%<original>s`.'
30
30
  RESTRICT_ON_SEND = %i[dig].freeze
31
31
 
32
+ # @!method single_argument_dig?(node)
32
33
  def_node_matcher :single_argument_dig?, <<~PATTERN
33
34
  (send _ :dig $!splat)
34
35
  PATTERN
@@ -42,8 +43,7 @@ module RuboCop
42
43
  receiver = node.receiver.source
43
44
  argument = expression.source
44
45
 
45
- message = format(MSG, receiver: receiver, argument: argument,
46
- original: node.source)
46
+ message = format(MSG, receiver: receiver, argument: argument, original: node.source)
47
47
  add_offense(node, message: message) do |corrector|
48
48
  correct_access = "#{receiver}[#{argument}]"
49
49
  corrector.replace(node, correct_access)
@@ -81,8 +81,7 @@ module RuboCop
81
81
  end
82
82
 
83
83
  def eligible_method?(node)
84
- node.send_node.receiver &&
85
- method_names.include?(node.send_node.method_name)
84
+ node.send_node.receiver && method_names.include?(node.send_node.method_name)
86
85
  end
87
86
 
88
87
  def methods
@@ -108,9 +107,7 @@ module RuboCop
108
107
 
109
108
  # Prepending an underscore to mark an unused parameter is allowed, so
110
109
  # we remove any leading underscores before comparing.
111
- actual_args_no_underscores = actual_args.map do |arg|
112
- arg.to_s.sub(/^_+/, '')
113
- end
110
+ actual_args_no_underscores = actual_args.map { |arg| arg.to_s.sub(/^_+/, '') }
114
111
 
115
112
  actual_args_no_underscores == target_args(method_name)
116
113
  end
@@ -42,9 +42,7 @@ module RuboCop
42
42
  return if node.endless?
43
43
  return if allow_empty? && !node.body
44
44
 
45
- add_offense(node) do |corrector|
46
- autocorrect(corrector, node)
47
- end
45
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
48
46
  end
49
47
  alias on_defs on_def
50
48
 
@@ -70,6 +68,7 @@ module RuboCop
70
68
  return false unless endless_method_config['Enabled']
71
69
  return false if endless_method_config['EnforcedStyle'] == 'disallow'
72
70
  return false unless body_node
71
+ return false if body_node.parent.assignment_method?
73
72
 
74
73
  !(body_node.begin_type? || body_node.kwbegin_type?)
75
74
  end
@@ -91,8 +90,11 @@ module RuboCop
91
90
  end
92
91
 
93
92
  def correct_to_endless(corrector, node)
93
+ self_receiver = node.self_receiver? ? 'self.' : ''
94
94
  arguments = node.arguments.any? ? node.arguments.source : '()'
95
- replacement = "def #{node.method_name}#{arguments} = #{node.body.source}"
95
+ body_source = method_body_source(node.body)
96
+ replacement = "def #{self_receiver}#{node.method_name}#{arguments} = #{body_source}"
97
+
96
98
  corrector.replace(node, replacement)
97
99
  end
98
100
 
@@ -112,6 +114,21 @@ module RuboCop
112
114
  node: node, corrector: corrector
113
115
  )
114
116
  end
117
+
118
+ def method_body_source(method_body)
119
+ if require_parentheses?(method_body)
120
+ arguments_source = method_body.arguments.map(&:source).join(', ')
121
+ body_source = "#{method_body.method_name}(#{arguments_source})"
122
+
123
+ method_body.receiver ? "#{method_body.receiver.source}.#{body_source}" : body_source
124
+ else
125
+ method_body.source
126
+ end
127
+ end
128
+
129
+ def require_parentheses?(method_body)
130
+ method_body.send_type? && !method_body.arguments.empty? && !method_body.comparison_method?
131
+ end
115
132
  end
116
133
  end
117
134
  end
@@ -21,6 +21,7 @@ module RuboCop
21
21
  MSG = 'Prefer ary[n..] over ary[n..-1].'
22
22
  RESTRICT_ON_SEND = %i[[]].freeze
23
23
 
24
+ # @!method range_till_minus_one?(node)
24
25
  def_node_matcher :range_till_minus_one?, '(irange !nil? (int -1))'
25
26
 
26
27
  def on_send(node)
@@ -36,13 +36,13 @@ module RuboCop
36
36
  include RangeHelp
37
37
  extend AutoCorrector
38
38
 
39
- MSG = 'Consider merging nested conditions into '\
40
- 'outer `%<conditional_type>s` conditions.'
39
+ MSG = 'Consider merging nested conditions into outer `%<conditional_type>s` conditions.'
41
40
 
42
41
  def on_if(node)
43
42
  return if node.ternary? || node.else? || node.elsif?
44
43
 
45
44
  if_branch = node.if_branch
45
+ return if use_variable_assignment_in_condition?(node.condition, if_branch)
46
46
  return unless offending_branch?(if_branch)
47
47
 
48
48
  message = format(MSG, conditional_type: node.keyword)
@@ -53,6 +53,21 @@ module RuboCop
53
53
 
54
54
  private
55
55
 
56
+ def use_variable_assignment_in_condition?(condition, if_branch)
57
+ assigned_variables = assigned_variables(condition)
58
+
59
+ assigned_variables && if_branch&.if_type? &&
60
+ assigned_variables.include?(if_branch.condition.source)
61
+ end
62
+
63
+ def assigned_variables(condition)
64
+ assigned_variables = condition.assignment? ? [condition.children.first.to_s] : []
65
+
66
+ assigned_variables + condition.descendants.select(&:assignment?).map do |node|
67
+ node.children.first.to_s
68
+ end
69
+ end
70
+
56
71
  def offending_branch?(branch)
57
72
  return false unless branch
58
73
 
@@ -65,10 +80,7 @@ module RuboCop
65
80
  def autocorrect(corrector, node, if_branch)
66
81
  corrector.wrap(node.condition, '(', ')') if node.condition.or_type?
67
82
 
68
- if node.unless?
69
- corrector.replace(node.loc.keyword, 'if')
70
- corrector.insert_before(node.condition, '!')
71
- end
83
+ correct_from_unless_to_if(corrector, node) if node.unless?
72
84
 
73
85
  and_operator = if_branch.unless? ? ' && !' : ' && '
74
86
  if if_branch.modifier_form?
@@ -79,6 +91,17 @@ module RuboCop
79
91
  end
80
92
  end
81
93
 
94
+ def correct_from_unless_to_if(corrector, node)
95
+ corrector.replace(node.loc.keyword, 'if')
96
+
97
+ condition = node.condition
98
+ if condition.send_type? && condition.comparison_method? && !condition.parenthesized?
99
+ corrector.wrap(node.condition, '!(', ')')
100
+ else
101
+ corrector.insert_before(node.condition, '!')
102
+ end
103
+ end
104
+
82
105
  def correct_for_guard_condition_style(corrector, node, if_branch, and_operator)
83
106
  outer_condition = node.condition
84
107
  correct_outer_condition(corrector, outer_condition)
@@ -121,7 +144,8 @@ module RuboCop
121
144
  end
122
145
 
123
146
  def requrie_parentheses?(condition)
124
- condition.send_type? && !condition.arguments.empty? && !condition.parenthesized?
147
+ condition.send_type? && !condition.arguments.empty? && !condition.parenthesized? &&
148
+ !condition.comparison_method?
125
149
  end
126
150
 
127
151
  def arguments_range(node)
@@ -80,25 +80,15 @@ module RuboCop
80
80
  :$* => %i[$ARGV ARGV]
81
81
  }
82
82
 
83
- PERL_VARS =
84
- ENGLISH_VARS.flat_map { |k, vs| vs.map { |v| [v, [k]] } }.to_h
85
-
86
- ENGLISH_VARS.merge!(
87
- ENGLISH_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h
88
- )
89
- PERL_VARS.merge!(
90
- PERL_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h
91
- )
83
+ PERL_VARS = ENGLISH_VARS.flat_map { |k, vs| vs.map { |v| [v, [k]] } }.to_h
84
+
85
+ ENGLISH_VARS.merge!(ENGLISH_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h)
86
+ PERL_VARS.merge!(PERL_VARS.flat_map { |_, vs| vs.map { |v| [v, [v]] } }.to_h)
92
87
  ENGLISH_VARS.each_value(&:freeze).freeze
93
88
  PERL_VARS.each_value(&:freeze).freeze
94
89
 
95
90
  # Anything *not* in this set is provided by the English library.
96
- NON_ENGLISH_VARS = Set.new(%i[
97
- $LOAD_PATH
98
- $LOADED_FEATURES
99
- $PROGRAM_NAME
100
- ARGV
101
- ]).freeze
91
+ NON_ENGLISH_VARS = Set.new(%i[$LOAD_PATH $LOADED_FEATURES $PROGRAM_NAME ARGV]).freeze
102
92
 
103
93
  def on_gvar(node)
104
94
  global_var, = *node
@@ -120,9 +110,7 @@ module RuboCop
120
110
  if style == :use_english_names
121
111
  format_english_message(global_var)
122
112
  else
123
- format(MSG_REGULAR,
124
- prefer: preferred_names(global_var).first,
125
- global: global_var)
113
+ format(MSG_REGULAR, prefer: preferred_names(global_var).first, global: global_var)
126
114
  end
127
115
  end
128
116
 
@@ -24,8 +24,7 @@ module RuboCop
24
24
  extend AutoCorrector
25
25
 
26
26
  MSG_REQUIRE = 'Wrap stabby lambda arguments with parentheses.'
27
- MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments ' \
28
- 'with parentheses.'
27
+ MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments with parentheses.'
29
28
  def on_send(node)
30
29
  return unless stabby_lambda_with_args?(node)
31
30
  return unless redundant_parentheses?(node) || missing_parentheses?(node)
@@ -18,10 +18,10 @@ module RuboCop
18
18
  include RangeHelp
19
19
  extend AutoCorrector
20
20
 
21
- MSG =
22
- 'Use `warn` instead of `%<bad>s` to allow such output to be disabled.'
21
+ MSG = 'Use `warn` instead of `%<bad>s` to allow such output to be disabled.'
23
22
  RESTRICT_ON_SEND = %i[puts].freeze
24
23
 
24
+ # @!method stderr_puts?(node)
25
25
  def_node_matcher :stderr_puts?, <<~PATTERN
26
26
  (send
27
27
  {(gvar #stderr_gvar?) (const {nil? cbase} :STDERR)}
@@ -49,10 +49,7 @@ module RuboCop
49
49
  end
50
50
 
51
51
  def stderr_puts_range(send)
52
- range_between(
53
- send.loc.expression.begin_pos,
54
- send.loc.selector.end_pos
55
- )
52
+ range_between(send.loc.expression.begin_pos, send.loc.selector.end_pos)
56
53
  end
57
54
  end
58
55
  end