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/enumerator.rbs CHANGED
@@ -137,7 +137,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
137
137
 
138
138
  # <!--
139
139
  # rdoc-file=enumerator.c
140
- # - Enumerator.produce(initial = nil) { |prev| block } -> enumerator
140
+ # - Enumerator.produce(initial = nil, size: nil) { |prev| block } -> enumerator
141
141
  # -->
142
142
  # Creates an infinite enumerator from any block, just called over and over. The
143
143
  # result of the previous iteration is passed to the next one. If `initial` is
@@ -169,6 +169,30 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
169
169
  # Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
170
170
  # # => ["7", "+", "38", "/", "6"]
171
171
  #
172
+ # The optional `size` keyword argument specifies the size of the enumerator,
173
+ # which can be retrieved by Enumerator#size. It can be an integer,
174
+ # <code>Float::INFINITY</code>, a callable object (such as a lambda), or `nil`
175
+ # to indicate unknown size. When not specified, the size defaults to
176
+ # <code>Float::INFINITY</code>.
177
+ #
178
+ # # Infinite enumerator
179
+ # enum = Enumerator.produce(1, size: Float::INFINITY, &:succ)
180
+ # enum.size # => Float::INFINITY
181
+ #
182
+ # # Finite enumerator with known/computable size
183
+ # abs_dir = File.expand_path("./baz") # => "/foo/bar/baz"
184
+ # traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) {
185
+ # raise StopIteration if it == "/"
186
+ # File.dirname(it)
187
+ # }
188
+ # traverser.size # => 4
189
+ #
190
+ # # Finite enumerator with unknown size
191
+ # calendar = Enumerator.produce(Date.today, size: nil) {
192
+ # it.monday? ? raise(StopIteration) : it + 1
193
+ # }
194
+ # calendar.size # => nil
195
+ #
172
196
  def self.produce: [T] () { (T? prev) -> T } -> Enumerator[T, bot]
173
197
  | [T] (T initial) { (T prev) -> T } -> Enumerator[T, bot]
174
198
 
@@ -282,7 +306,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
282
306
  #
283
307
  # Iteration is defined by the given block, in which a "yielder" object, given as
284
308
  # block parameter, can be used to yield a value by calling the `yield` method
285
- # (aliased as `<<`):
309
+ # (aliased as <code><<</code>):
286
310
  #
287
311
  # fib = Enumerator.new do |y|
288
312
  # a = b = 1
@@ -446,8 +470,39 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
446
470
  # loop.size # => Float::INFINITY
447
471
  # (1..100).drop_while.size # => nil
448
472
  #
473
+ # Note that enumerator size might be inaccurate, and should be rather treated as
474
+ # a hint. For example, there is no check that the size provided to ::new is
475
+ # accurate:
476
+ #
477
+ # e = Enumerator.new(5) { |y| 2.times { y << it} }
478
+ # e.size # => 5
479
+ # e.to_a.size # => 2
480
+ #
481
+ # Another example is an enumerator created by ::produce without a `size`
482
+ # argument. Such enumerators return `Infinity` for size, but this is inaccurate
483
+ # if the passed block raises StopIteration:
484
+ #
485
+ # e = Enumerator.produce(1) { it + 1 }
486
+ # e.size # => Infinity
487
+ #
488
+ # e = Enumerator.produce(1) { it > 3 ? raise(StopIteration) : it + 1 }
489
+ # e.size # => Infinity
490
+ # e.to_a.size # => 4
491
+ #
449
492
  def size: () -> (Integer | Float)?
450
493
 
494
+ # <!--
495
+ # rdoc-file=enumerator.c
496
+ # - e + enum -> enumerator
497
+ # -->
498
+ # Returns an enumerator object generated from this enumerator and a given
499
+ # enumerable.
500
+ #
501
+ # e = (1..3).each + [4, 5]
502
+ # e.to_a #=> [1, 2, 3, 4, 5]
503
+ #
504
+ def +: [Elem2] (::_Each[Elem2]) -> ::Enumerator::Chain[Elem | Elem2]
505
+
451
506
  # <!--
