rbs 3.7.0 → 3.8.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +3 -3
  3. data/.github/workflows/ruby.yml +7 -7
  4. data/CHANGELOG.md +52 -0
  5. data/core/array.rbs +1743 -1580
  6. data/core/basic_object.rbs +38 -35
  7. data/core/comparable.rbs +1 -1
  8. data/core/complex.rbs +165 -93
  9. data/core/data.rbs +1 -1
  10. data/core/dir.rbs +1 -17
  11. data/core/encoding.rbs +12 -6
  12. data/core/enumerable.rbs +270 -266
  13. data/core/enumerator.rbs +0 -2
  14. data/core/env.rbs +1 -1
  15. data/core/errno.rbs +33 -16
  16. data/core/errors.rbs +2 -2
  17. data/core/exception.rbs +236 -170
  18. data/core/fiber.rbs +3 -2
  19. data/core/file.rbs +32 -74
  20. data/core/float.rbs +125 -72
  21. data/core/gc.rbs +138 -40
  22. data/core/hash.rbs +120 -141
  23. data/core/integer.rbs +79 -50
  24. data/core/io/buffer.rbs +49 -43
  25. data/core/io.rbs +97 -144
  26. data/core/kernel.rbs +290 -200
  27. data/core/match_data.rbs +76 -2
  28. data/core/math.rbs +0 -36
  29. data/core/module.rbs +28 -23
  30. data/core/nil_class.rbs +0 -3
  31. data/core/numeric.rbs +100 -103
  32. data/core/object.rbs +0 -4
  33. data/core/object_space/weak_key_map.rbs +3 -4
  34. data/core/object_space.rbs +3 -3
  35. data/core/proc.rbs +0 -2
  36. data/core/process.rbs +109 -57
  37. data/core/ractor.rbs +37 -4
  38. data/core/range.rbs +114 -87
  39. data/core/rational.rbs +0 -2
  40. data/core/rbs/unnamed/argf.rbs +234 -33
  41. data/core/rbs/unnamed/env_class.rbs +35 -53
  42. data/core/rbs/unnamed/random.rbs +1 -2
  43. data/core/regexp.rbs +4 -52
  44. data/core/ruby_vm.rbs +88 -9
  45. data/core/rubygems/config_file.rbs +3 -0
  46. data/core/rubygems/errors.rbs +0 -5
  47. data/core/rubygems/platform.rbs +0 -9
  48. data/core/rubygems/rubygems.rbs +0 -5
  49. data/core/rubygems/version.rbs +6 -6
  50. data/core/set.rbs +3 -15
  51. data/core/string.rbs +130 -136
  52. data/core/struct.rbs +6 -18
  53. data/core/symbol.rbs +14 -21
  54. data/core/thread.rbs +32 -35
  55. data/core/time.rbs +127 -50
  56. data/core/trace_point.rbs +16 -0
  57. data/core/true_class.rbs +0 -1
  58. data/core/warning.rbs +9 -2
  59. data/docs/architecture.md +1 -1
  60. data/docs/syntax.md +1 -1
  61. data/ext/rbs_extension/location.c +29 -19
  62. data/ext/rbs_extension/parser.c +267 -292
  63. data/ext/rbs_extension/parserstate.c +56 -22
  64. data/lib/rbs/annotate/annotations.rb +3 -3
  65. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  66. data/lib/rbs/cli/diff.rb +3 -3
  67. data/lib/rbs/cli/validate.rb +1 -1
  68. data/lib/rbs/cli.rb +13 -13
  69. data/lib/rbs/collection/config.rb +3 -1
  70. data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
  71. data/lib/rbs/environment_loader.rb +1 -1
  72. data/lib/rbs/namespace.rb +1 -0
  73. data/lib/rbs/parser_aux.rb +2 -2
  74. data/lib/rbs/prototype/rb.rb +11 -8
  75. data/lib/rbs/prototype/rbi.rb +9 -5
  76. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  77. data/lib/rbs/prototype/runtime.rb +4 -5
  78. data/lib/rbs/type_name.rb +14 -9
  79. data/lib/rbs/unit_test/type_assertions.rb +2 -2
  80. data/lib/rbs/validator.rb +3 -1
  81. data/lib/rbs/version.rb +1 -1
  82. data/lib/rdoc_plugin/parser.rb +2 -2
  83. data/rbs.gemspec +4 -0
  84. data/sig/ancestor_graph.rbs +4 -4
  85. data/sig/namespace.rbs +2 -3
  86. data/sig/resolver/constant_resolver.rbs +2 -2
  87. data/sig/resolver/context.rbs +1 -1
  88. data/sig/type_alias_regularity.rbs +5 -5
  89. data/sig/typename.rbs +8 -5
  90. data/sig/use_map.rbs +1 -1
  91. data/sig/validator.rbs +2 -2
  92. data/stdlib/base64/0/base64.rbs +0 -9
  93. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  94. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  95. data/stdlib/cgi/0/core.rbs +47 -0
  96. data/stdlib/coverage/0/coverage.rbs +0 -3
  97. data/stdlib/csv/0/csv.rbs +18 -58
  98. data/stdlib/date/0/date.rbs +4 -19
  99. data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
  100. data/stdlib/digest/0/digest.rbs +25 -2
  101. data/stdlib/erb/0/erb.rbs +0 -1
  102. data/stdlib/etc/0/etc.rbs +51 -34
  103. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  104. data/stdlib/io-console/0/io-console.rbs +69 -15
  105. data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
  106. data/stdlib/json/0/json.rbs +56 -71
  107. data/stdlib/logger/0/log_device.rbs +1 -1
  108. data/stdlib/logger/0/logger.rbs +3 -18
  109. data/stdlib/net-http/0/net-http.rbs +19 -77
  110. data/stdlib/nkf/0/nkf.rbs +30 -0
  111. data/stdlib/objspace/0/objspace.rbs +1 -2
  112. data/stdlib/observable/0/observable.rbs +1 -1
  113. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  114. data/stdlib/open3/0/open3.rbs +0 -8
  115. data/stdlib/openssl/0/openssl.rbs +136 -69
  116. data/stdlib/optparse/0/optparse.rbs +58 -18
  117. data/stdlib/pathname/0/pathname.rbs +2 -8
  118. data/stdlib/pp/0/pp.rbs +3 -1
  119. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  120. data/stdlib/pstore/0/pstore.rbs +0 -6
  121. data/stdlib/psych/0/psych.rbs +15 -4
  122. data/stdlib/pty/0/pty.rbs +46 -4
  123. data/stdlib/rdoc/0/code_object.rbs +0 -4
  124. data/stdlib/rdoc/0/markup.rbs +10 -12
  125. data/stdlib/rdoc/0/rdoc.rbs +1 -2
  126. data/stdlib/resolv/0/resolv.rbs +8 -3
  127. data/stdlib/ripper/0/ripper.rbs +0 -2
  128. data/stdlib/securerandom/0/securerandom.rbs +0 -2
  129. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  130. data/stdlib/singleton/0/singleton.rbs +0 -1
  131. data/stdlib/socket/0/addrinfo.rbs +0 -1
  132. data/stdlib/socket/0/basic_socket.rbs +0 -5
  133. data/stdlib/socket/0/socket.rbs +49 -25
  134. data/stdlib/socket/0/tcp_server.rbs +0 -3
  135. data/stdlib/socket/0/tcp_socket.rbs +58 -3
  136. data/stdlib/socket/0/udp_socket.rbs +0 -1
  137. data/stdlib/socket/0/unix_server.rbs +0 -3
  138. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  139. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  140. data/stdlib/time/0/time.rbs +48 -35
  141. data/stdlib/timeout/0/timeout.rbs +11 -8
  142. data/stdlib/tmpdir/0/tmpdir.rbs +8 -1
  143. data/stdlib/tsort/0/tsort.rbs +0 -4
  144. data/stdlib/uri/0/common.rbs +11 -30
  145. data/stdlib/uri/0/ftp.rbs +1 -1
  146. data/stdlib/uri/0/generic.rbs +22 -18
  147. data/stdlib/uri/0/http.rbs +2 -2
  148. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  149. data/stdlib/zlib/0/buf_error.rbs +1 -70
  150. data/stdlib/zlib/0/data_error.rbs +1 -70
  151. data/stdlib/zlib/0/deflate.rbs +8 -72
  152. data/stdlib/zlib/0/error.rbs +1 -70
  153. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  154. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  155. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  156. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  157. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  158. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  159. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  160. data/stdlib/zlib/0/inflate.rbs +4 -71
  161. data/stdlib/zlib/0/mem_error.rbs +1 -70
  162. data/stdlib/zlib/0/need_dict.rbs +1 -70
  163. data/stdlib/zlib/0/stream_end.rbs +1 -70
  164. data/stdlib/zlib/0/stream_error.rbs +1 -70
  165. data/stdlib/zlib/0/version_error.rbs +1 -70
  166. data/stdlib/zlib/0/zlib.rbs +0 -2
  167. data/stdlib/zlib/0/zstream.rbs +4 -72
  168. metadata +4 -6
