rbs 3.8.0.pre.1 → 3.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/ruby.yml +7 -7
- data/.rubocop.yml +7 -0
- data/CHANGELOG.md +30 -0
- data/core/array.rbs +64 -62
- data/core/complex.rbs +1 -1
- data/core/encoding.rbs +0 -26
- data/core/errors.rbs +4 -0
- data/core/exception.rbs +149 -40
- data/core/file.rbs +1 -8
- data/core/gc.rbs +21 -3
- data/core/hash.rbs +2 -2
- data/core/io.rbs +2 -2
- data/core/kernel.rbs +58 -16
- data/core/nil_class.rbs +3 -0
- data/core/numeric.rbs +1 -1
- data/core/proc.rbs +80 -10
- data/core/ractor.rbs +20 -0
- data/core/regexp.rbs +6 -4
- data/core/ruby_vm.rbs +9 -9
- data/core/rubygems/errors.rbs +3 -1
- data/core/rubygems/rubygems.rbs +3 -1
- data/core/string.rbs +132 -130
- data/core/time.rbs +5 -1
- data/core/trace_point.rbs +108 -113
- data/ext/rbs_extension/parser.c +1 -1
- data/lib/rbs/types.rb +2 -1
- data/lib/rbs/version.rb +1 -1
- data/stdlib/date/0/date.rbs +23 -23
- data/stdlib/monitor/0/monitor.rbs +13 -4
- data/stdlib/net-http/0/net-http.rbs +20 -29
- data/stdlib/rdoc/0/rdoc.rbs +12 -6
- data/stdlib/resolv/0/resolv.rbs +5 -1
- data/stdlib/securerandom/0/securerandom.rbs +7 -0
- data/stdlib/socket/0/socket.rbs +9 -28
- data/stdlib/socket/0/tcp_socket.rbs +8 -30
- data/stdlib/tmpdir/0/tmpdir.rbs +2 -2
- metadata +3 -4
data/core/exception.rbs
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
#
|
20
20
|
# * NoMemoryError
|
21
21
|
# * ScriptError
|
22
|
-
# *
|
22
|
+
# * LoadError
|
23
23
|
# * NotImplementedError
|
24
24
|
# * SyntaxError
|
25
25
|
# * SecurityError
|
@@ -51,7 +51,7 @@
|
|
51
51
|
# * ZeroDivisionError
|
52
52
|
# * SystemExit
|
53
53
|
# * SystemStackError
|
54
|
-
# * [fatal](
|
54
|
+
# * [fatal](rdoc-ref:fatal)
|
55
55
|
#
|
56
56
|
class Exception
|
57
57
|
# <!--
|
@@ -99,24 +99,31 @@ class Exception
|
|
99
99
|
# rdoc-file=error.c
|
100
100
|
# - backtrace -> array or nil
|
101
101
|
# -->
|
102
|
-
# Returns
|
103
|
-
#
|
102
|
+
# Returns the backtrace (the list of code locations that led to the exception),
|
103
|
+
# as an array of strings.
|
104
104
|
#
|
105
|
-
#
|
106
|
-
# given by `Exception#backtrace_locations.map {|loc| loc.to_s }`. This is
|
107
|
-
# the normal case, where the backtrace value was stored by Kernel#raise.
|
108
|
-
# * Array of strings: returns that array. This is the unusual case, where the
|
109
|
-
# backtrace value was explicitly stored as an array of strings.
|
110
|
-
# * `nil`: returns `nil`.
|
105
|
+
# Example (assuming the code is stored in the file named `t.rb`):
|
111
106
|
#
|
112
|
-
#
|
107
|
+
# def division(numerator, denominator)
|
108
|
+
# numerator / denominator
|
109
|
+
# end
|
113
110
|
#
|
114
111
|
# begin
|
115
|
-
# 1
|
116
|
-
# rescue =>
|
117
|
-
#
|
112
|
+
# division(1, 0)
|
113
|
+
# rescue => ex
|
114
|
+
# p ex.backtrace
|
115
|
+
# # ["t.rb:2:in 'Integer#/'", "t.rb:2:in 'Object#division'", "t.rb:6:in '<main>'"]
|
116
|
+
# loc = ex.backtrace.first
|
117
|
+
# p loc.class
|
118
|
+
# # String
|
118
119
|
# end
|
119
|
-
#
|
120
|
+
#
|
121
|
+
# The value returned by this method migth be adjusted when raising (see
|
122
|
+
# Kernel#raise), or during intermediate handling by #set_backtrace.
|
123
|
+
#
|
124
|
+
# See also #backtrace_locations that provide the same value, as structured
|
125
|
+
# objects. (Note though that two values might not be consistent with each other
|
126
|
+
# when backtraces are manually adjusted.)
|
120
127
|
#
|
121
128
|
# see [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
122
129
|
#
|
@@ -126,20 +133,37 @@ class Exception
|
|
126
133
|
# rdoc-file=error.c
|
127
134
|
# - backtrace_locations -> array or nil
|
128
135
|
# -->
|
129
|
-
# Returns
|
130
|
-
#
|
136
|
+
# Returns the backtrace (the list of code locations that led to the exception),
|
137
|
+
# as an array of Thread::Backtrace::Location instances.
|
131
138
|
#
|
132
|
-
#
|
133
|
-
# * Array of strings or `nil`: returns `nil`.
|
139
|
+
# Example (assuming the code is stored in the file named `t.rb`):
|
134
140
|
#
|
135
|
-
#
|
141
|
+
# def division(numerator, denominator)
|
142
|
+
# numerator / denominator
|
143
|
+
# end
|
136
144
|
#
|
137
145
|
# begin
|
138
|
-
# 1
|
139
|
-
# rescue =>
|
140
|
-
#
|
146
|
+
# division(1, 0)
|
147
|
+
# rescue => ex
|
148
|
+
# p ex.backtrace_locations
|
149
|
+
# # ["t.rb:2:in 'Integer#/'", "t.rb:2:in 'Object#division'", "t.rb:6:in '<main>'"]
|
150
|
+
# loc = ex.backtrace_locations.first
|
151
|
+
# p loc.class
|
152
|
+
# # Thread::Backtrace::Location
|
153
|
+
# p loc.path
|
154
|
+
# # "t.rb"
|
155
|
+
# p loc.lineno
|
156
|
+
# # 2
|
157
|
+
# p loc.label
|
158
|
+
# # "Integer#/"
|
141
159
|
# end
|
142
|
-
#
|
160
|
+
#
|
161
|
+
# The value returned by this method might be adjusted when raising (see
|
162
|
+
# Kernel#raise), or during intermediate handling by #set_backtrace.
|
163
|
+
#
|
164
|
+
# See also #backtrace that provide the same value as an array of strings. (Note
|
165
|
+
# though that two values might not be consistent with each other when backtraces
|
166
|
+
# are manually adjusted.)
|
143
167
|
#
|
144
168
|
# See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
145
169
|
#
|
@@ -294,15 +318,100 @@ class Exception
|
|
294
318
|
# rdoc-file=error.c
|
295
319
|
# - set_backtrace(value) -> value
|
296
320
|
# -->
|
297
|
-
# Sets the backtrace value for `self`; returns the given
|
321
|
+
# Sets the backtrace value for `self`; returns the given `value`.
|
298
322
|
#
|
299
|
-
#
|
300
|
-
# x.set_backtrace(%w[foo bar baz]) # => ["foo", "bar", "baz"]
|
301
|
-
# x.backtrace # => ["foo", "bar", "baz"]
|
323
|
+
# The `value` might be:
|
302
324
|
#
|
303
|
-
#
|
325
|
+
# * an array of Thread::Backtrace::Location;
|
326
|
+
# * an array of String instances;
|
327
|
+
# * a single String instance; or
|
328
|
+
# * `nil`.
|
329
|
+
#
|
330
|
+
# Using array of Thread::Backtrace::Location is the most consistent option: it
|
331
|
+
# sets both #backtrace and #backtrace_locations. It should be preferred when
|
332
|
+
# possible. The suitable array of locations can be obtained from
|
333
|
+
# Kernel#caller_locations, copied from another error, or just set to the
|
334
|
+
# adjusted result of the current error's #backtrace_locations:
|
335
|
+
#
|
336
|
+
# require 'json'
|
337
|
+
#
|
338
|
+
# def parse_payload(text)
|
339
|
+
# JSON.parse(text) # test.rb, line 4
|
340
|
+
# rescue JSON::ParserError => ex
|
341
|
+
# ex.set_backtrace(ex.backtrace_locations[2...])
|
342
|
+
# raise
|
343
|
+
# end
|
304
344
|
#
|
305
|
-
#
|
345
|
+
# parse_payload('{"wrong: "json"')
|
346
|
+
# # test.rb:4:in 'Object#parse_payload': unexpected token at '{"wrong: "json"' (JSON::ParserError)
|
347
|
+
# #
|
348
|
+
# # An error points to the body of parse_payload method,
|
349
|
+
# # hiding the parts of the backtrace related to the internals
|
350
|
+
# # of the "json" library
|
351
|
+
#
|
352
|
+
# # The error has both #backtace and #backtrace_locations set
|
353
|
+
# # consistently:
|
354
|
+
# begin
|
355
|
+
# parse_payload('{"wrong: "json"')
|
356
|
+
# rescue => ex
|
357
|
+
# p ex.backtrace
|
358
|
+
# # ["test.rb:4:in 'Object#parse_payload'", "test.rb:20:in '<main>'"]
|
359
|
+
# p ex.backtrace_locations
|
360
|
+
# # ["test.rb:4:in 'Object#parse_payload'", "test.rb:20:in '<main>'"]
|
361
|
+
# end
|
362
|
+
#
|
363
|
+
# When the desired stack of locations is not available and should be constructed
|
364
|
+
# from scratch, an array of strings or a singular string can be used. In this
|
365
|
+
# case, only #backtrace is affected:
|
366
|
+
#
|
367
|
+
# def parse_payload(text)
|
368
|
+
# JSON.parse(text)
|
369
|
+
# rescue JSON::ParserError => ex
|
370
|
+
# ex.set_backtrace(["dsl.rb:34", "framework.rb:1"])
|
371
|
+
# # The error have the new value in #backtrace:
|
372
|
+
# p ex.backtrace
|
373
|
+
# # ["dsl.rb:34", "framework.rb:1"]
|
374
|
+
#
|
375
|
+
# # but the original one in #backtrace_locations
|
376
|
+
# p ex.backtrace_locations
|
377
|
+
# # [".../json/common.rb:221:in 'JSON::Ext::Parser.parse'", ...]
|
378
|
+
# end
|
379
|
+
#
|
380
|
+
# parse_payload('{"wrong: "json"')
|
381
|
+
#
|
382
|
+
# Calling #set_backtrace with `nil` clears up #backtrace but doesn't affect
|
383
|
+
# #backtrace_locations:
|
384
|
+
#
|
385
|
+
# def parse_payload(text)
|
386
|
+
# JSON.parse(text)
|
387
|
+
# rescue JSON::ParserError => ex
|
388
|
+
# ex.set_backtrace(nil)
|
389
|
+
# p ex.backtrace
|
390
|
+
# # nil
|
391
|
+
# p ex.backtrace_locations
|
392
|
+
# # [".../json/common.rb:221:in 'JSON::Ext::Parser.parse'", ...]
|
393
|
+
# end
|
394
|
+
#
|
395
|
+
# parse_payload('{"wrong: "json"')
|
396
|
+
#
|
397
|
+
# On reraising of such an exception, both #backtrace and #backtrace_locations is
|
398
|
+
# set to the place of reraising:
|
399
|
+
#
|
400
|
+
# def parse_payload(text)
|
401
|
+
# JSON.parse(text)
|
402
|
+
# rescue JSON::ParserError => ex
|
403
|
+
# ex.set_backtrace(nil)
|
404
|
+
# raise # test.rb, line 7
|
405
|
+
# end
|
406
|
+
#
|
407
|
+
# begin
|
408
|
+
# parse_payload('{"wrong: "json"')
|
409
|
+
# rescue => ex
|
410
|
+
# p ex.backtrace
|
411
|
+
# # ["test.rb:7:in 'Object#parse_payload'", "test.rb:11:in '<main>'"]
|
412
|
+
# p ex.backtrace_locations
|
413
|
+
# # ["test.rb:7:in 'Object#parse_payload'", "test.rb:11:in '<main>'"]
|
414
|
+
# end
|
306
415
|
#
|
307
416
|
# See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
308
417
|
#
|
@@ -358,16 +467,16 @@ class Exception
|
|
358
467
|
# Output:
|
359
468
|
#
|
360
469
|
# "divided by 0"
|
361
|
-
# ["t.rb:3:in
|
362
|
-
# "\tfrom t.rb:3:in
|
363
|
-
# "\tfrom t.rb:10:in
|
364
|
-
# "\tfrom t.rb:11:in
|
365
|
-
# "\tfrom t.rb:12:in
|
366
|
-
# ["t.rb:3:in
|
367
|
-
# "\tfrom t.rb:3:in
|
368
|
-
# "\tfrom t.rb:10:in
|
369
|
-
# "\tfrom t.rb:11:in
|
370
|
-
# "\tfrom t.rb:12:in
|
470
|
+
# ["t.rb:3:in 'Integer#/': divided by 0 (ZeroDivisionError)",
|
471
|
+
# "\tfrom t.rb:3:in 'Object#baz'",
|
472
|
+
# "\tfrom t.rb:10:in 'Object#bar'",
|
473
|
+
# "\tfrom t.rb:11:in 'Object#foo'",
|
474
|
+
# "\tfrom t.rb:12:in '<main>'"]
|
475
|
+
# ["t.rb:3:in 'Integer#/': \e[1mdivided by 0 (\e[1;4mZeroDivisionError\e[m\e[1m)\e[m",
|
476
|
+
# "\tfrom t.rb:3:in 'Object#baz'",
|
477
|
+
# "\tfrom t.rb:10:in 'Object#bar'",
|
478
|
+
# "\tfrom t.rb:11:in 'Object#foo'",
|
479
|
+
# "\tfrom t.rb:12:in '<main>'"]
|
371
480
|
#
|
372
481
|
# An overriding method should be careful with ANSI code enhancements; see
|
373
482
|
# [Messages](rdoc-ref:exceptions.md@Messages).
|
data/core/file.rbs
CHANGED
@@ -1314,7 +1314,7 @@ class File < IO
|
|
1314
1314
|
#
|
1315
1315
|
# File.join("usr", "mail", "gumby") #=> "usr/mail/gumby"
|
1316
1316
|
#
|
1317
|
-
def self.join: (*
|
1317
|
+
def self.join: (*path) -> String
|
1318
1318
|
|
1319
1319
|
# <!--
|
1320
1320
|
# rdoc-file=file.c
|
@@ -2295,43 +2295,36 @@ File::Constants::DSYNC: Integer
|
|
2295
2295
|
File::Constants::EXCL: Integer
|
2296
2296
|
|
2297
2297
|
# <!-- rdoc-file=dir.c -->
|
2298
|
-
# FNM_CASEFOLD
|
2299
2298
|
# [File::FNM_CASEFOLD](rdoc-ref:File::Constants@File-3A-3AFNM_CASEFOLD)
|
2300
2299
|
#
|
2301
2300
|
File::Constants::FNM_CASEFOLD: Integer
|
2302
2301
|
|
2303
2302
|
# <!-- rdoc-file=dir.c -->
|
2304
|
-
# FNM_DOTMATCH
|
2305
2303
|
# [File::FNM_DOTMATCH](rdoc-ref:File::Constants@File-3A-3AFNM_DOTMATCH)
|
2306
2304
|
#
|
2307
2305
|
File::Constants::FNM_DOTMATCH: Integer
|
2308
2306
|
|
2309
2307
|
# <!-- rdoc-file=dir.c -->
|
2310
|
-
# FNM_EXTGLOB
|
2311
2308
|
# [File::FNM_EXTGLOB](rdoc-ref:File::Constants@File-3A-3AFNM_EXTGLOB)
|
2312
2309
|
#
|
2313
2310
|
File::Constants::FNM_EXTGLOB: Integer
|
2314
2311
|
|
2315
2312
|
# <!-- rdoc-file=dir.c -->
|
2316
|
-
# FNM_NOESCAPE
|
2317
2313
|
# [File::FNM_NOESCAPE](rdoc-ref:File::Constants@File-3A-3AFNM_NOESCAPE)
|
2318
2314
|
#
|
2319
2315
|
File::Constants::FNM_NOESCAPE: Integer
|
2320
2316
|
|
2321
2317
|
# <!-- rdoc-file=dir.c -->
|
2322
|
-
# FNM_PATHNAME
|
2323
2318
|
# [File::FNM_PATHNAME](rdoc-ref:File::Constants@File-3A-3AFNM_PATHNAME)
|
2324
2319
|
#
|
2325
2320
|
File::Constants::FNM_PATHNAME: Integer
|
2326
2321
|
|
2327
2322
|
# <!-- rdoc-file=dir.c -->
|
2328
|
-
# FNM_SHORTNAME
|
2329
2323
|
# [File::FNM_SHORTNAME](rdoc-ref:File::Constants@File-3A-3AFNM_SHORTNAME)
|
2330
2324
|
#
|
2331
2325
|
File::Constants::FNM_SHORTNAME: Integer
|
2332
2326
|
|
2333
2327
|
# <!-- rdoc-file=dir.c -->
|
2334
|
-
# FNM_SYSCASE
|
2335
2328
|
# [File::FNM_SYSCASE](rdoc-ref:File::Constants@File-3A-3AFNM_SYSCASE)
|
2336
2329
|
#
|
2337
2330
|
File::Constants::FNM_SYSCASE: Integer
|
data/core/gc.rbs
CHANGED
@@ -167,7 +167,8 @@ module GC
|
|
167
167
|
# Configuration parameters are GC implementation-specific and may change without
|
168
168
|
# notice.
|
169
169
|
#
|
170
|
-
# This method can be called without parameters to retrieve the current config
|
170
|
+
# This method can be called without parameters to retrieve the current config as
|
171
|
+
# a `Hash` with `Symbol` keys.
|
171
172
|
#
|
172
173
|
# This method can also be called with a `Hash` argument to assign values to
|
173
174
|
# valid config keys. Config keys missing from the passed `Hash` will be left
|
@@ -185,7 +186,24 @@ module GC
|
|
185
186
|
#
|
186
187
|
# This method is only expected to work on CRuby.
|
187
188
|
#
|
188
|
-
#
|
189
|
+
# ### GC Implementation independent values
|
190
|
+
#
|
191
|
+
# The `GC.config` hash can also contain keys that are global and read-only.
|
192
|
+
# These keys are not specific to any one GC library implementation and
|
193
|
+
# attempting to write to them will raise `ArgumentError`.
|
194
|
+
#
|
195
|
+
# There is currently only one global, read-only key:
|
196
|
+
#
|
197
|
+
# implementation
|
198
|
+
# : Returns a `String` containing the name of the currently loaded GC library,
|
199
|
+
# if one has been loaded using `RUBY_GC_LIBRARY`, and "default" in all other
|
200
|
+
# cases
|
201
|
+
#
|
202
|
+
#
|
203
|
+
# ### GC Implementation specific values
|
204
|
+
#
|
205
|
+
# GC libraries are expected to document their own configuration. Valid keys for
|
206
|
+
# Ruby's default GC implementation are:
|
189
207
|
#
|
190
208
|
# rgengc_allow_full_mark
|
191
209
|
# : Controls whether the GC is allowed to run a full mark (young & old
|
@@ -569,7 +587,7 @@ module GC
|
|
569
587
|
|
570
588
|
# The type that `GC.compact` and related functions can return.
|
571
589
|
#
|
572
|
-
type compact_info = Hash[:considered | :moved
|
590
|
+
type compact_info = Hash[:considered | :moved | :moved_up | :moved_down, Hash[Symbol, Integer]]
|
573
591
|
|
574
592
|
# <!--
|
575
593
|
# rdoc-file=gc.rb
|
data/core/hash.rbs
CHANGED
@@ -1226,7 +1226,7 @@ class Hash[unchecked out K, unchecked out V] < Object
|
|
1226
1226
|
# Returns a new String containing the hash entries:
|
1227
1227
|
#
|
1228
1228
|
# h = {foo: 0, bar: 1, baz: 2}
|
1229
|
-
# h.inspect # => "{:
|
1229
|
+
# h.inspect # => "{foo: 0, bar: 1, baz: 2}"
|
1230
1230
|
#
|
1231
1231
|
def inspect: () -> String
|
1232
1232
|
|
@@ -1628,7 +1628,7 @@ class Hash[unchecked out K, unchecked out V] < Object
|
|
1628
1628
|
# Returns a new String containing the hash entries:
|
1629
1629
|
#
|
1630
1630
|
# h = {foo: 0, bar: 1, baz: 2}
|
1631
|
-
# h.inspect # => "{:
|
1631
|
+
# h.inspect # => "{foo: 0, bar: 1, baz: 2}"
|
1632
1632
|
#
|
1633
1633
|
alias to_s inspect
|
1634
1634
|
|
data/core/io.rbs
CHANGED
@@ -3104,8 +3104,8 @@ class IO < Object
|
|
3104
3104
|
#
|
3105
3105
|
# Returns an Enumerator if no block is given.
|
3106
3106
|
#
|
3107
|
-
def each_line: (?
|
3108
|
-
| (?
|
3107
|
+
def each_line: (?string sep, ?int limit, ?chomp: boolish) { (String line) -> void } -> self
|
3108
|
+
| (?string sep, ?int limit, ?chomp: boolish) -> ::Enumerator[String, self]
|
3109
3109
|
|
3110
3110
|
# <!--
|
3111
3111
|
# rdoc-file=io.c
|
data/core/kernel.rbs
CHANGED
@@ -675,7 +675,7 @@ module Kernel : BasicObject
|
|
675
675
|
#
|
676
676
|
# String([0, 1, 2]) # => "[0, 1, 2]"
|
677
677
|
# String(0..5) # => "0..5"
|
678
|
-
# String({foo: 0, bar: 1}) # => "{:
|
678
|
+
# String({foo: 0, bar: 1}) # => "{foo: 0, bar: 1}"
|
679
679
|
#
|
680
680
|
# Raises `TypeError` if `object` cannot be converted to a string.
|
681
681
|
#
|
@@ -936,16 +936,37 @@ module Kernel : BasicObject
|
|
936
936
|
#
|
937
937
|
# See [Messages](rdoc-ref:exceptions.md@Messages).
|
938
938
|
#
|
939
|
-
# Argument `backtrace`
|
940
|
-
#
|
941
|
-
#
|
939
|
+
# Argument `backtrace` might be used to modify the backtrace of the new
|
940
|
+
# exception, as reported by Exception#backtrace and
|
941
|
+
# Exception#backtrace_locations; the backtrace must be an array of
|
942
|
+
# Thread::Backtrace::Location, an array of strings, a single string, or `nil`.
|
943
|
+
#
|
944
|
+
# Using the array of Thread::Backtrace::Location instances is the most
|
945
|
+
# consistent option and should be preferred when possible. The necessary value
|
946
|
+
# might be obtained from #caller_locations, or copied from
|
947
|
+
# Exception#backtrace_locations of another error:
|
942
948
|
#
|
943
949
|
# begin
|
944
|
-
#
|
945
|
-
# rescue =>
|
946
|
-
#
|
950
|
+
# do_some_work()
|
951
|
+
# rescue ZeroDivisionError => ex
|
952
|
+
# raise(LogicalError, "You have an error in your math", ex.backtrace_locations)
|
953
|
+
# end
|
954
|
+
#
|
955
|
+
# The ways, both Exception#backtrace and Exception#backtrace_locations of the
|
956
|
+
# raised error are set to the same backtrace.
|
957
|
+
#
|
958
|
+
# When the desired stack of locations is not available and should be constructed
|
959
|
+
# from scratch, an array of strings or a singular string can be used. In this
|
960
|
+
# case, only Exception#backtrace is set:
|
961
|
+
#
|
962
|
+
# begin
|
963
|
+
# raise(StandardError, 'Boom', %w[dsl.rb:3 framework.rb:1])
|
964
|
+
# rescue => ex
|
965
|
+
# p ex.backtrace
|
966
|
+
# # => ["dsl.rb:3", "framework.rb:1"]
|
967
|
+
# p ex.backtrace_locations
|
968
|
+
# # => nil
|
947
969
|
# end
|
948
|
-
# # => ["foo", "bar", "baz"]
|
949
970
|
#
|
950
971
|
# If argument `backtrace` is not given, the backtrace is set according to an
|
951
972
|
# array of Thread::Backtrace::Location objects, as derived from the call stack.
|
@@ -1021,16 +1042,37 @@ module Kernel : BasicObject
|
|
1021
1042
|
#
|
1022
1043
|
# See [Messages](rdoc-ref:exceptions.md@Messages).
|
1023
1044
|
#
|
1024
|
-
# Argument `backtrace`
|
1025
|
-
#
|
1026
|
-
#
|
1045
|
+
# Argument `backtrace` might be used to modify the backtrace of the new
|
1046
|
+
# exception, as reported by Exception#backtrace and
|
1047
|
+
# Exception#backtrace_locations; the backtrace must be an array of
|
1048
|
+
# Thread::Backtrace::Location, an array of strings, a single string, or `nil`.
|
1049
|
+
#
|
1050
|
+
# Using the array of Thread::Backtrace::Location instances is the most
|
1051
|
+
# consistent option and should be preferred when possible. The necessary value
|
1052
|
+
# might be obtained from #caller_locations, or copied from
|
1053
|
+
# Exception#backtrace_locations of another error:
|
1027
1054
|
#
|
1028
1055
|
# begin
|
1029
|
-
#
|
1030
|
-
# rescue =>
|
1031
|
-
#
|
1056
|
+
# do_some_work()
|
1057
|
+
# rescue ZeroDivisionError => ex
|
1058
|
+
# raise(LogicalError, "You have an error in your math", ex.backtrace_locations)
|
1059
|
+
# end
|
1060
|
+
#
|
1061
|
+
# The ways, both Exception#backtrace and Exception#backtrace_locations of the
|
1062
|
+
# raised error are set to the same backtrace.
|
1063
|
+
#
|
1064
|
+
# When the desired stack of locations is not available and should be constructed
|
1065
|
+
# from scratch, an array of strings or a singular string can be used. In this
|
1066
|
+
# case, only Exception#backtrace is set:
|
1067
|
+
#
|
1068
|
+
# begin
|
1069
|
+
# raise(StandardError, 'Boom', %w[dsl.rb:3 framework.rb:1])
|
1070
|
+
# rescue => ex
|
1071
|
+
# p ex.backtrace
|
1072
|
+
# # => ["dsl.rb:3", "framework.rb:1"]
|
1073
|
+
# p ex.backtrace_locations
|
1074
|
+
# # => nil
|
1032
1075
|
# end
|
1033
|
-
# # => ["foo", "bar", "baz"]
|
1034
1076
|
#
|
1035
1077
|
# If argument `backtrace` is not given, the backtrace is set according to an
|
1036
1078
|
# array of Thread::Backtrace::Location objects, as derived from the call stack.
|
@@ -1499,7 +1541,7 @@ module Kernel : BasicObject
|
|
1499
1541
|
# Optional keyword arguments `enc_opts` specify encoding options; see [Encoding
|
1500
1542
|
# options](rdoc-ref:encodings.rdoc@Encoding+Options).
|
1501
1543
|
#
|
1502
|
-
def self?.readlines: (?
|
1544
|
+
def self?.readlines: (?string sep, ?int limit, ?chomp: boolish) -> ::Array[String]
|
1503
1545
|
|
1504
1546
|
# <!--
|
1505
1547
|
# rdoc-file=lib/rubygems/core_ext/kernel_require.rb
|
data/core/nil_class.rbs
CHANGED
data/core/numeric.rbs
CHANGED
@@ -776,7 +776,7 @@ class Numeric
|
|
776
776
|
# Rational(1, 2).to_int # => 0
|
777
777
|
# Rational(2, 1).to_int # => 2
|
778
778
|
# Complex(2, 0).to_int # => 2
|
779
|
-
# Complex(2, 1)
|
779
|
+
# Complex(2, 1).to_int # Raises RangeError (non-zero imaginary part)
|
780
780
|
#
|
781
781
|
def to_int: () -> Integer
|
782
782
|
|
data/core/proc.rbs
CHANGED
@@ -236,19 +236,86 @@
|
|
236
236
|
# Since `return` and `break` exits the block itself in lambdas, lambdas cannot
|
237
237
|
# be orphaned.
|
238
238
|
#
|
239
|
-
# ##
|
239
|
+
# ## Anonymous block parameters
|
240
240
|
#
|
241
|
-
#
|
242
|
-
#
|
241
|
+
# To simplify writing short blocks, Ruby provides two different types of
|
242
|
+
# anonymous parameters: `it` (single parameter) and numbered ones: `_1`, `_2`
|
243
|
+
# and so on.
|
243
244
|
#
|
244
245
|
# # Explicit parameter:
|
245
246
|
# %w[test me please].each { |str| puts str.upcase } # prints TEST, ME, PLEASE
|
246
247
|
# (1..5).map { |i| i**2 } # => [1, 4, 9, 16, 25]
|
247
248
|
#
|
248
|
-
# #
|
249
|
+
# # it:
|
250
|
+
# %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
|
251
|
+
# (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
|
252
|
+
#
|
253
|
+
# # Numbered parameter:
|
249
254
|
# %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
|
250
255
|
# (1..5).map { _1**2 } # => [1, 4, 9, 16, 25]
|
251
256
|
#
|
257
|
+
# ### `it`
|
258
|
+
#
|
259
|
+
# `it` is a name that is available inside a block when no explicit parameters
|
260
|
+
# defined, as shown above.
|
261
|
+
#
|
262
|
+
# %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
|
263
|
+
# (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
|
264
|
+
#
|
265
|
+
# `it` is a "soft keyword": it is not a reserved name, and can be used as a name
|
266
|
+
# for methods and local variables:
|
267
|
+
#
|
268
|
+
# it = 5 # no warnings
|
269
|
+
# def it(&block) # RSpec-like API, no warnings
|
270
|
+
# # ...
|
271
|
+
# end
|
272
|
+
#
|
273
|
+
# `it` can be used as a local variable even in blocks that use it as an implicit
|
274
|
+
# parameter (though this style is obviously confusing):
|
275
|
+
#
|
276
|
+
# [1, 2, 3].each {
|
277
|
+
# # takes a value of implicit parameter "it" and uses it to
|
278
|
+
# # define a local variable with the same name
|
279
|
+
# it = it**2
|
280
|
+
# p it
|
281
|
+
# }
|
282
|
+
#
|
283
|
+
# In a block with explicit parameters defined `it` usage raises an exception:
|
284
|
+
#
|
285
|
+
# [1, 2, 3].each { |x| p it }
|
286
|
+
# # syntax error found (SyntaxError)
|
287
|
+
# # [1, 2, 3].each { |x| p it }
|
288
|
+
# # ^~ `it` is not allowed when an ordinary parameter is defined
|
289
|
+
#
|
290
|
+
# But if a local name (variable or method) is available, it would be used:
|
291
|
+
#
|
292
|
+
# it = 5
|
293
|
+
# [1, 2, 3].each { |x| p it }
|
294
|
+
# # Prints 5, 5, 5
|
295
|
+
#
|
296
|
+
# Blocks using `it` can be nested:
|
297
|
+
#
|
298
|
+
# %w[test me].each { it.each_char { p it } }
|
299
|
+
# # Prints "t", "e", "s", "t", "m", "e"
|
300
|
+
#
|
301
|
+
# Blocks using `it` are considered to have one parameter:
|
302
|
+
#
|
303
|
+
# p = proc { it**2 }
|
304
|
+
# l = lambda { it**2 }
|
305
|
+
# p.parameters # => [[:opt, nil]]
|
306
|
+
# p.arity # => 1
|
307
|
+
# l.parameters # => [[:req]]
|
308
|
+
# l.arity # => 1
|
309
|
+
#
|
310
|
+
# ### Numbered parameters
|
311
|
+
#
|
312
|
+
# Numbered parameters are another way to name block parameters implicitly.
|
313
|
+
# Unlike `it`, numbered parameters allow to refer to several parameters in one
|
314
|
+
# block.
|
315
|
+
#
|
316
|
+
# %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
|
317
|
+
# {a: 100, b: 200}.map { "#{_1} = #{_2}" } # => "a = 100", "b = 200"
|
318
|
+
#
|
252
319
|
# Parameter names from `_1` to `_9` are supported:
|
253
320
|
#
|
254
321
|
# [10, 20, 30].zip([40, 50, 60], [70, 80, 90]).map { _1 + _2 + _3 }
|
@@ -262,11 +329,16 @@
|
|
262
329
|
# [10, 20, 30].map { |x| _1**2 }
|
263
330
|
# # SyntaxError (ordinary parameter is defined)
|
264
331
|
#
|
332
|
+
# Numbered parameters can't be mixed with `it` either:
|
333
|
+
#
|
334
|
+
# [10, 20, 30].map { _1 + it }
|
335
|
+
# # SyntaxError: `it` is not allowed when a numbered parameter is already used
|
336
|
+
#
|
265
337
|
# To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
|
266
|
-
# so on, causes
|
338
|
+
# so on, causes an error.
|
267
339
|
#
|
268
|
-
#
|
269
|
-
# #
|
340
|
+
# _1 = 'test'
|
341
|
+
# # ^~ _1 is reserved for numbered parameters (SyntaxError)
|
270
342
|
#
|
271
343
|
# Using implicit numbered parameters affects block's arity:
|
272
344
|
#
|
@@ -280,12 +352,10 @@
|
|
280
352
|
# Blocks with numbered parameters can't be nested:
|
281
353
|
#
|
282
354
|
# %w[test me].each { _1.each_char { p _1 } }
|
283
|
-
# #
|
355
|
+
# # numbered parameter is already used in outer block (SyntaxError)
|
284
356
|
# # %w[test me].each { _1.each_char { p _1 } }
|
285
357
|
# # ^~
|
286
358
|
#
|
287
|
-
# Numbered parameters were introduced in Ruby 2.7.
|
288
|
-
#
|
289
359
|
class Proc
|
290
360
|
interface _Callable
|
291
361
|
def call: (?) -> untyped
|
data/core/ractor.rbs
CHANGED
@@ -588,6 +588,23 @@ class Ractor
|
|
588
588
|
#
|
589
589
|
def self.shareable?: (untyped obj) -> bool
|
590
590
|
|
591
|
+
# <!--
|
592
|
+
# rdoc-file=ractor.rb
|
593
|
+
# - Ractor.store_if_absent(key){ init_block }
|
594
|
+
# -->
|
595
|
+
# If the correponding value is not set, yield a value with init_block and store
|
596
|
+
# the value in thread-safe manner. This method returns corresponding stored
|
597
|
+
# value.
|
598
|
+
#
|
599
|
+
# (1..10).map{
|
600
|
+
# Thread.new(it){|i|
|
601
|
+
# Ractor.store_if_absent(:s){ f(); i }
|
602
|
+
# #=> return stored value of key :s
|
603
|
+
# }
|
604
|
+
# }.map(&:value).uniq.size #=> 1 and f() is called only once
|
605
|
+
#
|
606
|
+
def self.store_if_absent: [A] (Symbol) { (nil) -> A } -> A
|
607
|
+
|
591
608
|
# <!--
|
592
609
|
# rdoc-file=ractor.rb
|
593
610
|
# - Ractor.yield(msg, move: false) -> nil
|
@@ -1036,6 +1053,9 @@ class Ractor
|
|
1036
1053
|
# end
|
1037
1054
|
#
|
1038
1055
|
class RemoteError < Ractor::Error
|
1056
|
+
# <!-- rdoc-file=ractor.rb -->
|
1057
|
+
# The Ractor an uncaught exception is raised in.
|
1058
|
+
#
|
1039
1059
|
def ractor: () -> Ractor
|
1040
1060
|
end
|
1041
1061
|
|