rbs 0.13.1 → 0.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.gitignore +0 -1
  4. data/CHANGELOG.md +7 -2
  5. data/Gemfile +3 -0
  6. data/README.md +8 -2
  7. data/Steepfile +1 -0
  8. data/bin/annotate-with-rdoc +1 -1
  9. data/bin/setup +0 -2
  10. data/docs/CONTRIBUTING.md +1 -0
  11. data/goodcheck.yml +22 -5
  12. data/lib/rbs/ast/comment.rb +1 -1
  13. data/lib/rbs/definition_builder.rb +4 -5
  14. data/lib/rbs/environment.rb +1 -1
  15. data/lib/rbs/namespace.rb +1 -1
  16. data/lib/rbs/parser.rb +3146 -0
  17. data/lib/rbs/parser.y +7 -2
  18. data/lib/rbs/test/setup_helper.rb +4 -4
  19. data/lib/rbs/test/type_check.rb +2 -2
  20. data/lib/rbs/type_name.rb +1 -1
  21. data/lib/rbs/variance_calculator.rb +1 -1
  22. data/lib/rbs/version.rb +1 -1
  23. data/lib/rbs/writer.rb +1 -1
  24. data/sig/constant.rbs +2 -2
  25. data/sig/constant_table.rbs +10 -10
  26. data/sig/declarations.rbs +1 -1
  27. data/sig/definition.rbs +1 -1
  28. data/sig/namespace.rbs +3 -3
  29. data/sig/parser.rbs +25 -0
  30. data/sig/substitution.rbs +3 -3
  31. data/sig/typename.rbs +1 -1
  32. data/sig/types.rbs +1 -1
  33. data/sig/writer.rbs +15 -15
  34. data/stdlib/benchmark/benchmark.rbs +2 -2
  35. data/stdlib/builtin/basic_object.rbs +54 -54
  36. data/stdlib/builtin/binding.rbs +42 -42
  37. data/stdlib/builtin/class.rbs +33 -33
  38. data/stdlib/builtin/complex.rbs +90 -90
  39. data/stdlib/builtin/encoding.rbs +33 -33
  40. data/stdlib/builtin/enumerable.rbs +32 -32
  41. data/stdlib/builtin/enumerator.rbs +35 -35
  42. data/stdlib/builtin/errors.rbs +1 -1
  43. data/stdlib/builtin/exception.rbs +50 -50
  44. data/stdlib/builtin/false_class.rbs +6 -6
  45. data/stdlib/builtin/fiber.rbs +14 -14
  46. data/stdlib/builtin/fiber_error.rbs +1 -1
  47. data/stdlib/builtin/float.rbs +161 -161
  48. data/stdlib/builtin/gc.rbs +1 -1
  49. data/stdlib/builtin/io.rbs +83 -83
  50. data/stdlib/builtin/kernel.rbs +69 -69
  51. data/stdlib/builtin/match_data.rbs +1 -1
  52. data/stdlib/builtin/method.rbs +19 -19
  53. data/stdlib/builtin/nil_class.rbs +20 -20
  54. data/stdlib/builtin/numeric.rbs +101 -101
  55. data/stdlib/builtin/object.rbs +172 -172
  56. data/stdlib/builtin/proc.rbs +91 -91
  57. data/stdlib/builtin/range.rbs +2 -4
  58. data/stdlib/builtin/rational.rbs +83 -83
  59. data/stdlib/builtin/signal.rbs +7 -7
  60. data/stdlib/builtin/string.rbs +4 -4
  61. data/stdlib/builtin/string_io.rbs +1 -1
  62. data/stdlib/builtin/thread.rbs +185 -185
  63. data/stdlib/builtin/thread_group.rbs +2 -2
  64. data/stdlib/builtin/true_class.rbs +9 -9
  65. data/stdlib/builtin/warning.rbs +1 -1
  66. data/stdlib/date/date.rbs +2 -2
  67. data/stdlib/find/find.rbs +10 -10
  68. data/stdlib/pathname/pathname.rbs +1 -1
  69. data/stdlib/tmpdir/tmpdir.rbs +12 -12
  70. metadata +3 -2
@@ -1,68 +1,68 @@
1
1
  # Object is the default root of all Ruby objects. Object inherits from
2
2
  # BasicObject which allows creating alternate object hierarchies. Methods on
3
3
  # Object are available to all classes unless explicitly overridden.
4
- #
4
+ #
5
5
  # Object mixes in the Kernel module, making the built-in kernel functions
6
6
  # globally accessible. Although the instance methods of Object are defined by
7
7
  # the Kernel module, we have chosen to document them here for clarity.
8
- #
8
+ #
9
9
  # When referencing constants in classes inheriting from Object you do not need
10
10
  # to use the full namespace. For example, referencing `File` inside `YourClass`
11
11
  # will find the top-level File class.
