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
@@ -68,8 +68,9 @@ module RuboCop
68
68
  # )
69
69
  #
70
70
  #
71
- class ClosingParenthesisIndentation < Cop
71
+ class ClosingParenthesisIndentation < Base
72
72
  include Alignment
73
+ extend AutoCorrector
73
74
 
74
75
  MSG_INDENT = 'Indent `)` to column %<expected>d (not %<actual>d)'
75
76
 
@@ -89,12 +90,12 @@ module RuboCop
89
90
  end
90
91
  alias on_defs on_def
91
92
 
92
- def autocorrect(node)
93
- AlignmentCorrector.correct(processed_source, node, @column_delta)
94
- end
95
-
96
93
  private
97
94
 
95
+ def autocorrect(corrector, node)
96
+ AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
97
+ end
98
+
98
99
  def check(node, elements)
99
100
  if elements.empty?
100
101
  check_for_no_elements(node)
@@ -115,11 +116,10 @@ module RuboCop
115
116
 
116
117
  return if @column_delta.zero?
117
118
 
118
- add_offense(right_paren,
119
- location: right_paren,
120
- message: message(correct_column,
121
- left_paren,
122
- right_paren))
119
+ message = message(correct_column, left_paren, right_paren)
120
+ add_offense(right_paren, message: message) do |corrector|
121
+ autocorrect(corrector, right_paren)
122
+ end
123
123
  end
124
124
 
125
125
  def check_for_no_elements(node)
@@ -135,17 +135,15 @@ module RuboCop
135
135
  # select the first one of candidates to determine a specification.
136
136
  correct_column = candidates.first
137
137
  @column_delta = correct_column - right_paren.column
138
- add_offense(right_paren,
139
- location: right_paren,
140
- message: message(correct_column,
141
- left_paren,
142
- right_paren))
138
+ message = message(correct_column, left_paren, right_paren)
139
+ add_offense(right_paren, message: message) do |corrector|
140
+ autocorrect(corrector, right_paren)
141
+ end
143
142
  end
144
143
 
145
144
  def expected_column(left_paren, elements)
146
145
  if line_break_after_left_paren?(left_paren, elements)
147
- source_indent = processed_source
148
- .line_indentation(first_argument_line(elements))
146
+ source_indent = processed_source.line_indentation(first_argument_line(elements))
149
147
  new_indent = source_indent - indentation_width
150
148
 
151
149
  new_indent.negative? ? 0 : new_indent
@@ -157,17 +155,11 @@ module RuboCop
157
155
  end
158
156
 
159
157
  def all_elements_aligned?(elements)
160
- elements
161
- .map { |e| e.loc.column }
162
- .uniq
163
- .count == 1
158
+ elements.map { |e| e.loc.column }.uniq.count == 1
164
159
  end
165
160
 
166
161
  def first_argument_line(elements)
167
- elements
168
- .first
169
- .loc
170
- .first_line
162
+ elements.first.loc.first_line
171
163
  end
172
164
 
173
165
  def correct_column_candidates(node, left_paren)
@@ -182,11 +174,7 @@ module RuboCop
182
174
  if correct_column == left_paren.column
183
175
  MSG_ALIGN
184
176
  else
185
- format(
186
- MSG_INDENT,
187
- expected: correct_column,
188
- actual: right_paren.column
189
- )
177
+ format(MSG_INDENT, expected: correct_column, actual: right_paren.column)
190
178
  end
191
179
  end
192
180
 
@@ -32,29 +32,30 @@ module RuboCop
32
32
  # true
33
33
  # end
34
34
  #
35
- class CommentIndentation < Cop
35
+ class CommentIndentation < Base
36
36
  include Alignment
37
+ extend AutoCorrector
37
38
 
38
39
  MSG = 'Incorrect indentation detected (column %<column>d ' \
39
40
  'instead of %<correct_comment_indentation>d).'
40
41
 
41
- def investigate(processed_source)
42
+ def on_new_investigation
42
43
  processed_source.comments.each { |comment| check(comment) }
43
44
  end
44
45
 
45
- def autocorrect(comment)
46
- corrections = autocorrect_preceding_comments(comment) <<
47
- autocorrect_one(comment)
48
- ->(corrector) { corrections.each { |corr| corr.call(corrector) } }
49
- end
50
-
51
46
  private
52
47
 
48
+ def autocorrect(corrector, comment)
49
+ autocorrect_preceding_comments(corrector, comment)
50
+
51
+ autocorrect_one(corrector, comment)
52
+ end
53
+
53
54
  # Corrects all comment lines that occur immediately before the given
