rubocop 1.12.0 → 1.16.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 (415) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/config/default.yml +77 -8
  4. data/exe/rubocop +1 -3
  5. data/lib/rubocop.rb +10 -1
  6. data/lib/rubocop/cached_data.rb +1 -3
  7. data/lib/rubocop/cli.rb +4 -6
  8. data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
  9. data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
  10. data/lib/rubocop/cli/command/show_cops.rb +1 -4
  11. data/lib/rubocop/comment_config.rb +2 -7
  12. data/lib/rubocop/config.rb +11 -26
  13. data/lib/rubocop/config_loader.rb +5 -11
  14. data/lib/rubocop/config_loader_resolver.rb +22 -14
  15. data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
  16. data/lib/rubocop/config_store.rb +1 -2
  17. data/lib/rubocop/config_validator.rb +5 -10
  18. data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
  19. data/lib/rubocop/cop/badge.rb +1 -2
  20. data/lib/rubocop/cop/base.rb +8 -6
  21. data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
  22. data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
  23. data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
  24. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
  25. data/lib/rubocop/cop/commissioner.rb +2 -8
  26. data/lib/rubocop/cop/cop.rb +4 -18
  27. data/lib/rubocop/cop/corrector.rb +1 -4
  28. data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
  29. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
  30. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
  31. data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
  32. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
  33. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
  34. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
  35. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
  36. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
  37. data/lib/rubocop/cop/generator.rb +1 -4
  38. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
  39. data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
  40. data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
  41. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
  42. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
  43. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
  44. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
  45. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
  46. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
  47. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
  48. data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
  49. data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
  50. data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
  51. data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
  52. data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
  53. data/lib/rubocop/cop/layout/class_structure.rb +4 -10
  54. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
  55. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
  56. data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
  57. data/lib/rubocop/cop/layout/dot_position.rb +1 -3
  58. data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
  59. data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
  60. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
  61. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
  62. data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
  63. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
  64. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
  65. data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
  66. data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
  67. data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
  68. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
  69. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
  70. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
  71. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
  72. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
  73. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
  74. data/lib/rubocop/cop/layout/hash_alignment.rb +35 -15
  75. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
  76. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
  77. data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
  78. data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
  79. data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
  80. data/lib/rubocop/cop/layout/line_length.rb +4 -15
  81. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
  82. data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
  83. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
  84. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
  85. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +16 -10
  86. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +4 -0
  87. data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
  88. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
  89. data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
  90. data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
  91. data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
  92. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
  93. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
  94. data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
  95. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
  96. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
  97. data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
  98. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  99. data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
  100. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
  101. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
  102. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
  103. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
  104. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
  105. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
  106. data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
  107. data/lib/rubocop/cop/legacy/corrector.rb +1 -3
  108. data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
  109. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
  110. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
  111. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
  112. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
  113. data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
  114. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
  115. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
  116. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
  117. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
  118. data/lib/rubocop/cop/lint/else_layout.rb +1 -3
  119. data/lib/rubocop/cop/lint/empty_block.rb +18 -2
  120. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
  121. data/lib/rubocop/cop/lint/empty_file.rb +1 -3
  122. data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
  123. data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
  124. data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
  125. data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
  126. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
  127. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
  128. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
  129. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
  130. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
  131. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
  132. data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
  133. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
  134. data/lib/rubocop/cop/lint/loop.rb +1 -2
  135. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
  136. data/lib/rubocop/cop/lint/missing_super.rb +1 -2
  137. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
  138. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
  139. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
  140. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
  141. data/lib/rubocop/cop/lint/number_conversion.rb +4 -5
  142. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
  143. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
  144. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
  145. data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
  146. data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
  147. data/lib/rubocop/cop/lint/rand_one.rb +1 -2
  148. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
  149. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
  150. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
  151. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
  152. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
  153. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
  154. data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
  155. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
  156. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
  157. data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
  158. data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
  159. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
  160. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
  161. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
  162. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
  163. data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
  164. data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
  165. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
  166. data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
  167. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  168. data/lib/rubocop/cop/lint/to_json.rb +1 -2
  169. data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
  170. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
  171. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
  172. data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
  173. data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
  174. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
  175. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
  176. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
  177. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
  178. data/lib/rubocop/cop/lint/void.rb +5 -12
  179. data/lib/rubocop/cop/message_annotator.rb +1 -3
  180. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
  181. data/lib/rubocop/cop/metrics/class_length.rb +1 -3
  182. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
  183. data/lib/rubocop/cop/metrics/module_length.rb +2 -6
  184. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
  185. data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
  186. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
  187. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
  188. data/lib/rubocop/cop/migration/department_name.rb +3 -7
  189. data/lib/rubocop/cop/mixin/alignment.rb +2 -4
  190. data/lib/rubocop/cop/mixin/check_line_breakable.rb +20 -4
  191. data/lib/rubocop/cop/mixin/code_length.rb +1 -3
  192. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
  193. data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
  194. data/lib/rubocop/cop/mixin/def_node.rb +2 -5
  195. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
  196. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
  197. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
  198. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
  199. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
  200. data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
  201. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
  202. data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
  203. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
  204. data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
  205. data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
  206. data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
  207. data/lib/rubocop/cop/mixin/match_range.rb +2 -5
  208. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
  209. data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
  210. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
  211. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
  212. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -37
  213. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  214. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
  215. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
  216. data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
  217. data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
  218. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
  219. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
  220. data/lib/rubocop/cop/mixin/range_help.rb +10 -13
  221. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
  222. data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
  223. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
  224. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
  225. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
  226. data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
  227. data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
  228. data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
  229. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
  230. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
  231. data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
  232. data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
  233. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
  234. data/lib/rubocop/cop/naming/file_name.rb +7 -16
  235. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
  236. data/lib/rubocop/cop/naming/method_name.rb +1 -2
  237. data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
  238. data/lib/rubocop/cop/offense.rb +3 -8
  239. data/lib/rubocop/cop/registry.rb +3 -11
  240. data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -4
  241. data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
  242. data/lib/rubocop/cop/style/alias.rb +5 -12
  243. data/lib/rubocop/cop/style/and_or.rb +3 -1
  244. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
  245. data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
  246. data/lib/rubocop/cop/style/attr.rb +1 -3
  247. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
  248. data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
  249. data/lib/rubocop/cop/style/case_like_if.rb +1 -2
  250. data/lib/rubocop/cop/style/character_literal.rb +2 -4
  251. data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
  252. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  253. data/lib/rubocop/cop/style/collection_compact.rb +1 -3
  254. data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
  255. data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
  256. data/lib/rubocop/cop/style/command_literal.rb +3 -8
  257. data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
  258. data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
  259. data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
  260. data/lib/rubocop/cop/style/copyright.rb +3 -6
  261. data/lib/rubocop/cop/style/date_time.rb +2 -5
  262. data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
  263. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
  264. data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
  265. data/lib/rubocop/cop/style/empty_else.rb +3 -9
  266. data/lib/rubocop/cop/style/empty_literal.rb +12 -9
  267. data/lib/rubocop/cop/style/empty_method.rb +3 -7
  268. data/lib/rubocop/cop/style/end_block.rb +1 -2
  269. data/lib/rubocop/cop/style/endless_method.rb +1 -3
  270. data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
  271. data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
  272. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
  273. data/lib/rubocop/cop/style/format_string_token.rb +1 -4
  274. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
  275. data/lib/rubocop/cop/style/guard_clause.rb +3 -7
  276. data/lib/rubocop/cop/style/hash_conversion.rb +31 -3
  277. data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
  278. data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
  279. data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
  280. data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
  281. data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
  282. data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
  283. data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
  284. data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
  285. data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
  286. data/lib/rubocop/cop/style/lambda.rb +2 -4
  287. data/lib/rubocop/cop/style/lambda_call.rb +1 -2
  288. data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
  289. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -3
  290. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +10 -18
  291. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
  292. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
  293. data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
  294. data/lib/rubocop/cop/style/min_max.rb +1 -2
  295. data/lib/rubocop/cop/style/missing_else.rb +2 -4
  296. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
  297. data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
  298. data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
  299. data/lib/rubocop/cop/style/module_function.rb +3 -6
  300. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
  301. data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
  302. data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
  303. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
  304. data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
  305. data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
  306. data/lib/rubocop/cop/style/negated_if.rb +1 -2
  307. data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
  308. data/lib/rubocop/cop/style/negated_unless.rb +1 -2
  309. data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
  310. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
  311. data/lib/rubocop/cop/style/next.rb +4 -9
  312. data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
  313. data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
  314. data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
  315. data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
  316. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
  317. data/lib/rubocop/cop/style/option_hash.rb +1 -3
  318. data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
  319. data/lib/rubocop/cop/style/or_assignment.rb +2 -6
  320. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
  321. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
  322. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
  323. data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
  324. data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
  325. data/lib/rubocop/cop/style/proc.rb +1 -2
  326. data/lib/rubocop/cop/style/quoted_symbols.rb +105 -0
  327. data/lib/rubocop/cop/style/raise_args.rb +4 -8
  328. data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
  329. data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
  330. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
  331. data/lib/rubocop/cop/style/redundant_begin.rb +15 -4
  332. data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
  333. data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
  334. data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
  335. data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
  336. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
  337. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
  338. data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
  339. data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
  340. data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
  341. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
  342. data/lib/rubocop/cop/style/redundant_return.rb +3 -5
  343. data/lib/rubocop/cop/style/redundant_self.rb +2 -6
  344. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
  345. data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
  346. data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
  347. data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
  348. data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
  349. data/lib/rubocop/cop/style/return_nil.rb +1 -2
  350. data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
  351. data/lib/rubocop/cop/style/send.rb +1 -2
  352. data/lib/rubocop/cop/style/signal_exception.rb +3 -7
  353. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
  354. data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
  355. data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
  356. data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
  357. data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
  358. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
  359. data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
  360. data/lib/rubocop/cop/style/string_chars.rb +2 -1
  361. data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
  362. data/lib/rubocop/cop/style/string_literals.rb +3 -5
  363. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
  364. data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
  365. data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
  366. data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
  367. data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
  368. data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
  369. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
  370. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
  371. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
  372. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
  373. data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
  374. data/lib/rubocop/cop/style/unless_else.rb +1 -2
  375. data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
  376. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  377. data/lib/rubocop/cop/style/when_then.rb +4 -2
  378. data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
  379. data/lib/rubocop/cop/style/word_array.rb +1 -2
  380. data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
  381. data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
  382. data/lib/rubocop/cop/team.rb +2 -5
  383. data/lib/rubocop/cop/util.rb +8 -11
  384. data/lib/rubocop/cop/utils/format_string.rb +1 -3
  385. data/lib/rubocop/cop/variable_force.rb +6 -15
  386. data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
  387. data/lib/rubocop/cop/variable_force/branch.rb +16 -2
  388. data/lib/rubocop/cop/variable_force/reference.rb +1 -3
  389. data/lib/rubocop/cop/variable_force/scope.rb +4 -8
  390. data/lib/rubocop/cop/variable_force/variable.rb +2 -4
  391. data/lib/rubocop/cops_documentation_generator.rb +7 -21
  392. data/lib/rubocop/directive_comment.rb +10 -1
  393. data/lib/rubocop/file_finder.rb +1 -3
  394. data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
  395. data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
  396. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
  397. data/lib/rubocop/formatter/html_formatter.rb +4 -10
  398. data/lib/rubocop/formatter/json_formatter.rb +1 -5
  399. data/lib/rubocop/formatter/junit_formatter.rb +23 -14
  400. data/lib/rubocop/formatter/progress_formatter.rb +1 -3
  401. data/lib/rubocop/formatter/tap_formatter.rb +4 -2
  402. data/lib/rubocop/options.rb +30 -50
  403. data/lib/rubocop/path_util.rb +1 -3
  404. data/lib/rubocop/rake_task.rb +3 -0
  405. data/lib/rubocop/remote_config.rb +4 -7
  406. data/lib/rubocop/result_cache.rb +5 -12
  407. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  408. data/lib/rubocop/rspec/expect_offense.rb +4 -9
  409. data/lib/rubocop/rspec/shared_contexts.rb +8 -15
  410. data/lib/rubocop/runner.rb +7 -14
  411. data/lib/rubocop/target_finder.rb +18 -16
  412. data/lib/rubocop/target_ruby.rb +4 -8
  413. data/lib/rubocop/version.rb +1 -1
  414. metadata +16 -7
  415. data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -103,8 +103,7 @@ module RuboCop
