rbs 4.0.0.dev.4 → 4.0.0
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/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +18 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +27 -34
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +323 -0
- data/README.md +1 -1
- data/Rakefile +43 -33
- data/Steepfile +1 -0
- data/config.yml +426 -24
- data/core/array.rbs +307 -227
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +179 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +192 -144
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -67
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +576 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +544 -116
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +16 -2
- data/ext/rbs_extension/class_constants.h +8 -0
- data/ext/rbs_extension/extconf.rb +5 -1
- data/ext/rbs_extension/legacy_location.c +33 -56
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +44 -35
- data/include/rbs/ast.h +448 -173
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- data/include/rbs/string.h +0 -2
- data/include/rbs/util/rbs_allocator.h +34 -13
- data/include/rbs/util/rbs_assert.h +12 -1
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs/util/rbs_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -1
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +293 -3
- data/lib/rbs/ast/ruby/comment_block.rb +24 -0
- data/lib/rbs/ast/ruby/declarations.rb +198 -3
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/members.rb +532 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +20 -15
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
- data/lib/rbs/definition_builder/method_builder.rb +20 -0
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +227 -74
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +342 -6
- data/lib/rbs/location_aux.rb +1 -1
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/parser_aux.rb +20 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +8 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +4 -3
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ast/ruby/annotations.rbs +315 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +108 -2
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -1
- data/sig/definition_builder.rbs +2 -0
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -14
- data/sig/inline_parser.rbs +39 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +3 -1
- data/sig/parser.rbs +31 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +410 -153
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +8 -48
- data/src/parser.c +977 -516
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -71
- data/src/util/rbs_assert.c +1 -1
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +10 -14
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +217 -136
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +475 -357
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +22 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +7 -7
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +50 -6
data/core/enumerator.rbs
CHANGED
|
@@ -137,7 +137,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
137
137
|
|
|
138
138
|
# <!--
|
|
139
139
|
# rdoc-file=enumerator.c
|
|
140
|
-
# - Enumerator.produce(initial = nil) { |prev| block } -> enumerator
|
|
140
|
+
# - Enumerator.produce(initial = nil, size: nil) { |prev| block } -> enumerator
|
|
141
141
|
# -->
|
|
142
142
|
# Creates an infinite enumerator from any block, just called over and over. The
|
|
143
143
|
# result of the previous iteration is passed to the next one. If `initial` is
|
|
@@ -169,6 +169,30 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
169
169
|
# Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
|
|
170
170
|
# # => ["7", "+", "38", "/", "6"]
|
|
171
171
|
#
|
|
172
|
+
# The optional `size` keyword argument specifies the size of the enumerator,
|
|
173
|
+
# which can be retrieved by Enumerator#size. It can be an integer,
|
|
174
|
+
# <code>Float::INFINITY</code>, a callable object (such as a lambda), or `nil`
|
|
175
|
+
# to indicate unknown size. When not specified, the size defaults to
|
|
176
|
+
# <code>Float::INFINITY</code>.
|
|
177
|
+
#
|
|
178
|
+
# # Infinite enumerator
|
|
179
|
+
# enum = Enumerator.produce(1, size: Float::INFINITY, &:succ)
|
|
180
|
+
# enum.size # => Float::INFINITY
|
|
181
|
+
#
|
|
182
|
+
# # Finite enumerator with known/computable size
|
|
183
|
+
# abs_dir = File.expand_path("./baz") # => "/foo/bar/baz"
|
|
184
|
+
# traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) {
|
|
185
|
+
# raise StopIteration if it == "/"
|
|
186
|
+
# File.dirname(it)
|
|
187
|
+
# }
|
|
188
|
+
# traverser.size # => 4
|
|
189
|
+
#
|
|
190
|
+
# # Finite enumerator with unknown size
|
|
191
|
+
# calendar = Enumerator.produce(Date.today, size: nil) {
|
|
192
|
+
# it.monday? ? raise(StopIteration) : it + 1
|
|
193
|
+
# }
|
|
194
|
+
# calendar.size # => nil
|
|
195
|
+
#
|
|
172
196
|
def self.produce: [T] () { (T? prev) -> T } -> Enumerator[T, bot]
|
|
173
197
|
| [T] (T initial) { (T prev) -> T } -> Enumerator[T, bot]
|
|
174
198
|
|
|
@@ -282,7 +306,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
282
306
|
#
|
|
283
307
|
# Iteration is defined by the given block, in which a "yielder" object, given as
|
|
284
308
|
# block parameter, can be used to yield a value by calling the `yield` method
|
|
285
|
-
# (aliased as
|
|
309
|
+
# (aliased as <code><<</code>):
|
|
286
310
|
#
|
|
287
311
|
# fib = Enumerator.new do |y|
|
|
288
312
|
# a = b = 1
|
|
@@ -446,8 +470,39 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
446
470
|
# loop.size # => Float::INFINITY
|
|
447
471
|
# (1..100).drop_while.size # => nil
|
|
448
472
|
#
|
|
473
|
+
# Note that enumerator size might be inaccurate, and should be rather treated as
|
|
474
|
+
# a hint. For example, there is no check that the size provided to ::new is
|
|
475
|
+
# accurate:
|
|
476
|
+
#
|
|
477
|
+
# e = Enumerator.new(5) { |y| 2.times { y << it} }
|
|
478
|
+
# e.size # => 5
|
|
479
|
+
# e.to_a.size # => 2
|
|
480
|
+
#
|
|
481
|
+
# Another example is an enumerator created by ::produce without a `size`
|
|
482
|
+
# argument. Such enumerators return `Infinity` for size, but this is inaccurate
|
|
483
|
+
# if the passed block raises StopIteration:
|
|
484
|
+
#
|
|
485
|
+
# e = Enumerator.produce(1) { it + 1 }
|
|
486
|
+
# e.size # => Infinity
|
|
487
|
+
#
|
|
488
|
+
# e = Enumerator.produce(1) { it > 3 ? raise(StopIteration) : it + 1 }
|
|
489
|
+
# e.size # => Infinity
|
|
490
|
+
# e.to_a.size # => 4
|
|
491
|
+
#
|
|
449
492
|
def size: () -> (Integer | Float)?
|
|
450
493
|
|
|
494
|
+
# <!--
|
|
495
|
+
# rdoc-file=enumerator.c
|
|
496
|
+
# - e + enum -> enumerator
|
|
497
|
+
# -->
|
|
498
|
+
# Returns an enumerator object generated from this enumerator and a given
|
|
499
|
+
# enumerable.
|
|
500
|
+
#
|
|
501
|
+
# e = (1..3).each + [4, 5]
|
|
502
|
+
# e.to_a #=> [1, 2, 3, 4, 5]
|
|
503
|
+
#
|
|
504
|
+
def +: [Elem2] (::_Each[Elem2]) -> ::Enumerator::Chain[Elem | Elem2]
|
|
505
|
+
|
|
451
506
|
# <!--
|
|
452
507
|
# rdoc-file=enumerator.c
|
|
453
508
|
# - e.with_index(offset = 0) {|(*args), idx| ... }
|
|
@@ -578,6 +633,14 @@ class Enumerator::Lazy[out Elem, out Return = void] < Enumerator[Elem, Return]
|
|
|
578
633
|
# Like Enumerable#compact, but chains operation to be lazy-evaluated.
|
|
579
634
|
#
|
|
580
635
|
def compact: () -> Enumerator::Lazy[Elem, Return]
|
|
636
|
+
|
|
637
|
+
# <!--
|
|
638
|
+
# rdoc-file=enumerator.c
|
|
639
|
+
# - lzy.eager -> enum
|
|
640
|
+
# -->
|
|
641
|
+
# Returns a non-lazy Enumerator converted from the lazy enumerator.
|
|
642
|
+
#
|
|
643
|
+
def eager: () -> ::Enumerator[Elem, Return]
|
|
581
644
|
end
|
|
582
645
|
|
|
583
646
|
# <!-- rdoc-file=enumerator.c -->
|
data/core/errno.rbs
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#
|
|
10
10
|
# When the Ruby interpreter interacts with the operating system and receives
|
|
11
11
|
# such an error code (e.g., `2`), it maps the code to a particular Ruby
|
|
12
|
-
# exception class (e.g.,
|
|
12
|
+
# exception class (e.g., <code>Errno::ENOENT</code>):
|
|
13
13
|
#
|
|
14
14
|
# File.open('nosuch.txt')
|
|
15
15
|
# # => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
# Errno::ENOENT.superclass # => SystemCallError
|
|
26
26
|
# Errno::ENOENT::Errno # => 2
|
|
27
27
|
#
|
|
28
|
-
# The names of nested classes are returned by method
|
|
28
|
+
# The names of nested classes are returned by method
|
|
29
|
+
# <code>Errno.constants</code>:
|
|
29
30
|
#
|
|
30
31
|
# Errno.constants.size # => 158
|
|
31
32
|
# Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]
|
|
@@ -38,6 +39,14 @@
|
|
|
38
39
|
# Errno::ENOENT::Errno # => 2
|
|
39
40
|
# Errno::ENOTCAPABLE::Errno # => 0
|
|
40
41
|
#
|
|
42
|
+
# Each class in Errno can be created with optional messages:
|
|
43
|
+
#
|
|
44
|
+
# Errno::EPIPE.new # => #<Errno::EPIPE: Broken pipe>
|
|
45
|
+
# Errno::EPIPE.new("foo") # => #<Errno::EPIPE: Broken pipe - foo>
|
|
46
|
+
# Errno::EPIPE.new("foo", "here") # => #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
47
|
+
#
|
|
48
|
+
# See SystemCallError.new.
|
|
49
|
+
#
|
|
41
50
|
module Errno
|
|
42
51
|
class NOERROR < SystemCallError
|
|
43
52
|
Errno: 0
|
data/core/errors.rbs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#
|
|
7
7
|
# [1, 2, 3].first(4, 5)
|
|
8
8
|
#
|
|
9
|
-
#
|
|
9
|
+
# <em>raises the exception:</em>
|
|
10
10
|
#
|
|
11
11
|
# ArgumentError: wrong number of arguments (given 2, expected 1)
|
|
12
12
|
#
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# [1, 2, 3].first(-4)
|
|
16
16
|
#
|
|
17
|
-
#
|
|
17
|
+
# <em>raises the exception:</em>
|
|
18
18
|
#
|
|
19
19
|
# ArgumentError: negative array size
|
|
20
20
|
#
|
|
@@ -66,7 +66,7 @@ end
|
|
|
66
66
|
#
|
|
67
67
|
# [1, 2, 3].freeze << 4
|
|
68
68
|
#
|
|
69
|
-
#
|
|
69
|
+
# <em>raises the exception:</em>
|
|
70
70
|
#
|
|
71
71
|
# FrozenError: can't modify frozen Array
|
|
72
72
|
#
|
|
@@ -115,11 +115,11 @@ end
|
|
|
115
115
|
# puts "Note: You will typically use Signal.trap instead."
|
|
116
116
|
# end
|
|
117
117
|
#
|
|
118
|
-
#
|
|
118
|
+
# <em>produces:</em>
|
|
119
119
|
#
|
|
120
120
|
# Press ctrl-C when you get bored
|
|
121
121
|
#
|
|
122
|
-
#
|
|
122
|
+
# <em>then waits until it is interrupted with Control-C and then prints:</em>
|
|
123
123
|
#
|
|
124
124
|
# Note: You will typically use Signal.trap instead.
|
|
125
125
|
#
|
|
@@ -184,7 +184,7 @@ end
|
|
|
184
184
|
#
|
|
185
185
|
# require 'this/file/does/not/exist'
|
|
186
186
|
#
|
|
187
|
-
#
|
|
187
|
+
# <em>raises the exception:</em>
|
|
188
188
|
#
|
|
189
189
|
# LoadError: no such file to load -- this/file/does/not/exist
|
|
190
190
|
#
|
|
@@ -209,7 +209,7 @@ end
|
|
|
209
209
|
# end
|
|
210
210
|
# call_block
|
|
211
211
|
#
|
|
212
|
-
#
|
|
212
|
+
# <em>raises the exception:</em>
|
|
213
213
|
#
|
|
214
214
|
# LocalJumpError: no block given (yield)
|
|
215
215
|
#
|
|
@@ -220,7 +220,7 @@ end
|
|
|
220
220
|
# end
|
|
221
221
|
# get_me_a_return.call
|
|
222
222
|
#
|
|
223
|
-
#
|
|
223
|
+
# <em>raises the exception:</em>
|
|
224
224
|
#
|
|
225
225
|
# LocalJumpError: unexpected return
|
|
226
226
|
#
|
|
@@ -248,7 +248,7 @@ end
|
|
|
248
248
|
#
|
|
249
249
|
# puts foo
|
|
250
250
|
#
|
|
251
|
-
#
|
|
251
|
+
# <em>raises the exception:</em>
|
|
252
252
|
#
|
|
253
253
|
# NameError: undefined local variable or method `foo' for main:Object
|
|
254
254
|
#
|
|
@@ -256,7 +256,7 @@ end
|
|
|
256
256
|
#
|
|
257
257
|
# Integer.const_set :answer, 42
|
|
258
258
|
#
|
|
259
|
-
#
|
|
259
|
+
# <em>raises the exception:</em>
|
|
260
260
|
#
|
|
261
261
|
# NameError: wrong constant name answer
|
|
262
262
|
#
|
|
@@ -302,9 +302,15 @@ class NameError[T] < StandardError
|
|
|
302
302
|
def receiver: () -> T?
|
|
303
303
|
end
|
|
304
304
|
|
|
305
|
+
# <!-- rdoc-file=error.c -->
|
|
306
|
+
# Raised when matching pattern not found.
|
|
307
|
+
#
|
|
305
308
|
class NoMatchingPatternError < StandardError
|
|
306
309
|
end
|
|
307
310
|
|
|
311
|
+
# <!-- rdoc-file=error.c -->
|
|
312
|
+
# Raised when matching key not found.
|
|
313
|
+
#
|
|
308
314
|
class NoMatchingPatternKeyError[M, K] < NoMatchingPatternError
|
|
309
315
|
# <!--
|
|
310
316
|
# rdoc-file=error.c
|
|
@@ -344,7 +350,7 @@ end
|
|
|
344
350
|
#
|
|
345
351
|
# "hello".to_ary
|
|
346
352
|
#
|
|
347
|
-
#
|
|
353
|
+
# <em>raises the exception:</em>
|
|
348
354
|
#
|
|
349
355
|
# NoMethodError: undefined method `to_ary' for an instance of String
|
|
350
356
|
#
|
|
@@ -354,11 +360,13 @@ class NoMethodError[T] < NameError[T]
|
|
|
354
360
|
# - NoMethodError.new(msg=nil, name=nil, args=nil, private=false, receiver: nil) -> no_method_error
|
|
355
361
|
# -->
|
|
356
362
|
# Construct a NoMethodError exception for a method of the given name called with
|
|
357
|
-
# the given arguments. The name may be accessed using the
|
|
358
|
-
# resulting object, and the arguments using the
|
|
363
|
+
# the given arguments. The name may be accessed using the <code>#name</code>
|
|
364
|
+
# method on the resulting object, and the arguments using the <code>#args</code>
|
|
365
|
+
# method.
|
|
359
366
|
#
|
|
360
367
|
# If *private* argument were passed, it designates method was attempted to call
|
|
361
|
-
# in private context, and can be accessed with
|
|
368
|
+
# in private context, and can be accessed with <code>#private_call?</code>
|
|
369
|
+
# method.
|
|
362
370
|
#
|
|
363
371
|
# *receiver* argument stores an object whose method was called.
|
|
364
372
|
#
|
|
@@ -387,8 +395,8 @@ end
|
|
|
387
395
|
# exception if the underlying operating system or Ruby runtime does not support
|
|
388
396
|
# them.
|
|
389
397
|
#
|
|
390
|
-
# Note that if `fork` raises a `NotImplementedError`, then
|
|
391
|
-
# returns `false`.
|
|
398
|
+
# Note that if `fork` raises a `NotImplementedError`, then
|
|
399
|
+
# <code>respond_to?(:fork)</code> returns `false`.
|
|
392
400
|
#
|
|
393
401
|
class NotImplementedError < ScriptError
|
|
394
402
|
end
|
|
@@ -398,7 +406,7 @@ end
|
|
|
398
406
|
#
|
|
399
407
|
# [1, 2, 3].drop(1 << 100)
|
|
400
408
|
#
|
|
401
|
-
#
|
|
409
|
+
# <em>raises the exception:</em>
|
|
402
410
|
#
|
|
403
411
|
# RangeError: bignum too big to convert into `long'
|
|
404
412
|
#
|
|
@@ -410,7 +418,7 @@ end
|
|
|
410
418
|
#
|
|
411
419
|
# Regexp.new("?")
|
|
412
420
|
#
|
|
413
|
-
#
|
|
421
|
+
# <em>raises the exception:</em>
|
|
414
422
|
#
|
|
415
423
|
# RegexpError: target of repeat operator is not specified: /?/
|
|
416
424
|
#
|
|
@@ -423,7 +431,7 @@ end
|
|
|
423
431
|
#
|
|
424
432
|
# raise "ouch"
|
|
425
433
|
#
|
|
426
|
-
#
|
|
434
|
+
# <em>raises the exception:</em>
|
|
427
435
|
#
|
|
428
436
|
# RuntimeError: ouch
|
|
429
437
|
#
|
|
@@ -455,7 +463,7 @@ end
|
|
|
455
463
|
# puts "received Exception #{e}"
|
|
456
464
|
# end
|
|
457
465
|
#
|
|
458
|
-
#
|
|
466
|
+
# <em>produces:</em>
|
|
459
467
|
#
|
|
460
468
|
# received Exception SIGHUP
|
|
461
469
|
#
|
|
@@ -496,7 +504,7 @@ end
|
|
|
496
504
|
#
|
|
497
505
|
# require 'does/not/exist' rescue "Hi"
|
|
498
506
|
#
|
|
499
|
-
#
|
|
507
|
+
# <em>raises the exception:</em>
|
|
500
508
|
#
|
|
501
509
|
# LoadError: no such file to load -- does/not/exist
|
|
502
510
|
#
|
|
@@ -514,7 +522,7 @@ end
|
|
|
514
522
|
# end
|
|
515
523
|
# puts "Done!"
|
|
516
524
|
#
|
|
517
|
-
#
|
|
525
|
+
# <em>produces:</em>
|
|
518
526
|
#
|
|
519
527
|
# Hello
|
|
520
528
|
# Done!
|
|
@@ -554,7 +562,7 @@ end
|
|
|
554
562
|
#
|
|
555
563
|
# eval("1+1=2")
|
|
556
564
|
#
|
|
557
|
-
#
|
|
565
|
+
# <em>raises the exception:</em>
|
|
558
566
|
#
|
|
559
567
|
# SyntaxError: (eval):1: syntax error, unexpected '=', expecting $end
|
|
560
568
|
#
|
|
@@ -581,20 +589,41 @@ end
|
|
|
581
589
|
#
|
|
582
590
|
# File.open("does/not/exist")
|
|
583
591
|
#
|
|
584
|
-
#
|
|
592
|
+
# <em>raises the exception:</em>
|
|
585
593
|
#
|
|
586
594
|
# Errno::ENOENT: No such file or directory - does/not/exist
|
|
587
595
|
#
|
|
588
596
|
class SystemCallError < StandardError
|
|
589
597
|
# <!--
|
|
590
598
|
# rdoc-file=error.c
|
|
591
|
-
# - SystemCallError.new(msg, errno) -> system_call_error_subclass
|
|
599
|
+
# - SystemCallError.new(msg, errno = nil, func = nil) -> system_call_error_subclass
|
|
592
600
|
# -->
|
|
593
601
|
# If *errno* corresponds to a known system error code, constructs the
|
|
594
602
|
# appropriate Errno class for that error, otherwise constructs a generic
|
|
595
603
|
# SystemCallError object. The error number is subsequently available via the
|
|
596
604
|
# #errno method.
|
|
597
605
|
#
|
|
606
|
+
# If only numeric object is given, it is treated as an Integer *errno*, and
|
|
607
|
+
# *msg* is omitted, otherwise the first argument *msg* is used as the additional
|
|
608
|
+
# error message.
|
|
609
|
+
#
|
|
610
|
+
# SystemCallError.new(Errno::EPIPE::Errno)
|
|
611
|
+
# #=> #<Errno::EPIPE: Broken pipe>
|
|
612
|
+
#
|
|
613
|
+
# SystemCallError.new("foo")
|
|
614
|
+
# #=> #<SystemCallError: unknown error - foo>
|
|
615
|
+
#
|
|
616
|
+
# SystemCallError.new("foo", Errno::EPIPE::Errno)
|
|
617
|
+
# #=> #<Errno::EPIPE: Broken pipe - foo>
|
|
618
|
+
#
|
|
619
|
+
# If *func* is not `nil`, it is appended to the message with "<code> @ </code>".
|
|
620
|
+
#
|
|
621
|
+
# SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
|
|
622
|
+
# #=> #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
623
|
+
#
|
|
624
|
+
# A subclass of SystemCallError can also be instantiated via the `new` method of
|
|
625
|
+
# the subclass. See Errno.
|
|
626
|
+
#
|
|
598
627
|
def initialize: (string msg, Integer errno) -> void
|
|
599
628
|
|
|
600
629
|
# <!--
|
|
@@ -658,7 +687,7 @@ end
|
|
|
658
687
|
# end
|
|
659
688
|
# me_myself_and_i
|
|
660
689
|
#
|
|
661
|
-
#
|
|
690
|
+
# <em>raises the exception:</em>
|
|
662
691
|
#
|
|
663
692
|
# SystemStackError: stack level too deep
|
|
664
693
|
#
|
|
@@ -685,7 +714,7 @@ end
|
|
|
685
714
|
#
|
|
686
715
|
# [1, 2, 3].first("two")
|
|
687
716
|
#
|
|
688
|
-
#
|
|
717
|
+
# <em>raises the exception:</em>
|
|
689
718
|
#
|
|
690
719
|
# TypeError: no implicit conversion of String into Integer
|
|
691
720
|
#
|
|
@@ -698,7 +727,7 @@ end
|
|
|
698
727
|
#
|
|
699
728
|
# throw "foo", "bar"
|
|
700
729
|
#
|
|
701
|
-
#
|
|
730
|
+
# <em>raises the exception:</em>
|
|
702
731
|
#
|
|
703
732
|
# UncaughtThrowError: uncaught throw "foo"
|
|
704
733
|
#
|
|
@@ -714,7 +743,7 @@ class UncaughtThrowError < ArgumentError
|
|
|
714
743
|
#
|
|
715
744
|
# throw "foo", "bar"
|
|
716
745
|
#
|
|
717
|
-
#
|
|
746
|
+
# <em>raises the exception:</em>
|
|
718
747
|
#
|
|
719
748
|
# UncaughtThrowError: uncaught throw "foo"
|
|
720
749
|
#
|
data/core/exception.rbs
CHANGED
|
@@ -102,7 +102,7 @@ class Exception
|
|
|
102
102
|
# Returns the backtrace (the list of code locations that led to the exception),
|
|
103
103
|
# as an array of strings.
|
|
104
104
|
#
|
|
105
|
-
# Example (assuming the code is stored in the file named
|
|
105
|
+
# Example (assuming the code is stored in the file named <code>t.rb</code>):
|
|
106
106
|
#
|
|
107
107
|
# def division(numerator, denominator)
|
|
108
108
|
# numerator / denominator
|
|
@@ -118,7 +118,7 @@ class Exception
|
|
|
118
118
|
# # String
|
|
119
119
|
# end
|
|
120
120
|
#
|
|
121
|
-
# The value returned by this method
|
|
121
|
+
# The value returned by this method might be adjusted when raising (see
|
|
122
122
|
# Kernel#raise), or during intermediate handling by #set_backtrace.
|
|
123
123
|
#
|
|
124
124
|
# See also #backtrace_locations that provide the same value, as structured
|
|
@@ -136,7 +136,7 @@ class Exception
|
|
|
136
136
|
# Returns the backtrace (the list of code locations that led to the exception),
|
|
137
137
|
# as an array of Thread::Backtrace::Location instances.
|
|
138
138
|
#
|
|
139
|
-
# Example (assuming the code is stored in the file named
|
|
139
|
+
# Example (assuming the code is stored in the file named <code>t.rb</code>):
|
|
140
140
|
#
|
|
141
141
|
# def division(numerator, denominator)
|
|
142
142
|
# numerator / denominator
|
|
@@ -173,8 +173,8 @@ class Exception
|
|
|
173
173
|
# rdoc-file=error.c
|
|
174
174
|
# - cause -> exception or nil
|
|
175
175
|
# -->
|
|
176
|
-
# Returns the previous value of global variable
|
|
177
|
-
# [Global Variables](rdoc-ref:exceptions.md@Global+Variables)):
|
|
176
|
+
# Returns the previous value of global variable <code>$!</code>, which may be
|
|
177
|
+
# `nil` (see [Global Variables](rdoc-ref:exceptions.md@Global+Variables)):
|
|
178
178
|
#
|
|
179
179
|
# begin
|
|
180
180
|
# raise('Boom 0')
|
|
@@ -237,10 +237,10 @@ class Exception
|
|
|
237
237
|
# An overriding method must be tolerant of passed keyword arguments, which may
|
|
238
238
|
# include (but may not be limited to):
|
|
239
239
|
#
|
|
240
|
-
# *
|
|
241
|
-
# *
|
|
242
|
-
# *
|
|
243
|
-
# *
|
|
240
|
+
# * <code>:highlight</code>.
|
|
241
|
+
# * <code>:did_you_mean</code>.
|
|
242
|
+
# * <code>:error_highlight</code>.
|
|
243
|
+
# * <code>:syntax_suggest</code>.
|
|
244
244
|
#
|
|
245
245
|
# An overriding method should also be careful with ANSI code enhancements; see
|
|
246
246
|
# [Messages](rdoc-ref:exceptions.md@Messages).
|
|
@@ -444,10 +444,10 @@ class Exception
|
|
|
444
444
|
# message.
|
|
445
445
|
# * Includes the [backtrace](rdoc-ref:exceptions.md@Backtraces):
|
|
446
446
|
#
|
|
447
|
-
# * If the value of keyword `order` is
|
|
448
|
-
# error message and the innermost backtrace entry first.
|
|
449
|
-
# * If the value of keyword `order` is
|
|
450
|
-
#
|
|
447
|
+
# * If the value of keyword `order` is <code>:top</code> (the default),
|
|
448
|
+
# lists the error message and the innermost backtrace entry first.
|
|
449
|
+
# * If the value of keyword `order` is <code>:bottom</code>, lists the
|
|
450
|
+
# error message the innermost entry last.
|
|
451
451
|
#
|
|
452
452
|
# Example:
|
|
453
453
|
#
|