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/string.rbs CHANGED
@@ -1,23 +1,21 @@
1
1
  # <!-- rdoc-file=string.rb -->
2
- # A String object has an arbitrary sequence of bytes, typically representing
3
- # text or binary data. A String object may be created using String::new or as
2
+ # A `String` object has an arbitrary sequence of bytes, typically representing
3
+ # text or binary data. A `String` object may be created using String::new or as
4
4
  # literals.
5
5
  #
6
6
  # String objects differ from Symbol objects in that Symbol objects are designed
7
7
  # to be used as identifiers, instead of text or data.
8
8
  #
9
- # You can create a String object explicitly with:
9
+ # You can create a `String` object explicitly with:
10
10
  #
11
11
  # * A [string literal](rdoc-ref:syntax/literals.rdoc@String+Literals).
12
12
  # * A [heredoc literal](rdoc-ref:syntax/literals.rdoc@Here+Document+Literals).
13
13
  #
14
- #
15
14
  # You can convert certain objects to Strings with:
16
15
  #
17
16
  # * Method #String.
18
17
  #
19
- #
20
- # Some String methods modify `self`. Typically, a method whose name ends with
18
+ # Some `String` methods modify `self`. Typically, a method whose name ends with
21
19
  # `!` modifies `self` and returns `self`; often a similarly named method
22
20
  # (without the `!`) returns a new string.
23
21
  #
@@ -30,10 +28,11 @@
30
28
  # These methods perform substitutions:
31
29
  #
32
30
  # * String#sub: One substitution (or none); returns a new string.
33
- # * String#sub!: One substitution (or none); returns `self`.
31
+ # * String#sub!: One substitution (or none); returns `self` if any changes,
32
+ # `nil` otherwise.
34
33
  # * String#gsub: Zero or more substitutions; returns a new string.
35
- # * String#gsub!: Zero or more substitutions; returns `self`.
36
- #
34
+ # * String#gsub!: Zero or more substitutions; returns `self` if any changes,
35
+ # `nil` otherwise.
37
36
  #
38
37
  # Each of these methods takes:
39
38
  #
@@ -46,8 +45,6 @@
46
45
  # replacing string.
47
46
  # * A block that will determine the replacing string.
48
47
  #
49
- #
50
- #
51
48
  # The examples in this section mostly use methods String#sub and String#gsub;
52
49
  # the principles illustrated apply to all four substitution methods.
53
50
  #
@@ -68,19 +65,18 @@
68
65
  #
69
66
  # 'THX1138'.gsub('\d+', '00') # => "THX1138"
70
67
  #
71
- # **\String `replacement`**
68
+ # **`String` `replacement`**
72
69
  #
73
70
  # If `replacement` is a string, that string will determine the replacing string
74
71
  # that is to be substituted for the matched text.
75
72
  #
76
73
  # Each of the examples above uses a simple string as the replacing string.
77
74
  #
78
- # String `replacement` may contain back-references to the pattern's captures:
75
+ # `String` `replacement` may contain back-references to the pattern's captures:
79
76
  #
80
77
  # * `\n` (*n* a non-negative integer) refers to `$n`.
81
78
  # * `\k<name>` refers to the named capture `name`.
82
79
  #
83
- #
84
80
  # See Regexp for details.
85
81
  #
86
82
  # Note that within the string `replacement`, a character combination such as
@@ -94,7 +90,6 @@
94
90
  # * `\`` corresponds to `$``, which contains string before match.
95
91
  # * `\+` corresponds to `$+`, which contains last capture group.
96
92
  #
97
- #
98
93
  # See Regexp for details.
99
94
  #
100
95
  # Note that `\\\` is interpreted as an escape, i.e., a single backslash.
@@ -140,7 +135,7 @@
140
135
  #
141
136
  # ## Whitespace in Strings
142
137
  #
143
- # In class String, *whitespace* is defined as a contiguous sequence of
138
+ # In class `String`, *whitespace* is defined as a contiguous sequence of
144
139
  # characters consisting of any mixture of the following:
145
140
  #
146
141
  # * NL (null): `"\x00"`, `"\u0000"`.
@@ -151,25 +146,21 @@
151
146
  # * CR (carriage return): `"\x0d"`, `"\r"`.
152
147
  # * SP (space): `"\x20"`, `" "`.
153
148
  #
154
- #
155
149
  # Whitespace is relevant for these methods:
156
150
  #
157
151
  # * #lstrip, #lstrip!: strip leading whitespace.
158
152
  # * #rstrip, #rstrip!: strip trailing whitespace.
159
153
  # * #strip, #strip!: strip leading and trailing whitespace.
160
154
  #
161
- #
162
- # ## String Slices
155
+ # ## `String` Slices
163
156
  #
164
157
  # A *slice* of a string is a substring that is selected by certain criteria.
165
158
  #
166
159
  # These instance methods make use of slicing:
167
160
  #
168
- # * String#[] (also aliased as String#slice) returns a slice copied from
169
- # `self`.
170
- # * String#[]= returns a copy of `self` with a slice replaced.
171
- # * String#slice! returns `self` with a slice removed.
172
- #
161
+ # * String#[] (aliased as String#slice): returns a slice copied from `self`.
162
+ # * String#[]=: returns a copy of `self` with a slice replaced.
163
+ # * String#slice!: returns `self` with a slice removed.
173
164
  #
