rbs 3.5.3 → 3.6.0.dev.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dependabot.yml +5 -1
  3. data/.github/workflows/ruby.yml +2 -18
  4. data/.github/workflows/windows.yml +26 -0
  5. data/CHANGELOG.md +0 -18
  6. data/core/array.rbs +10 -10
  7. data/core/basic_object.rbs +3 -3
  8. data/core/enumerable.rbs +6 -0
  9. data/core/enumerator.rbs +7 -0
  10. data/core/fiber.rbs +1 -1
  11. data/core/global_variables.rbs +2 -2
  12. data/core/kernel.rbs +67 -38
  13. data/core/method.rbs +98 -7
  14. data/core/module.rbs +2 -2
  15. data/core/proc.rbs +184 -23
  16. data/core/ractor.rbs +1 -1
  17. data/core/range.rbs +30 -0
  18. data/core/refinement.rbs +16 -26
  19. data/core/symbol.rbs +34 -26
  20. data/core/thread.rbs +2 -2
  21. data/core/trace_point.rbs +12 -12
  22. data/core/unbound_method.rbs +1 -1
  23. data/docs/syntax.md +21 -9
  24. data/ext/rbs_extension/parser.c +119 -51
  25. data/ext/rbs_extension/ruby_objs.c +2 -1
  26. data/ext/rbs_extension/ruby_objs.h +1 -1
  27. data/lib/rbs/ast/declarations.rb +36 -0
  28. data/lib/rbs/ast/type_param.rb +71 -15
  29. data/lib/rbs/ast/visitor.rb +137 -0
  30. data/lib/rbs/cli/validate.rb +41 -7
  31. data/lib/rbs/cli.rb +3 -3
  32. data/lib/rbs/definition.rb +2 -1
  33. data/lib/rbs/definition_builder/ancestor_builder.rb +30 -4
  34. data/lib/rbs/definition_builder.rb +21 -6
  35. data/lib/rbs/environment_loader.rb +1 -1
  36. data/lib/rbs/errors.rb +7 -2
  37. data/lib/rbs/file_finder.rb +9 -12
  38. data/lib/rbs/locator.rb +8 -5
  39. data/lib/rbs/prototype/rbi.rb +2 -1
  40. data/lib/rbs/prototype/runtime.rb +3 -2
  41. data/lib/rbs/sorter.rb +9 -6
  42. data/lib/rbs/test/type_check.rb +6 -0
  43. data/lib/rbs/types.rb +11 -0
  44. data/lib/rbs/validator.rb +2 -2
  45. data/lib/rbs/vendorer.rb +3 -3
  46. data/lib/rbs/version.rb +1 -1
  47. data/lib/rbs.rb +1 -0
  48. data/sig/declarations.rbs +6 -0
  49. data/sig/definition.rbs +1 -1
  50. data/sig/definition_builder.rbs +3 -1
  51. data/sig/errors.rbs +3 -2
  52. data/sig/file_finder.rbs +24 -2
  53. data/sig/method_types.rbs +1 -1
  54. data/sig/sorter.rbs +1 -1
  55. data/sig/type_param.rbs +41 -9
  56. data/sig/types.rbs +12 -0
  57. data/sig/visitor.rbs +47 -0
  58. data/stdlib/csv/0/csv.rbs +27 -0
  59. data/stdlib/net-http/0/net-http.rbs +1 -1
  60. data/stdlib/zlib/0/gzip_reader.rbs +5 -1
  61. metadata +5 -2
data/core/method.rbs CHANGED
@@ -22,9 +22,100 @@
22
22
  # %w[2017-03-01 2017-03-02].collect(&Date.method(:parse))
23
23
  # #=> [#<Date: 2017-03-01 ((2457814j,0s,0n),+0s,2299161j)>, #<Date: 2017-03-02 ((2457815j,0s,0n),+0s,2299161j)>]
24
24
  #
25
- class Method < Object
25
+ class Method
26
+ # The return type from `#parameters` methods (such as those defined on `Method`, `Proc`, and `UnboundMethod`).
26
27
  type param_types = Array[[:req | :opt | :rest | :keyreq | :key | :keyrest | :block, Symbol] | [:rest | :keyrest | :nokey]]
27
28
 
