rbs 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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]