rubocop 0.87.1 → 0.89.1

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 (339) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/bin/rubocop-profile +32 -0
  4. data/config/default.yml +153 -22
  5. data/lib/rubocop.rb +22 -4
  6. data/lib/rubocop/cli.rb +2 -2
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +3 -3
  8. data/lib/rubocop/cli/command/base.rb +1 -0
  9. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  10. data/lib/rubocop/cli/command/show_cops.rb +2 -2
  11. data/lib/rubocop/cli/command/version.rb +2 -2
  12. data/lib/rubocop/comment_config.rb +5 -7
  13. data/lib/rubocop/config.rb +20 -3
  14. data/lib/rubocop/config_loader.rb +22 -9
  15. data/lib/rubocop/config_loader_resolver.rb +3 -3
  16. data/lib/rubocop/config_obsoletion.rb +6 -1
  17. data/lib/rubocop/config_store.rb +4 -0
  18. data/lib/rubocop/config_validator.rb +2 -4
  19. data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
  20. data/lib/rubocop/cop/badge.rb +1 -1
  21. data/lib/rubocop/cop/base.rb +14 -6
  22. data/lib/rubocop/cop/commissioner.rb +0 -1
  23. data/lib/rubocop/cop/cop.rb +1 -1
  24. data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
  25. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
  26. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
  27. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
  28. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
  29. data/lib/rubocop/cop/force.rb +1 -0
  30. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +38 -12
  31. data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
  32. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
  33. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
  34. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
  35. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
  36. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
  37. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
  38. data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
  39. data/lib/rubocop/cop/layout/class_structure.rb +3 -7
  40. data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
  41. data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
  42. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  43. data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
  44. data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
  45. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
  46. data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
  47. data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
  48. data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
  49. data/lib/rubocop/cop/layout/multiline_block_layout.rb +16 -5
  50. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
  51. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
  52. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -2
  53. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
  54. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
  55. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
  56. data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
  57. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
  58. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  59. data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
  60. data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +50 -0
  61. data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
  62. data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
  63. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
  64. data/lib/rubocop/cop/lint/debugger.rb +7 -1
  65. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
  66. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
  67. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
  68. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
  69. data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
  70. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
  71. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
  72. data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
  73. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
  74. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  75. data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
  76. data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
  77. data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
  78. data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
  79. data/lib/rubocop/cop/lint/empty_when.rb +2 -2
  80. data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
  81. data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
  82. data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
  83. data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
  84. data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
  85. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
  86. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
  87. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
  88. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
  89. data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
  90. data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
  91. data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
  92. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
  93. data/lib/rubocop/cop/lint/loop.rb +23 -2
  94. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
  95. data/lib/rubocop/cop/lint/missing_super.rb +99 -0
  96. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
  97. data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
  98. data/lib/rubocop/cop/lint/nested_method_definition.rb +14 -20
  99. data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
  100. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
  101. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +82 -11
  102. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
  103. data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
  104. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
  105. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
  106. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
  107. data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
  108. data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
  109. data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
  110. data/lib/rubocop/cop/lint/rand_one.rb +2 -2
  111. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +16 -19
  112. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
  113. data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
  114. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
  115. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
  116. data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
  117. data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
  118. data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
  119. data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
  120. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  121. data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
  122. data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
  123. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
  124. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
  125. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
  126. data/lib/rubocop/cop/lint/script_permission.rb +10 -7
  127. data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
  128. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
  129. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
  130. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
  131. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
  132. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
  133. data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
  134. data/lib/rubocop/cop/lint/to_json.rb +4 -6
  135. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
  136. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
  137. data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
  138. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  139. data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
  140. data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
  141. data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
  142. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
  143. data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
  144. data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
  145. data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
  146. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
  147. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
  148. data/lib/rubocop/cop/lint/void.rb +3 -7
  149. data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
  150. data/lib/rubocop/cop/metrics/block_length.rb +2 -2
  151. data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
  152. data/lib/rubocop/cop/metrics/class_length.rb +2 -2
  153. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
  154. data/lib/rubocop/cop/metrics/method_length.rb +2 -2
  155. data/lib/rubocop/cop/metrics/module_length.rb +2 -2
  156. data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
  157. data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
  158. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
  159. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
  160. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
  161. data/lib/rubocop/cop/migration/department_name.rb +14 -16
  162. data/lib/rubocop/cop/mixin/alignment.rb +2 -1
  163. data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
  164. data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
  165. data/lib/rubocop/cop/mixin/code_length.rb +22 -5
  166. data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
  167. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
  168. data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
  169. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
  170. data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
  171. data/lib/rubocop/cop/mixin/range_help.rb +18 -4
  172. data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
  173. data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
  174. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
  175. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
  176. data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
  177. data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
  178. data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
  179. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
  180. data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
  181. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
  182. data/lib/rubocop/cop/naming/constant_name.rb +2 -2
  183. data/lib/rubocop/cop/naming/file_name.rb +3 -3
  184. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
  185. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
  186. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
  187. data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
  188. data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
  189. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
  190. data/lib/rubocop/cop/registry.rb +3 -3
  191. data/lib/rubocop/cop/security/eval.rb +2 -2
  192. data/lib/rubocop/cop/security/json_load.rb +6 -8
  193. data/lib/rubocop/cop/security/marshal_load.rb +2 -4
  194. data/lib/rubocop/cop/security/open.rb +2 -2
  195. data/lib/rubocop/cop/security/yaml_load.rb +6 -6
  196. data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
  197. data/lib/rubocop/cop/style/accessor_grouping.rb +29 -20
  198. data/lib/rubocop/cop/style/alias.rb +41 -36
  199. data/lib/rubocop/cop/style/and_or.rb +9 -11
  200. data/lib/rubocop/cop/style/array_coercion.rb +63 -0
  201. data/lib/rubocop/cop/style/array_join.rb +6 -8
  202. data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
  203. data/lib/rubocop/cop/style/attr.rb +11 -9
  204. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
  205. data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
  206. data/lib/rubocop/cop/style/begin_block.rb +2 -2
  207. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +14 -18
  208. data/lib/rubocop/cop/style/block_comments.rb +14 -18
  209. data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
  210. data/lib/rubocop/cop/style/case_equality.rb +22 -3
  211. data/lib/rubocop/cop/style/case_like_if.rb +220 -0
  212. data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
  213. data/lib/rubocop/cop/style/class_check.rb +7 -9
  214. data/lib/rubocop/cop/style/class_methods.rb +7 -11
  215. data/lib/rubocop/cop/style/class_vars.rb +6 -10
  216. data/lib/rubocop/cop/style/collection_methods.rb +11 -17
  217. data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
  218. data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
  219. data/lib/rubocop/cop/style/command_literal.rb +23 -24
  220. data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
  221. data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
  222. data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
  223. data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
  224. data/lib/rubocop/cop/style/copyright.rb +12 -12
  225. data/lib/rubocop/cop/style/date_time.rb +1 -1
  226. data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
  227. data/lib/rubocop/cop/style/dir.rb +7 -10
  228. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
  229. data/lib/rubocop/cop/style/documentation.rb +6 -8
  230. data/lib/rubocop/cop/style/documentation_method.rb +1 -1
  231. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
  232. data/lib/rubocop/cop/style/double_negation.rb +2 -2
  233. data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
  234. data/lib/rubocop/cop/style/each_with_object.rb +16 -19
  235. data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
  236. data/lib/rubocop/cop/style/empty_else.rb +17 -19
  237. data/lib/rubocop/cop/style/empty_literal.rb +15 -16
  238. data/lib/rubocop/cop/style/empty_method.rb +10 -13
  239. data/lib/rubocop/cop/style/encoding.rb +5 -9
  240. data/lib/rubocop/cop/style/end_block.rb +4 -6
  241. data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
  242. data/lib/rubocop/cop/style/even_odd.rb +7 -11
  243. data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
  244. data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
  245. data/lib/rubocop/cop/style/exponential_notation.rb +7 -9
  246. data/lib/rubocop/cop/style/float_division.rb +8 -11
  247. data/lib/rubocop/cop/style/for.rb +11 -15
  248. data/lib/rubocop/cop/style/format_string.rb +21 -19
  249. data/lib/rubocop/cop/style/format_string_token.rb +10 -12
  250. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
  251. data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
  252. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  253. data/lib/rubocop/cop/style/guard_clause.rb +5 -6
  254. data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
  255. data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
  256. data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
  257. data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
  258. data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
  259. data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
  260. data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
  261. data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
  262. data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
  263. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
  264. data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
  265. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
  266. data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
  267. data/lib/rubocop/cop/style/inline_comment.rb +3 -3
  268. data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
  269. data/lib/rubocop/cop/style/lambda.rb +7 -12
  270. data/lib/rubocop/cop/style/lambda_call.rb +14 -13
  271. data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
  272. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
  273. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
  274. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
  275. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
  276. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  277. data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
  278. data/lib/rubocop/cop/style/min_max.rb +8 -12
  279. data/lib/rubocop/cop/style/missing_else.rb +11 -21
  280. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
  281. data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
  282. data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
  283. data/lib/rubocop/cop/style/module_function.rb +10 -13
  284. data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
  285. data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
  286. data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
  287. data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
  288. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
  289. data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
  290. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
  291. data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
  292. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
  293. data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
  294. data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
  295. data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
  296. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  297. data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
  298. data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
  299. data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
  300. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
  301. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
  302. data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
  303. data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
  304. data/lib/rubocop/cop/style/signal_exception.rb +2 -0
  305. data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
  306. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  307. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
  308. data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
  309. data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
  310. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  311. data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
  312. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
  313. data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
  314. data/lib/rubocop/cop/team.rb +1 -1
  315. data/lib/rubocop/cop/tokens_util.rb +84 -0
  316. data/lib/rubocop/cop/util.rb +3 -13
  317. data/lib/rubocop/cop/variable_force.rb +0 -2
  318. data/lib/rubocop/cop/variable_force/branch.rb +1 -0
  319. data/lib/rubocop/cop/variable_force/variable.rb +7 -5
  320. data/lib/rubocop/cops_documentation_generator.rb +282 -0
  321. data/lib/rubocop/error.rb +1 -0
  322. data/lib/rubocop/file_finder.rb +12 -12
  323. data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
  324. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  325. data/lib/rubocop/formatter/junit_formatter.rb +1 -1
  326. data/lib/rubocop/options.rb +3 -3
  327. data/lib/rubocop/path_util.rb +17 -17
  328. data/lib/rubocop/rake_task.rb +1 -0
  329. data/lib/rubocop/result_cache.rb +12 -8
  330. data/lib/rubocop/rspec/expect_offense.rb +31 -5
  331. data/lib/rubocop/rspec/shared_contexts.rb +13 -14
  332. data/lib/rubocop/runner.rb +6 -7
  333. data/lib/rubocop/target_finder.rb +13 -10
  334. data/lib/rubocop/version.rb +2 -2
  335. metadata +28 -8
  336. data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
  337. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
  338. data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
  339. data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -74,10 +74,8 @@ module RuboCop
