rbs 0.15.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +8 -4
  3. data/CHANGELOG.md +29 -1
  4. data/Gemfile +1 -0
  5. data/README.md +1 -1
  6. data/Rakefile +19 -1
  7. data/Steepfile +0 -1
  8. data/bin/test_runner.rb +15 -1
  9. data/{stdlib/builtin → core}/array.rbs +1 -1
  10. data/{stdlib/builtin → core}/basic_object.rbs +0 -0
  11. data/{stdlib/builtin → core}/binding.rbs +0 -0
  12. data/{stdlib/builtin → core}/builtin.rbs +2 -2
  13. data/{stdlib/builtin → core}/class.rbs +0 -0
  14. data/{stdlib/builtin → core}/comparable.rbs +0 -0
  15. data/{stdlib/builtin → core}/complex.rbs +0 -0
  16. data/{stdlib/builtin → core}/constants.rbs +0 -0
  17. data/{stdlib/builtin → core}/data.rbs +0 -0
  18. data/{stdlib/builtin → core}/deprecated.rbs +0 -0
  19. data/{stdlib/builtin → core}/dir.rbs +1 -1
  20. data/{stdlib/builtin → core}/encoding.rbs +0 -0
  21. data/{stdlib/builtin → core}/enumerable.rbs +41 -40
  22. data/{stdlib/builtin → core}/enumerator.rbs +5 -5
  23. data/{stdlib/builtin → core}/errno.rbs +0 -0
  24. data/{stdlib/builtin → core}/errors.rbs +0 -0
  25. data/{stdlib/builtin → core}/exception.rbs +0 -0
  26. data/{stdlib/builtin → core}/false_class.rbs +0 -0
  27. data/{stdlib/builtin → core}/fiber.rbs +0 -0
  28. data/{stdlib/builtin → core}/fiber_error.rbs +0 -0
  29. data/{stdlib/builtin → core}/file.rbs +0 -4
  30. data/{stdlib/builtin → core}/file_test.rbs +0 -0
  31. data/{stdlib/builtin → core}/float.rbs +0 -0
  32. data/{stdlib/builtin → core}/gc.rbs +0 -0
  33. data/{stdlib/builtin → core}/hash.rbs +8 -8
  34. data/{stdlib/builtin → core}/integer.rbs +0 -0
  35. data/{stdlib/builtin → core}/io.rbs +1 -1
  36. data/{stdlib/builtin → core}/kernel.rbs +0 -0
  37. data/{stdlib/builtin → core}/marshal.rbs +0 -0
  38. data/{stdlib/builtin → core}/match_data.rbs +0 -0
  39. data/{stdlib/builtin → core}/math.rbs +0 -0
  40. data/{stdlib/builtin → core}/method.rbs +0 -0
  41. data/{stdlib/builtin → core}/module.rbs +0 -0
  42. data/{stdlib/builtin → core}/nil_class.rbs +0 -0
  43. data/{stdlib/builtin → core}/numeric.rbs +0 -0
  44. data/{stdlib/builtin → core}/object.rbs +0 -0
  45. data/core/object_space.rbs +98 -0
  46. data/{stdlib/builtin → core}/proc.rbs +0 -0
  47. data/{stdlib/builtin → core}/process.rbs +0 -0
  48. data/{stdlib/builtin → core}/random.rbs +0 -0
  49. data/{stdlib/builtin → core}/range.rbs +1 -1
  50. data/{stdlib/builtin → core}/rational.rbs +0 -0
  51. data/{stdlib/builtin → core}/rb_config.rbs +0 -0
  52. data/{stdlib/builtin → core}/regexp.rbs +0 -0
  53. data/{stdlib/builtin → core}/ruby_vm.rbs +0 -0
  54. data/{stdlib/builtin → core}/signal.rbs +0 -0
  55. data/{stdlib/builtin → core}/string.rbs +0 -0
  56. data/{stdlib/builtin → core}/string_io.rbs +0 -0
  57. data/{stdlib/builtin → core}/struct.rbs +1 -1
  58. data/{stdlib/builtin → core}/symbol.rbs +0 -0
  59. data/{stdlib/builtin → core}/thread.rbs +0 -0
  60. data/{stdlib/builtin → core}/thread_group.rbs +0 -0
  61. data/{stdlib/builtin → core}/time.rbs +0 -0
  62. data/{stdlib/builtin → core}/trace_point.rbs +0 -0
  63. data/{stdlib/builtin → core}/true_class.rbs +0 -0
  64. data/{stdlib/builtin → core}/unbound_method.rbs +0 -0
  65. data/{stdlib/builtin → core}/warning.rbs +0 -0
  66. data/docs/repo.md +125 -0
  67. data/lib/rbs.rb +1 -0
  68. data/lib/rbs/cli.rb +105 -103
  69. data/lib/rbs/definition.rb +9 -4
  70. data/lib/rbs/definition_builder.rb +48 -15
  71. data/lib/rbs/environment_loader.rb +79 -105
  72. data/lib/rbs/environment_walker.rb +70 -35
  73. data/lib/rbs/parser.rb +306 -301
  74. data/lib/rbs/parser.y +15 -8
  75. data/lib/rbs/prototype/rb.rb +150 -21
  76. data/lib/rbs/prototype/runtime.rb +1 -0
  77. data/lib/rbs/repository.rb +121 -0
  78. data/lib/rbs/test/hook.rb +25 -15
  79. data/lib/rbs/test/setup.rb +5 -3
  80. data/lib/rbs/test/type_check.rb +6 -1
  81. data/lib/rbs/type_name.rb +2 -1
  82. data/lib/rbs/vendorer.rb +38 -16
  83. data/lib/rbs/version.rb +1 -1
  84. data/sig/cli.rbs +58 -0
  85. data/sig/definition.rbs +8 -3
  86. data/sig/definition_builder.rbs +4 -1
  87. data/sig/environment_loader.rbs +92 -46
  88. data/sig/polyfill.rbs +42 -0
  89. data/sig/rbs.rbs +8 -0
  90. data/sig/repository.rbs +79 -0
  91. data/sig/vendorer.rbs +44 -0
  92. data/stdlib/abbrev/{abbrev.rbs → 0/abbrev.rbs} +0 -0
  93. data/stdlib/base64/{base64.rbs → 0/base64.rbs} +0 -0
  94. data/stdlib/benchmark/{benchmark.rbs → 0/benchmark.rbs} +0 -0
  95. data/stdlib/{bigdecimal/math → bigdecimal-math/0}/big_math.rbs +0 -0
  96. data/stdlib/bigdecimal/{big_decimal.rbs → 0/big_decimal.rbs} +0 -0
  97. data/stdlib/coverage/{coverage.rbs → 0/coverage.rbs} +0 -0
  98. data/stdlib/csv/{csv.rbs → 0/csv.rbs} +3 -3
  99. data/stdlib/date/{date.rbs → 0/date.rbs} +0 -0
  100. data/stdlib/date/{date_time.rbs → 0/date_time.rbs} +0 -0
  101. data/stdlib/dbm/0/dbm.rbs +277 -0
  102. data/stdlib/erb/{erb.rbs → 0/erb.rbs} +0 -0
  103. data/stdlib/fiber/{fiber.rbs → 0/fiber.rbs} +0 -0
  104. data/stdlib/find/{find.rbs → 0/find.rbs} +0 -0
  105. data/stdlib/forwardable/{forwardable.rbs → 0/forwardable.rbs} +0 -0
  106. data/stdlib/ipaddr/{ipaddr.rbs → 0/ipaddr.rbs} +0 -0
  107. data/stdlib/json/{json.rbs → 0/json.rbs} +0 -0
  108. data/stdlib/logger/{formatter.rbs → 0/formatter.rbs} +0 -0
  109. data/stdlib/logger/{log_device.rbs → 0/log_device.rbs} +0 -0
  110. data/stdlib/logger/{logger.rbs → 0/logger.rbs} +0 -0
  111. data/stdlib/logger/{period.rbs → 0/period.rbs} +0 -0
  112. data/stdlib/logger/{severity.rbs → 0/severity.rbs} +0 -0
  113. data/stdlib/monitor/0/monitor.rbs +119 -0
  114. data/stdlib/mutex_m/{mutex_m.rbs → 0/mutex_m.rbs} +0 -0
  115. data/stdlib/pathname/{pathname.rbs → 0/pathname.rbs} +0 -0
  116. data/stdlib/prime/{integer-extension.rbs → 0/integer-extension.rbs} +0 -0
  117. data/stdlib/prime/{prime.rbs → 0/prime.rbs} +1 -1
  118. data/stdlib/pstore/{pstore.rbs → 0/pstore.rbs} +0 -0
  119. data/stdlib/pty/{pty.rbs → 0/pty.rbs} +0 -0
  120. data/stdlib/securerandom/{securerandom.rbs → 0/securerandom.rbs} +0 -0
  121. data/stdlib/set/{set.rbs → 0/set.rbs} +10 -10
  122. data/stdlib/singleton/0/singleton.rbs +111 -0
  123. data/stdlib/tmpdir/{tmpdir.rbs → 0/tmpdir.rbs} +0 -0
  124. data/stdlib/tsort/0/cyclic.rbs +4 -0
  125. data/stdlib/tsort/0/interfaces.rbs +19 -0
  126. data/stdlib/tsort/0/tsort.rbs +363 -0
  127. data/stdlib/uri/{file.rbs → 0/file.rbs} +0 -0
  128. data/stdlib/uri/{generic.rbs → 0/generic.rbs} +0 -0
  129. data/stdlib/uri/{http.rbs → 0/http.rbs} +0 -0
  130. data/stdlib/uri/{https.rbs → 0/https.rbs} +0 -0
  131. data/stdlib/uri/{ldap.rbs → 0/ldap.rbs} +0 -0
  132. data/stdlib/uri/{ldaps.rbs → 0/ldaps.rbs} +0 -0
  133. data/stdlib/yaml/0/dbm.rbs +221 -0
  134. data/stdlib/yaml/0/store.rbs +53 -0
  135. data/stdlib/zlib/{zlib.rbs → 0/zlib.rbs} +0 -0
  136. data/steep/Gemfile.lock +9 -9
  137. metadata +108 -94
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5348f41dbf169228104d4ba79ad88098ec3e8e83656b48b0b1c5877fab2e8cb7
4
- data.tar.gz: c79ce48144a85642f974b0973e22f8ed97a072d98ce98e2b62aebf639c8d04f7
3
+ metadata.gz: 8305afa064e98cd22b78a49fb402692abed204c735a7ce05d90f6a48d7bd6b96
4
+ data.tar.gz: 7840d67b2bbd54eb041342e093892b6d1046b21b6655b80eba109df6b773451d
5
5
  SHA512:
6
- metadata.gz: efb99d0e6476b83dbd1994a71526adab4b5b6aab2fc231a1685407739bb9a3e2f1268fb3effcbe701fa033608a0b872fd3f0011d046c599457bf47a3c3fcdb97
7
- data.tar.gz: 87d13112f6abce7b7ead4e95302978d17c7c08eaf94485bf27c00c5d91e08f8c10458344661b73d518caff095787323d3694512d76796f2d20da8c2bad2e101f
6
+ metadata.gz: 4919d1fd1323fa5cb2c40f89f5338d2168d3ae4fcabed2e2c428b3e5b4bacda2e395e9dfb2fc52a6517e75137358118b4142b330f607f77c162f259485ac0b13
7
+ data.tar.gz: dc36b905d8c746eb5e976f6f3fc4a06ba8ed2b037d15d73e8bfa4360497c9c814f44dd604981f7c3622002ef0bb603b1b9374e2f49ab0af67bc35ecbe2d7b26e
@@ -13,16 +13,20 @@ jobs:
13
13
  matrix:
14
14
  container_tag:
15
15
  - master-nightly-bionic
16
- - 2.6.5-bionic
17
- - 2.7.0-bionic
16
+ - 2.6-bionic
17
+ - 2.7-bionic
18
18
  job:
19
19
  - test
20
20
  - stdlib_test
21
- - rubocop validate test_doc build test_generate_stdlib
21
+ - rubocop validate test_doc build test_generate_stdlib confirm_parser
22
22
  container:
23
23
  image: rubylang/ruby:${{ matrix.container_tag }}
24
24
  steps:
25
25
  - uses: actions/checkout@v1
26
+ - name: Install dependencies
27
+ run: |
28
+ apt-get update
29
+ apt-get install -y libdb-dev
26
30
  - name: Install
27
31
  run: |
28
32
  ruby -v
@@ -31,4 +35,4 @@ jobs:
31
35
  - name: Run test
32
36
  run: |
33
37
  bundle exec rake ${{ matrix.job }}
34
- if: "!(matrix.job == 'stdlib_test' && contains(matrix.container_tag, '2.6.5'))"
38
+ if: "!(matrix.job == 'stdlib_test' && contains(matrix.container_tag, '2.6'))"
@@ -2,7 +2,35 @@
2
2
 
3
3
  ## master
4
4
 
5
- ## 0.15.0 (2020-11-2)
5
+ ## 0.19.0 (2020-12-02)
6
+
7
+ * Signature updates for `Monitor` and File ([#485](https://github.com/ruby/rbs/pull/485), [#495](https://github.com/ruby/rbs/pull/495))
8
+
9
+ ## 0.18.1 (2020-12-01)
10
+
11
+ * Fix `EnvironmentWalker#each_type_name` ([#494](https://github.com/ruby/rbs/pull/494))
12
+
13
+ ## 0.18.0 (2020-12-01)
14
+
15
+ * Signature updates for `YAML`, `ObjectSpace`, and `Singleton` ([#408](https://github.com/ruby/rbs/pull/408), [#477](https://github.com/ruby/rbs/pull/477), [#482](https://github.com/ruby/rbs/pull/482))
16
+ * `prototype rb` improvements ([#492](https://github.com/ruby/rbs/pull/492), [#487](https://github.com/ruby/rbs/pull/487), [#486](https://github.com/ruby/rbs/pull/486), [#481](https://github.com/ruby/rbs/pull/481))
17
+ * Runtime type checker improvements ([#488](https://github.com/ruby/rbs/pull/488), [#489](https://github.com/ruby/rbs/pull/489), [#490](https://github.com/ruby/rbs/pull/490))
18
+ * Update `DependencyWalker` API to receive _Node_ objects instead of `TypeName` ([#484](https://github.com/ruby/rbs/pull/484))
19
+ * Assume encoding of RBS files to be UTF-8 ([#493](https://github.com/ruby/rbs/pull/493))
20
+
21
+ ## 0.17.0 (2020-11-14)
22
+
23
+ * Signature updates for `Enumerable`, `Hash`, and `TSort` ([#462](https://github.com/ruby/rbs/pull/462), [#468](https://github.com/ruby/rbs/pull/468), [#471](https://github.com/ruby/rbs/pull/471), [#472](https://github.com/ruby/rbs/pull/472), [#473](https://github.com/ruby/rbs/pull/473), [#474](https://github.com/ruby/rbs/pull/474))
24
+ * Parser error handling improvement ([#463](https://github.com/ruby/rbs/pull/463), [#475](https://github.com/ruby/rbs/pull/475))
25
+ * Hash spread syntax handling improvement with `prototype rb` ([#465](https://github.com/ruby/rbs/pull/465))
26
+
27
+ ## 0.16.0 (2020-11-05)
28
+
29
+ * Signature update for `DBM` ([#441](https://github.com/ruby/rbs/pull/441))
30
+ * RBS repository ([#405](https://github.com/ruby/rbs/pull/405))
31
+ * Support `alias` in `rbs prototype rb` ([#457](https://github.com/ruby/rbs/pull/457))
32
+
33
+ ## 0.15.0 (2020-11-02)
6
34
 
7
35
  * Signature updates for `Kernel`, `PStore`, `Enumerable`, and `Array` ([#450](https://github.com/ruby/rbs/pull/450), [#443](https://github.com/ruby/rbs/pull/443), [#438](https://github.com/ruby/rbs/pull/438), [#437](https://github.com/ruby/rbs/pull/437), [#433](https://github.com/ruby/rbs/pull/433), [#432](https://github.com/ruby/rbs/pull/432))
8
36
  * Add helper interfaces ([#434](https://github.com/ruby/rbs/pull/434), [#428](https://github.com/ruby/rbs/pull/428))
data/Gemfile CHANGED
@@ -15,6 +15,7 @@ gem "json"
15
15
  gem "json-schema"
16
16
  gem 'stackprof'
17
17
  gem "goodcheck"
18
+ gem "dbm"
18
19
 
19
20
  # Test gems
20
21
  gem "rbs-amber", path: "test/assets/test-gem"
data/README.md CHANGED
@@ -46,7 +46,7 @@ module ChatApp
46
46
  def initialize: (name: String) -> void
47
47
 
48
48
  def each_member: () { (User | Bot) -> void } -> void # `{` and `}` means block.
49
- | () -> Enumerable[User | Bot, void] # Method can be overloaded.
49
+ | () -> Enumerator[User | Bot, void] # Method can be overloaded.
50
50
  end
51
51
  end
52
52
  ```
data/Rakefile CHANGED
@@ -29,7 +29,19 @@ task :validate => :parser do
29
29
 
30
30
  FileList["stdlib/*"].each do |path|
31
31
  next if path =~ %r{stdlib/builtin}
32
- sh "#{ruby} #{rbs} -r#{File.basename(path)} validate --silent"
32
+
33
+ lib = [File.basename(path).to_s]
34
+
35
+ if lib == ["bigdecimal-math"]
36
+ lib << "bigdecimal"
37
+ end
38
+
39
+ if lib == ["yaml"]
40
+ lib << "dbm"
41
+ lib << "pstore"
42
+ end
43
+
44
+ sh "#{ruby} #{rbs} #{lib.map {|l| "-r #{l}"}.join(" ")} validate --silent"
33
45
  end
34
46
  end
35
47
 
@@ -53,6 +65,12 @@ task :test => :parser
53
65
  task :stdlib_test => :parser
54
66
  task :build => :parser
55
67
 
68
+ task :confirm_parser do
69
+ puts "Testing if parser.rb is updated with respect to parser.y"
70
+ sh "racc -v -o lib/rbs/parser.rb lib/rbs/parser.y"
71
+ sh "git diff --exit-code lib/rbs/parser.rb"
72
+ end
73
+
56
74
  namespace :generate do
57
75
  task :stdlib_test, [:class] do |_task, args|
58
76
  klass = args.fetch(:class) do
data/Steepfile CHANGED
@@ -3,7 +3,6 @@ target :lib do
3
3
  check "lib"
4
4
  ignore "lib/rbs/parser.rb"
5
5
 
6
- vendor stdlib: "stdlib"
7
6
  library "set", "pathname", "json", "logger"
8
7
  end
9
8
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  $LOAD_PATH << File.join(__dir__, "../lib")
4
4
 
5
+ require "set"
6
+
5
7
  IS_RUBY_27 = Gem::Version.new(RUBY_VERSION).yield_self do |ruby_version|
6
8
  Gem::Version.new('2.7.0') <= ruby_version &&
7
9
  ruby_version <= Gem::Version.new('2.8.0')
@@ -11,6 +13,18 @@ unless IS_RUBY_27
11
13
  STDERR.puts "⚠️⚠️⚠️⚠️ stdlib test assumes Ruby 2.7 but RUBY_VERSION==#{RUBY_VERSION} ⚠️⚠️⚠️⚠️"
12
14
  end
13
15
 
16
+ KNOWN_FAILS = %w(dbm).map do |lib|
17
+ /cannot load such file -- #{lib}/
18
+ end
19
+
14
20
  ARGV.each do |arg|
15
- load arg
21
+ begin
22
+ load arg
23
+ rescue LoadError => exn
24
+ if KNOWN_FAILS.any? {|pat| pat =~ exn.message }
25
+ STDERR.puts "Loading #{arg} failed, ignoring it: #{exn.inspect}"
26
+ else
27
+ raise
28
+ end
29
+ end
16
30
  end
@@ -234,7 +234,7 @@
234
234
  # for pack.c
235
235
  #
236
236
  class Array[unchecked out Elem] < Object
237
- include Enumerable[Elem, self]
237
+ include Enumerable[Elem]
238
238
 
239
239
  # Returns a new array.
240
240
  #
File without changes
@@ -26,8 +26,8 @@ interface _ToPath
26
26
  def to_path: () -> String
27
27
  end
28
28
 
29
- interface _Each[out A, out B]
30
- def each: { (A) -> void } -> B
29
+ interface _Each[out A]
30
+ def each: { (A) -> void } -> void
31
31
  end
32
32
 
33
33
  interface _Reader
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -7,7 +7,7 @@
7
7
  # itself (`.`).
8
8
  #
9
9
  class Dir
10
- include Enumerable[String, Dir]
10
+ include Enumerable[String]
11
11
 
12
12
  # Returns a new directory object for the named directory.
13
13
  #
File without changes
@@ -5,7 +5,7 @@
5
5
  # objects in the collection must also implement a meaningful `<=>`
6
6
  # operator, as these methods rely on an ordering between members of the
7
7
  # collection.
8
- module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
8
+ module Enumerable[unchecked out Elem]: _Each[Elem]
9
9
  # Passes each element of the collection to the given block. The method
10
10
  # returns `true` if the block never returns `false` or `nil` . If the
11
11
  # block is not given, Ruby adds an implicit block of `{ |obj| obj }` which
@@ -66,24 +66,24 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
66
66
  | () { (Elem) -> boolish } -> Integer
67
67
 
68
68
  def cycle: (?Integer n) { (Elem arg0) -> untyped } -> NilClass
69
- | (?Integer n) -> ::Enumerator[Elem, Return]
69
+ | (?Integer n) -> ::Enumerator[Elem, NilClass]
70
70
 
71
71
  def detect: (?Proc ifnone) { (Elem) -> boolish } -> Elem?
72
- | (?Proc ifnone) -> ::Enumerator[Elem, Return]
72
+ | (?Proc ifnone) -> ::Enumerator[Elem, Elem?]
73
73
 
74
74
  def drop: (Integer n) -> ::Array[Elem]
75
75
 
76
76
  def drop_while: () { (Elem) -> boolish } -> ::Array[Elem]
77
- | () -> ::Enumerator[Elem, Return]
77
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
78
78
 
79
79
  def each_cons: (Integer n) { (::Array[Elem] arg0) -> untyped } -> NilClass
80
- | (Integer n) -> ::Enumerator[::Array[Elem], Return]
80
+ | (Integer n) -> ::Enumerator[::Array[Elem], NilClass]
81
81
 
82
- def each_with_index: () { (Elem arg0, Integer arg1) -> untyped } -> ::Enumerable[Elem, Return]
83
- | () -> ::Enumerator[[ Elem, Integer ], Return]
82
+ def each_with_index: () { (Elem arg0, Integer arg1) -> untyped } -> void
83
+ | () -> ::Enumerator[[ Elem, Integer ], void]
84
84
 
85
85
  def each_with_object: [U] (U arg0) { (Elem arg0, untyped arg1) -> untyped } -> U
86
- | [U] (U arg0) -> ::Enumerator[[ Elem, U ], Return]
86
+ | [U] (U arg0) -> ::Enumerator[[ Elem, U ], U]
87
87
 
88
88
  # Returns an array containing the items in *enum* .
89
89
  #
@@ -97,14 +97,14 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
97
97
  def entries: () -> ::Array[Elem]
98
98
 
99
99
  def find_all: () { (Elem) -> boolish } -> ::Array[Elem]
100
- | () -> ::Enumerator[Elem, Return]
100
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
101
101
 
102
102
  alias select find_all
103
103
  alias filter find_all
104
104
 
105
105
  def find_index: (?untyped value) -> Integer?
106
106
  | () { (Elem) -> boolish } -> Integer?
107
- | () -> ::Enumerator[Elem, Return]
107
+ | () -> ::Enumerator[Elem, Integer?]
108
108
 
109
109
  # Returns the first element, or the first `n` elements, of the enumerable.
110
110
  # If the enumerable is empty, the first form returns `nil`, and the
@@ -118,7 +118,7 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
118
118
  # [].first(10) #=> []
119
119
  # ```
120
120
  def first: () -> Elem?
121
- | (?Integer n) -> ::Array[Elem]?
121
+ | (Integer n) -> ::Array[Elem]?
122
122
 
123
123
  def grep: (untyped arg0) -> ::Array[Elem]
124
124
  | [U] (untyped arg0) { (Elem arg0) -> U } -> ::Array[U]
@@ -127,7 +127,7 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
127
127
  | [U] (untyped arg0) { (Elem arg0) -> U } -> ::Array[U]
128
128
 
129
129
  def group_by: [U] () { (Elem arg0) -> U } -> ::Hash[U, ::Array[Elem]]
130
- | () -> ::Enumerator[Elem, Return]
130
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
131
131
 
132
132
  def `include?`: (untyped arg0) -> bool
133
133
 
@@ -157,13 +157,13 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
157
157
  # ```
158
158
  def max: () -> Elem?
159
159
  | () { (Elem arg0, Elem arg1) -> Integer } -> Elem?
160
- | (?Integer arg0) -> ::Array[Elem]
161
- | (?Integer arg0) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
160
+ | (Integer arg0) -> ::Array[Elem]
161
+ | (Integer arg0) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
162
162
 
163
- def max_by: () -> ::Enumerator[Elem, Return]
163
+ def max_by: () -> ::Enumerator[Elem, Elem?]
164
164
  | () { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> Elem?
165
- | (?Integer arg0) -> ::Enumerator[Elem, Return]
166
- | (?Integer arg0) { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Array[Elem]
165
+ | (Integer arg0) -> ::Enumerator[Elem, ::Array[Elem]]
166
+ | (Integer arg0) { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Array[Elem]
167
167
 
168
168
  # Returns the object in *enum* with the minimum value. The first form
169
169
  # assumes all objects implement `Comparable` ; the second uses the block
@@ -186,13 +186,13 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
186
186
  # ```
187
187
  def min: () -> Elem?
188
188
  | () { (Elem arg0, Elem arg1) -> Integer } -> Elem?
189
- | (?Integer arg0) -> ::Array[Elem]
190
- | (?Integer arg0) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
189
+ | (Integer arg0) -> ::Array[Elem]
190
+ | (Integer arg0) { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
191
191
 
192
- def min_by: () -> ::Enumerator[Elem, Return]
192
+ def min_by: () -> ::Enumerator[Elem, Elem?]
193
193
  | () { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> Elem?
194
- | (?Integer arg0) -> ::Enumerator[Elem, Return]
195
- | (?Integer arg0) { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Array[Elem]
194
+ | (Integer arg0) -> ::Enumerator[Elem, ::Array[Elem]]
195
+ | (Integer arg0) { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Array[Elem]
196
196
 
197
197
  # Returns a two element array which contains the minimum and the maximum
198
198
  # value in the enumerable. The first form assumes all objects implement
@@ -207,7 +207,7 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
207
207
  | () { (Elem arg0, Elem arg1) -> Integer } -> [ Elem?, Elem? ]
208
208
 
209
209
  def minmax_by: () -> [ Elem?, Elem? ]
210
- | () { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Enumerator[Elem, Return]
210
+ | () { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> [ Elem?, Elem? ]
211
211
 
212
212
  # Passes each element of the collection to the given block. The method
213
213
  # returns `true` if the block never returns `true` for all elements. If
@@ -252,13 +252,13 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
252
252
  | () { (Elem) -> boolish } -> bool
253
253
 
254
254
  def partition: () { (Elem) -> boolish } -> [ ::Array[Elem], ::Array[Elem] ]
255
- | () -> ::Enumerator[Elem, Return]
255
+ | () -> ::Enumerator[Elem, [ ::Array[Elem], ::Array[Elem] ]]
256
256
 
257
257
  def reject: () { (Elem) -> boolish } -> ::Array[Elem]
258
- | () -> ::Enumerator[Elem, Return]
258
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
259
259
 
260
- def reverse_each: () { (Elem arg0) -> untyped } -> ::Enumerator[Elem, Return]
261
- | () -> ::Enumerator[Elem, Return]
260
+ def reverse_each: () { (Elem arg0) -> untyped } -> void
261
+ | () -> ::Enumerator[Elem, void]
262
262
 
263
263
  # Returns an array containing the items in *enum* sorted.
264
264
  #
@@ -284,12 +284,12 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
284
284
  | () { (Elem arg0, Elem arg1) -> Integer } -> ::Array[Elem]
285
285
 
286
286
  def sort_by: () { (Elem arg0) -> (Comparable | ::Array[untyped]) } -> ::Array[Elem]
287
- | () -> ::Enumerator[Elem, Return]
287
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
288
288
 
289
289
  def take: (Integer n) -> ::Array[Elem]?
290
290
 
291
291
  def take_while: () { (Elem) -> boolish } -> ::Array[Elem]
292
- | () -> ::Enumerator[Elem, Return]
292
+ | () -> ::Enumerator[Elem, ::Array[Elem]]
293
293
 
294
294
  # Implemented in C++
295
295
  # Returns the result of interpreting *enum* as a list of `[key, value]`
@@ -306,9 +306,10 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
306
306
  # #=> {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
307
307
  # ```
308
308
  def to_h: () -> ::Hash[untyped, untyped]
309
+ | [T, U] () { (Elem) -> [T, U] } -> ::Hash[T, U]
309
310
 
310
311
  def each_slice: (Integer n) { (::Array[Elem]) -> untyped } -> NilClass
311
- | (Integer n) -> ::Enumerator[::Array[Elem], Return]
312
+ | (Integer n) -> ::Enumerator[::Array[Elem], NilClass]
312
313
 
313
314
  interface _NotFound[T]
314
315
  def call: () -> T
@@ -319,8 +320,8 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
319
320
  | [T] (_NotFound[T] ifnone) { (Elem) -> boolish } -> (Elem | T)
320
321
  | [T] (_NotFound[T] ifnone) -> ::Enumerator[Elem, Elem | T]
321
322
 
322
- def flat_map: [U] () { (Elem arg0) -> U } -> U
323
- | () -> ::Enumerator[Elem, Return]
323
+ def flat_map: [U] () { (Elem) -> (Array[U] | U) } -> Array[U]
324
+ | () -> ::Enumerator[Elem, Array[untyped]]
324
325
 
325
326
  def map: [U] () { (Elem arg0) -> U } -> ::Array[U]
326
327
  | () -> ::Enumerator[Elem, ::Array[untyped]]
@@ -370,7 +371,7 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
370
371
  # # show pythagorean triples less than 100
371
372
  # p pythagorean_triples.take_while { |*, z| z < 100 }.force
372
373
  # ```
373
- def lazy: () -> Enumerator::Lazy[Elem, Return]
374
+ def lazy: () -> Enumerator::Lazy[Elem, void]
374
375
 
375
376
  def uniq: () -> ::Array[Elem]
376
377
  | () { (Elem item) -> untyped } -> ::Array[Elem]
@@ -381,22 +382,22 @@ module Enumerable[unchecked out Elem, out Return]: _Each[Elem, Return]
381
382
  | [U] (?U arg0) { (Elem arg0) -> U } -> U
382
383
 
383
384
  def filter_map: [U] () { (Elem elem) -> (nil | false | U) } -> ::Array[U]
384
- | () -> ::Enumerator[Elem, Return]
385
+ | () -> ::Enumerator[Elem, ::Array[untyped]]
385
386
 
386
- def chain: (*self enumerables) -> ::Enumerator::Chain[Elem, ::Array[self]]
387
+ def chain: (*self enumerables) -> ::Enumerator::Chain[Elem]
387
388
 
388
389
  def tally: () -> ::Hash[Elem, Integer]
389
390
 
390
- def each_entry: () -> ::Enumerator[Elem, Return]
391
+ def each_entry: () -> ::Enumerator[Elem, self]
391
392
  | () { (Elem arg0) -> untyped } -> self
392
393
 
393
394
  # variadic type parameter is not supported yet
394
395
  # https://github.com/ruby/rbs/issues/21
395
- def zip: [Elem2, Return2] (::Enumerable[Elem2, Return2] enum) -> ::Array[[Elem, Elem2 | nil]]
396
- | [U, Elem2, Return2] (::Enumerable[Elem2, Return2]) { ([Elem, Elem2 | nil]) -> U } -> nil
396
+ def zip: [Elem2] (::Enumerable[Elem2] enum) -> ::Array[[Elem, Elem2 | nil]]
397
+ | [U, Elem2] (::Enumerable[Elem2]) { ([Elem, Elem2 | nil]) -> U } -> nil
397
398
 
398
- def chunk: () -> ::Enumerator[Elem, Return]
399
- | [U] () { (Elem elt) -> U } -> ::Enumerator[[U, Array[Elem]], void]
399
+ def chunk: [U] () { (Elem elt) -> U } -> ::Enumerator[[U, Array[Elem]], void]
400
+ | () -> ::Enumerator[Elem, Enumerator[untyped, untyped]]
400
401
 
401
402
  def chunk_while: () { (Elem elt_before, Elem elt_after) -> boolish } -> ::Enumerator[::Array[Elem], void]
402
403
 
@@ -96,7 +96,7 @@
96
96
  # # => [], [:b], [1], [:b, 1], [1, 2], [:b, 1, 2], 3
97
97
  # ```
98
98
  class Enumerator[unchecked out Elem, out Return] < Object
99
- include Enumerable[Elem, Return]
99
+ include Enumerable[Elem]
100
100
 
101
101
  def each: () { (Elem arg0) -> untyped } -> Return
102
102
  | () -> self
@@ -242,8 +242,8 @@ class Enumerator[unchecked out Elem, out Return] < Object
242
242
  | [U] (U arg0) -> ::Enumerator[[ Elem, U ], Return]
243
243
  end
244
244
 
245
- class Enumerator::Generator[out Elem, out Return] < Object
246
- include Enumerable[Elem, Return]
245
+ class Enumerator::Generator[out Elem] < Object
246
+ include Enumerable[Elem]
247
247
  end
248
248
 
249
249
  class Enumerator::Lazy[out Elem, out Return] < Enumerator[Elem, Return]
@@ -257,6 +257,6 @@ class Enumerator::Yielder < Object
257
257
  def to_proc: () -> Proc
258
258
  end
259
259
 
260
- class Enumerator::Chain[out Elem, out Return] < Object
261
- include Enumerable[Elem, Return]
260
+ class Enumerator::Chain[out Elem] < Object
261
+ include Enumerable[Elem]
262
262
  end