rbs 3.0.0.dev.2 → 3.0.0.dev.3

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -1
  3. data/.github/workflows/ruby.yml +4 -0
  4. data/Gemfile.lock +11 -11
  5. data/Rakefile +2 -2
  6. data/Steepfile +1 -1
  7. data/core/array.rbs +573 -423
  8. data/core/basic_object.rbs +11 -39
  9. data/core/binding.rbs +1 -1
  10. data/core/builtin.rbs +8 -0
  11. data/core/class.rbs +37 -0
  12. data/core/comparable.rbs +7 -18
  13. data/core/complex.rbs +2 -2
  14. data/core/data.rbs +419 -0
  15. data/core/dir.rbs +52 -104
  16. data/core/encoding.rbs +22 -181
  17. data/core/enumerable.rbs +212 -175
  18. data/core/enumerator/product.rbs +96 -0
  19. data/core/enumerator.rbs +57 -8
  20. data/core/errors.rbs +8 -2
  21. data/core/exception.rbs +41 -0
  22. data/core/fiber.rbs +95 -12
  23. data/core/file.rbs +840 -275
  24. data/core/file_test.rbs +34 -19
  25. data/core/float.rbs +40 -96
  26. data/core/gc.rbs +15 -3
  27. data/core/hash.rbs +113 -175
  28. data/core/integer.rbs +85 -145
  29. data/core/io/buffer.rbs +187 -60
  30. data/core/io/wait.rbs +28 -16
  31. data/core/io.rbs +1859 -1389
  32. data/core/kernel.rbs +525 -961
  33. data/core/match_data.rbs +306 -142
  34. data/core/math.rbs +506 -234
  35. data/core/method.rbs +0 -24
  36. data/core/module.rbs +110 -17
  37. data/core/nil_class.rbs +2 -0
  38. data/core/numeric.rbs +76 -144
  39. data/core/object.rbs +88 -212
  40. data/core/proc.rbs +17 -5
  41. data/core/process.rbs +22 -5
  42. data/core/ractor.rbs +1 -1
  43. data/core/random.rbs +20 -3
  44. data/core/range.rbs +91 -89
  45. data/core/rational.rbs +2 -3
  46. data/core/rbs/unnamed/argf.rbs +177 -120
  47. data/core/rbs/unnamed/env_class.rbs +89 -163
  48. data/core/rbs/unnamed/random.rbs +36 -12
  49. data/core/refinement.rbs +8 -0
  50. data/core/regexp.rbs +462 -272
  51. data/core/ruby_vm.rbs +210 -0
  52. data/{stdlib/set/0 → core}/set.rbs +43 -47
  53. data/core/string.rbs +1403 -1332
  54. data/core/string_io.rbs +191 -107
  55. data/core/struct.rbs +67 -63
  56. data/core/symbol.rbs +187 -201
  57. data/core/thread.rbs +40 -35
  58. data/core/time.rbs +902 -826
  59. data/core/trace_point.rbs +55 -6
  60. data/core/unbound_method.rbs +48 -24
  61. data/docs/collection.md +4 -0
  62. data/docs/syntax.md +55 -0
  63. data/ext/rbs_extension/parser.c +5 -6
  64. data/lib/rbs/cli.rb +6 -1
  65. data/lib/rbs/collection/cleaner.rb +8 -1
  66. data/lib/rbs/collection/config/lockfile.rb +3 -1
  67. data/lib/rbs/collection/config/lockfile_generator.rb +16 -14
  68. data/lib/rbs/collection/config.rb +1 -1
  69. data/lib/rbs/collection/sources/git.rb +9 -2
  70. data/lib/rbs/collection/sources/local.rb +79 -0
  71. data/lib/rbs/collection/sources.rb +8 -1
  72. data/lib/rbs/environment.rb +6 -5
  73. data/lib/rbs/environment_loader.rb +3 -2
  74. data/lib/rbs/errors.rb +18 -0
  75. data/lib/rbs/locator.rb +26 -7
  76. data/lib/rbs/sorter.rb +2 -2
  77. data/lib/rbs/version.rb +1 -1
  78. data/sig/collection/sources.rbs +32 -3
  79. data/sig/environment.rbs +2 -3
  80. data/sig/locator.rbs +14 -2
  81. data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
  82. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
  83. data/stdlib/cgi/0/core.rbs +16 -0
  84. data/stdlib/coverage/0/coverage.rbs +50 -8
  85. data/stdlib/csv/0/csv.rbs +1 -1
  86. data/stdlib/date/0/date.rbs +856 -726
  87. data/stdlib/date/0/date_time.rbs +83 -210
  88. data/stdlib/erb/0/erb.rbs +13 -36
  89. data/stdlib/etc/0/etc.rbs +127 -20
  90. data/stdlib/fileutils/0/fileutils.rbs +1290 -381
  91. data/stdlib/logger/0/logger.rbs +466 -316
  92. data/stdlib/net-http/0/net-http.rbs +2211 -534
  93. data/stdlib/nkf/0/nkf.rbs +5 -5
  94. data/stdlib/objspace/0/objspace.rbs +31 -14
  95. data/stdlib/openssl/0/openssl.rbs +11 -7
  96. data/stdlib/optparse/0/optparse.rbs +20 -17
  97. data/stdlib/pathname/0/pathname.rbs +21 -4
  98. data/stdlib/pstore/0/pstore.rbs +378 -154
  99. data/stdlib/pty/0/pty.rbs +24 -8
  100. data/stdlib/ripper/0/ripper.rbs +1650 -0
  101. data/stdlib/socket/0/addrinfo.rbs +9 -15
  102. data/stdlib/socket/0/socket.rbs +36 -3
  103. data/stdlib/strscan/0/string_scanner.rbs +7 -5
  104. data/stdlib/tempfile/0/tempfile.rbs +104 -44
  105. data/stdlib/time/0/time.rbs +2 -2
  106. data/stdlib/uri/0/file.rbs +5 -0
  107. data/stdlib/uri/0/generic.rbs +2 -2
  108. data/stdlib/yaml/0/yaml.rbs +2 -2
  109. data/stdlib/zlib/0/zlib.rbs +1 -1
  110. metadata +8 -6
  111. data/core/deprecated.rbs +0 -9
  112. data/sig/shims/ripper.rbs +0 -8
data/core/kernel.rbs CHANGED
@@ -12,266 +12,147 @@
12
12
  #
13
13
  # Module Kernel provides methods that are useful for:
14
14
  #
15
- # * [Converting](#module-Kernel-label-Converting)
16
- # * [Querying](#module-Kernel-label-Querying)
17
- # * [Exiting](#module-Kernel-label-Exiting)
18
- # * [Exceptions](#module-Kernel-label-Exceptions)
19
- # * [IO](#module-Kernel-label-IO)
20
- # * [Procs](#module-Kernel-label-Procs)
21
- # * [Tracing](#module-Kernel-label-Tracing)
22
- # * [Subprocesses](#module-Kernel-label-Subprocesses)
23
- # * [Loading](#module-Kernel-label-Loading)
24
- # * [Yielding](#module-Kernel-label-Yielding)
25
- # * [Random Values](#module-Kernel-label-Random+Values)
26
- # * [Other](#module-Kernel-label-Other)
15
+ # * [Converting](rdoc-ref:Kernel@Converting)
16
+ # * [Querying](rdoc-ref:Kernel@Querying)
17
+ # * [Exiting](rdoc-ref:Kernel@Exiting)
18
+ # * [Exceptions](rdoc-ref:Kernel@Exceptions)
19
+ # * [IO](rdoc-ref:Kernel@IO)
20
+ # * [Procs](rdoc-ref:Kernel@Procs)
21
+ # * [Tracing](rdoc-ref:Kernel@Tracing)
22
+ # * [Subprocesses](rdoc-ref:Kernel@Subprocesses)
23
+ # * [Loading](rdoc-ref:Kernel@Loading)
24
+ # * [Yielding](rdoc-ref:Kernel@Yielding)
25
+ # * [Random Values](rdoc-ref:Kernel@Random+Values)
26
+ # * [Other](rdoc-ref:Kernel@Other)
27
27
  #
28
28
  #
29
29
  # ### Converting
30
30
  #
31
- # [#Array](#method-i-Array)
32
- # : Returns an Array based on the given argument.
33
- #
34
- # [#Complex](#method-i-Complex)
35
- # : Returns a Complex based on the given arguments.
36
- #
37
- # [#Float](#method-i-Float)
38
- # : Returns a Float based on the given arguments.
39
- #
40
- # [#Hash](#method-i-Hash)
41
- # : Returns a Hash based on the given argument.
42
- #
43
- # [#Integer](#method-i-Integer)
44
- # : Returns an Integer based on the given arguments.
45
- #
46
- # [#Rational](#method-i-Rational)
47
- # : Returns a Rational based on the given arguments.
48
- #
49
- # [#String](#method-i-String)
50
- # : Returns a String based on the given argument.
51
- #
31
+ # * #Array: Returns an Array based on the given argument.
32
+ # * #Complex: Returns a Complex based on the given arguments.
33
+ # * #Float: Returns a Float based on the given arguments.
34
+ # * #Hash: Returns a Hash based on the given argument.
35
+ # * #Integer: Returns an Integer based on the given arguments.
36
+ # * #Rational: Returns a Rational based on the given arguments.
37
+ # * #String: Returns a String based on the given argument.
52
38
  #
53
39
  #
54
40
  # ### Querying
55
41
  #
56
- # [#__callee__](#method-i-__callee__)
57
- # : Returns the called name of the current method as a symbol.
58
- #
59
- # [#__dir__](#method-i-__dir__)
60
- # : Returns the path to the directory from which the current method is
61
- # called.
62
- #
63
- # [#__method__](#method-i-__method__)
64
- # : Returns the name of the current method as a symbol.
65
- #
66
- # #autoload?
67
- # : Returns the file to be loaded when the given module is referenced.
68
- #
69
- # #binding
70
- # : Returns a Binding for the context at the point of call.
71
- #
72
- # #block_given?
73
- # : Returns `true` if a block was passed to the calling method.
74
- #
75
- # #caller
76
- # : Returns the current execution stack as an array of strings.
77
- #
78
- # #caller_locations
79
- # : Returns the current execution stack as an array of
80
- # Thread::Backtrace::Location objects.
81
- #
82
- # #class
83
- # : Returns the class of `self`.
84
- #
85
- # #frozen?
86
- # : Returns whether `self` is frozen.
87
- #
88
- # #global_variables
89
- # : Returns an array of global variables as symbols.
90
- #
91
- # #local_variables
92
- # : Returns an array of local variables as symbols.
93
- #
94
- # #test
95
- # : Performs specified tests on the given single file or pair of files.
96
- #
42
+ # * #__callee__: Returns the called name of the current method as a symbol.
43
+ # * #__dir__: Returns the path to the directory from which the current method
44
+ # is called.
45
+ # * #__method__: Returns the name of the current method as a symbol.
46
+ # * #autoload?: Returns the file to be loaded when the given module is
47
+ # referenced.
48
+ # * #binding: Returns a Binding for the context at the point of call.
49
+ # * #block_given?: Returns `true` if a block was passed to the calling method.
50
+ # * #caller: Returns the current execution stack as an array of strings.
51
+ # * #caller_locations: Returns the current execution stack as an array of
52
+ # Thread::Backtrace::Location objects.
53
+ # * #class: Returns the class of `self`.
54
+ # * #frozen?: Returns whether `self` is frozen.
55
+ # * #global_variables: Returns an array of global variables as symbols.
56
+ # * #local_variables: Returns an array of local variables as symbols.
57
+ # * #test: Performs specified tests on the given single file or pair of files.
97
58
  #