74
74
  end
75
75
 
76
76
  def inside_comment?(range, comma_offset)
77
- processed_source.comments.any? do |comment|
78
- comment_offset = comment.loc.expression.begin_pos - range.begin_pos
79
- comment_offset >= 0 && comment_offset < comma_offset
80
- end
77
+ comment = processed_source.comment_at_line(range.line)
78
+ comment && comment.loc.expression.begin_pos < range.begin_pos + comma_offset
81
79
  end
82
80
 
83
81
  # Returns true if the node has round/square/curly brackets.
@@ -41,8 +41,7 @@ module RuboCop
41
41
  end
42
42
 
43
43
  def case_offense(node, range)
44
- add_offense(node, location: range,
45
- message: format(CASE_MSG, name_type: name_type(node)))
44
+ add_offense(range, message: format(CASE_MSG, name_type: name_type(node)))
46
45
  end
47
46
 
48
47
  def uppercase?(name)
@@ -59,8 +58,7 @@ module RuboCop
59
58
  end
60
59
 
61
60
  def num_offense(node, range)
62
- add_offense(node, location: range,
63
- message: format(NUM_MSG, name_type: name_type(node)))
61
+ add_offense(range, message: format(NUM_MSG, name_type: name_type(node)))
64
62
  end
65
63
 