12
- #
12
+ #
13
13
  # In the descriptions of Object's methods, the parameter *symbol* refers to a
14
14
  # symbol, which is either a quoted string or a Symbol (such as `:name`).
15
- #
15
+ #
16
16
  class Object < BasicObject
17
17
  include Kernel
18
18
 
19
19
  # Returns true if two objects do not match (using the *=~* method), otherwise
20
20
  # false.
21
- #
21
+ #
22
22
  def !~: (untyped) -> bool
23
23
 
24
24
  # Returns 0 if `obj` and `other` are the same object or `obj == other`,
25
25
  # otherwise nil.
26
- #
26
+ #
27
27
  # The `<=>` is used by various methods to compare objects, for example
28
28
  # Enumerable#sort, Enumerable#max etc.
29
- #
29
+ #
30
30
  # Your implementation of `<=>` should return one of the following values: -1, 0,
31
31
  # 1 or nil. -1 means self is smaller than other. 0 means self is equal to other.
32
32
  # 1 means self is bigger than other. Nil means the two values could not be
33
33
  # compared.
34
- #
34
+ #
35
35
  # When you define `<=>`, you can include Comparable to gain the methods `<=`,
36
36
  # `<`, `==`, `>=`, `>` and `between?`.
37
- #
37
+ #
38
38
  def <=>: (untyped) -> Integer?
39
39
 
40
40
  # Case Equality -- For class Object, effectively the same as calling `#==`, but
41
41
  # typically overridden by descendants to provide meaningful semantics in `case`
42
42
  # statements.
43
- #
43
+ #
44
44
  def ===: (untyped) -> bool
45
45
 
46
46
  # This method is deprecated.
47
- #
47
+ #
48
48
  # This is not only unuseful but also troublesome because it may hide a type
49
49
  # error.
50
- #
50
+ #
51
51
  def =~: (untyped) -> bool
52
52
 
53
53
  # Returns the class of *obj*. This method must always be called with an explicit
54
54
  # receiver, as `class` is also a reserved word in Ruby.
55
- #
55
+ #
56
56
  # 1.class #=> Integer
57
57
  # self.class #=> Object
58
- #
58
+ #
59
59
  def `class`: () -> untyped
60
60
 
61
61
  # Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
62
62
  # but not the objects they reference. `clone` copies the frozen (unless :freeze
63
63
  # keyword argument is given with a false value) and tainted state of *obj*. See
64
64
  # also the discussion under `Object#dup`.
65
- #
65
+ #
66
66
  # class Klass
67
67
  # attr_accessor :str
68
68
  # end
@@ -72,16 +72,16 @@ class Object < BasicObject
72
72
  # s2.str[1,4] = "i" #=> "i"
73
73
  # s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
74
74
  # s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
75
- #
75
+ #
76
76
  # This method may have class-specific behavior. If so, that behavior will be
77
77
  # documented under the #`initialize_copy` method of the class.
78
- #
78
+ #
79
79
  def clone: (?freeze: bool) -> self
80
80
 
81
81
  # Defines a singleton method in the receiver. The *method* parameter can be a
82
82
  # `Proc`, a `Method` or an `UnboundMethod` object. If a block is specified, it
83
83
  # is used as the method body.
84
- #
84
+ #
85
85
  # class A
86
86
  # class << self
87
87
  # def class_name
@@ -93,95 +93,95 @@ class Object < BasicObject
93
93
  # "I am: #{class_name}"
94
94
  # end
95
95
  # A.who_am_i # ==> "I am: A"
96
- #
96
+ #
97
97
  # guy = "Bob"
98
98
  # guy.define_singleton_method(:hello) { "#{self}: Hello there!" }
99
99
  # guy.hello #=> "Bob: Hello there!"
100
- #
100
+ #
101
101
  def define_singleton_method: (Symbol, Method | UnboundMethod) -> Symbol
102
102
  | (Symbol) { (*untyped) -> untyped } -> Symbol
103
103
 
104
104
  # Prints *obj* on the given port (default `$>`). Equivalent to:
105
- #
105
+ #
106
106
  # def display(port=$>)
107
107
  # port.write self
108
108
  # nil
109
109
  # end
110
- #
110
+ #
111
111
  # For example:
112
- #
112
+ #
113
113
  # 1.display
114
114
  # "cat".display
115
115
  # [ 4, 5, 6 ].display
116
116
  # puts
117
- #
117
+ #
118
118
  # *produces:*
119
- #
119
+ #
120
120
  # 1cat[4, 5, 6]
121
- #
121
+ #
122
122
  def display: (?_Writeable port) -> void
123
123
 
124
124
  # Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
125
125
  # but not the objects they reference. `dup` copies the tainted state of *obj*.
126
- #
126
+ #
127
127
  # This method may have class-specific behavior. If so, that behavior will be
128
128
  # documented under the #`initialize_copy` method of the class.
129
- #
129
+ #
130
130
  # ### on dup vs clone
