rbs 3.2.2 → 3.3.0.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +1 -1
  3. data/.github/workflows/ruby.yml +7 -2
  4. data/CHANGELOG.md +85 -0
  5. data/Gemfile.lock +14 -14
  6. data/README.md +11 -2
  7. data/Rakefile +10 -7
  8. data/Steepfile +7 -7
  9. data/core/basic_object.rbs +7 -7
  10. data/core/binding.rbs +3 -3
  11. data/core/builtin.rbs +171 -5
  12. data/core/constants.rbs +17 -17
  13. data/core/dir.rbs +3 -3
  14. data/core/encoding.rbs +434 -628
  15. data/core/enumerator.rbs +37 -0
  16. data/core/exception.rbs +11 -11
  17. data/core/false_class.rbs +5 -11
  18. data/core/fiber.rbs +3 -3
  19. data/core/file_test.rbs +28 -26
  20. data/core/kernel.rbs +900 -21
  21. data/core/marshal.rbs +24 -14
  22. data/core/match_data.rbs +8 -8
  23. data/core/math.rbs +57 -53
  24. data/core/method.rbs +3 -1
  25. data/core/module.rbs +38 -36
  26. data/core/nil_class.rbs +7 -13
  27. data/core/object.rbs +3 -966
  28. data/core/process.rbs +3 -3
  29. data/core/ractor.rbs +2 -2
  30. data/core/rb_config.rbs +64 -43
  31. data/core/regexp.rbs +3 -3
  32. data/core/signal.rbs +10 -4
  33. data/core/struct.rbs +1 -1
  34. data/core/thread.rbs +7 -7
  35. data/core/thread_group.rbs +9 -9
  36. data/core/true_class.rbs +5 -11
  37. data/core/unbound_method.rbs +56 -7
  38. data/core/warning.rbs +33 -0
  39. data/docs/collection.md +56 -6
  40. data/docs/data_and_struct.md +57 -0
  41. data/docs/stdlib.md +61 -2
  42. data/docs/syntax.md +123 -2
  43. data/ext/rbs_extension/lexer.c +624 -569
  44. data/ext/rbs_extension/lexer.h +1 -0
  45. data/ext/rbs_extension/lexer.re +1 -0
  46. data/ext/rbs_extension/lexstate.c +1 -0
  47. data/ext/rbs_extension/parser.c +6 -0
  48. data/goodcheck.yml +2 -2
  49. data/lib/rbs/annotate/formatter.rb +13 -3
  50. data/lib/rbs/annotate/rdoc_source.rb +10 -1
  51. data/lib/rbs/cli/colored_io.rb +48 -0
  52. data/lib/rbs/cli/diff.rb +80 -0
  53. data/lib/rbs/cli.rb +151 -16
  54. data/lib/rbs/collection/config/lockfile.rb +0 -25
  55. data/lib/rbs/collection/config/lockfile_generator.rb +0 -6
  56. data/lib/rbs/collection/installer.rb +1 -1
  57. data/lib/rbs/collection/sources/git.rb +6 -4
  58. data/lib/rbs/collection/sources/local.rb +7 -5
  59. data/lib/rbs/diff.rb +104 -0
  60. data/lib/rbs/environment.rb +1 -1
  61. data/lib/rbs/method_type.rb +23 -0
  62. data/lib/rbs/prototype/rb.rb +2 -9
  63. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  64. data/lib/rbs/prototype/runtime/value_object_generator.rb +236 -0
  65. data/lib/rbs/prototype/runtime.rb +234 -150
  66. data/lib/rbs/sorter.rb +144 -117
  67. data/lib/rbs/test/guaranteed.rb +31 -0
  68. data/lib/rbs/test/type_check.rb +4 -4
  69. data/lib/rbs/test.rb +3 -0
  70. data/lib/rbs/types.rb +184 -3
  71. data/lib/rbs/version.rb +1 -1
  72. data/lib/rbs/writer.rb +4 -4
  73. data/lib/rbs.rb +1 -0
  74. data/rbs.gemspec +1 -0
  75. data/sig/annotate/formatter.rbs +2 -2
  76. data/sig/annotate/rdoc_annotater.rbs +1 -1
  77. data/sig/cli/colored_io.rbs +15 -0
  78. data/sig/cli/diff.rbs +21 -0
  79. data/sig/cli.rbs +2 -0
  80. data/sig/collection/config/lockfile.rbs +0 -6
  81. data/sig/diff.rbs +23 -0
  82. data/sig/errors.rbs +1 -5
  83. data/sig/method_types.rbs +6 -0
  84. data/sig/prototype/runtime.rbs +108 -0
  85. data/sig/rdoc/rbs.rbs +4 -0
  86. data/sig/shims/bundler.rbs +5 -0
  87. data/sig/sorter.rbs +23 -5
  88. data/sig/types.rbs +29 -0
  89. data/stdlib/benchmark/0/benchmark.rbs +1 -1
  90. data/stdlib/cgi/0/core.rbs +2 -2
  91. data/stdlib/did_you_mean/0/did_you_mean.rbs +2 -2
  92. data/stdlib/digest/0/digest.rbs +1 -1
  93. data/stdlib/fileutils/0/fileutils.rbs +1 -1
  94. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  95. data/stdlib/io-console/0/io-console.rbs +1 -1
  96. data/stdlib/json/0/json.rbs +37 -0
  97. data/stdlib/logger/0/logger.rbs +2 -2
  98. data/stdlib/net-http/0/manifest.yaml +1 -1
  99. data/stdlib/net-http/0/net-http.rbs +16 -63
  100. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  101. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  102. data/stdlib/openssl/0/openssl.rbs +1 -1
  103. data/stdlib/pp/0/manifest.yaml +2 -0
  104. data/stdlib/pp/0/pp.rbs +301 -0
  105. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  106. data/stdlib/psych/0/manifest.yaml +3 -0
  107. data/stdlib/psych/0/psych.rbs +391 -0
  108. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  109. data/stdlib/rdoc/0/code_object.rbs +55 -0
  110. data/stdlib/rdoc/0/comment.rbs +60 -0
  111. data/stdlib/rdoc/0/context.rbs +153 -0
  112. data/stdlib/rdoc/0/markup.rbs +119 -0
  113. data/stdlib/rdoc/0/parser.rbs +56 -0
  114. data/stdlib/rdoc/0/rdoc.rbs +0 -372
  115. data/stdlib/rdoc/0/ri.rbs +17 -0
  116. data/stdlib/rdoc/0/store.rbs +48 -0
  117. data/stdlib/rdoc/0/top_level.rbs +97 -0
  118. data/stdlib/socket/0/basic_socket.rbs +1 -1
  119. data/stdlib/socket/0/socket.rbs +1 -1
  120. data/stdlib/uri/0/common.rbs +1 -1
  121. data/stdlib/yaml/0/manifest.yaml +1 -2
  122. data/stdlib/yaml/0/yaml.rbs +1 -199
  123. metadata +46 -9
  124. data/sig/shims/pp.rbs +0 -3
  125. data/sig/shims.rbs +0 -47
