rbs 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
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