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.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -2
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/ruby.yml +34 -10
  5. data/.github/workflows/windows.yml +20 -3
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +26 -1
  8. data/CHANGELOG.md +241 -0
  9. data/Rakefile +54 -4
  10. data/config.yml +317 -0
  11. data/core/array.rbs +1756 -1591
  12. data/core/basic_object.rbs +38 -35
  13. data/core/comparable.rbs +1 -1
  14. data/core/complex.rbs +166 -94
  15. data/core/data.rbs +2 -2
  16. data/core/dir.rbs +2 -18
  17. data/core/encoding.rbs +12 -32
  18. data/core/enumerable.rbs +270 -266
  19. data/core/enumerator.rbs +14 -4
  20. data/core/env.rbs +1 -1
  21. data/core/errno.rbs +33 -16
  22. data/core/errors.rbs +6 -2
  23. data/core/exception.rbs +342 -167
  24. data/core/fiber.rbs +3 -2
  25. data/core/file.rbs +26 -75
  26. data/core/float.rbs +125 -72
  27. data/core/gc.rbs +158 -42
  28. data/core/hash.rbs +122 -143
  29. data/core/integer.rbs +79 -50
  30. data/core/io/buffer.rbs +49 -43
  31. data/core/io.rbs +108 -151
  32. data/core/kernel.rbs +341 -209
  33. data/core/match_data.rbs +76 -2
  34. data/core/math.rbs +0 -36
  35. data/core/method.rbs +2 -2
  36. data/core/module.rbs +32 -27
  37. data/core/nil_class.rbs +2 -2
  38. data/core/numeric.rbs +101 -104
  39. data/core/object.rbs +1 -5
  40. data/core/object_space/weak_key_map.rbs +3 -4
  41. data/core/object_space.rbs +3 -3
  42. data/core/proc.rbs +82 -14
  43. data/core/process.rbs +110 -58
  44. data/core/ractor.rbs +57 -4
  45. data/core/range.rbs +114 -87
  46. data/core/rational.rbs +0 -2
  47. data/core/rbs/unnamed/argf.rbs +237 -36
  48. data/core/rbs/unnamed/env_class.rbs +35 -53
  49. data/core/rbs/unnamed/random.rbs +1 -2
  50. data/core/regexp.rbs +10 -56
  51. data/core/ruby_vm.rbs +88 -9
  52. data/core/rubygems/config_file.rbs +3 -0
  53. data/core/rubygems/errors.rbs +3 -6
  54. data/core/rubygems/platform.rbs +0 -9
  55. data/core/rubygems/rubygems.rbs +3 -6
  56. data/core/rubygems/version.rbs +8 -8
  57. data/core/set.rbs +4 -16
  58. data/core/string.rbs +271 -264
  59. data/core/struct.rbs +6 -18
  60. data/core/symbol.rbs +14 -21
  61. data/core/thread.rbs +32 -35
  62. data/core/time.rbs +131 -50
  63. data/core/trace_point.rbs +124 -113
  64. data/core/true_class.rbs +0 -1
  65. data/core/unbound_method.rbs +1 -1
  66. data/core/warning.rbs +9 -2
  67. data/docs/architecture.md +1 -1
  68. data/docs/syntax.md +17 -10
  69. data/ext/rbs_extension/extconf.rb +11 -0
  70. data/ext/rbs_extension/location.c +61 -29
  71. data/ext/rbs_extension/location.h +4 -3
  72. data/ext/rbs_extension/main.c +23 -1
  73. data/ext/rbs_extension/parser.c +506 -517
  74. data/ext/rbs_extension/parserstate.c +109 -30
  75. data/ext/rbs_extension/parserstate.h +6 -4
  76. data/ext/rbs_extension/rbs_extension.h +1 -10
  77. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  78. data/include/rbs/ruby_objs.h +72 -0
  79. data/include/rbs/util/rbs_constant_pool.h +219 -0
  80. data/include/rbs.h +7 -0
  81. data/lib/rbs/annotate/annotations.rb +3 -3
  82. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  83. data/lib/rbs/ast/declarations.rb +9 -4
  84. data/lib/rbs/ast/directives.rb +10 -0
  85. data/lib/rbs/ast/members.rb +2 -0
  86. data/lib/rbs/ast/type_param.rb +2 -12
  87. data/lib/rbs/cli/diff.rb +3 -3
  88. data/lib/rbs/cli/validate.rb +2 -1
  89. data/lib/rbs/cli.rb +16 -16
  90. data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
  91. data/lib/rbs/collection/config.rb +5 -3
  92. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  93. data/lib/rbs/collection.rb +1 -0
  94. data/lib/rbs/definition.rb +51 -34
  95. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
  96. data/lib/rbs/definition_builder.rb +83 -24
  97. data/lib/rbs/environment.rb +33 -18
  98. data/lib/rbs/environment_loader.rb +6 -1
  99. data/lib/rbs/errors.rb +24 -0
  100. data/lib/rbs/locator.rb +2 -0
  101. data/lib/rbs/method_type.rb +2 -0
  102. data/lib/rbs/namespace.rb +1 -0
  103. data/lib/rbs/parser_aux.rb +40 -3
  104. data/lib/rbs/prototype/rb.rb +20 -12
  105. data/lib/rbs/prototype/rbi.rb +11 -6
  106. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  107. data/lib/rbs/prototype/runtime.rb +7 -5
  108. data/lib/rbs/subtractor.rb +3 -3
  109. data/lib/rbs/test/hook.rb +47 -42
  110. data/lib/rbs/test/type_check.rb +7 -5
  111. data/lib/rbs/type_name.rb +14 -9
  112. data/lib/rbs/types.rb +63 -14
  113. data/lib/rbs/unit_test/spy.rb +4 -2
  114. data/lib/rbs/unit_test/type_assertions.rb +19 -13
  115. data/lib/rbs/unit_test/with_aliases.rb +3 -1
  116. data/lib/rbs/validator.rb +7 -1
  117. data/lib/rbs/version.rb +1 -1
  118. data/lib/rbs/writer.rb +10 -5
  119. data/lib/rbs.rb +1 -0
  120. data/lib/rdoc_plugin/parser.rb +2 -2
  121. data/rbs.gemspec +6 -2
  122. data/sig/ancestor_graph.rbs +5 -5
  123. data/sig/annotate/rdoc_source.rbs +2 -0
  124. data/sig/cli.rbs +2 -0
  125. data/sig/collection/config/lockfile_generator.rbs +9 -1
  126. data/sig/declarations.rbs +10 -3
  127. data/sig/definition.rbs +80 -12
  128. data/sig/definition_builder.rbs +18 -4
  129. data/sig/directives.rbs +17 -1
  130. data/sig/environment.rbs +3 -1
  131. data/sig/errors.rbs +19 -0
  132. data/sig/namespace.rbs +2 -3
  133. data/sig/parser.rbs +5 -1
  134. data/sig/prototype/rb.rbs +1 -1
  135. data/sig/resolver/constant_resolver.rbs +2 -2
  136. data/sig/resolver/context.rbs +1 -1
  137. data/sig/subtractor.rbs +1 -1
  138. data/sig/test/type_check.rbs +2 -2
  139. data/sig/type_alias_dependency.rbs +2 -2
  140. data/sig/type_alias_regularity.rbs +6 -6
  141. data/sig/type_param.rbs +4 -4
  142. data/sig/typename.rbs +8 -5
  143. data/sig/types.rbs +1 -1
  144. data/sig/unit_test/spy.rbs +2 -0
  145. data/sig/unit_test/type_assertions.rbs +2 -0
  146. data/sig/use_map.rbs +1 -1
  147. data/sig/validator.rbs +6 -2
  148. data/sig/vendorer.rbs +1 -1
  149. data/sig/writer.rbs +1 -1
  150. data/{ext/rbs_extension → src}/constants.c +35 -36
  151. data/src/ruby_objs.c +799 -0
  152. data/src/util/rbs_constant_pool.c +342 -0
  153. data/stdlib/base64/0/base64.rbs +0 -9
  154. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  155. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  156. data/stdlib/cgi/0/core.rbs +60 -3
  157. data/stdlib/cgi/0/manifest.yaml +1 -0
  158. data/stdlib/coverage/0/coverage.rbs +0 -3
  159. data/stdlib/csv/0/csv.rbs +18 -58
  160. data/stdlib/csv/0/manifest.yaml +1 -0
  161. data/stdlib/date/0/date.rbs +27 -42
  162. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
  163. data/stdlib/digest/0/digest.rbs +25 -2
  164. data/stdlib/erb/0/erb.rbs +0 -1
  165. data/stdlib/etc/0/etc.rbs +51 -34
  166. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  167. data/stdlib/io-console/0/io-console.rbs +69 -15
  168. data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
  169. data/stdlib/json/0/json.rbs +107 -120
  170. data/stdlib/logger/0/log_device.rbs +1 -1
  171. data/stdlib/logger/0/logger.rbs +3 -18
  172. data/stdlib/minitest/0/kernel.rbs +2 -2
  173. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  174. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  175. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  176. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  177. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  178. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  179. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  180. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  181. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  182. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  183. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  184. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  185. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  186. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  187. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  188. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  189. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  190. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  191. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  192. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  193. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  194. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  195. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  196. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  197. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  198. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  199. data/stdlib/minitest/0/minitest.rbs +41 -892
  200. data/stdlib/monitor/0/monitor.rbs +13 -4
  201. data/stdlib/net-http/0/net-http.rbs +42 -109
  202. data/stdlib/nkf/0/nkf.rbs +30 -0
  203. data/stdlib/objspace/0/objspace.rbs +1 -2
  204. data/stdlib/observable/0/observable.rbs +1 -1
  205. data/stdlib/open-uri/0/manifest.yaml +1 -0
  206. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  207. data/stdlib/open3/0/open3.rbs +0 -8
  208. data/stdlib/openssl/0/manifest.yaml +1 -0
  209. data/stdlib/openssl/0/openssl.rbs +235 -143
  210. data/stdlib/optparse/0/optparse.rbs +58 -18
  211. data/stdlib/pathname/0/pathname.rbs +2 -8
  212. data/stdlib/pp/0/pp.rbs +3 -1
  213. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  214. data/stdlib/pstore/0/pstore.rbs +0 -6
  215. data/stdlib/psych/0/core_ext.rbs +12 -0
  216. data/stdlib/psych/0/psych.rbs +15 -4
  217. data/stdlib/pty/0/pty.rbs +46 -4
  218. data/stdlib/rdoc/0/code_object.rbs +0 -4
  219. data/stdlib/rdoc/0/markup.rbs +10 -12
  220. data/stdlib/rdoc/0/rdoc.rbs +13 -8
  221. data/stdlib/resolv/0/resolv.rbs +21 -12
  222. data/stdlib/ripper/0/ripper.rbs +0 -2
  223. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  224. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  225. data/stdlib/singleton/0/singleton.rbs +0 -1
  226. data/stdlib/socket/0/addrinfo.rbs +1 -2
  227. data/stdlib/socket/0/basic_socket.rbs +0 -5
  228. data/stdlib/socket/0/socket.rbs +32 -27
  229. data/stdlib/socket/0/tcp_server.rbs +0 -3
  230. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  231. data/stdlib/socket/0/udp_socket.rbs +0 -1
  232. data/stdlib/socket/0/unix_server.rbs +0 -3
  233. data/stdlib/socket/0/unix_socket.rbs +4 -2
  234. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
  235. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  236. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  237. data/stdlib/time/0/time.rbs +48 -35
  238. data/stdlib/timeout/0/timeout.rbs +11 -8
  239. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  240. data/stdlib/tsort/0/tsort.rbs +0 -4
  241. data/stdlib/uri/0/common.rbs +28 -30
  242. data/stdlib/uri/0/ftp.rbs +1 -1
  243. data/stdlib/uri/0/generic.rbs +22 -18
  244. data/stdlib/uri/0/http.rbs +2 -2
  245. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  246. data/stdlib/zlib/0/buf_error.rbs +1 -70
  247. data/stdlib/zlib/0/data_error.rbs +1 -70
  248. data/stdlib/zlib/0/deflate.rbs +8 -72
  249. data/stdlib/zlib/0/error.rbs +1 -70
  250. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  251. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  252. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  253. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  254. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  255. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  256. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  257. data/stdlib/zlib/0/inflate.rbs +4 -71
  258. data/stdlib/zlib/0/mem_error.rbs +1 -70
  259. data/stdlib/zlib/0/need_dict.rbs +1 -70
  260. data/stdlib/zlib/0/stream_end.rbs +1 -70
  261. data/stdlib/zlib/0/stream_error.rbs +1 -70
  262. data/stdlib/zlib/0/version_error.rbs +1 -70
  263. data/stdlib/zlib/0/zlib.rbs +0 -2
  264. data/stdlib/zlib/0/zstream.rbs +4 -72
  265. metadata +17 -13
  266. data/ext/rbs_extension/ruby_objs.c +0 -602
  267. data/ext/rbs_extension/ruby_objs.h +0 -51
  268. 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 communicate between
