rbs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +15 -0
  5. data/BSDL +22 -0
  6. data/CHANGELOG.md +9 -0
  7. data/COPYING +56 -0
  8. data/Gemfile +6 -0
  9. data/README.md +93 -0
  10. data/Rakefile +142 -0
  11. data/bin/annotate-with-rdoc +157 -0
  12. data/bin/console +14 -0
  13. data/bin/query-rdoc +103 -0
  14. data/bin/setup +10 -0
  15. data/bin/sort +89 -0
  16. data/bin/test_runner.rb +16 -0
  17. data/docs/CONTRIBUTING.md +97 -0
  18. data/docs/sigs.md +148 -0
  19. data/docs/stdlib.md +152 -0
  20. data/docs/syntax.md +528 -0
  21. data/exe/rbs +7 -0
  22. data/lib/rbs.rb +64 -0
  23. data/lib/rbs/ast/annotation.rb +27 -0
  24. data/lib/rbs/ast/comment.rb +27 -0
  25. data/lib/rbs/ast/declarations.rb +395 -0
  26. data/lib/rbs/ast/members.rb +362 -0
  27. data/lib/rbs/buffer.rb +50 -0
  28. data/lib/rbs/builtin_names.rb +55 -0
  29. data/lib/rbs/cli.rb +558 -0
  30. data/lib/rbs/constant.rb +26 -0
  31. data/lib/rbs/constant_table.rb +150 -0
  32. data/lib/rbs/definition.rb +170 -0
  33. data/lib/rbs/definition_builder.rb +919 -0
  34. data/lib/rbs/environment.rb +281 -0
  35. data/lib/rbs/environment_loader.rb +136 -0
  36. data/lib/rbs/environment_walker.rb +124 -0
  37. data/lib/rbs/errors.rb +187 -0
  38. data/lib/rbs/location.rb +102 -0
  39. data/lib/rbs/method_type.rb +123 -0
  40. data/lib/rbs/namespace.rb +91 -0
  41. data/lib/rbs/parser.y +1344 -0
  42. data/lib/rbs/prototype/rb.rb +553 -0
  43. data/lib/rbs/prototype/rbi.rb +587 -0
  44. data/lib/rbs/prototype/runtime.rb +381 -0
  45. data/lib/rbs/substitution.rb +46 -0
  46. data/lib/rbs/test.rb +26 -0
  47. data/lib/rbs/test/errors.rb +61 -0
  48. data/lib/rbs/test/hook.rb +294 -0
  49. data/lib/rbs/test/setup.rb +58 -0
  50. data/lib/rbs/test/spy.rb +325 -0
  51. data/lib/rbs/test/test_helper.rb +183 -0
  52. data/lib/rbs/test/type_check.rb +254 -0
  53. data/lib/rbs/type_name.rb +70 -0
  54. data/lib/rbs/types.rb +936 -0
  55. data/lib/rbs/variance_calculator.rb +138 -0
  56. data/lib/rbs/vendorer.rb +47 -0
  57. data/lib/rbs/version.rb +3 -0
  58. data/lib/rbs/writer.rb +269 -0
  59. data/lib/ruby/signature.rb +7 -0
  60. data/rbs.gemspec +46 -0
  61. data/stdlib/abbrev/abbrev.rbs +60 -0
  62. data/stdlib/base64/base64.rbs +71 -0
  63. data/stdlib/benchmark/benchmark.rbs +372 -0
  64. data/stdlib/builtin/array.rbs +1997 -0
  65. data/stdlib/builtin/basic_object.rbs +280 -0
  66. data/stdlib/builtin/binding.rbs +177 -0
  67. data/stdlib/builtin/builtin.rbs +45 -0
  68. data/stdlib/builtin/class.rbs +145 -0
  69. data/stdlib/builtin/comparable.rbs +116 -0
  70. data/stdlib/builtin/complex.rbs +400 -0
  71. data/stdlib/builtin/constants.rbs +37 -0
  72. data/stdlib/builtin/data.rbs +5 -0
  73. data/stdlib/builtin/deprecated.rbs +2 -0
  74. data/stdlib/builtin/dir.rbs +413 -0
  75. data/stdlib/builtin/encoding.rbs +607 -0
  76. data/stdlib/builtin/enumerable.rbs +404 -0
  77. data/stdlib/builtin/enumerator.rbs +260 -0
  78. data/stdlib/builtin/errno.rbs +781 -0
  79. data/stdlib/builtin/errors.rbs +582 -0
  80. data/stdlib/builtin/exception.rbs +194 -0
  81. data/stdlib/builtin/false_class.rbs +40 -0
  82. data/stdlib/builtin/fiber.rbs +68 -0
  83. data/stdlib/builtin/fiber_error.rbs +12 -0
  84. data/stdlib/builtin/file.rbs +1076 -0
  85. data/stdlib/builtin/file_test.rbs +59 -0
  86. data/stdlib/builtin/float.rbs +696 -0
  87. data/stdlib/builtin/gc.rbs +243 -0
  88. data/stdlib/builtin/hash.rbs +1029 -0
  89. data/stdlib/builtin/integer.rbs +707 -0
  90. data/stdlib/builtin/io.rbs +683 -0
  91. data/stdlib/builtin/kernel.rbs +576 -0
  92. data/stdlib/builtin/marshal.rbs +161 -0
  93. data/stdlib/builtin/match_data.rbs +271 -0
  94. data/stdlib/builtin/math.rbs +369 -0
  95. data/stdlib/builtin/method.rbs +185 -0
  96. data/stdlib/builtin/module.rbs +1104 -0
  97. data/stdlib/builtin/nil_class.rbs +82 -0
  98. data/stdlib/builtin/numeric.rbs +409 -0
  99. data/stdlib/builtin/object.rbs +824 -0
  100. data/stdlib/builtin/proc.rbs +429 -0
  101. data/stdlib/builtin/process.rbs +1227 -0
  102. data/stdlib/builtin/random.rbs +267 -0
  103. data/stdlib/builtin/range.rbs +226 -0
  104. data/stdlib/builtin/rational.rbs +424 -0
  105. data/stdlib/builtin/rb_config.rbs +57 -0
  106. data/stdlib/builtin/regexp.rbs +1083 -0
  107. data/stdlib/builtin/ruby_vm.rbs +14 -0
  108. data/stdlib/builtin/signal.rbs +55 -0
  109. data/stdlib/builtin/string.rbs +1901 -0
  110. data/stdlib/builtin/string_io.rbs +284 -0
  111. data/stdlib/builtin/struct.rbs +40 -0
  112. data/stdlib/builtin/symbol.rbs +228 -0
  113. data/stdlib/builtin/thread.rbs +1108 -0
  114. data/stdlib/builtin/thread_group.rbs +23 -0
  115. data/stdlib/builtin/time.rbs +1047 -0
  116. data/stdlib/builtin/trace_point.rbs +290 -0
  117. data/stdlib/builtin/true_class.rbs +46 -0
  118. data/stdlib/builtin/unbound_method.rbs +153 -0
  119. data/stdlib/builtin/warning.rbs +17 -0
  120. data/stdlib/coverage/coverage.rbs +62 -0
  121. data/stdlib/csv/csv.rbs +773 -0
  122. data/stdlib/erb/erb.rbs +392 -0
  123. data/stdlib/find/find.rbs +40 -0
  124. data/stdlib/ipaddr/ipaddr.rbs +247 -0
  125. data/stdlib/json/json.rbs +335 -0
  126. data/stdlib/pathname/pathname.rbs +1093 -0
  127. data/stdlib/prime/integer-extension.rbs +23 -0
  128. data/stdlib/prime/prime.rbs +188 -0
  129. data/stdlib/securerandom/securerandom.rbs +9 -0
  130. data/stdlib/set/set.rbs +301 -0
  131. data/stdlib/tmpdir/tmpdir.rbs +53 -0
  132. metadata +292 -0