131
- #
131
+ #
132
132
  # In general, `clone` and `dup` may have different semantics in descendant
133
133
  # classes. While `clone` is used to duplicate an object, including its internal
134
134
  # state, `dup` typically uses the class of the descendant object to create the
135
135
  # new instance.
136
- #
136
+ #
137
137
  # When using #dup, any modules that the object has been extended with will not
138
138
  # be copied.
139
- #
139
+ #
140
140
  # class Klass
141
141
  # attr_accessor :str
142
142
  # end
143
- #
143
+ #
144
144
  # module Foo
145
145
  # def foo; 'foo'; end
146
146
  # end
147
- #
147
+ #
148
148
  # s1 = Klass.new #=> #<Klass:0x401b3a38>
149
149
  # s1.extend(Foo) #=> #<Klass:0x401b3a38>
150
150
  # s1.foo #=> "foo"
151
- #
151
+ #
152
152
  # s2 = s1.clone #=> #<Klass:0x401b3a38>
153
153
  # s2.foo #=> "foo"
154
- #
154
+ #
155
155
  # s3 = s1.dup #=> #<Klass:0x401b3a38>
156
156
  # s3.foo #=> NoMethodError: undefined method `foo' for #<Klass:0x401b3a38>
157
- #
157
+ #
158
158
  def dup: () -> self
159
159
 
160
160
  # Creates a new Enumerator which will enumerate by calling `method` on `obj`,
161
161
  # passing `args` if any.
162
- #
162
+ #
163
163
  # If a block is given, it will be used to calculate the size of the enumerator
164
164
  # without the need to iterate it (see Enumerator#size).
165
- #
165
+ #
166
166
  # ### Examples
167
- #
167
+ #
168
168
  # str = "xyz"
169
- #
169
+ #
170
170
  # enum = str.enum_for(:each_byte)
171
171
  # enum.each { |b| puts b }
172
172
  # # => 120
173
173
  # # => 121
174
174
  # # => 122
175
- #
175
+ #
176
176
  # # protect an array from being modified by some_method
177
177
  # a = [1, 2, 3]
178
178
  # some_method(a.to_enum)
179
- #
179
+ #
180
180
  # It is typical to call to_enum when defining methods for a generic Enumerable,
181
181
  # in case no block is passed.
182
- #
182
+ #
183
183
  # Here is such an example, with parameter passing and a sizing block:
184
- #
184
+ #
185
185
  # module Enumerable
186
186
  # # a generic method to repeat the values of any enumerable
187
187
  # def repeat(n)
@@ -197,42 +197,42 @@ class Object < BasicObject
197
197
  # end
198
198
  # end
199
199
  # end
200
- #
200
+ #
201
201
  # %i[hello world].repeat(2) { |w| puts w }
202
202
  # # => Prints 'hello', 'hello', 'world', 'world'
203
203
  # enum = (1..14).repeat(3)
204
204
  # # => returns an Enumerator when called without a block
205
205
  # enum.first(4) # => [1, 1, 1, 2]
206
206
  # enum.size # => 42
207
- #
207
+ #
208
208
  def enum_for: (Symbol method, *untyped args) ?{ (*untyped args) -> Integer } -> Enumerator[untyped, untyped]
209
209
  | (*untyped args) ?{ (*untyped args) -> Integer } -> Enumerator[untyped, untyped]
210
210
 
211
211
  # Creates a new Enumerator which will enumerate by calling `method` on `obj`,
212
212
  # passing `args` if any.
213
- #
213
+ #
214
214
  # If a block is given, it will be used to calculate the size of the enumerator
215
215
  # without the need to iterate it (see Enumerator#size).
216
- #
216
+ #
217
217
  # ### Examples
218
- #
218
+ #
219
219
  # str = "xyz"
220
- #
220
+ #
221
221
  # enum = str.enum_for(:each_byte)
222
222
  # enum.each { |b| puts b }
223
223
  # # => 120
224
224
  # # => 121
225
225
  # # => 122
226
- #
226
+ #
227
227
  # # protect an array from being modified by some_method
228
228
  # a = [1, 2, 3]
229
229
  # some_method(a.to_enum)
230
- #
230
+ #
231
231
  # It is typical to call to_enum when defining methods for a generic Enumerable,
232
232
  # in case no block is passed.
233
- #
233
+ #
234
234
  # Here is such an example, with parameter passing and a sizing block:
235
- #
235
+ #
236
236
  # module Enumerable
237
237
  # # a generic method to repeat the values of any enumerable
238
238
  # def repeat(n)
@@ -248,89 +248,89 @@ class Object < BasicObject
248
248
  # end
249
249
  # end
250
250
  # end
251
- #
251
+ #
252
252
  # %i[hello world].repeat(2) { |w| puts w }
253
253
  # # => Prints 'hello', 'hello', 'world', 'world'
254
254
  # enum = (1..14).repeat(3)