data/core/hash.rbs CHANGED
@@ -1,19 +1,18 @@
1
1
  # <!-- rdoc-file=hash.c -->
2
- # A Hash maps each of its unique keys to a specific value.
2
+ # A `Hash` maps each of its unique keys to a specific value.
3
3
  #
4
- # A Hash has certain similarities to an Array, but:
4
+ # A `Hash` has certain similarities to an Array, but:
5
5
  # * An Array index is always an Integer.
6
- # * A Hash key can be (almost) any object.
6
+ # * A `Hash` key can be (almost) any object.
7
7
  #
8
+ # ### `Hash` Data Syntax
8
9
  #
9
- # ### Hash Data Syntax
10
- #
11
- # The older syntax for Hash data uses the "hash rocket," `=>`:
10
+ # The older syntax for `Hash` data uses the "hash rocket," `=>`:
12
11
  #
13
12
  # h = {:foo => 0, :bar => 1, :baz => 2}
14
13
  # h # => {:foo=>0, :bar=>1, :baz=>2}
15
14
  #
16
- # Alternatively, but only for a Hash key that's a Symbol, you can use a newer
15
+ # Alternatively, but only for a `Hash` key that's a Symbol, you can use a newer
17
16
  # JSON-style syntax, where each bareword becomes a Symbol:
18
17
  #
19
18
  # h = {foo: 0, bar: 1, baz: 2}
@@ -35,8 +34,8 @@
35
34
  # # Raises SyntaxError (syntax error, unexpected ':', expecting =>):
36
35
  # h = {0: 'zero'}
37
36
  #
38
- # Hash value can be omitted, meaning that value will be fetched from the context
39
- # by the name of the key:
37
+ # `Hash` value can be omitted, meaning that value will be fetched from the
38
+ # context by the name of the key:
40
39
  #
41
40
  # x = 0
42
41
  # y = 100
@@ -45,24 +44,24 @@
45
44
  #
46
45
  # ### Common Uses
47
46
  #
48
- # You can use a Hash to give names to objects:
47
+ # You can use a `Hash` to give names to objects:
49
48
  #
50
49
  # person = {name: 'Matz', language: 'Ruby'}
51
50
  # person # => {:name=>"Matz", :language=>"Ruby"}
52
51
  #
53
- # You can use a Hash to give names to method arguments:
52
+ # You can use a `Hash` to give names to method arguments:
54
53
  #
55
54
  # def some_method(hash)
56
55
  # p hash
57
56
  # end
58
57
  # some_method({foo: 0, bar: 1, baz: 2}) # => {:foo=>0, :bar=>1, :baz=>2}
59
58
  #
