rbs 3.6.1 → 3.9.5
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 +2 -2
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +34 -10
- data/.github/workflows/windows.yml +20 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +26 -1
- data/CHANGELOG.md +241 -0
- data/Rakefile +54 -4
- data/config.yml +317 -0
- data/core/array.rbs +1756 -1591
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +166 -94
- data/core/data.rbs +2 -2
- data/core/dir.rbs +2 -18
- data/core/encoding.rbs +12 -32
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +14 -4
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +6 -2
- data/core/exception.rbs +342 -167
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +26 -75
- data/core/float.rbs +125 -72
- data/core/gc.rbs +158 -42
- data/core/hash.rbs +122 -143
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +108 -151
- data/core/kernel.rbs +341 -209
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/method.rbs +2 -2
- data/core/module.rbs +32 -27
- data/core/nil_class.rbs +2 -2
- data/core/numeric.rbs +101 -104
- data/core/object.rbs +1 -5
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +82 -14
- data/core/process.rbs +110 -58
- data/core/ractor.rbs +57 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +237 -36
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +10 -56
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +3 -6
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +3 -6
- data/core/rubygems/version.rbs +8 -8
- data/core/set.rbs +4 -16
- data/core/string.rbs +271 -264
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +131 -50
- data/core/trace_point.rbs +124 -113
- data/core/true_class.rbs +0 -1
- data/core/unbound_method.rbs +1 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +17 -10
- data/ext/rbs_extension/extconf.rb +11 -0
- data/ext/rbs_extension/location.c +61 -29
- data/ext/rbs_extension/location.h +4 -3
- data/ext/rbs_extension/main.c +23 -1
- data/ext/rbs_extension/parser.c +506 -517
- data/ext/rbs_extension/parserstate.c +109 -30
- data/ext/rbs_extension/parserstate.h +6 -4
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs/util/rbs_constant_pool.h +219 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/ast/declarations.rb +9 -4
- data/lib/rbs/ast/directives.rb +10 -0
- data/lib/rbs/ast/members.rb +2 -0
- data/lib/rbs/ast/type_param.rb +2 -12
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +2 -1
- data/lib/rbs/cli.rb +16 -16
- data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
- data/lib/rbs/collection/config.rb +5 -3
- data/lib/rbs/collection/sources/rubygems.rb +1 -1
- data/lib/rbs/collection.rb +1 -0
- data/lib/rbs/definition.rb +51 -34
- data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
- data/lib/rbs/definition_builder.rb +83 -24
- data/lib/rbs/environment.rb +33 -18
- data/lib/rbs/environment_loader.rb +6 -1
- data/lib/rbs/errors.rb +24 -0
- data/lib/rbs/locator.rb +2 -0
- data/lib/rbs/method_type.rb +2 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +40 -3
- data/lib/rbs/prototype/rb.rb +20 -12
- data/lib/rbs/prototype/rbi.rb +11 -6
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +7 -5
- data/lib/rbs/subtractor.rb +3 -3
- data/lib/rbs/test/hook.rb +47 -42
- data/lib/rbs/test/type_check.rb +7 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/types.rb +63 -14
- data/lib/rbs/unit_test/spy.rb +4 -2
- data/lib/rbs/unit_test/type_assertions.rb +19 -13
- data/lib/rbs/unit_test/with_aliases.rb +3 -1
- data/lib/rbs/validator.rb +7 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +10 -5
- data/lib/rbs.rb +1 -0
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +6 -2
- data/sig/ancestor_graph.rbs +5 -5
- data/sig/annotate/rdoc_source.rbs +2 -0
- data/sig/cli.rbs +2 -0
- data/sig/collection/config/lockfile_generator.rbs +9 -1
- data/sig/declarations.rbs +10 -3
- data/sig/definition.rbs +80 -12
- data/sig/definition_builder.rbs +18 -4
- data/sig/directives.rbs +17 -1
- data/sig/environment.rbs +3 -1
- data/sig/errors.rbs +19 -0
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +5 -1
- data/sig/prototype/rb.rbs +1 -1
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/subtractor.rbs +1 -1
- data/sig/test/type_check.rbs +2 -2
- data/sig/type_alias_dependency.rbs +2 -2
- data/sig/type_alias_regularity.rbs +6 -6
- data/sig/type_param.rbs +4 -4
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +1 -1
- data/sig/unit_test/spy.rbs +2 -0
- data/sig/unit_test/type_assertions.rbs +2 -0
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +6 -2
- data/sig/vendorer.rbs +1 -1
- data/sig/writer.rbs +1 -1
- data/{ext/rbs_extension → src}/constants.c +35 -36
- data/src/ruby_objs.c +799 -0
- data/src/util/rbs_constant_pool.c +342 -0
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +60 -3
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +27 -42
- data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
- data/stdlib/json/0/json.rbs +107 -120
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +13 -4
- data/stdlib/net-http/0/net-http.rbs +42 -109
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/manifest.yaml +1 -0
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +235 -143
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +13 -8
- data/stdlib/resolv/0/resolv.rbs +21 -12
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +1 -2
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +32 -27
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/socket/0/unix_socket.rbs +4 -2
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +28 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +17 -13
- data/ext/rbs_extension/ruby_objs.c +0 -602
- data/ext/rbs_extension/ruby_objs.h +0 -51
- data/stdlib/minitest/0/manifest.yaml +0 -2
data/core/exception.rbs
CHANGED
@@ -1,310 +1,485 @@
|
|
1
1
|
# <!-- rdoc-file=error.c -->
|
2
|
-
# Class Exception and its subclasses are used to
|
3
|
-
#
|
2
|
+
# Class `Exception` and its subclasses are used to indicate that an error or
|
3
|
+
# other problem has occurred, and may need to be handled. See
|
4
|
+
# [Exceptions](rdoc-ref:exceptions.md).
|
4
5
|
#
|
5
|
-
# An Exception object carries information
|
6
|
-
# * Its type (the exception's class).
|
7
|
-
# * An optional descriptive message.
|
8
|
-
# * Optional backtrace information.
|
6
|
+
# An `Exception` object carries certain information:
|
9
7
|
#
|
8
|
+
# * The type (the exception's class), commonly StandardError, RuntimeError, or
|
9
|
+
# a subclass of one or the other; see [Built-In Exception Class
|
10
|
+
# Hierarchy](rdoc-ref:Exception@Built-In+Exception+Class+Hierarchy).
|
11
|
+
# * An optional descriptive message; see methods ::new, #message.
|
12
|
+
# * Optional backtrace information; see methods #backtrace,
|
13
|
+
# #backtrace_locations, #set_backtrace.
|
14
|
+
# * An optional cause; see method #cause.
|
10
15
|
#
|
11
|
-
#
|
12
|
-
# NameError#name.
|
16
|
+
# ## Built-In Exception Class Hierarchy
|
13
17
|
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
# Two Ruby statements have default exception classes:
|
17
|
-
# * `raise`: defaults to RuntimeError.
|
18
|
-
# * `rescue`: defaults to StandardError.
|
19
|
-
#
|
20
|
-
#
|
21
|
-
# ## Global Variables
|
22
|
-
#
|
23
|
-
# When an exception has been raised but not yet handled (in `rescue`, `ensure`,
|
24
|
-
# `at_exit` and `END` blocks), two global variables are set:
|
25
|
-
# * `$!` contains the current exception.
|
26
|
-
# * `$@` contains its backtrace.
|
27
|
-
#
|
28
|
-
#
|
29
|
-
# ## Custom Exceptions
|
30
|
-
#
|
31
|
-
# To provide additional or alternate information, a program may create custom
|
32
|
-
# exception classes that derive from the built-in exception classes.
|
33
|
-
#
|
34
|
-
# A good practice is for a library to create a single "generic" exception class
|
35
|
-
# (typically a subclass of StandardError or RuntimeError) and have its other
|
36
|
-
# exception classes derive from that class. This allows the user to rescue the
|
37
|
-
# generic exception, thus catching all exceptions the library may raise even if
|
38
|
-
# future versions of the library add new exception subclasses.
|
39
|
-
#
|
40
|
-
# For example:
|
41
|
-
#
|
42
|
-
# class MyLibrary
|
43
|
-
# class Error < ::StandardError
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# class WidgetError < Error
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# class FrobError < Error
|
50
|
-
# end
|
51
|
-
#
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# To handle both MyLibrary::WidgetError and MyLibrary::FrobError the library
|
55
|
-
# user can rescue MyLibrary::Error.
|
56
|
-
#
|
57
|
-
# ## Built-In Exception Classes
|
58
|
-
#
|
59
|
-
# The built-in subclasses of Exception are:
|
18
|
+
# The hierarchy of built-in subclasses of class `Exception`:
|
60
19
|
#
|
61
20
|
# * NoMemoryError
|
62
21
|
# * ScriptError
|
63
22
|
# * LoadError
|
64
23
|
# * NotImplementedError
|
65
24
|
# * SyntaxError
|
66
|
-
#
|
67
25
|
# * SecurityError
|
68
26
|
# * SignalException
|
69
27
|
# * Interrupt
|
70
|
-
#
|
71
28
|
# * StandardError
|
72
29
|
# * ArgumentError
|
73
30
|
# * UncaughtThrowError
|
74
|
-
#
|
75
31
|
# * EncodingError
|
76
32
|
# * FiberError
|
77
33
|
# * IOError
|
78
34
|
# * EOFError
|
79
|
-
#
|
80
35
|
# * IndexError
|
81
36
|
# * KeyError
|
82
37
|
# * StopIteration
|
83
38
|
# * ClosedQueueError
|
84
|
-
#
|
85
|
-
#
|
86
39
|
# * LocalJumpError
|
87
40
|
# * NameError
|
88
41
|
# * NoMethodError
|
89
|
-
#
|
90
42
|
# * RangeError
|
91
43
|
# * FloatDomainError
|
92
|
-
#
|
93
44
|
# * RegexpError
|
94
45
|
# * RuntimeError
|
95
46
|
# * FrozenError
|
96
|
-
#
|
97
47
|
# * SystemCallError
|
98
|
-
# * Errno
|
99
|
-
#
|
48
|
+
# * Errno (and its subclasses, representing system errors)
|
100
49
|
# * ThreadError
|
101
50
|
# * TypeError
|
102
51
|
# * ZeroDivisionError
|
103
|
-
#
|
104
52
|
# * SystemExit
|
105
53
|
# * SystemStackError
|
106
|
-
# * fatal
|
54
|
+
# * [fatal](rdoc-ref:fatal)
|
107
55
|
#
|
108
56
|
class Exception
|
109
57
|
# <!--
|
110
58
|
# rdoc-file=error.c
|
111
|
-
# - Exception.to_tty?
|
59
|
+
# - Exception.to_tty? -> true or false
|
112
60
|
# -->
|
113
|
-
# Returns `true` if exception messages will be sent to a
|
61
|
+
# Returns `true` if exception messages will be sent to a terminal device.
|
114
62
|
#
|
115
63
|
def self.to_tty?: () -> bool
|
116
64
|
|
117
65
|
# <!--
|
118
66
|
# rdoc-file=error.c
|
119
|
-
# -
|
67
|
+
# - exception(message = nil) -> self or new_exception
|
120
68
|
# -->
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
69
|
+
# Returns an exception object of the same class as `self`; useful for creating a
|
70
|
+
# similar exception, but with a different message.
|
71
|
+
#
|
72
|
+
# With `message` `nil`, returns `self`:
|
73
|
+
#
|
74
|
+
# x0 = StandardError.new('Boom') # => #<StandardError: Boom>
|
75
|
+
# x1 = x0.exception # => #<StandardError: Boom>
|
76
|
+
# x0.__id__ == x1.__id__ # => true
|
77
|
+
#
|
78
|
+
# With [string-convertible
|
79
|
+
# object](rdoc-ref:implicit_conversion.rdoc@String-Convertible+Objects)
|
80
|
+
# `message` (even the same as the original message), returns a new exception
|
81
|
+
# object whose class is the same as `self`, and whose message is the given
|
82
|
+
# `message`:
|
83
|
+
#
|
84
|
+
# x1 = x0.exception('Boom') # => #<StandardError: Boom>
|
85
|
+
# x0..equal?(x1) # => false
|
124
86
|
#
|
125
87
|
def self.exception: (?string | _ToS msg) -> instance
|
126
88
|
|
127
89
|
# <!--
|
128
90
|
# rdoc-file=error.c
|
129
|
-
# -
|
91
|
+
# - self == object -> true or false
|
130
92
|
# -->
|
131
|
-
#
|
132
|
-
#
|
93
|
+
# Returns whether `object` is the same class as `self` and its #message and
|
94
|
+
# #backtrace are equal to those of `self`.
|
133
95
|
#
|
134
96
|
def ==: (untyped obj) -> bool
|
135
97
|
|
136
98
|
# <!--
|
137
99
|
# rdoc-file=error.c
|
138
|
-
# -
|
100
|
+
# - backtrace -> array or nil
|
139
101
|
# -->
|
140
|
-
# Returns
|
141
|
-
#
|
142
|
-
# ``filename:lineNo.''
|
102
|
+
# Returns the backtrace (the list of code locations that led to the exception),
|
103
|
+
# as an array of strings.
|
143
104
|
#
|
144
|
-
#
|
145
|
-
# raise "boom"
|
146
|
-
# end
|
105
|
+
# Example (assuming the code is stored in the file named `t.rb`):
|
147
106
|
#
|
148
|
-
# def
|
149
|
-
#
|
107
|
+
# def division(numerator, denominator)
|
108
|
+
# numerator / denominator
|
150
109
|
# end
|
151
110
|
#
|
152
111
|
# begin
|
153
|
-
#
|
154
|
-
# rescue =>
|
155
|
-
#
|
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
|
156
119
|
# end
|
157
120
|
#
|
158
|
-
#
|
159
|
-
#
|
160
|
-
# prog.rb:2:in `a'
|
161
|
-
# prog.rb:6:in `b'
|
162
|
-
# prog.rb:10
|
121
|
+
# The value returned by this method migth be adjusted when raising (see
|
122
|
+
# Kernel#raise), or during intermediate handling by #set_backtrace.
|
163
123
|
#
|
164
|
-
#
|
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.)
|
165
127
|
#
|
166
|
-
#
|
167
|
-
# ex.backtrace
|
168
|
-
# #=> nil
|
128
|
+
# see [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
169
129
|
#
|
170
130
|
def backtrace: () -> Array[String]?
|
171
131
|
|
172
132
|
# <!--
|
173
133
|
# rdoc-file=error.c
|
174
|
-
# -
|
134
|
+
# - backtrace_locations -> array or nil
|
175
135
|
# -->
|
176
|
-
# Returns
|
177
|
-
#
|
178
|
-
# Thread::Backtrace::Location.
|
136
|
+
# Returns the backtrace (the list of code locations that led to the exception),
|
137
|
+
# as an array of Thread::Backtrace::Location instances.
|
179
138
|
#
|
180
|
-
#
|
139
|
+
# Example (assuming the code is stored in the file named `t.rb`):
|
140
|
+
#
|
141
|
+
# def division(numerator, denominator)
|
142
|
+
# numerator / denominator
|
143
|
+
# end
|
144
|
+
#
|
145
|
+
# begin
|
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#/"
|
159
|
+
# end
|
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.)
|
167
|
+
#
|
168
|
+
# See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
181
169
|
#
|
182
170
|
def backtrace_locations: () -> Array[Thread::Backtrace::Location]?
|
183
171
|
|
184
172
|
# <!--
|
185
173
|
# rdoc-file=error.c
|
186
|
-
# -
|
174
|
+
# - cause -> exception or nil
|
187
175
|
# -->
|
188
|
-
# Returns the previous
|
189
|
-
#
|
190
|
-
#
|
176
|
+
# Returns the previous value of global variable `$!`, which may be `nil` (see
|
177
|
+
# [Global Variables](rdoc-ref:exceptions.md@Global+Variables)):
|
178
|
+
#
|
179
|
+
# begin
|
180
|
+
# raise('Boom 0')
|
181
|
+
# rescue => x0
|
182
|
+
# puts "Exception: #{x0}; $!: #{$!}; cause: #{x0.cause.inspect}."
|
183
|
+
# begin
|
184
|
+
# raise('Boom 1')
|
185
|
+
# rescue => x1
|
186
|
+
# puts "Exception: #{x1}; $!: #{$!}; cause: #{x1.cause}."
|
187
|
+
# begin
|
188
|
+
# raise('Boom 2')
|
189
|
+
# rescue => x2
|
190
|
+
# puts "Exception: #{x2}; $!: #{$!}; cause: #{x2.cause}."
|
191
|
+
# end
|
192
|
+
# end
|
193
|
+
# end
|
194
|
+
#
|
195
|
+
# Output:
|
196
|
+
#
|
197
|
+
# Exception: Boom 0; $!: Boom 0; cause: nil.
|
198
|
+
# Exception: Boom 1; $!: Boom 1; cause: Boom 0.
|
199
|
+
# Exception: Boom 2; $!: Boom 2; cause: Boom 1.
|
191
200
|
#
|
192
201
|
def cause: () -> Exception?
|
193
202
|
|
194
203
|
# <!--
|
195
204
|
# rdoc-file=error.c
|
196
|
-
# -
|
205
|
+
# - detailed_message(highlight: false, **kwargs) -> string
|
197
206
|
# -->
|
198
|
-
#
|
207
|
+
# Returns the message string with enhancements:
|
208
|
+
#
|
209
|
+
# * Includes the exception class name in the first line.
|
210
|
+
# * If the value of keyword `highlight` is `true`, includes bolding and
|
211
|
+
# underlining ANSI codes (see below) to enhance the appearance of the
|
212
|
+
# message.
|
199
213
|
#
|
200
|
-
#
|
201
|
-
#
|
202
|
-
#
|
214
|
+
# Examples:
|
215
|
+
#
|
216
|
+
# begin
|
217
|
+
# 1 / 0
|
218
|
+
# rescue => x
|
219
|
+
# p x.message
|
220
|
+
# p x.detailed_message # Class name added.
|
221
|
+
# p x.detailed_message(highlight: true) # Class name, bolding, and underlining added.
|
222
|
+
# end
|
203
223
|
#
|
204
|
-
#
|
205
|
-
# arguments. All keyword arguments passed to #full_message are delegated to this
|
206
|
-
# method.
|
224
|
+
# Output:
|
207
225
|
#
|
208
|
-
#
|
209
|
-
#
|
226
|
+
# "divided by 0"
|
227
|
+
# "divided by 0 (ZeroDivisionError)"
|
228
|
+
# "\e[1mdivided by 0 (\e[1;4mZeroDivisionError\e[m\e[1m)\e[m"
|
210
229
|
#
|
211
|
-
#
|
212
|
-
#
|
213
|
-
# return a string containing escape sequences, but use widely-supported ones. It
|
214
|
-
# is recommended to limit the following codes:
|
230
|
+
# This method is overridden by some gems in the Ruby standard library to add
|
231
|
+
# information:
|
215
232
|
#
|
216
|
-
# *
|
217
|
-
# *
|
218
|
-
# *
|
219
|
-
# * Foreground color except white and black
|
220
|
-
# * Red (`\e[31m`)
|
221
|
-
# * Green (`\e[32m`)
|
222
|
-
# * Yellow (`\e[33m`)
|
223
|
-
# * Blue (`\e[34m`)
|
224
|
-
# * Magenta (`\e[35m`)
|
225
|
-
# * Cyan (`\e[36m`)
|
233
|
+
# * DidYouMean::Correctable#detailed_message.
|
234
|
+
# * ErrorHighlight::CoreExt#detailed_message.
|
235
|
+
# * SyntaxSuggest#detailed_message.
|
226
236
|
#
|
237
|
+
# An overriding method must be tolerant of passed keyword arguments, which may
|
238
|
+
# include (but may not be limited to):
|
227
239
|
#
|
240
|
+
# * `:highlight`.
|
241
|
+
# * `:did_you_mean`.
|
242
|
+
# * `:error_highlight`.
|
243
|
+
# * `:syntax_suggest`.
|
228
244
|
#
|
229
|
-
#
|
230
|
-
#
|
231
|
-
# even if all escape sequences are ignored.
|
245
|
+
# An overriding method should also be careful with ANSI code enhancements; see
|
246
|
+
# [Messages](rdoc-ref:exceptions.md@Messages).
|
232
247
|
#
|
233
248
|
def detailed_message: (?highlight: bool?, **untyped ignored) -> String
|
234
249
|
|
235
250
|
# <!--
|
236
251
|
# rdoc-file=error.c
|
237
|
-
# -
|
252
|
+
# - exception(message = nil) -> self or new_exception
|
238
253
|
# -->
|
239
|
-
#
|
240
|
-
#
|
241
|
-
#
|
254
|
+
# Returns an exception object of the same class as `self`; useful for creating a
|
255
|
+
# similar exception, but with a different message.
|
256
|
+
#
|
257
|
+
# With `message` `nil`, returns `self`:
|
258
|
+
#
|
259
|
+
# x0 = StandardError.new('Boom') # => #<StandardError: Boom>
|
260
|
+
# x1 = x0.exception # => #<StandardError: Boom>
|
261
|
+
# x0.__id__ == x1.__id__ # => true
|
262
|
+
#
|
263
|
+
# With [string-convertible
|
264
|
+
# object](rdoc-ref:implicit_conversion.rdoc@String-Convertible+Objects)
|
265
|
+
# `message` (even the same as the original message), returns a new exception
|
266
|
+
# object whose class is the same as `self`, and whose message is the given
|
267
|
+
# `message`:
|
268
|
+
#
|
269
|
+
# x1 = x0.exception('Boom') # => #<StandardError: Boom>
|
270
|
+
# x0..equal?(x1) # => false
|
242
271
|
#
|
243
272
|
def exception: (?self) -> self
|
244
|
-
| (string | _ToS message) ->
|
273
|
+
| (string | _ToS message) -> self
|
245
274
|
|
246
275
|
# <!--
|
247
276
|
# rdoc-file=error.c
|
248
|
-
# - Exception.new(
|
249
|
-
# - Exception.exception(msg = nil) -> exception
|
277
|
+
# - Exception.new(message = nil) -> exception
|
250
278
|
# -->
|
251
|
-
#
|
279
|
+
# Returns a new exception object.
|
280
|
+
#
|
281
|
+
# The given `message` should be a [string-convertible
|
282
|
+
# object](rdoc-ref:implicit_conversion.rdoc@String-Convertible+Objects); see
|
283
|
+
# method #message; if not given, the message is the class name of the new
|
284
|
+
# instance (which may be the name of a subclass):
|
285
|
+
#
|
286
|
+
# Examples:
|
287
|
+
#
|
288
|
+
# Exception.new # => #<Exception: Exception>
|
289
|
+
# LoadError.new # => #<LoadError: LoadError> # Subclass of Exception.
|
290
|
+
# Exception.new('Boom') # => #<Exception: Boom>
|
252
291
|
#
|
253
292
|
def initialize: (?string | _ToS message) -> void
|
254
293
|
|
255
294
|
# <!--
|
256
295
|
# rdoc-file=error.c
|
257
|
-
# -
|
296
|
+
# - inspect -> string
|
258
297
|
# -->
|
259
|
-
#
|
298
|
+
# Returns a string representation of `self`:
|
299
|
+
#
|
300
|
+
# x = RuntimeError.new('Boom')
|
301
|
+
# x.inspect # => "#<RuntimeError: Boom>"
|
302
|
+
# x = RuntimeError.new
|
303
|
+
# x.inspect # => "#<RuntimeError: RuntimeError>"
|
260
304
|
#
|
261
305
|
def inspect: () -> String
|
262
306
|
|
263
307
|
# <!--
|
264
308
|
# rdoc-file=error.c
|
265
|
-
# -
|
309
|
+
# - message -> string
|
266
310
|
# -->
|
267
|
-
# Returns
|
268
|
-
#
|
311
|
+
# Returns #to_s.
|
312
|
+
#
|
313
|
+
# See [Messages](rdoc-ref:exceptions.md@Messages).
|
269
314
|
#
|
270
315
|
def message: () -> String
|
271
316
|
|
272
317
|
# <!--
|
273
318
|
# rdoc-file=error.c
|
274
|
-
# -
|
319
|
+
# - set_backtrace(value) -> value
|
275
320
|
# -->
|
276
|
-
# Sets the backtrace
|
277
|
-
#
|
278
|
-
#
|
321
|
+
# Sets the backtrace value for `self`; returns the given `value`.
|
322
|
+
#
|
323
|
+
# The `value` might be:
|
324
|
+
#
|
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
|
344
|
+
#
|
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
|
279
351
|
#
|
280
|
-
|
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
|
415
|
+
#
|
416
|
+
# See [Backtraces](rdoc-ref:exceptions.md@Backtraces).
|
417
|
+
#
|
418
|
+
def set_backtrace: (String | Array[String]) -> Array[String]
|
419
|
+
| (Array[Thread::Backtrace::Location]) -> Array[Thread::Backtrace::Location]
|
281
420
|
| (nil) -> nil
|
282
421
|
|
283
422
|
# <!--
|
284
423
|
# rdoc-file=error.c
|
285
|
-
# -
|
424
|
+
# - to_s -> string
|
286
425
|
# -->
|
287
|
-
# Returns
|
288
|
-
#
|
426
|
+
# Returns a string representation of `self`:
|
427
|
+
#
|
428
|
+
# x = RuntimeError.new('Boom')
|
429
|
+
# x.to_s # => "Boom"
|
430
|
+
# x = RuntimeError.new
|
431
|
+
# x.to_s # => "RuntimeError"
|
289
432
|
#
|
290
433
|
def to_s: () -> String
|
291
434
|
|
292
435
|
# <!--
|
293
436
|
# rdoc-file=error.c
|
294
|
-
# -
|
437
|
+
# - full_message(highlight: true, order: :top) -> string
|
295
438
|
# -->
|
296
|
-
# Returns
|
297
|
-
#
|
298
|
-
#
|
299
|
-
#
|
300
|
-
#
|
301
|
-
#
|
302
|
-
#
|
303
|
-
#
|
304
|
-
#
|
305
|
-
#
|
306
|
-
#
|
307
|
-
#
|
439
|
+
# Returns an enhanced message string:
|
440
|
+
#
|
441
|
+
# * Includes the exception class name.
|
442
|
+
# * If the value of keyword `highlight` is true (not `nil` or `false`),
|
443
|
+
# includes bolding ANSI codes (see below) to enhance the appearance of the
|
444
|
+
# message.
|
445
|
+
# * Includes the [backtrace](rdoc-ref:exceptions.md@Backtraces):
|
446
|
+
#
|
447
|
+
# * If the value of keyword `order` is `:top` (the default), lists the
|
448
|
+
# error message and the innermost backtrace entry first.
|
449
|
+
# * If the value of keyword `order` is `:bottom`, lists the error message
|
450
|
+
# the the innermost entry last.
|
451
|
+
#
|
452
|
+
# Example:
|
453
|
+
#
|
454
|
+
# def baz
|
455
|
+
# begin
|
456
|
+
# 1 / 0
|
457
|
+
# rescue => x
|
458
|
+
# pp x.message
|
459
|
+
# pp x.full_message(highlight: false).split("\n")
|
460
|
+
# pp x.full_message.split("\n")
|
461
|
+
# end
|
462
|
+
# end
|
463
|
+
# def bar; baz; end
|
464
|
+
# def foo; bar; end
|
465
|
+
# foo
|
466
|
+
#
|
467
|
+
# Output:
|
468
|
+
#
|
469
|
+
# "divided by 0"
|
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>'"]
|
480
|
+
#
|
481
|
+
# An overriding method should be careful with ANSI code enhancements; see
|
482
|
+
# [Messages](rdoc-ref:exceptions.md@Messages).
|
308
483
|
#
|
309
484
|
def full_message: (?highlight: bool?, ?order: (:top | :bottom | string)?) -> String
|
310
485
|
end
|
data/core/fiber.rbs
CHANGED
@@ -412,8 +412,10 @@ class Fiber < Object
|
|
412
412
|
#
|
413
413
|
# Raises `FiberError` if called on a Fiber belonging to another `Thread`.
|
414
414
|
#
|
415
|
+
# See Kernel#raise for more information.
|
416
|
+
#
|
415
417
|
def raise: (?string msg) -> untyped
|
416
|
-
| (_Exception, ?string msg, ?Array[string] backtrace) -> untyped
|
418
|
+
| (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace) -> untyped
|
417
419
|
|
418
420
|
# <!--
|
419
421
|
# rdoc-file=cont.c
|
@@ -493,7 +495,6 @@ class Fiber < Object
|
|
493
495
|
# transferred back, and if it had yielded, it only can be resumed back.
|
494
496
|
# After that, it again can transfer or yield.
|
495
497
|
#
|
496
|
-
#
|
497
498
|
# If those rules are broken FiberError is raised.
|
498
499
|
#
|
499
500
|
# For an individual Fiber design, yield/resume is easier to use (the Fiber just
|