29
+ # <!--
30
+ # rdoc-file=proc.c
31
+ # - meth.eql?(other_meth) -> true or false
32
+ # - meth == other_meth -> true or false
33
+ # -->
34
+ # Two method objects are equal if they are bound to the same object and refer to
35
+ # the same method definition and the classes defining the methods are the same
36
+ # class or module.
37
+ #
38
+ def ==: (untyped other) -> bool
39
+
40
+ # <!-- rdoc-file=proc.c -->
41
+ # Two method objects are equal if they are bound to the same object and refer to
42
+ # the same method definition and the classes defining the methods are the same
43
+ # class or module.
44
+ #
45
+ alias eql? ==
46
+
47
+ # <!--
48
+ # rdoc-file=proc.c
49
+ # - meth.hash -> integer
50
+ # -->
51
+ # Returns a hash value corresponding to the method object.
52
+ #
53
+ # See also Object#hash.
54
+ #
55
+ def hash: () -> Integer
56
+
57
+ def dup: () -> instance
58
+
59
+ # <!--
60
+ # rdoc-file=proc.c
61
+ # - meth.to_s -> string
62
+ # - meth.inspect -> string
63
+ # -->
64
+ # Returns a human-readable description of the underlying method.
65
+ #
66
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
67
+ # (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
68
+ #
69
+ # In the latter case, the method description includes the "owner" of the
70
+ # original method (`Enumerable` module, which is included into `Range`).
71
+ #
72
+ # `inspect` also provides, when possible, method argument names (call sequence)
73
+ # and source location.
74
+ #
75
+ # require 'net/http'
76
+ # Net::HTTP.method(:get).inspect
77
+ # #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
78
+ #
79
+ # `...` in argument definition means argument is optional (has some default
80
+ # value).
81
+ #
82
+ # For methods defined in C (language core and extensions), location and argument
83
+ # names can't be extracted, and only generic information is provided in form of
84
+ # `*` (any number of arguments) or `_` (some positional argument).
85
+ #
86
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
87
+ # "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
88
+ #
89
+ def inspect: () -> String
90
+
91
+ # <!-- rdoc-file=proc.c -->
92
+ # Returns a human-readable description of the underlying method.
93
+ #
94
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
95
+ # (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
96
+ #
97
+ # In the latter case, the method description includes the "owner" of the
98
+ # original method (`Enumerable` module, which is included into `Range`).
99
+ #
100
+ # `inspect` also provides, when possible, method argument names (call sequence)
101
+ # and source location.
102
+ #
103
+ # require 'net/http'
104
+ # Net::HTTP.method(:get).inspect
105
+ # #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
106
+ #
107
+ # `...` in argument definition means argument is optional (has some default
108
+ # value).
109
+ #
110
+ # For methods defined in C (language core and extensions), location and argument
111
+ # names can't be extracted, and only generic information is provided in form of
112
+ # `*` (any number of arguments) or `_` (some positional argument).
113
+ #
114
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
115
+ # "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
116
+ #
117
+ alias to_s inspect
118
+
28
119
  # <!--
29
120
  # rdoc-file=proc.c
30
121
  # - meth.to_proc -> proc
@@ -44,7 +135,7 @@ class Method < Object
44
135
  # m.call(3) #=> 15
45
136
  # m.call(20) #=> 32
46
137
  #
47
- def call: (*untyped args) -> untyped
138
+ def call: (?) -> untyped
48
139
 
49
140
  # <!--
50
141
  # rdoc-file=proc.c
@@ -62,7 +153,7 @@ class Method < Object
62
153
  # g = proc {|x| x + x }
63
154
  # p (f << g).call(2) #=> 16
64
155
  #
65
- def <<: (Proc g) -> Proc
156
+ def <<: (Proc::_Callable g) -> Proc
66
157
 
67
158
  # <!-- rdoc-file=proc.c -->
68
159
  # Invokes the *meth* with the specified arguments, returning the method's return
@@ -90,7 +181,7 @@ class Method < Object
90
181
  # g = proc {|x| x + x }
91
182
  # p (f >> g).call(2) #=> 8
92
183
  #
93
- def >>: (Proc g) -> Proc
184
+ def >>: (Proc::_Callable g) -> Proc
94
185
 
95
186
  # <!-- rdoc-file=proc.c -->
96
187
  # Invokes the *meth* with the specified arguments, returning the method's return
@@ -161,7 +252,7 @@ class Method < Object
161
252
  # m.call # => "bar"
162
253
  # n = m.clone.call # => "bar"
163
254
  #
164
- def clone: () -> Method
255
+ def clone: () -> instance
165
256
 