103
103
  end
104
104
 
105
105
  def setter_method?(method_name)
106
- method_name.to_s.end_with?(EQUAL) &&
107
- !%i[!= == === >= <=].include?(method_name)
106
+ method_name.to_s.end_with?(EQUAL) && !%i[!= == === >= <=].include?(method_name)
108
107
  end
109
108
 
110
109
  def assignment_rhs_exist?(node)
@@ -214,14 +213,10 @@ module RuboCop
214
213
  include IgnoredNode
215
214
  extend AutoCorrector
216
215
 
217
- MSG = 'Use the return of the conditional for variable assignment ' \
218
- 'and comparison.'
219
- ASSIGN_TO_CONDITION_MSG =
220
- 'Assign variables inside of conditionals'
221
- VARIABLE_ASSIGNMENT_TYPES =
222
- %i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
223
- ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES +
224
- %i[and_asgn or_asgn op_asgn masgn].freeze
216
+ MSG = 'Use the return of the conditional for variable assignment and comparison.'
217
+ ASSIGN_TO_CONDITION_MSG = 'Assign variables inside of conditionals'
218
+ VARIABLE_ASSIGNMENT_TYPES = %i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
219
+ ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES + %i[and_asgn or_asgn op_asgn masgn].freeze
225
220
  LINE_LENGTH = 'Layout/LineLength'