3
- # Kernel#raise and `rescue` statements in `begin ... end` blocks.
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 about an exception:
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
- # Some built-in subclasses of Exception have additional methods: e.g.,
12
- # NameError#name.
16
+ # ## Built-In Exception Class Hierarchy
13
17
  #
14
- # ## Defaults
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? -> true or false
59
+ # - Exception.to_tty? -> true or false
112
60
  # -->
113
- # Returns `true` if exception messages will be sent to a tty.
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
- # - exc.exception([string]) -> an_exception or exc
67
+ # - exception(message = nil) -> self or new_exception
120
68
  # -->
121
- # With no argument, or if the argument is the same as the receiver, return the
122
- # receiver. Otherwise, create a new exception object of the same class as the
123
- # receiver, but with a message equal to `string.to_str`.
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
- # - exc == obj -> true or false
91
+ # - self == object -> true or false
130
92
  # -->
131
- # Equality---If *obj* is not an Exception, returns `false`. Otherwise, returns
132
- # `true` if *exc* and *obj* share same class, messages, and backtrace.
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
- # - exception.backtrace -> array or nil
100
+ # - backtrace -> array or nil
139
101
  # -->
140
- # Returns any backtrace associated with the exception. The backtrace is an array
141
- # of strings, each containing either ``filename:lineNo: in `method''' or
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
- # def a
145
- # raise "boom"
146
- # end
105
+ # Example (assuming the code is stored in the file named `t.rb`):
147
106
  #