66
64
  def ends_with_num?(name)
@@ -68,10 +66,9 @@ module RuboCop
68
66
  end
69
67
 
70
68
  def length_offense(node, range)
71
- add_offense(node, location: range,
72
- message: format(LENGTH_MSG,
73
- name_type: name_type(node).capitalize,
74
- min: min_length))
69
+ message = format(LENGTH_MSG, name_type: name_type(node).capitalize, min: min_length)
70
+
71
+ add_offense(range, message: message)
75
72
  end
76
73
 
77
74
  def long_enough?(name)
@@ -86,11 +83,7 @@ module RuboCop
86
83
  end
87
84
 
88
85
  def forbidden_offense(node, range, name)
89
- add_offense(
90
- node,
91
- location: range,
92
- message: format(FORBIDDEN_MSG, name: name, name_type: name_type(node))
93
- )
86
+ add_offense(range, message: format(FORBIDDEN_MSG, name: name, name_type: name_type(node)))
94
87
  end
95
88
 
96
89
  def allowed_names
@@ -7,10 +7,6 @@ module RuboCop
7
7
  module UnusedArgument
8
8
  extend NodePattern::Macros
9
9
 
10
- def join_force?(force_class)
11
- force_class == VariableForce
12
- end
13
-
14
10
  def after_leaving_scope(scope, _variable_table)