98
59
  #
99
60
  # ### Exiting
100
61
  #
101
- # #abort
102
- # : Exits the current process after printing the given arguments.
103
- #
104
- # #at_exit
105
- # : Executes the given block when the process exits.
106
- #
107
- # #exit
108
- # : Exits the current process after calling any registered `at_exit`
109
- # handlers.
110
- #
111
- # #exit!
112
- # : Exits the current process without calling any registered `at_exit`
113
- # handlers.
114
- #
62
+ # * #abort: Exits the current process after printing the given arguments.
63
+ # * #at_exit: Executes the given block when the process exits.
64
+ # * #exit: Exits the current process after calling any registered `at_exit`
65
+ # handlers.
66
+ # * #exit!: Exits the current process without calling any registered `at_exit`
67
+ # handlers.
115
68
  #
116
69
  #
117
70
  # ### Exceptions
118
71
  #
119
- # #catch
120
- # : Executes the given block, possibly catching a thrown object.
121
- #
122
- # #raise (aliased as #fail)
123
- # : Raises an exception based on the given arguments.
124
- #
125
- # #throw
126
- # : Returns from the active catch block waiting for the given tag.
127
- #
72
+ # * #catch: Executes the given block, possibly catching a thrown object.
73
+ # * #raise (aliased as #fail): Raises an exception based on the given
74
+ # arguments.
75
+ # * #throw: Returns from the active catch block waiting for the given tag.
128
76
  #
129
77
  #
130
78
  # ### IO
131
79
  #
132
- # #gets
133
- # : Returns and assigns to `$_` the next line from the current input.
134
- #
135
- # #open
136
- # : Creates an IO object connected to the given stream, file, or
137
- # subprocess.
138
- #
139
- # #p
140
- # : Prints the given objects' inspect output to the standard output.
141
- #
142
- # #pp
143
- # : Prints the given objects in pretty form.
144
- #
145
- # #print
146
- # : Prints the given objects to standard output without a newline.
147
- #
148
- # #printf
149
- # : Prints the string resulting from applying the given format string to
150
- # any additional arguments.
151
- #
152
- # #putc
153
- # : Equivalent to <tt.$stdout.putc(object)</tt> for the given object.
154
- #
155
- # #puts
156
- # : Equivalent to `$stdout.puts(*objects)` for the given objects.
157
- #
158
- # #readline
159
- # : Similar to #gets, but raises an exception at the end of file.
160
- #
161
- # #readlines
162
- # : Returns an array of the remaining lines from the current input.
163
- #
164
- # #select
165
- # : Same as IO.select.
166
- #
80
+ # * ::pp: Prints the given objects in pretty form.
81
+ # * #gets: Returns and assigns to `$_` the next line from the current input.
82
+ # * #open: Creates an IO object connected to the given stream, file, or
83
+ # subprocess.
84
+ # * #p: Prints the given objects' inspect output to the standard output.
85
+ # * #print: Prints the given objects to standard output without a newline.
86
+ # * #printf: Prints the string resulting from applying the given format string
87
+ # to any additional arguments.
88
+ # * #putc: Equivalent to <tt.$stdout.putc(object)</tt> for the given object.
89
+ # * #puts: Equivalent to `$stdout.puts(*objects)` for the given objects.
90
+ # * #readline: Similar to #gets, but raises an exception at the end of file.
91
+ # * #readlines: Returns an array of the remaining lines from the current
92
+ # input.
93
+ # * #select: Same as IO.select.
167
94
  #
168
95
  #
169
96
  # ### Procs
170
97
  #
171
- # #lambda
172
- # : Returns a lambda proc for the given block.
173
- #
174
- # #proc
175
- # : Returns a new Proc; equivalent to Proc.new.
176
- #
98
+ # * #lambda: Returns a lambda proc for the given block.
99
+ # * #proc: Returns a new Proc; equivalent to Proc.new.
177
100
  #
178
101
  #
179
102
  # ### Tracing
180
103
  #
181
- # #set_trace_func
182
- # : Sets the given proc as the handler for tracing, or disables tracing if
183
- # given `nil`.
184
- #
185
- # #trace_var
186
- # : Starts tracing assignments to the given global variable.
187
- #
188
- # #untrace_var
189
- # : Disables tracing of assignments to the given global variable.
190
- #
104
+ # * #set_trace_func: Sets the given proc as the handler for tracing, or
105
+ # disables tracing if given `nil`.
106
+ # * #trace_var: Starts tracing assignments to the given global variable.
107
+ # * #untrace_var: Disables tracing of assignments to the given global
108
+ # variable.
191
109
  #
192
110
  #
193
111
  # ### Subprocesses
194
112
  #
195
- # #`cmd`
196
- # : Returns the standard output of running `cmd` in a subshell.
197
- #
198
- # #exec
199
- # : Replaces current process with a new process.
200
- #
201
- # #fork
202
- # : Forks the current process into two processes.
203
- #
204
- # #spawn
205
- # : Executes the given command and returns its pid without waiting for
206
- # completion.
207
- #
208
- # #system
209
- # : Executes the given command in a subshell.
210
- #
113
+ # * [\`command`](rdoc-ref:Kernel#`): Returns the standard output of running
114
+ # `command` in a subshell.
115
+ # * #exec: Replaces current process with a new process.
116
+ # * #fork: Forks the current process into two processes.
117
+ # * #spawn: Executes the given command and returns its pid without waiting for
118
+ # completion.
119
+ # * #system: Executes the given command in a subshell.
211
120
  #
212
121
  #
213
122
  # ### Loading
214
123
  #
215
- # #autoload
216
- # : Registers the given file to be loaded when the given constant is first
217
- # referenced.
218
- #
219
- # #load
220
- # : Loads the given Ruby file.
221
- #
222
- # #require
223
- # : Loads the given Ruby file unless it has already been loaded.
224
- #
225
- # #require_relative
226
- # : Loads the Ruby file path relative to the calling file, unless it has
227
- # already been loaded.
228
- #
124
+ # * #autoload: Registers the given file to be loaded when the given constant
125
+ # is first referenced.
126
+ # * #load: Loads the given Ruby file.
127
+ # * #require: Loads the given Ruby file unless it has already been loaded.
128
+ # * #require_relative: Loads the Ruby file path relative to the calling file,
129
+ # unless it has already been loaded.
229
130
  #
230
131
  #
231
132
  # ### Yielding
232
133
  #
233
- # #tap
234
- # : Yields `self` to the given block; returns `self`.
235
- #
236
- # #then (aliased as #yield_self)
237
- # : Yields `self` to the block and returns the result of the block.
238
- #
134
+ # * #tap: Yields `self` to the given block; returns `self`.
135
+ # * #then (aliased as #yield_self): Yields `self` to the block and returns the
136
+ # result of the block.
239
137
  #
240
138
  #
241
139
  # ### Random Values
242
140
  #
243
- # #rand
244
- # : Returns a pseudo-random floating point number strictly between 0.0 and
245
- # 1.0.
246
- #
247
- # #srand
248
- # : Seeds the pseudo-random number generator with the given number.
249
- #
141
+ # * #rand: Returns a pseudo-random floating point number strictly between 0.0
142
+ # and 1.0.
143
+ # * #srand: Seeds the pseudo-random number generator with the given number.
250
144
  #
251
145
  #
252
146
  # ### Other
253
147
  #
254
- # #eval
255
- # : Evaluates the given string as Ruby code.
256
- #
257
- # #loop
258
- # : Repeatedly executes the given block.
259
- #
260
- # #sleep
261
- # : Suspends the current thread for the given number of seconds.
262
- #
263
- # #sprintf (aliased as #format)
264
- # : Returns the string resulting from applying the given format string to
265
- # any additional arguments.
266
- #
267
- # #syscall
268
- # : Runs an operating system call.
269
- #
270
- # #trap
271
- # : Specifies the handling of system signals.
272
- #
273
- # #warn
274
- # : Issue a warning based on the given messages and options.
148
+ # * #eval: Evaluates the given string as Ruby code.
149
+ # * #loop: Repeatedly executes the given block.
150
+ # * #sleep: Suspends the current thread for the given number of seconds.
151
+ # * #sprintf (aliased as #format): Returns the string resulting from applying
152
+ # the given format string to any additional arguments.
153
+ # * #syscall: Runs an operating system call.
154
+ # * #trap: Specifies the handling of system signals.
155
+ # * #warn: Issue a warning based on the given messages and options.
275
156
  #
276
157
  %a{annotate:rdoc:source:from=object.c}
277
158
  module Kernel : BasicObject
@@ -508,21 +389,19 @@ module Kernel : BasicObject
508
389
 
509
390
  # <!--
510
391
  # rdoc-file=object.c
511
- # - Array(arg) -> array
392
+ # - Array(object) -> object or new_array
512
393
  # -->
513
- # Returns `arg` as an Array.
394
+ # Returns an array converted from `object`.
395
+ #
396
+ # Tries to convert `object` to an array using `to_ary` first and `to_a` second:
514
397
  #
515
- # First tries to call `to_ary` on `arg`, then `to_a`. If `arg` does not respond
516
- # to `to_ary` or `to_a`, returns an Array of length 1 containing `arg`.
398
+ # Array([0, 1, 2]) # => [0, 1, 2]
399
+ # Array({foo: 0, bar: 1}) # => [[:foo, 0], [:bar, 1]]
400
+ # Array(0..4) # => [0, 1, 2, 3, 4]
517
401
  #
518
- # If `to_ary` or `to_a` returns something other than an Array, raises a
519
- # TypeError.
402
+ # Returns `object` in an array, `[object]`, if `object` cannot be converted:
520
403
  #
521
- # Array(["a", "b"]) #=> ["a", "b"]
522
- # Array(1..5) #=> [1, 2, 3, 4, 5]
523
- # Array(key: :value) #=> [[:key, :value]]
524
- # Array(nil) #=> []
525
- # Array(1) #=> [1]
404
+ # Array(:foo) # => [:foo]
526
405
  #
527
406
  def self?.Array: (NilClass x) -> [ ]
528
407
  | [T] (::Array[T] x) -> ::Array[T]
@@ -589,46 +468,111 @@ module Kernel : BasicObject
589
468
 
590
469
  # <!--
591
470
  # rdoc-file=object.c
592
- # - Hash(arg) -> hash
471
+ # - Hash(object) -> object or new_hash
593
472
  # -->
594
- # Converts *arg* to a Hash by calling *arg*`.to_hash`. Returns an empty Hash
595
- # when *arg* is `nil` or `[]`.
473
+ # Returns a hash converted from `object`.
474
+ #
475
+ # * If `object` is:
476
+ #
477
+ # * A hash, returns `object`.
478
+ # * An empty array or `nil`, returns an empty hash.
479
+ #
596
480
  #
597
- # Hash([]) #=> {}
598
- # Hash(nil) #=> {}
599
- # Hash(key: :value) #=> {:key => :value}
600
- # Hash([1, 2, 3]) #=> TypeError
481
+ # * Otherwise, if `object.to_hash` returns a hash, returns that hash.
482
+ # * Otherwise, returns TypeError.
483
+ #
484
+ #
485
+ # Examples:
486
+ #
487
+ # Hash({foo: 0, bar: 1}) # => {:foo=>0, :bar=>1}
488
+ # Hash(nil) # => {}
489
+ # Hash([]) # => {}
601
490
  #