174
165
  # Each of the above methods takes arguments that determine the slice to be
175
166
  # copied or replaced.
@@ -182,7 +173,6 @@
182
173
  # * `string[regexp, capture = 0]`.
183
174
  # * `string[substring]`.
184
175
  #
185
- #
186
176
  # **`string[index]`**
187
177
  #
188
178
  # When non-negative integer argument `index` is given, the slice is the
@@ -291,7 +281,7 @@
291
281
  #
292
282
  # **`string[substring]`**
293
283
  #
294
- # When the single String argument `substring` is given, returns the substring
284
+ # When the single `String` argument `substring` is given, returns the substring
295
285
  # from `self` if found, otherwise `nil`:
296
286
  #
297
287
  # 'foo'['oo'] # => "oo"
@@ -299,13 +289,12 @@
299
289
  #
300
290
  # ## What's Here
301
291
  #
302
- # First, what's elsewhere. Class String:
292
+ # First, what's elsewhere. Class `String`:
303
293
  #
304
294
  # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
305
295
  # * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
306
296
  #
307
- #
308
- # Here, class String provides methods that are useful for:
297
+ # Here, class `String` provides methods that are useful for:
309
298
  #
310
299
  # * [Creating a String](rdoc-ref:String@Methods+for+Creating+a+String)
311
300
  # * [Frozen/Unfrozen
@@ -316,35 +305,31 @@
316
305
  # * [Converting to New
317
306
  # String](rdoc-ref:String@Methods+for+Converting+to+New+String)
318
307
  # * [Converting to
319
- # Non-String](rdoc-ref:String@Methods+for+Converting+to+Non--5CString)
308
+ # Non-String](rdoc-ref:String@Methods+for+Converting+to+Non-String)
320
309
  # * [Iterating](rdoc-ref:String@Methods+for+Iterating)
321
310
  #
322
- #
323
- # ### Methods for Creating a String
311
+ # ### Methods for Creating a `String`
324
312
  #
325
313
  # * ::new: Returns a new string.
326
314
  # * ::try_convert: Returns a new string created from a given object.
327
315
  #
328
- #
329
316
  # ### Methods for a Frozen/Unfrozen String
330
317
  #
331
318
  # * #+@: Returns a string that is not frozen: `self`, if not frozen;
332
319
  # `self.dup` otherwise.
333
- # * #-@: Returns a string that is frozen: `self`, if already frozen;
334
- # `self.freeze` otherwise.
320
+ # * #-@ (aliased as #dedup): Returns a string that is frozen: `self`, if
321
+ # already frozen; `self.freeze` otherwise.
335
322
  # * #freeze: Freezes `self`, if not already frozen; returns `self`.
336
323
  #
337
- #
338
324
  # ### Methods for Querying
339
325
  #
340
326
  # *Counts*
341
327
  #
342
- # * #length, #size: Returns the count of characters (not bytes).
328
+ # * #length (aliased as #size): Returns the count of characters (not bytes).
343
329
  # * #empty?: Returns `true` if `self.length` is zero; `false` otherwise.
344
330
  # * #bytesize: Returns the count of bytes.
345
331
  # * #count: Returns the count of substrings matching given strings.
346
332
  #
347
- #
348
333
  # *Substrings*
349
334
  #
350
335
  # * #=~: Returns the index of the first substring that matches a given Regexp
@@ -364,7 +349,6 @@
364
349
  # * #end_with?: Returns `true` if the string ends with any of the given
365
350
  # substrings.
366
351
  #
367
- #
368
352
  # *Encodings*
369
353
  #
370
354
  # * #encoding: Returns the Encoding object that represents the encoding of the
@@ -376,17 +360,15 @@
376
360
  # * #ascii_only?: Returns `true` if the string has only ASCII characters;
377
361
  # `false` otherwise.
378
362
  #
379
- #
380
363
  # *Other*
381
364
  #
382
365
  # * #sum: Returns a basic checksum for the string: the sum of each byte.
383
366
  # * #hash: Returns the integer hash code.
384
367
  #
385
- #
386
368
  # ### Methods for Comparing
387
369
  #
388
- # * #==, #===: Returns `true` if a given other string has the same content as
389
- # `self`.
370
+ # * #== (aliased as #===): Returns `true` if a given other string has the same
371
+ # content as `self`.
390
372
  # * #eql?: Returns `true` if the content is the same as the given other
391
373
  # string.
392
374
  # * #<=>: Returns -1, 0, or 1 as a given other string is smaller than, equal
@@ -396,8 +378,7 @@
396
378
  # * #casecmp?: Returns `true` if the string is equal to a given string after
397
379
  # Unicode case folding; `false` otherwise.
398
380
  #
399
- #
400
- # ### Methods for Modifying a String
381
+ # ### Methods for Modifying a `String`
401
382
  #
402
383
  # Each of these methods modifies `self`.
403
384
  #
@@ -405,7 +386,8 @@
405
386
  #
406
387
  # * #insert: Returns `self` with a given string inserted at a given offset.
407
388
  # * #<<: Returns `self` concatenated with a given string or integer.