255
255
  # # => returns an Enumerator when called without a block
256
256
  # enum.first(4) # => [1, 1, 1, 2]
257
257
  # enum.size # => 42
258
- #
258
+ #
259
259
  alias to_enum enum_for
260
260
 
261
261
  # Equality --- At the `Object` level, `==` returns `true` only if `obj` and
262
262
  # `other` are the same object. Typically, this method is overridden in
263
263
  # descendant classes to provide class-specific meaning.
264
- #
264
+ #
265
265
  # Unlike `==`, the `equal?` method should never be overridden by subclasses as
266
266
  # it is used to determine object identity (that is, `a.equal?(b)` if and only if
267
267
  # `a` is the same object as `b`):
268
- #
268
+ #
269
269
  # obj = "a"
270
270
  # other = obj.dup
271
- #
271
+ #
272
272
  # obj == other #=> true
273
273
  # obj.equal? other #=> false
274
274
  # obj.equal? obj #=> true
275
- #
275
+ #
276
276
  # The `eql?` method returns `true` if `obj` and `other` refer to the same hash
277
277
  # key. This is used by Hash to test members for equality. For objects of class
278
278
  # `Object`, `eql?` is synonymous with `==`. Subclasses normally continue this
279
279
  # tradition by aliasing `eql?` to their overridden `==` method, but there are
280
280
  # exceptions. `Numeric` types, for example, perform type conversion across
281
281
  # `==`, but not across `eql?`, so:
282
- #
282
+ #
283
283
  # 1 == 1.0 #=> true
284
284
  # 1.eql? 1.0 #=> false
285
- #
285
+ #
286
286
  def eql?: (untyped) -> bool
287
287
 
288
288
  # Adds to *obj* the instance methods from each module given as a parameter.
289
- #
289
+ #
290
290
  # module Mod
291
291
  # def hello
292
292
  # "Hello from Mod.\n"
293
293
  # end
294
294
  # end
295
- #
295
+ #
296
296
  # class Klass
297
297
  # def hello
298
298
  # "Hello from Klass.\n"
299
299
  # end
300
300
  # end
301
- #
301
+ #
302
302
  # k = Klass.new
303
303
  # k.hello #=> "Hello from Klass.\n"
304
304
  # k.extend(Mod) #=> #<Klass:0x401b3bc8>
305
305
  # k.hello #=> "Hello from Mod.\n"
306
- #
306
+ #
307
307
  def `extend`: (*Module) -> self
308
308
 
309
309
  # Prevents further modifications to *obj*. A `RuntimeError` will be raised if
310
310
  # modification is attempted. There is no way to unfreeze a frozen object. See
311
311
  # also `Object#frozen?`.
312
- #
312
+ #
313
313
  # This method returns self.
314
- #
314
+ #
315
315
  # a = [ "a", "b", "c" ]
316
316
  # a.freeze
317
317
  # a << "z"
318
- #
318
+ #
319
319
  # *produces:*
320
- #
320
+ #
321
321
  # prog.rb:3:in `<<': can't modify frozen Array (FrozenError)
322
322
  # from prog.rb:3
323
- #
323
+ #
324
324
  # Objects of the following classes are always frozen: Integer, Float, Symbol.
325
- #
325
+ #
326
326
  def freeze: () -> self
327
327
 
328
328
  # Returns the freeze status of *obj*.
329
- #
329
+ #
330
330
  # a = [ "a", "b", "c" ]
331
331
  # a.freeze #=> ["a", "b", "c"]
332
332
  # a.frozen? #=> true
333
- #
333
+ #
334
334
  def frozen?: () -> bool
335
335
 
336
336
  def hash: () -> Integer
@@ -341,40 +341,40 @@ class Object < BasicObject
341
341
  # each of them). User defined classes should override this method to provide a
342
342
  # better representation of *obj*. When overriding this method, it should return
343
343
  # a string whose encoding is compatible with the default external encoding.
344
- #
344
+ #
345
345
  # [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]"
346
346
  # Time.new.inspect #=> "2008-03-08 19:43:39 +0900"
347
- #
347
+ #
348
348
  # class Foo
349
349
  # end
350
350
  # Foo.new.inspect #=> "#<Foo:0x0300c868>"
351
- #
351
+ #
352
352
  # class Bar
353
353
  # def initialize
354
354
  # @bar = 1
355
355
  # end
356
356
  # end
357
357
  # Bar.new.inspect #=> "#<Bar:0x0300c868 @bar=1>"
358
- #
358
+ #
359
359
  def inspect: () -> String
360
360
 
361
361
  # Returns `true` if *obj* is an instance of the given class. See also
362
362
  # `Object#kind_of?`.
363
- #
363
+ #
364
364
  # class A; end
365
365
  # class B < A; end
366
366
  # class C < B; end
367
- #
367
+ #
368
368
  # b = B.new
369
369
  # b.instance_of? A #=> false