54
55
  # comment and have the same indentation. This is to avoid a long chain
55
56
  # of correcting, saving the file, parsing and inspecting again, and
56
57
  # then correcting one more line, and so on.
57
- def autocorrect_preceding_comments(comment)
58
+ def autocorrect_preceding_comments(corrector, comment)
58
59
  comments = processed_source.comments
59
60
  index = comments.index(comment)
60
61
 
@@ -62,7 +63,7 @@ module RuboCop
62
63
  .reverse_each
63
64
  .each_cons(2)
64
65
  .take_while { |below, above| should_correct?(above, below) }
65
- .map { |_, above| autocorrect_one(above) }
66
+ .map { |_, above| autocorrect_one(corrector, above) }
66
67
  end
67
68
 
68
69
  def should_correct?(preceding_comment, reference_comment)
@@ -71,8 +72,8 @@ module RuboCop
71
72
  loc.line == ref_loc.line - 1 && loc.column == ref_loc.column
72
73
  end
73
74
 
74
- def autocorrect_one(comment)
75
- AlignmentCorrector.correct(processed_source, comment, @column_delta)
75
+ def autocorrect_one(corrector, comment)
76
+ AlignmentCorrector.correct(corrector, processed_source, comment, @column_delta)
76
77
  end
77
78
 
78
79
  def check(comment)
@@ -93,18 +94,13 @@ module RuboCop
93
94
  return if column == correct_comment_indentation
94
95
  end
95
96
 
96
- add_offense(
97
- comment,
98
- message: message(column, correct_comment_indentation)
99
- )
97
+ add_offense(comment, message: message(column, correct_comment_indentation)) do |corrector|
98
+ autocorrect(corrector, comment)
99
+ end
100
100
  end
101
101
 
102
102
  def message(column, correct_comment_indentation)
103
- format(
104
- MSG,
105
- column: column,
106
- correct_comment_indentation: correct_comment_indentation
107
- )
103
+ format(MSG, column: column, correct_comment_indentation: correct_comment_indentation)
108
104
  end
109
105
 
110
106
  def own_line_comment?(comment)
@@ -51,12 +51,8 @@ module RuboCop
51
51
  method_def = node.each_descendant(:def, :defs).first
52
52
  expr = node.source_range
53
53
 
54
- line_start = range_between(expr.begin_pos,
55
- method_def.loc.keyword.end_pos)
56
- align_with = {
57
- def: method_def.loc.keyword,
58
- start_of_line: line_start
59
- }
54
+ line_start = range_between(expr.begin_pos, method_def.loc.keyword.end_pos)
55
+ align_with = { def: method_def.loc.keyword, start_of_line: line_start }
60
56
 
61
57
  check_end_kw_alignment(method_def, align_with)
62
58
  ignore_node(method_def) # Don't check the same `end` again.
@@ -35,9 +35,7 @@ module RuboCop
35
35
  dot = node.loc.dot
36
36
  message = message(dot)
37
37
 
38
- add_offense(dot, message: message) do |corrector|
39
- autocorrect(corrector, dot, node)
40
- end
38
+ add_offense(dot, message: message) { |corrector| autocorrect(corrector, dot, node) }
41
39
  end
42
40
  alias on_csend on_send
43
41
 
@@ -29,10 +29,11 @@ module RuboCop
29
29
  # else
30
30
  # code
31
31
  # end
32
- class ElseAlignment < Cop
32
+ class ElseAlignment < Base
33
33
  include EndKeywordAlignment
34
34
  include Alignment
35
35
  include CheckAssignment
36
+ extend AutoCorrector
36
37
 
37
38
  MSG = 'Align `%<else_range>s` with `%<base_range>s`.'
38
39
 
@@ -62,17 +63,15 @@ module RuboCop
62
63
  def on_case_match(node)
63
64
  return unless node.else?
64
65
 
65
- check_alignment(
66
- node.in_pattern_branches.last.loc.keyword, node.loc.else
67
- )
68
- end
69
-
70
- def autocorrect(node)
71
- AlignmentCorrector.correct(processed_source, node, column_delta)
66
+ check_alignment(node.in_pattern_branches.last.loc.keyword, node.loc.else)
72
67
  end
73
68
 
74
69
  private
75
70
 
71
+ def autocorrect(corrector, node)
72
+ AlignmentCorrector.correct(corrector, processed_source, node, column_delta)
73
+ end
74
+
76
75
  def check_nested(node, base)
77
76
  on_if(node, base)
78
77
  ignore_node(node)
@@ -140,7 +139,9 @@ module RuboCop
140
139
  else_range: else_range.source,