408
- #
389
+ # * #append_as_bytes: Returns `self` concatenated with strings without
390
+ # performing any encoding validation or conversion.
409
391
  #
410
392
  # *Substitution*
411
393
  #
@@ -413,9 +395,10 @@
413
395
  # given replacement string; returns `self` if any changes, `nil` otherwise.
414
396
  # * #gsub!: Replaces each substring that matches a given pattern with a given
415
397
  # replacement string; returns `self` if any changes, `nil` otherwise.
416
- # * #succ!, #next!: Returns `self` modified to become its own successor.
417
- # * #replace: Returns `self` with its entire content replaced by a given
418
- # string.
398
+ # * #succ! (aliased as #next!): Returns `self` modified to become its own
399
+ # successor.
400
+ # * #initialize_copy (aliased as #replace): Returns `self` with its entire
401
+ # content replaced by a given string.
419
402
  # * #reverse!: Returns `self` with its characters in reverse order.
420
403
  # * #setbyte: Sets the byte at a given integer offset to a given value;
421
404
  # returns the argument.
@@ -425,7 +408,6 @@
425
408
  # characters, removing duplicates from the substrings that were modified;
426
409
  # returns `self` if any changes, `nil` otherwise.
427
410
  #
428
- #
429
411
  # *Casing*
430
412
  #
431
413
  # * #capitalize!: Upcases the initial character and downcases all others;
@@ -437,7 +419,6 @@
437
419
  # * #swapcase!: Upcases each downcase character and downcases each upcase
438
420
  # character; returns `self` if any changes, `nil` otherwise.
439
421
  #
440
- #
441
422
  # *Encoding*
442
423
  #
443
424
  # * #encode!: Returns `self` with all characters transcoded from one given
@@ -447,7 +428,6 @@
447
428
  # `self`.
448
429
  # * #force_encoding: Changes the encoding to a given encoding; returns `self`.
449
430
  #
450
- #
451
431
  # *Deletion*
452
432
  #
453
433
  # * #clear: Removes all content, so that `self` is empty; returns `self`.
@@ -467,10 +447,9 @@
467
447
  # * #chop!: Removes trailing newline characters if found; otherwise removes
468
448
  # the last character; returns `self` if any changes, `nil` otherwise.
469
449
  #
450
+ # ### Methods for Converting to New `String`
470
451
  #
471
- # ### Methods for Converting to New String
472
- #
473
- # Each of these methods returns a new String based on `self`, often just a
452
+ # Each of these methods returns a new `String` based on `self`, often just a
474
453
  # modified copy of `self`.
475
454
  #
476
455
  # *Extension*
@@ -485,7 +464,6 @@
485
464
  # * #rjust: Returns a copy of `self` of a given length, left-padded with a
486
465
  # given other string.
487
466
  #
488
- #
489
467
  # *Encoding*
490
468
  #
491
469
  # * #b: Returns a copy of `self` with ASCII-8BIT encoding.
@@ -496,7 +474,6 @@
496
474
  # * #encode: Returns a copy of `self` with all characters transcoded from one
497
475
  # given encoding into another.
498
476
  #
499
- #
500
477
  # *Substitution*
501
478
  #
502
479
  # * #dump: Returns a copy of `self` with all non-printing characters replaced
@@ -507,7 +484,8 @@
507
484
  # pattern replaced with a given replacement string;.
508
485
  # * #gsub: Returns a copy of `self` with each substring that matches a given
509
486
  # pattern replaced with a given replacement string.
510
- # * #succ, #next: Returns the string that is the successor to `self`.
487
+ # * #succ (aliased as #next): Returns the string that is the successor to
488
+ # `self`.
511
489
  # * #reverse: Returns a copy of `self` with its characters in reverse order.
512
490
  # * #tr: Returns a copy of `self` with specified characters replaced with
513
491
  # specified replacement characters.
@@ -517,7 +495,6 @@
517
495
  # * #%: Returns the string resulting from formatting a given object into
518
496
  # `self`
519
497
  #
520
- #
521
498
  # *Casing*
522
499
  #
523
500
  # * #capitalize: Returns a copy of `self` with the first character upcased and
@@ -527,7 +504,6 @@
527
504
  # * #swapcase: Returns a copy of `self` with all upcase characters downcased
528
505
  # and all downcase characters upcased.
529
506
  #
530
- #
531
507
  # *Deletion*
532
508
  #
533
509
  # * #delete: Returns a copy of `self` with characters removed
@@ -543,22 +519,20 @@
543
519
  # last character removed.
544
520
  # * #squeeze: Returns a copy of `self` with contiguous duplicate characters
545
521
  # removed.
546
- # * #[], #slice: Returns a substring determined by a given index,
522
+ # * #[] (aliased as #slice): Returns a substring determined by a given index,
547
523
  # start/length, or range, or string.
548
524
  # * #byteslice: Returns a substring determined by a given index, start/length,
549
525
  # or range.
550
526
  # * #chr: Returns the first character.
551
527
  #
552
- #
553
528
  # *Duplication*
554
529
  #