370
370
  # b.instance_of? B #=> true
371
371
  # b.instance_of? C #=> false
372
- #
372
+ #
373
373
  def instance_of?: (Module) -> bool
374
374
 
375
375
  # Returns `true` if the given instance variable is defined in *obj*. String
376
376
  # arguments are converted to symbols.
377
- #
377
+ #
378
378
  # class Fred
379
379
  # def initialize(p1, p2)
380
380
  # @a, @b = p1, p2
@@ -384,7 +384,7 @@ class Object < BasicObject
384
384
  # fred.instance_variable_defined?(:@a) #=> true
385
385
  # fred.instance_variable_defined?("@b") #=> true
386
386
  # fred.instance_variable_defined?("@c") #=> false
387
- #
387
+ #
388
388
  def instance_variable_defined?: (String | Symbol var) -> bool
389
389
 
390
390
  # Returns the value of the given instance variable, or nil if the instance
@@ -392,7 +392,7 @@ class Object < BasicObject
392
392
  # regular instance variables. Throws a `NameError` exception if the supplied
393
393
  # symbol is not valid as an instance variable name. String arguments are
394
394
  # converted to symbols.
395
- #
395
+ #
396
396
  # class Fred
397
397
  # def initialize(p1, p2)
398
398
  # @a, @b = p1, p2
@@ -401,7 +401,7 @@ class Object < BasicObject
401
401
  # fred = Fred.new('cat', 99)
402
402
  # fred.instance_variable_get(:@a) #=> "cat"
403
403
  # fred.instance_variable_get("@b") #=> 99
404
- #
404
+ #
405
405
  def instance_variable_get: (String | Symbol var) -> untyped
406
406
 
407
407
  # Sets the instance variable named by *symbol* to the given object, thereby
@@ -409,7 +409,7 @@ class Object < BasicObject
409
409
  # encapsulation. The variable does not have to exist prior to this call. If the
410
410
  # instance variable name is passed as a string, that string is converted to a
411
411
  # symbol.
412
- #
412
+ #
413
413
  # class Fred
414
414
  # def initialize(p1, p2)
415
415
  # @a, @b = p1, p2
@@ -419,12 +419,12 @@ class Object < BasicObject
419
419
  # fred.instance_variable_set(:@a, 'dog') #=> "dog"
420
420
  # fred.instance_variable_set(:@c, 'cat') #=> "cat"
421
421
  # fred.inspect #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
422
- #
422
+ #
423
423
  def instance_variable_set: [X] (String | Symbol var, X value) -> X
424
424
 
425
425
  # Returns an array of instance variable names for the receiver. Note that simply
426
426
  # defining an accessor does not create the corresponding instance variable.
427
- #
427
+ #
428
428
  # class Fred
429
429
  # attr_accessor :a1
430
430
  # def initialize
@@ -432,67 +432,67 @@ class Object < BasicObject
432
432
  # end
433
433
  # end
434
434
  # Fred.new.instance_variables #=> [:@iv]
435
- #
435
+ #
436
436
  def instance_variables: () -> Array[Symbol]
437
437
 
438
438
  # Returns `true` if *class* is the class of *obj*, or if *class* is one of the
439
439
  # superclasses of *obj* or modules included in *obj*.
440
- #
440
+ #
441
441
  # module M; end
442
442
  # class A
443
443
  # include M
444
444
  # end
445
445
  # class B < A; end
446
446
  # class C < B; end
447
- #
447
+ #
448
448
  # b = B.new
449
449
  # b.is_a? A #=> true
450
450
  # b.is_a? B #=> true
451
451
  # b.is_a? C #=> false
452
452
  # b.is_a? M #=> true
453
- #
453
+ #
454
454
  # b.kind_of? A #=> true
455
455
  # b.kind_of? B #=> true
456
456
  # b.kind_of? C #=> false
457
457
  # b.kind_of? M #=> true
458
- #
458
+ #
459
459
  def is_a?: (Module) -> bool
460
460
 
461
461
  # Returns `true` if *class* is the class of *obj*, or if *class* is one of the
462
462
  # superclasses of *obj* or modules included in *obj*.
463
- #
463
+ #
464
464
  # module M; end
465
465
  # class A
466
466
  # include M
467
467
  # end
468
468
  # class B < A; end
469
469
  # class C < B; end
470
- #
470
+ #
471
471
  # b = B.new
472
472
  # b.is_a? A #=> true
473
473
  # b.is_a? B #=> true
474
474
  # b.is_a? C #=> false
475
475
  # b.is_a? M #=> true
476
- #
476
+ #
477
477
  # b.kind_of? A #=> true
478
478
  # b.kind_of? B #=> true
479
479
  # b.kind_of? C #=> false
480
480
  # b.kind_of? M #=> true
481
- #
481
+ #
482
482
  alias kind_of? is_a?
483
483
 
484
484
  # Returns the receiver.