602
491
  def self?.Hash: [K, V] (Object x) -> ::Hash[K, V]
603
492
 
604
493
  # <!--
605
494
  # rdoc-file=object.c
606
- # - Integer(arg, base=0, exception: true) -> integer or nil
495
+ # - Integer(object, base = 0, exception: true) -> integer or nil
607
496
  # -->
608
- # Converts *arg* to an Integer. Numeric types are converted directly (with
609
- # floating point numbers being truncated). *base* (0, or between 2 and 36) is a
610
- # base for integer string representation. If *arg* is a String, when *base* is
611
- # omitted or equals zero, radix indicators (`0`, `0b`, and `0x`) are honored. In
612
- # any case, strings should consist only of one or more digits, except for that a
613
- # sign, one underscore between two digits, and leading/trailing spaces are
614
- # optional. This behavior is different from that of String#to_i. Non string
615
- # values will be converted by first trying `to_int`, then `to_i`.
616
- #
617
- # Passing `nil` raises a TypeError, while passing a String that does not conform
618
- # with numeric representation raises an ArgumentError. This behavior can be
619
- # altered by passing `exception: false`, in this case a not convertible value
620
- # will return `nil`.
621
- #
622
- # Integer(123.999) #=> 123
623
- # Integer("0x1a") #=> 26
624
- # Integer(Time.new) #=> 1204973019
625
- # Integer("0930", 10) #=> 930
626
- # Integer("111", 2) #=> 7
627
- # Integer(" +1_0 ") #=> 10
628
- # Integer(nil) #=> TypeError: can't convert nil into Integer
629
- # Integer("x") #=> ArgumentError: invalid value for Integer(): "x"
630
- #
631
- # Integer("x", exception: false) #=> nil
497
+ # Returns an integer converted from `object`.
498
+ #
499
+ # Tries to convert `object` to an integer using `to_int` first and `to_i`
500
+ # second; see below for exceptions.
501
+ #
502
+ # With a non-zero `base`, `object` must be a string or convertible to a string.
503
+ #
504
+ # #### numeric objects
505
+ #
506
+ # With integer argument `object` given, returns `object`:
507
+ #
508
+ # Integer(1) # => 1
509
+ # Integer(-1) # => -1
510
+ #
511
+ # With floating-point argument `object` given, returns `object` truncated to an
512
+ # intger:
513
+ #
514
+ # Integer(1.9) # => 1 # Rounds toward zero.
515
+ # Integer(-1.9) # => -1 # Rounds toward zero.
516
+ #
517
+ # #### string objects
518
+ #
519
+ # With string argument `object` and zero `base` given, returns `object`
520
+ # converted to an integer in base 10:
521
+ #
522
+ # Integer('100') # => 100
523
+ # Integer('-100') # => -100
524
+ #
525
+ # With `base` zero, string `object` may contain leading characters to specify
526
+ # the actual base (radix indicator):
527
+ #
528
+ # Integer('0100') # => 64 # Leading '0' specifies base 8.
529
+ # Integer('0b100') # => 4 # Leading '0b', specifies base 2.
530
+ # Integer('0x100') # => 256 # Leading '0x' specifies base 16.
531
+ #
532
+ # With a positive `base` (in range 2..36) given, returns `object` converted to
533
+ # an integer in the given base:
534
+ #
535
+ # Integer('100', 2) # => 4
536
+ # Integer('100', 8) # => 64
537
+ # Integer('-100', 16) # => -256
538
+ #
539
+ # With a negative `base` (in range -36..-2) given, returns `object` converted to
540
+ # an integer in the radix indicator if exists or `-base`:
541
+ #
542
+ # Integer('0x100', -2) # => 256
543
+ # Integer('100', -2) # => 4
544
+ # Integer('0b100', -8) # => 4
545
+ # Integer('100', -8) # => 64
546
+ # Integer('0o100', -10) # => 64
547
+ # Integer('100', -10) # => 100
548
+ #
549
+ # `base` -1 is equal the -10 case.
550
+ #
551
+ # When converting strings, surrounding whitespace and embedded underscores are
552
+ # allowed and ignored:
553
+ #
554
+ # Integer(' 100 ') # => 100
555
+ # Integer('-1_0_0', 16) # => -256
556
+ #
557
+ # #### other classes
558
+ #
559
+ # Examples with `object` of various other classes:
560
+ #
561
+ # Integer(Rational(9, 10)) # => 0 # Rounds toward zero.
562
+ # Integer(Complex(2, 0)) # => 2 # Imaginary part must be zero.
563
+ # Integer(Time.now) # => 1650974042
564
+ #
565
+ # #### keywords
566
+ #
567
+ # With optional keyword argument `exception` given as `true` (the default):
568
+ #
569
+ # * Raises TypeError if `object` does not respond to `to_int` or `to_i`.
570
+ # * Raises TypeError if `object` is `nil`.
571
+ # * Raise ArgumentError if `object` is an invalid string.
572
+ #
573
+ #
574
+ # With `exception` given as `false`, an exception of any kind is suppressed and
575
+ # `nil` is returned.
632
576
  #
633
577
  def self?.Integer: (Numeric | String arg, ?exception: bool exception) -> Integer
634
578
  | (String arg, ?Integer base, ?exception: bool exception) -> Integer
@@ -674,15 +618,17 @@ module Kernel : BasicObject
674
618
 
675
619
  # <!--
676
620
  # rdoc-file=object.c
677
- # - String(arg) -> string
621
+ # - String(object) -> object or new_string
678
622
  # -->
679
- # Returns *arg* as a String.
623
+ # Returns a string converted from `object`.
624
+ #
625
+ # Tries to convert `object` to a string using `to_str` first and `to_s` second:
680
626
  #
681
- # First tries to call its `to_str` method, then its `to_s` method.
627
+ # String([0, 1, 2]) # => "[0, 1, 2]"
628
+ # String(0..5) # => "0..5"
629
+ # String({foo: 0, bar: 1}) # => "{:foo=>0, :bar=>1}"
682
630
  #
683
- # String(self) #=> "main"
684
- # String(self.class) #=> "Object"
685
- # String(123456) #=> "123456"
631
+ # Raises `TypeError` if `object` cannot be converted to a string.
686
632
  #
687
633
  def self?.String: (_ToStr | _ToS x) -> String
688
634
 
@@ -717,15 +663,22 @@ module Kernel : BasicObject
717
663
 
718
664
  # <!--
719
665
  # rdoc-file=io.c
720
- # - `cmd` -> string
666
+ # - `command` -> string
721
667
  # -->
722
- # Returns the standard output of running *cmd* in a subshell. The built-in
723
- # syntax `%x{...}` uses this method. Sets `$?` to the process status.
668
+ # Returns the `$stdout` output from running `command` in a subshell; sets global
669
+ # variable `$?` to the process status.
670
+ #
671
+ # This method has potential security vulnerabilities if called with untrusted
672
+ # input; see [Command Injection](rdoc-ref:command_injection.rdoc).
673
+ #
674
+ # Examples:
724
675
  #
725
- # `date` #=> "Wed Apr 9 08:56:30 CDT 2003\n"
726
- # `ls testdir`.split[1] #=> "main.rb"
727
- # `echo oops && exit 99` #=> "oops\n"
728
- # $?.exitstatus #=> 99
676
+ # $ `date` # => "Wed Apr 9 08:56:30 CDT 2003\n"
677
+ # $ `echo oops && exit 99` # => "oops\n"
678
+ # $ $? # => #<Process::Status: pid 17088 exit 99>
679
+ # $ $?.status # => 99>
680
+ #
681
+ # The built-in syntax `%x{...}` uses this method.
729
682
  #