555
- # * #to_s, $to_str: If `self` is a subclass of String, returns `self` copied
556
- # into a String; otherwise, returns `self`.
530
+ # * #to_s (aliased as #to_str): If `self` is a subclass of `String`, returns
531
+ # `self` copied into a `String`; otherwise, returns `self`.
557
532
  #
533
+ # ### Methods for Converting to Non-`String`
558
534
  #
559
- # ### Methods for Converting to Non-String
560
- #
561
- # Each of these methods converts the contents of `self` to a non-String.
535
+ # Each of these methods converts the contents of `self` to a non-`String`.
562
536
  #
563
537
  # *Characters, Bytes, and Clusters*
564
538
  #
@@ -568,7 +542,6 @@
568
542
  # * #getbyte: Returns an integer byte as determined by a given index.
569
543
  # * #grapheme_clusters: Returns an array of the grapheme clusters in `self`.
570
544
  #
571
- #
572
545
  # *Splitting*
573
546
  #
574
547
  # * #lines: Returns an array of the lines in `self`, as determined by a given
@@ -581,7 +554,6 @@
581
554
  # regexp or string -- or, if a block given, passes those substrings to the
582
555
  # block.
583
556
  #
584
- #
585
557
  # *Matching*
586
558
  #
587
559
  # * #scan: Returns an array of substrings matching a given regexp or string,
@@ -591,7 +563,6 @@
591
563
  # * #unpack1: Returns the first substring extracted from `self` according to a
592
564
  # given format.
593
565
  #
594
- #
595
566
  # *Numerics*
596
567
  #
597
568
  # * #hex: Returns the integer value of the leading characters, interpreted as
@@ -604,13 +575,11 @@
604
575
  # * #to_f: Returns the floating-point value of leading characters, interpreted
605
576
  # as a floating-point number.
606
577
  #
607
- #
608
578
  # *Strings and Symbols*
609
579
  #
610
580
  # * #inspect: Returns copy of `self`, enclosed in double-quotes, with special
611
581
  # characters escaped.
612
- # * #to_sym, #intern: Returns the symbol corresponding to `self`.
613
- #
582
+ # * #intern (aliased as #to_sym): Returns the symbol corresponding to `self`.
614
583
  #
615
584
  # ### Methods for Iterating
616
585
  #
@@ -636,14 +605,14 @@ class String
636
605
  # rdoc-file=string.c
637
606
  # - String.try_convert(object) -> object, new_string, or nil
638
607
  # -->
639
- # If `object` is a String object, returns `object`.
608
+ # If `object` is a `String` object, returns `object`.
640
609
  #
641
610
  # Otherwise if `object` responds to `:to_str`, calls `object.to_str` and returns
642
611
  # the result.
643
612
  #
644
613
  # Returns `nil` if `object` does not respond to `:to_str`.
645
614
  #
646
- # Raises an exception unless `object.to_str` returns a String object.
615
+ # Raises an exception unless `object.to_str` returns a `String` object.
647
616
  #
648
617
  def self.try_convert: (String object) -> String # technically will return `object` unchanged.
649
618
  | (_ToStr object) -> String
@@ -744,7 +713,7 @@ class String
744
713
  # rdoc-file=string.c
745
714
  # - string * integer -> new_string
746
715
  # -->
747
- # Returns a new String containing `integer` copies of `self`:
716
+ # Returns a new `String` containing `integer` copies of `self`:
748
717
  #
749
718
  # "Ho! " * 3 # => "Ho! Ho! Ho! "
750
719
  # "Ho! " * 0 # => ""
@@ -755,7 +724,7 @@ class String
755
724
  # rdoc-file=string.c
756
725
  # - string + other_string -> new_string
757
726
  # -->
758
- # Returns a new String containing `other_string` concatenated to `self`:
727
+ # Returns a new `String` containing `other_string` concatenated to `self`:
759
728
  #
760
729
  # "Hello from " + self.to_s # => "Hello from main"
761
730
  #
@@ -778,7 +747,7 @@ class String
778
747
  # -->
779
748
  # Returns a frozen, possibly pre-existing copy of the string.
780
749
  #
781
- # The returned String will be deduplicated as long as it does not have any
750
+ # The returned `String` will be deduplicated as long as it does not have any
782
751
  # instance variables set on it and is not a String subclass.
783
752
  #
784
753
  # Note that `-string` variant is more convenient for defining constants:
@@ -808,6 +777,22 @@ class String
808
777
  # s = 'foo'
809
778
  # s << 33 # => "foo!"
810
779
  #
780
+ # If that codepoint is not representable in the encoding of *string*, RangeError
781
+ # is raised.
782
+ #
783
+ # s = 'foo'
784
+ # s.encoding # => <Encoding:UTF-8>
785
+ # s << 0x00110000 # 1114112 out of char range (RangeError)
786
+ # s = 'foo'.encode('EUC-JP')
787
+ # s << 0x00800080 # invalid codepoint 0x800080 in EUC-JP (RangeError)
788
+ #
789
+ # If the encoding is US-ASCII and the codepoint is 0..0xff, *string* is
790
+ # automatically promoted to ASCII-8BIT.
791
+ #
792
+ # s = 'foo'.encode('US-ASCII')
793
+ # s << 0xff
794
+ # s.encoding # => #<Encoding:BINARY (ASCII-8BIT)>
795
+ #
811
796
  # Related: String#concat, which takes multiple arguments.