226
221
  INDENTATION_WIDTH = 'Layout/IndentationWidth'
227
222
  ENABLED = 'Enabled'
@@ -368,9 +363,7 @@ module RuboCop
368
363
  return if allowed_single_line?(branches)
369
364
  return if correction_exceeds_line_limit?(node, branches)
370
365
 
371
- add_offense(node) do |corrector|
372
- autocorrect(corrector, node)
373
- end
366
+ add_offense(node) { |corrector| autocorrect(corrector, node) }
374
367
  end
375
368
 
376
369
  def autocorrect(corrector, node)
@@ -411,9 +404,7 @@ module RuboCop
411
404
 
412
405
  def longest_line(node, assignment)
413
406
  assignment_regex = /\s*#{Regexp.escape(assignment).gsub('\ ', '\s*')}/
414
- lines = node.source.lines.map do |line|
415
- line.chomp.sub(assignment_regex, '')
416
- end
407
+ lines = node.source.lines.map { |line| line.chomp.sub(assignment_regex, '') }
417
408
  longest_line = lines.max_by(&:length)
418
409
  assignment + longest_line
419
410
  end
@@ -457,9 +448,7 @@ module RuboCop
457
448
  expression = node.loc.expression
458
449
  begin_pos = expression.begin_pos - (expression.column - column - 2)