730
683
  def self?.`: (String arg0) -> String
731
684
 
@@ -763,12 +716,16 @@ module Kernel : BasicObject
763
716
 
764
717
  # <!--
765
718
  # rdoc-file=load.c
766
- # - autoload(module, filename) -> nil
719
+ # - autoload(const, filename) -> nil
767
720
  # -->
768
- # Registers *filename* to be loaded (using Kernel::require) the first time that
769
- # *module* (which may be a String or a symbol) is accessed.
721
+ # Registers _filename_ to be loaded (using Kernel::require)
722
+ # the first time that _const_ (which may be a String or
723
+ # a symbol) is accessed.
724
+ #
725
+ # autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
770
726
  #
771
- # autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
727
+ # If *const* is defined as autoload, the file name to be loaded is replaced with
728
+ # *filename*. If *const* is defined but not as autoload, does nothing.
772
729
  #
773
730
  def self?.autoload: (String | Symbol _module, String filename) -> NilClass
774
731
 
@@ -905,512 +862,25 @@ module Kernel : BasicObject
905
862
  alias self.raise self.fail
906
863
 
907
864
  # <!-- rdoc-file=object.c -->
908
- # Returns the string resulting from applying *format_string* to any additional
909
- # arguments. Within the format string, any characters other than format
910
- # sequences are copied to the result.
911
- #
912
- # The syntax of a format sequence is as follows.
913
- #
914
- # %[flags][width][.precision]type
915
- #
916
- # A format sequence consists of a percent sign, followed by optional flags,
917
- # width, and precision indicators, then terminated with a field type character.
918
- # The field type controls how the corresponding `sprintf` argument is to be
919
- # interpreted, while the flags modify that interpretation.
920
- #
921
- # The field type characters are:
922
- #
923
- # Field | Integer Format
924
- # ------+--------------------------------------------------------------
925
- # b | Convert argument as a binary number.
926
- # | Negative numbers will be displayed as a two's complement
927
- # | prefixed with `..1'.
928
- # B | Equivalent to `b', but uses an uppercase 0B for prefix
929
- # | in the alternative format by #.
930
- # d | Convert argument as a decimal number.
931
- # i | Identical to `d'.
932
- # o | Convert argument as an octal number.
933
- # | Negative numbers will be displayed as a two's complement
934
- # | prefixed with `..7'.
935
- # u | Identical to `d'.
936
- # x | Convert argument as a hexadecimal number.
937
- # | Negative numbers will be displayed as a two's complement
938
- # | prefixed with `..f' (representing an infinite string of
939
- # | leading 'ff's).
940
- # X | Equivalent to `x', but uses uppercase letters.
941
- #
942
- # Field | Float Format
943
- # ------+--------------------------------------------------------------
944
- # e | Convert floating point argument into exponential notation
945
- # | with one digit before the decimal point as [-]d.dddddde[+-]dd.
946
- # | The precision specifies the number of digits after the decimal
947
- # | point (defaulting to six).
948
- # E | Equivalent to `e', but uses an uppercase E to indicate
949
- # | the exponent.
950
- # f | Convert floating point argument as [-]ddd.dddddd,
951
- # | where the precision specifies the number of digits after
952
- # | the decimal point.
953
- # g | Convert a floating point number using exponential form
954
- # | if the exponent is less than -4 or greater than or
955
- # | equal to the precision, or in dd.dddd form otherwise.
956
- # | The precision specifies the number of significant digits.
957
- # G | Equivalent to `g', but use an uppercase `E' in exponent form.
958
- # a | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
959
- # | which is consisted from optional sign, "0x", fraction part
960
- # | as hexadecimal, "p", and exponential part as decimal.
961
- # A | Equivalent to `a', but use uppercase `X' and `P'.
962
- #
963
- # Field | Other Format
964
- # ------+--------------------------------------------------------------
965
- # c | Argument is the numeric code for a single character or
966
- # | a single character string itself.
967
- # p | The valuing of argument.inspect.
968
- # s | Argument is a string to be substituted. If the format
969
- # | sequence contains a precision, at most that many characters
970
- # | will be copied.
971
- # % | A percent sign itself will be displayed. No argument taken.
972
- #
973
- # The flags modifies the behavior of the formats. The flag characters are:
974
- #
975
- # Flag | Applies to | Meaning
976
- # ---------+---------------+-----------------------------------------
977
- # space | bBdiouxX | Leave a space at the start of
978
- # | aAeEfgG | non-negative numbers.
979
- # | (numeric fmt) | For `o', `x', `X', `b' and `B', use
980
- # | | a minus sign with absolute value for
981
- # | | negative values.
982
- # ---------+---------------+-----------------------------------------
983
- # (digit)$ | all | Specifies the absolute argument number
984
- # | | for this field. Absolute and relative
985
- # | | argument numbers cannot be mixed in a
986
- # | | sprintf string.
987
- # ---------+---------------+-----------------------------------------
988
- # # | bBoxX | Use an alternative format.
989
- # | aAeEfgG | For the conversions `o', increase the precision
990
- # | | until the first digit will be `0' if
991
- # | | it is not formatted as complements.
992
- # | | For the conversions `x', `X', `b' and `B'
993
- # | | on non-zero, prefix the result with ``0x'',
994
- # | | ``0X'', ``0b'' and ``0B'', respectively.
995
- # | | For `a', `A', `e', `E', `f', `g', and 'G',
996
- # | | force a decimal point to be added,
997
- # | | even if no digits follow.
998
- # | | For `g' and 'G', do not remove trailing zeros.
999
- # ---------+---------------+-----------------------------------------
1000
- # + | bBdiouxX | Add a leading plus sign to non-negative
1001
- # | aAeEfgG | numbers.
1002
- # | (numeric fmt) | For `o', `x', `X', `b' and `B', use
1003
- # | | a minus sign with absolute value for
1004
- # | | negative values.
1005
- # ---------+---------------+-----------------------------------------
1006
- # - | all | Left-justify the result of this conversion.
1007
- # ---------+---------------+-----------------------------------------
1008
- # 0 (zero) | bBdiouxX | Pad with zeros, not spaces.
1009
- # | aAeEfgG | For `o', `x', `X', `b' and `B', radix-1
1010
- # | (numeric fmt) | is used for negative numbers formatted as
1011
- # | | complements.
1012
- # ---------+---------------+-----------------------------------------
1013
- # * | all | Use the next argument as the field width.
1014
- # | | If negative, left-justify the result. If the
1015
- # | | asterisk is followed by a number and a dollar
1016
- # | | sign, use the indicated argument as the width.
1017
- #
1018
- # Examples of flags:
1019
- #
1020
- # # `+' and space flag specifies the sign of non-negative numbers.
1021
- # sprintf("%d", 123) #=> "123"
1022
- # sprintf("%+d", 123) #=> "+123"
1023
- # sprintf("% d", 123) #=> " 123"
1024
- #
1025
- # # `#' flag for `o' increases number of digits to show `0'.
1026
- # # `+' and space flag changes format of negative numbers.
1027
- # sprintf("%o", 123) #=> "173"
1028
- # sprintf("%#o", 123) #=> "0173"
1029
- # sprintf("%+o", -123) #=> "-173"
1030
- # sprintf("%o", -123) #=> "..7605"
1031
- # sprintf("%#o", -123) #=> "..7605"
1032
- #
1033
- # # `#' flag for `x' add a prefix `0x' for non-zero numbers.
1034
- # # `+' and space flag disables complements for negative numbers.
1035
- # sprintf("%x", 123) #=> "7b"
1036
- # sprintf("%#x", 123) #=> "0x7b"
1037
- # sprintf("%+x", -123) #=> "-7b"
1038
- # sprintf("%x", -123) #=> "..f85"
1039
- # sprintf("%#x", -123) #=> "0x..f85"
1040
- # sprintf("%#x", 0) #=> "0"
1041
- #
1042
- # # `#' for `X' uses the prefix `0X'.
1043
- # sprintf("%X", 123) #=> "7B"
1044
- # sprintf("%#X", 123) #=> "0X7B"
1045
- #
1046
- # # `#' flag for `b' add a prefix `0b' for non-zero numbers.
1047
- # # `+' and space flag disables complements for negative numbers.
1048
- # sprintf("%b", 123) #=> "1111011"
1049
- # sprintf("%#b", 123) #=> "0b1111011"
1050
- # sprintf("%+b", -123) #=> "-1111011"
1051
- # sprintf("%b", -123) #=> "..10000101"
1052
- # sprintf("%#b", -123) #=> "0b..10000101"
1053
- # sprintf("%#b", 0) #=> "0"
1054
- #
1055
- # # `#' for `B' uses the prefix `0B'.
1056
- # sprintf("%B", 123) #=> "1111011"
1057
- # sprintf("%#B", 123) #=> "0B1111011"
1058
- #
1059
- # # `#' for `e' forces to show the decimal point.
1060
- # sprintf("%.0e", 1) #=> "1e+00"
1061
- # sprintf("%#.0e", 1) #=> "1.e+00"
1062
- #
1063
- # # `#' for `f' forces to show the decimal point.
1064
- # sprintf("%.0f", 1234) #=> "1234"
1065
- # sprintf("%#.0f", 1234) #=> "1234."
1066
- #
1067
- # # `#' for `g' forces to show the decimal point.
1068
- # # It also disables stripping lowest zeros.
1069
- # sprintf("%g", 123.4) #=> "123.4"
1070
- # sprintf("%#g", 123.4) #=> "123.400"
1071
- # sprintf("%g", 123456) #=> "123456"
1072
- # sprintf("%#g", 123456) #=> "123456."
1073
- #
1074
- # The field width is an optional integer, followed optionally by a period and a
1075
- # precision. The width specifies the minimum number of characters that will be
1076
- # written to the result for this field.
1077
- #
1078
- # Examples of width:
1079
- #
1080
- # # padding is done by spaces, width=20
1081
- # # 0 or radix-1. <------------------>
1082
- # sprintf("%20d", 123) #=> " 123"
1083
- # sprintf("%+20d", 123) #=> " +123"
1084
- # sprintf("%020d", 123) #=> "00000000000000000123"
1085
- # sprintf("%+020d", 123) #=> "+0000000000000000123"
1086
- # sprintf("% 020d", 123) #=> " 0000000000000000123"
1087
- # sprintf("%-20d", 123) #=> "123 "
1088
- # sprintf("%-+20d", 123) #=> "+123 "
1089
- # sprintf("%- 20d", 123) #=> " 123 "
1090
- # sprintf("%020x", -123) #=> "..ffffffffffffffff85"
1091
- #
1092
- # For numeric fields, the precision controls the number of decimal places
1093
- # displayed. For string fields, the precision determines the maximum number of
1094
- # characters to be copied from the string. (Thus, the format sequence `%10.10s`
1095
- # will always contribute exactly ten characters to the result.)
1096
- #
1097
- # Examples of precisions:
1098
- #
1099
- # # precision for `d', 'o', 'x' and 'b' is
1100
- # # minimum number of digits <------>
1101
- # sprintf("%20.8d", 123) #=> " 00000123"
1102
- # sprintf("%20.8o", 123) #=> " 00000173"
1103
- # sprintf("%20.8x", 123) #=> " 0000007b"
1104
- # sprintf("%20.8b", 123) #=> " 01111011"
1105
- # sprintf("%20.8d", -123) #=> " -00000123"
1106
- # sprintf("%20.8o", -123) #=> " ..777605"
1107
- # sprintf("%20.8x", -123) #=> " ..ffff85"
1108
- # sprintf("%20.8b", -11) #=> " ..110101"
1109
- #
1110
- # # "0x" and "0b" for `#x' and `#b' is not counted for
1111
- # # precision but "0" for `#o' is counted. <------>
1112
- # sprintf("%#20.8d", 123) #=> " 00000123"
1113
- # sprintf("%#20.8o", 123) #=> " 00000173"
1114
- # sprintf("%#20.8x", 123) #=> " 0x0000007b"
1115
- # sprintf("%#20.8b", 123) #=> " 0b01111011"
1116
- # sprintf("%#20.8d", -123) #=> " -00000123"
1117
- # sprintf("%#20.8o", -123) #=> " ..777605"
1118
- # sprintf("%#20.8x", -123) #=> " 0x..ffff85"
1119
- # sprintf("%#20.8b", -11) #=> " 0b..110101"
1120
- #
1121
- # # precision for `e' is number of
1122
- # # digits after the decimal point <------>
1123
- # sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
1124
- #
1125
- # # precision for `f' is number of
1126
- # # digits after the decimal point <------>
1127
- # sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
1128
- #
1129
- # # precision for `g' is number of
1130
- # # significant digits <------->
1131
- # sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
1132
- #
1133
- # # <------->
1134
- # sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
1135
- #
1136
- # # precision for `s' is
1137
- # # maximum number of characters <------>
1138
- # sprintf("%20.8s", "string test") #=> " string t"
1139
- #
1140
- # Examples:
1141
- #
1142
- # sprintf("%d %04x", 123, 123) #=> "123 007b"
1143
- # sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
1144
- # sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
1145
- # sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
1146
- # sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
1147
- # sprintf("%u", -123) #=> "-123"
865
+ # Returns the string resulting from formatting `objects` into `format_string`.
1148
866
  #
1149
- # For more complex formatting, Ruby supports a reference by name. %<name>s style
1150
- # uses format style, but %{name} style doesn't.
867
+ # For details on `format_string`, see [Format
868
+ # Specifications](rdoc-ref:format_specifications.rdoc).
1151
869
  #
1152
- # Examples:
1153
- # sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
1154
- # #=> 1 : 2.000000
1155
- # sprintf("%{foo}f", { :foo => 1 })
1156
- # # => "1f"
870
+ # Kernel#format is an alias for Kernel#sprintf.
1157
871
  #
1158
872
  def self?.format: (String format, *untyped args) -> String
1159
873
 
1160
874
  # <!--
1161
875
  # rdoc-file=object.c
1162
- # - format(format_string [, arguments...] ) -> string
1163
- # - sprintf(format_string [, arguments...] ) -> string
876
+ # - sprintf(format_string *objects) -> string
1164
877
  # -->
