rbs 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/docs/syntax.md +50 -6
  4. data/lib/rbs/definition_builder.rb +2 -2
  5. data/lib/rbs/parser.rb +98 -96
  6. data/lib/rbs/parser.y +3 -1
  7. data/lib/rbs/prototype/rb.rb +38 -6
  8. data/lib/rbs/prototype/runtime.rb +17 -7
  9. data/lib/rbs/test/hook.rb +2 -0
  10. data/lib/rbs/test/tester.rb +4 -1
  11. data/lib/rbs/test/type_check.rb +10 -4
  12. data/lib/rbs/version.rb +1 -1
  13. data/sig/constant_table.rbs +1 -1
  14. data/sig/declarations.rbs +1 -1
  15. data/sig/definition.rbs +1 -1
  16. data/sig/environment_loader.rbs +3 -3
  17. data/sig/members.rbs +2 -2
  18. data/sig/method_types.rbs +1 -1
  19. data/sig/namespace.rbs +1 -1
  20. data/stdlib/base64/base64.rbs +1 -1
  21. data/stdlib/builtin/array.rbs +124 -120
  22. data/stdlib/builtin/builtin.rbs +28 -0
  23. data/stdlib/builtin/enumerable.rbs +26 -20
  24. data/stdlib/builtin/errors.rbs +1 -1
  25. data/stdlib/builtin/gc.rbs +2 -2
  26. data/stdlib/builtin/hash.rbs +7 -7
  27. data/stdlib/builtin/io.rbs +5 -5
  28. data/stdlib/builtin/kernel.rbs +1 -85
  29. data/stdlib/builtin/module.rbs +13 -13
  30. data/stdlib/builtin/object.rbs +1 -1
  31. data/stdlib/builtin/random.rbs +1 -1
  32. data/stdlib/builtin/range.rbs +2 -2
  33. data/stdlib/builtin/string.rbs +6 -6
  34. data/stdlib/builtin/string_io.rbs +7 -7
  35. data/stdlib/builtin/struct.rbs +1 -1
  36. data/stdlib/builtin/symbol.rbs +1 -1
  37. data/stdlib/builtin/thread.rbs +4 -4
  38. data/stdlib/builtin/true_class.rbs +1 -1
  39. data/stdlib/coverage/coverage.rbs +2 -2
  40. data/stdlib/csv/csv.rbs +1 -1
  41. data/stdlib/date/date.rbs +2 -2
  42. data/stdlib/date/date_time.rbs +1 -1
  43. data/stdlib/find/find.rbs +2 -2
  44. data/stdlib/logger/log_device.rbs +1 -1
  45. data/stdlib/logger/logger.rbs +1 -1
  46. data/stdlib/pathname/pathname.rbs +39 -39
  47. data/stdlib/pstore/pstore.rbs +287 -0
  48. data/stdlib/pty/pty.rbs +1 -1
  49. data/stdlib/uri/generic.rbs +1 -1
  50. metadata +3 -2
@@ -475,6 +475,8 @@ rule
475
475
 
476
476
  method_type:
477
477
  start_merged_scope type_params params_opt block_opt kARROW simple_type {
478
+ reset_variable_scope
479
+
478
480
  location = (val[1] || val[2] || val[3] || val[4]).location + val[5].location
479
481
  type_params = val[1]&.value || []
480
482
 
@@ -875,7 +877,7 @@ rule
875
877
  required_keywords: {},
876
878
  optional_keywords: {},
877
879
  rest_keywords: nil,
878
- return_type: val[2]
880
+ return_type: val[1]
879
881
  )
880
882
 
881
883
  result = LocatedValue.new(value: type, location: location)
@@ -135,6 +135,18 @@ module RBS
135
135
 
136
136
  decls.push member unless decls.include?(member)
137
137
 
138
+ when :ALIAS
139
+ new_name, old_name = node.children.map { |c| literal_to_symbol(c) }
140
+ member = AST::Members::Alias.new(
141
+ new_name: new_name,
142
+ old_name: old_name,
143
+ kind: singleton ? :singleton : :instance,
144
+ annotations: [],
145
+ location: nil,
146
+ comment: comments[node.first_lineno - 1],
147
+ )
148
+ decls.push member unless decls.include?(member)
149
+
138
150
  when :FCALL
139
151
  # Inside method definition cannot reach here.
140
152
  args = node.children[1]&.children || []
@@ -166,9 +178,9 @@ module RBS
166
178
  end
167
179
  when :attr_reader
168
180
  args.each do |arg|
