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
@@ -55,9 +55,7 @@ module RuboCop
55
55
  source: align_with.source,
56
56
  align_line: align_with.line,
57
57
  align_col: align_with.column)
58
- add_offense(end_loc, message: msg) do |corrector|
59
- autocorrect(corrector, node)
60
- end
58
+ add_offense(end_loc, message: msg) { |corrector| autocorrect(corrector, node) }
61
59
  end
62
60
 
63
61
  def accept_end_kw_alignment?(end_loc)
@@ -13,10 +13,12 @@ module RuboCop
13
13
  # @api private
14
14
  module EnforceSuperclass
15
15
  def self.included(base)
16
+ # @!method class_definition(node)
16
17
  base.def_node_matcher :class_definition, <<~PATTERN
17
18
  (class (const _ !:#{base::SUPERCLASS}) #{base::BASE_PATTERN} ...)
18
19
  PATTERN
19
20
 
21
+ # @!method class_new_definition(node)
20
22
  base.def_node_matcher :class_new_definition, <<~PATTERN
21
23
  [!^(casgn {nil? cbase} :#{base::SUPERCLASS} ...)
22
24
  !^^(casgn {nil? cbase} :#{base::SUPERCLASS} (block ...))
@@ -25,15 +27,11 @@ module RuboCop
25
27
  end
26
28
 
27
29
  def on_class(node)
28
- class_definition(node) do
29
- add_offense(node.children[1])
30
- end
30
+ class_definition(node) { add_offense(node.children[1]) }
31
31
  end
32
32
 
33
33
  def on_send(node)
34
- class_new_definition(node) do
35
- add_offense(node.children.last)
36
- end
34
+ class_new_definition(node) { add_offense(node.children.last) }
37
35
  end
38
36
  end
39
37
  end
@@ -31,9 +31,7 @@ module RuboCop
31
31
  max = last_by_line(children)
32
32
  return if line == max.last_line
33
33
 
34
- add_offense(min) do |corrector|
35
- EmptyLineCorrector.insert_before(corrector, min)
36
- end
34
+ add_offense(min) { |corrector| EmptyLineCorrector.insert_before(corrector, min) }
37
35
  end
38
36
 
39
37
  def first_by_line(nodes)
@@ -11,9 +11,7 @@ module RuboCop
11
11
  FROZEN_STRING_LITERAL_TYPES = %i[str dstr].freeze
12
12
 
13
13
  def frozen_string_literal_comment_exists?
14
- leading_comment_lines.any? do |line|
15
- MagicComment.parse(line).valid_literal_value?
16
- end
14
+ leading_comment_lines.any? { |line| MagicComment.parse(line).valid_literal_value? }
17
15
  end
18
16
 
19
17
  private
@@ -34,9 +32,7 @@ module RuboCop
34
32
  # And the above `ruby_version >= 3.1` is undecided whether it will be
35
33
  # Ruby 3.1, 3.2, 4.0 or others.
36
34
  # See https://bugs.ruby-lang.org/issues/8976#note-41 for details.
37
- leading_comment_lines.any? do |line|
38
- MagicComment.parse(line).frozen_string_literal?
39
- end
35
+ leading_comment_lines.any? { |line| MagicComment.parse(line).frozen_string_literal? }
40
36
  end
41
37
 
42
38
  def frozen_string_literal_specified?
@@ -46,9 +42,7 @@ module RuboCop
46
42
  end
47
43
 
48
44
  def leading_comment_lines
49
- first_non_comment_token = processed_source.tokens.find do |token|
50
- !token.comment?
51
- end
45
+ first_non_comment_token = processed_source.tokens.find { |token| !token.comment? }
52
46
 
53
47
  if first_non_comment_token
54
48
  # `line` is 1-indexed so we need to subtract 1 to get the array index
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ # Common functionality for checking gem declarations.
6
+ module GemDeclaration
7
+ extend NodePattern::Macros
8
+
9
+ # @!method gem_declaration?(node)
10
+ def_node_matcher :gem_declaration?, '(send nil? :gem str ...)'
11
+ end
12
+ end
13
+ end
@@ -60,10 +60,8 @@ module RuboCop
60
60
 
61
61
  def deltas(first_pair, current_pair)
62
62
  key_delta = key_delta(first_pair, current_pair)
63
- separator_delta = separator_delta(first_pair, current_pair,
64
- key_delta)
65
- value_delta = value_delta(first_pair, current_pair) -
66
- key_delta - separator_delta
63
+ separator_delta = separator_delta(first_pair, current_pair, key_delta)
64
+ value_delta = value_delta(first_pair, current_pair) - key_delta - separator_delta
67
65
 
68
66
  { key: key_delta, separator: separator_delta, value: value_delta }
69
67
  end
@@ -106,8 +104,7 @@ module RuboCop
106
104
  end
107
105
 
108
106
  def hash_rocket_delta(first_pair, current_pair)
109
- first_pair.loc.column + max_key_width + 1 -
110
- current_pair.loc.operator.column
107
+ first_pair.loc.column + max_key_width + 1 - current_pair.loc.operator.column
111
108
  end
112
109
 
113
110
  def value_delta(first_pair, current_pair)
@@ -4,11 +4,12 @@ module RuboCop
4
4
  module Cop
5
5
  # Common functionality for Style/HashTransformKeys and
6
6
  # Style/HashTransformValues
7
- module HashTransformMethod # rubocop:disable Metrics/ModuleLength
7
+ module HashTransformMethod
8
8
  extend NodePattern::Macros
9
9
 
10
10
  RESTRICT_ON_SEND = %i[[] to_h].freeze
11
11
 
12
+ # @!method array_receiver?(node)
12
13
  def_node_matcher :array_receiver?, <<~PATTERN
13
14
  {(array ...) (send _ :each_with_index) (send _ :with_index _ ?) (send _ :zip ...)}
14
15
  PATTERN
@@ -20,24 +21,18 @@ module RuboCop
20
21
 
21
22
  return if target_ruby_version < 2.6
22
23
 
23
- on_bad_to_h(node) do |*match|
24
- handle_possible_offense(node, match, 'to_h {...}')
25
- end
24
+ on_bad_to_h(node) { |*match| handle_possible_offense(node, match, 'to_h {...}') }
26
25
  end
27
26
 
28
27
  def on_send(node)
29
28
  on_bad_hash_brackets_map(node) do |*match|
30
29
  handle_possible_offense(node, match, 'Hash[_.map {...}]')
31
30
  end
32
- on_bad_map_to_h(node) do |*match|
33
- handle_possible_offense(node, match, 'map {...}.to_h')
34
- end
31
+ on_bad_map_to_h(node) { |*match| handle_possible_offense(node, match, 'map {...}.to_h') }
35
32
  end
36
33
 
37
34
  def on_csend(node)
38
- on_bad_map_to_h(node) do |*match|
39
- handle_possible_offense(node, match, 'map {...}.to_h')
40
- end
35
+ on_bad_map_to_h(node) { |*match| handle_possible_offense(node, match, 'map {...}.to_h') }
41
36
  end
42
37
 
43
38
  private
@@ -114,10 +109,7 @@ module RuboCop
114
109
 
115
110
  captures = extract_captures(correction.match)
116
111
  correction.set_new_arg_name(captures.transformed_argname, corrector)
117
- correction.set_new_body_expression(
118
- captures.transforming_body_expr,
119
- corrector
120
- )
112
+ correction.set_new_body_expression(captures.transforming_body_expr, corrector)
121
113
  end
122
114
 
123
115
  # Internal helper class to hold match data
@@ -179,17 +171,11 @@ module RuboCop
179
171
  end
180
172
 
181
173
  def set_new_arg_name(transformed_argname, corrector)
182
- corrector.replace(
183
- block_node.arguments.loc.expression,
184
- "|#{transformed_argname}|"
185
- )
174
+ corrector.replace(block_node.arguments.loc.expression, "|#{transformed_argname}|")
186
175
  end
187
176
 
188
177
  def set_new_body_expression(transforming_body_expr, corrector)
189
- corrector.replace(
190
- block_node.body,
191
- transforming_body_expr.loc.expression.source
192
- )
178
+ corrector.replace(block_node.body, transforming_body_expr.loc.expression.source)
193
179
  end
194
180
  end
195
181
  end
@@ -15,9 +15,7 @@ module RuboCop
15
15
  alias on_regexp on_dstr
16
16
 
17
17
  def on_node_with_interpolations(node)
18
- node.each_child_node(:begin) do |begin_node|
19
- on_interpolation(begin_node)
20
- end
18
+ node.each_child_node(:begin) { |begin_node| on_interpolation(begin_node) }
21
19
  end
22
20
 
23
21
  # @!method on_interpolation(begin_node)
@@ -16,7 +16,7 @@ module RuboCop
16
16
 
17
17
  return false unless comment
18
18
 
19
- comment.text.match?(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
19
+ !!DirectiveComment.new(comment).match_captures
20
20
  end
21
21
 
22
22
  def allow_uri?
@@ -24,9 +24,7 @@ module RuboCop
24
24
  end
25
25
 
26
26
  def allowed_uri_position?(line, uri_range)
27
- uri_range.begin < max_line_length &&
28
- (uri_range.end == line_length(line) ||
29
- uri_range.end == line_length(line) - 1)
27
+ uri_range.begin < max_line_length && uri_range.end == line_length(line)
30
28
  end
31
29
 
32
30
  def line_length(line)
@@ -40,8 +38,15 @@ module RuboCop
40
38
  begin_position, end_position = last_uri_match.offset(0).map do |pos|
41
39
  pos + indentation_difference(line)
42
40
  end
43
- return nil if begin_position < max_line_length &&
44
- end_position < max_line_length
41
+
42
+ # Extend the end position until the start of the next word, if any.
43
+ # This allows for URIs that are wrapped in quotes or parens to be handled properly
44
+ # while not allowing additional words to be added after the URL.
45
+ if (match = line[end_position..line_length(line)]&.match(/^\S+(?=\s|$)/))
46
+ end_position += match.offset(0).last
47
+ end
48
+
49
+ return nil if begin_position < max_line_length && end_position < max_line_length
45
50
 
46
51
  begin_position...end_position
47
52
  end
@@ -67,8 +72,7 @@ module RuboCop
67
72
 
68
73
  def uri_regexp
69
74
  @uri_regexp ||=
70
- URI::DEFAULT_PARSER
71
- .make_regexp(config.for_cop('Layout/LineLength')['URISchemes'])
75
+ URI::DEFAULT_PARSER.make_regexp(config.for_cop('Layout/LineLength')['URISchemes'])
72
76
  end
73
77
 
74
78
  def valid_uri?(uri_ish_string)
@@ -79,8 +83,7 @@ module RuboCop
79
83
  end
80
84
 
81
85
  def line_length_without_directive(line)
82
- before_comment, = line.split(CommentConfig::COMMENT_DIRECTIVE_REGEXP)
83
- before_comment.rstrip.length
86
+ DirectiveComment.before_comment(line).rstrip.length
84
87
  end
85
88
  end
86
89
  end
@@ -11,15 +11,12 @@ module RuboCop
11
11
  # Return a new `Range` covering the first matching group number for each
12
12
  # match of `regex` inside `range`
13
13
  def each_match_range(range, regex)
14
- range.source.scan(regex) do
15
- yield match_range(range, Regexp.last_match)
16
- end
14
+ range.source.scan(regex) { yield match_range(range, Regexp.last_match) }
17
15
  end
18
16
 
19
17
  # For a `match` inside `range`, return a new `Range` covering the match
20
18
  def match_range(range, match)
21
- range_between(range.begin_pos + match.begin(1),
22
- range.begin_pos + match.end(1))
19
+ range_between(range.begin_pos + match.begin(1), range.begin_pos + match.end(1))
23
20
  end
24
21
  end
25
22
  end
@@ -36,6 +36,7 @@ module RuboCop
36
36
 
37
37
  private
38
38
 
39
+ # @!method define_method?(node)
39
40
  def_node_matcher :define_method?, <<~PATTERN
40
41
  (block
41
42
  (send nil? :define_method ({sym str} $_))
@@ -59,9 +60,7 @@ module RuboCop
59
60
  abc_vector: abc_vector,
60
61
  max: max)
61
62
 
62
- add_offense(node, message: msg) do
63
- self.max = complexity.ceil
64
- end
63
+ add_offense(node, message: msg) { self.max = complexity.ceil }
65
64
  end
66
65
 
67
66
  def complexity(body)
@@ -18,8 +18,7 @@ module RuboCop
18
18
  default = default_cop_config['PreferredMethods']
19
19
  merged = cop_config['PreferredMethods']
20
20
  overrides = merged.values - default.values
21
- merged.reject { |key, _| overrides.include?(key) }
22
- .map { |k, v| [k.to_sym, v] }.to_h
21
+ merged.reject { |key, _| overrides.include?(key) }.transform_keys(&:to_sym)
23
22
  end
24
23
  end
25
24
 
@@ -28,8 +28,7 @@ module RuboCop
28
28
  expected_column = base_column(left_brace, left_parenthesis) +
29
29
  configured_indentation_width + offset
30
30
  @column_delta = expected_column - actual_column
31
- styles =
32
- detected_styles(actual_column, offset, left_parenthesis, left_brace)
31
+ styles = detected_styles(actual_column, offset, left_parenthesis, left_brace)
33
32
 
34
33
  if @column_delta.zero?
35
34
  check_expected_style(styles)
@@ -77,7 +76,9 @@ module RuboCop
77
76
  def incorrect_style_detected(styles, first, left_parenthesis)
78
77
  msg = message(base_description(left_parenthesis))
79
78
 
80
- add_offense(first, message: msg) do
79
+ add_offense(first, message: msg) do |corrector|
80
+ autocorrect(corrector, first)
81
+
81
82
  ambiguous_style_detected(*styles)
82
83
  end
83
84
  end
@@ -16,9 +16,7 @@ module RuboCop
16
16
  last_seen_line = -1
17
17
  children.each do |child|
18
18
  if last_seen_line >= child.first_line
19
- add_offense(child) do |corrector|
20
- EmptyLineCorrector.insert_before(corrector, child)
21
- end
19
+ add_offense(child) { |corrector| EmptyLineCorrector.insert_before(corrector, child) }
22
20
  else
23
21
  last_seen_line = child.last_line
24
22
  end
@@ -6,12 +6,10 @@ module RuboCop
6
6
  # operations.
7
7
  module MultilineExpressionIndentation # rubocop:disable Metrics/ModuleLength
8
8
  KEYWORD_ANCESTOR_TYPES = %i[for if while until return].freeze
9
- UNALIGNED_RHS_TYPES = %i[if while until for return
10
- array kwbegin].freeze
9
+ UNALIGNED_RHS_TYPES = %i[if while until for return array kwbegin].freeze
11
10
  DEFAULT_MESSAGE_TAIL = 'an expression'
12
11
  ASSIGNMENT_MESSAGE_TAIL = 'an expression in an assignment'
13
- KEYWORD_MESSAGE_TAIL = 'a %<kind>s in %<article>s `%<keyword>s` ' \
14
- 'statement'
12
+ KEYWORD_MESSAGE_TAIL = 'a %<kind>s in %<article>s `%<keyword>s` statement'
15
13
 
16
14
  def on_send(node)
17
15
  return if !node.receiver || node.method?(:[])
@@ -35,26 +33,6 @@ module RuboCop
35
33
  lhs
36
34
  end
37
35
 
38
- def right_hand_side(send_node)
39
- if send_node.operator_method? && send_node.arguments?
40
- send_node.first_argument.source_range # not used for method calls
41
- else
42
- regular_method_right_hand_side(send_node)
43
- end
44
- end
45
-
46
- def regular_method_right_hand_side(send_node)
47
- dot = send_node.loc.dot
48
- selector = send_node.loc.selector
49
- if send_node.dot? && selector && dot.line == selector.line
50
- dot.join(selector)
51
- elsif selector
52
- selector
53
- elsif send_node.implicit_call?
54
- dot.join(send_node.loc.begin)
55
- end
56
- end
57
-
58
36
  # The correct indentation of `node` is usually `IndentationWidth`, with
59
37
  # one exception: prefix keywords.
60
38
  #
@@ -75,8 +53,7 @@ module RuboCop
75
53
  kw_node = kw_node_with_special_indentation(node)
76
54
  if kw_node && !postfix_conditional?(kw_node)
77
55
  # This cop could have its own IndentationWidth configuration
78
- configured_indentation_width +
79
- @config.for_cop('Layout/IndentationWidth')['Width']
56
+ configured_indentation_width + @config.for_cop('Layout/IndentationWidth')['Width']
80
57
  else
81
58
  configured_indentation_width
82
59
  end
@@ -91,9 +68,10 @@ module RuboCop
91
68
  end
92
69
 
93
70
  def incorrect_style_detected(range, node, lhs, rhs)
94
- add_offense(range, location: range, message: message(node, lhs, rhs)) do
95
- if supported_styles.size > 2 ||
96
- offending_range(node, lhs, rhs, alternative_style)
71
+ add_offense(range, message: message(node, lhs, rhs)) do |corrector|
72
+ autocorrect(corrector, range)
73
+
74
+ if supported_styles.size > 2 || offending_range(node, lhs, rhs, alternative_style)
97
75
  unrecognized_style_detected
98
76
  else
99
77
  opposite_style_detected
@@ -110,9 +88,7 @@ module RuboCop
110
88
  return keyword_message_tail(ancestor)
111
89
  end
112
90
 
113
- part_of_assignment_rhs(node, rhs) do |_node|
114
- return ASSIGNMENT_MESSAGE_TAIL
115
- end
91
+ part_of_assignment_rhs(node, rhs) { |_node| return ASSIGNMENT_MESSAGE_TAIL }
116
92
 
117
93
  DEFAULT_MESSAGE_TAIL
118
94
  end
@@ -122,9 +98,7 @@ module RuboCop
122
98
  kind = keyword == 'for' ? 'collection' : 'condition'
123
99
  article = keyword.start_with?('i', 'u') ? 'an' : 'a'
124
100
 
125
- format(KEYWORD_MESSAGE_TAIL, kind: kind,
126
- article: article,
127
- keyword: keyword)
101
+ format(KEYWORD_MESSAGE_TAIL, kind: kind, article: article, keyword: keyword)
128
102
  end
129
103
 
130
104
  def kw_node_with_special_indentation(node)
@@ -162,9 +136,7 @@ module RuboCop
162
136
  next unless kind == :with_or_without_parentheses ||
163
137
  kind == :with_parentheses && parentheses?(a)
164
138
 
165
- a.arguments.any? do |arg|
166
- within_node?(node, arg)
167
- end
139
+ a.arguments.any? { |arg| within_node?(node, arg) }
168
140
  end
169
141
  end
170
142
 
@@ -199,8 +171,7 @@ module RuboCop
199
171
 
200
172
  # The []= operator and setters (a.b = c) are parsed as :send nodes.
201
173
  def valid_method_rhs_candidate?(candidate, node)
202
- node.setter_method? &&
203
- valid_rhs_candidate?(candidate, node.last_argument)
174
+ node.setter_method? && valid_rhs_candidate?(candidate, node.last_argument)
204
175
  end
205
176
 
206
177
  def valid_rhs_candidate?(candidate, node)