812
797
  #
813
798
  def <<: (string | Integer str_or_codepoint) -> self
@@ -823,7 +808,6 @@ class String
823
808
  # * 1 if `other_string` is smaller.
824
809
  # * `nil` if the two are incomparable.
825
810
  #
826
- #
827
811
  # Examples:
828
812
  #
829
813
  # 'foo' <=> 'foo' # => 0
@@ -852,7 +836,7 @@ class String
852
836
  # Returns `false` if the two strings' encodings are not compatible:
853
837
  # "\u{e4 f6 fc}".encode("ISO-8859-1") == ("\u{c4 d6 dc}") # => false
854
838
  #
855
- # If `object` is not an instance of String but responds to `to_str`, then the
839
+ # If `object` is not an instance of `String` but responds to `to_str`, then the
856
840
  # two strings are compared using `object.==`.
857
841
  #
858
842
  def ==: (untyped other) -> bool
@@ -869,7 +853,7 @@ class String
869
853
  # Returns `false` if the two strings' encodings are not compatible:
870
854
  # "\u{e4 f6 fc}".encode("ISO-8859-1") == ("\u{c4 d6 dc}") # => false
871
855
  #
872
- # If `object` is not an instance of String but responds to `to_str`, then the
856
+ # If `object` is not an instance of `String` but responds to `to_str`, then the
873
857
  # two strings are compared using `object.==`.
874
858
  #
875
859
  alias === ==
@@ -955,6 +939,30 @@ class String
955
939
  | [T < _ToStr] (Regexp regexp, MatchData::capture backref, T replacement) -> T
956
940
  | [T < _ToStr] (String substring, T replacement) -> T
957
941
 
942
+ # <!--
943
+ # rdoc-file=string.c
944
+ # - append_as_bytes(*objects) -> string
945
+ # -->
946
+ # Concatenates each object in `objects` into `self` without any encoding
947
+ # validation or conversion and returns `self`:
948
+ #
949
+ # s = 'foo'
950
+ # s.append_as_bytes(" \xE2\x82") # => "foo \xE2\x82"
951
+ # s.valid_encoding? # => false
952
+ # s.append_as_bytes("\xAC 12")
953
+ # s.valid_encoding? # => true
954
+ #
955
+ # For each given object `object` that is an Integer, the value is considered a
956
+ # Byte. If the Integer is bigger than one byte, only the lower byte is
957
+ # considered, similar to String#setbyte:
958
+ #
959
+ # s = ""
960
+ # s.append_as_bytes(0, 257) # => "\u0000\u0001"
961
+ #
962
+ # Related: String#<<, String#concat, which do an encoding aware concatenation.
963
+ #
964
+ def append_as_bytes: (String) -> String
965
+
958
966
  # <!--
959
967
  # rdoc-file=string.c
960
968
  # - ascii_only? -> true or false
@@ -1067,13 +1075,12 @@ class String
1067
1075
  # $~ #=> #<MatchData "oo">
1068
1076
  #
1069
1077
  # Integer argument `offset`, if given and non-negative, specifies the maximum
1070
- # starting byte-based position in the
1071
- # string to _end_ the search:
1078
+ # starting byte-based position in the string to *end* the search:
1072
1079
  #
1073
- # 'foo'.byterindex('o', 0) # => nil
1074
- # 'foo'.byterindex('o', 1) # => 1
1075
- # 'foo'.byterindex('o', 2) # => 2
1076
- # 'foo'.byterindex('o', 3) # => 2
1080
+ # 'foo'.byterindex('o', 0) # => nil
1081
+ # 'foo'.byterindex('o', 1) # => 1
1082
+ # 'foo'.byterindex('o', 2) # => 2
1083
+ # 'foo'.byterindex('o', 3) # => 2
1077
1084
  #
1078
1085
  # If `offset` is a negative Integer, the maximum starting position in the string
1079
1086
  # to *end* the search is the sum of the string's length and `offset`:
@@ -1246,7 +1253,6 @@ class String
1246
1253
  # * 1 if `other_string.downcase` is smaller.
1247
1254
  # * `nil` if the two are incomparable.
1248
1255
  #
1249
- #
1250
1256
  # Examples:
1251
1257
  #
1252
1258
  # 'foo'.casecmp('foo') # => 0
@@ -1522,7 +1528,6 @@ class String
1522
1528
  # "foo".crypt("$5$rounds=1000$salt$") # OK, proper usage
1523
1529
  # "foo".crypt("$5$round=1000$salt$") # Typo not detected
1524
1530
  #
1525
- #
1526
1531
  # * Even in the "modular" mode, some hash functions are considered archaic and
1527
1532
  # no longer recommended at all; for instance module `$1$` is officially
1528
1533
  # abandoned by its author: see http://phk.freebsd.dk/sagas/md5crypt_eol/ .
@@ -1536,7 +1541,6 @@ class String
1536
1541
  #
1537
1542
  # "foo".crypt("$5$rounds=1000$salt$") # => "$5fNPQMxC5j6."
1538
1543
  #
1539
- #
1540
1544
  # If for some reason you cannot migrate to other secure contemporary password