15
11
  scope.variables.each_value do |variable|
16
12
  check_argument(variable)
@@ -24,8 +20,10 @@ module RuboCop
24
20
  return if variable.referenced?
25
21
 
26
22
  message = message(variable)
27
- add_offense(variable.declaration_node, location: :name,
28
- message: message)
23
+
24
+ add_offense(variable.declaration_node.loc.name, message: message) do |corrector|
25
+ autocorrect(corrector, variable.declaration_node)
26
+ end
29
27
  end
30
28
  end
31
29
  end
@@ -21,14 +21,16 @@ module RuboCop
21
21
  # # good
22
22
  # def attribute
23
23
  # end
24
- class AccessorMethodName < Cop
24
+ class AccessorMethodName < Base
25
25
  MSG_READER = 'Do not prefix reader method names with `get_`.'
26
26
  MSG_WRITER = 'Do not prefix writer method names with `set_`.'
27
27
 
28
28
  def on_def(node)
29
29
  return unless bad_reader_name?(node) || bad_writer_name?(node)
30
30
 
31
- add_offense(node, location: :name)
31
+ message = message(node)
32
+
33
+ add_offense(node.loc.name, message: message)
32
34
  end
33
35
  alias on_defs on_def
34
36
 
@@ -52,18 +52,18 @@ module RuboCop
52
52
  #
53
53
  # FOÖ = "foo"
54
54
  #
55
- class AsciiIdentifiers < Cop
55
+ class AsciiIdentifiers < Base
56
56
  include RangeHelp
57
57
 
58
58
  IDENTIFIER_MSG = 'Use only ascii symbols in identifiers.'
59
59
  CONSTANT_MSG = 'Use only ascii symbols in constants.'
60
60
 
61
- def investigate(processed_source)
61
+ def on_new_investigation
62
62
  processed_source.each_token do |token|
63
63
  next if !should_check?(token) || token.text.ascii_only?
64
64
 
65
65
  message = token.type == :tIDENTIFIER ? IDENTIFIER_MSG : CONSTANT_MSG
66
- add_offense(token, location: first_offense_range(token), message: message)
66
+ add_offense(first_offense_range(token), message: message)
67
67
  end
68
68
  end
69
69
 
@@ -13,7 +13,7 @@ module RuboCop
13
13
  #
14
14
  # # good
15
15
  # def +(other); end
16
- class BinaryOperatorParameterName < Cop
16
+ class BinaryOperatorParameterName < Base
17
17
  MSG = 'When defining the `%<opr>s` operator, ' \
18
18
  'name its argument `other`.'
19
19
 
@@ -35,7 +35,7 @@ module RuboCop
35
35
  # foo { |speed, distance| speed * distance }
36
36
  #
37
37
  # baz { |age, height, gender| do_stuff(age, height, gender) }