166
257
  # <!--
167
258
  # rdoc-file=proc.c
@@ -194,7 +285,7 @@ class Method < Object
194
285
  # proc3 = proc2.call(:y, :z) #=> #<Proc>
195
286
  # proc3.call(:a) #=> [:x, :y, :z, :a]
196
287
  #
197
- def curry: (?Integer arity) -> Proc
288
+ def curry: (?int? arity) -> Proc
198
289
 
199
290
  # <!--
200
291
  # rdoc-file=proc.c
@@ -273,7 +364,7 @@ class Method < Object
273
364
  # Returns the Ruby source filename and line number containing this method or nil
274
365
  # if this method was not defined in Ruby (i.e. native).
275
366
  #
276
- def source_location: () -> [ String, Integer ]?
367
+ def source_location: () -> [String, Integer]?
277
368
 
278
369
  # <!--
279
370
  # rdoc-file=proc.c
data/core/module.rbs CHANGED
@@ -396,7 +396,7 @@ class Module < Object
396
396
  #
397
397
  # Hello there!
398
398
  #
399
- def class_exec: [U] (*untyped args) { () -> U } -> U
399
+ def class_exec: [U] (*untyped, **untyped) { (?) [self: self] -> U } -> U
400
400
 
401
401
  # <!--
402
402
  # rdoc-file=object.c
@@ -1106,7 +1106,7 @@ class Module < Object
1106
1106
  #
1107
1107
  # Hello there!
1108
1108
  #
1109
- def module_exec: [U] (*untyped args) { (*untyped args) -> U } -> U
1109
+ def module_exec: [U] (*untyped, **untyped) { (?) [self: self] -> U } -> U
1110
1110
 
1111
1111
  # <!--
1112
1112
  # rdoc-file=vm_method.c
data/core/proc.rbs CHANGED
@@ -288,8 +288,184 @@
288
288
  #
289
289
  # Numbered parameters were introduced in Ruby 2.7.
290
290
  #