1165
- # Returns the string resulting from applying *format_string* to any additional
1166
- # arguments. Within the format string, any characters other than format
1167
- # sequences are copied to the result.
1168
- #
1169
- # The syntax of a format sequence is as follows.
1170
- #
1171
- # %[flags][width][.precision]type
1172
- #
1173
- # A format sequence consists of a percent sign, followed by optional flags,
1174
- # width, and precision indicators, then terminated with a field type character.
1175
- # The field type controls how the corresponding `sprintf` argument is to be
1176
- # interpreted, while the flags modify that interpretation.
1177
- #
1178
- # The field type characters are:
1179
- #
1180
- # Field | Integer Format
1181
- # ------+--------------------------------------------------------------
1182
- # b | Convert argument as a binary number.
1183
- # | Negative numbers will be displayed as a two's complement
1184
- # | prefixed with `..1'.
1185
- # B | Equivalent to `b', but uses an uppercase 0B for prefix
1186
- # | in the alternative format by #.
1187
- # d | Convert argument as a decimal number.
1188
- # i | Identical to `d'.
1189
- # o | Convert argument as an octal number.
1190
- # | Negative numbers will be displayed as a two's complement
1191
- # | prefixed with `..7'.
1192
- # u | Identical to `d'.
1193
- # x | Convert argument as a hexadecimal number.
1194
- # | Negative numbers will be displayed as a two's complement
1195
- # | prefixed with `..f' (representing an infinite string of
1196
- # | leading 'ff's).
1197
- # X | Equivalent to `x', but uses uppercase letters.
1198
- #
1199
- # Field | Float Format
1200
- # ------+--------------------------------------------------------------
1201
- # e | Convert floating point argument into exponential notation
1202
- # | with one digit before the decimal point as [-]d.dddddde[+-]dd.
1203
- # | The precision specifies the number of digits after the decimal
1204
- # | point (defaulting to six).
1205
- # E | Equivalent to `e', but uses an uppercase E to indicate
1206
- # | the exponent.
1207
- # f | Convert floating point argument as [-]ddd.dddddd,
1208
- # | where the precision specifies the number of digits after
1209
- # | the decimal point.
1210
- # g | Convert a floating point number using exponential form
1211
- # | if the exponent is less than -4 or greater than or
1212
- # | equal to the precision, or in dd.dddd form otherwise.
1213
- # | The precision specifies the number of significant digits.
1214
- # G | Equivalent to `g', but use an uppercase `E' in exponent form.
1215
- # a | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
1216
- # | which is consisted from optional sign, "0x", fraction part
1217
- # | as hexadecimal, "p", and exponential part as decimal.
1218
- # A | Equivalent to `a', but use uppercase `X' and `P'.
1219
- #
1220
- # Field | Other Format
1221
- # ------+--------------------------------------------------------------
1222
- # c | Argument is the numeric code for a single character or
1223
- # | a single character string itself.
1224
- # p | The valuing of argument.inspect.
1225
- # s | Argument is a string to be substituted. If the format
1226
- # | sequence contains a precision, at most that many characters
1227
- # | will be copied.
1228
- # % | A percent sign itself will be displayed. No argument taken.
1229
- #
1230
- # The flags modifies the behavior of the formats. The flag characters are:
1231
- #
1232
- # Flag | Applies to | Meaning
1233
- # ---------+---------------+-----------------------------------------
1234
- # space | bBdiouxX | Leave a space at the start of
1235
- # | aAeEfgG | non-negative numbers.
1236
- # | (numeric fmt) | For `o', `x', `X', `b' and `B', use
1237
- # | | a minus sign with absolute value for
1238
- # | | negative values.
1239
- # ---------+---------------+-----------------------------------------
1240
- # (digit)$ | all | Specifies the absolute argument number
1241
- # | | for this field. Absolute and relative
1242
- # | | argument numbers cannot be mixed in a
1243
- # | | sprintf string.
1244
- # ---------+---------------+-----------------------------------------
1245
- # # | bBoxX | Use an alternative format.
1246
- # | aAeEfgG | For the conversions `o', increase the precision
1247
- # | | until the first digit will be `0' if
1248
- # | | it is not formatted as complements.
1249
- # | | For the conversions `x', `X', `b' and `B'
1250
- # | | on non-zero, prefix the result with ``0x'',
1251
- # | | ``0X'', ``0b'' and ``0B'', respectively.
1252
- # | | For `a', `A', `e', `E', `f', `g', and 'G',
1253
- # | | force a decimal point to be added,
1254
- # | | even if no digits follow.
1255
- # | | For `g' and 'G', do not remove trailing zeros.
1256
- # ---------+---------------+-----------------------------------------
1257
- # + | bBdiouxX | Add a leading plus sign to non-negative
1258
- # | aAeEfgG | numbers.
1259
- # | (numeric fmt) | For `o', `x', `X', `b' and `B', use
1260
- # | | a minus sign with absolute value for
1261
- # | | negative values.
1262
- # ---------+---------------+-----------------------------------------
1263
- # - | all | Left-justify the result of this conversion.
1264
- # ---------+---------------+-----------------------------------------
1265
- # 0 (zero) | bBdiouxX | Pad with zeros, not spaces.
1266
- # | aAeEfgG | For `o', `x', `X', `b' and `B', radix-1
1267
- # | (numeric fmt) | is used for negative numbers formatted as
1268
- # | | complements.
1269
- # ---------+---------------+-----------------------------------------
1270
- # * | all | Use the next argument as the field width.
1271
- # | | If negative, left-justify the result. If the
1272
- # | | asterisk is followed by a number and a dollar
1273
- # | | sign, use the indicated argument as the width.
1274
- #
1275
- # Examples of flags:
1276
- #
1277
- # # `+' and space flag specifies the sign of non-negative numbers.
1278
- # sprintf("%d", 123) #=> "123"
1279
- # sprintf("%+d", 123) #=> "+123"
1280
- # sprintf("% d", 123) #=> " 123"
1281
- #
1282
- # # `#' flag for `o' increases number of digits to show `0'.
1283
- # # `+' and space flag changes format of negative numbers.
1284
- # sprintf("%o", 123) #=> "173"
1285
- # sprintf("%#o", 123) #=> "0173"
1286
- # sprintf("%+o", -123) #=> "-173"
1287
- # sprintf("%o", -123) #=> "..7605"
1288
- # sprintf("%#o", -123) #=> "..7605"
1289
- #
1290
- # # `#' flag for `x' add a prefix `0x' for non-zero numbers.
1291
- # # `+' and space flag disables complements for negative numbers.
1292
- # sprintf("%x", 123) #=> "7b"
1293
- # sprintf("%#x", 123) #=> "0x7b"
1294
- # sprintf("%+x", -123) #=> "-7b"
1295
- # sprintf("%x", -123) #=> "..f85"
1296
- # sprintf("%#x", -123) #=> "0x..f85"
1297
- # sprintf("%#x", 0) #=> "0"
1298
- #
1299
- # # `#' for `X' uses the prefix `0X'.
1300
- # sprintf("%X", 123) #=> "7B"
1301
- # sprintf("%#X", 123) #=> "0X7B"
1302
- #
1303
- # # `#' flag for `b' add a prefix `0b' for non-zero numbers.
1304
- # # `+' and space flag disables complements for negative numbers.
1305
- # sprintf("%b", 123) #=> "1111011"
1306
- # sprintf("%#b", 123) #=> "0b1111011"
1307
- # sprintf("%+b", -123) #=> "-1111011"
1308
- # sprintf("%b", -123) #=> "..10000101"
1309
- # sprintf("%#b", -123) #=> "0b..10000101"
1310
- # sprintf("%#b", 0) #=> "0"
1311
- #
1312
- # # `#' for `B' uses the prefix `0B'.
1313
- # sprintf("%B", 123) #=> "1111011"
1314
- # sprintf("%#B", 123) #=> "0B1111011"
1315
- #
1316
- # # `#' for `e' forces to show the decimal point.
1317
- # sprintf("%.0e", 1) #=> "1e+00"
1318
- # sprintf("%#.0e", 1) #=> "1.e+00"
1319
- #
1320
- # # `#' for `f' forces to show the decimal point.
1321
- # sprintf("%.0f", 1234) #=> "1234"
1322
- # sprintf("%#.0f", 1234) #=> "1234."
1323
- #
1324
- # # `#' for `g' forces to show the decimal point.
1325
- # # It also disables stripping lowest zeros.
1326
- # sprintf("%g", 123.4) #=> "123.4"
1327
- # sprintf("%#g", 123.4) #=> "123.400"
1328
- # sprintf("%g", 123456) #=> "123456"
1329
- # sprintf("%#g", 123456) #=> "123456."
1330
- #
1331
- # The field width is an optional integer, followed optionally by a period and a
1332
- # precision. The width specifies the minimum number of characters that will be
1333
- # written to the result for this field.
1334
- #
1335
- # Examples of width:
1336
- #
1337
- # # padding is done by spaces, width=20
1338
- # # 0 or radix-1. <------------------>
1339
- # sprintf("%20d", 123) #=> " 123"
1340
- # sprintf("%+20d", 123) #=> " +123"
1341
- # sprintf("%020d", 123) #=> "00000000000000000123"
1342
- # sprintf("%+020d", 123) #=> "+0000000000000000123"
1343
- # sprintf("% 020d", 123) #=> " 0000000000000000123"
1344
- # sprintf("%-20d", 123) #=> "123 "
1345
- # sprintf("%-+20d", 123) #=> "+123 "
1346
- # sprintf("%- 20d", 123) #=> " 123 "
1347
- # sprintf("%020x", -123) #=> "..ffffffffffffffff85"
1348
- #
1349
- # For numeric fields, the precision controls the number of decimal places
1350
- # displayed. For string fields, the precision determines the maximum number of
1351
- # characters to be copied from the string. (Thus, the format sequence `%10.10s`
1352
- # will always contribute exactly ten characters to the result.)
1353
- #
1354
- # Examples of precisions:
1355
- #
1356
- # # precision for `d', 'o', 'x' and 'b' is
1357
- # # minimum number of digits <------>
1358
- # sprintf("%20.8d", 123) #=> " 00000123"
1359
- # sprintf("%20.8o", 123) #=> " 00000173"
1360
- # sprintf("%20.8x", 123) #=> " 0000007b"
1361
- # sprintf("%20.8b", 123) #=> " 01111011"
1362
- # sprintf("%20.8d", -123) #=> " -00000123"
1363
- # sprintf("%20.8o", -123) #=> " ..777605"
1364
- # sprintf("%20.8x", -123) #=> " ..ffff85"
1365
- # sprintf("%20.8b", -11) #=> " ..110101"
1366
- #
1367
- # # "0x" and "0b" for `#x' and `#b' is not counted for
1368
- # # precision but "0" for `#o' is counted. <------>
1369
- # sprintf("%#20.8d", 123) #=> " 00000123"
1370
- # sprintf("%#20.8o", 123) #=> " 00000173"
1371
- # sprintf("%#20.8x", 123) #=> " 0x0000007b"
1372
- # sprintf("%#20.8b", 123) #=> " 0b01111011"
1373
- # sprintf("%#20.8d", -123) #=> " -00000123"
1374
- # sprintf("%#20.8o", -123) #=> " ..777605"
1375
- # sprintf("%#20.8x", -123) #=> " 0x..ffff85"
1376
- # sprintf("%#20.8b", -11) #=> " 0b..110101"
1377
- #
1378
- # # precision for `e' is number of
1379
- # # digits after the decimal point <------>
1380
- # sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
1381
- #
1382
- # # precision for `f' is number of
1383
- # # digits after the decimal point <------>
1384
- # sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
1385
- #
1386
- # # precision for `g' is number of
1387
- # # significant digits <------->
1388
- # sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
1389
- #
1390
- # # <------->
1391
- # sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
1392
- #
1393
- # # precision for `s' is
1394
- # # maximum number of characters <------>
1395
- # sprintf("%20.8s", "string test") #=> " string t"
878
+ # Returns the string resulting from formatting `objects` into `format_string`.
1396
879
  #
