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
@@ -57,9 +57,7 @@ module RuboCop
57
57
  private
58
58
 
59
59
  def message(length, max_length)
60
- format('Class has too many lines. [%<length>d/%<max>d]',
61
- length: length,
62
- max: max_length)
60
+ format('Class has too many lines. [%<length>d/%<max>d]', length: length, max: max_length)
63
61
  end
64
62
  end
65
63
  end
@@ -33,8 +33,7 @@ module RuboCop
33
33
  include MethodComplexity
34
34
  include Utils::IteratingBlock
35
35
 
36
- MSG = 'Cyclomatic complexity for %<method>s is too high. ' \
37
- '[%<complexity>d/%<max>d]'
36
+ MSG = 'Cyclomatic complexity for %<method>s is too high. [%<complexity>d/%<max>d]'
38
37
  COUNTED_NODES = %i[if while until for csend block block_pass
39
38
  rescue when and or or_asgn and_asgn].freeze
40
39
 
@@ -37,21 +37,18 @@ module RuboCop
37
37
  end
38
38
 
39
39
  def on_casgn(node)
40
- module_definition?(node) do
41
- check_code_length(node)
42
- end
40
+ module_definition?(node) { check_code_length(node) }
43
41
  end
44
42
 
45
43
  private
46
44
 
45
+ # @!method module_definition?(node)
47
46
  def_node_matcher :module_definition?, <<~PATTERN
48
47
  (casgn nil? _ (block (send (const {nil? cbase} :Module) :new) ...))
49
48
  PATTERN
50
49
 
51
50
  def message(length, max_length)
52
- format('Module has too many lines. [%<length>d/%<max>d]',
53
- length: length,
54
- max: max_length)
51
+ format('Module has too many lines. [%<length>d/%<max>d]', length: length, max: max_length)
55
52
  end
56
53
  end
57
54
  end
@@ -54,8 +54,7 @@ module RuboCop
54
54
  exclude_limit 'Max'
55
55
  exclude_limit 'MaxOptionalParameters'
56
56
 
57
- MSG = 'Avoid parameter lists longer than %<max>d parameters. ' \
58
- '[%<count>d/%<max>d]'
57
+ MSG = 'Avoid parameter lists longer than %<max>d parameters. [%<count>d/%<max>d]'
59
58
  OPTIONAL_PARAMETERS_MSG = 'Method has too many optional parameters. [%<count>d/%<max>d]'
60
59
 
61
60
  NAMED_KEYWORD_TYPES = %i[kwoptarg kwarg].freeze
@@ -71,9 +70,7 @@ module RuboCop
71
70
  count: optargs.count
72
71
  )
73
72
 
74
- add_offense(node, message: message) do
75
- self.max_optional_parameters = optargs.count
76
- end
73
+ add_offense(node, message: message) { self.max_optional_parameters = optargs.count }
77
74
  end
78
75
  alias on_defs on_def
79
76
 
@@ -90,6 +87,7 @@ module RuboCop
90
87
 
91
88
  private
92
89
 
90
+ # @!method argument_to_lambda_or_proc?(node)
93
91
  def_node_matcher :argument_to_lambda_or_proc?, <<~PATTERN
94
92
  ^lambda_or_proc?
95
93
  PATTERN
@@ -27,8 +27,7 @@ module RuboCop
27
27
  # end # ===
28
28
  # end # 7 complexity points
29
29
  class PerceivedComplexity < CyclomaticComplexity
30
- MSG = 'Perceived complexity for %<method>s is too high. ' \
31
- '[%<complexity>d/%<max>d]'
30
+ MSG = 'Perceived complexity for %<method>s is too high. [%<complexity>d/%<max>d]'
32
31
 
33
32
  COUNTED_NODES = (CyclomaticComplexity::COUNTED_NODES - [:when] + [:case]).freeze
34
33
 
@@ -43,9 +43,7 @@ module RuboCop
43
43
  end
44
44
 
45
45
  def calculate
46
- visit_depth_last(@node) do |child|
47
- calculate_node(child)
48
- end
46
+ visit_depth_last(@node) { |child| calculate_node(child) }
49
47
 