@@ -0,0 +1,290 @@
1
+ # Document-class: TracePoint
2
+ #
3
+ # A class that provides the functionality of Kernel#set_trace_func in a nice
4
+ # Object-Oriented API.
5
+ #
6
+ # ## Example
7
+ #
8
+ # We can use TracePoint to gather information specifically for exceptions:
9
+ #
10
+ # trace = TracePoint.new(:raise) do |tp|
11
+ # p [tp.lineno, tp.event, tp.raised_exception]
12
+ # end
13
+ # #=> #<TracePoint:disabled>
14
+ #
15
+ # trace.enable
16
+ # #=> false
17
+ #
18
+ # 0 / 0
19
+ # #=> [5, :raise, #<ZeroDivisionError: divided by 0>]
20
+ #
21
+ # ## Events
22
+ #
23
+ # If you don't specify the type of events you want to listen for, TracePoint
24
+ # will include all available events.
25
+ #
26
+ # **Note** do not depend on current event set, as this list is subject to
27
+ # change. Instead, it is recommended you specify the type of events you want to
28
+ # use.
29
+ #
30
+ # To filter what is traced, you can pass any of the following as `events`:
31
+ #
32
+ # `:line`
33
+ # : execute code on a new line
34
+ # `:class`
35
+ # : start a class or module definition
36
+ # `:end`
37
+ # : finish a class or module definition
38
+ # `:call`
39
+ # : call a Ruby method
40
+ # `:return`
41
+ # : return from a Ruby method
42
+ # `:c_call`
43
+ # : call a C-language routine
44
+ # `:c_return`
45
+ # : return from a C-language routine
46
+ # `:raise`
47
+ # : raise an exception
48
+ # `:b_call`
49
+ # : event hook at block entry
50
+ # `:b_return`
51
+ # : event hook at block ending
52
+ # `:thread_begin`
53
+ # : event hook at thread beginning
54
+ # `:thread_end`
55
+ # : event hook at thread ending
56
+ # `:fiber_switch`
57
+ # : event hook at fiber switch
58
+ # `:script_compiled`
59
+ # : new Ruby code compiled (with `eval`, `load` or `require`)
60
+ #
61
+ #
62
+ class TracePoint < Object
63
+ # Returns a new TracePoint object, not enabled by default.
64
+ #
65
+ # Next, in order to activate the trace, you must use TracePoint#enable
66
+ #
67
+ # trace = TracePoint.new(:call) do |tp|
68
+ # p [tp.lineno, tp.defined_class, tp.method_id, tp.event]
69
+ # end
70
+ # #=> #<TracePoint:disabled>
71
+ #
72
+ # trace.enable
73
+ # #=> false
74
+ #
75
+ # puts "Hello, TracePoint!"
76
+ # # ...
77
+ # # [48, IRB::Notifier::AbstractNotifier, :printf, :call]
78
+ # # ...
79
+ #
80
+ # When you want to deactivate the trace, you must use TracePoint#disable
81
+ #
82
+ # trace.disable
83
+ #
84
+ # See TracePoint@Events for possible events and more information.
85
+ #
86
+ # A block must be given, otherwise an ArgumentError is raised.
87
+ #
88
+ # If the trace method isn't included in the given events filter, a RuntimeError
89
+ # is raised.
90
+ #
91
+ # TracePoint.trace(:line) do |tp|
92
+ # p tp.raised_exception
93
+ # end
94
+ # #=> RuntimeError: 'raised_exception' not supported by this event
95
+ #
96
+ # If the trace method is called outside block, a RuntimeError is raised.
97
+ #
98
+ # TracePoint.trace(:line) do |tp|
99
+ # $tp = tp
100
+ # end
101
+ # $tp.lineno #=> access from outside (RuntimeError)
102
+ #
103
+ # Access from other threads is also forbidden.
104
+ #
105
+ def initialize: (*Symbol events) { (TracePoint tp) -> void } -> void
106
+
107
+ # Returns internal information of TracePoint.
108
+ #
109
+ # The contents of the returned value are implementation specific. It may be
110
+ # changed in future.
111
+ #
112
+ # This method is only for debugging TracePoint itself.
113
+ #
114
+ def self.stat: () -> untyped
115
+
116
+ # Document-method: trace
117
+ #
118
+ # A convenience method for TracePoint.new, that activates the trace
119
+ # automatically.
120
+ #
121
+ # trace = TracePoint.trace(:call) { |tp| [tp.lineno, tp.event] }
122
+ # #=> #<TracePoint:enabled>
123
+ #
124
+ # trace.enabled? #=> true
125
+ #
126
+ def self.trace: (*Symbol events) { (TracePoint tp) -> void } -> TracePoint
127
+
128
+ # Return the generated binding object from event
129
+ #
130
+ def binding: () -> Binding
131
+
132
+ # Return the called name of the method being called
133
+ #
134
+ def callee_id: () -> Symbol
135
+
136
+ # Return class or module of the method being called.
137
+ #
138
+ # class C; def foo; end; end
139
+ # trace = TracePoint.new(:call) do |tp|
140
+ # p tp.defined_class #=> C
141
+ # end.enable do
142
+ # C.new.foo
143
+ # end
144
+ #
145
+ # If method is defined by a module, then that module is returned.
146
+ #
147
+ # module M; def foo; end; end
148
+ # class C; include M; end;
149
+ # trace = TracePoint.new(:call) do |tp|
150
+ # p tp.defined_class #=> M
151
+ # end.enable do
152
+ # C.new.foo
153
+ # end
154
+ #
155
+ # **Note:** #defined_class returns singleton class.
156
+ #
157
+ # 6th block parameter of Kernel#set_trace_func passes original class of attached
158
+ # by singleton class.
159
+ #
160
+ # **This is a difference between Kernel#set_trace_func and TracePoint.**
161
+ #
162
+ # class C; def self.foo; end; end
163
+ # trace = TracePoint.new(:call) do |tp|
164
+ # p tp.defined_class #=> #<Class:C>
165
+ # end.enable do
166
+ # C.foo
167
+ # end
168
+ #
169
+ def defined_class: () -> Module
170
+
171
+ # Deactivates the trace
172
+ #
173
+ # Return true if trace was enabled. Return false if trace was disabled.
174
+ #
175
+ # trace.enabled? #=> true
176
+ # trace.disable #=> true (previous status)
177
+ # trace.enabled? #=> false
178
+ # trace.disable #=> false
179
+ #
180
+ # If a block is given, the trace will only be disable within the scope of the
181
+ # block.
182
+ #
183
+ # trace.enabled?
184
+ # #=> true
185
+ #
186
+ # trace.disable do
187
+ # trace.enabled?
188
+ # # only disabled for this block
189
+ # end
190
+ #
191
+ # trace.enabled?
192
+ # #=> true
193
+ #
194
+ # Note: You cannot access event hooks within the block.
195
+ #
196
+ # trace.disable { p tp.lineno }
197
+ # #=> RuntimeError: access from outside
198
+ #
199
+ def disable: () -> bool
200
+ | () { () -> void } -> void
201
+
202
+ # Activates the trace.
203
+ #
204
+ # Returns `true` if trace was enabled. Returns `false` if trace was disabled.
205
+ #
206
+ # trace.enabled? #=> false
207
+ # trace.enable #=> false (previous state)
208
+ # # trace is enabled
209
+ # trace.enabled? #=> true
210
+ # trace.enable #=> true (previous state)
211
+ # # trace is still enabled
212
+ #
213
+ # If a block is given, the trace will only be enabled within the scope of the
214
+ # block.
215
+ #
216
+ # trace.enabled?
217
+ # #=> false
218
+ #
219
+ # trace.enable do
220
+ # trace.enabled?
221
+ # # only enabled for this block
222
+ # end
223
+ #
224
+ # trace.enabled?
225
+ # #=> false
226
+ #
227
+ # `target`, `target_line` and `target_thread` parameters are used to limit
228
+ # tracing only to specified code objects. `target` should be a code object for
229
+ # which RubyVM::InstructionSequence.of will return an instruction sequence.
230
+ #
231
+ # t = TracePoint.new(:line) { |tp| p tp }
232
+ #
233
+ # def m1
234
+ # p 1
235
+ # end
236
+ #
237
+ # def m2
238
+ # p 2
239
+ # end
240
+ #
241
+ # t.enable(target: method(:m1))
242
+ #
243
+ # m1
244
+ # # prints #<TracePoint:line@test.rb:5 in `m1'>
245
+ # m2
246
+ # # prints nothing
247
+ #
248
+ # Note: You cannot access event hooks within the `enable` block.
249
+ #
250
+ # trace.enable { p tp.lineno }
251
+ # #=> RuntimeError: access from outside
252
+ #
253
+ def enable: () -> bool
254
+ | () { () -> void } -> void
255
+
256
+ # The current status of the trace
257
+ #
258
+ def enabled?: () -> bool
259
+
260
+ # Return a string containing a human-readable TracePoint status.
261
+ #
262
+ def inspect: () -> String
263
+
264
+ # Line number of the event
265
+ #
266
+ def lineno: () -> Integer
267
+
268
+ # Return the name at the definition of the method being called
269
+ #
270
+ def method_id: () -> Symbol
271
+
272
+ # Path of the file being run
273
+ #
274
+ def path: () -> String
275
+
276
+ # Value from exception raised on the `:raise` event
277
+ #
278
+ def raised_exception: () -> untyped
279
+
280
+ # Return value from `:return`, `c_return`, and `b_return` event
281
+ #
282
+ def return_value: () -> untyped
283
+
284
+ # Return the trace object during event
285
+ #
286
+ # Same as TracePoint#binding:
287
+ # trace.binding.eval('self')
288
+ #
289
+ def `self`: () -> Binding
290
+ end
@@ -0,0 +1,46 @@
1
+ # The global value `true` is the only instance of class TrueClass and represents
2
+ # a logically true value in boolean expressions. The class provides operators
3
+ # allowing `true` to be used in logical expressions.
4
+ #
5
+ class TrueClass
6
+ public
7
+
8
+ def !: () -> bool
9
+
10
+ # And---Returns `false` if *obj* is `nil` or `false`, `true` otherwise.
11
+ #
12
+ def &: (nil) -> false
13
+ | (false) -> false
14
+ | (untyped obj) -> bool
15
+
16
+ # Case Equality -- For class Object, effectively the same as calling `#==`, but
17
+ # typically overridden by descendants to provide meaningful semantics in `case`
18
+ # statements.
19
+ #
20
+ def ===: (true) -> true
21
+ | (untyped obj) -> bool
22
+
23
+ # Exclusive Or---Returns `true` if *obj* is `nil` or `false`, `false` otherwise.
24
+ #
25
+ def ^: (nil) -> true
26
+ | (false) -> true
27
+ | (untyped obj) -> bool
28
+
29
+ alias inspect to_s
30
+
31
+ # The string representation of `true` is "true".
32
+ #
33
+ def to_s: () -> "true"
34
+
35
+ # Or---Returns `true`. As *obj* is an argument to a method call, it is always
36
+ # evaluated; there is no short-circuit evaluation in this case.
37
+ #
38
+ # true | puts("or")
39
+ # true || puts("logical or")
40
+ #
41
+ # *produces:*
42
+ #
43
+ # or
44
+ #
45
+ def |: (bool obj) -> bool
46
+ end
@@ -0,0 +1,153 @@
1
+ # Ruby supports two forms of objectified methods. Class Method is used to
2
+ # represent methods that are associated with a particular object: these method
3
+ # objects are bound to that object. Bound method objects for an object can be
4
+ # created using Object#method.
5
+ #
6
+ # Ruby also supports unbound methods; methods objects that are not associated
7
+ # with a particular object. These can be created either by calling
8
+ # Module#instance_method or by calling #unbind on a bound method object. The
9
+ # result of both of these is an UnboundMethod object.
10
+ #
11
+ # Unbound methods can only be called after they are bound to an object. That
12
+ # object must be a kind_of? the method's original class.
13
+ #
14
+ # class Square
15
+ # def area
16
+ # @side * @side
17
+ # end
18
+ # def initialize(side)
19
+ # @side = side
20
+ # end
21
+ # end
22
+ #
23
+ # area_un = Square.instance_method(:area)
24
+ #
25
+ # s = Square.new(12)
26
+ # area = area_un.bind(s)
27
+ # area.call #=> 144
28
+ #
29
+ # Unbound methods are a reference to the method at the time it was objectified:
30
+ # subsequent changes to the underlying class will not affect the unbound method.
31
+ #
32
+ # class Test
33
+ # def test
34
+ # :original
35
+ # end
36
+ # end
37
+ # um = Test.instance_method(:test)
38
+ # class Test
39
+ # def test
40
+ # :modified
41
+ # end
42
+ # end
43
+ # t = Test.new
44
+ # t.test #=> :modified
45
+ # um.bind(t).call #=> :original
46
+ #
47
+ class UnboundMethod
48
+ # Returns an indication of the number of arguments accepted by a method. Returns
49
+ # a nonnegative integer for methods that take a fixed number of arguments. For
50
+ # Ruby methods that take a variable number of arguments, returns -n-1, where n
51
+ # is the number of required arguments. Keyword arguments will be considered as a
52
+ # single additional argument, that argument being mandatory if any keyword
53
+ # argument is mandatory. For methods written in C, returns -1 if the call takes
54
+ # a variable number of arguments.
55
+ #
56
+ # class C
57
+ # def one; end
58
+ # def two(a); end
59
+ # def three(*a); end
60
+ # def four(a, b); end
61
+ # def five(a, b, *c); end
62
+ # def six(a, b, *c, &d); end
63
+ # def seven(a, b, x:0); end
64
+ # def eight(x:, y:); end
65
+ # def nine(x:, y:, **z); end
66
+ # def ten(*a, x:, y:); end
67
+ # end
68
+ # c = C.new
69
+ # c.method(:one).arity #=> 0
70
+ # c.method(:two).arity #=> 1
71
+ # c.method(:three).arity #=> -1
72
+ # c.method(:four).arity #=> 2
73
+ # c.method(:five).arity #=> -3
74
+ # c.method(:six).arity #=> -3
75
+ # c.method(:seven).arity #=> -3
76
+ # c.method(:eight).arity #=> 1
77
+ # c.method(:nine).arity #=> 1
78
+ # c.method(:ten).arity #=> -2
79
+ #
80
+ # "cat".method(:size).arity #=> 0
81
+ # "cat".method(:replace).arity #=> 1
82
+ # "cat".method(:squeeze).arity #=> -1
83
+ # "cat".method(:count).arity #=> -1
84
+ #
85
+ def arity: () -> Integer
86
+
87
+ # Bind *umeth* to *obj*. If Klass was the class from which *umeth* was obtained,
88
+ # `obj.kind_of?(Klass)` must be true.
89
+ #
90
+ # class A
91
+ # def test
92
+ # puts "In test, class = #{self.class}"
93
+ # end
94
+ # end
95
+ # class B < A
96
+ # end
97
+ # class C < B
98
+ # end
99
+ #
100
+ # um = B.instance_method(:test)
101
+ # bm = um.bind(C.new)
102
+ # bm.call
103
+ # bm = um.bind(B.new)
104
+ # bm.call
105
+ # bm = um.bind(A.new)
106
+ # bm.call
107
+ #
108
+ # *produces:*
109
+ #
110
+ # In test, class = C
111
+ # In test, class = B
112
+ # prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)
113
+ # from prog.rb:16
114
+ #
115
+ def bind: (untyped obj) -> Method
116
+
117
+ # Returns the name of the method.
118
+ #
119
+ def name: () -> Symbol
120
+
121
+ # Returns the class or module that defines the method. See also Method#receiver.
122
+ #
123
+ # (1..3).method(:map).owner #=> Enumerable
124
+ #
125
+ def owner: () -> Module
126
+
127
+ # Returns the parameter information of this method.
128
+ #
129
+ # def foo(bar); end
130
+ # method(:foo).parameters #=> [[:req, :bar]]
131
+ #
132
+ # def foo(bar, baz, bat, &blk); end
133
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:req, :bat], [:block, :blk]]
134
+ #
135
+ # def foo(bar, *args); end
136
+ # method(:foo).parameters #=> [[:req, :bar], [:rest, :args]]
137
+ #
138
+ # def foo(bar, baz, *args, &blk); end
139
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:rest, :args], [:block, :blk]]
140
+ #
141
+ def parameters: () -> ::Array[[ Symbol, Symbol ]]
142
+ | () -> ::Array[[ Symbol ]]
143
+
144
+ # Returns the Ruby source filename and line number containing this method or nil
145
+ # if this method was not defined in Ruby (i.e. native).
146
+ #
147
+ def source_location: () -> [ String, Integer ]?
148
+
149
+ # Returns a Method of superclass which would be called when super is used or nil
150
+ # if there is no method on superclass.
151
+ #
152
+ def super_method: () -> UnboundMethod?
153
+ end