38
- class BlockParameterName < Cop
38
+ class BlockParameterName < Base
39
39
  include UncommunicativeName
40
40
 
41
41
  def on_block(node)
@@ -26,7 +26,7 @@ module RuboCop
26
26
  # end
27
27
  # class module_parent::MyModule
28
28
  # end
29
- class ClassAndModuleCamelCase < Cop
29
+ class ClassAndModuleCamelCase < Base
30
30
  MSG = 'Use CamelCase for classes and modules.'
31
31
 
32
32
  def on_class(node)
@@ -34,7 +34,7 @@ module RuboCop
34
34
  name = node.loc.name.source.gsub(allowed, '')
35
35
  return unless /_/.match?(name)
36
36
 
37
- add_offense(node, location: :name)
37
+ add_offense(node.loc.name)
38
38
  end
39
39
  alias on_module on_class
40
40
  end
@@ -17,7 +17,7 @@ module RuboCop
17
17
  #
18
18
  # # good
19
19
  # INCH_IN_CM = 2.54
20
- class ConstantName < Cop
20
+ class ConstantName < Base
21
21
  MSG = 'Use SCREAMING_SNAKE_CASE for constants.'
22
22
  # Use POSIX character classes, so we allow accented characters rather
23
23
  # than just standard ASCII characters
@@ -47,7 +47,7 @@ module RuboCop
47
47
  return if allowed_assignment?(value)
48
48
  return if SNAKE_CASE.match?(const_name)
49
49
 
50
- add_offense(node, location: :name)
50
+ add_offense(node.loc.name)
51
51
  end
52
52
 
53
53
  private
@@ -24,7 +24,7 @@ module RuboCop
24
24
  # lib/layout_manager.rb
25
25
  #
26
26
  # anything/using_snake_case.rake
27
- class FileName < Cop
27
+ class FileName < Base
28
28
  include RangeHelp
29
29
 
30
30
  MSG_SNAKE_CASE = 'The name of this source file (`%<basename>s`) ' \
@@ -35,13 +35,13 @@ module RuboCop
35
35
 
36
36
  SNAKE_CASE = /^[\da-z_.?!]+$/.freeze
37
37
 
38
- def investigate(processed_source)
38
+ def on_new_investigation
39
39
  file_path = processed_source.file_path
40
40
  return if config.file_to_exclude?(file_path) ||
41
41
  config.allowed_camel_case_file?(file_path)
42
42
 
43
43
  for_bad_filename(file_path) do |range, msg|
44
- add_offense(nil, location: range, message: msg)
44
+ add_offense(range, message: msg)
45
45
  end
46
46
  end
47
47
 
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # <<-sql
28
28
  # SELECT * FROM foo
29
29
  # sql
30
- class HeredocDelimiterCase < Cop
30
+ class HeredocDelimiterCase < Base
31
31
  include Heredoc
32
32
  include ConfigurableEnforcedStyle
33
33
 
@@ -36,7 +36,7 @@ module RuboCop
36
36
  def on_heredoc(node)
37
37
  return if correct_case_delimiters?(node)
38
38
 
39
- add_offense(node, location: :heredoc_end)
39
+ add_offense(node.loc.heredoc_end)
40
40
  end
41
41
 
42
42
  private
@@ -23,7 +23,7 @@ module RuboCop
23
23
  # <<-EOS
24
24
  # SELECT * FROM foo
25
25
  # EOS
26
- class HeredocDelimiterNaming < Cop
26
+ class HeredocDelimiterNaming < Base
27
27
  include Heredoc
28
28
 
29
29
  MSG = 'Use meaningful heredoc delimiters.'
@@ -31,7 +31,7 @@ module RuboCop
31
31
  def on_heredoc(node)
32
32
  return if meaningful_delimiters?(node)
33
33
 
34
- add_offense(node, location: :heredoc_end)
34
+ add_offense(node.loc.heredoc_end)
35
35
  end
36
36
 
37
37
  private
@@ -84,7 +84,7 @@ module RuboCop
84
84
  # def _foo
85
85
  # @_foo ||= calculate_expensive_thing
86
86
  # end