148
- # def b
149
- # a()
107
+ # def division(numerator, denominator)
108
+ # numerator / denominator
150
109
  # end
151
110
  #
152
111
  # begin
153
- # b()
154
- # rescue => detail
155
- # print detail.backtrace.join("\n")
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
- # *produces:*
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
- # In the case no backtrace has been set, `nil` is returned
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
- # ex = StandardError.new
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
- # - exception.backtrace_locations -> array or nil
134
+ # - backtrace_locations -> array or nil
175
135
  # -->
176
- # Returns any backtrace associated with the exception. This method is similar to
177
- # Exception#backtrace, but the backtrace is an array of
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
- # This method is not affected by Exception#set_backtrace().
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
- # - exception.cause -> an_exception or nil
174
+ # - cause -> exception or nil
187
175
  # -->
188
- # Returns the previous exception ($!) at the time this exception was raised.
189
- # This is useful for wrapping exceptions and retaining the original exception
190
- # information.
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
- # - exception.detailed_message(highlight: bool, **opt) -> string
205
+ # - detailed_message(highlight: false, **kwargs) -> string
197
206
  # -->
198
- # Processes a string returned by #message.
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
- # It may add the class name of the exception to the end of the first line. Also,
201
- # when `highlight` keyword is true, it adds ANSI escape sequences to make the
202
- # message bold.
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
- # If you override this method, it must be tolerant for unknown keyword
205
- # arguments. All keyword arguments passed to #full_message are delegated to this
206
- # method.
224
+ # Output:
207
225
  #
