rbs 3.7.0 → 3.8.0.pre.1

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 (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/kernel.rbs CHANGED
@@ -25,7 +25,6 @@
25
25
  # * [Random Values](rdoc-ref:Kernel@Random+Values)
26
26
  # * [Other](rdoc-ref:Kernel@Other)
27
27
  #
28
- #
29
28
  # ### Converting
30
29
  #
31
30
  # * #Array: Returns an Array based on the given argument.
@@ -36,7 +35,6 @@
36
35
  # * #Rational: Returns a Rational based on the given arguments.
37
36
  # * #String: Returns a String based on the given argument.
38
37
  #
39
- #
40
38
  # ### Querying
41
39
  #
42
40
  # * #__callee__: Returns the called name of the current method as a symbol.
@@ -56,7 +54,6 @@
56
54
  # * #local_variables: Returns an array of local variables as symbols.
57
55
  # * #test: Performs specified tests on the given single file or pair of files.
58
56
  #
59
- #
60
57
  # ### Exiting
61
58
  #
62
59
  # * #abort: Exits the current process after printing the given arguments.
@@ -66,7 +63,6 @@
66
63
  # * #exit!: Exits the current process without calling any registered `at_exit`
67
64
  # handlers.
68
65
  #
69
- #
70
66
  # ### Exceptions
71
67
  #
72
68
  # * #catch: Executes the given block, possibly catching a thrown object.
@@ -74,7 +70,6 @@
74
70
  # arguments.
75
71
  # * #throw: Returns from the active catch block waiting for the given tag.
76
72
  #
77
- #
78
73
  # ### IO
79
74
  #
80
75
  # * ::pp: Prints the given objects in pretty form.
@@ -92,13 +87,11 @@
92
87
  # input.
93
88
  # * #select: Same as IO.select.
94
89
  #
95
- #
96
90
  # ### Procs
97
91
  #
98
92
  # * #lambda: Returns a lambda proc for the given block.
99
93
  # * #proc: Returns a new Proc; equivalent to Proc.new.
100
94
  #
101
- #
102
95
  # ### Tracing
103
96
  #
104
97
  # * #set_trace_func: Sets the given proc as the handler for tracing, or
@@ -107,7 +100,6 @@
107
100
  # * #untrace_var: Disables tracing of assignments to the given global
108
101
  # variable.
109
102
  #
110
- #
111
103
  # ### Subprocesses
112
104
  #
113
105
  # * [\`command`](rdoc-ref:Kernel#`): Returns the standard output of running
@@ -118,7 +110,6 @@
118
110
  # completion.
119
111
  # * #system: Executes the given command in a subshell.
120
112
  #
121
- #
122
113
  # ### Loading
123
114
  #
124
115
  # * #autoload: Registers the given file to be loaded when the given constant
@@ -128,21 +119,18 @@
128
119
  # * #require_relative: Loads the Ruby file path relative to the calling file,
129
120
  # unless it has already been loaded.
130
121
  #
131
- #
132
122
  # ### Yielding
133
123
  #
134
124
  # * #tap: Yields `self` to the given block; returns `self`.
135
125
  # * #then (aliased as #yield_self): Yields `self` to the block and returns the
136
126
  # result of the block.
137
127
  #
138
- #
139
128
  # ### Random Values
140
129
  #
141
130
  # * #rand: Returns a pseudo-random floating point number strictly between 0.0
142
131
  # and 1.0.
143
132
  # * #srand: Seeds the pseudo-random number generator with the given number.
144
133
  #
145
- #
146
134
  # ### Other
147
135
  #
148
136
  # * #eval: Evaluates the given string as Ruby code.
@@ -387,7 +375,6 @@ module Kernel : BasicObject
387
375
  # * Once in the parent process, returning the pid of the child process.
388
376
  # * Once in the child process, returning `nil`.
389
377
  #
390
- #
391
378
  # Example:
392
379
  #
393
380
  # puts "This is the first line before the fork (pid #{Process.pid})"
@@ -410,7 +397,6 @@ module Kernel : BasicObject
410
397
  # * Process.wait, to collect the termination statuses of its children.
411
398
  # * Process.detach, to register disinterest in their status.
412
399
  #
413
- #
414
400
  # The thread calling `fork` is the only thread in the created child process;
415
401
  # `fork` doesn't copy other threads.
416
402
  #
@@ -482,7 +468,6 @@ module Kernel : BasicObject
482
468
  # Complex('+1i') # => (0+1i)
483
469
  # Complex('-1i') # => (0-1i)
484
470
  #
485
- #
486
471
  # * At-sign separated real and imaginary rational substrings, each of which
487
472
  # specifies a Rational value, specifying [polar
488
473
  # coordinates](rdoc-ref:Complex@Polar+Coordinates):
@@ -504,9 +489,9 @@ module Kernel : BasicObject
504
489
  # - Float(arg, exception: true) -> float or nil
505
490
  # -->
506
491
  # Returns *arg* converted to a float. Numeric types are converted directly, and
507
- # with exception to String and `nil` the rest are converted using *arg*`.to_f`.
508
- # Converting a String with invalid characters will result in a ArgumentError.
509
- # Converting `nil` generates a TypeError. Exceptions can be suppressed by
492
+ # with exception to String and `nil`, the rest are converted using *arg*`.to_f`.
493
+ # Converting a String with invalid characters will result in an ArgumentError.
494
+ # Converting `nil` generates a TypeError. Exceptions can be suppressed by
510
495
  # passing `exception: false`.
511
496
  #
512
497
  # Float(1) #=> 1.0
@@ -530,11 +515,9 @@ module Kernel : BasicObject
530
515
  # * A hash, returns `object`.
531
516
  # * An empty array or `nil`, returns an empty hash.
532
517
  #
533
- #
534
518
  # * Otherwise, if `object.to_hash` returns a hash, returns that hash.
535
519
  # * Otherwise, returns TypeError.
536
520
  #
537
- #
538
521
  # Examples:
539
522
  #
540
523
  # Hash({foo: 0, bar: 1}) # => {:foo=>0, :bar=>1}
@@ -555,22 +538,22 @@ module Kernel : BasicObject
555
538
  #
556
539
  # With a non-zero `base`, `object` must be a string or convertible to a string.
557
540
  #
558
- # #### numeric objects
541
+ # #### Numeric objects
559
542
  #
560
- # With integer argument `object` given, returns `object`:
543
+ # With an integer argument `object` given, returns `object`:
561
544
  #
562
545
  # Integer(1) # => 1
563
546
  # Integer(-1) # => -1
564
547
  #
565
- # With floating-point argument `object` given, returns `object` truncated to an
566
- # integer:
548
+ # With a floating-point argument `object` given, returns `object` truncated to
549
+ # an integer:
567
550
  #
568
551
  # Integer(1.9) # => 1 # Rounds toward zero.
569
552
  # Integer(-1.9) # => -1 # Rounds toward zero.
570
553
  #
571
- # #### string objects
554
+ # #### String objects
572
555
  #
573
- # With string argument `object` and zero `base` given, returns `object`
556
+ # With a string argument `object` and zero `base` given, returns `object`
574
557
  # converted to an integer in base 10:
575
558
  #
576
559
  # Integer('100') # => 100
@@ -580,7 +563,7 @@ module Kernel : BasicObject
580
563
  # the actual base (radix indicator):
581
564
  #
582
565
  # Integer('0100') # => 64 # Leading '0' specifies base 8.
583
- # Integer('0b100') # => 4 # Leading '0b', specifies base 2.
566
+ # Integer('0b100') # => 4 # Leading '0b' specifies base 2.
584
567
  # Integer('0x100') # => 256 # Leading '0x' specifies base 16.
585
568
  #
586
569
  # With a positive `base` (in range 2..36) given, returns `object` converted to
@@ -591,7 +574,7 @@ module Kernel : BasicObject
591
574
  # Integer('-100', 16) # => -256
592
575
  #
593
576
  # With a negative `base` (in range -36..-2) given, returns `object` converted to
594
- # an integer in the radix indicator if exists or `-base`:
577
+ # the radix indicator if it exists or `base`:
595
578
  #
596
579
  # Integer('0x100', -2) # => 256
597
580
  # Integer('100', -2) # => 4
@@ -600,7 +583,7 @@ module Kernel : BasicObject
600
583
  # Integer('0o100', -10) # => 64
601
584
  # Integer('100', -10) # => 100
602
585
  #
603
- # `base` -1 is equal the -10 case.
586
+ # `base` -1 is equivalent to the -10 case.
604
587
  #
605
588
  # When converting strings, surrounding whitespace and embedded underscores are
606
589
  # allowed and ignored:
@@ -608,7 +591,7 @@ module Kernel : BasicObject
608
591
  # Integer(' 100 ') # => 100
609
592
  # Integer('-1_0_0', 16) # => -256
610
593
  #
611
- # #### other classes
594
+ # #### Other classes
612
595
  #
613
596
  # Examples with `object` of various other classes:
614
597
  #
@@ -616,14 +599,13 @@ module Kernel : BasicObject
616
599
  # Integer(Complex(2, 0)) # => 2 # Imaginary part must be zero.
617
600
  # Integer(Time.now) # => 1650974042
618
601
  #
619
- # #### keywords
602
+ # #### Keywords
620
603
  #
621
- # With optional keyword argument `exception` given as `true` (the default):
604
+ # With the optional keyword argument `exception` given as `true` (the default):
622
605
  #
623
606
  # * Raises TypeError if `object` does not respond to `to_int` or `to_i`.
624
607
  # * Raises TypeError if `object` is `nil`.
625
- # * Raise ArgumentError if `object` is an invalid string.
626
- #
608
+ # * Raises ArgumentError if `object` is an invalid string.
627
609
  #
628
610
  # With `exception` given as `false`, an exception of any kind is suppressed and
629
611
  # `nil` is returned.
@@ -787,11 +769,10 @@ module Kernel : BasicObject
787
769
  # rdoc-file=load.c
788
770
  # - autoload(const, filename) -> nil
789
771
  # -->
790
- # Registers _filename_ to be loaded (using Kernel::require)
791
- # the first time that _const_ (which may be a String or
792
- # a symbol) is accessed.
772
+ # Registers *filename* to be loaded (using Kernel::require) the first time that
773
+ # *const* (which may be a String or a symbol) is accessed.
793
774
  #
794
- # autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
775
+ # autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
795
776
  #
796
777
  # If *const* is defined as autoload, the file name to be loaded is replaced with
797
778
  # *filename*. If *const* is defined but not as autoload, does nothing.
@@ -802,11 +783,24 @@ module Kernel : BasicObject
802
783
  # rdoc-file=load.c
803
784
  # - autoload?(name, inherit=true) -> String or nil
804
785
  # -->
805
- # Returns *filename* to be loaded if *name* is registered as `autoload`.
786
+ # Returns *filename* to be loaded if *name* is registered as `autoload` in the
787
+ # current namespace or one of its ancestors.
806
788
  #
807
789
  # autoload(:B, "b")
808
790
  # autoload?(:B) #=> "b"
809
791
  #
792
+ # module C
793
+ # autoload(:D, "d")
794
+ # autoload?(:D) #=> "d"
795
+ # autoload?(:B) #=> nil
796
+ # end
797
+ #
798
+ # class E
799
+ # autoload(:F, "f")
800
+ # autoload?(:F) #=> "f"
801
+ # autoload?(:B) #=> "b"
802
+ # end
803
+ #
810
804
  def self?.autoload?: (interned name) -> String?
811
805
 
812
806
  # <!--
@@ -912,53 +906,165 @@ module Kernel : BasicObject
912
906
  def self?.exit!: (?int | bool status) -> bot
913
907
 
914
908
  # <!-- rdoc-file=eval.c -->
915
- # With no arguments, raises the exception in `$!` or raises a RuntimeError if
916
- # `$!` is `nil`. With a single `String` argument, raises a `RuntimeError` with
917
- # the string as a message. Otherwise, the first parameter should be an
918
- # `Exception` class (or another object that returns an `Exception` object when
919
- # sent an `exception` message). The optional second parameter sets the message
920
- # associated with the exception (accessible via Exception#message), and the
921
- # third parameter is an array of callback information (accessible via
922
- # Exception#backtrace). The `cause` of the generated exception (accessible via
923
- # Exception#cause) is automatically set to the "current" exception (`$!`), if
924
- # any. An alternative value, either an `Exception` object or `nil`, can be
925
- # specified via the `:cause` argument.
926
- #
927
- # Exceptions are caught by the `rescue` clause of `begin...end` blocks.
928
- #
929
- # raise "Failed to create socket"
930
- # raise ArgumentError, "No parameters", caller
909
+ # Raises an exception; see [Exceptions](rdoc-ref:exceptions.md).
910
+ #
911
+ # Argument `exception` sets the class of the new exception; it should be class
912
+ # Exception or one of its subclasses (most commonly, RuntimeError or
913
+ # StandardError), or an instance of one of those classes:
914
+ #
915
+ # begin
916
+ # raise(StandardError)
917
+ # rescue => x
918
+ # p x.class
919
+ # end
920
+ # # => StandardError
921
+ #
922
+ # Argument `message` sets the stored message in the new exception, which may be
923
+ # retrieved by method Exception#message; the message must be a
924
+ # [string-convertible
925
+ # object](rdoc-ref:implicit_conversion.rdoc@String-Convertible+Objects) or
926
+ # `nil`:
927
+ #
928
+ # begin
929
+ # raise(StandardError, 'Boom')
930
+ # rescue => x
931
+ # p x.message
932
+ # end
933
+ # # => "Boom"
934
+ #
935
+ # If argument `message` is not given, the message is the exception class name.
936
+ #
937
+ # See [Messages](rdoc-ref:exceptions.md@Messages).
938
+ #
939
+ # Argument `backtrace` sets the stored backtrace in the new exception, which may
940
+ # be retrieved by method Exception#backtrace; the backtrace must be an array of
941
+ # strings or `nil`:
942
+ #
943
+ # begin
944
+ # raise(StandardError, 'Boom', %w[foo bar baz])
945
+ # rescue => x
946
+ # p x.backtrace
947
+ # end
948
+ # # => ["foo", "bar", "baz"]
949
+ #
950
+ # If argument `backtrace` is not given, the backtrace is set according to an
951
+ # array of Thread::Backtrace::Location objects, as derived from the call stack.
952
+ #
953
+ # See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
954
+ #
955
+ # Keyword argument `cause` sets the stored cause in the new exception, which may
956
+ # be retrieved by method Exception#cause; the cause must be an exception object
957
+ # (Exception or one of its subclasses), or `nil`:
958
+ #
959
+ # begin
960
+ # raise(StandardError, cause: RuntimeError.new)
961
+ # rescue => x
962
+ # p x.cause
963
+ # end
964
+ # # => #<RuntimeError: RuntimeError>
965
+ #
966
+ # If keyword argument `cause` is not given, the cause is the value of `$!`.
967
+ #
968
+ # See [Cause](rdoc-ref:exceptions.md@Cause).
969
+ #
970
+ # In the alternate calling sequence, where argument `exception` *not* given,
971
+ # raises a new exception of the class given by `$!`, or of class RuntimeError if
972
+ # `$!` is `nil`:
973
+ #
974
+ # begin
975
+ # raise
976
+ # rescue => x
977
+ # p x
978
+ # end
979
+ # # => RuntimeError
980
+ #
981
+ # With argument `exception` not given, argument `message` and keyword argument
982
+ # `cause` may be given, but argument `backtrace` may not be given.
931
983
  #
932
984
  def self?.fail: () -> bot
933
985
  | (string message, ?cause: Exception?) -> bot
934
- | (_Exception exception, ?_ToS? message, ?String | Array[String] | nil backtrace, ?cause: Exception?) -> bot
986
+ | (_Exception exception, ?_ToS? message, ?String | Array[String] | Array[Thread::Backtrace::Location] | nil backtrace, ?cause: Exception?) -> bot
935
987
  | (_Exception exception, ?cause: Exception?, **untyped) -> bot
936
988
 
937
989
  # <!--
938
990
  # rdoc-file=eval.c
939
- # - raise
940
- # - raise(string, cause: $!)
941
- # - raise(exception [, string [, array]], cause: $!)
942
- # - fail
943
- # - fail(string, cause: $!)
944
- # - fail(exception [, string [, array]], cause: $!)
945
- # -->
946
- # With no arguments, raises the exception in `$!` or raises a RuntimeError if
947
- # `$!` is `nil`. With a single `String` argument, raises a `RuntimeError` with
948
- # the string as a message. Otherwise, the first parameter should be an
949
- # `Exception` class (or another object that returns an `Exception` object when
950
- # sent an `exception` message). The optional second parameter sets the message
951
- # associated with the exception (accessible via Exception#message), and the
952
- # third parameter is an array of callback information (accessible via
953
- # Exception#backtrace). The `cause` of the generated exception (accessible via
954
- # Exception#cause) is automatically set to the "current" exception (`$!`), if
955
- # any. An alternative value, either an `Exception` object or `nil`, can be
956
- # specified via the `:cause` argument.
957
- #
958
- # Exceptions are caught by the `rescue` clause of `begin...end` blocks.
959
- #
960
- # raise "Failed to create socket"
961
- # raise ArgumentError, "No parameters", caller
991
+ # - raise(exception, message = exception.to_s, backtrace = nil, cause: $!)
992
+ # - raise(message = nil, cause: $!)
993
+ # -->
994
+ # Raises an exception; see [Exceptions](rdoc-ref:exceptions.md).
995
+ #
996
+ # Argument `exception` sets the class of the new exception; it should be class
997
+ # Exception or one of its subclasses (most commonly, RuntimeError or
998
+ # StandardError), or an instance of one of those classes:
999
+ #
1000
+ # begin
1001
+ # raise(StandardError)
1002
+ # rescue => x
1003
+ # p x.class
1004
+ # end
1005
+ # # => StandardError
1006
+ #
1007
+ # Argument `message` sets the stored message in the new exception, which may be
1008
+ # retrieved by method Exception#message; the message must be a
1009
+ # [string-convertible
1010
+ # object](rdoc-ref:implicit_conversion.rdoc@String-Convertible+Objects) or
1011
+ # `nil`:
1012
+ #
1013
+ # begin
1014
+ # raise(StandardError, 'Boom')
1015
+ # rescue => x
1016
+ # p x.message
1017
+ # end
1018
+ # # => "Boom"
1019
+ #
1020
+ # If argument `message` is not given, the message is the exception class name.
1021
+ #
1022
+ # See [Messages](rdoc-ref:exceptions.md@Messages).
1023
+ #
1024
+ # Argument `backtrace` sets the stored backtrace in the new exception, which may
1025
+ # be retrieved by method Exception#backtrace; the backtrace must be an array of
1026
+ # strings or `nil`:
1027
+ #
1028
+ # begin
1029
+ # raise(StandardError, 'Boom', %w[foo bar baz])
1030
+ # rescue => x
1031
+ # p x.backtrace
1032
+ # end
1033
+ # # => ["foo", "bar", "baz"]
1034
+ #
1035
+ # If argument `backtrace` is not given, the backtrace is set according to an
1036
+ # array of Thread::Backtrace::Location objects, as derived from the call stack.
1037
+ #
1038
+ # See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
1039
+ #
1040
+ # Keyword argument `cause` sets the stored cause in the new exception, which may
1041
+ # be retrieved by method Exception#cause; the cause must be an exception object
1042
+ # (Exception or one of its subclasses), or `nil`:
1043
+ #
1044
+ # begin
1045
+ # raise(StandardError, cause: RuntimeError.new)
1046
+ # rescue => x
1047
+ # p x.cause
1048
+ # end
1049
+ # # => #<RuntimeError: RuntimeError>
1050
+ #
1051
+ # If keyword argument `cause` is not given, the cause is the value of `$!`.
1052
+ #
1053
+ # See [Cause](rdoc-ref:exceptions.md@Cause).
1054
+ #
1055
+ # In the alternate calling sequence, where argument `exception` *not* given,
1056
+ # raises a new exception of the class given by `$!`, or of class RuntimeError if
1057
+ # `$!` is `nil`:
1058
+ #
1059
+ # begin
1060
+ # raise
1061
+ # rescue => x
1062
+ # p x
1063
+ # end
1064
+ # # => RuntimeError
1065
+ #
1066
+ # With argument `exception` not given, argument `message` and keyword argument
1067
+ # `cause` may be given, but argument `backtrace` may not be given.
962
1068
  #
963
1069
  alias raise fail
964
1070
 
@@ -1051,10 +1157,10 @@ module Kernel : BasicObject
1051
1157
  # will be raised.
1052
1158
  #
1053
1159
  # If the optional *wrap* parameter is `true`, the loaded script will be executed
1054
- # under an anonymous module, protecting the calling program's global namespace.
1055
- # If the optional *wrap* parameter is a module, the loaded script will be
1056
- # executed under the given module. In no circumstance will any local variables
1057
- # in the loaded file be propagated to the loading environment.
1160
+ # under an anonymous module. If the optional *wrap* parameter is a module, the
1161
+ # loaded script will be executed under the given module. In no circumstance will
1162
+ # any local variables in the loaded file be propagated to the loading
1163
+ # environment.
1058
1164
  #
1059
1165
  def self?.load: (String filename, ?Module | bool) -> bool
1060
1166
 
@@ -1074,8 +1180,8 @@ module Kernel : BasicObject
1074
1180
  # # ...
1075
1181
  # end
1076
1182
  #
1077
- # StopIteration raised in the block breaks the loop. In this case, loop returns
1078
- # the "result" value stored in the exception.
1183
+ # A StopIteration raised in the block breaks the loop. In this case, loop
1184
+ # returns the "result" value stored in the exception.
1079
1185
  #
1080
1186
  # enum = Enumerator.new { |y|
1081
1187
  # y << "one"
@@ -1135,7 +1241,6 @@ module Kernel : BasicObject
1135
1241
  # * If not the last object, writes the output field separator
1136
1242
  # `$OUTPUT_FIELD_SEPARATOR` (`$,` if it is not `nil`.
1137
1243
  #
1138
- #
1139
1244
  # With default separators:
1140
1245
  #
1141
1246
  # objects = [0, 0.0, Rational(0, 1), Complex(0, 0), :zero, 'zero']
@@ -1282,7 +1387,7 @@ module Kernel : BasicObject
1282
1387
  # -->
1283
1388
  # prints arguments in pretty form.
1284
1389
  #
1285
- # pp returns argument(s).
1390
+ # `#pp` returns argument(s).
1286
1391
  #
1287
1392
  def self?.pp: [T] (T arg0) -> T
1288
1393
  | (untyped, untyped, *untyped) -> Array[untyped]
@@ -1382,8 +1487,8 @@ module Kernel : BasicObject
1382
1487
  # $cat t.txt | ruby -e "p readlines 12"
1383
1488
  # ["First line\n", "Second line\n", "\n", "Fourth line\n", "Fifth line\n"]
1384
1489
  #
1385
- # With arguments `sep` and `limit` given, combines the two behaviors; see [Line
1386
- # Separator and Line Limit](rdoc-ref:IO@Line+Separator+and+Line+Limit).
1490
+ # With arguments `sep` and `limit` given, combines the two behaviors (see [Line
1491
+ # Separator and Line Limit](rdoc-ref:IO@Line+Separator+and+Line+Limit)).
1387
1492
  #
1388
1493
  # Optional keyword argument `chomp` specifies whether line separators are to be
1389
1494
  # omitted:
@@ -1408,7 +1513,6 @@ module Kernel : BasicObject
1408
1513
  # * Otherwise, installed gems are searched for a file that matches. If it's
1409
1514
  # found in gem 'y', that gem is activated (added to the loadpath).
1410
1515
  #
1411
- #
1412
1516
  # The normal `require` functionality of returning false if that file has already
1413
1517
  # been loaded is preserved.
1414
1518
  #
@@ -1438,7 +1542,8 @@ module Kernel : BasicObject
1438
1542
  # Each of the arguments `read_ios`, `write_ios`, and `error_ios` is an array of
1439
1543
  # IO objects.
1440
1544
  #
1441
- # Argument `timeout` is an integer timeout interval in seconds.
1545
+ # Argument `timeout` is a numeric value (such as integer or float) timeout
1546
+ # interval in seconds.
1442
1547
  #
1443
1548
  # The method monitors the IO objects given in all three arrays, waiting for some
1444
1549
  # to be ready; returns a 3-element array whose elements are:
@@ -1447,7 +1552,6 @@ module Kernel : BasicObject
1447
1552
  # * An array of the objects in `write_ios` that are ready for writing.
1448
1553
  # * An array of the objects in `error_ios` have pending exceptions.
1449
1554
  #
1450
- #
1451
1555
  # If no object becomes ready within the given `timeout`, `nil` is returned.
1452
1556
  #
1453
1557
  # IO.select peeks the buffer of IO objects for testing readability. If the IO
@@ -1616,59 +1720,69 @@ module Kernel : BasicObject
1616
1720
 
1617
1721
  # <!--
1618
1722
  # rdoc-file=file.c
1619
- # - test(cmd, file1 [, file2] ) -> obj
1620
- # -->
1621
- # Uses the character `cmd` to perform various tests on `file1` (first table
1622
- # below) or on `file1` and `file2` (second table).
1623
- #
1624
- # File tests on a single file:
1625
- #
1626
- # Cmd Returns Meaning
1627
- # "A" | Time | Last access time for file1
1628
- # "b" | boolean | True if file1 is a block device
1629
- # "c" | boolean | True if file1 is a character device
1630
- # "C" | Time | Last change time for file1
1631
- # "d" | boolean | True if file1 exists and is a directory
1632
- # "e" | boolean | True if file1 exists
1633
- # "f" | boolean | True if file1 exists and is a regular file
1634
- # "g" | boolean | True if file1 has the setgid bit set
1635
- # "G" | boolean | True if file1 exists and has a group
1636
- # | | ownership equal to the caller's group
1637
- # "k" | boolean | True if file1 exists and has the sticky bit set
1638
- # "l" | boolean | True if file1 exists and is a symbolic link
1639
- # "M" | Time | Last modification time for file1
1640
- # "o" | boolean | True if file1 exists and is owned by
1641
- # | | the caller's effective uid
1642
- # "O" | boolean | True if file1 exists and is owned by
1643
- # | | the caller's real uid
1644
- # "p" | boolean | True if file1 exists and is a fifo
1645
- # "r" | boolean | True if file1 is readable by the effective
1646
- # | | uid/gid of the caller
1647
- # "R" | boolean | True if file is readable by the real
1648
- # | | uid/gid of the caller
1649
- # "s" | int/nil | If file1 has nonzero size, return the size,
1650
- # | | otherwise return nil
1651
- # "S" | boolean | True if file1 exists and is a socket
1652
- # "u" | boolean | True if file1 has the setuid bit set
1653
- # "w" | boolean | True if file1 exists and is writable by
1654
- # | | the effective uid/gid
1655
- # "W" | boolean | True if file1 exists and is writable by
1656
- # | | the real uid/gid
1657
- # "x" | boolean | True if file1 exists and is executable by
1658
- # | | the effective uid/gid
1659
- # "X" | boolean | True if file1 exists and is executable by
1660
- # | | the real uid/gid
1661
- # "z" | boolean | True if file1 exists and has a zero length
1662
- #
1663
- # Tests that take two files:
1664
- #
1665
- # "-" | boolean | True if file1 and file2 are identical
1666
- # "=" | boolean | True if the modification times of file1
1667
- # | | and file2 are equal
1668
- # "<" | boolean | True if the modification time of file1
1669
- # | | is prior to that of file2
1670
- # ">" | boolean | True if the modification time of file1
1671
- # | | is after that of file2
1723
+ # - test(char, path0, path1 = nil) -> object
1724
+ # -->
1725
+ # Performs a test on one or both of the *filesystem entities* at the given paths
1726
+ # `path0` and `path1`:
1727
+ # * Each path `path0` or `path1` points to a file, directory, device, pipe,
1728
+ # etc.
1729
+ # * Character `char` selects a specific test.
1730
+ # The tests:
1731
+ # * Each of these tests operates only on the entity at `path0`,
1732
+ # and returns `true` or `false`;
1733
+ # for a non-existent entity, returns `false` (does not raise exception):
1734
+ # Character |Test
1735
+ # ------------|-------------------------------------------------------------------------
1736
+ # <tt>'b'</tt>|Whether the entity is a block device.
1737
+ # <tt>'c'</tt>|Whether the entity is a character device.
1738
+ # <tt>'d'</tt>|Whether the entity is a directory.
1739
+ # <tt>'e'</tt>|Whether the entity is an existing entity.
1740
+ # <tt>'f'</tt>|Whether the entity is an existing regular file.
1741
+ # <tt>'g'</tt>|Whether the entity's setgid bit is set.
1742
+ # <tt>'G'</tt>|Whether the entity's group ownership is equal to the caller's.
1743
+ # <tt>'k'</tt>|Whether the entity's sticky bit is set.
1744
+ # <tt>'l'</tt>|Whether the entity is a symbolic link.
1745
+ # <tt>'o'</tt>|Whether the entity is owned by the caller's effective uid.
1746
+ # <tt>'O'</tt>|Like <tt>'o'</tt>, but uses the real uid (not the effective uid).
1747
+ # <tt>'p'</tt>|Whether the entity is a FIFO device (named pipe).
1748
+ # <tt>'r'</tt>|Whether the entity is readable by the caller's effective uid/gid.
1749
+ # <tt>'R'</tt>|Like <tt>'r'</tt>, but uses the real uid/gid (not the effective uid/gid).
1750
+ # <tt>'S'</tt>|Whether the entity is a socket.
1751
+ # <tt>'u'</tt>|Whether the entity's setuid bit is set.
1752
+ # <tt>'w'</tt>|Whether the entity is writable by the caller's effective uid/gid.
1753
+ # <tt>'W'</tt>|Like <tt>'w'</tt>, but uses the real uid/gid (not the effective uid/gid).
1754
+ # <tt>'x'</tt>|Whether the entity is executable by the caller's effective uid/gid.
1755
+ # <tt>'X'</tt>|Like <tt>'x'</tt>, but uses the real uid/gid (not the effective uid/git).
1756
+ # <tt>'z'</tt>|Whether the entity exists and is of length zero.
1757
+ # * This test operates only on the entity at `path0`,
1758
+ # and returns an integer size or `nil`:
1759
+ # Character |Test
1760
+ # ------------|--------------------------------------------------------------------------------------------
1761
+ # <tt>'s'</tt>|Returns positive integer size if the entity exists and has non-zero length, +nil+ otherwise.
1762
+ # * Each of these tests operates only on the entity at `path0`,
1763
+ # and returns a Time object;
1764
+ # raises an exception if the entity does not exist:
1765
+ # Character |Test
1766
+ # ------------|--------------------------------------
1767
+ # <tt>'A'</tt>|Last access time for the entity.
1768
+ # <tt>'C'</tt>|Last change time for the entity.
1769
+ # <tt>'M'</tt>|Last modification time for the entity.
1770
+ # * Each of these tests operates on the modification time (`mtime`)
1771
+ # of each of the entities at `path0` and `path1`,
1772
+ # and returns a `true` or `false`;
1773
+ # returns `false` if either entity does not exist:
1774
+ # Character |Test
1775
+ # ------------|---------------------------------------------------------------
1776
+ # <tt>'<'</tt>|Whether the `mtime` at `path0` is less than that at `path1`.
1777
+ # <tt>'='</tt>|Whether the `mtime` at `path0` is equal to that at `path1`.
1778
+ # <tt>'>'</tt>|Whether the `mtime` at `path0` is greater than that at `path1`.
1779
+ # * This test operates on the content of each of the entities at `path0` and
1780
+ # `path1`,
1781
+ # and returns a `true` or `false`;
1782
+ # returns `false` if either entity does not exist:
1783
+ # Character |Test
1784
+ # ------------|---------------------------------------------
1785
+ # <tt>'-'</tt>|Whether the entities exist and are identical.
1672
1786
  #
1673
1787
  def self?.test: (String | Integer cmd, String | IO file1, ?String | IO file2) -> (TrueClass | FalseClass | Time | nil | Integer)
1674
1788
 
@@ -1719,15 +1833,19 @@ module Kernel : BasicObject
1719
1833
  # baz.rb:6: warning: invalid call to foo
1720
1834
  #
1721
1835
  # If `category` keyword argument is given, passes the category to
1722
- # `Warning.warn`. The category given must be be one of the following
1723
- # categories:
1836
+ # `Warning.warn`. The category given must be one of the following categories:
1724
1837
  #
1725
1838
  # :deprecated
1726
1839
  # : Used for warning for deprecated functionality that may be removed in the
1727
1840
  # future.
1841
+ #
1728
1842
  # :experimental
1729
1843
  # : Used for experimental features that may change in future releases.
1730
1844
  #
1845
+ # :performance
1846
+ # : Used for warning about APIs or pattern that have negative performance
1847
+ # impact
1848
+ #
1731
1849
  def self?.warn: (*_ToS msg, ?uplevel: int?, ?category: Warning::category?) -> nil
1732
1850
 
1733
1851
  # <!--
@@ -1740,7 +1858,6 @@ module Kernel : BasicObject
1740
1858
  # * Passing string `command_line` to the shell.
1741
1859
  # * Invoking the executable at `exe_path`.
1742
1860
  #
1743
- #
1744
1861
  # This method has potential security vulnerabilities if called with untrusted
1745
1862
  # input; see [Command Injection](rdoc-ref:command_injection.rdoc).
1746
1863
  #
@@ -1761,7 +1878,6 @@ module Kernel : BasicObject
1761
1878
  # word or special built-in, or if it contains one or more meta characters.
1762
1879
  # * `exe_path` otherwise.
1763
1880
  #
1764
- #
1765
1881
  # **Argument `command_line`**
1766
1882
  #
1767
1883
  # String argument `command_line` is a command line to be passed to a shell; it
@@ -1769,7 +1885,7 @@ module Kernel : BasicObject
1769
1885
  # contain meta characters:
1770
1886
  #
1771
1887
  # exec('if true; then echo "Foo"; fi') # Shell reserved word.
1772
- # exec('echo') # Built-in.
1888
+ # exec('exit') # Built-in.
1773
1889
  # exec('date > date.tmp') # Contains meta character.
1774
1890
  #
1775
1891
  # The command line may also contain arguments and options for the command:
@@ -1793,7 +1909,6 @@ module Kernel : BasicObject
1793
1909
  # * A 2-element array containing the path to an executable and the string to
1794
1910
  # be used as the name of the executing process.
1795
1911
  #
1796
- #
1797
1912
  # Example:
1798
1913
  #
1799
1914
  # exec('/usr/bin/date')
@@ -1802,7 +1917,8 @@ module Kernel : BasicObject
1802
1917
  #
1803
1918
  # Sat Aug 26 09:38:00 AM CDT 2023
1804
1919
  #
1805
- # Ruby invokes the executable directly, with no shell and no shell expansion:
1920
+ # Ruby invokes the executable directly. This form does not use the shell; see
1921
+ # [Arguments args](rdoc-ref:Process@Arguments+args) for caveats.
1806
1922
  #
1807
1923
  # exec('doesnt_exist') # Raises Errno::ENOENT
1808
1924
  #
@@ -1834,7 +1950,6 @@ module Kernel : BasicObject
1834
1950
  # * Passing string `command_line` to the shell.
1835
1951
  # * Invoking the executable at `exe_path`.
1836
1952
  #
1837
- #
1838
1953
  # This method has potential security vulnerabilities if called with untrusted
1839
1954
  # input; see [Command Injection](rdoc-ref:command_injection.rdoc).
1840
1955
  #
@@ -1846,7 +1961,6 @@ module Kernel : BasicObject
1846
1961
  # * Process.wait, to collect the termination statuses of its children.
1847
1962
  # * Process.detach, to register disinterest in their status.
1848
1963
  #
1849
- #
1850
1964
  # The new process is created using the [exec system
1851
1965
  # call](https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/functions/e
1852
1966
  # xecve.html); it may inherit some of its environment from the calling program
@@ -1864,7 +1978,6 @@ module Kernel : BasicObject
1864
1978
  # word or special built-in, or if it contains one or more meta characters.
1865
1979
  # * `exe_path` otherwise.
1866
1980
  #
1867
- #
1868
1981
  # **Argument `command_line`**
1869
1982
  #
1870
1983
  # String argument `command_line` is a command line to be passed to a shell; it
@@ -1873,7 +1986,7 @@ module Kernel : BasicObject
1873
1986
  #
1874
1987
  # spawn('if true; then echo "Foo"; fi') # => 798847 # Shell reserved word.
1875
1988
  # Process.wait # => 798847
1876
- # spawn('echo') # => 798848 # Built-in.
1989
+ # spawn('exit') # => 798848 # Built-in.
1877
1990
  # Process.wait # => 798848
1878
1991
  # spawn('date > /tmp/date.tmp') # => 798879 # Contains meta character.
1879
1992
  # Process.wait # => 798849
@@ -1898,27 +2011,19 @@ module Kernel : BasicObject
1898
2011
  #
1899
2012
  # Argument `exe_path` is one of the following:
1900
2013
  #
1901
- # * The string path to an executable to be called:
2014
+ # * The string path to an executable to be called.
2015
+ # * A 2-element array containing the path to an executable to be called, and
2016
+ # the string to be used as the name of the executing process.
1902
2017
  #
1903
2018
  # spawn('/usr/bin/date') # Path to date on Unix-style system.
1904
2019
  # Process.wait
1905
2020
  #
1906
2021
  # Output:
1907
2022
  #
1908
- # Thu Aug 31 10:06:48 AM CDT 2023
1909
- #
1910
- # * A 2-element array containing the path to an executable and the string to
1911
- # be used as the name of the executing process:
1912
- #
1913
- # pid = spawn(['sleep', 'Hello!'], '1') # 2-element array.
1914
- # p `ps -p #{pid} -o command=`
1915
- #
1916
- # Output:
1917
- #
1918
- # "Hello! 1\n"
2023
+ # Mon Aug 28 11:43:10 AM CDT 2023
1919
2024
  #
1920
- #
1921
- # Ruby invokes the executable directly, with no shell and no shell expansion.
2025
+ # Ruby invokes the executable directly. This form does not use the shell; see
2026
+ # [Arguments args](rdoc-ref:Process@Arguments+args) for caveats.
1922
2027
  #
1923
2028
  # If one or more `args` is given, each is an argument or option to be passed to
1924
2029
  # the executable:
@@ -1948,7 +2053,6 @@ module Kernel : BasicObject
1948
2053
  # * Passing string `command_line` to the shell.
1949
2054
  # * Invoking the executable at `exe_path`.
1950
2055
  #
1951
- #
1952
2056
  # This method has potential security vulnerabilities if called with untrusted
1953
2057
  # input; see [Command Injection](rdoc-ref:command_injection.rdoc).
1954
2058
  #
@@ -1958,7 +2062,6 @@ module Kernel : BasicObject
1958
2062
  # * `false` if the exit status is a non-zero integer.
1959
2063
  # * `nil` if the command could not execute.
1960
2064
  #
1961
- #
1962
2065
  # Raises an exception (instead of returning `false` or `nil`) if keyword
1963
2066
  # argument `exception` is set to `true`.
1964
2067
  #
@@ -1981,7 +2084,6 @@ module Kernel : BasicObject
1981
2084
  # word or special built-in, or if it contains one or more meta characters.
1982
2085
  # * `exe_path` otherwise.
1983
2086
  #
1984
- #
1985
2087
  # **Argument `command_line`**
1986
2088
  #
1987
2089
  # String argument `command_line` is a command line to be passed to a shell; it
@@ -1989,14 +2091,14 @@ module Kernel : BasicObject
1989
2091
  # contain meta characters:
1990
2092
  #
1991
2093
  # system('if true; then echo "Foo"; fi') # => true # Shell reserved word.
1992
- # system('echo') # => true # Built-in.
2094
+ # system('exit') # => true # Built-in.
1993
2095
  # system('date > /tmp/date.tmp') # => true # Contains meta character.
1994
2096
  # system('date > /nop/date.tmp') # => false
1995
2097
  # system('date > /nop/date.tmp', exception: true) # Raises RuntimeError.
1996
2098
  #
1997
2099
  # Assigns the command's error status to `$?`:
1998
2100
  #
1999
- # system('echo') # => true # Built-in.
2101
+ # system('exit') # => true # Built-in.
2000
2102
  # $? # => #<Process::Status: pid 640610 exit 0>
2001
2103
  # system('date > /nop/date.tmp') # => false
2002
2104
  # $? # => #<Process::Status: pid 640742 exit 2>
@@ -2022,7 +2124,6 @@ module Kernel : BasicObject
2022
2124
  # * A 2-element array containing the path to an executable and the string to
2023
2125
  # be used as the name of the executing process.
2024
2126
  #
2025
- #
2026
2127
  # Example:
2027
2128
  #
2028
2129
  # system('/usr/bin/date') # => true # Path to date on Unix-style system.
@@ -2039,7 +2140,8 @@ module Kernel : BasicObject
2039
2140
  # system('foo') # => nil
2040
2141
  # $? # => #<Process::Status: pid 645608 exit 127>
2041
2142
  #
2042
- # Ruby invokes the executable directly, with no shell and no shell expansion:
2143
+ # Ruby invokes the executable directly. This form does not use the shell; see
2144
+ # [Arguments args](rdoc-ref:Process@Arguments+args) for caveats.
2043
2145
  #
2044
2146
  # system('doesnt_exist') # => nil
2045
2147
  #
@@ -2117,7 +2219,7 @@ module Kernel : BasicObject
2117
2219
  # s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">"
2118
2220
  # s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
2119
2221
  #
2120
- # This method may have class-specific behavior. If so, that behavior will be
2222
+ # This method may have class-specific behavior. If so, that behavior will be
2121
2223
  # documented under the #`initialize_copy` method of the class.
2122
2224
  #
2123
2225
  def clone: (?freeze: bool?) -> self
@@ -2885,7 +2987,7 @@ module Kernel : BasicObject
2885
2987
  # rdoc-file=kernel.rb
2886
2988
  # - obj.tap {|x| block } -> obj
2887
2989
  # -->
2888
- # Yields self to the block, and then returns self. The primary purpose of this
2990
+ # Yields self to the block and then returns self. The primary purpose of this
2889
2991
  # method is to "tap into" a method chain, in order to perform operations on
2890
2992
  # intermediate results within the chain.
2891
2993
  #
@@ -2909,11 +3011,8 @@ module Kernel : BasicObject
2909
3011
 
2910
3012
  # <!--
2911
3013
  # rdoc-file=kernel.rb
2912
- # - obj.yield_self {|x| block } -> an_object
3014
+ # - yield_self()
2913
3015
  # -->
2914
- # Yields self to the block and returns the result of the block.
2915
- #
2916
- # "my string".yield_self {|s| s.upcase } #=> "MY STRING"
2917
3016
  #
2918
3017
  def yield_self: () -> Enumerator[self, untyped]
2919
3018
  | [T] () { (self) -> T } -> T
@@ -2926,32 +3025,23 @@ module Kernel : BasicObject
2926
3025
  #
2927
3026
  # 3.next.then {|x| x**x }.to_s #=> "256"
2928
3027
  #
2929
- # Good usage for `then` is value piping in method chains:
3028
+ # A good use of `then` is value piping in method chains:
2930
3029
  #
2931
3030
  # require 'open-uri'
2932
3031
  # require 'json'
2933
3032
  #
2934
- # construct_url(arguments).
2935
- # then {|url| URI(url).read }.
2936
- # then {|response| JSON.parse(response) }
3033
+ # construct_url(arguments)
3034
+ # .then {|url| URI(url).read }
3035
+ # .then {|response| JSON.parse(response) }
2937
3036
  #
2938
- # When called without block, the method returns `Enumerator`, which can be used,
2939
- # for example, for conditional circuit-breaking:
3037
+ # When called without a block, the method returns an `Enumerator`, which can be
3038
+ # used, for example, for conditional circuit-breaking:
2940
3039
  #
2941
- # # meets condition, no-op
3040
+ # # Meets condition, no-op
2942
3041
  # 1.then.detect(&:odd?) # => 1
2943
- # # does not meet condition, drop value
3042
+ # # Does not meet condition, drop value
2944
3043
  # 2.then.detect(&:odd?) # => nil
2945
3044
  #
2946
- # Good usage for `then` is value piping in method chains:
2947
- #
2948
- # require 'open-uri'
2949
- # require 'json'
2950
- #
2951
- # construct_url(arguments).
2952
- # then {|url| URI(url).read }.
2953
- # then {|response| JSON.parse(response) }
2954
- #
2955
3045
  alias then yield_self
2956
3046
 
2957
3047
  private