459
450
 
460
- Parser::Source::Range.new(expression.source_buffer,
461
- begin_pos,
462
- expression.begin_pos)
451
+ Parser::Source::Range.new(expression.source_buffer, begin_pos, expression.begin_pos)
463
452
  end
464
453
 
465
454
  def assignment(node)
@@ -532,9 +521,7 @@ module RuboCop
532
521
  _variable, *_operator, if_rhs = *node.if_branch
533
522
  _else_variable, *_operator, else_rhs = *node.else_branch
534
523
 
535
- expr = "#{node.condition.source} ? " \
536
- "#{if_rhs.source} : " \
537
- "#{else_rhs.source}"
524
+ expr = "#{node.condition.source} ? #{if_rhs.source} : #{else_rhs.source}"
538
525
 
539
526
  element_assignment?(node.if_branch) ? "(#{expr})" : expr
540
527
  end
@@ -596,8 +583,7 @@ module RuboCop
596
583
  def move_branch_inside_condition(corrector, branch, condition,
597
584
  assignment, column)
598
585
  branch_assignment = tail(branch)
599
- corrector.insert_before(branch_assignment,
600
- assignment.source)
586
+ corrector.insert_before(branch_assignment, assignment.source)
601
587
 
602
588
  remove_whitespace_in_branches(corrector, branch, condition, column)
603
589
 
@@ -19,10 +19,8 @@ module RuboCop
19
19
  include RangeHelp