141
140
  base_range: base_range.source[/^\S*/]
142
141
  )
143
- add_offense(else_range, location: else_range, message: message)
142
+ add_offense(else_range, message: message) do |corrector|
143
+ autocorrect(corrector, else_range)
144
+ end
144
145
  end
145
146
 
146
147
  def assignment_node(node)
@@ -75,9 +75,7 @@ module RuboCop
75
75
  processed_source.comments.each do |comment|
76
76
  next unless empty_comment_only?(comment_text(comment))
77
77
 
78
- add_offense(comment) do |corrector|
79
- autocorrect(corrector, comment)
80
- end
78
+ add_offense(comment) { |corrector| autocorrect(corrector, comment) }
81
79
  end
82
80
  end
83
81
  end
@@ -99,19 +97,16 @@ module RuboCop
99
97
  def autocorrect(corrector, node)
100
98
  previous_token = previous_token(node)
101
99
  range = if previous_token && node.loc.line == previous_token.line
102
- range_with_surrounding_space(range: node.loc.expression,
103
- newlines: false)
100
+ range_with_surrounding_space(range: node.loc.expression, newlines: false)
104
101
  else
105
- range_by_whole_lines(node.loc.expression,
106
- include_final_newline: true)
102
+ range_by_whole_lines(node.loc.expression, include_final_newline: true)
107
103
  end
108
104
 
109
105
  corrector.remove(range)
110
106
  end
111
107
 
112
108
  def concat_consecutive_comments(comments)
113
- consecutive_comments =
114
- comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
109
+ consecutive_comments = comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
115
110
 
116
111
  consecutive_comments.map do |chunk|
117
112
  joined_text = chunk.map { |c| comment_text(c) }.join
@@ -142,9 +137,7 @@ module RuboCop
142
137
  end
143
138
 
144
139
  def current_token(comment)
145
- processed_source.find_token do |token|
146
- token.pos == comment.loc.expression
147
- end
140
+ processed_source.find_token { |token| token.pos == comment.loc.expression }
148
141
  end
149
142
 
150
143
  def previous_token(node)
@@ -47,18 +47,15 @@ module RuboCop
47
47
 
48
48
  if node.modifier_form? && last_argument_is_heredoc?(node)
49
49
  heredoc_node = last_heredoc_argument(node)
50
-
51
- return if next_line_empty?(heredoc_line(node, heredoc_node))
50
+ return if next_line_empty_or_enable_directive_comment?(heredoc_line(node, heredoc_node))
52
51
 
53
52
  add_offense(heredoc_node.loc.heredoc_end) do |corrector|
54
53
  autocorrect(corrector, heredoc_node)
55
54
  end
56
55
  else
57
- return if next_line_empty?(node.last_line)
56
+ return if next_line_empty_or_enable_directive_comment?(node.last_line)
58
57
 
59
- add_offense(offense_location(node)) do |corrector|
60
- autocorrect(corrector, node)
61
- end
58
+ add_offense(offense_location(node)) { |corrector| autocorrect(corrector, node) }
62
59
  end
63
60
  end
64
61
 
@@ -71,6 +68,11 @@ module RuboCop
71
68
  range_by_whole_lines(node.source_range)
72
69
  end
73
70
 
71
+ next_line = node_range.last_line + 1
72
+ if next_line_enable_directive_comment?(next_line)
73
+ node_range = processed_source.comment_at_line(next_line)
74
+ end
75
+
74
76
  corrector.insert_after(node_range, "\n")
75
77
  end
76
78
 
@@ -85,10 +87,23 @@ module RuboCop
85
87
  node.if_branch&.guard_clause?
86
88
  end
87
89
 
90
+ def next_line_empty_or_enable_directive_comment?(line)
91
+ return true if next_line_empty?(line)
92
+
93
+ next_line = line + 1
94
+ next_line_enable_directive_comment?(next_line) && next_line_empty?(next_line)
95
+ end
96
+
88
97
  def next_line_empty?(line)
89
98
  processed_source[line].blank?
90
99
  end
91
100
 
101
+ def next_line_enable_directive_comment?(line)
102
+ return false unless (comment = processed_source.comment_at_line(line))
103
+
104
+ DirectiveComment.new(comment).enabled?
105
+ end
106
+
92
107
  def next_line_rescue_or_ensure?(node)
93
108
  parent = node.parent
94
109
  parent.nil? || parent.rescue_type? || parent.ensure_type?
@@ -137,8 +152,7 @@ module RuboCop
137
152
 
138
153
  def heredoc_line(node, heredoc_node)
139
154
  heredoc_body = heredoc_node.loc.heredoc_body