1541
1545
  # hashing algorithms, install the string-crypt gem and `require 'string/crypt'`
1542
1546
  # to continue using it.
@@ -1546,7 +1550,7 @@ class String
1546
1550
  # <!-- rdoc-file=string.c -->
1547
1551
  # Returns a frozen, possibly pre-existing copy of the string.
1548
1552
  #
1549
- # The returned String will be deduplicated as long as it does not have any
1553
+ # The returned `String` will be deduplicated as long as it does not have any
1550
1554
  # instance variables set on it and is not a String subclass.
1551
1555
  #
1552
1556
  # Note that `-string` variant is more convenient for defining constants:
@@ -1894,7 +1898,6 @@ class String
1894
1898
  # t = s.encode # => "Ruby™"
1895
1899
  # t.encoding # => #<Encoding:UTF-8>
1896
1900
  #
1897
- #
1898
1901
  # With only argument `dst_encoding` given, uses that encoding:
1899
1902
  #
1900
1903
  # s = "Ruby\x99".force_encoding('Windows-1252')
@@ -2135,7 +2138,7 @@ class String
2135
2138
 
2136
2139
  # <!--
2137
2140
  # rdoc-file=string.c
2138
- # - include? other_string -> true or false
2141
+ # - include?(other_string) -> true or false
2139
2142
  # -->
2140
2143
  # Returns `true` if `self` contains `other_string`, `false` otherwise:
2141
2144
  #
@@ -2227,7 +2230,7 @@ class String
2227
2230
  # - str.intern -> symbol
2228
2231
  # - str.to_sym -> symbol
2229
2232
  # -->
2230
- # Returns the Symbol corresponding to *str*, creating the symbol if it did not
2233
+ # Returns the `Symbol` corresponding to *str*, creating the symbol if it did not
2231
2234
  # previously exist. See Symbol#id2name.
2232
2235
  #
2233
2236
  # "Koala".intern #=> :Koala
@@ -2339,7 +2342,6 @@ class String
2339
2342
  # (see Regexp#match):
2340
2343
  # matchdata = <tt>regexp.match(self)
2341
2344
  #
2342
- #
2343
2345
  # With no block given, returns the computed `matchdata`:
2344
2346
  #
2345
2347
  # 'foo'.match('f') # => #<MatchData "f">
@@ -2434,7 +2436,7 @@ class String
2434
2436
  # s = '99zz99zz'
2435
2437
  # s.succ # => "100aa00aa"
2436
2438
  #
2437
- # The successor to an empty String is a new empty String:
2439
+ # The successor to an empty `String` is a new empty `String`:
2438
2440
  #
2439
2441
  # ''.succ # => ""
2440
2442
  #
@@ -2488,7 +2490,6 @@ class String
2488
2490
  # * `string_or_regexp` itself, if it is a Regexp.
2489
2491
  # * `Regexp.quote(string_or_regexp)`, if `string_or_regexp` is a string.
2490
2492
  #
2491
- #
2492
2493
  # If the pattern is matched, returns pre-match, first-match, post-match:
2493
2494
  #
2494
2495
  # 'hello'.partition('l') # => ["he", "l", "lo"]
@@ -2590,13 +2591,12 @@ class String
2590
2591
  # $~ #=> #<MatchData "oo">
2591
2592
  #
2592
2593
  # Integer argument `offset`, if given and non-negative, specifies the maximum
2593
- # starting position in the
2594
- # string to _end_ the search:
2594
+ # starting position in the string to *end* the search:
2595
2595
  #
2596
- # 'foo'.rindex('o', 0) # => nil
2597
- # 'foo'.rindex('o', 1) # => 1
2598
- # 'foo'.rindex('o', 2) # => 2
2599
- # 'foo'.rindex('o', 3) # => 2
2596
+ # 'foo'.rindex('o', 0) # => nil
2597
+ # 'foo'.rindex('o', 1) # => 1
2598
+ # 'foo'.rindex('o', 2) # => 2
2599
+ # 'foo'.rindex('o', 3) # => 2
2600
2600
  #
2601
2601
  # If `offset` is a negative Integer, the maximum starting position in the string
2602
2602
  # to *end* the search is the sum of the string's length and `offset`:
@@ -2647,7 +2647,6 @@ class String
2647
2647
  # * `string_or_regexp` itself, if it is a Regexp.
2648
2648
  # * `Regexp.quote(string_or_regexp)`, if `string_or_regexp` is a string.
2649
2649
  #
2650
- #
2651
2650
  # If the pattern is matched, returns pre-match, last-match, post-match:
2652
2651
  #
2653
2652
  # 'hello'.rpartition('l') # => ["hel", "l", "o"]
@@ -2704,7 +2703,6 @@ class String
2704
2703
  # * `string_or_regexp` itself, if it is a Regexp.
2705
2704
  # * `Regexp.quote(string_or_regexp)`, if `string_or_regexp` is a string.
2706
2705
  #
2707
- #
2708
2706
  # Iterates through `self`, generating a collection of matching results:
2709
2707
  #
2710
2708
  # * If the pattern contains no groups, each result is the matched string,
@@ -2712,7 +2710,6 @@ class String
2712
2710
  # * If the pattern contains groups, each result is an array containing one