291
- class Proc < Object
292
- def clone: () -> self
291
+ class Proc
292
+ interface _Callable
293
+ def call: (?) -> untyped
294
+ end
295
+
296
+ # <!--
297
+ # rdoc-file=proc.c
298
+ # - Proc.new {|...| block } -> a_proc
299
+ # -->
300
+ # Creates a new Proc object, bound to the current context.
301
+ #
302
+ # proc = Proc.new { "hello" }
303
+ # proc.call #=> "hello"
304
+ #
305
+ # Raises ArgumentError if called without a block.
306
+ #
307
+ # Proc.new #=> ArgumentError
308
+ #
309
+ def self.new: () { (?) -> untyped } -> instance
310
+
311
+ def clone: () -> instance
312
+ def dup: () -> instance
313
+
314
+ # <!-- rdoc-file=proc.c -->
315
+ # Invokes the block, setting the block's parameters to the values in *params*
316
+ # using something close to method calling semantics. Returns the value of the
317
+ # last expression evaluated in the block.
318
+ #
319
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
320
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
321
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
322
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
323
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
324
+ #
325
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
326
+ # syntactic sugar to hide "call".
327
+ #
328
+ # For procs created using #lambda or `->()` an error is generated if the wrong
329
+ # number of parameters are passed to the proc. For procs created using Proc.new
330
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
331
+ # are set to `nil`.
332
+ #
333
+ # a_proc = proc {|a,b| [a,b] }
334
+ # a_proc.call(1) #=> [1, nil]
335
+ #
336
+ # a_proc = lambda {|a,b| [a,b] }
337
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
338
+ #
339
+ # See also Proc#lambda?.
340
+ #
341
+ alias === call
342
+
343
+ # <!-- rdoc-file=proc.c -->
344
+ # Invokes the block, setting the block's parameters to the values in *params*
345
+ # using something close to method calling semantics. Returns the value of the
346
+ # last expression evaluated in the block.
347
+ #
348
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
349
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
350
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
351
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
352
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
353
+ #
354
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
355
+ # syntactic sugar to hide "call".
356
+ #
357
+ # For procs created using #lambda or `->()` an error is generated if the wrong
358
+ # number of parameters are passed to the proc. For procs created using Proc.new
359
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
360
+ # are set to `nil`.
361
+ #
362
+ # a_proc = proc {|a,b| [a,b] }
363
+ # a_proc.call(1) #=> [1, nil]
364
+ #
365
+ # a_proc = lambda {|a,b| [a,b] }
366
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
367
+ #
368
+ # See also Proc#lambda?.
369
+ #
370
+ alias yield call
371
+
372
+ # <!--
373
+ # rdoc-file=proc.c
374
+ # - prc << g -> a_proc
375
+ # -->
376
+ # Returns a proc that is the composition of this proc and the given *g*. The
377
+ # returned proc takes a variable number of arguments, calls *g* with them then
378
+ # calls this proc with the result.
379
+ #
380
+ # f = proc {|x| x * x }
381
+ # g = proc {|x| x + x }
382
+ # p (f << g).call(2) #=> 16
383
+ #
384
+ # See Proc#>> for detailed explanations.
385
+ #
386
+ def <<: (_Callable callable) -> Proc
387
+
388
+ # <!--
389
+ # rdoc-file=proc.c
390
+ # - prc >> g -> a_proc
391
+ # -->
392
+ # Returns a proc that is the composition of this proc and the given *g*. The
393
+ # returned proc takes a variable number of arguments, calls this proc with them
394
+ # then calls *g* with the result.
395
+ #
396
+ # f = proc {|x| x * x }
397
+ # g = proc {|x| x + x }
398
+ # p (f >> g).call(2) #=> 8
399
+ #
400
+ # *g* could be other Proc, or Method, or any other object responding to `call`
401
+ # method:
402
+ #
403
+ # class Parser
404
+ # def self.call(text)
405
+ # # ...some complicated parsing logic...
406
+ # end
407
+ # end
408
+ #
409
+ # pipeline = File.method(:read) >> Parser >> proc { |data| puts "data size: #{data.count}" }
410
+ # pipeline.call('data.json')
411
+ #
412
+ # See also Method#>> and Method#<<.
413
+ #
414
+ def >>: (_Callable callable) -> Proc
415
+
416
+ # <!--
417
+ # rdoc-file=proc.c
418
+ # - prc == other -> true or false
419
+ # - prc.eql?(other) -> true or false
420
+ # -->
421
+ # Two procs are the same if, and only if, they were created from the same code
422
+ # block.
423
+ #
424
+ # def return_block(&block)
425
+ # block
426
+ # end
427
+ #
428
+ # def pass_block_twice(&block)
429
+ # [return_block(&block), return_block(&block)]
430
+ # end
431
+ #
432
+ # block1, block2 = pass_block_twice { puts 'test' }
433
+ # # Blocks might be instantiated into Proc's lazily, so they may, or may not,
434
+ # # be the same object.
435
+ # # But they are produced from the same code block, so they are equal
436
+ # block1 == block2
437
+ # #=> true
438
+ #
439
+ # # Another Proc will never be equal, even if the code is the "same"
440
+ # block1 == proc { puts 'test' }
441
+ # #=> false
442
+ #
443
+ def ==: (untyped other) -> bool
444
+
445
+ # <!-- rdoc-file=proc.c -->
446
+ # Two procs are the same if, and only if, they were created from the same code
447
+ # block.
448
+ #
449
+ # def return_block(&block)
450
+ # block
451
+ # end
452
+ #
453
+ # def pass_block_twice(&block)
454
+ # [return_block(&block), return_block(&block)]
455
+ # end
456
+ #
457
+ # block1, block2 = pass_block_twice { puts 'test' }
458
+ # # Blocks might be instantiated into Proc's lazily, so they may, or may not,
459
+ # # be the same object.
460
+ # # But they are produced from the same code block, so they are equal
461
+ # block1 == block2
462
+ # #=> true
463
+ #
464
+ # # Another Proc will never be equal, even if the code is the "same"
465
+ # block1 == proc { puts 'test' }
466
+ # #=> false
467
+ #
468
+ alias eql? ==
293
469
 
294
470
  # <!--
295
471
  # rdoc-file=proc.c
@@ -379,7 +555,7 @@ class Proc < Object
379
555
  #
380
556
  # See also Proc#lambda?.
381
557
  #
382
- def call: (*untyped arg0) -> untyped
558
+ def call: (?) -> untyped
383
559
 
384
560
  # <!-- rdoc-file=proc.c -->
385
561
  # Invokes the block, setting the block's parameters to the values in *params*
@@ -408,7 +584,7 @@ class Proc < Object
408
584
  #
409
585
  # See also Proc#lambda?.
410
586
  #