60
- # Note: when the last argument in a method call is a Hash, the curly braces may
61
- # be omitted:
59
+ # Note: when the last argument in a method call is a `Hash`, the curly braces
60
+ # may be omitted:
62
61
  #
63
62
  # some_method(foo: 0, bar: 1, baz: 2) # => {:foo=>0, :bar=>1, :baz=>2}
64
63
  #
65
- # You can use a Hash to initialize an object:
64
+ # You can use a `Hash` to initialize an object:
66
65
  #
67
66
  # class Dev
68
67
  # attr_accessor :name, :language
@@ -74,58 +73,56 @@
74
73
  # matz = Dev.new(name: 'Matz', language: 'Ruby')
75
74
  # matz # => #<Dev: @name="Matz", @language="Ruby">
76
75
  #
77
- # ### Creating a Hash
76
+ # ### Creating a `Hash`
78
77
  #
79
- # You can create a Hash object explicitly with:
78
+ # You can create a `Hash` object explicitly with:
80
79
  #
81
80
  # * A [hash literal](rdoc-ref:syntax/literals.rdoc@Hash+Literals).
82
81
  #
83
- #
84
82
  # You can convert certain objects to Hashes with:
85
83
  #
86
84
  # * Method #Hash.
87
85
  #
86
+ # You can create a `Hash` by calling method Hash.new.
88
87
  #
89
- # You can create a Hash by calling method Hash.new.
90
- #
91
- # Create an empty Hash:
88
+ # Create an empty `Hash`:
92
89
  #
93
90
  # h = Hash.new
94
91
  # h # => {}
95
92
  # h.class # => Hash
96
93
  #
97
- # You can create a Hash by calling method Hash.[].
94
+ # You can create a `Hash` by calling method Hash.[].
98
95
  #
99
- # Create an empty Hash:
96
+ # Create an empty `Hash`:
100
97
  #
101
98
  # h = Hash[]
102
99
  # h # => {}
103
100
  #
104
- # Create a Hash with initial entries:
101
+ # Create a `Hash` with initial entries:
105
102
  #
106
103
  # h = Hash[foo: 0, bar: 1, baz: 2]
107
104
  # h # => {:foo=>0, :bar=>1, :baz=>2}
108
105
  #
109
- # You can create a Hash by using its literal form (curly braces).
106
+ # You can create a `Hash` by using its literal form (curly braces).
110
107
  #
111
- # Create an empty Hash:
108
+ # Create an empty `Hash`:
112
109
  #
113
110
  # h = {}
114
111
  # h # => {}
115
112
  #
116
- # Create a Hash with initial entries:
113
+ # Create a `Hash` with initial entries:
117
114
  #
118
115
  # h = {foo: 0, bar: 1, baz: 2}
119
116
  # h # => {:foo=>0, :bar=>1, :baz=>2}
120
117
  #
121
- # ### Hash Value Basics
118
+ # ### `Hash` Value Basics
122
119
  #
123
- # The simplest way to retrieve a Hash value (instance method #[]):
120
+ # The simplest way to retrieve a `Hash` value (instance method #[]):
124
121
  #
125
122
  # h = {foo: 0, bar: 1, baz: 2}
126
123
  # h[:foo] # => 0
127
124
  #
128
- # The simplest way to create or update a Hash value (instance method #[]=):
125
+ # The simplest way to create or update a `Hash` value (instance method #[]=):
129
126
  #
130
127
  # h = {foo: 0, bar: 1, baz: 2}
131
128
  # h[:bat] = 3 # => 3
@@ -133,7 +130,7 @@
133
130
  # h[:foo] = 4 # => 4
134
131
  # h # => {:foo=>4, :bar=>1, :baz=>2, :bat=>3}
135
132
  #
136
- # The simplest way to delete a Hash entry (instance method #delete):
133
+ # The simplest way to delete a `Hash` entry (instance method #delete):
137
134
  #
138
135
  # h = {foo: 0, bar: 1, baz: 2}
139
136
  # h.delete(:bar) # => 1
@@ -141,15 +138,14 @@
141
138
  #
142
139
  # ### Entry Order
143
140
  #
144
- # A Hash object presents its entries in the order of their creation. This is
141
+ # A `Hash` object presents its entries in the order of their creation. This is
145
142
  # seen in:
146
143
  #
147
144
  # * Iterative methods such as `each`, `each_key`, `each_pair`, `each_value`.
148
145
  # * Other order-sensitive methods such as `shift`, `keys`, `values`.
149
146
  # * The String returned by method `inspect`.
150
147
  #
151
- #
152
- # A new Hash has its initial ordering per the given entries:
148
+ # A new `Hash` has its initial ordering per the given entries:
153
149
  #
154
150
  # h = Hash[foo: 0, bar: 1]
155
151
  # h # => {:foo=>0, :bar=>1}
@@ -170,18 +166,18 @@
170
166
  # h[:foo] = 5
171
167
  # h # => {:bar=>1, :baz=>3, :foo=>5}
172
168
  #
173
- # ### Hash Keys
169
+ # ### `Hash` Keys
174
170
  #
175
- # #### Hash Key Equivalence
171
+ # #### `Hash` Key Equivalence
176
172
  #
177
173
  # Two objects are treated as the same hash key when their `hash` value is
178
174
  # identical and the two objects are `eql?` to each other.
179
175
  #
180
- # #### Modifying an Active Hash Key
176
+ # #### Modifying an Active `Hash` Key
181
177
  #
182
- # Modifying a Hash key while it is in use damages the hash's index.
178
+ # Modifying a `Hash` key while it is in use damages the hash's index.
183
179
  #
184
- # This Hash has keys that are Arrays:
180
+ # This `Hash` has keys that are Arrays:
185
181
  #
186
182
  # a0 = [ :foo, :bar ]
187
183
  # a1 = [ :baz, :bat ]
@@ -195,7 +191,7 @@
195
191
  # a0[0] = :bam