452
507
  # rdoc-file=enumerator.c
453
508
  # - e.with_index(offset = 0) {|(*args), idx| ... }
@@ -578,6 +633,14 @@ class Enumerator::Lazy[out Elem, out Return = void] < Enumerator[Elem, Return]
578
633
  # Like Enumerable#compact, but chains operation to be lazy-evaluated.
579
634
  #
580
635
  def compact: () -> Enumerator::Lazy[Elem, Return]
636
+
637
+ # <!--
638
+ # rdoc-file=enumerator.c
639
+ # - lzy.eager -> enum
640
+ # -->
641
+ # Returns a non-lazy Enumerator converted from the lazy enumerator.
642
+ #
643
+ def eager: () -> ::Enumerator[Elem, Return]
581
644
  end
582
645
 
583
646
  # <!-- rdoc-file=enumerator.c -->
data/core/errno.rbs CHANGED
@@ -9,7 +9,7 @@
9
9
  #
10
10
  # When the Ruby interpreter interacts with the operating system and receives
11
11
  # such an error code (e.g., `2`), it maps the code to a particular Ruby
12
- # exception class (e.g., `Errno::ENOENT`):
12
+ # exception class (e.g., <code>Errno::ENOENT</code>):
13
13
  #
14
14
  # File.open('nosuch.txt')
15
15
  # # => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)
@@ -25,7 +25,8 @@
25
25
  # Errno::ENOENT.superclass # => SystemCallError
26
26
  # Errno::ENOENT::Errno # => 2
27
27
  #
28
- # The names of nested classes are returned by method `Errno.constants`:
28
+ # The names of nested classes are returned by method
29
+ # <code>Errno.constants</code>:
29
30
  #
30
31
  # Errno.constants.size # => 158
31
32
  # Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]
@@ -38,6 +39,14 @@
38
39
  # Errno::ENOENT::Errno # => 2
39
40
  # Errno::ENOTCAPABLE::Errno # => 0
40
41
  #
42
+ # Each class in Errno can be created with optional messages:
43
+ #
44
+ # Errno::EPIPE.new # => #<Errno::EPIPE: Broken pipe>
45
+ # Errno::EPIPE.new("foo") # => #<Errno::EPIPE: Broken pipe - foo>
46
+ # Errno::EPIPE.new("foo", "here") # => #<Errno::EPIPE: Broken pipe @ here - foo>
47
+ #
48
+ # See SystemCallError.new.
49
+ #
41
50
  module Errno
42
51
  class NOERROR < SystemCallError
43
52
  Errno: 0
data/core/errors.rbs CHANGED
@@ -6,7 +6,7 @@
6
6
  #
7
7
  # [1, 2, 3].first(4, 5)
8
8
  #
9
- # *raises the exception:*
9
+ # <em>raises the exception:</em>
10
10
  #
11
11
  # ArgumentError: wrong number of arguments (given 2, expected 1)
12
12
  #
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # [1, 2, 3].first(-4)
16
16
  #
17
- # *raises the exception:*
17
+ # <em>raises the exception:</em>
18
18
  #
19
19
  # ArgumentError: negative array size
20
20
  #
@@ -66,7 +66,7 @@ end
66
66
  #
67
67
  # [1, 2, 3].freeze << 4
68
68
  #
69
- # *raises the exception:*
69
+ # <em>raises the exception:</em>
70
70
  #
71
71
  # FrozenError: can't modify frozen Array
72
72
  #
@@ -115,11 +115,11 @@ end
115
115
  # puts "Note: You will typically use Signal.trap instead."
116
116
  # end
117
117
  #
118
- # *produces:*
118
+ # <em>produces:</em>
119
119
  #
120
120
  # Press ctrl-C when you get bored
121
121
  #
122
- # *then waits until it is interrupted with Control-C and then prints:*
122
+ # <em>then waits until it is interrupted with Control-C and then prints:</em>
123
123
  #
124
124
  # Note: You will typically use Signal.trap instead.
125
125
  #
@@ -184,7 +184,7 @@ end
184
184
  #
185
185
  # require 'this/file/does/not/exist'