140
- num_of_heredoc_lines =
141
- heredoc_body.last_line - heredoc_body.first_line
155
+ num_of_heredoc_lines = heredoc_body.last_line - heredoc_body.first_line
142
156
 
143
157
  node.last_line + num_of_heredoc_lines + END_OF_HEREDOC_LINE
144
158
  end
@@ -111,8 +111,7 @@ module RuboCop
111
111
 
112
112
  return if line_count_allowed?(count)
113
113
  return if multiple_blank_lines_groups?(*nodes)
114
- return if nodes.all?(&:single_line?) &&
115
- cop_config['AllowAdjacentOneLineDefs']
114
+ return if nodes.all?(&:single_line?) && cop_config['AllowAdjacentOneLineDefs']
116
115
 
117
116
  correction_node = nodes.last
118
117
  location = correction_node.loc.keyword.join(correction_node.loc.name)
@@ -160,10 +159,7 @@ module RuboCop
160
159
  def message(node, count: nil)
161
160
  type = node_type(node)
162
161
 
163
- format(MSG,
164
- type: type,
165
- expected: expected_lines,
166
- actual: count)
162
+ format(MSG, type: type, expected: expected_lines, actual: count)
167
163
  end
168
164
 
169
165
  def expected_lines
@@ -29,9 +29,7 @@ module RuboCop
29
29
  return if processed_source.tokens.empty?
30
30
 
31
31
  lines = Set.new
32
- processed_source.each_token do |token|
33
- lines << token.line
34
- end
32
+ processed_source.each_token { |token| lines << token.line }
35
33
 
36
34
  each_extra_empty_line(lines.sort) do |range|
37
35
  add_offense(range) do |corrector|
@@ -46,8 +46,7 @@ module RuboCop
46
46
  extend AutoCorrector
47
47
 
48
48
  MSG_AFTER = 'Keep a blank line after `%<modifier>s`.'
49
- MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after ' \
50
- '`%<modifier>s`.'
49
+ MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after `%<modifier>s`.'
51
50
 
52
51
  MSG_BEFORE_FOR_ONLY_BEFORE = 'Keep a blank line before `%<modifier>s`.'
53
52
  MSG_AFTER_FOR_ONLY_BEFORE = 'Remove a blank line after `%<modifier>s`.'
@@ -73,10 +72,8 @@ module RuboCop
73
72
  end
74
73
 
75
74
  def on_sclass(node)
76
- @class_or_module_def_first_line =
77
- node.identifier.source_range.first_line
78
- @class_or_module_def_last_line =
79
- node.source_range.last_line
75
+ @class_or_module_def_first_line = node.identifier.source_range.first_line
76
+ @class_or_module_def_last_line = node.source_range.last_line
80
77
  end
81
78
 
82
79
  def on_block(node)
@@ -133,19 +130,14 @@ module RuboCop
133
130
  end
134
131
 
135
132
  def previous_line_ignoring_comments(processed_source, send_line)
136
- processed_source[0..send_line - 2].reverse.find do |line|
137
- !comment_line?(line)
138
- end
133
+ processed_source[0..send_line - 2].reverse.find { |line| !comment_line?(line) }
139
134
  end
140
135
 
141
136
  def previous_line_empty?(send_line)
142
- previous_line = previous_line_ignoring_comments(processed_source,
143
- send_line)
137
+ previous_line = previous_line_ignoring_comments(processed_source, send_line)
144
138
  return true unless previous_line
145
139
 
146
- block_start?(send_line) ||
147
- class_def?(send_line) ||
148
- previous_line.blank?
140
+ block_start?(send_line) || class_def?(send_line) || previous_line.blank?
149
141
  end
150
142
 
151
143
  def next_line_empty?(last_send_line)
@@ -155,8 +147,7 @@ module RuboCop
155
147
  end
156
148
 
157
149
  def empty_lines_around?(node)
158
- previous_line_empty?(node.first_line) &&
159
- next_line_empty?(node.last_line)
150
+ previous_line_empty?(node.first_line) && next_line_empty?(node.last_line)
160
151
  end
161
152
 
162
153
  def class_def?(line)
@@ -193,8 +184,7 @@ module RuboCop
193
184
  def message_for_around_style(node)
194
185
  send_line = node.first_line
195
186
 
196
- if block_start?(send_line) ||
197
- class_def?(send_line)
187
+ if block_start?(send_line) || class_def?(send_line)
198
188
  format(MSG_AFTER, modifier: node.loc.selector.source)
199
189
  else
200
190
  format(MSG_BEFORE_AND_AFTER, modifier: node.loc.selector.source)