196
192
  # a0.hash # => 1069447059
197
193
  #
198
- # And damages the Hash index:
194
+ # And damages the `Hash` index:
199
195
  #
200
196
  # h.include?(a0) # => false
201
197
  # h[a0] # => nil
@@ -215,10 +211,10 @@
215
211
  # first_key = h.keys.first
216
212
  # first_key.frozen? # => true
217
213
  #
218
- # #### User-Defined Hash Keys
214
+ # #### User-Defined `Hash` Keys
219
215
  #
220
- # To be useable as a Hash key, objects must implement the methods `hash` and
221
- # `eql?`. Note: this requirement does not apply if the Hash uses
216
+ # To be usable as a `Hash` key, objects must implement the methods `hash` and
217
+ # `eql?`. Note: this requirement does not apply if the `Hash` uses
222
218
  # #compare_by_identity since comparison will then rely on the keys' object id
223
219
  # instead of `hash` and `eql?`.
224
220
  #
@@ -307,7 +303,7 @@
307
303
  #
308
304
  # #### Default Proc
309
305
  #
310
- # When the default proc for a Hash is set (i.e., not `nil`), the default value
306
+ # When the default proc for a `Hash` is set (i.e., not `nil`), the default value
311
307
  # returned by method #[] is determined by the default proc alone.
312
308
  #
313
309
  # You can retrieve the default proc with method #default_proc:
@@ -324,8 +320,8 @@
324
320
  # h.default_proc.class # => Proc
325
321
  #
326
322
  # When the default proc is set (i.e., not `nil`) and method #[] is called with
327
- # with a non-existent key, #[] calls the default proc with both the Hash object
328
- # itself and the missing key, then returns the proc's return value:
323
+ # with a non-existent key, #[] calls the default proc with both the `Hash`
324
+ # object itself and the missing key, then returns the proc's return value:
329
325
  #
330
326
  # h = Hash.new { |hash, key| "Default value for #{key}" }
331
327
  # h[:nosuch] # => "Default value for nosuch"
@@ -351,14 +347,13 @@
351
347
  #
352
348
  # ### What's Here
353
349
  #
354
- # First, what's elsewhere. Class Hash:
350
+ # First, what's elsewhere. Class `Hash`:
355
351
  #
356
352
  # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
357
353
  # * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
358
354
  # provides dozens of additional methods.
359
355
  #
360
- #
361
- # Here, class Hash provides methods that are useful for:
356
+ # Here, class `Hash` provides methods that are useful for:
362
357
  #
363
358
  # * [Creating a Hash](rdoc-ref:Hash@Methods+for+Creating+a+Hash)
364
359
  # * [Setting Hash State](rdoc-ref:Hash@Methods+for+Setting+Hash+State)
@@ -373,17 +368,15 @@
373
368
  # Values](rdoc-ref:Hash@Methods+for+Transforming+Keys+and+Values)
374
369
  # * [And more....](rdoc-ref:Hash@Other+Methods)
375
370
  #
371
+ # Class `Hash` also includes methods from module Enumerable.
376
372
  #
377
- # Class Hash also includes methods from module Enumerable.
378
- #
379
- # #### Methods for Creating a Hash
373
+ # #### Methods for Creating a `Hash`
380
374
  #
381
375
  # * ::[]: Returns a new hash populated with given objects.
382
376
  # * ::new: Returns a new empty hash.
383
377
  # * ::try_convert: Returns a new hash created from a given object.
384
378
  #
385
- #
386
- # #### Methods for Setting Hash State
379
+ # #### Methods for Setting `Hash` State
387
380
  #
388
381
  # * #compare_by_identity: Sets `self` to consider only identity in comparing
389
382
  # keys.
@@ -392,7 +385,6 @@
392
385
  # * #rehash: Rebuilds the hash table by recomputing the hash index for each
393
386
  # key.
394
387
  #
395
- #
396
388
  # #### Methods for Querying
397
389
  #
398
390
  # * #any?: Returns whether any element satisfies a given criterion.
@@ -403,12 +395,11 @@
403
395
  # * #empty?: Returns whether there are no entries.
404
396
  # * #eql?: Returns whether a given object is equal to `self`.
405
397
  # * #hash: Returns the integer hash code.
406
- # * #has_value?: Returns whether a given object is a value in `self`.
407
- # * #include?, #has_key?, #member?, #key?: Returns whether a given object is a
408
- # key in `self`.
409
- # * #length, #size: Returns the count of entries.
410
- # * #value?: Returns whether a given object is a value in `self`.
411
- #
398
+ # * #has_value? (aliased as #value?): Returns whether a given object is a
399
+ # value in `self`.
400
+ # * #include? (aliased as #has_key?, #member?, #key?): Returns whether a given
401
+ # object is a key in `self`.
402
+ # * #size (aliased as #length): Returns the count of entries.
412
403
  #
413
404
  # #### Methods for Comparing
414
405
  #
@@ -418,7 +409,6 @@
418
409
  # * #>: Returns whether `self` is a proper superset of a given object
419
410
  # * #>=: Returns whether `self` is a superset of a given object.
420
411
  #
421
- #
422
412
  # #### Methods for Fetching
423
413
  #
424
414
  # * #[]: Returns the value associated with a given key.
@@ -435,16 +425,14 @@
435
425
  # * #values: Returns an array containing all values in `self`/
436
426
  # * #values_at: Returns an array containing values for given keys.
437
427
  #
438
- #
439
428
  # #### Methods for Assigning
440
429
  #
441
- # * #[]=, #store: Associates a given key with a given value.
430
+ # * #[]= (aliased as #store): Associates a given key with a given value.
442
431
  # * #merge: Returns the hash formed by merging each given hash into a copy of
443
432
  # `self`.