1397
- # Examples:
1398
- #
1399
- # sprintf("%d %04x", 123, 123) #=> "123 007b"
1400
- # sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
1401
- # sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
1402
- # sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
1403
- # sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
1404
- # sprintf("%u", -123) #=> "-123"
1405
- #
1406
- # For more complex formatting, Ruby supports a reference by name. %<name>s style
1407
- # uses format style, but %{name} style doesn't.
880
+ # For details on `format_string`, see [Format
881
+ # Specifications](rdoc-ref:format_specifications.rdoc).
1408
882
  #
1409
- # Examples:
1410
- # sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
1411
- # #=> 1 : 2.000000
1412
- # sprintf("%{foo}f", { :foo => 1 })
1413
- # # => "1f"
883
+ # Kernel#format is an alias for Kernel#sprintf.
1414
884
  #
1415
885
  alias sprintf format
1416
886
 
@@ -1462,7 +932,7 @@ module Kernel : BasicObject
1462
932
 
1463
933
  # <!--
1464
934
  # rdoc-file=load.c
1465
- # - load(filename, wrap=false) -> true
935
+ # - load(file, wrap = false)
1466
936
  # -->
1467
937
  # Loads and executes the Ruby program in the file *filename*.
1468
938
  #
@@ -1501,7 +971,7 @@ module Kernel : BasicObject
1501
971
  # loop do
1502
972
  # print "Input: "
1503
973
  # line = gets
1504
- # break if !line or line =~ /^qQ/
974
+ # break if !line or line =~ /^q/i
1505
975
  # # ...
1506
976
  # end
1507
977
  #
@@ -1523,134 +993,183 @@ module Kernel : BasicObject
1523
993
 
1524
994
  # <!--
1525
995
  # rdoc-file=io.c
1526
- # - open(path [, mode [, perm]] [, opt]) -> io or nil
1527
- # - open(path [, mode [, perm]] [, opt]) {|io| block } -> obj
996
+ # - open(path, mode = 'r', perm = 0666, **opts) -> io or nil
997
+ # - open(path, mode = 'r', perm = 0666, **opts) {|io| ... } -> obj
1528
998
  # -->
1529
999
  # Creates an IO object connected to the given stream, file, or subprocess.
1530
1000
  #
1531
- # If `path` does not start with a pipe character (`|`), treat it as the name of
1532
- # a file to open using the specified mode (defaulting to "r").
1533
- #
1534
- # The `mode` is either a string or an integer. If it is an integer, it must be
1535
- # bitwise-or of open(2) flags, such as File::RDWR or File::EXCL. If it is a
1536
- # string, it is either "fmode", "fmode:ext_enc", or "fmode:ext_enc:int_enc".
1537
- #
1538
- # See the documentation of IO.new for full documentation of the `mode` string
1539
- # directives.
1001
+ # Required string argument `path` determines which of the following occurs:
1540
1002
  #
1541
- # If a file is being created, its initial permissions may be set using the
1542
- # `perm` parameter. See File.new and the open(2) and chmod(2) man pages for a
1543
- # description of permissions.
1003
+ # * The file at the specified `path` is opened.
1004
+ # * The process forks.
1005
+ # * A subprocess is created.
1544
1006
  #
1545
- # If a block is specified, it will be invoked with the IO object as a parameter,
1546
- # and the IO will be automatically closed when the block terminates. The call
1547
- # returns the value of the block.
1548
1007
  #
1549
- # If `path` starts with a pipe character (`"|"`), a subprocess is created,
1550
- # connected to the caller by a pair of pipes. The returned IO object may be
1551
- # used to write to the standard input and read from the standard output of this
1552
- # subprocess.
1008
+ # Each of these is detailed below.
1553
1009
  #
1554
- # If the command following the pipe is a single minus sign (`"|-"`), Ruby forks,
1555
- # and this subprocess is connected to the parent. If the command is not `"-"`,
1556
- # the subprocess runs the command. Note that the command may be processed by
1557
- # shell if it contains shell metacharacters.
1010
+ # **File Opened**
1558
1011
  #
1559
- # When the subprocess is Ruby (opened via `"|-"`), the `open` call returns
1560
- # `nil`. If a block is associated with the open call, that block will run twice
1561
- # --- once in the parent and once in the child.
1012
+ # If `path` does *not* start with a pipe character (`'|'`), a file stream is
1013
+ # opened with `File.open(path, mode, perm, **opts)`.
1562
1014
  #
1563
- # The block parameter will be an IO object in the parent and `nil` in the child.
1564
- # The parent's `IO` object will be connected to the child's $stdin and $stdout.
1565
- # The subprocess will be terminated at the end of the block.
1015
+ # With no block given, file stream is returned:
1566
1016
  #
1567
- # ### Examples
1017
+ # open('t.txt') # => #<File:t.txt>
1568
1018
  #
1569
- # Reading from "testfile":
1019
+ # With a block given, calls the block with the open file stream, then closes the
1020
+ # stream:
1570
1021
  #
1571
- # open("testfile") do |f|
1572
- # print f.gets
1573
- # end
1574
- #
1575
- # Produces:
1022
+ # open('t.txt') {|f| p f } # => #<File:t.txt (closed)>
1576
1023
  #
1577
- # This is line one
1024
+ # Output:
1578
1025
  #
1579
- # Open a subprocess and read its output:
1026
+ # #<File:t.txt>
1580
1027
  #
1581
- # cmd = open("|date")
1582
- # print cmd.gets
1583
- # cmd.close
1028
+ # See File.open for details.
1584
1029
  #
1585
- # Produces:
1030
+ # **Process Forked**
1586
1031
  #
1587
- # Wed Apr 9 08:56:31 CDT 2003
1032
+ # If `path` is the 2-character string `'|-'`, the process forks and the child
1033
+ # process is connected to the parent.
1588
1034
  #
1589
- # Open a subprocess running the same Ruby program:
1035
+ # With no block given:
1590
1036
  #
1591
- # f = open("|-", "w+")
1592
- # if f.nil?
1593
- # puts "in Child"
1594
- # exit
1037
+ # io = open('|-')
1038
+ # if io
1039
+ # $stderr.puts "In parent, child pid is #{io.pid}."
1595
1040
  # else
1596
- # puts "Got: #{f.gets}"
1041
+ # $stderr.puts "In child, pid is #{$$}."
1597
1042
  # end
1598
1043
  #
1599
- # Produces:
1044
+ # Output:
1600
1045
  #
1601
- # Got: in Child
1046
+ # In parent, child pid is 27903.
1047
+ # In child, pid is 27903.
1602
1048
  #
1603
- # Open a subprocess using a block to receive the IO object:
1049
+ # With a block given:
1604
1050
  #
1605
- # open "|-" do |f|
1606
- # if f then
1607
- # # parent process
1608
- # puts "Got: #{f.gets}"
1051
+ # open('|-') do |io|
1052
+ # if io
1053
+ # $stderr.puts "In parent, child pid is #{io.pid}."
1609
1054
  # else
1610
- # # child process
1611
- # puts "in Child"
1055
+ # $stderr.puts "In child, pid is #{$$}."
1612
1056
  # end
1613
1057
  # end
1614
1058
  #
1615
- # Produces:
1059
+ # Output:
1060
+ #
1061
+ # In parent, child pid is 28427.
1062
+ # In child, pid is 28427.
1063
+ #
1064
+ # **Subprocess Created**
1065
+ #
1066
+ # If `path` is `'|command'` (`'command' != '-'`), a new subprocess runs the
1067
+ # command; its open stream is returned. Note that the command may be processed
1068
+ # by shell if it contains shell metacharacters.
1069
+ #
1070
+ # With no block given:
1071
+ #
1072
+ # io = open('|echo "Hi!"') # => #<IO:fd 12>
1073
+ # print io.gets
1074
+ # io.close
1075
+ #
1076
+ # Output:
1077
+ #
1078
+ # "Hi!"
1079
+ #
1080
+ # With a block given, calls the block with the stream, then closes the stream:
1081
+ #
1082
+ # open('|echo "Hi!"') do |io|
1083
+ # print io.gets
1084
+ # end
1085
+ #
1086
+ # Output:
1616
1087
  #
1617
- # Got: in Child
1088
+ # "Hi!"
1618
1089
  #
1619
1090
  def self?.open: (String name, ?String mode, ?Integer perm) -> IO?
1620
1091
  | [T] (String name, ?String mode, ?Integer perm) { (IO) -> T } -> T
1621
1092
 
1622
1093
  # <!--
1623
1094
  # rdoc-file=io.c
1624
- # - print(obj, ...) -> nil
1095
+ # - print(*objects) -> nil
1625
1096
  # -->
1626
- # Prints each object in turn to `$stdout`. If the output field separator (`$,`)
1627
- # is not `nil`, its contents will appear between each field. If the output
1628
- # record separator (`$\`) is not `nil`, it will be appended to the output. If no
1629
- # arguments are given, prints `$_`. Objects that aren't strings will be
1630
- # converted by calling their `to_s` method.
1097
+ # Equivalent to `$stdout.print(*objects)`, this method is the straightforward
1098
+ # way to write to `$stdout`.
1631
1099
  #
1632
- # print "cat", [1,2,3], 99, "\n"
1633
- # $, = ", "
1634
- # $\ = "\n"
1635
- # print "cat", [1,2,3], 99
1100
+ # Writes the given objects to `$stdout`; returns `nil`. Appends the output
1101
+ # record separator `$OUTPUT_RECORD_SEPARATOR` `$\`), if it is not `nil`.
1102
+ #
1103
+ # With argument `objects` given, for each object:
1104
+ #
1105
+ # * Converts via its method `to_s` if not a string.
1106
+ # * Writes to `stdout`.
1107
+ # * If not the last object, writes the output field separator
1108
+ # `$OUTPUT_FIELD_SEPARATOR` (`$,` if it is not `nil`.
1636
1109
  #
1637
- # *produces:*
1638
1110
  #
1639
- # cat12399
1640
- # cat, 1, 2, 3, 99
1111
+ # With default separators:
1112
+ #
1113
+ # objects = [0, 0.0, Rational(0, 1), Complex(0, 0), :zero, 'zero']
1114
+ # $OUTPUT_RECORD_SEPARATOR
1115
+ # $OUTPUT_FIELD_SEPARATOR
1116
+ # print(*objects)
1117
+ #
1118
+ # Output:
1119
+ #
1120
+ # nil
1121
+ # nil
1122
+ # 00.00/10+0izerozero
1123
+ #
1124
+ # With specified separators:
1125
+ #
1126
+ # $OUTPUT_RECORD_SEPARATOR = "\n"
1127
+ # $OUTPUT_FIELD_SEPARATOR = ','
1128
+ # print(*objects)
1129
+ #
1130
+ # Output:
1131
+ #
1132
+ # 0,0.0,0/1,0+0i,zero,zero
1133
+ #
1134
+ # With no argument given, writes the content of `$_` (which is usually the most
1135
+ # recent user input):
1136
+ #
1137
+ # gets # Sets $_ to the most recent user input.
1138
+ # print # Prints $_.
1641
1139
  #
1642
1140
  def self?.print: (*Kernel args) -> nil
1643
1141
 
1644
1142
  # <!--
1645
1143
  # rdoc-file=io.c
1646
- # - printf(io, string [, obj ... ]) -> nil
1647
- # - printf(string [, obj ... ]) -> nil
1144
+ # - printf(format_string, *objects) -> nil
1145
+ # - printf(io, format_string, *objects) -> nil
1648
1146
  # -->
1649
1147
  # Equivalent to:
1650
- # io.write(sprintf(string, obj, ...))
1651
1148
  #
1652
- # or
1653
- # $stdout.write(sprintf(string, obj, ...))
1149
+ # io.write(sprintf(format_string, *objects))
1150
+ #
1151
+ # For details on `format_string`, see [Format
1152
+ # Specifications](rdoc-ref:format_specifications.rdoc).
1153
+ #
1154
+ # With the single argument `format_string`, formats `objects` into the string,
1155
+ # then writes the formatted string to $stdout:
1156
+ #
1157
+ # printf('%4.4d %10s %2.2f', 24, 24, 24.0)
1158
+ #
1159
+ # Output (on $stdout):
1160
+ #
1161
+ # 0024 24 24.00#
1162
+ #
1163
+ # With arguments `io` and `format_string`, formats `objects` into the string,
1164
+ # then writes the formatted string to `io`:
1165
+ #
1166
+ # printf($stderr, '%4.4d %10s %2.2f', 24, 24, 24.0)
1167
+ #
1168
+ # Output (on $stderr):
1169
+ #
1170
+ # 0024 24 24.00# => nil
1171
+ #
1172
+ # With no arguments, does nothing.
1654
1173
  #
1655
1174
  def self?.printf: (IO arg0, String arg1, *untyped args) -> nil
1656
1175
  | (String arg1, *untyped args) -> nil
@@ -1675,44 +1194,51 @@ module Kernel : BasicObject
1675
1194
 
1676
1195
  # <!--
1677
1196
  # rdoc-file=io.c
1678
- # - putc(int) -> int
1197
+ # - putc(int) -> int
1679
1198
  # -->
1680
1199
  # Equivalent to:
1681
1200
  #
1682
1201
  # $stdout.putc(int)
1683
1202
  #
1684
- # Refer to the documentation for IO#putc for important information regarding
1685
- # multi-byte characters.
1203
+ # See IO#putc for important information regarding multi-byte characters.
1686
1204
  #
1687
1205
  def self?.putc: (Integer arg0) -> Integer
1688
1206
  | (String arg0) -> String
1689
1207
 
1690
1208
  # <!--
1691
1209
  # rdoc-file=io.c
1692
- # - puts(obj, ...) -> nil
1210
+ # - puts(*objects) -> nil
1693
1211
  # -->
1694
1212
  # Equivalent to
1695
1213
  #
1696
- # $stdout.puts(obj, ...)
1214
+ # $stdout.puts(objects)
1697
1215
  #
1698
1216
  def self?.puts: (*untyped arg0) -> NilClass
1699
1217
 
1700
1218
  # <!--
1701
1219
  # rdoc-file=io.c
1702
- # - p(obj) -> obj
1703
- # - p(obj1, obj2, ...) -> [obj, ...]
1704
- # - p() -> nil
1220
+ # - p(object) -> obj
1221
+ # - p(*objects) -> array of objects
1222
+ # - p -> nil
1705
1223
  # -->
1706
- # For each object, directly writes *obj*.`inspect` followed by a newline to the
1707
- # program's standard output.
1224
+ # For each object `obj`, executes:
1708
1225
  #
1709
- # S = Struct.new(:name, :state)
1710
- # s = S['dave', 'TX']
1711
- # p s
1226
+ # $stdout.write(obj.inspect, "\n")
1712
1227
  #
1713
- # *produces:*
1228
+ # With one object given, returns the object; with multiple objects given,
1229
+ # returns an array containing the objects; with no object given, returns `nil`.
1230
+ #
1231
+ # Examples:
1232
+ #
1233
+ # r = Range.new(0, 4)
1234
+ # p r # => 0..4
1235
+ # p [r, r, r] # => [0..4, 0..4, 0..4]
1236
+ # p # => nil
1237
+ #
1238
+ # Output:
1714
1239
  #
1715
- # #<S name="dave", state="TX">
1240
+ # 0..4
1241
+ # [0..4, 0..4, 0..4]
1716
1242
  #
1717
1243
  def self?.p: [T] (T arg0) -> T
1718
1244
  | (*untyped arg0) -> Array[untyped]
@@ -1744,7 +1270,7 @@ module Kernel : BasicObject
1744
1270
  # rand(100) #=> 12
1745
1271
  #
1746
1272
  # When `max` is a Range, `rand` returns a random number where
1747
- # range.member?(number) == true.
1273
+ # `range.member?(number) == true`.
1748
1274
  #
1749
1275
  # Negative or floating point values for `max` are allowed, but may give
1750
1276
  # surprising results.
@@ -1765,92 +1291,142 @@ module Kernel : BasicObject
1765
1291
 
1766
1292
  # <!--
1767
1293
  # rdoc-file=io.c
1768
- # - readline(sep=$/) -> string
1769
- # - readline(limit) -> string
1770
- # - readline(sep, limit) -> string
1294
+ # - readline(sep = $/, chomp: false) -> string
1295
+ # - readline(limit, chomp: false) -> string
1296
+ # - readline(sep, limit, chomp: false) -> string
1771
1297
  # -->
1772
- # Equivalent to Kernel::gets, except `readline` raises `EOFError` at end of
1773
- # file.
1298
+ # Equivalent to method Kernel#gets, except that it raises an exception if called
1299
+ # at end-of-stream:
1300
+ #
1301
+ # $ cat t.txt | ruby -e "p readlines; readline"
1302
+ # ["First line\n", "Second line\n", "\n", "Fourth line\n", "Fifth line\n"]
1303
+ # in `readline': end of file reached (EOFError)
1304
+ #
1305
+ # Optional keyword argument `chomp` specifies whether line separators are to be
1306
+ # omitted.
1774
1307
  #
1775
1308
  def self?.readline: (?String arg0, ?Integer arg1) -> String
1776
1309
 
1777
1310
  # <!--
1778
1311
  # rdoc-file=io.c
1779
- # - readlines(sep=$/) -> array
1780
- # - readlines(limit) -> array
1781
- # - readlines(sep, limit) -> array
1312
+ # - readlines(sep = $/, chomp: false, **enc_opts) -> array
1313
+ # - readlines(limit, chomp: false, **enc_opts) -> array
1314
+ # - readlines(sep, limit, chomp: false, **enc_opts) -> array
1782
1315
  # -->
1783
- # Returns an array containing the lines returned by calling `Kernel.gets(*sep*)`
1784
- # until the end of file.
1316
+ # Returns an array containing the lines returned by calling Kernel#gets until
1317
+ # the end-of-stream is reached; (see [Line IO](rdoc-ref:IO@Line+IO)).
1318
+ #
1319
+ # With only string argument `sep` given, returns the remaining lines as
1320
+ # determined by line separator `sep`, or `nil` if none; see [Line
1321
+ # Separator](rdoc-ref:IO@Line+Separator):
1322
+ #
1323
+ # # Default separator.
1324
+ # $ cat t.txt | ruby -e "p readlines"
1325
+ # ["First line\n", "Second line\n", "\n", "Fourth line\n", "Fifth line\n"]
1326
+ #
1327
+ # # Specified separator.
1328
+ # $ cat t.txt | ruby -e "p readlines 'li'"
1329
+ # ["First li", "ne\nSecond li", "ne\n\nFourth li", "ne\nFifth li", "ne\n"]
1330
+ #
1331
+ # # Get-all separator.
1332
+ # $ cat t.txt | ruby -e "p readlines nil"
1333
+ # ["First line\nSecond line\n\nFourth line\nFifth line\n"]
1334
+ #
1335
+ # # Get-paragraph separator.
1336
+ # $ cat t.txt | ruby -e "p readlines ''"
1337
+ # ["First line\nSecond line\n\n", "Fourth line\nFifth line\n"]
1338
+ #
1339
+ # With only integer argument `limit` given, limits the number of bytes in the
1340
+ # line; see [Line Limit](rdoc-ref:IO@Line+Limit):
1341
+ #
1342
+ # $cat t.txt | ruby -e "p readlines 10"
1343
+ # ["First line", "\n", "Second lin", "e\n", "\n", "Fourth lin", "e\n", "Fifth line", "\n"]
1344
+ #
1345
+ # $cat t.txt | ruby -e "p readlines 11"
1346
+ # ["First line\n", "Second line", "\n", "\n", "Fourth line", "\n", "Fifth line\n"]
1347
+ #
1348
+ # $cat t.txt | ruby -e "p readlines 12"
1349
+ # ["First line\n", "Second line\n", "\n", "Fourth line\n", "Fifth line\n"]
1350
+ #
1351
+ # With arguments `sep` and `limit` given, combines the two behaviors; see [Line
1352
+ # Separator and Line Limit](rdoc-ref:IO@Line+Separator+and+Line+Limit).
1353
+ #
1354
+ # Optional keyword argument `chomp` specifies whether line separators are to be
1355
+ # omitted:
1356
+ #
1357
+ # $ cat t.txt | ruby -e "p readlines(chomp: true)"
1358
+ # ["First line", "Second line", "", "Fourth line", "Fifth line"]
1359
+ #
1360
+ # Optional keyword arguments `enc_opts` specify encoding options; see [Encoding
1361
+ # options](rdoc-ref:encodings.rdoc@Encoding+Options).
1785
1362
  #
1786
1363
  def self?.readlines: (?String arg0, ?Integer arg1) -> ::Array[String]
1787
1364
 
1788
1365
  # <!--
1789
- # rdoc-file=load.c
1790
- # - require(name) -> true or false
1366
+ # rdoc-file=lib/rubygems/core_ext/kernel_require.rb
1367
+ # - require(path)
1791
1368
  # -->
1792
- # Loads the given `name`, returning `true` if successful and `false` if the
1793
- # feature is already loaded.
1794
- #
1795
- # If the filename neither resolves to an absolute path nor starts with './' or
1796
- # '../', the file will be searched for in the library directories listed in
1797
- # `$LOAD_PATH` (`$:`). If the filename starts with './' or '../', resolution is
1798
- # based on Dir.pwd.
1799
- #
1800
- # If the filename has the extension ".rb", it is loaded as a source file; if the
1801
- # extension is ".so", ".o", or ".dll", or the default shared library extension
1802
- # on the current platform, Ruby loads the shared library as a Ruby extension.
1803
- # Otherwise, Ruby tries adding ".rb", ".so", and so on to the name until found.
1804
- # If the file named cannot be found, a LoadError will be raised.
1369
+ # When RubyGems is required, Kernel#require is replaced with our own which is
1370
+ # capable of loading gems on demand.
1805
1371
  #
1806
- # For Ruby extensions the filename given may use any shared library extension.
1807
- # For example, on Linux the socket extension is "socket.so" and `require
1808
- # 'socket.dll'` will load the socket extension.
1372
+ # When you call `require 'x'`, this is what happens:
1373
+ # * If the file can be loaded from the existing Ruby loadpath, it is.
1374
+ # * Otherwise, installed gems are searched for a file that matches. If it's
1375
+ # found in gem 'y', that gem is activated (added to the loadpath).
1809
1376
  #
1810
- # The absolute path of the loaded file is added to `$LOADED_FEATURES` (`$"`). A
1811
- # file will not be loaded again if its path already appears in `$"`. For
1812
- # example, `require 'a'; require './a'` will not load `a.rb` again.
1813
1377
  #
1814
- # require "my-library.rb"
1815
- # require "db-driver"
1816
- #
1817
- # Any constants or globals within the loaded source file will be available in
1818
- # the calling program's global namespace. However, local variables will not be
1819
- # propagated to the loading environment.
1378
+ # The normal `require` functionality of returning false if that file has already
1379
+ # been loaded is preserved.
1820
1380
  #