20
20
  extend AutoCorrector
21
21
 
22
- MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
23
- 'any code.'
24
- AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
25
- 'your RuboCop config'
22
+ MSG = 'Include a copyright notice matching /%<notice>s/ before any code.'
23
+ AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in your RuboCop config'
26
24
 
27
25
  def on_new_investigation
28
26
  return if notice.empty? || notice_found?(processed_source)
@@ -57,8 +55,7 @@ module RuboCop
57
55
  regex = Regexp.new(notice)
58
56
  return if autocorrect_notice&.match?(regex)
59
57
 
60
- raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must " \
61
- "match Notice /#{notice}/"
58
+ raise Warning, "AutocorrectNotice '#{autocorrect_notice}' must match Notice /#{notice}/"
62
59
  end
63
60
 
64
61
  def insert_notice_before(processed_source)
@@ -63,15 +63,12 @@ module RuboCop
63
63
  PATTERN
64
64
 
65
65
  def on_send(node)
66
- return unless date_time?(node) ||
67
- (to_datetime?(node) && disallow_coercion?)
66
+ return unless date_time?(node) || (to_datetime?(node) && disallow_coercion?)
68
67
  return if historic_date?(node)
69
68
 
70
69
  message = to_datetime?(node) ? COERCION_MSG : CLASS_MSG
71
70
 
72
- add_offense(node, message: message) do |corrector|
73
- autocorrect(corrector, node)
74
- end
71
+ add_offense(node, message: message) { |corrector| autocorrect(corrector, node) }
75
72
  end
76
73
 
77
74
  private
@@ -36,8 +36,7 @@ module RuboCop
36
36
  class DefWithParentheses < Base
37
37
  extend AutoCorrector
38
38
 
39
- MSG = "Omit the parentheses in defs when the method doesn't accept " \
40
- 'any arguments.'
39
+ MSG = "Omit the parentheses in defs when the method doesn't accept any arguments."
41
40
 
42
41
  def on_def(node)
43
42
  return if node.single_line?
@@ -25,8 +25,7 @@ module RuboCop
25
25
  class EachForSimpleLoop < Base
26
26
  extend AutoCorrector
27
27
 
28
- MSG = 'Use `Integer#times` for a simple loop which iterates a fixed ' \
29
- 'number of times.'
28
+ MSG = 'Use `Integer#times` for a simple loop which iterates a fixed number of times.'
30
29
 
31
30
  def on_block(node)
32
31
  return unless offending_each_range(node)
@@ -44,19 +44,14 @@ module RuboCop
44
44
  def on_case(case_node)
45
45
  return if case_node.condition
46
46
 
47
- branch_bodies = [
48
- *case_node.when_branches.map(&:body),
49
- case_node.else_branch
50
- ].compact
47
+ branch_bodies = [*case_node.when_branches.map(&:body), case_node.else_branch].compact
51
48
 
52
49
  return if branch_bodies.any? do |body|
53
50
  body.return_type? ||
54
51
  body.each_descendant.any?(&:return_type?)
55
52
  end
56
53
 
57
- add_offense(case_node.loc.keyword) do |corrector|
58
- autocorrect(corrector, case_node)
59
- end
54
+ add_offense(case_node.loc.keyword) { |corrector| autocorrect(corrector, case_node) }
60
55
  end
61
56
 
62
57
  private
@@ -123,17 +123,13 @@ module RuboCop
123
123
  def empty_check(node)
124
124
  return unless node.else? && !node.else_branch
125
125
 
126
- add_offense(node.loc.else) do |corrector|
127
- autocorrect(corrector, node)
128
- end
126
+ add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
129
127
  end
130
128
 
131
129
  def nil_check(node)
132
130
  return unless node.else_branch&.nil_type?
133
131
 
134
- add_offense(node.loc.else) do |corrector|
135
- autocorrect(corrector, node)
136
- end
132
+ add_offense(node.loc.else) { |corrector| autocorrect(corrector, node) }
137
133
  end
138
134
 
139
135
  def autocorrect(corrector, node)
@@ -154,9 +150,7 @@ module RuboCop
154
150
  return node if node.case_type?
155
151
  return node unless node.elsif?
156
152
 