444
- # * #merge!, #update: Merges each given hash into `self`.
445
- # * #replace: Replaces the entire contents of `self` with the contents of a
446
- # given hash.
447
- #
433
+ # * #update (aliased as #merge!): Merges each given hash into `self`.
434
+ # * #replace (aliased as #initialize_copy): Replaces the entire contents of
435
+ # `self` with the contents of a given hash.
448
436
  #
449
437
  # #### Methods for Deleting
450
438
  #
@@ -454,40 +442,39 @@
454
442
  # * #compact!: Removes all `nil`-valued entries from `self`.
455
443
  # * #delete: Removes the entry for a given key.
456
444
  # * #delete_if: Removes entries selected by a given block.
457
- # * #filter!, #select!: Keep only those entries selected by a given block.
445
+ # * #select! (aliased as #filter!): Keep only those entries selected by a
446
+ # given block.
458
447
  # * #keep_if: Keep only those entries selected by a given block.
459
448
  # * #reject!: Removes entries selected by a given block.
460
449
  # * #shift: Removes and returns the first entry.
461
450
  #
462
- #
463
451
  # These methods return a copy of `self` with some entries removed:
464
452
  #
465
453
  # * #compact: Returns a copy of `self` with all `nil`-valued entries removed.
466
454
  # * #except: Returns a copy of `self` with entries removed for specified keys.
467
- # * #filter, #select: Returns a copy of `self` with only those entries
468
- # selected by a given block.
455
+ # * #select (aliased as #filter): Returns a copy of `self` with only those
456
+ # entries selected by a given block.
469
457
  # * #reject: Returns a copy of `self` with entries removed as specified by a
470
458
  # given block.
471
459
  # * #slice: Returns a hash containing the entries for given keys.
472
460
  #
473
- #
474
461
  # #### Methods for Iterating
475
- # * #each, #each_pair: Calls a given block with each key-value pair.
462
+ # * #each_pair (aliased as #each): Calls a given block with each key-value
463
+ # pair.
476
464
  # * #each_key: Calls a given block with each key.
477
465
  # * #each_value: Calls a given block with each value.
478
466
  #
479
- #
480
467
  # #### Methods for Converting
481
468
  #
482
- # * #inspect, #to_s: Returns a new String containing the hash entries.
469
+ # * #inspect (aliased as #to_s): Returns a new String containing the hash
470
+ # entries.
483
471
  # * #to_a: Returns a new array of 2-element arrays; each nested array contains
484
472
  # a key-value pair from `self`.
485
- # * #to_h: Returns `self` if a Hash; if a subclass of Hash, returns a Hash
486
- # containing the entries from `self`.
473
+ # * #to_h: Returns `self` if a `Hash`; if a subclass of `Hash`, returns a
474
+ # `Hash` containing the entries from `self`.
487
475
  # * #to_hash: Returns `self`.
488
476
  # * #to_proc: Returns a proc that maps a given key to its value.
489
477
  #
490
- #
491
478
  # #### Methods for Transforming Keys and Values
492
479
  #
493
480
  # * #transform_keys: Returns a copy of `self` with modified keys.
@@ -495,7 +482,6 @@
495
482
  # * #transform_values: Returns a copy of `self` with modified values.
496
483
  # * #transform_values!: Modifies values in `self`.
497
484
  #
498
- #
499
485
  # #### Other Methods
500
486
  # * #flatten: Returns an array that is a 1-dimensional flattening of `self`.
501
487
  # * #invert: Returns a hash with the each key-value pair inverted.
@@ -516,23 +502,23 @@ class Hash[unchecked out K, unchecked out V] < Object
516
502
  # - Hash[ [*2_element_arrays] ] -> new_hash
517
503
  # - Hash[*objects] -> new_hash
518
504
  # -->
519
- # Returns a new Hash object populated with the given objects, if any. See
505
+ # Returns a new `Hash` object populated with the given objects, if any. See
520
506
  # Hash::new.
521
507
  #
522
- # With no argument, returns a new empty Hash.
508
+ # With no argument, returns a new empty `Hash`.
523
509
  #
524
- # When the single given argument is a Hash, returns a new Hash populated with
525
- # the entries from the given Hash, excluding the default value or proc.
510
+ # When the single given argument is a `Hash`, returns a new `Hash` populated
511
+ # with the entries from the given `Hash`, excluding the default value or proc.
526
512
  #
527
513
  # h = {foo: 0, bar: 1, baz: 2}
528
514
  # Hash[h] # => {:foo=>0, :bar=>1, :baz=>2}
529
515
  #
530
516
  # When the single given argument is an Array of 2-element Arrays, returns a new
531
- # Hash object wherein each 2-element array forms a key-value entry:
517
+ # `Hash` object wherein each 2-element array forms a key-value entry:
532
518
  #
533
519
  # Hash[ [ [:foo, 0], [:bar, 1] ] ] # => {:foo=>0, :bar=>1}
534
520
  #
535
- # When the argument count is an even number; returns a new Hash object wherein
521
+ # When the argument count is an even number; returns a new `Hash` object wherein
536
522
  # each successive pair of arguments has become a key-value entry:
537
523
  #
538
524
  # Hash[:foo, 0, :bar, 1] # => {:foo=>0, :bar=>1}
@@ -547,14 +533,14 @@ class Hash[unchecked out K, unchecked out V] < Object
547
533
  # rdoc-file=hash.c
548
534
  # - Hash.try_convert(obj) -> obj, new_hash, or nil
549
535
  # -->
550
- # If `obj` is a Hash object, returns `obj`.
536
+ # If `obj` is a `Hash` object, returns `obj`.
551
537
  #
552
538
  # Otherwise if `obj` responds to `:to_hash`, calls `obj.to_hash` and returns the
553
539
  # result.
554
540
  #
555
541
  # Returns `nil` if `obj` does not respond to `:to_hash`
556
542
  #
557
- # Raises an exception unless `obj.to_hash` returns a Hash object.
543
+ # Raises an exception unless `obj.to_hash` returns a `Hash` object.
558
544
  #