2713
2711
  # entry per group.
2714
2712
  #
2715
- #
2716
2713
  # With no block given, returns an array of the results:
2717
2714
  #
2718
2715
  # s = 'cruel world'
@@ -2733,8 +2730,8 @@ class String
2733
2730
  # <<cruel>> <<world>>
2734
2731
  # rceu lowlr
2735
2732
  #
2736
- def scan: (Regexp pattern) -> Array[String | Array[String]]
2737
- | (Regexp pattern) { (String | Array[String] matches) -> void } -> self
2733
+ def scan: (Regexp pattern) -> Array[String | Array[String?]]
2734
+ | (Regexp pattern) { (String | Array[String?] matches) -> void } -> self
2738
2735
  | (string pattern) -> Array[String]
2739
2736
  | (string pattern) { (String match) -> void } -> self
2740
2737
 
@@ -2844,8 +2841,8 @@ class String
2844
2841
 
2845
2842
  # <!--
2846
2843
  # rdoc-file=string.c
2847
- # - split(field_sep = $;, limit = nil) -> array
2848
- # - split(field_sep = $;, limit = nil) {|substring| ... } -> self
2844
+ # - split(field_sep = $;, limit = 0) -> array
2845
+ # - split(field_sep = $;, limit = 0) {|substring| ... } -> self
2849
2846
  # -->
2850
2847
  # Returns an array of substrings of `self` that are the result of splitting
2851
2848
  # `self` at each occurrence of the given field separator `field_sep`.
@@ -2855,19 +2852,18 @@ class String
2855
2852
  # * If `$;` is `nil` (its default value), the split occurs just as if
2856
2853
  # `field_sep` were given as a space character (see below).
2857
2854
  #
2858
- # * If `$;` is a string, the split ocurs just as if `field_sep` were given as
2855
+ # * If `$;` is a string, the split occurs just as if `field_sep` were given as
2859
2856
  # that string (see below).
2860
2857
  #
2861
- #
2862
- # When `field_sep` is `' '` and `limit` is `nil`, the split occurs at each
2863
- # sequence of whitespace:
2858
+ # When `field_sep` is `' '` and `limit` is `0` (its default value), the split
2859
+ # occurs at each sequence of whitespace:
2864
2860
  #
2865
2861
  # 'abc def ghi'.split(' ') => ["abc", "def", "ghi"]
2866
2862
  # "abc \n\tdef\t\n ghi".split(' ') # => ["abc", "def", "ghi"]
2867
2863
  # 'abc def ghi'.split(' ') => ["abc", "def", "ghi"]
2868
2864
  # ''.split(' ') => []
2869
2865
  #
2870
- # When `field_sep` is a string different from `' '` and `limit` is `nil`, the
2866
+ # When `field_sep` is a string different from `' '` and `limit` is `0`, the
2871
2867
  # split occurs at each occurrence of `field_sep`; trailing empty substrings are
2872
2868
  # not returned:
2873
2869
  #
@@ -2879,7 +2875,7 @@ class String
2879
2875
  # 'тест'.split('т') => ["", "ес"]
2880
2876
  # 'こんにちは'.split('に') => ["こん", "ちは"]
2881
2877
  #
2882
- # When `field_sep` is a Regexp and `limit` is `nil`, the split occurs at each
2878
+ # When `field_sep` is a Regexp and `limit` is `0`, the split occurs at each
2883
2879
  # occurrence of a match; trailing empty substrings are not returned:
2884
2880
  #
2885
2881
  # 'abracadabra'.split(/ab/) # => ["", "racad", "ra"]
@@ -2892,11 +2888,9 @@ class String
2892
2888
  #
2893
2889
  # '1:2:3'.split(/(:)()()/, 2) # => ["1", ":", "", "", "2:3"]
2894
2890
  #
2895
- # As seen above, if `limit` is `nil`, trailing empty substrings are not
2896
- # returned; the same is true if `limit` is zero:
2891
+ # As seen above, if `limit` is `0`, trailing empty substrings are not returned:
2897
2892
  #
2898
2893
  # 'aaabcdaaa'.split('a') => ["", "", "", "bcd"]
2899
- # 'aaabcdaaa'.split('a', 0) # => ["", "", "", "bcd"]
2900
2894
  #
2901
2895
  # If `limit` is positive integer `n`, no more than `n - 1-` splits occur, so
2902
2896
  # that at most `n` substrings are returned, and trailing empty substrings are
@@ -2911,7 +2905,7 @@ class String
2911
2905
  # Note that if `field_sep` is a Regexp containing groups, their matches are in
2912
2906
  # the returned array, but do not count toward the limit.
2913
2907
  #
2914
- # If `limit` is negative, it behaves the same as if `limit` was `nil`, meaning
2908
+ # If `limit` is negative, it behaves the same as if `limit` was zero, meaning
2915
2909
  # that there is no limit, and trailing empty substrings are included:
2916
2910
  #
2917
2911
  # 'aaabcdaaa'.split('a', -1) # => ["", "", "", "bcd", "", "", ""]
@@ -2970,7 +2964,6 @@ class String
2970
2964
  # * `string_or_regexp` itself, if it is a Regexp.