50
48
  [
51
49
  Math.sqrt(@assignment**2 + @branch**2 + @condition**2).round(2),
@@ -68,9 +66,7 @@ module RuboCop
68
66
  end
69
67
 
70
68
  def else_branch?(node)
71
- %i[case if].include?(node.type) &&
72
- node.else? &&
73
- node.loc.else.is?('else')
69
+ %i[case if].include?(node.type) && node.else? && node.loc.else.is?('else')
74
70
  end
75
71
 
76
72
  private
@@ -125,7 +121,8 @@ module RuboCop
125
121
  end
126
122
 
127
123
  def capturing_variable?(name)
128
- name && !/^_/.match?(name)
124
+ # TODO: Remove `Symbol#to_s` after supporting only Ruby >= 2.7.
125
+ name && !name.to_s.start_with?('_')
129
126
  end
130
127
 
131
128
  def branch?(node)
@@ -26,10 +26,12 @@ module RuboCop
26
26
  return length if @foldable_types.empty?
27
27
 
28
28
  each_top_level_descendant(@node, @foldable_types) do |descendant|
29
- if foldable_node?(descendant)
30
- descendant_length = code_length(descendant)
31
- length = length - descendant_length + 1
32
- end
29
+ next unless foldable_node?(descendant)
30
+
31
+ descendant_length = code_length(descendant)
32
+ length = length - descendant_length + 1
33
+ # Subtract 2 length of opening and closing brace if method argument omits hash braces.
34
+ length -= 2 if descendant.hash_type? && !descendant.braces?
33
35
  end
34
36
 
35
37
  length
@@ -32,10 +32,7 @@ module RuboCop
32
32
  return unless discount_repeated_attributes
33
33
 
34
34
  self_attributes = {} # Share hash for `(send nil? :foo)` and `(send (self) :foo)`
35
- @known_attributes = {
36
- s(:self) => self_attributes,
37
- nil => self_attributes
38
- }
35
+ @known_attributes = { s(:self) => self_attributes, nil => self_attributes }
39
36
  # example after running `obj = foo.bar; obj.baz.qux`
40
37
  # { nil => {foo: {bar: {}}},
41
38
  # s(self) => same hash ^,
@@ -60,6 +57,7 @@ module RuboCop
60
57
 
61
58
  private
62
59
 
60
+ # @!method attribute_call?(node)
63
61
  def_node_matcher :attribute_call?, <<~PATTERN
64
62
  ( {csend send} _receiver _method # and no parameters
65
63
  )
@@ -90,6 +88,7 @@ module RuboCop
90
88
  end
91
89
  end
92
90
 
91
+ # @!method root_node?(node)
93
92
  def_node_matcher :root_node?, <<~PATTERN
94
93
  { nil? | self # e.g. receiver of `my_method` or `self.my_attr`
95
94
  | lvar | ivar | cvar | gvar # e.g. receiver of `var.my_method`
@@ -112,9 +111,7 @@ module RuboCop
112
111
  return yield nil
113
112
  end
114
113
 
115
- calls.fetch(value) do
116
- yield [calls, value]
117
- end
114
+ calls.fetch(value) { yield [calls, value] }
118
115
  end
119
116
 
120
117
  VAR_SETTER_TO_GETTER = {
@@ -11,8 +11,7 @@ module RuboCop
11
11
 
12
12
  MSG = 'Department name is missing.'
13
13
 
14
- DISABLE_COMMENT_FORMAT =
15
- /\A(# *rubocop *: *((dis|en)able|todo) +)(.*)/.freeze
14
+ DISABLE_COMMENT_FORMAT = /\A(# *rubocop *: *((dis|en)able|todo) +)(.*)/.freeze
16
15
 
17
16
  # The token that makes up a disable comment.
18
17
  # The allowed specification for comments after `# rubocop: disable` is
@@ -62,8 +61,7 @@ module RuboCop
62
61
  end
63
62
 
64
63
  def valid_content_token?(content_token)
65
- /\W+/.match?(content_token) ||
66
- DISABLING_COPS_CONTENT_TOKEN.match?(content_token)
64
+ /\W+/.match?(content_token) || DISABLING_COPS_CONTENT_TOKEN.match?(content_token)
67
65
  end
68
66
 
69
67
  def contain_unexpected_character_for_department_name?(name)
@@ -73,9 +71,7 @@ module RuboCop
73
71
  def qualified_legacy_cop_name(cop_name)
74
72
  legacy_cop_names = RuboCop::ConfigObsoletion.legacy_cop_names
75
73
 
76
- legacy_cop_names.detect do |legacy_cop_name|
77
- legacy_cop_name.split('/')[1] == cop_name
78
- end
74
+ legacy_cop_names.detect { |legacy_cop_name| legacy_cop_name.split('/')[1] == cop_name }
79
75
  end
80
76
  end
81
77
  end
@@ -12,8 +12,7 @@ module RuboCop
12
12
  attr_reader :column_delta
13
13
 
14
14
  def configured_indentation_width
15
- cop_config['IndentationWidth'] ||
16
- config.for_cop('Layout/IndentationWidth')['Width']
15
+ cop_config['IndentationWidth'] || config.for_cop('Layout/IndentationWidth')['Width']
17
16
  end
18
17
 
19
18
  def indentation(node)
@@ -29,15 +28,15 @@ module RuboCop
29
28
 
30
29
  each_bad_alignment(items, base_column) do |current|
31
30
  expr = current.source_range
32
- if offenses.any? { |o| within?(expr, o.location) }
31
+ if @current_offenses.any? { |o| within?(expr, o.location) }
33
32
  # If this offense is within a line range that is already being
34
33
  # realigned by autocorrect, we report the offense without
35
34
  # autocorrecting it. Two rewrites in the same area by the same
36
35
  # cop cannot be handled. The next iteration will find the
37
36
  # offense again and correct it.
38
- add_offense(nil, location: expr)
37
+ register_offense(expr, nil)
39
38
  else
40
- add_offense(current)
39
+ register_offense(current, current)
41
40
  end
42
41
  end
43
42
  end
@@ -46,8 +45,7 @@ module RuboCop
46
45
  def each_bad_alignment(items, base_column)
47
46
  prev_line = -1
48
47
  items.each do |current|
49
- if current.loc.line > prev_line &&
50
- begins_its_line?(current.source_range)
48
+ if current.loc.line > prev_line && begins_its_line?(current.source_range)
51
49
  @column_delta = base_column - display_column(current.source_range)
52
50
 
53
51
  yield current if @column_delta.nonzero?
@@ -71,6 +69,13 @@ module RuboCop
71
69
  def end_of_line_comment(line)
72
70
  processed_source.line_with_comment?(line)
73
71
  end
72
+
73
+ # @api private
74
+ def register_offense(offense_node, message_node)
75
+ add_offense(offense_node, message: message(message_node)) do |corrector|
76
+ autocorrect(corrector, message_node)
77
+ end
78
+ end
74
79
  end
75
80
  end
76
81
  end
@@ -83,7 +83,7 @@ module RuboCop
83
83
 
84
84
  # @api private
85
85
  def within_column_limit?(element, max, line)
86
- element && element.loc.column < max && element.loc.line == line
86
+ element && element.loc.column <= max && element.loc.line == line
87
87
  end
88
88
 
89
89
  # @api private
@@ -38,9 +38,7 @@ module RuboCop
38
38
 
39
39
  location = node.casgn_type? ? node.loc.name : node.loc.expression
40
40
 
41
- add_offense(location, message: message(length, max_length)) do
42
- self.max = length
43
- end
41
+ add_offense(location, message: message(length, max_length)) { self.max = length }
44
42
  end
45
43
 
46
44
  # Returns true for lines that shall not be included in the count.
@@ -23,7 +23,11 @@ module RuboCop
23
23
  def begin_pos_with_comment(node)
24
24
  first_comment = processed_source.ast_with_comments[node].first
25
25
 
26
- start_line_position(first_comment || node)
26
+ if first_comment && (first_comment.loc.line < node.loc.line)
27
+ start_line_position(first_comment)
28
+ else
29
+ start_line_position(node)
30
+ end
27
31
  end
28
32
 
29
33
  def start_line_position(node)
@@ -75,9 +75,9 @@ module RuboCop
75
75
 
76
76
  def alternative_style
77
77
  if supported_styles.size != 2
78
- raise 'alternative_style can only be used when there are exactly ' \
79
- '2 SupportedStyles'
78
+ raise 'alternative_style can only be used when there are exactly 2 SupportedStyles'
80
79
  end
80
+
81
81
  alternative_styles.first
82
82
  end
83
83
 
@@ -10,9 +10,7 @@ module RuboCop
10
10
  if valid_name?(node, name)
11
11
  correct_style_detected
12
12
  else
13
- add_offense(name_range, message: message(style)) do
14
- report_opposing_styles(node, name)
15
- end
13
+ add_offense(name_range, message: message(style)) { report_opposing_styles(node, name) }
16
14
  end
17
15
  end
18
16
 
@@ -23,8 +21,7 @@ module RuboCop
23
21
  end
24
22
 
25
23
  def valid_name?(node, name, given_style = style)
26
- name.match?(self.class::FORMATS.fetch(given_style)) ||
27
- class_emitter_method?(node, name)
24
+ name.match?(self.class::FORMATS.fetch(given_style)) || class_emitter_method?(node, name)
28
25
  end
29
26
 
30
27
  # A class emitter method is a singleton method in a class/module, where
@@ -36,9 +33,7 @@ module RuboCop
36
33
  # `def self.extended`, etc.
37
34
  node = node.parent while node.parent.defs_type?
38
35
 
39
- node.parent.each_child_node(:class).any? do |c|
40
- c.loc.name.is?(name.to_s)
41
- end
36
+ node.parent.each_child_node(:class).any? { |c| c.loc.name.is?(name.to_s) }
42
37
  end
43
38
  end
44
39
  end
@@ -11,20 +11,18 @@ module RuboCop
11
11
  private
12
12
 
13
13
  def non_public?(node)
14
- non_public_modifier?(node.parent) ||
15
- preceding_non_public_modifier?(node)
14
+ non_public_modifier?(node.parent) || preceding_non_public_modifier?(node)
16
15
  end
17
16
 
18
17
  def preceding_non_public_modifier?(node)
19
- stripped_source_upto(node.first_line).any? do |line|
20
- NON_PUBLIC_MODIFIERS.include?(line)
21
- end
18
+ stripped_source_upto(node.first_line).any? { |line| NON_PUBLIC_MODIFIERS.include?(line) }
22
19
  end
23
20
 
24
21
  def stripped_source_upto(index)
25
22
  processed_source[0..index].map(&:strip)
26
23
  end
27
24
 
25
+ # @!method non_public_modifier?(node)
28
26
  def_node_matcher :non_public_modifier?, <<~PATTERN
29
27
  (send nil? {:private :protected} ({def defs} ...))
30
28
  PATTERN
@@ -24,8 +24,7 @@ module RuboCop
24
24
  # The args node1 & node2 may represent a RuboCop::AST::Node
25
25
  # or a Parser::Source::Comment. Both respond to #loc.
26
26
  def preceding_comment?(node1, node2)
27
- node1 && node2 && precede?(node2, node1) &&
28
- comment_line?(node2.loc.expression.source)
27
+ node1 && node2 && precede?(node2, node1) && comment_line?(node2.loc.expression.source)
29
28
  end
30
29
 
31
30
  # The args node1 & node2 may represent a RuboCop::AST::Node
@@ -35,9 +34,7 @@ module RuboCop
35
34
  end
36
35
 
37
36
  def preceding_lines(node)
38
- processed_source.ast_with_comments[node].select do |line|
39
- line.loc.line < node.loc.line
40
- end
37
+ processed_source.ast_with_comments[node].select { |line| line.loc.line < node.loc.line }
41
38
  end
42
39
 
43
40
  def interpreter_directive_comment?(comment)
@@ -45,7 +42,7 @@ module RuboCop
45
42
  end
46
43
 
47
44
  def rubocop_directive_comment?(comment)
48
- CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
45
+ !!DirectiveComment.new(comment).match_captures
49
46
  end
50
47
  end
51
48
  end
@@ -10,15 +10,16 @@ module RuboCop
10
10
  include ConfigurableEnforcedStyle
11
11
  include RangeHelp
12
12
 
13
- MSG_EXTRA = 'Extra empty line detected at %<kind>s body ' \
14
- '%<location>s.'
13
+ MSG_EXTRA = 'Extra empty line detected at %<kind>s body %<location>s.'
15
14
  MSG_MISSING = 'Empty line missing at %<kind>s body %<location>s.'
16
- MSG_DEFERRED = 'Empty line missing before first %<type>s ' \
17
- 'definition'
15
+ MSG_DEFERRED = 'Empty line missing before first %<type>s definition'
18
16
 
19
17
  private
20
18
 
19
+ # @!method constant_definition?(node)
21
20
  def_node_matcher :constant_definition?, '{class module}'
21
+
22
+ # @!method empty_line_required?(node)
22
23
  def_node_matcher :empty_line_required?,
23
24
  '{def defs class module (send nil? {:private :protected :public})}'
24
25
 
@@ -90,9 +91,7 @@ module RuboCop
90
91
  when :no_empty_lines
91
92
  check_line(style, line_no, message(MSG_EXTRA, desc), &:empty?)
92
93
  when :empty_lines
93
- check_line(style, line_no, message(MSG_MISSING, desc)) do |line|
94
- !line.empty?
95
- end
94
+ check_line(style, line_no, message(MSG_MISSING, desc)) { |line| !line.empty? }
96
95
  end
97
96
  end
98
97
 
@@ -8,6 +8,7 @@ module RuboCop
8
8
 
9
9
  private
10
10
 
11
+ # @!method empty_arguments?(node)
11
12
  def_node_matcher :empty_arguments?, <<~PATTERN
12
13
  (block _ $(args) _)
13
14
  PATTERN
@@ -16,9 +17,7 @@ module RuboCop
16
17
  empty_arguments?(node) do |args|
17
18
  return if args.empty_and_without_delimiters?
18
19
 
19
- add_offense(args) do |corrector|
20
- autocorrect(corrector, args)
21
- end
20
+ add_offense(args) { |corrector| autocorrect(corrector, args) }
22
21
  end
23
22
  end
24
23
  end