559
545
  def self.try_convert: [U, V] (_ToHash[U, V]) -> ::Hash[U, V]
560
546
  | (untyped) -> (::Hash[untyped, untyped] | nil)
@@ -591,11 +577,10 @@ class Hash[unchecked out K, unchecked out V] < Object
591
577
  # - hash == object -> true or false
592
578
  # -->
593
579
  # Returns `true` if all of the following are true:
594
- # * `object` is a Hash object.
580
+ # * `object` is a `Hash` object.
595
581
  # * `hash` and `object` have the same keys (regardless of order).
596
582
  # * For each key `key`, `hash[key] == object[key]`.
597
583
  #
598
- #
599
584
  # Otherwise, returns `false`.
600
585
  #
601
586
  # Equal:
@@ -843,7 +828,7 @@ class Hash[unchecked out K, unchecked out V] < Object
843
828
  # rdoc-file=hash.c
844
829
  # - hash.default_proc = proc -> proc
845
830
  # -->
846
- # Sets the default proc for `self` to `proc`: (see [Default
831
+ # Sets the default proc for `self` to `proc` (see [Default
847
832
  # Values](rdoc-ref:Hash@Default+Values)):
848
833
  # h = {}
849
834
  # h.default_proc # => nil
@@ -1052,17 +1037,15 @@ class Hash[unchecked out K, unchecked out V] < Object
1052
1037
 
1053
1038
  # <!--
1054
1039
  # rdoc-file=hash.c
1055
- # - hash.eql? object -> true or false
1040
+ # - hash.eql?(object) -> true or false
1056
1041
  # -->
1057
1042
  # Returns `true` if all of the following are true:
1058
- # * `object` is a Hash object.
1043
+ # * `object` is a `Hash` object.
1059
1044
  # * `hash` and `object` have the same keys (regardless of order).
1060
- # * For each key `key`, `h[key] eql? object[key]`.
1061
- #
1045
+ # * For each key `key`, `h[key].eql?(object[key])`.
1062
1046
  #
1063
1047
  # Otherwise, returns `false`.
1064
1048
  #
1065
- # Equal:
1066
1049
  # h1 = {foo: 0, bar: 1, baz: 2}
1067
1050
  # h2 = {foo: 0, bar: 1, baz: 2}
1068
1051
  # h1.eql? h2 # => true
@@ -1075,7 +1058,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1075
1058
  # rdoc-file=hash.c
1076
1059
  # - hsh.except(*keys) -> a_hash
1077
1060
  # -->
1078
- # Returns a new Hash excluding entries for the given `keys`:
1061
+ # Returns a new `Hash` excluding entries for the given `keys`:
1079
1062
  # h = { a: 100, b: 200, c: 300 }
1080
1063
  # h.except(:a) #=> {:b=>200, :c=>300}
1081
1064
  #
@@ -1133,8 +1116,8 @@ class Hash[unchecked out K, unchecked out V] < Object
1133
1116
  | [X] (*K) { (K) -> X } -> ::Array[V | X]
1134
1117
 
1135
1118
  # <!-- rdoc-file=hash.c -->
1136
- # Returns a new Hash object whose entries are those for which the block returns
1137
- # a truthy value:
1119
+ # Returns a new `Hash` object whose entries are those for which the block
1120
+ # returns a truthy value:
1138
1121
  # h = {foo: 0, bar: 1, baz: 2}
1139
1122
  # h.select {|key, value| value < 2 } # => {:foo=>0, :bar=>1}
1140
1123
  #
@@ -1216,7 +1199,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1216
1199
  # -->
1217
1200
  # Returns the Integer hash-code for the hash.
1218
1201
  #
1219
- # Two Hash objects have the same hash-code if their content is the same
1202
+ # Two `Hash` objects have the same hash-code if their content is the same
1220
1203
  # (regardless of order):
1221
1204
  # h1 = {foo: 0, bar: 1, baz: 2}
1222
1205
  # h2 = {baz: 2, bar: 1, foo: 0}
@@ -1251,7 +1234,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1251
1234
  # rdoc-file=hash.c
1252
1235
  # - hash.invert -> new_hash
1253
1236
  # -->
1254
- # Returns a new Hash object with the each key-value pair inverted:
1237
+ # Returns a new `Hash` object with the each key-value pair inverted:
1255
1238
  # h = {foo: 0, bar: 1, baz: 2}
1256
1239
  # h1 = h.invert
1257
1240
  # h1 # => {0=>:foo, 1=>:bar, 2=>:baz}
@@ -1328,20 +1311,19 @@ class Hash[unchecked out K, unchecked out V] < Object
1328
1311
  # - hash.merge(*other_hashes) -> new_hash
1329
1312
  # - hash.merge(*other_hashes) { |key, old_value, new_value| ... } -> new_hash
1330
1313
  # -->
1331
- # Returns the new Hash formed by merging each of `other_hashes` into a copy of
1314
+ # Returns the new `Hash` formed by merging each of `other_hashes` into a copy of
1332
1315
  # `self`.
1333
1316
  #
1334
- # Each argument in `other_hashes` must be a Hash.
1317
+ # Each argument in `other_hashes` must be a `Hash`.
1335
1318
  #
1336
1319
  # ---
1337
1320
  #
1338
1321
  # With arguments and no block:
1339
- # * Returns the new Hash object formed by merging each successive Hash in
1322
+ # * Returns the new `Hash` object formed by merging each successive `Hash` in
1340
1323
  # `other_hashes` into `self`.
1341
1324
  # * Each new-key entry is added at the end.
1342
1325
  # * Each duplicate-key entry's value overwrites the previous value.
1343
1326
  #
1344
- #
1345
1327
  # Example:
1346
1328
  # h = {foo: 0, bar: 1, baz: 2}
1347
1329
  # h1 = {bat: 3, bar: 4}