485
- #
485
+ #
486
486
  # string = "my string"
487
487
  # string.itself.object_id == string.object_id #=> true
488
- #
488
+ #
489
489
  def `itself`: () -> self
490
490
 
491
491
  # Looks up the named method as a receiver in *obj*, returning a `Method` object
492
492
  # (or raising `NameError`). The `Method` object acts as a closure in *obj*'s
493
493
  # object instance, so instance variables and the value of `self` remain
494
494
  # available.
495
- #
495
+ #
496
496
  # class Demo
497
497
  # def initialize(n)
498
498
  # @iv = n
@@ -501,27 +501,27 @@ class Object < BasicObject
501
501
  # "Hello, @iv = #{@iv}"
502
502
  # end
503
503
  # end
504
- #
504
+ #
505
505
  # k = Demo.new(99)
506
506
  # m = k.method(:hello)
507
507
  # m.call #=> "Hello, @iv = 99"
508
- #
508
+ #
509
509
  # l = Demo.new('Fred')
510
510
  # m = l.method("hello")
511
511
  # m.call #=> "Hello, @iv = Fred"
512
- #
512
+ #
513
513
  # Note that `Method` implements `to_proc` method, which means it can be used
514
514
  # with iterators.
515
- #
515
+ #
516
516
  # [ 1, 2, 3 ].each(&method(:puts)) # => prints 3 lines to stdout
517
- #
517
+ #
518
518
  # out = File.open('test.txt', 'w')
519
519
  # [ 1, 2, 3 ].each(&out.method(:puts)) # => prints 3 lines to file
520
- #
520
+ #
521
521
  # require 'date'
522
522
  # %w[2017-03-01 2017-03-02].collect(&Date.method(:parse))
523
523
  # #=> [#<Date: 2017-03-01 ((2457814j,0s,0n),+0s,2299161j)>, #<Date: 2017-03-02 ((2457815j,0s,0n),+0s,2299161j)>]
524
- #
524
+ #
525
525
  def method: (String | Symbol name) -> Method
526
526
 
527
527
  # Returns a list of the names of public and protected methods of *obj*. This
@@ -529,7 +529,7 @@ class Object < BasicObject
529
529
  # parameter is `false`, it returns an array of *obj<i>'s public and protected
530
530
  # singleton methods, the array will not include methods in modules included in
531
531
  # <i>obj*.
532
- #
532
+ #
533
533
  # class Klass
534
534
  # def klass_method()
535
535
  # end
@@ -539,69 +539,69 @@ class Object < BasicObject
539
539
  # # :==~, :!, :eql?
540
540
  # # :hash, :<=>, :class, :singleton_class]
541
541
  # k.methods.length #=> 56
542
- #
542
+ #
543
543
  # k.methods(false) #=> []
544
544
  # def k.singleton_method; end
545
545
  # k.methods(false) #=> [:singleton_method]
546
- #
546
+ #
547
547
  # module M123; def m123; end end
548
548
  # k.extend M123
549
549
  # k.methods(false) #=> [:singleton_method]
550
- #
550
+ #
551
551
  def methods: () -> Array[Symbol]
552
552
 
553
553
  # Only the object *nil* responds `true` to `nil?`.
554
- #
554
+ #
555
555
  # Object.new.nil? #=> false
556
556
  # nil.nil? #=> true
557
- #
557
+ #
558
558
  def `nil?`: () -> bool
559
559
 
560
560
  # Returns an integer identifier for `obj`.
561
- #
561
+ #
562
562
  # The same number will be returned on all calls to `object_id` for a given
563
563
  # object, and no two active objects will share an id.
564
- #
564
+ #
565
565
  # Note: that some objects of builtin classes are reused for optimization. This
566
566
  # is the case for immediate values and frozen string literals.
567
- #
567
+ #
568
568
  # Immediate values are not passed by reference but are passed by value: `nil`,
569
569
  # `true`, `false`, Fixnums, Symbols, and some Floats.
570
- #
570
+ #
571
571
  # Object.new.object_id == Object.new.object_id # => false
572
572
  # (21 * 2).object_id == (21 * 2).object_id # => true
573
573
  # "hello".object_id == "hello".object_id # => false
574
574
  # "hi".freeze.object_id == "hi".freeze.object_id # => true
575
- #
575
+ #
576
576
  def object_id: () -> Integer
577
577
 
578
578
  # Returns the list of private methods accessible to *obj*. If the *all*
579
579
  # parameter is set to `false`, only those methods in the receiver will be
580
580
  # listed.
581
- #
581
+ #
582
582
  def private_methods: () -> Array[Symbol]
583
583
 
584
584
  # Returns the list of protected methods accessible to *obj*. If the *all*
585
585
  # parameter is set to `false`, only those methods in the receiver will be
586
586
  # listed.
587
- #
587
+ #
588
588
  def protected_methods: () -> Array[Symbol]