411
- def []: (*untyped arg0) -> untyped
587
+ alias [] call
412
588
 
413
589
  # <!--
414
590
  # rdoc-file=proc.c
@@ -455,7 +631,7 @@ class Proc < Object
455
631
  # b = proc { :foo }
456
632
  # p b.curry[] #=> :foo
457
633
  #
458
- def curry: (?_ToInt arity) -> Proc
634
+ def curry: (?int? arity) -> Proc
459
635
 
460
636
  # <!--
461
637
  # rdoc-file=proc.c
@@ -467,21 +643,6 @@ class Proc < Object
467
643
  #
468
644
  def hash: () -> Integer
469
645
 
470
- # <!--
471
- # rdoc-file=proc.c
472
- # - Proc.new {|...| block } -> a_proc
473
- # -->
474
- # Creates a new Proc object, bound to the current context.
475
- #
476
- # proc = Proc.new { "hello" }
477
- # proc.call #=> "hello"
478
- #
479
- # Raises ArgumentError if called without a block.
480
- #
481
- # Proc.new #=> ArgumentError
482
- #
483
- def initialize: () { (*untyped) -> untyped } -> void
484
-
485
646
  # <!--
486
647
  # rdoc-file=proc.c
487
648
  # - prc.lambda? -> true or false
@@ -602,7 +763,7 @@ class Proc < Object
602
763
  # prc = lambda{|x, y=42, *other|}
603
764
  # prc.parameters(lambda: false) #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
604
765
  #
605
- def parameters: (?lambda: boolish) -> ::Array[[ Symbol, Symbol ]]
766
+ def parameters: (?lambda: boolish) -> Method::param_types
606
767
 
607
768
  # <!--
608
769
  # rdoc-file=proc.c
@@ -611,7 +772,7 @@ class Proc < Object
611
772
  # Returns the Ruby source filename and line number containing this proc or `nil`
612
773
  # if this proc was not defined in Ruby (i.e. native).
613
774
  #
614
- def source_location: () -> [ String, Integer ]
775
+ def source_location: () -> [String, Integer]?
615
776
 
616
777
  # <!--
617
778
  # rdoc-file=proc.c
@@ -635,5 +796,5 @@ class Proc < Object
635
796
  # Returns the unique identifier for this proc, along with an indication of where
636
797
  # the proc was defined.
637
798
  #
638
- def inspect: () -> String
799
+ alias inspect to_s
639
800
  end
data/core/ractor.rbs CHANGED
@@ -355,7 +355,7 @@ class Ractor
355
355
  # p r
356
356
  # #=> #<Ractor:#3 my ractor test.rb:1 terminated>
357
357
  #
358
- def self.new: (*untyped args, ?name: string) { (*untyped) -> untyped } -> Ractor
358
+ def self.new: (*untyped args, ?name: string) { (?) -> untyped } -> Ractor
359
359
 
360
360
  # <!--
361
361
  # rdoc-file=ractor.rb
data/core/range.rbs CHANGED
@@ -243,6 +243,36 @@
243
243
  class Range[out Elem] < Object
244
244
  include Enumerable[Elem]
245
245
 
246
+ # <!--
247
+ # rdoc-file=range.c
248
+ # - %(n) {|element| ... } -> self
249
+ # - %(n) -> enumerator
250
+ # -->
251
+ # Iterates over the elements of `self`.
252
+ #
253
+ # With a block given, calls the block with selected elements of the range;
254
+ # returns `self`:
255
+ #
256
+ # a = []
257
+ # (1..5).%(2) {|element| a.push(element) } # => 1..5
258
+ # a # => [1, 3, 5]
259
+ # a = []
260
+ # ('a'..'e').%(2) {|element| a.push(element) } # => "a".."e"
261
+ # a # => ["a", "c", "e"]
262
+ #
263
+ # With no block given, returns an enumerator, which will be of class
264
+ # Enumerator::ArithmeticSequence if `self` is numeric; otherwise of class
265
+ # Enumerator:
266
+ #
267
+ # e = (1..5) % 2 # => ((1..5).%(2))
268
+ # e.class # => Enumerator::ArithmeticSequence
269
+ # ('a'..'e') % 2 # => #<Enumerator: ...>
270
+ #
271
+ # Related: Range#step.
272
+ #
273
+ def %: (Numeric | int n) -> Enumerator[Elem, self]
274
+ | (Numeric | int n) { (Elem element) -> void } -> self
275
+
246
276
  # <!--