186
186
  #
187
- # *raises the exception:*
187
+ # <em>raises the exception:</em>
188
188
  #
189
189
  # LoadError: no such file to load -- this/file/does/not/exist
190
190
  #
@@ -209,7 +209,7 @@ end
209
209
  # end
210
210
  # call_block
211
211
  #
212
- # *raises the exception:*
212
+ # <em>raises the exception:</em>
213
213
  #
214
214
  # LocalJumpError: no block given (yield)
215
215
  #
@@ -220,7 +220,7 @@ end
220
220
  # end
221
221
  # get_me_a_return.call
222
222
  #
223
- # *raises the exception:*
223
+ # <em>raises the exception:</em>
224
224
  #
225
225
  # LocalJumpError: unexpected return
226
226
  #
@@ -248,7 +248,7 @@ end
248
248
  #
249
249
  # puts foo
250
250
  #
251
- # *raises the exception:*
251
+ # <em>raises the exception:</em>
252
252
  #
253
253
  # NameError: undefined local variable or method `foo' for main:Object
254
254
  #
@@ -256,7 +256,7 @@ end
256
256
  #
257
257
  # Integer.const_set :answer, 42
258
258
  #
259
- # *raises the exception:*
259
+ # <em>raises the exception:</em>
260
260
  #
261
261
  # NameError: wrong constant name answer
262
262
  #
@@ -302,9 +302,15 @@ class NameError[T] < StandardError
302
302
  def receiver: () -> T?
303
303
  end
304
304
 
305
+ # <!-- rdoc-file=error.c -->
306
+ # Raised when matching pattern not found.
307
+ #
305
308
  class NoMatchingPatternError < StandardError
306
309
  end
307
310
 
311
+ # <!-- rdoc-file=error.c -->
312
+ # Raised when matching key not found.
313
+ #
308
314
  class NoMatchingPatternKeyError[M, K] < NoMatchingPatternError
309
315
  # <!--
310
316
  # rdoc-file=error.c
@@ -344,7 +350,7 @@ end
344
350
  #
345
351
  # "hello".to_ary
346
352
  #
347
- # *raises the exception:*
353
+ # <em>raises the exception:</em>
348
354
  #
349
355
  # NoMethodError: undefined method `to_ary' for an instance of String
350
356
  #
@@ -354,11 +360,13 @@ class NoMethodError[T] < NameError[T]
354
360
  # - NoMethodError.new(msg=nil, name=nil, args=nil, private=false, receiver: nil) -> no_method_error
355
361
  # -->
356
362
  # Construct a NoMethodError exception for a method of the given name called with
357
- # the given arguments. The name may be accessed using the `#name` method on the
358
- # resulting object, and the arguments using the `#args` method.
363
+ # the given arguments. The name may be accessed using the <code>#name</code>
364
+ # method on the resulting object, and the arguments using the <code>#args</code>
365
+ # method.
359
366
  #
360
367
  # If *private* argument were passed, it designates method was attempted to call
361
- # in private context, and can be accessed with `#private_call?` method.
368
+ # in private context, and can be accessed with <code>#private_call?</code>
369
+ # method.
362
370
  #
363
371
  # *receiver* argument stores an object whose method was called.
364
372
  #
@@ -387,8 +395,8 @@ end
387
395
  # exception if the underlying operating system or Ruby runtime does not support
388
396
  # them.
389
397
  #
390
- # Note that if `fork` raises a `NotImplementedError`, then `respond_to?(:fork)`
391
- # returns `false`.
398
+ # Note that if `fork` raises a `NotImplementedError`, then
399
+ # <code>respond_to?(:fork)</code> returns `false`.
392
400
  #
393
401
  class NotImplementedError < ScriptError
394
402
  end
@@ -398,7 +406,7 @@ end
398
406
  #
399
407
  # [1, 2, 3].drop(1 << 100)
400
408
  #
401
- # *raises the exception:*
409
+ # <em>raises the exception:</em>
402
410
  #
403
411
  # RangeError: bignum too big to convert into `long'
404
412
  #
@@ -410,7 +418,7 @@ end
410
418
  #
411
419
  # Regexp.new("?")
412
420
  #
413
- # *raises the exception:*
421
+ # <em>raises the exception:</em>
414
422
  #
415
423
  # RegexpError: target of repeat operator is not specified: /?/
416
424
  #
@@ -423,7 +431,7 @@ end
423
431
  #
424
432
  # raise "ouch"
425
433
  #
426
- # *raises the exception:*
434
+ # <em>raises the exception:</em>
427
435
  #
428
436
  # RuntimeError: ouch
429
437
  #
@@ -455,7 +463,7 @@ end
455
463
  # puts "received Exception #{e}"
456
464
  # end
457
465
  #
458
- # *produces:*
466
+ # <em>produces:</em>
459
467
  #
460
468
  # received Exception SIGHUP
461
469
  #
@@ -496,7 +504,7 @@ end
496
504
  #
497
505
  # require 'does/not/exist' rescue "Hi"
498
506
  #
499
- # *raises the exception:*
507
+ # <em>raises the exception:</em>
500
508
  #
501
509
  # LoadError: no such file to load -- does/not/exist
502
510
  #
@@ -514,7 +522,7 @@ end
514
522
  # end
515
523
  # puts "Done!"
516
524
  #
517
- # *produces:*
525
+ # <em>produces:</em>
518
526
  #
519
527
  # Hello
520
528
  # Done!
@@ -554,7 +562,7 @@ end
554
562
  #
555
563
  # eval("1+1=2")
556
564
  #
557
- # *raises the exception:*
565
+ # <em>raises the exception:</em>
558
566
  #
559
567
  # SyntaxError: (eval):1: syntax error, unexpected '=', expecting $end
560
568
  #
@@ -581,20 +589,41 @@ end
581
589
  #
582
590
  # File.open("does/not/exist")
583
591
  #
584
- # *raises the exception:*
592
+ # <em>raises the exception:</em>
585
593
  #
586
594
  # Errno::ENOENT: No such file or directory - does/not/exist
587
595
  #
588
596
  class SystemCallError < StandardError
589
597
  # <!--
590
598
  # rdoc-file=error.c
591
- # - SystemCallError.new(msg, errno) -> system_call_error_subclass
599
+ # - SystemCallError.new(msg, errno = nil, func = nil) -> system_call_error_subclass
592
600
  # -->
593
601
  # If *errno* corresponds to a known system error code, constructs the
594
602
  # appropriate Errno class for that error, otherwise constructs a generic
595
603
  # SystemCallError object. The error number is subsequently available via the
596
604
  # #errno method.
597
605
  #
606
+ # If only numeric object is given, it is treated as an Integer *errno*, and
607
+ # *msg* is omitted, otherwise the first argument *msg* is used as the additional
608
+ # error message.
609
+ #
610
+ # SystemCallError.new(Errno::EPIPE::Errno)
611
+ # #=> #<Errno::EPIPE: Broken pipe>
612
+ #
613
+ # SystemCallError.new("foo")
614
+ # #=> #<SystemCallError: unknown error - foo>
615
+ #
616
+ # SystemCallError.new("foo", Errno::EPIPE::Errno)
617
+ # #=> #<Errno::EPIPE: Broken pipe - foo>
618
+ #
619
+ # If *func* is not `nil`, it is appended to the message with "<code> @ </code>".
620
+ #
621
+ # SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
622
+ # #=> #<Errno::EPIPE: Broken pipe @ here - foo>
623
+ #
624
+ # A subclass of SystemCallError can also be instantiated via the `new` method of
625
+ # the subclass. See Errno.
626
+ #
598
627
  def initialize: (string msg, Integer errno) -> void
599
628
 
600
629
  # <!--
@@ -658,7 +687,7 @@ end
658
687
  # end
659
688
  # me_myself_and_i
660
689
  #
661
- # *raises the exception:*
690
+ # <em>raises the exception:</em>
662
691
  #
663
692
  # SystemStackError: stack level too deep
664
693
  #
@@ -685,7 +714,7 @@ end
685
714
  #
686
715
  # [1, 2, 3].first("two")
687
716
  #
688
- # *raises the exception:*
717
+ # <em>raises the exception:</em>
689
718
  #
690
719
  # TypeError: no implicit conversion of String into Integer
691
720
  #
@@ -698,7 +727,7 @@ end
698
727
  #
699
728
  # throw "foo", "bar"
700
729
  #
701
- # *raises the exception:*
730
+ # <em>raises the exception:</em>
702
731
  #
703
732
  # UncaughtThrowError: uncaught throw "foo"
704
733
  #
@@ -714,7 +743,7 @@ class UncaughtThrowError < ArgumentError
714
743
  #
715
744
  # throw "foo", "bar"
716
745
  #
717
- # *raises the exception:*
746
+ # <em>raises the exception:</em>
718
747
  #
719
748
  # UncaughtThrowError: uncaught throw "foo"
720
749
  #
data/core/exception.rbs CHANGED
@@ -102,7 +102,7 @@ class Exception
102
102
  # Returns the backtrace (the list of code locations that led to the exception),
103
103
  # as an array of strings.
104
104
  #
105
- # Example (assuming the code is stored in the file named `t.rb`):
105
+ # Example (assuming the code is stored in the file named <code>t.rb</code>):
106
106
  #
107
107
  # def division(numerator, denominator)
108
108
  # numerator / denominator
@@ -118,7 +118,7 @@ class Exception
118
118
  # # String
119
119
  # end
120
120
  #
121
- # The value returned by this method migth be adjusted when raising (see
121
+ # The value returned by this method might be adjusted when raising (see
122
122
  # Kernel#raise), or during intermediate handling by #set_backtrace.
123
123
  #
124
124
  # See also #backtrace_locations that provide the same value, as structured
@@ -136,7 +136,7 @@ class Exception
136
136
  # Returns the backtrace (the list of code locations that led to the exception),
137
137
  # as an array of Thread::Backtrace::Location instances.
138
138
  #
139
- # Example (assuming the code is stored in the file named `t.rb`):
139
+ # Example (assuming the code is stored in the file named <code>t.rb</code>):
140
140
  #
141
141
  # def division(numerator, denominator)
142
142
  # numerator / denominator
@@ -173,8 +173,8 @@ class Exception
173
173
  # rdoc-file=error.c
174
174
  # - cause -> exception or nil
175
175
  # -->
176
- # Returns the previous value of global variable `$!`, which may be `nil` (see
177
- # [Global Variables](rdoc-ref:exceptions.md@Global+Variables)):
176
+ # Returns the previous value of global variable <code>$!</code>, which may be
177
+ # `nil` (see [Global Variables](rdoc-ref:exceptions.md@Global+Variables)):
178
178
  #
179
179
  # begin
180
180
  # raise('Boom 0')
@@ -237,10 +237,10 @@ class Exception
237
237
  # An overriding method must be tolerant of passed keyword arguments, which may
238
238
  # include (but may not be limited to):
239
239
  #
240
- # * `:highlight`.
241
- # * `:did_you_mean`.
242
- # * `:error_highlight`.
243
- # * `:syntax_suggest`.
240
+ # * <code>:highlight</code>.
241
+ # * <code>:did_you_mean</code>.
242
+ # * <code>:error_highlight</code>.
243
+ # * <code>:syntax_suggest</code>.
244
244
  #
245
245
  # An overriding method should also be careful with ANSI code enhancements; see
246
246
  # [Messages](rdoc-ref:exceptions.md@Messages).
@@ -444,10 +444,10 @@ class Exception
444
444
  # message.
445
445
  # * Includes the [backtrace](rdoc-ref:exceptions.md@Backtraces):
446
446
  #
447
- # * If the value of keyword `order` is `: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.
447
+ # * If the value of keyword `order` is <code>:top</code> (the default),
448
+ # lists the error message and the innermost backtrace entry first.
449
+ # * If the value of keyword `order` is <code>:bottom</code>, lists the
450
+ # error message the innermost entry last.
451
451
  #
452
452
  # Example:
453
453
  #