589
589
 
590
590
  # Similar to *method*, searches public method only.
591
- #
591
+ #
592
592
  def public_method: (name name) -> Method
593
593
 
594
594
  # Invokes the method identified by *symbol*, passing it any arguments specified.
595
595
  # Unlike send, public_send calls public methods only. When the method is
596
596
  # identified by a string, the string is converted to a symbol.
597
- #
597
+ #
598
598
  # 1.public_send(:puts, "hello") # causes NoMethodError
599
- #
599
+ #
600
600
  def `public_send`: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
601
601
 
602
602
  # Removes the named instance variable from *obj*, returning that variable's
603
603
  # value. String arguments are converted to symbols.
604
- #
604
+ #
605
605
  # class Dummy
606
606
  # attr_reader :var
607
607
  # def initialize
@@ -615,29 +615,29 @@ class Object < BasicObject
615
615
  # d.var #=> 99
616
616
  # d.remove #=> 99
617
617
  # d.var #=> nil
618
- #
618
+ #
619
619
  def remove_instance_variable: (name name) -> untyped
620
620
 
621
621
  # Returns `true` if *obj* responds to the given method. Private and protected
622
622
  # methods are included in the search only if the optional second parameter
623
623
  # evaluates to `true`.
624
- #
624
+ #
625
625
  # If the method is not implemented, as Process.fork on Windows, File.lchmod on
626
626
  # GNU/Linux, etc., false is returned.
627
- #
627
+ #
628
628
  # If the method is not defined, `respond_to_missing?` method is called and the
629
629
  # result is returned.
630
- #
630
+ #
631
631
  # When the method name parameter is given as a string, the string is converted
632
632
  # to a symbol.
633
- #
633
+ #
634
634
  def respond_to?: (name name, ?bool include_all) -> bool
635
635
 
636
636
  # Invokes the method identified by *symbol*, passing it any arguments specified.
637
637
  # You can use `__send__` if the name `send` clashes with an existing method in
638
638
  # *obj*. When the method is identified by a string, the string is converted to a
639
639
  # symbol.
640
- #
640
+ #
641
641
  # class Klass
642
642
  # def hello(*args)
643
643
  # "Hello " + args.join(' ')
@@ -645,24 +645,24 @@ class Object < BasicObject
645
645
  # end
646
646
  # k = Klass.new
647
647
  # k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
648
- #
648
+ #
649
649
  def `send`: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
650
650
 
651
651
  # Returns the singleton class of *obj*. This method creates a new singleton
652
652
  # class if *obj* does not have one.
653
- #
653
+ #
654
654
  # If *obj* is `nil`, `true`, or `false`, it returns NilClass, TrueClass, or
655
655
  # FalseClass, respectively. If *obj* is an Integer, a Float or a Symbol, it
656
656
  # raises a TypeError.
657
- #
657
+ #
658
658
  # Object.new.singleton_class #=> #<Class:#<Object:0xb7ce1e24>>
659
659
  # String.singleton_class #=> #<Class:String>
660
660
  # nil.singleton_class #=> NilClass
661
- #
661
+ #
662
662
  def `singleton_class`: () -> Class
663
663
 
664
664
  # Similar to *method*, searches singleton method only.
665
- #
665
+ #
666
666
  # class Demo
667
667
  # def initialize(n)
668
668
  # @iv = n
@@ -671,7 +671,7 @@ class Object < BasicObject
671
671
  # "Hello, @iv = #{@iv}"
672
672
  # end
673
673
  # end
674
- #
674
+ #
675
675
  # k = Demo.new(99)
676
676
  # def k.hi
677
677
  # "Hi, @iv = #{@iv}"
@@ -679,99 +679,99 @@ class Object < BasicObject
679
679
  # m = k.singleton_method(:hi)
680
680
  # m.call #=> "Hi, @iv = 99"
681
681
  # m = k.singleton_method(:hello) #=> NameError
682
- #
682
+ #
683
683
  def singleton_method: (name name) -> Method
684
684
 
685
685
  # Returns an array of the names of singleton methods for *obj*. If the optional
686
686
  # *all* parameter is true, the list will include methods in modules included in
687
687
  # *obj*. Only public and protected singleton methods are returned.
688
- #
688
+ #
689
689
  # module Other
690
690
  # def three() end
691
691
  # end
692
- #
692
+ #
693
693
  # class Single
694
694
  # def Single.four() end
695
695
  # end
696
- #
696
+ #
697
697
  # a = Single.new
698
- #
698
+ #
699
699
  # def a.one()
700
700
  # end
701
- #
701
+ #
702
702
  # class << a
703
703
  # include Other
704
704
  # def two()
705
705
  # end
706
706
  # end
707
- #
707
+ #
708
708
  # Single.singleton_methods #=> [:four]
709
709
  # a.singleton_methods(false) #=> [:two, :one]