87
- class MemoizedInstanceVariableName < Cop
87
+ class MemoizedInstanceVariableName < Base
88
88
  include ConfigurableEnforcedStyle
89
89
 
90
90
  MSG = 'Memoized variable `%<var>s` does not match ' \
@@ -115,7 +115,7 @@ module RuboCop
115
115
  suggested_var: suggested_var(method_name),
116
116
  method: method_name
117
117
  )
118
- add_offense(node, location: ivar_assign.source_range, message: msg)
118
+ add_offense(ivar_assign.source_range, message: msg)
119
119
  end
120
120
  alias on_defs on_def
121
121
 
@@ -43,7 +43,7 @@ module RuboCop
43
43
  # def baz(age_a, height_b, gender_c)
44
44
  # do_stuff(age_a, height_b, gender_c)
45
45
  # end
46
- class MethodParameterName < Cop
46
+ class MethodParameterName < Base
47
47
  include UncommunicativeName
48
48
 
49
49
  def on_def(node)
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # # good
28
28
  # def value?
29
29
  # end
30
- class PredicateName < Cop
30
+ class PredicateName < Base
31
31
  include AllowedMethods
32
32
 
33
33
  def_node_matcher :dynamic_method_define, <<~PATTERN
@@ -42,8 +42,7 @@ module RuboCop
42
42
  next if allowed_method_name?(method_name.to_s, prefix)
43
43
 
44
44
  add_offense(
45
- node,
46
- location: node.first_argument.loc.expression,
45
+ node.first_argument.loc.expression,
47
46
  message: message(method_name,
48
47
  expected_name(method_name.to_s, prefix))
49
48
  )
@@ -58,8 +57,7 @@ module RuboCop
58
57
  next if allowed_method_name?(method_name, prefix)
59
58
 
60
59
  add_offense(
61
- node,
62
- location: :name,
60
+ node.loc.name,
63
61
  message: message(method_name, expected_name(method_name, prefix))
64
62
  )
65
63
  end
@@ -53,22 +53,23 @@ module RuboCop
53
53
  # # do something
54
54
  # end
55
55
  #
56
- class RescuedExceptionsVariableName < Cop
56
+ class RescuedExceptionsVariableName < Base
57
+ extend AutoCorrector
58
+
57
59
  MSG = 'Use `%<preferred>s` instead of `%<bad>s`.'
58
60
 
59
61
  def on_resbody(node)
60
- name = variable_name(node)
61
- return unless name
62
- return if preferred_name(name).to_sym == name
62
+ offending_name = variable_name(node)
63
+ return unless offending_name
63
64
 
64
- add_offense(node, location: offense_range(node))
65
- end
65
+ preferred_name = preferred_name(offending_name)
66
+ return if preferred_name.to_sym == offending_name
67
+
68
+ range = offense_range(node)
69
+ message = message(node)
66
70
 
67
- def autocorrect(node)
68
- lambda do |corrector|
69
- offending_name = variable_name(node)
70
- preferred_name = preferred_name(offending_name)
71
- corrector.replace(offense_range(node), preferred_name)
71
+ add_offense(range, message: message) do |corrector|
72
+ corrector.replace(range, preferred_name)
72
73
 
73
74
  node.body&.each_descendant(:lvar) do |var|
74
75
  next unless var.children.first == offending_name
@@ -100,9 +100,9 @@ module RuboCop
100
100
  # @note Emits a warning if the provided name has an incorrect namespace
101
101
  #
102
102
  # @return [String] Qualified cop name
103
- def qualified_cop_name(name, path, shall_warn = true)
103
+ def qualified_cop_name(name, path, warn: true)
104
104
  badge = Badge.parse(name)
105
- print_warning(name, path) if shall_warn && department_missing?(badge, name)
105
+ print_warning(name, path) if warn && department_missing?(badge, name)
106
106
  return name if registered?(badge)
107
107
 
108
108
  potential_badges = qualify_badge(badge)
@@ -149,7 +149,7 @@ module RuboCop
149
149
  @registry.size
150
150
  end
151
151
 
152
- def enabled(config, only = [], only_safe = false)
152
+ def enabled(config, only = [], only_safe: false)
153
153
  select do |cop|