157
- node.each_ancestor(:if, :case, :when).find(-> { node }) do |parent|
158
- parent.loc.end
159
- end
153
+ node.each_ancestor(:if, :case, :when).find(-> { node }) { |parent| parent.loc.end }
160
154
  end
161
155
 
162
156
  def autocorrect_forbidden?(type)
@@ -37,8 +37,7 @@ module RuboCop
37
37
  def_node_matcher :str_node, '(send (const {nil? cbase} :String) :new)'
38
38
 
39
39
  # @!method array_with_block(node)
40
- def_node_matcher :array_with_block,
41
- '(block (send (const {nil? cbase} :Array) :new) args _)'
40
+ def_node_matcher :array_with_block, '(block (send (const {nil? cbase} :Array) :new) args _)'
42
41
 
43
42
  # @!method hash_with_block(node)
44
43
  def_node_matcher :hash_with_block, <<~PATTERN
@@ -63,7 +62,7 @@ module RuboCop
63
62
  ARR_MSG
64
63
  elsif offense_hash_node?(node)
65
64
  HASH_MSG
66
- elsif str_node(node) && !frozen_string_literals_enabled?
65
+ elsif str_node(node) && !frozen_strings?
67
66
  format(STR_MSG, prefer: preferred_string_literal)
68
67
  end
69
68
  end
@@ -84,20 +83,17 @@ module RuboCop
84
83
  parent = node.parent
85
84
  return false unless parent && %i[send super zsuper].include?(parent.type)
86
85
 
87
- node.equal?(parent.arguments.first) &&
88
- !parentheses?(node.parent)
86
+ node.equal?(parent.arguments.first) && !parentheses?(node.parent)
89
87
  end
90
88
 
91
89
  def replacement_range(node)
92
- if hash_node(node) &&
93
- first_argument_unparenthesized?(node)
90
+ if hash_node(node) && first_argument_unparenthesized?(node)
94
91
  # `some_method {}` is not same as `some_method Hash.new`
95
92
  # because the braces are interpreted as a block. We will have
96
93
  # to rewrite the arguments to wrap them in parenthesis.
97
94
  args = node.parent.arguments
98
95
 
99
- range_between(args[0].source_range.begin_pos - 1,
100
- args[-1].source_range.end_pos)
96
+ range_between(args[0].source_range.begin_pos - 1, args[-1].source_range.end_pos)
101
97
  else
102
98
  node.source_range
103
99
  end
@@ -129,6 +125,13 @@ module RuboCop
129
125
  end
130
126
  end
131
127
  end
128
+
129
+ def frozen_strings?
130
+ return true if frozen_string_literals_enabled?
131
+
132
+ frozen_string_cop_enabled = config.for_cop('Style/FrozenStringLiteral')['Enabled']
133
+ frozen_string_cop_enabled && !frozen_string_literals_disabled?
134
+ end
132
135
  end
133
136
  end
134
137
  end
@@ -45,16 +45,13 @@ module RuboCop
45
45
  extend AutoCorrector
46
46
 
47
47
  MSG_COMPACT = 'Put empty method definitions on a single line.'
48
- MSG_EXPANDED = 'Put the `end` of empty method definitions on the ' \
49
- 'next line.'
48
+ MSG_EXPANDED = 'Put the `end` of empty method definitions on the next line.'
50
49
 
51
50
  def on_def(node)
52
51
  return if node.body || comment_lines?(node)
53
52
  return if correct_style?(node)
54
53
 
55
- add_offense(node) do |corrector|
56
- corrector.replace(node, corrected(node))
57
- end
54
+ add_offense(node) { |corrector| corrector.replace(node, corrected(node)) }
58
55
  end
59
56
  alias on_defs on_def
60
57
 
@@ -65,8 +62,7 @@ module RuboCop
65
62
  end
66
63
 
67
64
  def correct_style?(node)
68
- compact_style? && compact?(node) ||
69
- expanded_style? && expanded?(node)
65
+ compact_style? && compact?(node) || expanded_style? && expanded?(node)
70
66
  end
71
67
 
72
68
  def corrected(node)
@@ -15,8 +15,7 @@ module RuboCop
15
15
  class EndBlock < Base
16
16
  extend AutoCorrector