data/core/object.rbs CHANGED
@@ -107,971 +107,8 @@
107
107
  #
108
108
  class Object < BasicObject
109
109
  include Kernel
110
-
111
- # <!--
112
- # rdoc-file=object.c
113
- # - obj !~ other -> true or false
114
- # -->
115
- # Returns true if two objects do not match (using the *=~* method), otherwise
116
- # false.
117
- #
118
- def !~: (untyped) -> bool
119
-
120
- # <!--
121
- # rdoc-file=object.c
122
- # - obj <=> other -> 0 or nil
123
- # -->
124
- # Returns 0 if `obj` and `other` are the same object or `obj == other`,
125
- # otherwise nil.
126
- #
127
- # The #<=> is used by various methods to compare objects, for example
128
- # Enumerable#sort, Enumerable#max etc.
129
- #
130
- # Your implementation of #<=> should return one of the following values: -1, 0,
131
- # 1 or nil. -1 means self is smaller than other. 0 means self is equal to other.
132
- # 1 means self is bigger than other. Nil means the two values could not be
133
- # compared.
134
- #
135
- # When you define #<=>, you can include Comparable to gain the methods #<=, #<,
136
- # #==, #>=, #> and #between?.
137
- #
138
- def <=>: (untyped) -> Integer?
139
-
140
- # <!--
141
- # rdoc-file=object.c
142
- # - obj === other -> true or false
143
- # -->
144
- # Case Equality -- For class Object, effectively the same as calling `#==`, but
145
- # typically overridden by descendants to provide meaningful semantics in `case`
146
- # statements.
147
- #
148
- def ===: (untyped) -> bool
149
-
150
- # Returns the class of *obj*. This method must always be called with an explicit
151
- # receiver, as `class` is also a reserved word in Ruby.
152
- #
153
- # 1.class #=> Integer
154
- # self.class #=> Object
155
- #
156
- def class: () -> untyped
157
-
158
- # Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
159
- # but not the objects they reference. `clone` copies the frozen (unless :freeze
160
- # keyword argument is given with a false value) and tainted state of *obj*. See
161
- # also the discussion under `Object#dup`.
162
- #
163
- # class Klass
164
- # attr_accessor :str
165
- # end
166
- # s1 = Klass.new #=> #<Klass:0x401b3a38>
167
- # s1.str = "Hello" #=> "Hello"
168
- # s2 = s1.clone #=> #<Klass:0x401b3998 @str="Hello">
169
- # s2.str[1,4] = "i" #=> "i"
170
- # s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
171
- # s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
172
- #
173
- # This method may have class-specific behavior. If so, that behavior will be
174
- # documented under the #`initialize_copy` method of the class.
175
- #
176
- def clone: (?freeze: bool?) -> self
177
-
178
- # <!--
179
- # rdoc-file=proc.c
180
- # - define_singleton_method(symbol, method) -> symbol
181
- # - define_singleton_method(symbol) { block } -> symbol
182
- # -->
183
- # Defines a public singleton method in the receiver. The *method* parameter can
184
- # be a `Proc`, a `Method` or an `UnboundMethod` object. If a block is specified,
185
- # it is used as the method body. If a block or a method has parameters, they're
186
- # used as method parameters.
187
- #
188
- # class A
189
- # class << self
190
- # def class_name
191
- # to_s
192
- # end
193
- # end
194
- # end
195
- # A.define_singleton_method(:who_am_i) do
196
- # "I am: #{class_name}"
197
- # end
198
- # A.who_am_i # ==> "I am: A"
199
- #
200
- # guy = "Bob"
201
- # guy.define_singleton_method(:hello) { "#{self}: Hello there!" }
202
- # guy.hello #=> "Bob: Hello there!"
203
- #
204
- # chris = "Chris"
205
- # chris.define_singleton_method(:greet) {|greeting| "#{greeting}, I'm Chris!" }
206
- # chris.greet("Hi") #=> "Hi, I'm Chris!"
207
- #
208
- def define_singleton_method: (name, Method | UnboundMethod | Proc method) -> Symbol
209
- | (name) { (*untyped) -> untyped } -> Symbol
210
-
211
- # <!--
212
- # rdoc-file=io.c
213
- # - display(port = $>) -> nil
214
- # -->
215
- # Writes `self` on the given port:
216
- #
217
- # 1.display
218
- # "cat".display
219
- # [ 4, 5, 6 ].display
220
- # puts
221
- #
222
- # Output:
223
- #
224
- # 1cat[4, 5, 6]
225
- #
226
- def display: (?_Writer port) -> void
227
-
228
- # <!--
229
- # rdoc-file=object.c
230
- # - obj.dup -> an_object
231
- # -->
232
- # Produces a shallow copy of *obj*---the instance variables of *obj* are copied,
233
- # but not the objects they reference.
234
- #
235
- # This method may have class-specific behavior. If so, that behavior will be
236
- # documented under the #`initialize_copy` method of the class.
237
- #
238
- # ### on dup vs clone
239
- #
240
- # In general, #clone and #dup may have different semantics in descendant
241
- # classes. While #clone is used to duplicate an object, including its internal
242
- # state, #dup typically uses the class of the descendant object to create the
243
- # new instance.
244
- #
245
- # When using #dup, any modules that the object has been extended with will not
246
- # be copied.
247
- #
248
- # class Klass
249
- # attr_accessor :str
250
- # end
251
- #
252
- # module Foo
253
- # def foo; 'foo'; end
254
- # end
255
- #
256
- # s1 = Klass.new #=> #<Klass:0x401b3a38>
257
- # s1.extend(Foo) #=> #<Klass:0x401b3a38>
258
- # s1.foo #=> "foo"
259
- #
260
- # s2 = s1.clone #=> #<Klass:0x401be280>
261
- # s2.foo #=> "foo"
262
- #
263
- # s3 = s1.dup #=> #<Klass:0x401c1084>
264
- # s3.foo #=> NoMethodError: undefined method `foo' for #<Klass:0x401c1084>
265
- #
266
- def dup: () -> self
267
-
268
- # <!-- rdoc-file=enumerator.c -->
269
- # Creates a new Enumerator which will enumerate by calling `method` on `obj`,
270
- # passing `args` if any. What was *yielded* by method becomes values of
271
- # enumerator.
272
- #
273
- # If a block is given, it will be used to calculate the size of the enumerator
274
- # without the need to iterate it (see Enumerator#size).
275
- #
276
- # ### Examples
277
- #
278
- # str = "xyz"
279
- #
280
- # enum = str.enum_for(:each_byte)
281
- # enum.each { |b| puts b }
282
- # # => 120
283
- # # => 121
284
- # # => 122
285
- #
286
- # # protect an array from being modified by some_method
287
- # a = [1, 2, 3]
288
- # some_method(a.to_enum)
289
- #
290
- # # String#split in block form is more memory-effective:
291
- # very_large_string.split("|") { |chunk| return chunk if chunk.include?('DATE') }
292
- # # This could be rewritten more idiomatically with to_enum:
293
- # very_large_string.to_enum(:split, "|").lazy.grep(/DATE/).first
294
- #
295
- # It is typical to call to_enum when defining methods for a generic Enumerable,
296
- # in case no block is passed.
297
- #
298
- # Here is such an example, with parameter passing and a sizing block:
299
- #
300
- # module Enumerable
301
- # # a generic method to repeat the values of any enumerable
302
- # def repeat(n)
303
- # raise ArgumentError, "#{n} is negative!" if n < 0
304
- # unless block_given?
305
- # return to_enum(__method__, n) do # __method__ is :repeat here
306
- # sz = size # Call size and multiply by n...
307
- # sz * n if sz # but return nil if size itself is nil
308
- # end
309
- # end
310
- # each do |*val|
311
- # n.times { yield *val }
312
- # end
313
- # end
314
- # end
315
- #
316
- # %i[hello world].repeat(2) { |w| puts w }
317
- # # => Prints 'hello', 'hello', 'world', 'world'
318
- # enum = (1..14).repeat(3)
319
- # # => returns an Enumerator when called without a block
320
- # enum.first(4) # => [1, 1, 1, 2]
321
- # enum.size # => 42
322
- #
323
- def enum_for: (Symbol method, *untyped, **untyped) ?{ (*untyped, **untyped) -> Integer } -> Enumerator[untyped, untyped]
324
- | () ?{ () -> Integer } -> Enumerator[untyped, self]
325
-
326
- # <!--
327
- # rdoc-file=enumerator.c
328
- # - obj.to_enum(method = :each, *args) -> enum
329
- # - obj.enum_for(method = :each, *args) -> enum
330
- # - obj.to_enum(method = :each, *args) {|*args| block} -> enum
331
- # - obj.enum_for(method = :each, *args){|*args| block} -> enum
332
- # -->
333
- # Creates a new Enumerator which will enumerate by calling `method` on `obj`,
334
- # passing `args` if any. What was *yielded* by method becomes values of
335
- # enumerator.
336
- #
337
- # If a block is given, it will be used to calculate the size of the enumerator
338
- # without the need to iterate it (see Enumerator#size).
339
- #
340
- # ### Examples
341
- #
342
- # str = "xyz"
343
- #
344
- # enum = str.enum_for(:each_byte)
345
- # enum.each { |b| puts b }
346
- # # => 120
347
- # # => 121
348
- # # => 122
349
- #
350
- # # protect an array from being modified by some_method
351
- # a = [1, 2, 3]
352
- # some_method(a.to_enum)
353
- #
354
- # # String#split in block form is more memory-effective:
355
- # very_large_string.split("|") { |chunk| return chunk if chunk.include?('DATE') }
356
- # # This could be rewritten more idiomatically with to_enum:
357
- # very_large_string.to_enum(:split, "|").lazy.grep(/DATE/).first
358
- #
359
- # It is typical to call to_enum when defining methods for a generic Enumerable,
360
- # in case no block is passed.
361
- #
362
- # Here is such an example, with parameter passing and a sizing block:
363
- #
364
- # module Enumerable
365
- # # a generic method to repeat the values of any enumerable
366
- # def repeat(n)
367
- # raise ArgumentError, "#{n} is negative!" if n < 0
368
- # unless block_given?
369
- # return to_enum(__method__, n) do # __method__ is :repeat here
370
- # sz = size # Call size and multiply by n...
371
- # sz * n if sz # but return nil if size itself is nil
372
- # end
373
- # end
374
- # each do |*val|
375
- # n.times { yield *val }
376
- # end
377
- # end
378
- # end
379
- #
380
- # %i[hello world].repeat(2) { |w| puts w }
381
- # # => Prints 'hello', 'hello', 'world', 'world'
382
- # enum = (1..14).repeat(3)
383
- # # => returns an Enumerator when called without a block
384
- # enum.first(4) # => [1, 1, 1, 2]
385
- # enum.size # => 42
386
- #
387
- alias to_enum enum_for
388
-
389
- # <!--
390
- # rdoc-file=object.c
391
- # - obj == other -> true or false
392
- # - obj.equal?(other) -> true or false
393
- # - obj.eql?(other) -> true or false
394
- # -->
395
- # Equality --- At the Object level, #== returns `true` only if `obj` and `other`
396
- # are the same object. Typically, this method is overridden in descendant
397
- # classes to provide class-specific meaning.
398
- #
399
- # Unlike #==, the #equal? method should never be overridden by subclasses as it
400
- # is used to determine object identity (that is, `a.equal?(b)` if and only if
401
- # `a` is the same object as `b`):
402
- #
403
- # obj = "a"
404
- # other = obj.dup
405
- #
406
- # obj == other #=> true
407
- # obj.equal? other #=> false
408
- # obj.equal? obj #=> true
409
- #
410
- # The #eql? method returns `true` if `obj` and `other` refer to the same hash
411
- # key. This is used by Hash to test members for equality. For any pair of
412
- # objects where #eql? returns `true`, the #hash value of both objects must be
413
- # equal. So any subclass that overrides #eql? should also override #hash
414
- # appropriately.
415
- #
416
- # For objects of class Object, #eql? is synonymous with #==. Subclasses
417
- # normally continue this tradition by aliasing #eql? to their overridden #==
418
- # method, but there are exceptions. Numeric types, for example, perform type
419
- # conversion across #==, but not across #eql?, so:
420
- #
421
- # 1 == 1.0 #=> true
422
- # 1.eql? 1.0 #=> false
423
- #
424
- def eql?: (untyped) -> bool
425
-
426
- # <!--
427
- # rdoc-file=eval.c
428
- # - obj.extend(module, ...) -> obj
429
- # -->
430
- # Adds to *obj* the instance methods from each module given as a parameter.
431
- #
432
- # module Mod
433
- # def hello
434
- # "Hello from Mod.\n"
435
- # end
436
- # end
437
- #
438
- # class Klass
439
- # def hello
440
- # "Hello from Klass.\n"
441
- # end
442
- # end
443
- #
444
- # k = Klass.new
445
- # k.hello #=> "Hello from Klass.\n"
446
- # k.extend(Mod) #=> #<Klass:0x401b3bc8>
447
- # k.hello #=> "Hello from Mod.\n"
448
- #
449
- def extend: (*Module) -> self
450
-
451
- # <!--
452
- # rdoc-file=object.c
453
- # - obj.freeze -> obj
454
- # -->
455
- # Prevents further modifications to *obj*. A FrozenError will be raised if
456
- # modification is attempted. There is no way to unfreeze a frozen object. See
457
- # also Object#frozen?.
458
- #
459
- # This method returns self.
460
- #
461
- # a = [ "a", "b", "c" ]
462
- # a.freeze
463
- # a << "z"
464
- #
465
- # *produces:*
466
- #
467
- # prog.rb:3:in `<<': can't modify frozen Array (FrozenError)
468
- # from prog.rb:3
469
- #
470
- # Objects of the following classes are always frozen: Integer, Float, Symbol.
471
- #
472
- def freeze: () -> self
473
-
474
- # Returns the freeze status of *obj*.
475
- #
476
- # a = [ "a", "b", "c" ]
477
- # a.freeze #=> ["a", "b", "c"]
478
- # a.frozen? #=> true
479
- #
480
- def frozen?: () -> bool
481
-
482
- # <!--
483
- # rdoc-file=object.c
484
- # - obj.hash -> integer
485
- # -->
486
- # Generates an Integer hash value for this object. This function must have the
487
- # property that `a.eql?(b)` implies `a.hash == b.hash`.
488
- #
489
- # The hash value is used along with #eql? by the Hash class to determine if two
490
- # objects reference the same hash key. Any hash value that exceeds the capacity
491
- # of an Integer will be truncated before being used.
492
- #
493
- # The hash value for an object may not be identical across invocations or
494
- # implementations of Ruby. If you need a stable identifier across Ruby
495
- # invocations and implementations you will need to generate one with a custom
496
- # method.
497
- #
498
- # Certain core classes such as Integer use built-in hash calculations and do not
499
- # call the #hash method when used as a hash key.
500
- #
501
- # When implementing your own #hash based on multiple values, the best practice
502
- # is to combine the class and any values using the hash code of an array:
503
- #
504
- # For example:
505
- #
506
- # def hash
507
- # [self.class, a, b, c].hash
508
- # end
509
- #
510
- # The reason for this is that the Array#hash method already has logic for safely
511
- # and efficiently combining multiple hash values.
512
- #
513
- def hash: () -> Integer
514
-
515
- # <!--
516
- # rdoc-file=object.c
517
- # - obj.inspect -> string
518
- # -->
519
- # Returns a string containing a human-readable representation of *obj*. The
520
- # default #inspect shows the object's class name, an encoding of its memory
521
- # address, and a list of the instance variables and their values (by calling
522
- # #inspect on each of them). User defined classes should override this method
523
- # to provide a better representation of *obj*. When overriding this method, it
524
- # should return a string whose encoding is compatible with the default external
525
- # encoding.
526
- #
527
- # [ 1, 2, 3..4, 'five' ].inspect #=> "[1, 2, 3..4, \"five\"]"
528
- # Time.new.inspect #=> "2008-03-08 19:43:39 +0900"
529
- #
530
- # class Foo
531
- # end
532
- # Foo.new.inspect #=> "#<Foo:0x0300c868>"
533
- #
534
- # class Bar
535
- # def initialize
536
- # @bar = 1
537
- # end
538
- # end
539
- # Bar.new.inspect #=> "#<Bar:0x0300c868 @bar=1>"
540
- #
541
- def inspect: () -> String
542
-
543
- # <!--
544
- # rdoc-file=object.c
545
- # - obj.instance_of?(class) -> true or false
546
- # -->
547
- # Returns `true` if *obj* is an instance of the given class. See also
548
- # Object#kind_of?.
549
- #
550
- # class A; end
551
- # class B < A; end
552
- # class C < B; end
553
- #
554
- # b = B.new
555
- # b.instance_of? A #=> false
556
- # b.instance_of? B #=> true
557
- # b.instance_of? C #=> false
558
- #
559
- def instance_of?: (Module) -> bool
560
-
561
- # <!--
562
- # rdoc-file=object.c
563
- # - obj.instance_variable_defined?(symbol) -> true or false
564
- # - obj.instance_variable_defined?(string) -> true or false
565
- # -->
566
- # Returns `true` if the given instance variable is defined in *obj*. String
567
- # arguments are converted to symbols.
568
- #
569
- # class Fred
570
- # def initialize(p1, p2)
571
- # @a, @b = p1, p2
572
- # end
573
- # end
574
- # fred = Fred.new('cat', 99)
575
- # fred.instance_variable_defined?(:@a) #=> true
576
- # fred.instance_variable_defined?("@b") #=> true
577
- # fred.instance_variable_defined?("@c") #=> false
578
- #
579
- def instance_variable_defined?: (String | Symbol var) -> bool
580
-
581
- # <!--
582
- # rdoc-file=object.c
583
- # - obj.instance_variable_get(symbol) -> obj
584
- # - obj.instance_variable_get(string) -> obj
585
- # -->
586
- # Returns the value of the given instance variable, or nil if the instance
587
- # variable is not set. The `@` part of the variable name should be included for
588
- # regular instance variables. Throws a NameError exception if the supplied
589
- # symbol is not valid as an instance variable name. String arguments are
590
- # converted to symbols.
591
- #
592
- # class Fred
593
- # def initialize(p1, p2)
594
- # @a, @b = p1, p2
595
- # end
596
- # end
597
- # fred = Fred.new('cat', 99)
598
- # fred.instance_variable_get(:@a) #=> "cat"
599
- # fred.instance_variable_get("@b") #=> 99
600
- #
601
- def instance_variable_get: (String | Symbol var) -> untyped
602
-
603
- # <!--
604
- # rdoc-file=object.c
605
- # - obj.instance_variable_set(symbol, obj) -> obj
606
- # - obj.instance_variable_set(string, obj) -> obj
607
- # -->
608
- # Sets the instance variable named by *symbol* to the given object. This may
609
- # circumvent the encapsulation intended by the author of the class, so it should
610
- # be used with care. The variable does not have to exist prior to this call. If
611
- # the instance variable name is passed as a string, that string is converted to
612
- # a symbol.
613
- #
614
- # class Fred
615
- # def initialize(p1, p2)
616
- # @a, @b = p1, p2
617
- # end
618
- # end
619
- # fred = Fred.new('cat', 99)
620
- # fred.instance_variable_set(:@a, 'dog') #=> "dog"
621
- # fred.instance_variable_set(:@c, 'cat') #=> "cat"
622
- # fred.inspect #=> "#<Fred:0x401b3da8 @a=\"dog\", @b=99, @c=\"cat\">"
623
- #
624
- def instance_variable_set: [X] (String | Symbol var, X value) -> X
625
-
626
- # <!--
627
- # rdoc-file=object.c
628
- # - obj.instance_variables -> array
629
- # -->
630
- # Returns an array of instance variable names for the receiver. Note that simply
631
- # defining an accessor does not create the corresponding instance variable.
632
- #
633
- # class Fred
634
- # attr_accessor :a1
635
- # def initialize
636
- # @iv = 3
637
- # end
638
- # end
639
- # Fred.new.instance_variables #=> [:@iv]
640
- #
641
- def instance_variables: () -> Array[Symbol]
642
-
643
- # <!-- rdoc-file=object.c -->
644
- # Returns `true` if *class* is the class of *obj*, or if *class* is one of the
645
- # superclasses of *obj* or modules included in *obj*.
646
- #
647
- # module M; end
648
- # class A
649
- # include M
650
- # end
651
- # class B < A; end
652
- # class C < B; end
653
- #
654
- # b = B.new
655
- # b.is_a? A #=> true
656
- # b.is_a? B #=> true
657
- # b.is_a? C #=> false
658
- # b.is_a? M #=> true
659
- #
660
- # b.kind_of? A #=> true
661
- # b.kind_of? B #=> true
662
- # b.kind_of? C #=> false
663
- # b.kind_of? M #=> true
664
- #
665
- def is_a?: (Module) -> bool
666
-
667
- # <!--
668
- # rdoc-file=object.c
669
- # - obj.is_a?(class) -> true or false
670
- # - obj.kind_of?(class) -> true or false
671
- # -->
672
- # Returns `true` if *class* is the class of *obj*, or if *class* is one of the
673
- # superclasses of *obj* or modules included in *obj*.
674
- #
675
- # module M; end
676
- # class A
677
- # include M
678
- # end
679
- # class B < A; end
680
- # class C < B; end
681
- #
682
- # b = B.new
683
- # b.is_a? A #=> true
684
- # b.is_a? B #=> true
685
- # b.is_a? C #=> false
686
- # b.is_a? M #=> true
687
- #
688
- # b.kind_of? A #=> true
689
- # b.kind_of? B #=> true
690
- # b.kind_of? C #=> false
691
- # b.kind_of? M #=> true
692
- #
693
- alias kind_of? is_a?
694
-
695
- # <!--
696
- # rdoc-file=object.c
697
- # - obj.itself -> obj
698
- # -->
699
- # Returns the receiver.
700
- #
701
- # string = "my string"
702
- # string.itself.object_id == string.object_id #=> true
703
- #
704
- def itself: () -> self
705
-
706
- # <!--
707
- # rdoc-file=proc.c
708
- # - obj.method(sym) -> method
709
- # -->
710
- # Looks up the named method as a receiver in *obj*, returning a Method object
711
- # (or raising NameError). The Method object acts as a closure in *obj*'s object
712
- # instance, so instance variables and the value of `self` remain available.
713
- #
714
- # class Demo
715
- # def initialize(n)
716
- # @iv = n
717
- # end
718
- # def hello()
719
- # "Hello, @iv = #{@iv}"
720
- # end
721
- # end
722
- #
723
- # k = Demo.new(99)
724
- # m = k.method(:hello)
725
- # m.call #=> "Hello, @iv = 99"
726
- #
727
- # l = Demo.new('Fred')
728
- # m = l.method("hello")
729
- # m.call #=> "Hello, @iv = Fred"
730
- #
731
- # Note that Method implements `to_proc` method, which means it can be used with
732
- # iterators.
733
- #
734
- # [ 1, 2, 3 ].each(&method(:puts)) # => prints 3 lines to stdout
735
- #
736
- # out = File.open('test.txt', 'w')
737
- # [ 1, 2, 3 ].each(&out.method(:puts)) # => prints 3 lines to file
738
- #
739
- # require 'date'
740
- # %w[2017-03-01 2017-03-02].collect(&Date.method(:parse))
741
- # #=> [#<Date: 2017-03-01 ((2457814j,0s,0n),+0s,2299161j)>, #<Date: 2017-03-02 ((2457815j,0s,0n),+0s,2299161j)>]
742
- #
743
- def method: (String | Symbol name) -> Method
744
-
745
- # <!--
746
- # rdoc-file=object.c
747
- # - obj.methods(regular=true) -> array
748
- # -->
749
- # Returns a list of the names of public and protected methods of *obj*. This
750
- # will include all the methods accessible in *obj*'s ancestors. If the optional
751
- # parameter is `false`, it returns an array of *obj*'s public and protected
752
- # singleton methods, the array will not include methods in modules included in
753
- # *obj*.
754
- #
755
- # class Klass
756
- # def klass_method()
757
- # end
758
- # end
759
- # k = Klass.new
760
- # k.methods[0..9] #=> [:klass_method, :nil?, :===,
761
- # # :==~, :!, :eql?
762
- # # :hash, :<=>, :class, :singleton_class]
763
- # k.methods.length #=> 56
764
- #
765
- # k.methods(false) #=> []
766
- # def k.singleton_method; end
767
- # k.methods(false) #=> [:singleton_method]
768
- #
769
- # module M123; def m123; end end
770
- # k.extend M123
771
- # k.methods(false) #=> [:singleton_method]
772
- #
773
- def methods: () -> Array[Symbol]
774
-
775
- # <!--
776
- # rdoc-file=object.c
777
- # - obj.nil? -> true or false
778
- # -->
779
- # Only the object *nil* responds `true` to `nil?`.
780
- #
781
- # Object.new.nil? #=> false
782
- # nil.nil? #=> true
783
- #
784
- def nil?: () -> bool
785
-
786
- # <!--
787
- # rdoc-file=gc.c
788
- # - obj.__id__ -> integer
789
- # - obj.object_id -> integer
790
- # -->
791
- # Returns an integer identifier for `obj`.
792
- #
793
- # The same number will be returned on all calls to `object_id` for a given
794
- # object, and no two active objects will share an id.
795
- #
796
- # Note: that some objects of builtin classes are reused for optimization. This
797
- # is the case for immediate values and frozen string literals.
798
- #
799
- # BasicObject implements +__id__+, Kernel implements `object_id`.
800
- #
801
- # Immediate values are not passed by reference but are passed by value: `nil`,
802
- # `true`, `false`, Fixnums, Symbols, and some Floats.
803
- #
804
- # Object.new.object_id == Object.new.object_id # => false
805
- # (21 * 2).object_id == (21 * 2).object_id # => true
806
- # "hello".object_id == "hello".object_id # => false
807
- # "hi".freeze.object_id == "hi".freeze.object_id # => true
808
- #
809
- def object_id: () -> Integer
810
-
811
- # <!--
812
- # rdoc-file=object.c
813
- # - obj.private_methods(all=true) -> array
814
- # -->
815
- # Returns the list of private methods accessible to *obj*. If the *all*
816
- # parameter is set to `false`, only those methods in the receiver will be
817
- # listed.
818
- #
819
- def private_methods: () -> Array[Symbol]
820
-
821
- # <!--
822
- # rdoc-file=object.c
823
- # - obj.protected_methods(all=true) -> array
824
- # -->
825
- # Returns the list of protected methods accessible to *obj*. If the *all*
826
- # parameter is set to `false`, only those methods in the receiver will be
827
- # listed.
828
- #
829
- def protected_methods: () -> Array[Symbol]
830
-
831
- # <!--
832
- # rdoc-file=proc.c
833
- # - obj.public_method(sym) -> method
834
- # -->
835
- # Similar to *method*, searches public method only.
836
- #
837
- def public_method: (name name) -> Method
838
-
839
- # <!--
840
- # rdoc-file=object.c
841
- # - obj.public_methods(all=true) -> array
842
- # -->
843
- # Returns the list of public methods accessible to *obj*. If the *all* parameter
844
- # is set to `false`, only those methods in the receiver will be listed.
845
- #
846
- def public_methods: (?boolish all) -> Array[Symbol]
847
-
848
- # <!--
849
- # rdoc-file=vm_eval.c
850
- # - obj.public_send(symbol [, args...]) -> obj
851
- # - obj.public_send(string [, args...]) -> obj
852
- # -->
853
- # Invokes the method identified by *symbol*, passing it any arguments specified.
854
- # Unlike send, public_send calls public methods only. When the method is
855
- # identified by a string, the string is converted to a symbol.
856
- #
857
- # 1.public_send(:puts, "hello") # causes NoMethodError
858
- #
859
- def public_send: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
860
-
861
- # <!--
862
- # rdoc-file=object.c
863
- # - obj.remove_instance_variable(symbol) -> obj
864
- # - obj.remove_instance_variable(string) -> obj
865
- # -->
866
- # Removes the named instance variable from *obj*, returning that variable's
867
- # value. String arguments are converted to symbols.
868
- #
869
- # class Dummy
870
- # attr_reader :var
871
- # def initialize
872
- # @var = 99
873
- # end
874
- # def remove
875
- # remove_instance_variable(:@var)
876
- # end
877
- # end
878
- # d = Dummy.new
879
- # d.var #=> 99
880
- # d.remove #=> 99
881
- # d.var #=> nil
882
- #
883
- def remove_instance_variable: (name name) -> untyped
884
-
885
- # <!--
886
- # rdoc-file=vm_method.c
887
- # - obj.respond_to?(symbol, include_all=false) -> true or false
888
- # - obj.respond_to?(string, include_all=false) -> true or false
889
- # -->
890
- # Returns `true` if *obj* responds to the given method. Private and protected
891
- # methods are included in the search only if the optional second parameter
892
- # evaluates to `true`.
893
- #
894
- # If the method is not implemented, as Process.fork on Windows, File.lchmod on
895
- # GNU/Linux, etc., false is returned.
896
- #
897
- # If the method is not defined, `respond_to_missing?` method is called and the
898
- # result is returned.
899
- #
900
- # When the method name parameter is given as a string, the string is converted
901
- # to a symbol.
902
- #
903
- def respond_to?: (name name, ?boolish include_all) -> bool
904
-
905
- # <!--
906
- # rdoc-file=vm_eval.c
907
- # - foo.send(symbol [, args...]) -> obj
908
- # - foo.__send__(symbol [, args...]) -> obj
909
- # - foo.send(string [, args...]) -> obj
910
- # - foo.__send__(string [, args...]) -> obj
911
- # -->
912
- # Invokes the method identified by *symbol*, passing it any arguments specified.
913
- # When the method is identified by a string, the string is converted to a
914
- # symbol.
915
- #
916
- # BasicObject implements +__send__+, Kernel implements `send`. `__send__` is
917
- # safer than `send` when *obj* has the same method name like `Socket`. See also
918
- # `public_send`.
919
- #
920
- # class Klass
921
- # def hello(*args)
922
- # "Hello " + args.join(' ')
923
- # end
924
- # end
925
- # k = Klass.new
926
- # k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
927
- #
928
- def send: (name name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
929
-
930
- # <!--
931
- # rdoc-file=object.c
932
- # - obj.singleton_class -> class
933
- # -->
934
- # Returns the singleton class of *obj*. This method creates a new singleton
935
- # class if *obj* does not have one.
936
- #
937
- # If *obj* is `nil`, `true`, or `false`, it returns NilClass, TrueClass, or
938
- # FalseClass, respectively. If *obj* is an Integer, a Float or a Symbol, it
939
- # raises a TypeError.
940
- #
941
- # Object.new.singleton_class #=> #<Class:#<Object:0xb7ce1e24>>
942
- # String.singleton_class #=> #<Class:String>
943
- # nil.singleton_class #=> NilClass
944
- #
945
- def singleton_class: () -> Class
946
-
947
- # <!--
948
- # rdoc-file=proc.c
949
- # - obj.singleton_method(sym) -> method
950
- # -->
951
- # Similar to *method*, searches singleton method only.
952
- #
953
- # class Demo
954
- # def initialize(n)
955
- # @iv = n
956
- # end
957
- # def hello()
958
- # "Hello, @iv = #{@iv}"
959
- # end
960
- # end
961
- #
962
- # k = Demo.new(99)
963
- # def k.hi
964
- # "Hi, @iv = #{@iv}"
965
- # end
966
- # m = k.singleton_method(:hi)
967
- # m.call #=> "Hi, @iv = 99"
968
- # m = k.singleton_method(:hello) #=> NameError
969
- #
970
- def singleton_method: (name name) -> Method
971
-
972
- # <!--
973
- # rdoc-file=object.c
974
- # - obj.singleton_methods(all=true) -> array
975
- # -->
976
- # Returns an array of the names of singleton methods for *obj*. If the optional
977
- # *all* parameter is true, the list will include methods in modules included in
978
- # *obj*. Only public and protected singleton methods are returned.
979
- #
980
- # module Other
981
- # def three() end
982
- # end
983
- #
984
- # class Single
985
- # def Single.four() end
986
- # end
987
- #
988
- # a = Single.new
989
- #
990
- # def a.one()
991
- # end
992
- #
993
- # class << a
994
- # include Other
995
- # def two()
996
- # end
997
- # end
998
- #
999
- # Single.singleton_methods #=> [:four]
1000
- # a.singleton_methods(false) #=> [:two, :one]
1001
- # a.singleton_methods #=> [:two, :one, :three]
1002
- #
1003
- def singleton_methods: () -> Array[Symbol]
1004
-
1005
- # Yields self to the block, and then returns self. The primary purpose of this
1006
- # method is to "tap into" a method chain, in order to perform operations on
1007
- # intermediate results within the chain.
1008
- #
1009
- # (1..10) .tap {|x| puts "original: #{x}" }
1010
- # .to_a .tap {|x| puts "array: #{x}" }
1011
- # .select {|x| x.even? } .tap {|x| puts "evens: #{x}" }
1012
- # .map {|x| x*x } .tap {|x| puts "squares: #{x}" }
1013
- #
1014
- def tap: () { (self) -> void } -> self
1015
-
1016
- # Yields self to the block and returns the result of the block.
1017
- #
1018
- # 3.next.then {|x| x**x }.to_s #=> "256"
1019
- # "my string".yield_self {|s| s.upcase } #=> "MY STRING"
1020
- #
1021
- # Good usage for `yield_self` is value piping in method chains:
1022
- #
1023
- # require 'open-uri'
1024
- # require 'json'
1025
- #
1026
- # construct_url(arguments).
1027
- # yield_self {|url| open(url).read }.
1028
- # yield_self {|response| JSON.parse(response) }
1029
- #
1030
- # When called without block, the method returns `Enumerator`, which can be used,
1031
- # for example, for conditional circuit-breaking:
1032
- #
1033
- # # meets condition, no-op
1034
- # 1.yield_self.detect(&:odd?) # => 1
1035
- # # does not meet condition, drop value
1036
- # 2.yield_self.detect(&:odd?) # => nil
1037
- #
1038
- def yield_self: [X] () { (self) -> X } -> X
1039
- | () -> Enumerator[self, untyped]
1040
-
1041
- # <!--
1042
- # rdoc-file=object.c
1043
- # - obj.to_s -> string
1044
- # -->
1045
- # Returns a string representing *obj*. The default #to_s prints the object's
1046
- # class and an encoding of the object id. As a special case, the top-level
1047
- # object that is the initial execution context of Ruby programs returns
1048
- # ``main''.
1049
- #
1050
- def to_s: () -> String
1051
-
1052
- # Yields self to the block and returns the result of the block.
1053
- #
1054
- # 3.next.then {|x| x**x }.to_s #=> "256"
1055
- # "my string".yield_self {|s| s.upcase } #=> "MY STRING"
1056
- #
1057
- # Good usage for `yield_self` is value piping in method chains:
1058
- #
1059
- # require 'open-uri'
1060
- # require 'json'
1061
- #
1062
- # construct_url(arguments).
1063
- # yield_self {|url| open(url).read }.
1064
- # yield_self {|response| JSON.parse(response) }
1065
- #
1066
- # When called without block, the method returns `Enumerator`, which can be used,
1067
- # for example, for conditional circuit-breaking:
1068
- #
1069
- # # meets condition, no-op
1070
- # 1.yield_self.detect(&:odd?) # => 1
1071
- # # does not meet condition, drop value
1072
- # 2.yield_self.detect(&:odd?) # => nil
1073
- #
1074
- alias then yield_self
1075
110
  end
1076
111
 
1077
- type Object::name = Symbol | string
112
+ # A previous incarnation of `interned` for backward-compatibility (see #1499)
113
+ %a{steep:deprecated}
114
+ type Object::name = interned