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/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