rubocop 1.10.0 → 1.11.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 (199) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -12
  3. data/assets/output.html.erb +1 -1
  4. data/config/default.yml +13 -0
  5. data/lib/rubocop.rb +1 -0
  6. data/lib/rubocop/cli/command/execute_runner.rb +1 -1
  7. data/lib/rubocop/cli/command/suggest_extensions.rb +1 -1
  8. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -1
  9. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -0
  10. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
  11. data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -0
  12. data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -0
  13. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -0
  14. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -0
  15. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
  16. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
  17. data/lib/rubocop/cop/generator.rb +2 -2
  18. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  19. data/lib/rubocop/cop/internal_affairs/example_description.rb +1 -0
  20. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
  21. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -0
  22. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
  23. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
  24. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -0
  25. data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
  26. data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
  27. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
  28. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
  29. data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +4 -0
  30. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
  31. data/lib/rubocop/cop/layout/block_alignment.rb +1 -0
  32. data/lib/rubocop/cop/layout/class_structure.rb +1 -0
  33. data/lib/rubocop/cop/layout/extra_spacing.rb +2 -2
  34. data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -1
  35. data/lib/rubocop/cop/layout/indentation_width.rb +1 -0
  36. data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -1
  37. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
  38. data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
  39. data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -0
  40. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
  41. data/lib/rubocop/cop/lint/constant_resolution.rb +1 -0
  42. data/lib/rubocop/cop/lint/debugger.rb +3 -1
  43. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +1 -0
  44. data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -1
  45. data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -0
  46. data/lib/rubocop/cop/lint/duplicate_require.rb +1 -0
  47. data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
  48. data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -0
  49. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -0
  50. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
  51. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -0
  52. data/lib/rubocop/cop/lint/inherit_exception.rb +1 -0
  53. data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -0
  54. data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -0
  55. data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
  56. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +7 -0
  57. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
  58. data/lib/rubocop/cop/lint/number_conversion.rb +2 -0
  59. data/lib/rubocop/cop/lint/raise_exception.rb +2 -0
  60. data/lib/rubocop/cop/lint/rand_one.rb +1 -0
  61. data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
  62. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -0
  63. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -0
  64. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -0
  65. data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -0
  66. data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -0
  67. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -0
  68. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -0
  69. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -0
  70. data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
  71. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
  72. data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
  73. data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
  74. data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
  75. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
  76. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -0
  77. data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -0
  78. data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -0
  79. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
  80. data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -0
  81. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -0
  82. data/lib/rubocop/cop/lint/useless_times.rb +3 -0
  83. data/lib/rubocop/cop/metrics/module_length.rb +1 -0
  84. data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -0
  85. data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +6 -4
  86. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -0
  87. data/lib/rubocop/cop/mixin/def_node.rb +1 -0
  88. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -0
  89. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -0
  90. data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -0
  91. data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -0
  92. data/lib/rubocop/cop/mixin/method_complexity.rb +1 -0
  93. data/lib/rubocop/cop/mixin/negative_conditional.rb +3 -0
  94. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +1 -1
  95. data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
  96. data/lib/rubocop/cop/mixin/safe_assignment.rb +5 -0
  97. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
  98. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -0
  99. data/lib/rubocop/cop/naming/constant_name.rb +2 -0
  100. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -0
  101. data/lib/rubocop/cop/naming/method_name.rb +3 -0
  102. data/lib/rubocop/cop/naming/predicate_name.rb +1 -0
  103. data/lib/rubocop/cop/security/eval.rb +1 -0
  104. data/lib/rubocop/cop/security/json_load.rb +1 -0
  105. data/lib/rubocop/cop/security/marshal_load.rb +1 -0
  106. data/lib/rubocop/cop/security/open.rb +1 -0
  107. data/lib/rubocop/cop/security/yaml_load.rb +1 -0
  108. data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
  109. data/lib/rubocop/cop/style/alias.rb +1 -0
  110. data/lib/rubocop/cop/style/arguments_forwarding.rb +3 -0
  111. data/lib/rubocop/cop/style/array_coercion.rb +2 -0
  112. data/lib/rubocop/cop/style/array_join.rb +1 -0
  113. data/lib/rubocop/cop/style/attr.rb +1 -0
  114. data/lib/rubocop/cop/style/case_equality.rb +2 -1
  115. data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -0
  116. data/lib/rubocop/cop/style/collection_compact.rb +2 -0
  117. data/lib/rubocop/cop/style/colon_method_call.rb +1 -0
  118. data/lib/rubocop/cop/style/command_literal.rb +1 -1
  119. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -0
  120. data/lib/rubocop/cop/style/constant_visibility.rb +1 -0
  121. data/lib/rubocop/cop/style/date_time.rb +3 -0
  122. data/lib/rubocop/cop/style/dir.rb +1 -0
  123. data/lib/rubocop/cop/style/documentation.rb +5 -0
  124. data/lib/rubocop/cop/style/documentation_method.rb +1 -0
  125. data/lib/rubocop/cop/style/double_negation.rb +1 -0
  126. data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -0
  127. data/lib/rubocop/cop/style/each_with_object.rb +1 -0
  128. data/lib/rubocop/cop/style/empty_literal.rb +9 -0
  129. data/lib/rubocop/cop/style/endless_method.rb +1 -0
  130. data/lib/rubocop/cop/style/eval_with_location.rb +2 -0
  131. data/lib/rubocop/cop/style/even_odd.rb +1 -0
  132. data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -0
  133. data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -0
  134. data/lib/rubocop/cop/style/float_division.rb +4 -0
  135. data/lib/rubocop/cop/style/format_string.rb +2 -0
  136. data/lib/rubocop/cop/style/format_string_token.rb +1 -0
  137. data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
  138. data/lib/rubocop/cop/style/hash_conversion.rb +26 -2
  139. data/lib/rubocop/cop/style/hash_each_methods.rb +1 -0
  140. data/lib/rubocop/cop/style/hash_except.rb +1 -0
  141. data/lib/rubocop/cop/style/hash_like_case.rb +1 -0
  142. data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
  143. data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
  144. data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
  145. data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
  146. data/lib/rubocop/cop/style/inverse_methods.rb +2 -0
  147. data/lib/rubocop/cop/style/min_max.rb +1 -0
  148. data/lib/rubocop/cop/style/mixin_usage.rb +2 -0
  149. data/lib/rubocop/cop/style/module_function.rb +5 -0
  150. data/lib/rubocop/cop/style/multiple_comparison.rb +21 -2
  151. data/lib/rubocop/cop/style/mutable_constant.rb +3 -0
  152. data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -0
  153. data/lib/rubocop/cop/style/nil_comparison.rb +3 -0
  154. data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
  155. data/lib/rubocop/cop/style/non_nil_check.rb +7 -0
  156. data/lib/rubocop/cop/style/numeric_predicate.rb +3 -0
  157. data/lib/rubocop/cop/style/option_hash.rb +1 -0
  158. data/lib/rubocop/cop/style/or_assignment.rb +2 -0
  159. data/lib/rubocop/cop/style/parallel_assignment.rb +6 -0
  160. data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
  161. data/lib/rubocop/cop/style/proc.rb +1 -0
  162. data/lib/rubocop/cop/style/random_with_offset.rb +5 -0
  163. data/lib/rubocop/cop/style/redundant_assignment.rb +1 -0
  164. data/lib/rubocop/cop/style/redundant_begin.rb +7 -1
  165. data/lib/rubocop/cop/style/redundant_conditional.rb +2 -0
  166. data/lib/rubocop/cop/style/redundant_exception.rb +2 -0
  167. data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
  168. data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -0
  169. data/lib/rubocop/cop/style/redundant_freeze.rb +1 -0
  170. data/lib/rubocop/cop/style/redundant_parentheses.rb +13 -0
  171. data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -0
  172. data/lib/rubocop/cop/style/redundant_sort.rb +1 -0
  173. data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
  174. data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
  175. data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -0
  176. data/lib/rubocop/cop/style/return_nil.rb +6 -0
  177. data/lib/rubocop/cop/style/safe_navigation.rb +2 -0
  178. data/lib/rubocop/cop/style/sample.rb +1 -0
  179. data/lib/rubocop/cop/style/signal_exception.rb +3 -0
  180. data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
  181. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
  182. data/lib/rubocop/cop/style/stderr_puts.rb +1 -0
  183. data/lib/rubocop/cop/style/string_concatenation.rb +1 -0
  184. data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
  185. data/lib/rubocop/cop/style/strip.rb +1 -0
  186. data/lib/rubocop/cop/style/struct_inheritance.rb +1 -0
  187. data/lib/rubocop/cop/style/symbol_proc.rb +25 -1
  188. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -0
  189. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -0
  190. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  191. data/lib/rubocop/cop/style/trivial_accessors.rb +1 -0
  192. data/lib/rubocop/cop/style/unless_logical_operators.rb +99 -0
  193. data/lib/rubocop/cop/style/unpack_first.rb +1 -0
  194. data/lib/rubocop/cop/style/yoda_condition.rb +1 -0
  195. data/lib/rubocop/cop/style/zero_length_predicate.rb +5 -0
  196. data/lib/rubocop/name_similarity.rb +1 -1
  197. data/lib/rubocop/target_ruby.rb +21 -13
  198. data/lib/rubocop/version.rb +1 -1
  199. metadata +9 -7
@@ -73,7 +73,10 @@ module RuboCop
73
73
  !return_node.children.empty?
74
74
  end
75
75
 
76
+ # @!method chained_send?(node)
76
77
  def_node_matcher :chained_send?, '(send !nil? ...)'
78
+
79
+ # @!method define_method?(node)
77
80
  def_node_matcher :define_method?, <<~PATTERN
78
81
  (send _ {:define_method :define_singleton_method} _)
79
82
  PATTERN
@@ -62,10 +62,12 @@ module RuboCop
62
62
  '%<corrected_method>s.'
63
63
  METHODS = CONVERSION_METHOD_CLASS_MAPPING.keys.map(&:inspect).join(' ')
64
64
 
65
+ # @!method to_method(node)
65
66
  def_node_matcher :to_method, <<~PATTERN
66
67
  (send $_ ${#{METHODS}})
67
68
  PATTERN
68
69
 
70
+ # @!method to_method_symbol(node)
69
71
  def_node_matcher :to_method_symbol, <<~PATTERN
70
72
  {(send _ $_ ${(sym ${#{METHODS}})} ...)
71
73
  (send _ $_ ${(block_pass (sym ${#{METHODS}}))} ...)}
@@ -33,10 +33,12 @@ module RuboCop
33
33
  MSG = 'Use `StandardError` over `Exception`.'
34
34
  RESTRICT_ON_SEND = %i[raise fail].freeze
35
35
 
36
+ # @!method exception?(node)
36
37
  def_node_matcher :exception?, <<~PATTERN
37
38
  (send nil? {:raise :fail} $(const ${cbase nil?} :Exception) ... )
38
39
  PATTERN
39
40
 
41
+ # @!method exception_new_with_message?(node)
40
42
  def_node_matcher :exception_new_with_message?, <<~PATTERN
41
43
  (send nil? {:raise :fail}
42
44
  (send $(const ${cbase nil?} :Exception) :new ... ))
@@ -25,6 +25,7 @@ module RuboCop
25
25
  'Perhaps you meant `rand(2)` or `rand`?'
26
26
  RESTRICT_ON_SEND = %i[rand].freeze
27
27
 
28
+ # @!method rand_one?(node)
28
29
  def_node_matcher :rand_one?, <<~PATTERN
29
30
  (send {(const {nil? cbase} :Kernel) nil?} :rand {(int {-1 1}) (float {-1.0 1.0})})
30
31
  PATTERN
@@ -28,6 +28,7 @@ module RuboCop
28
28
  MSG = 'Remove unnecessary `require` statement.'
29
29
  RESTRICT_ON_SEND = %i[require].freeze
30
30
 
31
+ # @!method unnecessary_require_statement?(node)
31
32
  def_node_matcher :unnecessary_require_statement?, <<~PATTERN
32
33
  (send nil? :require
33
34
  (str {"enumerator" "rational" "complex" "thread"}))
@@ -43,6 +43,7 @@ module RuboCop
43
43
 
44
44
  NIL_SPECIFIC_METHODS = (nil.methods - Object.new.methods).to_set.freeze
45
45
 
46
+ # @!method respond_to_nil_specific_method?(node)
46
47
  def_node_matcher :respond_to_nil_specific_method?, <<~PATTERN
47
48
  (csend _ :respond_to? (sym %NIL_SPECIFIC_METHODS))
48
49
  PATTERN
@@ -79,6 +79,7 @@ module RuboCop
79
79
  PERCENT_CAPITAL_I = '%I'
80
80
  ASSIGNMENT_TYPES = %i[lvasgn ivasgn cvasgn gvasgn].freeze
81
81
 
82
+ # @!method array_new?(node)
82
83
  def_node_matcher :array_new?, <<~PATTERN
83
84
  {
84
85
  $(send (const {nil? cbase} :Array) :new ...)
@@ -86,6 +87,7 @@ module RuboCop
86
87
  }
87
88
  PATTERN
88
89
 
90
+ # @!method literal_expansion(node)
89
91
  def_node_matcher :literal_expansion, <<~PATTERN
90
92
  (splat {$({str dstr int float array} ...) (block $#array_new? ...) $#array_new?} ...)
91
93
  PATTERN
@@ -25,6 +25,7 @@ module RuboCop
25
25
  MSG_SELF = 'Use `self` instead of `Object#to_s` in ' \
26
26
  'interpolation.'
27
27
 
28
+ # @!method to_s_without_args?(node)
28
29
  def_node_matcher :to_s_without_args?, '(send _ :to_s)'
29
30
 
30
31
  def on_interpolation(begin_node)
@@ -33,6 +33,7 @@ module RuboCop
33
33
  MSG_EACH_WITH_INDEX = 'Use `each` instead of `each_with_index`.'
34
34
  MSG_WITH_INDEX = 'Remove redundant `with_index`.'
35
35
 
36
+ # @!method redundant_with_index?(node)
36
37
  def_node_matcher :redundant_with_index?, <<~PATTERN
37
38
  (block
38
39
  $(send
@@ -34,6 +34,7 @@ module RuboCop
34
34
 
35
35
  MSG_WITH_OBJECT = 'Remove redundant `with_object`.'
36
36
 
37
+ # @!method redundant_with_object?(node)
37
38
  def_node_matcher :redundant_with_object?, <<~PATTERN
38
39
  (block
39
40
  $(send _ {:each_with_object :with_object}
@@ -29,6 +29,7 @@ module RuboCop
29
29
  MSG = 'Do not chain ordinary method call' \
30
30
  ' after safe navigation operator.'
31
31
 
32
+ # @!method bad_method?(node)
32
33
  def_node_matcher :bad_method?, <<~PATTERN
33
34
  {
34
35
  (send $(csend ...) $_ ...)
@@ -25,6 +25,7 @@ module RuboCop
25
25
  MSG = 'Avoid calling `empty?` with the safe navigation operator ' \
26
26
  'in conditionals.'
27
27
 
28
+ # @!method safe_navigation_empty_in_conditional?(node)
28
29
  def_node_matcher :safe_navigation_empty_in_conditional?, <<~PATTERN
29
30
  (if (csend (send ...) :empty?) ...)
30
31
  PATTERN
@@ -43,6 +43,7 @@ module RuboCop
43
43
  SEND_METHODS = %i[send public_send __send__].freeze
44
44
  RESTRICT_ON_SEND = SEND_METHODS
45
45
 
46
+ # @!method send_with_mixin_argument?(node)
46
47
  def_node_matcher :send_with_mixin_argument?, <<~PATTERN
47
48
  (send
48
49
  (const _ _) {:#{SEND_METHODS.join(' :')}}
@@ -67,6 +67,7 @@ module RuboCop
67
67
  MSG = 'Argument `%<argument>s` was shadowed by a local variable ' \
68
68
  'before it was used.'
69
69
 
70
+ # @!method uses_var?(node)
70
71
  def_node_search :uses_var?, '(lvar %)'
71
72
 
72
73
  def self.joining_forces
@@ -42,6 +42,7 @@ module RuboCop
42
42
  class ShadowingOuterLocalVariable < Base
43
43
  MSG = 'Shadowing outer local variable - `%<variable>s`.'
44
44
 
45
+ # @!method ractor_block?(node)
45
46
  def_node_matcher :ractor_block?, <<~PATTERN
46
47
  (block (send (const nil? :Ractor) :new ...) ...)
47
48
  PATTERN
@@ -29,6 +29,7 @@ module RuboCop
29
29
  STRUCT_METHOD_NAMES = Struct.instance_methods
30
30
  STRUCT_MEMBER_NAME_TYPES = %i[sym str].freeze
31
31
 
32
+ # @!method struct_new(node)
32
33
  def_node_matcher :struct_new, <<~PATTERN
33
34
  (send
34
35
  (const ${nil? cbase} :Struct) :new ...)
@@ -23,14 +23,17 @@ module RuboCop
23
23
 
24
24
  RESTRICT_ON_SEND = %i[to_enum enum_for].freeze
25
25
 
26
+ # @!method enum_conversion_call?(node)
26
27
  def_node_matcher :enum_conversion_call?, <<~PATTERN
27
28
  (send {nil? self} {:to_enum :enum_for} $_ $...)
28
29
  PATTERN
29
30
 
31
+ # @!method method_name?(node, name)
30
32
  def_node_matcher :method_name?, <<~PATTERN
31
33
  {(send nil? {:__method__ :__callee__}) (sym %1)}
32
34
  PATTERN
33
35
 
36
+ # @!method passing_keyword_arg?(node, name)
34
37
  def_node_matcher :passing_keyword_arg?, <<~PATTERN
35
38
  (pair (sym %1) (lvar %1))
36
39
  PATTERN
@@ -22,6 +22,7 @@ module RuboCop
22
22
 
23
23
  MSG = 'Use `Integer` instead of `%<klass>s`.'
24
24
 
25
+ # @!method fixnum_or_bignum_const(node)
25
26
  def_node_matcher :fixnum_or_bignum_const, <<~PATTERN
26
27
  (:const {nil? (:cbase)} ${:Fixnum :Bignum})
27
28
  PATTERN
@@ -66,6 +66,7 @@ module RuboCop
66
66
  MSG = 'Ensure the accumulator `%<accum>s` will be modified by `%<method>s`.'
67
67
  MSG_INDEX = 'Do not return an element of the accumulator in `%<method>s`.'
68
68
 
69
+ # @!method reduce_with_block?(node)
69
70
  def_node_matcher :reduce_with_block?, <<~PATTERN
70
71
  {
71
72
  (block (send _recv {:reduce :inject} ...) args ...)
@@ -73,10 +74,12 @@ module RuboCop
73
74
  }
74
75
  PATTERN
75
76
 
77
+ # @!method accumulator_index?(node, accumulator_name)
76
78
  def_node_matcher :accumulator_index?, <<~PATTERN
77
79
  (send (lvar %1) {:[] :[]=} ...)
78
80
  PATTERN
79
81
 
82
+ # @!method element_modified?(node, element_name)
80
83
  def_node_search :element_modified?, <<~PATTERN
81
84
  {
82
85
  (send _receiver !{:[] :[]=} <`(lvar %1) `_ ...>) # method(el, ...)
@@ -86,6 +89,7 @@ module RuboCop
86
89
  }
87
90
  PATTERN
88
91
 
92
+ # @!method lvar_used?(node, name)
89
93
  def_node_matcher :lvar_used?, <<~PATTERN
90
94
  {
91
95
  (lvar %1)
@@ -96,6 +100,7 @@ module RuboCop
96
100
  }
97
101
  PATTERN
98
102
 
103
+ # @!method expression_values(node)
99
104
  def_node_search :expression_values, <<~PATTERN
100
105
  {
101
106
  (%RuboCop::AST::Node::VARIABLES $_)
@@ -51,6 +51,7 @@ module RuboCop
51
51
 
52
52
  private
53
53
 
54
+ # @!method flow_command?(node)
54
55
  def_node_matcher :flow_command?, <<~PATTERN
55
56
  {
56
57
  return next break retry redo
@@ -131,6 +131,7 @@ module RuboCop
131
131
  end
132
132
  end
133
133
 
134
+ # @!method break_command?(node)
134
135
  def_node_matcher :break_command?, <<~PATTERN
135
136
  {
136
137
  return break
@@ -62,6 +62,7 @@ module RuboCop
62
62
  include UnusedArgument
63
63
  extend AutoCorrector
64
64
 
65
+ # @!method not_implemented?(node)
65
66
  def_node_matcher :not_implemented?, <<~PATTERN
66
67
  {(send nil? :raise (const {nil? cbase} :NotImplementedError))
67
68
  (send nil? :fail ...)}
@@ -47,6 +47,7 @@ module RuboCop
47
47
  METHOD_NAMES = %i[escape encode unescape decode].freeze
48
48
  RESTRICT_ON_SEND = METHOD_NAMES
49
49
 
50
+ # @!method uri_escape_unescape?(node)
50
51
  def_node_matcher :uri_escape_unescape?, <<~PATTERN
51
52
  (send
52
53
  (const ${nil? cbase} :URI) ${:#{METHOD_NAMES.join(' :')}}
@@ -150,18 +150,22 @@ module RuboCop
150
150
  corrector.remove(range)
151
151
  end
152
152
 
153
+ # @!method static_method_definition?(node)
153
154
  def_node_matcher :static_method_definition?, <<~PATTERN
154
155
  {def (send nil? {:attr :attr_reader :attr_writer :attr_accessor} ...)}
155
156
  PATTERN
156
157
 
158
+ # @!method dynamic_method_definition?(node)
157
159
  def_node_matcher :dynamic_method_definition?, <<~PATTERN
158
160
  {(send nil? :define_method ...) (block (send nil? :define_method ...) ...)}
159
161
  PATTERN
160
162
 
163
+ # @!method class_or_instance_eval?(node)
161
164
  def_node_matcher :class_or_instance_eval?, <<~PATTERN
162
165
  (block (send _ {:class_eval :instance_eval}) ...)
163
166
  PATTERN
164
167
 
168
+ # @!method class_or_module_or_struct_new_call?(node)
165
169
  def_node_matcher :class_or_module_or_struct_new_call?, <<~PATTERN
166
170
  (block (send (const {nil? cbase} {:Class :Module :Struct}) :new ...) ...)
167
171
  PATTERN
@@ -56,6 +56,7 @@ module RuboCop
56
56
 
57
57
  private
58
58
 
59
+ # @!method setter_call_to_local_variable?(node)
59
60
  def_node_matcher :setter_call_to_local_variable?, <<~PATTERN
60
61
  [(send (lvar _) ...) setter_method?]
61
62
  PATTERN
@@ -27,14 +27,17 @@ module RuboCop
27
27
  MSG = 'Useless call to `%<count>i.times` detected.'
28
28
  RESTRICT_ON_SEND = %i[times].freeze
29
29
 
30
+ # @!method times_call?(node)
30
31
  def_node_matcher :times_call?, <<~PATTERN
31
32
  (send (int $_) :times (block-pass (sym $_))?)
32
33
  PATTERN
33
34
 
35
+ # @!method block_arg(node)
34
36
  def_node_matcher :block_arg, <<~PATTERN
35
37
  (block _ (args (arg $_)) ...)
36
38
  PATTERN
37
39
 
40
+ # @!method block_reassigns_arg?(node)
38
41
  def_node_search :block_reassigns_arg?, <<~PATTERN
39
42
  (lvasgn %)
40
43
  PATTERN
@@ -44,6 +44,7 @@ module RuboCop
44
44
 
45
45
  private
46
46
 
47
+ # @!method module_definition?(node)
47
48
  def_node_matcher :module_definition?, <<~PATTERN
48
49
  (casgn nil? _ (block (send (const {nil? cbase} :Module) :new) ...))
49
50
  PATTERN
@@ -90,6 +90,7 @@ module RuboCop
90
90
 
91
91
  private
92
92
 
93
+ # @!method argument_to_lambda_or_proc?(node)
93
94
  def_node_matcher :argument_to_lambda_or_proc?, <<~PATTERN
94
95
  ^lambda_or_proc?
95
96
  PATTERN
@@ -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
@@ -60,6 +60,7 @@ module RuboCop
60
60
 
61
61
  private
62
62
 
63
+ # @!method attribute_call?(node)
63
64
  def_node_matcher :attribute_call?, <<~PATTERN
64
65
  ( {csend send} _receiver _method # and no parameters
65
66
  )
@@ -90,6 +91,7 @@ module RuboCop
90
91
  end
91
92
  end
92
93
 
94
+ # @!method root_node?(node)
93
95
  def_node_matcher :root_node?, <<~PATTERN
94
96
  { nil? | self # e.g. receiver of `my_method` or `self.my_attr`
95
97
  | lvar | ivar | cvar | gvar # e.g. receiver of `var.my_method`
@@ -25,6 +25,7 @@ module RuboCop
25
25
  processed_source[0..index].map(&:strip)
26
26
  end
27
27
 
28
+ # @!method non_public_modifier?(node)
28
29
  def_node_matcher :non_public_modifier?, <<~PATTERN
29
30
  (send nil? {:private :protected} ({def defs} ...))
30
31
  PATTERN
@@ -18,7 +18,10 @@ module RuboCop
18
18
 
19
19
  private
20
20
 
21
+ # @!method constant_definition?(node)
21
22
  def_node_matcher :constant_definition?, '{class module}'
23
+
24
+ # @!method empty_line_required?(node)
22
25
  def_node_matcher :empty_line_required?,
23
26
  '{def defs class module (send nil? {:private :protected :public})}'
24
27
 
@@ -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
@@ -13,10 +13,12 @@ module RuboCop
13
13
  # @api private
14
14
  module EnforceSuperclass
15
15
  def self.included(base)
16
+ # @!method class_definition(node)
16
17
  base.def_node_matcher :class_definition, <<~PATTERN
17
18
  (class (const _ !:#{base::SUPERCLASS}) #{base::BASE_PATTERN} ...)
18
19
  PATTERN
19
20
 
21
+ # @!method class_new_definition(node)
20
22
  base.def_node_matcher :class_new_definition, <<~PATTERN
21
23
  [!^(casgn {nil? cbase} :#{base::SUPERCLASS} ...)
22
24
  !^^(casgn {nil? cbase} :#{base::SUPERCLASS} (block ...))
@@ -9,6 +9,7 @@ module RuboCop
9
9
 
10
10
  RESTRICT_ON_SEND = %i[[] to_h].freeze
11
11
 
12
+ # @!method array_receiver?(node)
12
13
  def_node_matcher :array_receiver?, <<~PATTERN
13
14
  {(array ...) (send _ :each_with_index) (send _ :with_index _ ?) (send _ :zip ...)}
14
15
  PATTERN
@@ -36,6 +36,7 @@ module RuboCop
36
36
 
37
37
  private
38
38
 
39
+ # @!method define_method?(node)
39
40
  def_node_matcher :define_method?, <<~PATTERN
40
41
  (block
41
42
  (send nil? :define_method ({sym str} $_))
@@ -12,7 +12,10 @@ module RuboCop
12
12
 
13
13
  private
14
14
 
15
+ # @!method single_negative?(node)
15
16
  def_node_matcher :single_negative?, '(send !(send _ :!) :!)'
17
+
18
+ # @!method empty_condition?(node)
16
19
  def_node_matcher :empty_condition?, '(begin)'
17
20
 
18
21
  def check_negative_conditional(node, message:, &block)