169
- if arg&.type == :LIT && arg.children[0].is_a?(Symbol)
181
+ if arg && (name = literal_to_symbol(arg))
170
182
  decls << AST::Members::AttrReader.new(
171
- name: arg.children[0],
183
+ name: name,
172
184
  ivar_name: nil,
173
185
  type: Types::Bases::Any.new(location: nil),
174
186
  location: nil,
@@ -179,9 +191,9 @@ module RBS
179
191
  end
180
192
  when :attr_accessor
181
193
  args.each do |arg|
182
- if arg&.type == :LIT && arg.children[0].is_a?(Symbol)
194
+ if arg && (name = literal_to_symbol(arg))
183
195
  decls << AST::Members::AttrAccessor.new(
184
- name: arg.children[0],
196
+ name: name,
185
197
  ivar_name: nil,
186
198
  type: Types::Bases::Any.new(location: nil),
187
199
  location: nil,
@@ -192,9 +204,9 @@ module RBS
192
204
  end
193
205
  when :attr_writer
194
206
  args.each do |arg|
195
- if arg&.type == :LIT && arg.children[0].is_a?(Symbol)
207
+ if arg && (name = literal_to_symbol(arg))
196
208
  decls << AST::Members::AttrWriter.new(
197
- name: arg.children[0],
209
+ name: name,
198
210
  ivar_name: nil,
199
211
  type: Types::Bases::Any.new(location: nil),
200
212
  location: nil,
@@ -203,6 +215,17 @@ module RBS
203
215
  )
204
216
  end
205
217
  end
218
+ when :alias_method
219
+ if args[0] && args[1] && (new_name = literal_to_symbol(args[0])) && (old_name = literal_to_symbol(args[1]))
220
+ decls << AST::Members::Alias.new(
221
+ new_name: new_name,
222
+ old_name: old_name,
223
+ kind: singleton ? :singleton : :instance,
224
+ annotations: [],
225
+ location: nil,
226
+ comment: comments[node.first_lineno - 1],
227
+ )
228
+ end
206
229
  end
207
230
 
208
231
  each_child node do |child|
@@ -248,6 +271,15 @@ module RBS
248
271
  end
249
272
  end
250
273
 
274
+ def literal_to_symbol(node)
275
+ case node.type
276
+ when :LIT
277
+ node.children[0] if node.children[0].is_a?(Symbol)
278
+ when :STR
279
+ node.children[0].to_sym
280
+ end
281
+ end
282
+
251
283
  def each_node(nodes)
252
284
  nodes.each do |child|
253
285
  if child.is_a?(RubyVM::AbstractSyntaxTree::Node)
@@ -17,11 +17,13 @@ module RBS
17
17
  end
18
18
 
19
19
  def target?(const)
20
+ name = const_name(const)
21
+
20
22
  patterns.any? do |pattern|
21
23
  if pattern.end_with?("*")
22
- (const.name || "").start_with?(pattern.chop)
24
+ (name || "").start_with?(pattern.chop)
23
25
  else
24
- const.name == pattern
26
+ name == pattern
25
27
  end
26
28
  end
27
29
  end
@@ -37,7 +39,7 @@ module RBS
37
39
  def decls
38
40
  unless @decls
39
41
  @decls = []
40
- ObjectSpace.each_object(Module).select {|mod| target?(mod) }.sort_by(&:name).each do |mod|
42
+ ObjectSpace.each_object(Module).select {|mod| target?(mod) }.sort_by{|mod| const_name(mod) }.each do |mod|
41
43
  case mod
42
44
  when Class
43
45
  generate_class mod
@@ -356,12 +358,14 @@ module RBS
356
358
  end
357
359
 
358
360
  def generate_module(mod)
359
- unless mod.name
361
+ name = const_name(mod)
362
+
363
+ unless name
360
364
  RBS.logger.warn("Skipping anonymous module #{mod}")
361
365
  return
362
366
  end
363
367
 
364
- type_name = to_type_name(mod.name)
368
+ type_name = to_type_name(name)
365
369
 
366
370
  decl = AST::Declarations::Module.new(
367
371
  name: type_name,
@@ -374,12 +378,13 @@ module RBS
374
378
  )
375
379
 
376
380
  each_mixin(mod.included_modules, *mod.included_modules.flat_map(&:included_modules), namespace: type_name.namespace) do |included_module|
377
- unless included_module.name
381
+ included_module_name = const_name(included_module)
382
+ unless included_module_name
378
383
  RBS.logger.warn("Skipping anonymous module #{included_module} included in #{mod}")
379
384
  next
380
385
  end
381
386
 
382
- module_name = to_type_name(included_module.name)
387
+ module_name = to_type_name(included_module_name)
383
388
  if module_name.namespace == type_name.namespace
384
389
  module_name = TypeName.new(name: module_name.name, namespace: Namespace.empty)
385
390
  end
@@ -399,6 +404,11 @@ module RBS
399
404
 
400
405
  generate_constants mod
401
406
  end
407
+
408
+ def const_name(const)
409
+ @module_name_method ||= Module.instance_method(:name)
410
+ @module_name_method.bind(const).call
411
+ end
402
412
  end
403
413
  end
404
414
  end
@@ -5,6 +5,8 @@ module RBS
5
5
  module Test
6
6
  module Hook
7
7
  OPERATORS = {
8
+ :[] => "indexlookup",
9
+ :[]= => "indexset",
8
10
  :== => "eqeq",
9
11
  :=== => "eqeqeq",
10
12
  :!= => "noteq",
@@ -56,7 +56,10 @@ module RBS
56
56
  RBS.logger.info { "Skipping ##{name} because of `#{reason}`..." }
57
57
  end
58
58
  else
59
- if klass.instance_methods(false).include?(name) && !set.include?(name)
59
+ if !set.include?(name) && (
60
+ name == :initialize ||
61
+ klass.instance_methods(false).include?(name) ||
62
+ klass.private_instance_methods(false).include?(name))
60
63
  RBS.logger.info { "Setting up method hook in ##{name}..." }
61
64
  Hook.hook_instance_method klass, name, key: instance_key
62
65
  set << name
@@ -202,11 +202,17 @@ module RBS
202
202
  end
203
203
 
204
204
  def get_class(type_name)
205
- const_cache[type_name] ||= Object.const_get(type_name.to_s)
205
+ const_cache[type_name] ||= begin
206
+ Object.const_get(type_name.to_s)
207
+ rescue NameError
208
+ nil
209
+ end
206
210
  end
207
211
 
208
212
  def is_double?(value)
209
213
  unchecked_classes.any? { |unchecked_class| Test.call(value, IS_AP, Object.const_get(unchecked_class))}
214
+ rescue NameError
215
+ false
210
216
  end
211
217
 
212
218
  def value(val, type)
@@ -219,7 +225,7 @@ module RBS
219
225
  when Types::Bases::Any
220
226
  true
221
227
  when Types::Bases::Bool
222
- true
228
+ val.is_a?(TrueClass) || val.is_a?(FalseClass)
223
229
  when Types::Bases::Top
224
230
  true
225
231
  when Types::Bases::Bottom
@@ -235,7 +241,7 @@ module RBS
235
241
  when Types::Bases::Instance
236
242
  Test.call(val, IS_AP, self_class)
237
243
  when Types::ClassInstance
238
- klass = get_class(type.name)
244
+ klass = get_class(type.name) or return false
239
245
  case
240
246
  when klass == ::Array
241
247
  Test.call(val, IS_AP, klass) && each_sample(val).all? {|v| value(v, type.args[0]) }
@@ -281,7 +287,7 @@ module RBS
281
287
  Test.call(val, IS_AP, klass)
282
288
  end
283
289
  when Types::ClassSingleton
284
- klass = get_class(type.name)
290
+ klass = get_class(type.name) or return false
285
291
  val == klass
286
292
  when Types::Interface
287
293
  methods = Set.new(Test.call(val, METHODS))
@@ -1,3 +1,3 @@
1
1
  module RBS
2
- VERSION = "0.14.0"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -19,7 +19,7 @@ module RBS
19
19
 
20
20
  def resolve_constant_reference_context: (Symbol, context: Array[Namespace]) -> Constant?
21
21
 
22
- def resolve_constant_reference_inherit: (Symbol, scopes: Array[Namespace], ?no_object: bool) -> Constant?
22
+ def resolve_constant_reference_inherit: (Symbol, scopes: Array[Namespace], ?no_object: boolish) -> Constant?
23
23
 
24
24
  def constant_scopes: (TypeName) -> Array[Namespace]
25
25
 
@@ -14,7 +14,7 @@ module RBS
14
14
  attr_reader variance: variance
15
15
  attr_reader skip_validation: bool
16
16
 
17
- def initialize: (name: Symbol, variance: variance, skip_validation: bool) -> void
17
+ def initialize: (name: Symbol, variance: variance, skip_validation: boolish) -> void
18
18
 
19
19
  include _ToJson
20
20
  end
@@ -18,7 +18,7 @@ module RBS
18
18
  class TypeDef
19
19
  attr_reader type: MethodType
20
20
  attr_reader member: method_member
21
- attr_reader defined_in: TypeName?
21
+ attr_reader defined_in: TypeName
22
22
  attr_reader implemented_in: TypeName?
23
23
 
24
24
  def initialize: (type: MethodType, member: method_member, defined_in: TypeName?, implemented_in: TypeName?) -> void
@@ -42,12 +42,12 @@ module RBS
42
42
 
43
43
  def gem?: (String, String?) -> Pathname?
44
44
 
45
- def each_signature: (Pathname, ?immediate: bool) { (Pathname) -> void } -> void
46
- | (Pathname, ?immediate: bool) -> Enumerator[Pathname, void]
45
+ def each_signature: (Pathname, ?immediate: boolish) { (Pathname) -> void } -> void
46
+ | (Pathname, ?immediate: boolish) -> Enumerator[Pathname, void]
47
47
 
48
48
  def each_library_path: { (path, Pathname) -> void } -> void
49
49
 
50
- def no_builtin!: (?bool) -> self
50
+ def no_builtin!: (?boolish) -> self
51
51
 
52
52
  def no_builtin?: () -> bool
53
53
 
@@ -23,7 +23,7 @@ module RBS
23
23
  attr_reader comment: Comment?
24
24
  attr_reader overload: bool
25
25
 
26
- def initialize: (name: Symbol, kind: kind, types: Array[MethodType], annotations: Array[Annotation], location: Location?, comment: Comment?, overload: bool) -> void
26
+ def initialize: (name: Symbol, kind: kind, types: Array[MethodType], annotations: Array[Annotation], location: Location?, comment: Comment?, overload: boolish) -> void
27
27
 
28
28
  include _HashEqual
29
29
  include _ToJson
@@ -34,7 +34,7 @@ module RBS
34
34
 
35
35
  def overload?: () -> bool
36
36
 
37
- def update: (?name: Symbol, ?kind: kind, ?types: Array[MethodType], ?annotations: Array[Annotation], ?location: Location?, ?comment: Comment?, ?overload: bool) -> MethodDefinition
37
+ def update: (?name: Symbol, ?kind: kind, ?types: Array[MethodType], ?annotations: Array[Annotation], ?location: Location?, ?comment: Comment?, ?overload: boolish) -> MethodDefinition
38
38
  end
39
39
 
40
40
  module Var
@@ -4,7 +4,7 @@ module RBS
4
4
  attr_reader type: Types::Function
5
5
  attr_reader required: bool
6
6
 
7
- def initialize: (type: Types::Function, required: bool) -> void
7
+ def initialize: (type: Types::Function, required: boolish) -> void
8
8
 
9
9
  def ==: (untyped other) -> bool
10
10
 
@@ -28,7 +28,7 @@ module RBS
28
28
  class Namespace
29
29
  attr_reader path: Array[Symbol]
30
30
 
31
- def initialize: (path: Array[Symbol], absolute: bool) -> void
31
+ def initialize: (path: Array[Symbol], absolute: boolish) -> void
32
32
 
33
33
  # Returns new _empty_ namespace.
34
34
  def self.empty: () -> Namespace
@@ -67,5 +67,5 @@ module Base64
67
67
  # 64 Encoding with URL and Filename Safe Alphabet'' in RFC 4648. The alphabet
68
68
  # uses '-' instead of '+' and '_' instead of '/'. Note that the result can still
69
69
  # contain '='. You can remove the padding by setting `padding` as false.
70
- def self?.urlsafe_encode64: (String bin, ?padding: bool) -> String
70
+ def self?.urlsafe_encode64: (String bin, ?padding: boolish) -> String
71
71
  end
@@ -234,7 +234,7 @@
234
234
  # for pack.c
235
235
  #
236
236
  class Array[unchecked out Elem] < Object
237
- include Enumerable[Elem, Array[Elem]]
237
+ include Enumerable[Elem, self]
238
238
 
239
239
  # Returns a new array.
240
240
  #
@@ -285,9 +285,9 @@ class Array[unchecked out Elem] < Object
285
285
  # a # => [{"cat"=>"feline"}, {}]
286
286
  #
287
287
  def initialize: () -> void
288
- | (Array[Elem] ary) -> void
288
+ | (::Array[Elem] ary) -> void
289
289
  | (int size, ?Elem val) -> void
290
- | (int size) { (Integer index) -> Elem } -> void
290
+ | (int size) { (::Integer index) -> Elem } -> void
291
291
 
292
292
  # Returns a new array populated with the given objects.
293
293
  #
@@ -324,7 +324,7 @@ class Array[unchecked out Elem] < Object
324
324
  #
325
325
  # See also Array#uniq.
326
326
  #
327
- def &: (Array[untyped] | _ToAry[untyped]) -> ::Array[Elem]
327
+ def &: (::Array[untyped] | _ToAry[untyped]) -> ::Array[Elem]
328
328
 
329
329
  # Repetition --- With a String argument, equivalent to `ary.join(str)`.
330
330
  #
@@ -334,8 +334,8 @@ class Array[unchecked out Elem] < Object
334
334
  # [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
335
335
  # [ 1, 2, 3 ] * "," #=> "1,2,3"
336
336
  #
337
- def *: (string str) -> String
338
- | (int int) -> Array[Elem]
337
+ def *: (string str) -> ::String
338
+ | (int int) -> ::Array[Elem]
339
339
 
340
340
  # Concatenation --- Returns a new array built by concatenating the two arrays
341
341
  # together to produce a third array.
@@ -388,7 +388,7 @@ class Array[unchecked out Elem] < Object
388
388
  # a
389
389
  # #=> [ 1, 2, "c", "d", [ 3, 4 ] ]
390
390
  #
391
- def <<: (Elem) -> ::Array[Elem]
391
+ def <<: (Elem) -> self
392
392
 
393
393
  # Comparison --- Returns an integer (`-1`, `0`, or `+1`) if this array is less
394
394
  # than, equal to, or greater than `other_ary`.
@@ -413,7 +413,7 @@ class Array[unchecked out Elem] < Object
413
413
  # [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
414
414
  # [ 1, 2 ] <=> [ 1, :two ] #=> nil
415
415
  #
416
- def <=>: (untyped) -> Integer?
416
+ def <=>: (untyped) -> ::Integer?
417
417
 
418
418
  # Equality --- Two arrays are equal if they contain the same number of elements
419
419
  # and if each element is equal to (according to Object#==) the corresponding
@@ -452,7 +452,7 @@ class Array[unchecked out Elem] < Object
452
452
  #
453
453
  def []: (int index) -> Elem
454
454
  | (int start, int length) -> ::Array[Elem]?
455
- | (Range[Integer] range) -> ::Array[Elem]?
455
+ | (::Range[::Integer] range) -> ::Array[Elem]?
456
456
 
457
457
  # Element Assignment --- Sets the element at `index`, or replaces a subarray
458
458
  # from the `start` index for `length` elements, or replaces a subarray specified
@@ -484,17 +484,17 @@ class Array[unchecked out Elem] < Object
484
484
  #
485
485
  def []=: (int index, Elem obj) -> Elem
486
486
  | (int start, int length, Elem obj) -> Elem
487
- | (int start, int length, Array[Elem]) -> Array[Elem]
487
+ | (int start, int length, ::Array[Elem]) -> ::Array[Elem]
488
488
  | (int start, int length, nil) -> nil
489
- | (Range[Integer], Elem obj) -> Elem
490
- | (Range[Integer], Array[Elem]) -> Array[Elem]
491
- | (Range[Integer], nil) -> nil
489
+ | (::Range[::Integer], Elem obj) -> Elem
490
+ | (::Range[::Integer], ::Array[Elem]) -> ::Array[Elem]
491
+ | (::Range[::Integer], nil) -> nil
492
492
 
493
493
  # See also Enumerable#all?
494
494
  #
495
495
  def all?: () -> bool
496
496
  | (_Pattern[Elem] pattern) -> bool
497
- | () { (Elem obj) -> bool } -> bool
497
+ | () { (Elem obj) -> boolish } -> bool
498
498
 
499
499
  # See also Enumerable#any?
500
500
  #
@@ -517,7 +517,7 @@ class Array[unchecked out Elem] < Object
517
517
  # a.assoc("letters") #=> [ "letters", "a", "b", "c" ]
518
518
  # a.assoc("foo") #=> nil
519
519
  #
520
- def assoc: (untyped) -> Array[untyped]?
520
+ def assoc: (untyped) -> ::Array[untyped]?
521
521
 
522
522
  # Returns the element at `index`. A negative index counts from the end of
523
523
  # `self`. Returns `nil` if the index is out of range. See also Array#[].
@@ -577,7 +577,7 @@ class Array[unchecked out Elem] < Object
577
577
  # actually picked up at each iteration.
578
578
  #
579
579
  def bsearch: () { (Elem) -> (true | false) } -> Elem?
580
- | () { (Elem) -> Integer } -> Elem?
580
+ | () { (Elem) -> ::Integer } -> Elem?
581
581
 
582
582
  # By using binary search, finds an index of a value from this array which meets
583
583
  # the given condition in O(log n) where n is the size of the array.
@@ -587,8 +587,8 @@ class Array[unchecked out Elem] < Object
587
587
  # that this method returns the index of the element instead of the element
588
588
  # itself. For more details consult the documentation for #bsearch.
589
589
  #
590
- def bsearch_index: () { (Elem) -> (true | false) } -> Integer?
591
- | () { (Elem) -> Integer } -> Integer?
590
+ def bsearch_index: () { (Elem) -> (true | false) } -> ::Integer?
591
+ | () { (Elem) -> ::Integer } -> ::Integer?
592
592
 
593
593
  # Removes all elements from `self`.
594
594
  #
@@ -610,8 +610,8 @@ class Array[unchecked out Elem] < Object
610
610
  # a.map.with_index {|x, i| x * i} #=> ["", "b", "cc", "ddd"]
611
611
  # a #=> ["a", "b", "c", "d"]
612
612
  #
613
- def collect: [U] () { (Elem item) -> U } -> Array[U]
614
- | () -> Enumerator[Elem, Array[untyped]]
613
+ def collect: [U] () { (Elem item) -> U } -> ::Array[U]
614
+ | () -> ::Enumerator[Elem, ::Array[untyped]]
615
615
 
616
616
  # Invokes the given block once for each element of `self`, replacing the element
617
617
  # with the value returned by the block.
@@ -648,15 +648,15 @@ class Array[unchecked out Elem] < Object
648
648
  # a.combination(0).to_a #=> [[]] # one combination of length 0
649
649
  # a.combination(5).to_a #=> [] # no combinations of length 5
650
650
  #
651
- def combination: (int n) { (Array[Elem]) -> void } -> self
652
- | (int n) -> Enumerator[Array[Elem], self]
651
+ def combination: (int n) { (::Array[Elem]) -> void } -> self
652
+ | (int n) -> ::Enumerator[::Array[Elem], self]
653
653
 
654
654
  # Returns a copy of `self` with all `nil` elements removed.
655
655
  #
656
656
  # [ "a", nil, "b", nil, "c", nil ].compact
657
657
  # #=> [ "a", "b", "c" ]
658
658
  #
659
- def compact: () -> Array[Elem]
659
+ def compact: () -> ::Array[Elem]
660
660
 
661
661
  # Removes `nil` elements from the array.
662
662
  #
@@ -665,7 +665,7 @@ class Array[unchecked out Elem] < Object
665
665
  # [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
666
666
  # [ "a", "b", "c" ].compact! #=> nil
667
667
  #
668
- def compact!: () -> Array[Elem]?
668
+ def compact!: () -> self?
669
669
 
670
670
  # Appends the elements of `other_ary`s to `self`.
671
671
  #
@@ -682,7 +682,7 @@ class Array[unchecked out Elem] < Object
682
682
  #
683
683
  # See also Array#+.
684
684
  #
685
- def concat: (*Array[Elem] arrays) -> ::Array[Elem]
685
+ def concat: (*::Array[Elem] arrays) -> ::Array[Elem]
686
686
 
687
687
  # Returns the number of elements.
688
688
  #
@@ -697,9 +697,9 @@ class Array[unchecked out Elem] < Object
697
697
  # ary.count(2) #=> 2
698
698
  # ary.count {|x| x%2 == 0} #=> 3
699
699
  #
700
- def count: () -> Integer
701
- | (untyped obj) -> Integer
702
- | () { (Elem) -> bool } -> Integer
700
+ def count: () -> ::Integer
701
+ | (untyped obj) -> ::Integer
702
+ | () { (Elem) -> boolish } -> ::Integer
703
703
 
704
704
  # Calls the given block for each element `n` times or forever if `nil` is given.
705
705
  #
@@ -714,9 +714,9 @@ class Array[unchecked out Elem] < Object
714
714
  # a.cycle(2) {|x| puts x} # print, a, b, c, a, b, c.
715
715
  #
716
716
  def cycle: (?int? n) { (Elem) -> void } -> nil
717
- | (?int? n) -> Enumerator[Elem, nil]
717
+ | (?int? n) -> ::Enumerator[Elem, nil]
718
718
 
719
- def deconstruct: () -> Array[Integer]
719
+ def deconstruct: () -> self
720
720
 
721
721
  # Deletes all items from `self` that are equal to `obj`.
722
722
  #
@@ -759,8 +759,8 @@ class Array[unchecked out Elem] < Object
759
759
  # scores = [ 97, 42, 75 ]
760
760
  # scores.delete_if {|score| score < 80 } #=> [97]
761
761
  #
762
- def delete_if: () { (Elem item) -> bool } -> Array[Elem]
763
- | () -> Enumerator[Elem, self]
762
+ def delete_if: () { (Elem item) -> boolish } -> self
763
+ | () -> ::Enumerator[Elem, self]
764
764
 
765
765
  # Array Difference
766
766
  #
@@ -786,7 +786,7 @@ class Array[unchecked out Elem] < Object
786
786
  #
787
787
  # See also Array#-.
788
788
  #
789
- def difference: (*::Array[untyped] arrays) -> Array[Elem]
789
+ def difference: (*::Array[untyped] arrays) -> ::Array[Elem]
790
790
 
791
791
  # Extracts the nested value specified by the sequence of *idx* objects by
792
792
  # calling `dig` at each step, returning `nil` if any intermediate step is `nil`.
@@ -824,8 +824,8 @@ class Array[unchecked out Elem] < Object
824
824
  # a = [1, 2, 3, 4, 5, 0]
825
825
  # a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0]
826
826
  #
827
- def drop_while: () { (Elem obj) -> bool } -> Array[Elem]
828
- | () -> ::Enumerator[Elem, Array[Elem]]
827
+ def drop_while: () { (Elem obj) -> boolish } -> ::Array[Elem]
828
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
829
829
 
830
830
  # Calls the given block once for each element in `self`, passing that element as
831
831
  # a parameter. Returns the array itself.
@@ -839,8 +839,8 @@ class Array[unchecked out Elem] < Object
839
839
  #
840
840
  # a -- b -- c --
841
841
  #
842
- def each: () -> ::Enumerator[Elem, Array[Elem]]
843
- | () { (Elem item) -> void } -> Array[Elem]
842
+ def each: () -> ::Enumerator[Elem, self]
843
+ | () { (Elem item) -> void } -> self
844
844
 
845
845
  # Same as Array#each, but passes the `index` of the element instead of the
846
846
  # element itself.
@@ -854,8 +854,8 @@ class Array[unchecked out Elem] < Object
854
854
  #
855
855
  # 0 -- 1 -- 2 --
856
856
  #
857
- def each_index: () { (Integer index) -> void } -> Array[Elem]
858
- | () -> ::Enumerator[Elem, Array[Elem]]
857
+ def each_index: () { (::Integer index) -> void } -> self
858
+ | () -> ::Enumerator[Elem, self]
859
859
 
860
860
  # Returns `true` if `self` contains no elements.
861
861
  #
@@ -887,7 +887,7 @@ class Array[unchecked out Elem] < Object
887
887
  #
888
888
  def fetch: (int index) -> Elem
889
889
  | [T] (int index, T default) -> (Elem | T)
890
- | [T] (Integer index) { (Integer index) -> T } -> (Elem | T)
890
+ | [T] (int index) { (int index) -> T } -> (Elem | T)
891
891
 
892
892
  # The first three forms set the selected elements of `self` (which may be the
893
893
  # entire array) to `obj`.
@@ -911,9 +911,9 @@ class Array[unchecked out Elem] < Object
911
911
  #
912
912
  def fill: (Elem obj) -> self
913
913
  | (Elem obj, int? start, ?int? length) -> self
914
- | (Elem obj, Range[Integer] range) -> self
915
- | (?int? start, ?int? length) { (Integer index) -> Elem } -> self
916
- | (Range[Integer] range) { (Integer index) -> Elem } -> self
914
+ | (Elem obj, ::Range[::Integer] range) -> self
915
+ | (?int? start, ?int? length) { (::Integer index) -> Elem } -> self
916
+ | (::Range[::Integer] range) { (::Integer index) -> Elem } -> self
917
917
 
918
918
  # Returns a new array containing all elements of `ary` for which the given
919
919
  # `block` returns a true value.
@@ -929,8 +929,8 @@ class Array[unchecked out Elem] < Object
929
929
  #
930
930
  # Array#filter is an alias for Array#select.
931
931
  #
932
- def filter: () { (Elem item) -> bool } -> Array[Elem]
933
- | () -> Enumerator[Elem, Array[Elem]]
932
+ def filter: () { (Elem item) -> boolish } -> ::Array[Elem]
933
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
934
934
 
935
935
  # Invokes the given block passing in successive elements from `self`, deleting
936
936
  # elements for which the block returns a `false` value.
@@ -945,8 +945,8 @@ class Array[unchecked out Elem] < Object
945
945
  #
946
946
  # Array#filter! is an alias for Array#select!.
947
947
  #
948
- def filter!: () { (Elem item) -> bool } -> Array[Elem]?
949
- | () -> Enumerator[Elem, Array[Elem]?]
948
+ def filter!: () { (Elem item) -> boolish } -> self?
949
+ | () -> ::Enumerator[Elem, self?]
950
950
 
951
951
  # Returns the *index* of the first object in `ary` such that the object is `==`
952
952
  # to `obj`.
@@ -964,9 +964,9 @@ class Array[unchecked out Elem] < Object
964
964
  # a.index("z") #=> nil
965
965
  # a.index {|x| x == "b"} #=> 1
966
966
  #
967
- def find_index: (untyped obj) -> Integer?
968
- | () { (Elem item) -> bool } -> Integer?
969
- | () -> Enumerator[Elem, Integer?]
967
+ def find_index: (untyped obj) -> ::Integer?
968
+ | () { (Elem item) -> boolish } -> ::Integer?
969
+ | () -> ::Enumerator[Elem, ::Integer?]
970
970
 
971
971
  # Returns the first element, or the first `n` elements, of the array. If the
972
972
  # array is empty, the first form returns `nil`, and the second form returns an
@@ -977,7 +977,7 @@ class Array[unchecked out Elem] < Object
977
977
  # a.first(2) #=> ["q", "r"]
978
978
  #
979
979
  def first: () -> Elem?
980
- | (int n) -> Array[Elem]
980
+ | (int n) -> ::Array[Elem]
981
981
 
982
982
  # Returns a new array that is a one-dimensional flattening of `self`
983
983
  # (recursively).
@@ -1010,7 +1010,7 @@ class Array[unchecked out Elem] < Object
1010
1010
  # a = [ 1, 2, [3, [4, 5] ] ]
1011
1011
  # a.flatten!(1) #=> [1, 2, 3, [4, 5]]
1012
1012
  #
1013
- def flatten!: (?int level) -> Array[untyped]?
1013
+ def flatten!: (?int level) -> self?
1014
1014
 
1015
1015
  # Compute a hash-code for this array.
1016
1016
  #
@@ -1019,7 +1019,7 @@ class Array[unchecked out Elem] < Object
1019
1019
  #
1020
1020
  # See also Object#hash.
1021
1021
  #
1022
- def hash: () -> Integer
1022
+ def hash: () -> ::Integer
1023
1023
 
1024
1024
  # Returns `true` if the given `object` is present in `self` (that is, if any
1025
1025
  # element `==` `object`), otherwise returns `false`.
@@ -1059,7 +1059,7 @@ class Array[unchecked out Elem] < Object
1059
1059
  # a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
1060
1060
  # a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
1061
1061
  #
1062
- def insert: (int index, *Elem obj) -> Array[Elem]
1062
+ def insert: (int index, *Elem obj) -> self
1063
1063
 
1064
1064
  # Creates a string representation of `self`, by calling #inspect on each
1065
1065
  # element.
@@ -1079,7 +1079,7 @@ class Array[unchecked out Elem] < Object
1079
1079
  #
1080
1080
  # See also Array#&.
1081
1081
  #
1082
- def intersection: (*Array[untyped] | _ToAry[untyped] other_ary) -> Array[Elem]
1082
+ def intersection: (*::Array[untyped] | _ToAry[untyped] other_ary) -> ::Array[Elem]
1083
1083
 
1084
1084
  # Returns a string created by converting each element of the array to a string,
1085
1085
  # separated by the given `separator`. If the `separator` is `nil`, it uses
@@ -1106,8 +1106,8 @@ class Array[unchecked out Elem] < Object
1106
1106
  #
1107
1107
  # See also Array#select!.
1108
1108
  #
1109
- def keep_if: () { (Elem item) -> bool } -> Array[Elem]
1110
- | () -> Enumerator[Elem, Array[Elem]]
1109
+ def keep_if: () { (Elem item) -> boolish } -> self
1110
+ | () -> ::Enumerator[Elem, self]
1111
1111
 
1112
1112
  # Returns the last element(s) of `self`. If the array is empty, the first form
1113
1113
  # returns `nil`.
@@ -1119,14 +1119,14 @@ class Array[unchecked out Elem] < Object
1119
1119
  # a.last(2) #=> ["y", "z"]
1120
1120
  #
1121
1121
  def last: () -> Elem?
1122
- | (int n) -> Array[Elem]
1122
+ | (int n) -> ::Array[Elem]
1123
1123
 
1124
1124
  # Returns the number of elements in `self`. May be zero.
1125
1125
  #
1126
1126
  # [ 1, 2, 3, 4, 5 ].length #=> 5
1127
1127
  # [].length #=> 0
1128
1128
  #
1129
- def length: () -> Integer
1129
+ def length: () -> ::Integer
1130
1130
 
1131
1131
  # Invokes the given block once for each element of `self`.
1132
1132
  #
@@ -1172,9 +1172,9 @@ class Array[unchecked out Elem] < Object
1172
1172
  # ary.max(2) {|a, b| a.length <=> b.length } #=> ["albatross", "horse"]
1173
1173
  #
1174
1174
  def max: () -> Elem?
1175
- | () { (Elem a, Elem b) -> Integer? } -> Elem?
1176
- | (int n) -> Array[Elem]
1177
- | (int n) { (Elem a, Elem b) -> Integer? } -> Array[Elem]
1175
+ | () { (Elem a, Elem b) -> ::Integer? } -> Elem?
1176
+ | (int n) -> ::Array[Elem]
1177
+ | (int n) { (Elem a, Elem b) -> ::Integer? } -> ::Array[Elem]
1178
1178
 
1179
1179
  # Returns the object in *ary* with the minimum value. The first form assumes all
1180
1180
  # objects implement Comparable; the second uses the block to return *a <=> b*.
@@ -1198,7 +1198,7 @@ class Array[unchecked out Elem] < Object
1198
1198
  # <=> b`.
1199
1199
  #
1200
1200
  def minmax: () -> [ Elem?, Elem? ]
1201
- | () { (Elem a, Elem b) -> Integer? } -> [ Elem?, Elem? ]
1201
+ | () { (Elem a, Elem b) -> ::Integer? } -> [ Elem?, Elem? ]
1202
1202
 
1203
1203
  # See also Enumerable#none?
1204
1204
  #
@@ -1352,8 +1352,8 @@ class Array[unchecked out Elem] < Object
1352
1352
  # a.permutation(0).to_a #=> [[]] # one permutation of length 0
1353
1353
  # a.permutation(4).to_a #=> [] # no permutations of length 4
1354
1354
  #
1355
- def permutation: (?Integer n) -> Enumerator[Array[Elem], Array[Elem]]
1356
- | (?Integer n) { (Array[Elem] p) -> void } -> Array[Elem]
1355
+ def permutation: (?int n) -> ::Enumerator[::Array[Elem], ::Array[Elem]]
1356
+ | (?int n) { (::Array[Elem] p) -> void } -> ::Array[Elem]
1357
1357
 
1358
1358
  # Removes the last element from `self` and returns it, or `nil` if the array is
1359
1359
  # empty.
@@ -1368,7 +1368,7 @@ class Array[unchecked out Elem] < Object
1368
1368
  # a #=> ["a"]
1369
1369
  #
1370
1370
  def pop: () -> Elem?
1371
- | (int n) -> Array[Elem]
1371
+ | (int n) -> ::Array[Elem]
1372
1372
 
1373
1373
  alias prepend unshift
1374
1374
 
@@ -1387,10 +1387,10 @@ class Array[unchecked out Elem] < Object
1387
1387
  # [1,2].product() #=> [[1],[2]]
1388
1388
  # [1,2].product([]) #=> []
1389
1389
  #
1390
- def product: () -> Array[[Elem]]
1391
- | [X] (Array[X] other_ary) -> Array[[Elem, X]]
1392
- | [X, Y] (Array[X] other_ary1, Array[Y] other_ary2) -> Array[[Elem, X, Y]]
1393
- | [U] (*::Array[U] other_arys) -> Array[Array[Elem | U]]
1390
+ def product: () -> ::Array[[Elem]]
1391
+ | [X] (::Array[X] other_ary) -> ::Array[[Elem, X]]
1392
+ | [X, Y] (::Array[X] other_ary1, ::Array[Y] other_ary2) -> ::Array[[Elem, X, Y]]
1393
+ | [U] (*::Array[U] other_arys) -> ::Array[::Array[Elem | U]]
1394
1394
 
1395
1395
  # Append --- Pushes the given object(s) on to the end of this array. This
1396
1396
  # expression returns the array itself, so several appends may be chained
@@ -1402,7 +1402,7 @@ class Array[unchecked out Elem] < Object
1402
1402
  # [1, 2, 3].push(4).push(5)
1403
1403
  # #=> [1, 2, 3, 4, 5]
1404
1404
  #
1405
- def push: (*Elem obj) -> Array[Elem]
1405
+ def push: (*Elem obj) -> self
1406
1406
 
1407
1407
  # Searches through the array whose elements are also arrays.
1408
1408
  #
@@ -1436,8 +1436,8 @@ class Array[unchecked out Elem] < Object
1436
1436
  #
1437
1437
  # If no block is given, an Enumerator is returned instead.
1438
1438
  #
1439
- def reject!: () { (Elem item) -> bool } -> Array[Elem]?
1440
- | () -> ::Enumerator[Elem, Array[Elem]?]
1439
+ def reject!: () { (Elem item) -> boolish } -> self?
1440
+ | () -> ::Enumerator[Elem, self?]
1441
1441
 
1442
1442
  # When invoked with a block, yields all repeated combinations of length `n` of
1443
1443
  # elements from the array and then returns the array itself.
@@ -1459,8 +1459,8 @@ class Array[unchecked out Elem] < Object
1459
1459
  # # [2,2,2,2],[2,2,2,3],[2,2,3,3],[2,3,3,3],[3,3,3,3]]
1460
1460
  # a.repeated_combination(0).to_a #=> [[]] # one combination of length 0
1461
1461
  #
1462
- def repeated_combination: (int n) { (Array[Elem] c) -> void } -> self
1463
- | (int n) -> Enumerator[Array[Elem], self]
1462
+ def repeated_combination: (int n) { (::Array[Elem] c) -> void } -> self
1463
+ | (int n) -> ::Enumerator[::Array[Elem], self]
1464
1464
 
1465
1465
  # When invoked with a block, yield all repeated permutations of length `n` of
1466
1466
  # the elements of the array, then return the array itself.
@@ -1479,8 +1479,8 @@ class Array[unchecked out Elem] < Object
1479
1479
  # # [2,1,1],[2,1,2],[2,2,1],[2,2,2]]
1480
1480
  # a.repeated_permutation(0).to_a #=> [[]] # one permutation of length 0
1481
1481
  #
1482
- def repeated_permutation: (int n) { (Array[Elem] p) -> void } -> self
1483
- | (int n) -> Enumerator[Array[Elem], self]
1482
+ def repeated_permutation: (int n) { (::Array[Elem] p) -> void } -> self
1483
+ | (int n) -> ::Enumerator[::Array[Elem], self]
1484
1484
 
1485
1485
  # Replaces the contents of `self` with the contents of `other_ary`, truncating
1486
1486
  # or expanding if necessary.
@@ -1489,14 +1489,14 @@ class Array[unchecked out Elem] < Object
1489
1489
  # a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"]
1490
1490
  # a #=> ["x", "y", "z"]
1491
1491
  #
1492
- def replace: (Array[Elem]) -> self
1492
+ def replace: (::Array[Elem]) -> self
1493
1493
 
1494
1494
  # Returns a new array containing `self`'s elements in reverse order.
1495
1495
  #
1496
1496
  # [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
1497
1497
  # [ 1 ].reverse #=> [1]
1498
1498
  #
1499
- def reverse: () -> Array[Elem]
1499
+ def reverse: () -> ::Array[Elem]
1500
1500
 
1501
1501
  # Reverses `self` in place.
1502
1502
  #
@@ -1504,7 +1504,7 @@ class Array[unchecked out Elem] < Object
1504
1504
  # a.reverse! #=> ["c", "b", "a"]
1505
1505
  # a #=> ["c", "b", "a"]
1506
1506
  #
1507
- def reverse!: () -> Array[Elem]
1507
+ def reverse!: () -> ::Array[Elem]
1508
1508
 
1509
1509
  # Same as Array#each, but traverses `self` in reverse order.
1510
1510
  #
@@ -1515,8 +1515,8 @@ class Array[unchecked out Elem] < Object
1515
1515
  #
1516
1516
  # c b a
1517
1517
  #
1518
- def reverse_each: () { (Elem item) -> void } -> Array[Elem]
1519
- | () -> Enumerator[Elem, Array[Elem]]
1518
+ def reverse_each: () { (Elem item) -> void } -> self
1519
+ | () -> ::Enumerator[Elem, self]
1520
1520
 
1521
1521
  # Returns the *index* of the last object in `self` `==` to `obj`.
1522
1522
  #
@@ -1534,9 +1534,9 @@ class Array[unchecked out Elem] < Object
1534
1534
  # a.rindex("z") #=> nil
1535
1535
  # a.rindex {|x| x == "b"} #=> 3
1536
1536
  #
1537
- def rindex: (untyped obj) -> Integer?
1538
- | () { (Elem item) -> bool } -> Integer?
1539
- | () -> Enumerator[Elem, Integer?]
1537
+ def rindex: (untyped obj) -> ::Integer?
1538
+ | () { (Elem item) -> boolish } -> ::Integer?
1539
+ | () -> ::Enumerator[Elem, ::Integer?]
1540
1540
 
1541
1541
  # Returns a new array by rotating `self` so that the element at `count` is the
1542
1542
  # first element of the new array.
@@ -1550,7 +1550,7 @@ class Array[unchecked out Elem] < Object
1550
1550
  # a.rotate(2) #=> ["c", "d", "a", "b"]
1551
1551
  # a.rotate(-3) #=> ["b", "c", "d", "a"]
1552
1552
  #
1553
- def rotate: (?int count) -> Array[Elem]
1553
+ def rotate: (?int count) -> ::Array[Elem]
1554
1554
 
1555
1555
  # Rotates `self` in place so that the element at `count` comes first, and
1556
1556
  # returns `self`.
@@ -1564,7 +1564,7 @@ class Array[unchecked out Elem] < Object
1564
1564
  # a.rotate!(2) #=> ["d", "a", "b", "c"]
1565
1565
  # a.rotate!(-3) #=> ["a", "b", "c", "d"]
1566
1566
  #
1567
- def rotate!: (?int count) -> Array[Elem]
1567
+ def rotate!: (?int count) -> self
1568
1568
 
1569
1569
  # Choose a random element or `n` random elements from the array.
1570
1570
  #
@@ -1601,8 +1601,8 @@ class Array[unchecked out Elem] < Object
1601
1601
  #
1602
1602
  # Array#filter is an alias for Array#select.
1603
1603
  #
1604
- def select: () { (Elem item) -> bool } -> Array[Elem]
1605
- | () -> Enumerator[Elem, Array[Elem]]
1604
+ def select: () { (Elem item) -> boolish } -> ::Array[Elem]
1605
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
1606
1606
 
1607
1607
  # Invokes the given block passing in successive elements from `self`, deleting
1608
1608
  # elements for which the block returns a `false` value.
@@ -1617,8 +1617,8 @@ class Array[unchecked out Elem] < Object
1617
1617
  #
1618
1618
  # Array#filter! is an alias for Array#select!.
1619
1619
  #
1620
- def select!: () { (Elem item) -> bool } -> Array[Elem]?
1621
- | () -> ::Enumerator[Elem, Array[Elem]?]
1620
+ def select!: () { (Elem item) -> boolish } -> self?
1621
+ | () -> ::Enumerator[Elem, self?]
1622
1622
 
1623
1623
  # Removes the first element of `self` and returns it (shifting all other
1624
1624
  # elements down by one). Returns `nil` if the array is empty.
@@ -1637,7 +1637,7 @@ class Array[unchecked out Elem] < Object
1637
1637
  # args #=> ["filename"]
1638
1638
  #
1639
1639
  def shift: () -> Elem?
1640
- | (?int n) -> Array[Elem]
1640
+ | (?int n) -> ::Array[Elem]
1641
1641
 
1642
1642
  # Returns a new array with elements of `self` shuffled.
1643
1643
  #
@@ -1649,7 +1649,7 @@ class Array[unchecked out Elem] < Object
1649
1649
  #
1650
1650
  # a.shuffle(random: Random.new(1)) #=> [1, 3, 2]
1651
1651
  #
1652
- def shuffle: (?random: Random rng) -> Array[Elem]
1652
+ def shuffle: (?random: Random rng) -> ::Array[Elem]
1653
1653
 
1654
1654
  # Shuffles elements in `self` in place.
1655
1655
  #
@@ -1661,7 +1661,7 @@ class Array[unchecked out Elem] < Object
1661
1661
  #
1662
1662
  # a.shuffle!(random: Random.new(1)) #=> [1, 3, 2]
1663
1663
  #
1664
- def shuffle!: (?random: Random rng) -> Array[Elem]
1664
+ def shuffle!: (?random: Random rng) -> self
1665
1665
 
1666
1666
  alias size length
1667
1667
 
@@ -1691,8 +1691,8 @@ class Array[unchecked out Elem] < Object
1691
1691
  # a[5..10] #=> []
1692
1692
  #
1693
1693
  def slice: (int index) -> Elem?
1694
- | (int start, int length) -> Array[Elem]?
1695
- | (Range[Integer] range) -> Array[Elem]?
1694
+ | (int start, int length) -> ::Array[Elem]?
1695
+ | (::Range[::Integer] range) -> ::Array[Elem]?
1696
1696
 
1697
1697
  # Deletes the element(s) given by an `index` (optionally up to `length`
1698
1698
  # elements) or by a `range`.
@@ -1709,8 +1709,8 @@ class Array[unchecked out Elem] < Object
1709
1709
  # a #=> ["a"]
1710
1710
  #
1711
1711
  def slice!: (int index) -> Elem?
1712
- | (int start, int length) -> Array[Elem]?
1713
- | (Range[Integer] range) -> Array[Elem]?
1712
+ | (int start, int length) -> ::Array[Elem]?
1713
+ | (::Range[::Integer] range) -> ::Array[Elem]?
1714
1714
 
1715
1715
  # Returns a new array created by sorting `self`.
1716
1716
  #
@@ -1736,7 +1736,7 @@ class Array[unchecked out Elem] < Object
1736
1736
  # See also Enumerable#sort_by.
1737
1737
  #
1738
1738
  def sort: () -> ::Array[Elem]
1739
- | () { (Elem a, Elem b) -> Integer? } -> Array[Elem]
1739
+ | () { (Elem a, Elem b) -> ::Integer? } -> ::Array[Elem]
1740
1740
 
1741
1741
  # Sorts `self` in place.
1742
1742
  #
@@ -1756,8 +1756,8 @@ class Array[unchecked out Elem] < Object
1756
1756
  #
1757
1757
  # See also Enumerable#sort_by.
1758
1758
  #
1759
- def sort!: () -> Array[Elem]
1760
- | () { (Elem a, Elem b) -> Integer? } -> Array[Elem]
1759
+ def sort!: () -> self
1760
+ | () { (Elem a, Elem b) -> ::Integer? } -> self
1761
1761
 
1762
1762
  # Sorts `self` in place using a set of keys generated by mapping the values in
1763
1763
  # `self` through the given block.
@@ -1769,8 +1769,8 @@ class Array[unchecked out Elem] < Object
1769
1769
  #
1770
1770
  # See also Enumerable#sort_by.
1771
1771
  #
1772
- def sort_by!: [U] () { (Elem obj) -> U } -> Array[Elem]
1773
- | () -> Enumerator[Elem, Array[Elem]]
1772
+ def sort_by!: [U] () { (Elem obj) -> U } -> ::Array[Elem]
1773
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
1774
1774
 
1775
1775
  # Returns the sum of elements. For example, [e1, e2, e3].sum returns init + e1 +
1776
1776
  # e2 + e3.
@@ -1828,14 +1828,14 @@ class Array[unchecked out Elem] < Object
1828
1828
  # a = [1, 2, 3, 4, 5, 0]
1829
1829
  # a.take_while {|i| i < 3} #=> [1, 2]
1830
1830
  #
1831
- def take_while: () { (Elem obj) -> bool } -> Array[Elem]
1832
- | () -> Enumerator[Elem, Array[Elem]]
1831
+ def take_while: () { (Elem obj) -> boolish } -> ::Array[Elem]
1832
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
1833
1833
 
1834
1834
  # Returns `self`.
1835
1835
  #
1836
1836
  # If called on a subclass of Array, converts the receiver to an Array object.
1837
1837
  #
1838
- def to_a: () -> Array[Elem]
1838
+ def to_a: () -> ::Array[Elem]
1839
1839
 
1840
1840
  # Returns `self`.
1841
1841
  #
@@ -1864,7 +1864,7 @@ class Array[unchecked out Elem] < Object
1864
1864
  #
1865
1865
  # If the length of the subarrays don't match, an IndexError is raised.
1866
1866
  #
1867
- def transpose: () -> Array[Array[untyped]]
1867
+ def transpose: () -> ::Array[::Array[untyped]]
1868
1868
 
1869
1869
  # Set Union --- Returns a new array by joining `other_ary`s with `self`,
1870
1870
  # excluding any duplicates and preserving the order from the given arrays.
@@ -1877,7 +1877,7 @@ class Array[unchecked out Elem] < Object
1877
1877
  #
1878
1878
  # See also Array#|.
1879
1879
  #
1880
- def union: [T] (*Array[T] other_arys) -> Array[T | Elem]
1880
+ def union: [T] (*::Array[T] other_arys) -> ::Array[T | Elem]
1881
1881
 
1882
1882
  # Returns a new array by removing duplicate values in `self`.
1883
1883
  #
@@ -1893,8 +1893,8 @@ class Array[unchecked out Elem] < Object
1893
1893
  # b = [["student","sam"], ["student","george"], ["teacher","matz"]]
1894
1894
  # b.uniq {|s| s.first} # => [["student", "sam"], ["teacher", "matz"]]
1895
1895
  #
1896
- def uniq: () -> Array[Elem]
1897
- | () { (Elem item) -> untyped } -> Array[Elem]
1896
+ def uniq: () -> ::Array[Elem]
1897
+ | () { (Elem item) -> untyped } -> ::Array[Elem]
1898
1898
 
1899
1899
  # Removes duplicate elements from `self`.
1900
1900
  #
@@ -1915,8 +1915,8 @@ class Array[unchecked out Elem] < Object
1915
1915
  # c = [["student","sam"], ["student","george"], ["teacher","matz"]]
1916
1916
  # c.uniq! {|s| s.first} # => [["student", "sam"], ["teacher", "matz"]]
1917
1917
  #
1918
- def uniq!: () -> Array[Elem]?
1919
- | () { (Elem) -> untyped } -> Array[Elem]?
1918
+ def uniq!: () -> self?
1919
+ | () { (Elem) -> untyped } -> self?
1920
1920
 
1921
1921
  # Prepends objects to the front of `self`, moving other elements upwards. See
1922
1922
  # also Array#shift for the opposite effect.
@@ -1925,7 +1925,7 @@ class Array[unchecked out Elem] < Object
1925
1925
  # a.unshift("a") #=> ["a", "b", "c", "d"]
1926
1926
  # a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
1927
1927
  #
1928
- def unshift: (*Elem obj) -> ::Array[Elem]
1928
+ def unshift: (*Elem obj) -> self
1929
1929
 
1930
1930
  # Returns an array containing the elements in `self` corresponding to the given
1931
1931
  # `selector`(s).
@@ -1940,7 +1940,7 @@ class Array[unchecked out Elem] < Object
1940
1940
  # a.values_at(-1, -2, -2, -7) # => ["f", "e", "e", nil]
1941
1941
  # a.values_at(4..6, 3...6) # => ["e", "f", nil, "d", "e", "f"]
1942
1942
  #
1943
- def values_at: (*int | Range[Integer] selector) -> Array[Elem?]
1943
+ def values_at: (*int | ::Range[::Integer] selector) -> ::Array[Elem?]
1944
1944
 
1945
1945
  # Converts any arguments to arrays, then merges elements of `self` with
1946
1946
  # corresponding elements from each argument.
@@ -1960,10 +1960,10 @@ class Array[unchecked out Elem] < Object
1960
1960
  # [1, 2].zip(a, b) #=> [[1, 4, 7], [2, 5, 8]]
1961
1961
  # a.zip([1, 2], [8]) #=> [[4, 1, 8], [5, 2, nil], [6, nil, nil]]
1962
1962
  #
1963
- def zip: [U] (Array[U] arg) -> Array[[ Elem, U? ]]
1964
- | (Array[untyped] arg, *Array[untyped] args) -> Array[Array[untyped]]
1965
- | [U] (Array[U] arg) { ([Elem, U?]) -> void } -> void
1966
- | (Array[untyped] arg, *Array[untyped] args) { (Array[untyped]) -> void } -> void
1963
+ def zip: [U] (::Array[U] arg) -> ::Array[[ Elem, U? ]]
1964
+ | (::Array[untyped] arg, *::Array[untyped] args) -> ::Array[::Array[untyped]]
1965
+ | [U] (::Array[U] arg) { ([Elem, U?]) -> void } -> void
1966
+ | (::Array[untyped] arg, *::Array[untyped] args) { (::Array[untyped]) -> void } -> void
1967
1967
 
1968
1968
  # Set Union --- Returns a new array by joining `ary` with `other_ary`, excluding
1969
1969
  # any duplicates and preserving the order from the given arrays.
@@ -1975,7 +1975,7 @@ class Array[unchecked out Elem] < Object
1975
1975
  #
1976
1976
  # See also Array#union.
1977
1977
  #
1978
- def |: [T] (Array[T] other_ary) -> Array[Elem | T]
1978
+ def |: [T] (::Array[T] other_ary) -> ::Array[Elem | T]
1979
1979
 
1980
1980
  private
1981
1981
 
@@ -1989,8 +1989,12 @@ class Array[unchecked out Elem] < Object
1989
1989
  def initialize_copy: (self other_ary) -> void
1990
1990
  end
1991
1991
 
1992
+ interface _ToA[T]
1993
+ def to_a: () -> Array[T]
1994
+ end
1995
+
1992
1996
  interface _ToAry[T]
1993
- def to_ary: () -> Array[T]
1997
+ def to_ary: () -> ::Array[T]
1994
1998
  end
1995
1999
 
1996
2000
  interface Array::_Pattern[T]