2971
2965
  # * `Regexp.quote(string_or_regexp)`, if `string_or_regexp` is a string.
2972
2966
  #
2973
- #
2974
2967
  # Returns `true` if any pattern matches the beginning, `false` otherwise:
2975
2968
  #
2976
2969
  # 'hello'.start_with?('hell') # => true
@@ -3031,8 +3024,8 @@ class String
3031
3024
  # - sub!(pattern, replacement) -> self or nil
3032
3025
  # - sub!(pattern) {|match| ... } -> self or nil
3033
3026
  # -->
3034
- # Returns `self` with only the first occurrence (not all occurrences) of the
3035
- # given `pattern` replaced.
3027
+ # Replaces the first occurrence (not all occurrences) of the given `pattern` on
3028
+ # `self`; returns `self` if a replacement occurred, `nil` otherwise.
3036
3029
  #
3037
3030
  # See [Substitution Methods](rdoc-ref:String@Substitution+Methods).
3038
3031
  #
@@ -3092,7 +3085,7 @@ class String
3092
3085
  # s = '99zz99zz'
3093
3086
  # s.succ # => "100aa00aa"
3094
3087
  #
3095
- # The successor to an empty String is a new empty String:
3088
+ # The successor to an empty `String` is a new empty `String`:
3096
3089
  #
3097
3090
  # ''.succ # => ""
3098
3091
  #
@@ -3278,19 +3271,19 @@ class String
3278
3271
  # rdoc-file=string.c
3279
3272
  # - to_s -> self or string
3280
3273
  # -->
3281
- # Returns `self` if `self` is a String, or `self` converted to a String if
3282
- # `self` is a subclass of String.
3274
+ # Returns `self` if `self` is a `String`, or `self` converted to a `String` if
3275
+ # `self` is a subclass of `String`.
3283
3276
  #
3284
3277
  def to_s: () -> String
3285
3278
 
3286
3279
  # <!-- rdoc-file=string.c -->
3287
- # Returns `self` if `self` is a String, or `self` converted to a String if
3288
- # `self` is a subclass of String.
3280
+ # Returns `self` if `self` is a `String`, or `self` converted to a `String` if
3281
+ # `self` is a subclass of `String`.
3289
3282
  #
3290
3283
  alias to_str to_s
3291
3284
 
3292
3285
  # <!-- rdoc-file=string.c -->
3293
- # Returns the Symbol corresponding to *str*, creating the symbol if it did not
3286
+ # Returns the `Symbol` corresponding to *str*, creating the symbol if it did not
3294
3287
  # previously exist. See Symbol#id2name.
3295
3288
  #
3296
3289
  # "Koala".intern #=> :Koala
@@ -3320,7 +3313,6 @@ class String
3320
3313
  # translated to the second character in `replacements`.
3321
3314
  # * And so on.
3322
3315
  #
3323
- #
3324
3316
  # Example:
3325
3317
  #
3326
3318
  # 'hello'.tr('el', 'ip') #=> "hippo"
@@ -3411,7 +3403,6 @@ class String
3411
3403
  # * `:nfkc`: Compatibility decomposition, followed by canonical composition.
3412
3404
  # * `:nfkd`: Compatibility decomposition.
3413
3405
  #
3414
- #
3415
3406
  # The encoding of `self` must be one of:
3416
3407
  #
3417
3408
  # * Encoding::UTF_8
@@ -3423,7 +3414,6 @@ class String
3423
3414
  # * Encoding::UCS_2BE
3424
3415
  # * Encoding::UCS_4BE
3425
3416
  #
3426
- #
3427
3417
  # Examples:
3428
3418
  #
3429
3419
  # "a\u0300".unicode_normalize # => "a"
@@ -3470,10 +3460,14 @@ class String
3470
3460
 
3471
3461
  # <!--
3472
3462
  # rdoc-file=pack.rb
3473
- # - unpack(template, offset: 0) -> array
3463
+ # - unpack(template, offset: 0, &block) -> array
3474
3464
  # -->
3475
- # Extracts data from `self`, forming objects that become the elements of a new
3476
- # array; returns that array. See [Packed Data](rdoc-ref:packed_data.rdoc).
3465
+ # Extracts data from `self`.
3466
+ #
3467
+ # If `block` is not given, forming objects that become the elements of a new
3468
+ # array, and returns that array. Otherwise, yields each object.
3469
+ #
3470
+ # See [Packed Data](rdoc-ref:packed_data.rdoc).
3477
3471
  #
3478
3472
  def unpack: (string template, ?offset: int) -> Array[Integer | Float | String | nil]
3479
3473
  | (string template, ?offset: int) { (Integer | Float | String | nil value) -> void } -> nil
@@ -3533,7 +3527,7 @@ class String
3533
3527
  # - upto(other_string, exclusive = false) {|string| ... } -> self
3534
3528
  # - upto(other_string, exclusive = false) -> new_enumerator
3535
3529
  # -->
3536
- # With a block given, calls the block with each String value returned by
3530
+ # With a block given, calls the block with each `String` value returned by
3537
3531
  # successive calls to String#succ; the first value is `self`, the next is
3538
3532
  # `self.succ`, and so on; the sequence terminates when value `other_string` is
3539
3533
  # reached; returns `self`: