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.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
data/core/fiber.rbs CHANGED
@@ -57,16 +57,16 @@
57
57
  #
58
58
  # ## Non-blocking Fibers
59
59
  #
60
- # The concept of *non-blocking fiber* was introduced in Ruby 3.0. A non-blocking
61
- # fiber, when reaching a operation that would normally block the fiber (like
62
- # `sleep`, or wait for another process or I/O) will yield control to other
63
- # fibers and allow the *scheduler* to handle blocking and waking up (resuming)
64
- # this fiber when it can proceed.
60
+ # The concept of <em>non-blocking fiber</em> was introduced in Ruby 3.0. A
61
+ # non-blocking fiber, when reaching an operation that would normally block the
62
+ # fiber (like `sleep`, or wait for another process or I/O) will yield control to
63
+ # other fibers and allow the *scheduler* to handle blocking and waking up
64
+ # (resuming) this fiber when it can proceed.
65
65
  #
66
66
  # For a Fiber to behave as non-blocking, it need to be created in Fiber.new with
67
- # `blocking: false` (which is the default), and Fiber.scheduler should be set
68
- # with Fiber.set_scheduler. If Fiber.scheduler is not set in the current thread,
69
- # blocking and non-blocking fibers' behavior is identical.
67
+ # <code>blocking: false</code> (which is the default), and Fiber.scheduler
68
+ # should be set with Fiber.set_scheduler. If Fiber.scheduler is not set in the
69
+ # current thread, blocking and non-blocking fibers' behavior is identical.
70
70
  #
71
71
  # Ruby doesn't provide a scheduler class: it is expected to be implemented by
72
72
  # the user and correspond to Fiber::Scheduler.
@@ -82,7 +82,8 @@ class Fiber < Object
82
82
  # -->
83
83
  # Returns the value of the fiber storage variable identified by `key`.
84
84
  #
85
- # The `key` must be a symbol, and the value is set by Fiber#[]= or Fiber#store.
85
+ # The `key` must be a symbol, and the value is set by Fiber#[]= or
86
+ # Fiber#storage.
86
87
  #
87
88
  # See also Fiber::[]=.
88
89
  #
@@ -101,12 +102,23 @@ class Fiber < Object
101
102
  #
102
103
  def self.[]=: [A] (Symbol, A) -> A
103
104
 
105
+ # <!--
106
+ # rdoc-file=cont.c
107
+ # - Fiber.blocking{|fiber| ...} -> result
108
+ # -->
109
+ # Forces the fiber to be blocking for the duration of the block. Returns the
110
+ # result of the block.
111
+ #
112
+ # See the "Non-blocking fibers" section in class docs for details.
113
+ #
114
+ def self.blocking: [T] () { (Fiber) -> T } -> T
115
+
104
116
  # <!--
105
117
  # rdoc-file=cont.c
106
118
  # - Fiber.blocking? -> false or 1
107
119
  # -->
108
120
  # Returns `false` if the current fiber is non-blocking. Fiber is non-blocking if
109
- # it was created via passing `blocking: false` to Fiber.new, or via
121
+ # it was created via passing <code>blocking: false</code> to Fiber.new, or via
110
122
  # Fiber.schedule.
111
123
  #
112
124
  # If the current Fiber is blocking, the method returns 1. Future developments
@@ -164,18 +176,18 @@ class Fiber < Object
164
176
  # ...1 sec pause here...
165
177
  # I slept well
166
178
  #
167
- # ...e.g. on the first blocking operation inside the Fiber (`sleep(1)`), the
168
- # control is yielded to the outside code (main fiber), and *at the end of that
169
- # execution*, the scheduler takes care of properly resuming all the blocked
170
- # fibers.
179
+ # ...e.g. on the first blocking operation inside the Fiber
180
+ # (<code>sleep(1)</code>), the control is yielded to the outside code (main
181
+ # fiber), and *at the end of that execution*, the scheduler takes care of
182
+ # properly resuming all the blocked fibers.
171
183
  #
172
184
  # Note that the behavior described above is how the method is *expected* to
173
185
  # behave, actual behavior is up to the current scheduler's implementation of
174
186
  # Fiber::Scheduler#fiber method. Ruby doesn't enforce this method to behave in
175
187
  # any particular way.
176
188
  #
177
- # If the scheduler is not set, the method raises `RuntimeError (No scheduler is
178
- # available!)`.
189
+ # If the scheduler is not set, the method raises <code>RuntimeError (No
190
+ # scheduler is available!)</code>.
179
191
  #
180
192
  def self.schedule: () { () -> void } -> Fiber
181
193
 
@@ -196,11 +208,11 @@ class Fiber < Object
196
208
  # - Fiber.set_scheduler(scheduler) -> scheduler
197
209
  # -->
198
210
  # Sets the Fiber scheduler for the current thread. If the scheduler is set,
199
- # non-blocking fibers (created by Fiber.new with `blocking: false`, or by
200
- # Fiber.schedule) call that scheduler's hook methods on potentially blocking
201
- # operations, and the current thread will call scheduler's `close` method on
202
- # finalization (allowing the scheduler to properly manage all non-finished
203
- # fibers).
211
+ # non-blocking fibers (created by Fiber.new with <code>blocking: false</code>,
212
+ # or by Fiber.schedule) call that scheduler's hook methods on potentially
213
+ # blocking operations, and the current thread will call scheduler's `close`
214
+ # method on finalization (allowing the scheduler to properly manage all
215
+ # non-finished fibers).
204
216
  #
205
217
  # `scheduler` can be an object of any class corresponding to Fiber::Scheduler.
206
218
  # Its implementation is up to the user.
@@ -239,13 +251,13 @@ class Fiber < Object
239
251
  # f.resume # prints: current: nil
240
252
  # # ... and so on ...
241
253
  #
242
- # If `blocking: false` is passed to `Fiber.new`, *and* current thread has a
243
- # Fiber.scheduler defined, the Fiber becomes non-blocking (see "Non-blocking
244
- # Fibers" section in class docs).
254
+ # If <code>blocking: false</code> is passed to <code>Fiber.new</code>, *and*
255
+ # current thread has a Fiber.scheduler defined, the Fiber becomes non-blocking
256
+ # (see "Non-blocking Fibers" section in class docs).
245
257
  #
246
258
  # If the `storage` is unspecified, the default is to inherit a copy of the
247
- # storage from the current fiber. This is the same as specifying `storage:
248
- # true`.
259
+ # storage from the current fiber. This is the same as specifying <code>storage:
260
+ # true</code>.
249
261
  #
250
262
  # Fiber[:x] = 1
251
263
  # Fiber.new do
@@ -265,8 +277,8 @@ class Fiber < Object
265
277
  # Otherwise, the given `storage` is used as the new fiber's storage, and it must
266
278
  # be an instance of Hash.
267
279
  #
268
- # Explicitly using `storage: true` is currently experimental and may change in
269
- # the future.
280
+ # Explicitly using <code>storage: true</code> is currently experimental and may
281
+ # change in the future.
270
282
  #
271
283
  def initialize: (?blocking: boolish, ?storage: true | Hash[interned, untyped] | nil) { (?) -> void } -> void
272
284
 
@@ -352,8 +364,8 @@ class Fiber < Object
352
364
  # - fiber.blocking? -> true or false
353
365
  # -->
354
366
  # Returns `true` if `fiber` is blocking and `false` otherwise. Fiber is
355
- # non-blocking if it was created via passing `blocking: false` to Fiber.new, or
356
- # via Fiber.schedule.
367
+ # non-blocking if it was created via passing <code>blocking: false</code> to
368
+ # Fiber.new, or via Fiber.schedule.
357
369
  #
358
370
  # Note that, even if the method returns `false`, the fiber behaves differently
359
371
  # only if Fiber.scheduler is set in the current thread.
@@ -377,9 +389,9 @@ class Fiber < Object
377
389
  # the given fiber and no other fiber, returning `nil` to another fiber if that
378
390
  # fiber was calling #resume or #transfer.
379
391
  #
380
- # `Fiber#kill` only interrupts another fiber when it is in Fiber.yield. If
381
- # called on the current fiber then it raises that exception at the `Fiber#kill`
382
- # call site.
392
+ # <code>Fiber#kill</code> only interrupts another fiber when it is in
393
+ # Fiber.yield. If called on the current fiber then it raises that exception at
394
+ # the <code>Fiber#kill</code> call site.
383
395
  #
384
396
  # If the fiber has not been started, transition directly to the terminated
385
397
  # state.
@@ -392,30 +404,38 @@ class Fiber < Object
392
404
 
393
405
  # <!--
394
406
  # rdoc-file=cont.c
395
- # - fiber.raise -> obj
396
- # - fiber.raise(string) -> obj
397
- # - fiber.raise(exception [, string [, array]]) -> obj
407
+ # - raise(exception, message = exception.to_s, backtrace = nil, cause: $!)
408
+ # - raise(message = nil, cause: $!)
398
409
  # -->
399
- # Raises an exception in the fiber at the point at which the last `Fiber.yield`
400
- # was called. If the fiber has not been started or has already run to
401
- # completion, raises `FiberError`. If the fiber is yielding, it is resumed. If
402
- # it is transferring, it is transferred into. But if it is resuming, raises
403
- # `FiberError`.
404
- #
405
- # With no arguments, raises a `RuntimeError`. With a single `String` argument,
406
- # raises a `RuntimeError` with the string as a message. Otherwise, the first
407
- # parameter should be the name of an `Exception` class (or an object that
408
- # returns an `Exception` object when sent an `exception` message). The optional
409
- # second parameter sets the message associated with the exception, and the third
410
- # parameter is an array of callback information. Exceptions are caught by the
411
- # `rescue` clause of `begin...end` blocks.
410
+ # Raises an exception in the fiber at the point at which the last
411
+ # <code>Fiber.yield</code> was called.
412
+ #
413
+ # f = Fiber.new {
414
+ # puts "Before the yield"
415
+ # Fiber.yield 1 # -- exception will be raised here
416
+ # puts "After the yield"
417
+ # }
418
+ #
419
+ # p f.resume
420
+ # f.raise "Gotcha"
421
+ #
422
+ # Output
423
+ #
424
+ # Before the first yield
425
+ # 1
426
+ # t.rb:8:in 'Fiber.yield': Gotcha (RuntimeError)
427
+ # from t.rb:8:in 'block in <main>'
428
+ #
429
+ # If the fiber has not been started or has already run to completion, raises
430
+ # `FiberError`. If the fiber is yielding, it is resumed. If it is transferring,
431
+ # it is transferred into. But if it is resuming, raises `FiberError`.
412
432
  #
413
433
  # Raises `FiberError` if called on a Fiber belonging to another `Thread`.
414
434
  #
415
- # See Kernel#raise for more information.
435
+ # See Kernel#raise for more information on arguments.
416
436
  #
417
- def raise: (?string msg) -> untyped
418
- | (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace) -> untyped
437
+ def raise: (?string msg, ?cause: Exception?) -> untyped
438
+ | (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace, ?cause: Exception?) -> untyped
419
439
 
420
440
  # <!--
421
441
  # rdoc-file=cont.c
@@ -452,8 +472,8 @@ class Fiber < Object
452
472
  # important fiber-storage state. You should mostly prefer to assign specific
453
473
  # keys in the storage using Fiber::[]=.
454
474
  #
455
- # You can also use `Fiber.new(storage: nil)` to create a fiber with an empty
456
- # storage.
475
+ # You can also use <code>Fiber.new(storage: nil)</code> to create a fiber with
476
+ # an empty storage.
457
477
  #
458
478
  # Example:
459
479
  #