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

Sign up to get free protection for your applications and to get access to all the features.
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, ...`