rbs 0.15.0 → 0.19.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 (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