247
277
  # rdoc-file=range.c
248
278
  # - self == other -> true or false
data/core/refinement.rbs CHANGED
@@ -4,6 +4,21 @@
4
4
  # #import_methods.
5
5
  #
6
6
  class Refinement < Module
7
+ # <!--
8
+ # rdoc-file=eval.c
9
+ # - target -> class_or_module
10
+ # -->
11
+ # Return the class or module refined by the receiver.
12
+ #
13
+ # module M
14
+ # refine String do
15
+ # end
16
+ # end
17
+ #
18
+ # M.refinements[0].target # => String
19
+ #
20
+ def target: () -> Module?
21
+
7
22
  private
8
23
 
9
24
  # <!--
@@ -40,30 +55,5 @@ class Refinement < Module
40
55
  # end
41
56
  # end
42
57
  #
43
- def import_methods: (*Module) -> self
44
-
45
- # <!--
46
- # rdoc-file=eval.c
47
- # - refined_class -> class
48
- # -->
49
- # Deprecated; prefer #target.
50
- #
51
- # Return the class refined by the receiver.
52
- #
53
- def refined_class: () -> Module
54
-
55
- # <!--
56
- # rdoc-file=eval.c
57
- # - target -> class_or_module
58
- # -->
59
- # Return the class or module refined by the receiver.
60
- #
61
- # module M
62
- # refine String do
63
- # end
64
- # end
65
- #
66
- # M.refinements[0].target # => String
67
- #
68
- def target: () -> Module
58
+ def import_methods: (Module module, *Module extra_modules) -> self
69
59
  end
data/core/symbol.rbs CHANGED
@@ -131,9 +131,7 @@ class Symbol
131
131
  # Symbol.all_symbols.size # => 9334
132
132
  # Symbol.all_symbols.take(3) # => [:!, :"\"", :"#"]
133
133
  #
134
- def self.all_symbols: () -> ::Array[Symbol]
135
-
136
- public
134
+ def self.all_symbols: () -> Array[Symbol]
137
135
 
138
136
  # <!--
139
137
  # rdoc-file=string.c
@@ -152,8 +150,8 @@ class Symbol
152
150
  #
153
151
  # Related: String#<=>.
154
152
  #
155
- def <=>: (Symbol other) -> Integer
156
- | (untyped other) -> Integer?
153
+ def <=>: (Symbol object) -> (-1 | 0 | 1)
154
+ | (untyped) -> (-1 | 0 | 1)?
157
155
 
158
156
  # <!--
159
157
  # rdoc-file=string.c
@@ -161,12 +159,12 @@ class Symbol
161
159
  # -->
162
160
  # Returns `true` if `object` is the same object as `self`, `false` otherwise.
163
161
  #
164
- def ==: (untyped obj) -> bool
162
+ def ==: (untyped object) -> bool
165
163
 
166
164
  # <!-- rdoc-file=string.c -->
167
165
  # Returns `true` if `object` is the same object as `self`, `false` otherwise.
168
166
  #
169
- def ===: (untyped obj) -> bool
167
+ alias === ==
170
168
 
171
169
  # <!--
172
170
  # rdoc-file=string.c
@@ -176,7 +174,7 @@ class Symbol
176
174
  # variables; see String#=~.
177
175
  #
178
176
  def =~: (Regexp regex) -> Integer?
179
- | [T] (String::_MatchAgainst[self, T] object) -> T
177
+ | [T] (String::_MatchAgainst[String, T] object) -> T
180
178
 
181
179
  # <!--
182
180
  # rdoc-file=string.c
@@ -188,12 +186,10 @@ class Symbol
188
186
  # -->
189
187
  # Equivalent to `symbol.to_s[]`; see String#[].
190
188
  #
191
- def []: (int index) -> String?
192
- | (int start, int length) -> String?
193
- | (Range[Integer?] range) -> String?
194
- | (Regexp regexp) -> String?
195
- | (Regexp regexp, int | String capture) -> String?
196
- | (String match_str) -> String?
189
+ def []: (int start, ?int length) -> String?
190
+ | (range[int?] range) -> String?
191
+ | (Regexp regexp, ?MatchData::capture backref) -> String?
192
+ | (String substring) -> String?
197
193
 
198
194
  # <!--
199
195
  # rdoc-file=string.c
@@ -240,7 +236,7 @@ class Symbol
240
236
  #