1821
1381
  def self?.require: (String path) -> bool
1822
1382
 
1823
1383
  # <!--
1824
1384
  # rdoc-file=load.c
1825
- # - require_relative(string) -> true or false
1385
+ # - require_relative(file)
1826
1386
  # -->
1827
- # Ruby tries to load the library named *string* relative to the requiring file's
1828
- # path. If the file's path cannot be determined a LoadError is raised. If a
1829
- # file is loaded `true` is returned and false otherwise.
1387
+ # Ruby tries to load the library named *string* relative to the directory
1388
+ # containing the requiring file. If the file does not exist a LoadError is
1389
+ # raised. Returns `true` if the file was loaded and `false` if the file was
1390
+ # already loaded before.
1830
1391
  #
1831
1392
  def self?.require_relative: (String feature) -> bool
1832
1393
 
1833
1394
  # <!--
1834
1395
  # rdoc-file=io.c
1835
- # - IO.select(read_array [, write_array [, error_array [, timeout]]]) -> array or nil
1396
+ # - IO.select(read_ios, write_ios = [], error_ios = [], timeout = nil) -> array or nil
1836
1397
  # -->
1837
- # Calls select(2) system call. It monitors given arrays of IO objects, waits
1838
- # until one or more of IO objects are ready for reading, are ready for writing,
1839
- # and have pending exceptions respectively, and returns an array that contains
1840
- # arrays of those IO objects. It will return `nil` if optional *timeout* value
1841
- # is given and no IO object is ready in *timeout* seconds.
1398
+ # Invokes system call [select(2)](https://linux.die.net/man/2/select), which
1399
+ # monitors multiple file descriptors, waiting until one or more of the file
1400
+ # descriptors becomes ready for some class of I/O operation.
1401
+ #
1402
+ # Not implemented on all platforms.
1403
+ #
1404
+ # Each of the arguments `read_ios`, `write_ios`, and `error_ios` is an array of
1405
+ # IO objects.
1406
+ #
1407
+ # Argument `timeout` is an integer timeout interval in seconds.
1408
+ #
1409
+ # The method monitors the IO objects given in all three arrays, waiting for some
1410
+ # to be ready; returns a 3-element array whose elements are:
1411
+ #
1412
+ # * An array of the objects in `read_ios` that are ready for reading.
1413
+ # * An array of the objects in `write_ios` that are ready for writing.
1414
+ # * An array of the objects in `error_ios` have pending exceptions.
1415
+ #
1416
+ #
1417
+ # If no object becomes ready within the given `timeout`, `nil` is returned.
1842
1418
  #
1843
1419
  # IO.select peeks the buffer of IO objects for testing readability. If the IO
1844
1420
  # buffer is not empty, IO.select immediately notifies readability. This "peek"
1845
1421
  # only happens for IO objects. It does not happen for IO-like objects such as
1846
1422
  # OpenSSL::SSL::SSLSocket.
1847
1423
  #
1848
- # The best way to use IO.select is invoking it after nonblocking methods such as
1849
- # #read_nonblock, #write_nonblock, etc. The methods raise an exception which is
1850
- # extended by IO::WaitReadable or IO::WaitWritable. The modules notify how the
1851
- # caller should wait with IO.select. If IO::WaitReadable is raised, the caller
1852
- # should wait for reading. If IO::WaitWritable is raised, the caller should
1853
- # wait for writing.
1424
+ # The best way to use IO.select is invoking it after non-blocking methods such
1425
+ # as #read_nonblock, #write_nonblock, etc. The methods raise an exception which
1426
+ # is extended by IO::WaitReadable or IO::WaitWritable. The modules notify how
1427
+ # the caller should wait with IO.select. If IO::WaitReadable is raised, the
1428
+ # caller should wait for reading. If IO::WaitWritable is raised, the caller
1429
+ # should wait for writing.
1854
1430
  #
1855
1431
  # So, blocking read (#readpartial) can be emulated using #read_nonblock and
1856
1432
  # IO.select as follows:
@@ -1865,7 +1441,7 @@ module Kernel : BasicObject
1865
1441
  # retry
1866
1442
  # end
1867
1443
  #
1868
- # Especially, the combination of nonblocking methods and IO.select is preferred
1444
+ # Especially, the combination of non-blocking methods and IO.select is preferred
1869
1445
  # for IO like objects such as OpenSSL::SSL::SSLSocket. It has #to_io method to
1870
1446
  # return underlying IO object. IO.select calls #to_io to obtain the file
1871
1447
  # descriptor to wait.
@@ -1891,13 +1467,13 @@ module Kernel : BasicObject
1891
1467
  # blocking. So, the caller should wait for ready for writability as above
1892
1468
  # example.
1893
1469
  #
1894
- # The combination of nonblocking methods and IO.select is also useful for
1470
+ # The combination of non-blocking methods and IO.select is also useful for
1895
1471
  # streams such as tty, pipe socket socket when multiple processes read from a
1896
1472
  # stream.
1897
1473
  #
1898
1474
  # Finally, Linux kernel developers don't guarantee that readability of select(2)
1899
- # means readability of following read(2) even for a single process. See
1900
- # select(2) manual on GNU/Linux system.
1475
+ # means readability of following read(2) even for a single process; see
1476
+ # [select(2)](https://linux.die.net/man/2/select)
1901
1477
  #
1902
1478
  # Invoking IO.select before IO#readpartial works well as usual. However it is
1903
1479
  # not the best way to use IO.select.
@@ -1924,18 +1500,7 @@ module Kernel : BasicObject
1924
1500
  # string = string.byteslice(written..-1)
1925
1501
  # end
1926
1502
  #
1927
- # ### Parameters
1928
- # read_array
1929
- # : an array of IO objects that wait until ready for read
1930
- # write_array
1931
- # : an array of IO objects that wait until ready for write
1932
- # error_array
1933
- # : an array of IO objects that wait for exceptions
1934
- # timeout
1935
- # : a numeric value in second
1936
- #
1937
- #
1938
- # ### Example
1503
+ # Example:
1939
1504
  #
1940
1505
  # rp, wp = IO.pipe
1941
1506
  # mesg = "ping "
@@ -1957,7 +1522,7 @@ module Kernel : BasicObject
1957
1522
  # end
1958
1523
  # }
1959
1524
  #
1960
- # *produces:*
1525
+ # Output:
1961
1526
  #
1962
1527
  # ping pong
1963
1528
  # ping pong
@@ -1992,31 +1557,27 @@ module Kernel : BasicObject
1992
1557
 
1993
1558
  # <!--
1994
1559
  # rdoc-file=io.c
1995
- # - syscall(num [, args...]) -> integer
1560
+ # - syscall(integer_callno, *arguments) -> integer
1996
1561
  # -->
1997
- # Calls the operating system function identified by *num* and returns the result
1998
- # of the function or raises SystemCallError if it failed.
1562
+ # Invokes Posix system call [syscall(2)](https://linux.die.net/man/2/syscall),
1563
+ # which calls a specified function.
1999
1564
  #
2000
- # Arguments for the function can follow *num*. They must be either `String`
2001
- # objects or `Integer` objects. A `String` object is passed as a pointer to the
2002
- # byte sequence. An `Integer` object is passed as an integer whose bit size is
2003
- # the same as a pointer. Up to nine parameters may be passed.
1565
+ # Calls the operating system function identified by `integer_callno`; returns
1566
+ # the result of the function or raises SystemCallError if it failed. The effect
1567
+ # of the call is platform-dependent. The arguments and returned value are
1568
+ # platform-dependent.
2004
1569
  #
2005
- # The function identified by *num* is system dependent. On some Unix systems,
2006
- # the numbers may be obtained from a header file called `syscall.h`.
1570
+ # For each of `arguments`: if it is an integer, it is passed directly; if it is
1571
+ # a string, it is interpreted as a binary sequence of bytes. There may be as
1572
+ # many as nine such arguments.
2007
1573
  #
2008
- # syscall 4, 1, "hello\n", 6 # '4' is write(2) on our box
1574
+ # Arguments `integer_callno` and `argument`, as well as the returned value, are
1575
+ # platform-dependent.
2009
1576
  #
2010
- # *produces:*
1577
+ # Note: Method `syscall` is essentially unsafe and unportable. The DL (Fiddle)
1578
+ # library is preferred for safer and a bit more portable programming.
2011
1579
  #
2012
- # hello
2013
- #
2014
- # Calling `syscall` on a platform which does not have any way to an arbitrary
2015
- # system function just fails with NotImplementedError.
2016
- #
2017
- # **Note:** `syscall` is essentially unsafe and unportable. Feel free to shoot
2018
- # your foot. The DL (Fiddle) library is preferred for safer and a bit more
2019
- # portable programming.
1580
+ # Not implemented on all platforms.
2020
1581
  #
2021
1582
  def self?.syscall: (Integer num, *untyped args) -> untyped
2022
1583
 
@@ -2037,8 +1598,7 @@ module Kernel : BasicObject
2037
1598
  # "d" | boolean | True if file1 exists and is a directory
2038
1599
  # "e" | boolean | True if file1 exists
2039
1600
  # "f" | boolean | True if file1 exists and is a regular file
2040
- # "g" | boolean | True if file1 has the \CF{setgid} bit
2041
- # | | set (false under NT)
1601
+ # "g" | boolean | True if file1 has the setgid bit set
2042
1602
  # "G" | boolean | True if file1 exists and has a group
2043
1603
  # | | ownership equal to the caller's group
2044
1604
  # "k" | boolean | True if file1 exists and has the sticky bit set
@@ -2149,7 +1709,7 @@ module Kernel : BasicObject
2149
1709
  # `exec(cmdname, arg1, ...)`
2150
1710
  # : command name and one or more arguments (no shell)
2151
1711
  # `exec([cmdname, argv0], arg1, ...)`
2152
- # : command name, [argv](0) and zero or more arguments (no shell)
1712
+ # : command name, `argv[0]` and zero or more arguments (no shell)
2153
1713
  #
2154
1714
  #
2155
1715
  # In the first form, the string is taken as a command line that is subject to
@@ -2163,11 +1723,12 @@ module Kernel : BasicObject
2163
1723
  # If the string from the first form (`exec("command")`) follows these simple
2164
1724
  # rules:
2165
1725
  #
2166
- # * no meta characters
2167
- # * not starting with shell reserved word or special built-in
2168
- # * Ruby invokes the command directly without shell
1726
+ # * no meta characters,
1727
+ # * not starting with shell reserved word or special built-in,
2169
1728
  #
2170
1729
  #
1730
+ # Ruby invokes the command directly without shell.
1731
+ #
2171
1732
  # You can force shell invocation by adding ";" to the string (because ";" is a
2172
1733
  # meta character).
2173
1734
  #
@@ -2469,6 +2030,9 @@ module Kernel : BasicObject
2469
2030
  # -->
2470
2031
  # Executes *command...* in a subshell. *command...* is one of following forms.
2471
2032
  #
2033
+ # This method has potential security vulnerabilities if called with untrusted
2034
+ # input; see [Command Injection](rdoc-ref:command_injection.rdoc).
2035
+ #
2472
2036
  # `commandline`
2473
2037
  # : command line string which is passed to the standard shell
2474
2038
  # `cmdname, arg1, ...`