17
17
 
18
- MSG = 'Avoid the use of `END` blocks. ' \
19
- 'Use `Kernel#at_exit` instead.'
18
+ MSG = 'Avoid the use of `END` blocks. Use `Kernel#at_exit` instead.'
20
19
 
21
20
  def on_postexe(node)
22
21
  add_offense(node.loc.keyword) do |corrector|
@@ -79,9 +79,7 @@ module RuboCop
79
79
  def handle_disallow_style(node)
80
80
  return unless node.endless?
81
81
 
82
- add_offense(node) do |corrector|
83
- correct_to_multiline(corrector, node)
84
- end
82
+ add_offense(node) { |corrector| correct_to_multiline(corrector, node) }
85
83
  end
86
84
 
87
85
  def correct_to_multiline(corrector, node)
@@ -112,13 +112,11 @@ module RuboCop
112
112
  end
113
113
 
114
114
  def special_file_keyword?(node)
115
- node.str_type? &&
116
- node.source == '__FILE__'
115
+ node.str_type? && node.source == '__FILE__'
117
116
  end
118
117
 
119
118
  def special_line_keyword?(node)
120
- node.int_type? &&
121
- node.source == '__LINE__'
119
+ node.int_type? && node.source == '__LINE__'
122
120
  end
123
121
 
124
122
  def file_and_line(node)
@@ -85,9 +85,7 @@ module RuboCop
85
85
  elsif (default_dir = pathname_parent_expand_path(node))
86
86
  return unless unrecommended_argument?(default_dir)
87
87
 
88
- add_offense(node, message: PATHNAME_MSG) do |corrector|
89
- autocorrect(corrector, node)
90
- end
88
+ add_offense(node, message: PATHNAME_MSG) { |corrector| autocorrect(corrector, node) }
91
89
  elsif (default_dir = pathname_new_parent_expand_path(node))
92
90
  return unless unrecommended_argument?(default_dir)
93
91
 
@@ -106,10 +106,7 @@ module RuboCop
106
106
  end
107
107
 
108
108
  def block_body_range(block_node, send_node)
109
- range_between(
110
- send_node.loc.expression.end_pos,
111
- block_node.loc.end.end_pos
112
- )
109
+ range_between(send_node.loc.expression.end_pos, block_node.loc.end.end_pos)
113
110
  end
114
111
  end
115
112
  end
@@ -146,10 +146,7 @@ module RuboCop
146
146
  next if seq.percent?
147
147
 
148
148
  detected_style = seq.style
149
- token = contents.begin.adjust(
150
- begin_pos: seq.begin_pos,
151
- end_pos: seq.end_pos
152
- )
149
+ token = contents.begin.adjust(begin_pos: seq.begin_pos, end_pos: seq.end_pos)
153
150
 
154
151
  yield(detected_style, token)
155
152
  end
@@ -10,9 +10,6 @@ module RuboCop
10
10
  # default in future Ruby. The comment will be added below a shebang and
11
11
  # encoding comment.
12
12
  #
13
- # Note that the cop will ignore files where the comment exists but is set
14
- # to `false` instead of `true`.
15
- #
16
13
  # @example EnforcedStyle: always (default)
17
14
  # # The `always` style will always add the frozen string literal comment
18
15
  # # to a file, regardless of the Ruby version or if `freeze` or `<<` are
@@ -79,8 +76,7 @@ module RuboCop
79
76
  include RangeHelp
80
77
  extend AutoCorrector
81
78
 
82
- MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: '\
83
- 'true`.'
79
+ MSG_MISSING_TRUE = 'Missing magic comment `# frozen_string_literal: true`.'
84
80
  MSG_MISSING = 'Missing frozen string literal comment.'
85
81
  MSG_UNNECESSARY = 'Unnecessary frozen string literal comment.'
86
82
  MSG_DISABLED = 'Frozen string literal comment must be set to `true`.'
@@ -146,17 +142,13 @@ module RuboCop
146
142
  def missing_offense(processed_source)
147
143
  range = source_range(processed_source.buffer, 0, 0)
148
144
 
149
- add_offense(range, message: MSG_MISSING) do |corrector|
150
- insert_comment(corrector)
151
- end
145
+ add_offense(range, message: MSG_MISSING) { |corrector| insert_comment(corrector) }
152
146
  end
