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
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Style
6
+ # Checks for uses of `String#split` with empty string or regexp literal argument.
7
+ #
8
+ # This cop is marked as unsafe. But probably it's quite unlikely that some other class would
9
+ # define a `split` method that takes exactly the same arguments.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # string.split(//)
14
+ # string.split('')
15
+ #
16
+ # # good
17
+ # string.chars
18
+ #
19
+ class StringChars < Base
20
+ include RangeHelp
21
+ extend AutoCorrector
22
+
23
+ MSG = 'Use `chars` instead of `%<current>s`.'
24
+ RESTRICT_ON_SEND = %i[split].freeze
25
+ BAD_ARGUMENTS = %w[// '' ""].freeze
26
+
27
+ def on_send(node)
28
+ return unless node.arguments.one? && BAD_ARGUMENTS.include?(node.first_argument.source)
29
+
30
+ range = range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
31
+
32
+ add_offense(range, message: format(MSG, current: range.source)) do |corrector|
33
+ corrector.replace(range, 'chars')
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -29,11 +29,13 @@ module RuboCop
29
29
  #
30
30
  class StringConcatenation < Base
31
31
  include Util
32
+ include RangeHelp
32
33
  extend AutoCorrector
33
34
 
34
35
  MSG = 'Prefer string interpolation to string concatenation.'
35
36
  RESTRICT_ON_SEND = %i[+].freeze
36
37
 
38
+ # @!method string_concatenation?(node)
37
39
  def_node_matcher :string_concatenation?, <<~PATTERN
38
40
  {
39
41
  (send str_type? :+ _)
@@ -101,10 +103,7 @@ module RuboCop
101
103
  end
102
104
 
103
105
  def uncorrectable?(part)
104
- part.multiline? ||
105
- part.dstr_type? ||
106
- (part.str_type? && part.heredoc?) ||
107
- part.each_descendant(:block).any?
106
+ part.multiline? || (part.str_type? && part.heredoc?) || part.each_descendant(:block).any?
108
107
  end
109
108
 
110
109
  def corrected_ancestor?(node)
@@ -114,12 +113,12 @@ module RuboCop
114
113
  def replacement(parts)
115
114
  interpolated_parts =
116
115
  parts.map do |part|
117
- if part.str_type?
118
- if single_quoted?(part)
119
- part.value.gsub(/(\\|")/, '\\\\\&')
120
- else
121
- part.value.inspect[1..-2]
122
- end
116
+ case part.type
117
+ when :str
118
+ value = part.value
119
+ single_quoted?(part) ? value.gsub(/(\\|")/, '\\\\\&') : value.inspect[1..-2]
120
+ when :dstr
121
+ contents_range(part).source
123
122
  else
124
123
  "\#{#{part.source}}"
125
124
  end
@@ -17,10 +17,12 @@ module RuboCop
17
17
 
18
18
  MSG = 'Prefer symbols instead of strings as hash keys.'
19
19
 
20
+ # @!method string_hash_key?(node)
20
21
  def_node_matcher :string_hash_key?, <<~PATTERN
21
22
  (pair (str _) _)
22
23
  PATTERN
23
24
 
25
+ # @!method receive_environments_method?(node)
24
26
  def_node_matcher :receive_environments_method?, <<~PATTERN
25
27
  {
26
28
  ^^(send (const {nil? cbase} :IO) :popen ...)
@@ -110,8 +110,7 @@ module RuboCop
110
110
  if unexpected_single_quotes?(quote)
111
111
  all_children_with_quotes = children.all? { |c| wrong_quotes?(c) }
112
112
  register_offense(node) if all_children_with_quotes
113
- elsif unexpected_double_quotes?(quote) &&
114
- !accept_child_double_quotes?(children)
113
+ elsif unexpected_double_quotes?(quote) && !accept_child_double_quotes?(children)
115
114
  register_offense(node)
116
115
  end
117
116
  end
@@ -125,9 +124,7 @@ module RuboCop
125
124
  end
126
125
 
127
126
  def accept_child_double_quotes?(nodes)
128
- nodes.any? do |n|
129
- n.dstr_type? || double_quotes_required?(n.source)
130
- end
127
+ nodes.any? { |n| n.dstr_type? || double_quotes_required?(n.source) }
131
128
  end
132
129
  end
133
130
  end
@@ -20,6 +20,7 @@ module RuboCop
20
20
  MSG = 'Use `strip` instead of `%<methods>s`.'
21
21
  RESTRICT_ON_SEND = %i[lstrip rstrip].freeze
22
22
 
23
+ # @!method lstrip_rstrip(node)
23
24
  def_node_matcher :lstrip_rstrip, <<~PATTERN
24
25
  {(send $(send _ $:rstrip) $:lstrip)
25
26
  (send $(send _ $:lstrip) $:rstrip)}
@@ -37,6 +37,7 @@ module RuboCop
37
37
  end
38
38
  end
39
39
 
40
+ # @!method struct_constructor?(node)
40
41
  def_node_matcher :struct_constructor?, <<~PATTERN
41
42
  {(send (const {nil? cbase} :Struct) :new ...)
42
43
  (block (send (const {nil? cbase} :Struct) :new ...) ...)}
@@ -47,10 +48,20 @@ module RuboCop
47
48
  def correct_parent(parent, corrector)
48
49
  if parent.block_type?
49
50
  corrector.remove(range_with_surrounding_space(range: parent.loc.end, newlines: false))
51
+ elsif (class_node = parent.parent).body.nil?
52
+ corrector.remove(range_for_empty_class_body(class_node, parent))
50
53
  else
51
54
  corrector.insert_after(parent.loc.expression, ' do')
52
55
  end
53
56
  end
57
+
58
+ def range_for_empty_class_body(class_node, struct_new)
59
+ if class_node.single_line?
60
+ range_between(struct_new.source_range.end_pos, class_node.source_range.end_pos)
61
+ else
62
+ range_by_whole_lines(class_node.loc.end, include_final_newline: true)
63
+ end
64
+ end
54
65
  end
55
66
  end
56
67
  end
@@ -20,9 +20,7 @@ module RuboCop
20
20
  def on_sym(node)
21
21
  return unless /\A:["'][A-Za-z_]\w*["']\z/.match?(node.source)
22
22
 
23
- add_offense(node) do |corrector|
24
- corrector.replace(node, node.source.delete(%q('")))
25
- end
23
+ add_offense(node) { |corrector| corrector.replace(node, node.source.delete(%q('"))) }
26
24
  end
27
25
  end
28
26
  end
@@ -5,6 +5,9 @@ module RuboCop
5
5
  module Style
6
6
  # Use symbols as procs when possible.
7
7
  #
8
+ # If you prefer a style that allows block for method with arguments,
9
+ # please set `true` to `AllowMethodsWithArguments`.
10
+ #
8
11
  # @example
9
12
  # # bad
10
13
  # something.map { |s| s.upcase }
@@ -12,17 +15,32 @@ module RuboCop
12
15
  #
13
16
  # # good
14
17
  # something.map(&:upcase)
18
+ #
19
+ # @example AllowMethodsWithArguments: false (default)
20
+ # # bad
21
+ # something.do_something(foo) { |o| o.bar }
22
+ #
23
+ # # good
24
+ # something.do_something(foo, &:bar)
25
+ #
26
+ # @example AllowMethodsWithArguments: true
27
+ # # good
28
+ # something.do_something(foo) { |o| o.bar }
15
29
  class SymbolProc < Base
16
30
  include RangeHelp
17
31
  include IgnoredMethods
18
32
  extend AutoCorrector
19
33
 
20
- MSG = 'Pass `&:%<method>s` as an argument to `%<block_method>s` ' \
21
- 'instead of a block.'
34
+ MSG = 'Pass `&:%<method>s` as an argument to `%<block_method>s` instead of a block.'
22
35
  SUPER_TYPES = %i[super zsuper].freeze
23
36
 
37
+ # @!method proc_node?(node)
24
38
  def_node_matcher :proc_node?, '(send (const {nil? cbase} :Proc) :new)'
39
+
40
+ # @!method symbol_proc_receiver?(node)
25
41
  def_node_matcher :symbol_proc_receiver?, '{(send ...) (super ...) zsuper}'
42
+
43
+ # @!method symbol_proc?(node)
26
44
  def_node_matcher :symbol_proc?, <<~PATTERN
27
45
  {
28
46
  (block $#symbol_proc_receiver? $(args (arg _var)) (send (lvar _var) $_))
@@ -37,11 +55,12 @@ module RuboCop
37
55
  def on_block(node)
38
56
  symbol_proc?(node) do |dispatch_node, arguments_node, method_name|
39
57
  # TODO: Rails-specific handling that we should probably make
40
- # configurable - https://github.com/rubocop-hq/rubocop/issues/1485
58
+ # configurable - https://github.com/rubocop/rubocop/issues/1485
41
59
  # we should ignore lambdas & procs
42
60
  return if proc_node?(dispatch_node)
43
61
  return if %i[lambda proc].include?(dispatch_node.method_name)
44
62
  return if ignored_method?(dispatch_node.method_name)
63
+ return if allow_if_method_has_argument?(node)
45
64
  return if node.block_type? && destructuring_block_argument?(arguments_node)
46
65
 
47
66
  register_offense(node, method_name, dispatch_node.method_name)
@@ -61,9 +80,7 @@ module RuboCop
61
80
  range = range_between(block_start, block_end)
62
81
  message = format(MSG, method: method_name, block_method: block_method_name)
63
82
 
64
- add_offense(range, message: message) do |corrector|
65
- autocorrect(corrector, node)
66
- end
83
+ add_offense(range, message: message) { |corrector| autocorrect(corrector, node) }
67
84
  end
68
85
 
69
86
  def autocorrect(corrector, node)
@@ -75,8 +92,7 @@ module RuboCop
75
92
  end
76
93
 
77
94
  def autocorrect_without_args(corrector, node)
78
- corrector.replace(block_range_with_space(node),
79
- "(&:#{node.body.method_name})")
95
+ corrector.replace(block_range_with_space(node), "(&:#{node.body.method_name})")
80
96
  end
81
97
 
82
98
  def autocorrect_with_args(corrector, node, args, method_name)
@@ -89,8 +105,7 @@ module RuboCop
89
105
  end
90
106
 
91
107
  def block_range_with_space(node)
92
- block_range = range_between(begin_pos_for_replacement(node),
93
- node.loc.end.end_pos)
108
+ block_range = range_between(begin_pos_for_replacement(node), node.loc.end.end_pos)
94
109
  range_with_surrounding_space(range: block_range, side: :left)
95
110
  end
96
111
 
@@ -103,6 +118,10 @@ module RuboCop
103
118
  node.loc.begin.begin_pos
104
119
  end
105
120
  end
121
+
122
+ def allow_if_method_has_argument?(node)
123
+ !!cop_config.fetch('AllowMethodsWithArguments', false) && !node.arguments.count.zero?
124
+ end
106
125
  end
107
126
  end
108
127
  end
@@ -64,8 +64,7 @@ module RuboCop
64
64
  NON_COMPLEX_TYPES = [*VARIABLE_TYPES, :const, :defined?, :yield].freeze
65
65
 
66
66
  MSG = '%<command>s parentheses for ternary conditions.'
67
- MSG_COMPLEX = '%<command>s parentheses for ternary expressions with' \
68
- ' complex conditions.'
67
+ MSG_COMPLEX = '%<command>s parentheses for ternary expressions with complex conditions.'
69
68
 
70
69
  def on_if(node)
71
70
  return if only_closing_parenthesis_is_last_line?(node.condition)
@@ -88,8 +87,7 @@ module RuboCop
88
87
  condition = node.condition
89
88
 
90
89
  return nil if parenthesized?(condition) &&
91
- (safe_assignment?(condition) ||
92
- unsafe_autocorrect?(condition))
90
+ (safe_assignment?(condition) || unsafe_autocorrect?(condition))
93
91
 
94
92
  if parenthesized?(condition)
95
93
  correct_parenthesized(corrector, condition)
@@ -127,8 +125,7 @@ module RuboCop
127
125
  # Anything that is not a variable, constant, or method/.method call
128
126
  # will be counted as a complex expression.
129
127
  def non_complex_expression?(condition)
130
- NON_COMPLEX_TYPES.include?(condition.type) ||
131
- non_complex_send?(condition)
128
+ NON_COMPLEX_TYPES.include?(condition.type) || non_complex_send?(condition)
132
129
  end
133
130
 
134
131
  def non_complex_send?(node)
@@ -191,6 +188,7 @@ module RuboCop
191
188
  (child.send_type? && child.prefix_not?)
192
189
  end
193
190
 
191
+ # @!method method_name(node)
194
192
  def_node_matcher :method_name, <<~PATTERN
195
193
  {($:defined? _ ...)
196
194
  (send {_ nil?} $_ _ ...)}
@@ -5,6 +5,8 @@ module RuboCop
5
5
  module Style
6
6
  # This cop checks for trailing code after the method definition.
7
7
  #
8
+ # NOTE: It always accepts endless method definitions that are basically on the same line.
9
+ #
8
10
  # @example
9
11
  # # bad
10
12
  # def some_method; do_stuff
@@ -24,16 +26,18 @@ module RuboCop
24
26
  # b[c: x]
25
27
  # end
26
28
  #
29
+ # def endless_method = do_stuff
30
+ #
27
31
  class TrailingBodyOnMethodDefinition < Base
28
32
  include Alignment
29
33
  include TrailingBody
30
34
  extend AutoCorrector
31
35
 
32
- MSG = "Place the first line of a multi-line method definition's " \
33
- 'body on its own line.'
36
+ MSG = "Place the first line of a multi-line method definition's body on its own line."
34
37
 
35
38
  def on_def(node)
36
39
  return unless trailing_body?(node)
40
+ return if node.endless?
37
41
 
38
42
  add_offense(first_part_of(node.body)) do |corrector|
39
43
  LineBreakCorrector.correct_trailing_body(
@@ -52,9 +52,7 @@ module RuboCop
52
52
 
53
53
  last_comma_pos = last_comma(node).pos
54
54
 
55
- add_offense(last_comma_pos) do |corrector|
56
- corrector.replace(last_comma_pos, '')
57
- end
55
+ add_offense(last_comma_pos) { |corrector| corrector.replace(last_comma_pos, '') }
58
56
  end
59
57
 
60
58
  private
@@ -78,9 +76,7 @@ module RuboCop
78
76
  def argument_tokens(node)
79
77
  tokens = processed_source.tokens_within(node)
80
78
  pipes = tokens.select { |token| token.type == :tPIPE }
81
- begin_pos, end_pos = pipes.map do |pipe|
82
- tokens.index(pipe)
83
- end
79
+ begin_pos, end_pos = pipes.map { |pipe| tokens.index(pipe) }
84
80
 
85
81
  tokens[begin_pos + 1..end_pos - 1]
86
82
  end
@@ -36,11 +36,10 @@ module RuboCop
36
36
  class TrailingMethodEndStatement < Base
37
37
  extend AutoCorrector
38
38
 
39
- MSG = 'Place the end statement of a multi-line method on ' \
40
- 'its own line.'
39
+ MSG = 'Place the end statement of a multi-line method on its own line.'
41
40
 
42
41
  def on_def(node)
43
- return unless trailing_end?(node)
42
+ return if node.endless? || !trailing_end?(node)
44
43
 
45
44
  add_offense(node.loc.end) do |corrector|
46
45
  corrector.insert_before(
@@ -53,9 +52,7 @@ module RuboCop
53
52
  private
54
53
 
55
54
  def trailing_end?(node)
56
- node.body &&
57
- node.multiline? &&
58
- body_and_end_on_same_line?(node)
55
+ node.body && node.multiline? && body_and_end_on_same_line?(node)
59
56
  end
60
57
 
61
58
  def body_and_end_on_same_line?(node)
@@ -33,8 +33,7 @@ module RuboCop
33
33
  include RangeHelp
34
34
  extend AutoCorrector
35
35
 
36
- MSG = 'Do not use trailing `_`s in parallel assignment. ' \
37
- 'Prefer `%<code>s`.'
36
+ MSG = 'Do not use trailing `_`s in parallel assignment. Prefer `%<code>s`.'
38
37
  UNDERSCORE = '_'
39
38
  DISALLOW = %i[lvasgn splat].freeze
40
39
  private_constant :DISALLOW
@@ -91,8 +90,7 @@ module RuboCop
91
90
  end
92
91
 
93
92
  def allow_named_underscore_variables
94
- @allow_named_underscore_variables ||=
95
- cop_config['AllowNamedUnderscoreVariables']
93
+ @allow_named_underscore_variables ||= cop_config['AllowNamedUnderscoreVariables']
96
94
  end
97
95
 
98
96
  def unneeded_ranges(node)
@@ -121,8 +119,7 @@ module RuboCop
121
119
 
122
120
  return range_for_parentheses(first_offense, mlhs_node) if Util.parentheses?(mlhs_node)
123
121
 
124
- range_between(first_offense.source_range.begin_pos,
125
- node.loc.operator.begin_pos)
122
+ range_between(first_offense.source_range.begin_pos, node.loc.operator.begin_pos)
126
123
  end
127
124
 
128
125
  def children_offenses(variables)
@@ -147,10 +144,7 @@ module RuboCop
147
144
  end
148
145
 
149
146
  def range_for_parentheses(offense, left)
150
- range_between(
151
- offense.source_range.begin_pos - 1,
152
- left.loc.expression.end_pos - 1
153
- )
147
+ range_between(offense.source_range.begin_pos - 1, left.loc.expression.end_pos - 1)
154
148
  end
155
149
  end
156
150
  end
@@ -107,8 +107,7 @@ module RuboCop
107
107
  end
108
108
 
109
109
  def trivial_reader?(node)
110
- looks_like_trivial_reader?(node) &&
111
- !allowed_method_name?(node) && !allowed_reader?(node)
110
+ looks_like_trivial_reader?(node) && !allowed_method_name?(node) && !allowed_reader?(node)
112
111
  end
113
112
 
114
113
  def looks_like_trivial_reader?(node)
@@ -120,6 +119,7 @@ module RuboCop
120
119
  !allowed_method_name?(node) && !allowed_writer?(node.method_name)
121
120
  end
122
121
 
122
+ # @!method looks_like_trivial_writer?(node)
123
123
  def_node_matcher :looks_like_trivial_writer?, <<~PATTERN
124
124
  {(def _ (args (arg ...)) (ivasgn _ (lvar _)))
125
125
  (defs _ _ (args (arg ...)) (ivasgn _ (lvar _)))}
@@ -145,8 +145,7 @@ module RuboCop
145
145
  end
146
146
 
147
147
  def trivial_accessor_kind(node)
148
- if trivial_writer?(node) &&
149
- !dsl_writer?(node.method_name)
148
+ if trivial_writer?(node) && !dsl_writer?(node.method_name)
150
149
  'writer'
151
150
  elsif trivial_reader?(node)
152
151
  'reader'