@@ -1349,15 +1331,14 @@ class Hash[unchecked out K, unchecked out V] < Object
1349
1331
  # h.merge(h1, h2) # => {:foo=>0, :bar=>4, :baz=>2, :bat=>6, :bam=>5}
1350
1332
  #
1351
1333
  # With arguments and a block:
1352
- # * Returns a new Hash object that is the merge of `self` and each given hash.
1334
+ # * Returns a new `Hash` object that is the merge of `self` and each given
1335
+ # hash.
1353
1336
  # * The given hashes are merged left to right.
1354
1337
  # * Each new-key entry is added at the end.
1355
1338
  # * For each duplicate key:
1356
1339
  # * Calls the block with the key and the old and new values.
1357
1340
  # * The block's return value becomes the new value for the entry.
1358
1341
  #
1359
- #
1360
- #
1361
1342
  # Example:
1362
1343
  # h = {foo: 0, bar: 1, baz: 2}
1363
1344
  # h1 = {bat: 3, bar: 4}
@@ -1369,7 +1350,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1369
1350
  # * Returns a copy of `self`.
1370
1351
  # * The block, if given, is ignored.
1371
1352
  #
1372
- #
1373
1353
  # Example:
1374
1354
  # h = {foo: 0, bar: 1, baz: 2}
1375
1355
  # h.merge # => {:foo=>0, :bar=>1, :baz=>2}
@@ -1382,7 +1362,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1382
1362
  # <!-- rdoc-file=hash.c -->
1383
1363
  # Merges each of `other_hashes` into `self`; returns `self`.
1384
1364
  #
1385
- # Each argument in `other_hashes` must be a Hash.
1365
+ # Each argument in `other_hashes` must be a `Hash`.
1386
1366
  #
1387
1367
  # With arguments and no block:
1388
1368
  # * Returns `self`, after the given hashes are merged into it.
@@ -1390,7 +1370,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1390
1370
  # * Each new entry is added at the end.
1391
1371
  # * Each duplicate-key entry's value overwrites the previous value.
1392
1372
  #
1393
- #
1394
1373
  # Example:
1395
1374
  # h = {foo: 0, bar: 1, baz: 2}
1396
1375
  # h1 = {bat: 3, bar: 4}
@@ -1405,8 +1384,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1405
1384
  # * Calls the block with the key and the old and new values.
1406
1385
  # * The block's return value becomes the new value for the entry.
1407
1386
  #
1408
- #
1409
- #
1410
1387
  # Example:
1411
1388
  # h = {foo: 0, bar: 1, baz: 2}
1412
1389
  # h1 = {bat: 3, bar: 4}
@@ -1418,7 +1395,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1418
1395
  # * Returns `self`, unmodified.
1419
1396
  # * The block, if given, is ignored.
1420
1397
  #
1421
- #
1422
1398
  # Example:
1423
1399
  # h = {foo: 0, bar: 1, baz: 2}
1424
1400
  # h.merge # => {:foo=>0, :bar=>1, :baz=>2}
@@ -1460,7 +1436,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1460
1436
  # - hash.reject {|key, value| ... } -> new_hash
1461
1437
  # - hash.reject -> new_enumerator
1462
1438
  # -->
1463
- # Returns a new Hash object whose entries are all those from `self` for which
1439
+ # Returns a new `Hash` object whose entries are all those from `self` for which
1464
1440
  # the block returns `false` or `nil`:
1465
1441
  # h = {foo: 0, bar: 1, baz: 2}
1466
1442
  # h1 = h.reject {|key, value| key.start_with?('b') }
@@ -1508,8 +1484,8 @@ class Hash[unchecked out K, unchecked out V] < Object
1508
1484
  # - hash.select {|key, value| ... } -> new_hash
1509
1485
  # - hash.select -> new_enumerator
1510
1486
  # -->
1511
- # Returns a new Hash object whose entries are those for which the block returns
1512
- # a truthy value:
1487
+ # Returns a new `Hash` object whose entries are those for which the block
1488
+ # returns a truthy value:
1513
1489
  # h = {foo: 0, bar: 1, baz: 2}
1514
1490
  # h.select {|key, value| value < 2 } # => {:foo=>0, :bar=>1}
1515
1491
  #
@@ -1568,7 +1544,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1568
1544
  # rdoc-file=hash.c
1569
1545
  # - hash.slice(*keys) -> new_hash
1570
1546
  # -->
1571
- # Returns a new Hash object containing the entries for the given `keys`:
1547
+ # Returns a new `Hash` object containing the entries for the given `keys`:
1572
1548
  # h = {foo: 0, bar: 1, baz: 2}
1573
1549
  # h.slice(:baz, :foo) # => {:baz=>2, :foo=>0}
1574
1550
  #
@@ -1611,12 +1587,13 @@ class Hash[unchecked out K, unchecked out V] < Object
1611
1587
  # - hash.to_h -> self or new_hash
1612
1588
  # - hash.to_h {|key, value| ... } -> new_hash
1613
1589
  # -->
1614
- # For an instance of Hash, returns `self`.
1590
+ # For an instance of `Hash`, returns `self`.
1615
1591
  #
1616
- # For a subclass of Hash, returns a new Hash containing the content of `self`.
1592
+ # For a subclass of `Hash`, returns a new `Hash` containing the content of
1593
+ # `self`.
1617
1594
  #
1618
- # When a block is given, returns a new Hash object whose content is based on the
1619
- # block; the block should return a 2-element Array object specifying the
1595
+ # When a block is given, returns a new `Hash` object whose content is based on
1596
+ # the block; the block should return a 2-element Array object specifying the
1620
1597
  # key-value pair to be included in the returned Array:
1621
1598
  # h = {foo: 0, bar: 1, baz: 2}
1622
1599
  # h1 = h.to_h {|key, value| [value, key] }
@@ -1662,11 +1639,10 @@ class Hash[unchecked out K, unchecked out V] < Object
1662
1639
  # - hash.transform_keys(hash2) {|other_key| ...} -> new_hash