208
- # This method is overridden by did_you_mean and error_highlight to add their
209
- # information.
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
- # A user-defined exception class can also define their own `detailed_message`
212
- # method to add supplemental information. When `highlight` is true, it can
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
- # * Reset (`\e[0m`)
217
- # * Bold (`\e[1m`)
218
- # * Underline (`\e[4m`)
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
- # Use escape sequences carefully even if `highlight` is true. Do not use escape
230
- # sequences to express essential information; the message should be readable
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
- # - exc.exception([string]) -> an_exception or exc
252
+ # - exception(message = nil) -> self or new_exception
238
253
  # -->
239
- # With no argument, or if the argument is the same as the receiver, return the
240
- # receiver. Otherwise, create a new exception object of the same class as the
241
- # receiver, but with a message equal to `string.to_str`.
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) -> instance
273
+ | (string | _ToS message) -> self
245
274
 
246
275
  # <!--
247
276
  # rdoc-file=error.c
248
- # - Exception.new(msg = nil) -> exception
249
- # - Exception.exception(msg = nil) -> exception
277
+ # - Exception.new(message = nil) -> exception
250
278
  # -->
251
- # Construct a new Exception object, optionally passing in a message.
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
- # - exception.inspect -> string
296
+ # - inspect -> string
258
297
  # -->
259
- # Return this exception's class name and message.
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
- # - exception.message -> string
309
+ # - message -> string
266
310
  # -->
267
- # Returns the result of invoking `exception.to_s`. Normally this returns the
268
- # exception's message or name.
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
- # - exc.set_backtrace(backtrace) -> array
319
+ # - set_backtrace(value) -> value
275
320
  # -->
276
- # Sets the backtrace information associated with `exc`. The `backtrace` must be
277
- # an array of String objects or a single String in the format described in
278
- # Exception#backtrace.
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
- def set_backtrace: (String | Array[String] backtrace) -> Array[String]
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
- # - exception.to_s -> string
424
+ # - to_s -> string
286
425
  # -->
287
- # Returns exception's message (or the name of the exception if no message is
288
- # set).
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
- # - exception.full_message(highlight: bool, order: [:top or :bottom]) -> string
437
+ # - full_message(highlight: true, order: :top) -> string
295
438
  # -->
296
- # Returns formatted string of *exception*. The returned string is formatted
297
- # using the same format that Ruby uses when printing an uncaught exceptions to
298
- # stderr.
299
- #
300
- # If *highlight* is `true` the default error handler will send the messages to a
301
- # tty.
302
- #
303
- # *order* must be either of `:top` or `:bottom`, and places the error message
304
- # and the innermost backtrace come at the top or the bottom.
305
- #
306
- # The default values of these options depend on `$stderr` and its `tty?` at the
307
- # timing of a call.
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