154
154
  only.include?(cop.cop_name) || enabled?(cop, config, only_safe)
155
155
  end
@@ -11,7 +11,7 @@ module RuboCop
11
11
  #
12
12
  # eval(something)
13
13
  # binding.eval(something)
14
- class Eval < Cop
14
+ class Eval < Base
15
15
  MSG = 'The use of `eval` is a serious security risk.'
16
16
 
17
17
  def_node_matcher :eval?, <<~PATTERN
@@ -22,7 +22,7 @@ module RuboCop
22
22
  eval?(node) do |code|
23
23
  return if code.dstr_type? && code.recursive_literal?
24
24
 
25
- add_offense(node, location: :selector)
25
+ add_offense(node.loc.selector)
26
26
  end
27
27
  end
28
28
  end
@@ -22,7 +22,9 @@ module RuboCop
22
22
  # # good
23
23
  # JSON.parse("{}")
24
24
  #
25
- class JSONLoad < Cop
25
+ class JSONLoad < Base
26
+ extend AutoCorrector
27
+
26
28
  MSG = 'Prefer `JSON.parse` over `JSON.%<method>s`.'
27
29
 
28
30
  def_node_matcher :json_load, <<~PATTERN
@@ -31,15 +33,11 @@ module RuboCop
31
33
 
32
34
  def on_send(node)
33
35
  json_load(node) do |method|
34
- add_offense(node,
35
- location: :selector,
36
- message: format(MSG, method: method))
36
+ add_offense(node.loc.selector, message: format(MSG, method: method)) do |corrector|
37
+ corrector.replace(node.loc.selector, 'parse')
38
+ end
37
39
  end
38
40
  end
39
-
40
- def autocorrect(node)
41
- ->(corrector) { corrector.replace(node.loc.selector, 'parse') }
42
- end
43
41
  end
44
42
  end
45
43
  end
@@ -18,7 +18,7 @@ module RuboCop
18
18
  # # okish - deep copy hack
19
19
  # Marshal.load(Marshal.dump({}))
20
20
  #
21
- class MarshalLoad < Cop
21
+ class MarshalLoad < Base
22
22
  MSG = 'Avoid using `Marshal.%<method>s`.'
23
23
 
24
24
  def_node_matcher :marshal_load, <<~PATTERN
@@ -28,9 +28,7 @@ module RuboCop
28
28
 
29
29
  def on_send(node)
30
30
  marshal_load(node) do |method|
31
- add_offense(node,
32
- location: :selector,
33
- message: format(MSG, method: method))
31
+ add_offense(node.loc.selector, message: format(MSG, method: method))
34
32
  end
35
33
  end
36
34
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  # File.open(something)
20
20
  # IO.popen(something)
21
21
  # URI.parse(something).open
22
- class Open < Cop
22
+ class Open < Base
23
23
  MSG = 'The use of `Kernel#open` is a serious security risk.'
24
24
 
25
25
  def_node_matcher :open?, <<~PATTERN
@@ -30,7 +30,7 @@ module RuboCop
30
30
  open?(node) do |code|
31
31
  return if safe?(code)
32
32
 
33
- add_offense(node, location: :selector)
33
+ add_offense(node.loc.selector)
34
34
  end
35
35
  end
36
36
 
@@ -15,7 +15,9 @@ module RuboCop
15
15
  # YAML.safe_load("--- foo")
16
16
  # YAML.dump("foo")
17
17
  #
18
- class YAMLLoad < Cop
18
+ class YAMLLoad < Base
19
+ extend AutoCorrector
20
+
19
21
  MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'
20
22
 
21
23
  def_node_matcher :yaml_load, <<~PATTERN
@@ -24,13 +26,11 @@ module RuboCop
24
26
 
25
27
  def on_send(node)
26
28
  yaml_load(node) do
27
- add_offense(node, location: :selector)
29
+ add_offense(node.loc.selector) do |corrector|
30
+ corrector.replace(node.loc.selector, 'safe_load')
31
+ end
28
32
  end
29
33
  end
30
-
31
- def autocorrect(node)
32
- ->(corrector) { corrector.replace(node.loc.selector, 'safe_load') }
33
- end
34
34
  end
35
35
  end
36
36
  end