153
147
 
154
148
  def missing_true_offense(processed_source)
155
149
  range = source_range(processed_source.buffer, 0, 0)
156
150
 
157
- add_offense(range, message: MSG_MISSING_TRUE) do |corrector|
158
- insert_comment(corrector)
159
- end
151
+ add_offense(range, message: MSG_MISSING_TRUE) { |corrector| insert_comment(corrector) }
160
152
  end
161
153
 
162
154
  def unnecessary_comment_offense(processed_source)
@@ -99,12 +99,9 @@ module RuboCop
99
99
 
100
100
  def register_offense(node, scope_exiting_keyword, conditional_keyword)
101
101
  condition, = node.node_parts
102
- example = [scope_exiting_keyword,
103
- conditional_keyword,
104
- condition.source].join(' ')
102
+ example = [scope_exiting_keyword, conditional_keyword, condition.source].join(' ')
105
103
  if too_long_for_single_line?(node, example)
106
- example = "#{conditional_keyword} #{condition.source}; " \
107
- "#{scope_exiting_keyword}; end"
104
+ example = "#{conditional_keyword} #{condition.source}; #{scope_exiting_keyword}; end"
108
105
  end
109
106
 
110
107
  add_offense(node.loc.keyword, message: format(MSG, example: example))
@@ -126,8 +123,7 @@ module RuboCop
126
123
  end
127
124
 
128
125
  def accepted_form?(node, ending: false)
129
- accepted_if?(node, ending) || node.condition.multiline? ||
130
- node.parent&.assignment?
126
+ accepted_if?(node, ending) || node.condition.multiline? || node.parent&.assignment?
131
127
  end
132
128
 
133
129
  def accepted_if?(node, ending)
@@ -61,11 +61,11 @@ module RuboCop
61
61
  def single_argument(node)
62
62
  first_argument = node.first_argument
63
63
  if first_argument.hash_type?
64
- add_offense(node, message: MSG_LITERAL_HASH_ARG) do |corrector|
65
- corrector.replace(node, "{#{first_argument.source}}")
66
- end
64
+ register_offense_for_hash(node, first_argument)
67
65
  elsif first_argument.splat_type?
68
66
  add_offense(node, message: MSG_SPLAT) unless allowed_splat_argument?
67
+ elsif use_zip_method_without_argument?(first_argument)
68
+ register_offense_for_zip_method(node, first_argument)
69
69
  else
70
70
  add_offense(node, message: MSG_TO_H) do |corrector|
71
71
  replacement = first_argument.source
@@ -75,6 +75,31 @@ module RuboCop
75
75
  end
76
76
  end
77
77
 
78
+ def use_zip_method_without_argument?(first_argument)
79
+ return false unless first_argument&.send_type?
80
+
81
+ first_argument.method?(:zip) && first_argument.arguments.empty?
82
+ end
83
+
84
+ def register_offense_for_hash(node, hash_argument)
85
+ add_offense(node, message: MSG_LITERAL_HASH_ARG) do |corrector|
86
+ corrector.replace(node, "{#{hash_argument.source}}")
87
+
88
+ parent = node.parent
89
+ add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
90
+ end
91
+ end
92
+
93
+ def register_offense_for_zip_method(node, zip_method)
94
+ add_offense(node, message: MSG_TO_H) do |corrector|
95
+ if zip_method.parenthesized?
96
+ corrector.insert_before(zip_method.loc.end, '[]')
97
+ else
98
+ corrector.insert_after(zip_method, '([])')
99
+ end
100
+ end
101
+ end
102
+
78
103
  def requires_parens?(node)
79
104
  node.call_type? && node.arguments.any? && !node.parenthesized?
80
105
  end
@@ -85,6 +110,9 @@ module RuboCop
85
110
  else
86
111
  add_offense(node, message: MSG_LITERAL_MULTI_ARG) do |corrector|
87
112
  corrector.replace(node, args_to_hash(node.arguments))
113
+
114
+ parent = node.parent
115
+ add_parentheses(parent, corrector) if parent&.send_type? && !parent.parenthesized?
88
116
  end
89
117
  end
90
118
  end