241
237
  # Related: Symbol#casecmp?, String#casecmp.
242
238
  #
243
- def casecmp: (untyped other) -> Integer?
239
+ def casecmp: (untyped object) -> (-1 | 0 | 1)?
244
240
 
245
241
  # <!--
246
242
  # rdoc-file=string.c
@@ -273,7 +269,7 @@ class Symbol
273
269
  #
274
270
  # Related: Symbol#casecmp, String#casecmp?.
275
271
  #
276
- def casecmp?: (untyped other) -> bool?
272
+ def casecmp?: (untyped object) -> bool?
277
273
 
278
274
  # <!--
279
275
  # rdoc-file=string.c
@@ -321,7 +317,7 @@ class Symbol
321
317
  #
322
318
  # Related: Symbol#inspect, Symbol#name.
323
319
  #
324
- def id2name: () -> String
320
+ alias id2name to_s
325
321
 
326
322
  # <!--
327
323
  # rdoc-file=string.c
@@ -340,7 +336,7 @@ class Symbol
340
336
  # - intern()
341
337
  # -->
342
338
  #
343
- def intern: () -> Symbol
339
+ alias intern to_sym
344
340
 
345
341
  # <!--
346
342
  # rdoc-file=string.c
@@ -358,8 +354,8 @@ class Symbol
358
354
  # Equivalent to `self.to_s.match`, including possible updates to global
359
355
  # variables; see String#match.
360
356
  #
361
- def match: (Regexp | string pattern, ?int pos) -> MatchData?
362
- | (Regexp | string pattern, ?int pos) { (MatchData) -> void } -> untyped
357
+ def match: (Regexp | string pattern, ?int offset) -> MatchData?
358
+ | [T] (Regexp | string pattern, ?int offset) { (MatchData matchdata) -> T } -> T?
363
359
 
364
360
  # <!--
365
361
  # rdoc-file=string.c
@@ -367,7 +363,7 @@ class Symbol
367
363
  # -->
368
364
  # Equivalent to `sym.to_s.match?`; see String#match.
369
365
  #
370
- def match?: (Regexp | string pattern, ?int pos) -> bool
366
+ def match?: (Regexp | string pattern, ?int offset) -> bool
371
367
 
372
368
  # <!-- rdoc-file=string.c -->
373
369
  # Equivalent to `self.to_s.succ.to_sym`:
@@ -378,6 +374,20 @@ class Symbol
378
374
  #
379
375
  def next: () -> Symbol
380
376
 
377
+ # <!--
378
+ # rdoc-file=string.c
379
+ # - name -> string
380
+ # -->
381
+ # Returns a frozen string representation of `self` (not including the leading
382
+ # colon):
383
+ #
384
+ # :foo.name # => "foo"
385
+ # :foo.name.frozen? # => true
386
+ #
387
+ # Related: Symbol#to_s, Symbol#inspect.
388
+ #
389
+ def name: () -> String
390
+
381
391
  # <!-- rdoc-file=string.c -->
382
392
  # Equivalent to `self.to_s.length`; see String#length.
383
393
  #
@@ -394,7 +404,7 @@ class Symbol
394
404
  # -->
395
405
  # Equivalent to `self.to_s.start_with?`; see String#start_with?.
396
406
  #
397
- def start_with?: (*string | Regexp prefixes) -> bool
407
+ def start_with?: (*Regexp | string prefixes) -> bool
398
408
 
399
409
  # <!--
400
410
  # rdoc-file=string.c
@@ -445,7 +455,7 @@ class Symbol
445
455
  #
446
456
  # Related: Symbol#inspect, Symbol#name.
447
457
  #
448
- alias to_s id2name
458
+ def to_s: () -> String
449
459
 
450
460
  # <!--
451
461
  # rdoc-file=symbol.rb
@@ -455,7 +465,7 @@ class Symbol
455
465
  #
456
466
  # Related: String#to_sym.
457
467
  #
458
- alias to_sym intern
468
+ def to_sym: () -> self
459
469
 
460
470
  # <!--
461
471
  # rdoc-file=string.c
@@ -469,6 +479,4 @@ class Symbol
469
479
  | (:ascii | :lithuanian | :turkic) -> Symbol
470
480
  | (:lithuanian, :turkic) -> Symbol
471
481
  | (:turkic, :lithuanian) -> Symbol
472
-
473
- def clone: (?freeze: true?) -> self
474
482
  end