1663
1640
  # - hash.transform_keys -> new_enumerator
1664
1641
  # -->
1665
- # Returns a new Hash object; each entry has:
1642
+ # Returns a new `Hash` object; each entry has:
1666
1643
  # * A key provided by the block.
1667
1644
  # * The value from `self`.
1668
1645
  #
1669
- #
1670
1646
  # An optional hash argument can be provided to map keys to new keys. Any key not
1671
1647
  # given will be mapped using the provided block, or remain the same if no block
1672
1648
  # is given.
@@ -1714,11 +1690,10 @@ class Hash[unchecked out K, unchecked out V] < Object
1714
1690
  # - hash.transform_values {|value| ... } -> new_hash
1715
1691
  # - hash.transform_values -> new_enumerator
1716
1692
  # -->
1717
- # Returns a new Hash object; each entry has:
1693
+ # Returns a new `Hash` object; each entry has:
1718
1694
  # * A key from `self`.
1719
1695
  # * A value provided by the block.
1720
1696
  #
1721
- #
1722
1697
  # Transform values:
1723
1698
  # h = {foo: 0, bar: 1, baz: 2}
1724
1699
  # h1 = h.transform_values {|value| value * 100}
@@ -1760,7 +1735,7 @@ class Hash[unchecked out K, unchecked out V] < Object
1760
1735
  # -->
1761
1736
  # Merges each of `other_hashes` into `self`; returns `self`.
1762
1737
  #
1763
- # Each argument in `other_hashes` must be a Hash.
1738
+ # Each argument in `other_hashes` must be a `Hash`.
1764
1739
  #
1765
1740
  # With arguments and no block:
1766
1741
  # * Returns `self`, after the given hashes are merged into it.
@@ -1768,7 +1743,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1768
1743
  # * Each new entry is added at the end.
1769
1744
  # * Each duplicate-key entry's value overwrites the previous value.
1770
1745
  #
1771
- #
1772
1746
  # Example:
1773
1747
  # h = {foo: 0, bar: 1, baz: 2}
1774
1748
  # h1 = {bat: 3, bar: 4}
@@ -1783,8 +1757,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1783
1757
  # * Calls the block with the key and the old and new values.
1784
1758
  # * The block's return value becomes the new value for the entry.
1785
1759
  #
1786
- #
1787
- #
1788
1760
  # Example:
1789
1761
  # h = {foo: 0, bar: 1, baz: 2}
1790
1762
  # h1 = {bat: 3, bar: 4}
@@ -1796,7 +1768,6 @@ class Hash[unchecked out K, unchecked out V] < Object
1796
1768
  # * Returns `self`, unmodified.
1797
1769
  # * The block, if given, is ignored.
1798
1770
  #
1799
- #
1800
1771
  # Example:
1801
1772
  # h = {foo: 0, bar: 1, baz: 2}
1802
1773
  # h.merge # => {:foo=>0, :bar=>1, :baz=>2}
@@ -1837,37 +1808,45 @@ class Hash[unchecked out K, unchecked out V] < Object
1837
1808
  private
1838
1809
 
1839
1810
  # <!--
1840
- # rdoc-file=hash.c
1811
+ # rdoc-file=hash.rb
1841
1812
  # - Hash.new(default_value = nil) -> new_hash
1813
+ # - Hash.new(default_value = nil, capacity: size) -> new_hash
1842
1814
  # - Hash.new {|hash, key| ... } -> new_hash
1815
+ # - Hash.new(capacity: size) {|hash, key| ... } -> new_hash
1843
1816
  # -->
1844
- # Returns a new empty Hash object.
1817
+ # Returns a new empty `Hash` object.
1845
1818
  #
1846
1819
  # The initial default value and initial default proc for the new hash depend on
1847
1820
  # which form above was used. See [Default Values](rdoc-ref:Hash@Default+Values).
1848
1821
  #
1849
- # If neither an argument nor a block given, initializes both the default value
1850
- # and the default proc to `nil`:
1822
+ # If neither an argument nor a block is given, initializes both the default
1823
+ # value and the default proc to `nil`:
1851
1824
  # h = Hash.new
1852
1825
  # h.default # => nil
1853
1826
  # h.default_proc # => nil
1854
1827
  #
1855
- # If argument `default_value` given but no block given, initializes the default
1856
- # value to the given `default_value` and the default proc to `nil`:
1828
+ # If argument `default_value` is given but no block is given, initializes the
1829
+ # default value to the given `default_value` and the default proc to `nil`:
1857
1830
  # h = Hash.new(false)
1858
1831
  # h.default # => false
1859
1832
  # h.default_proc # => nil
1860
1833
  #
1861
- # If a block given but no argument, stores the block as the default proc and
1862
- # sets the default value to `nil`:
1834
+ # If a block is given but no `default_value`, stores the block as the default
1835
+ # proc and sets the default value to `nil`:
1863
1836
  # h = Hash.new {|hash, key| "Default value for #{key}" }
1864
1837
  # h.default # => nil
1865
1838
  # h.default_proc.class # => Proc
1866
1839
  # h[:nosuch] # => "Default value for nosuch"
1867
1840
  #
1868
- def initialize: () -> void
1869
- | (untyped default) -> void
1870
- | [A, B] () { (Hash[A, B] hash, A key) -> B } -> void
1841
+ # If both a block and a `default_value` are given, raises an `ArgumentError`
1842
+ #
1843
+ # If the optional keyword argument `capacity` is given, the hash will be
1844
+ # allocated with enough capacity to accommodate this many keys without having to
1845
+ # be resized.
1846
+ #
1847
+ def initialize: (?capacity: int) -> void
1848
+ | [V] (V default, ?capacity: int) -> void
1849
+ | [A, B] (?capacity: int) { (Hash[A, B] hash, A key) -> B } -> void
1871
1850
 
1872
1851
  # <!--
1873
1852
  # rdoc-file=hash.c