710
710
  # a.singleton_methods #=> [:two, :one, :three]
711
- #
711
+ #
712
712
  def singleton_methods: () -> Array[Symbol]
713
713
 
714
714
  # Mark the object as tainted.
715
- #
715
+ #
716
716
  # Objects that are marked as tainted will be restricted from various built-in
717
717
  # methods. This is to prevent insecure data, such as command-line arguments or
718
718
  # strings read from Kernel#gets, from inadvertently compromising the user's
719
719
  # system.
720
- #
720
+ #
721
721
  # To check whether an object is tainted, use #tainted?.
722
- #
722
+ #
723
723
  # You should only untaint a tainted object if your code has inspected it and
724
724
  # determined that it is safe. To do so use #untaint.
725
- #
725
+ #
726
726
  def taint: () -> self
727
727
 
728
728
  # Deprecated method that is equivalent to #taint.
729
- #
729
+ #
730
730
  alias untrust taint
731
731
 
732
732
  # Returns true if the object is tainted.
733
- #
733
+ #
734
734
  # See #taint for more information.
735
- #
735
+ #
736
736
  def tainted?: () -> bool
737
737
 
738
738
  # Deprecated method that is equivalent to #tainted?.
739
- #
739
+ #
740
740
  alias untrusted? tainted?
741
741
 
742
742
  # Yields self to the block, and then returns self. The primary purpose of this
743
743
  # method is to "tap into" a method chain, in order to perform operations on
744
744
  # intermediate results within the chain.
745
- #
745
+ #
746
746
  # (1..10) .tap {|x| puts "original: #{x}" }
747
747
  # .to_a .tap {|x| puts "array: #{x}" }
748
748
  # .select {|x| x.even? } .tap {|x| puts "evens: #{x}" }
749
749
  # .map {|x| x*x } .tap {|x| puts "squares: #{x}" }
750
- #
750
+ #
751
751
  def tap: () { (self) -> void } -> self
752
752
 
753
753
  # Yields self to the block and returns the result of the block.
754
- #
754
+ #
755
755
  # 3.next.then {|x| x**x }.to_s #=> "256"
756
756
  # "my string".yield_self {|s| s.upcase } #=> "MY STRING"
757
- #
757
+ #
758
758
  # Good usage for `yield_self` is value piping in method chains:
759
- #
759
+ #
760
760
  # require 'open-uri'
761
761
  # require 'json'
762
- #
762
+ #
763
763
  # construct_url(arguments).
764
764
  # yield_self {|url| open(url).read }.
765
765
  # yield_self {|response| JSON.parse(response) }
766
- #
766
+ #
767
767
  # When called without block, the method returns `Enumerator`, which can be used,
768
768
  # for example, for conditional circuit-breaking:
769
- #
769
+ #
770
770
  # # meets condition, no-op
771
771
  # 1.yield_self.detect(&:odd?) # => 1
772
772
  # # does not meet condition, drop value
773
773
  # 2.yield_self.detect(&:odd?) # => nil
774
- #
774
+ #
775
775
  def `yield_self`: [X] () { (self) -> X } -> X
776
776
  | () -> Enumerator[self, untyped]
777
777
 
@@ -779,41 +779,41 @@ class Object < BasicObject
779
779
  # class and an encoding of the object id. As a special case, the top-level
780
780
  # object that is the initial execution context of Ruby programs returns
781
781
  # ``main''.
782
- #
782
+ #
783
783
  def to_s: () -> String
784
784
 
785
785
  # Removes the tainted mark from the object.
786
- #
786
+ #
787
787
  # See #taint for more information.
788
- #
788
+ #
789
789
  def untaint: () -> self
790
790
 
791
791
  # Deprecated method that is equivalent to #untaint.
792
- #
792
+ #
793
793
  alias trust untaint
794
794
 
795
795
  # Yields self to the block and returns the result of the block.
796
- #
796
+ #
797
797
  # 3.next.then {|x| x**x }.to_s #=> "256"
798
798
  # "my string".yield_self {|s| s.upcase } #=> "MY STRING"
799
- #
799
+ #
800
800
  # Good usage for `yield_self` is value piping in method chains:
801
- #
801
+ #
802
802
  # require 'open-uri'
803
803
  # require 'json'
804
- #
804
+ #
805
805
  # construct_url(arguments).
806
806
  # yield_self {|url| open(url).read }.
807
807
  # yield_self {|response| JSON.parse(response) }
808
- #
808
+ #
809
809
  # When called without block, the method returns `Enumerator`, which can be used,
810
810
  # for example, for conditional circuit-breaking:
811
- #
811
+ #
812
812
  # # meets condition, no-op
813
813
  # 1.yield_self.detect(&:odd?) # => 1
814
814
  # # does not meet condition, drop value
815
815
  # 2.yield_self.detect(&:odd?) # => nil
816
- #
816
+ #
817
817
  alias then yield_self
818
818
  end
819
819