rbs 4.0.0.dev.4 → 4.1.0.pre.2

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
data/core/nil_class.rbs CHANGED
@@ -19,7 +19,7 @@
19
19
  # * #to_s
20
20
  #
21
21
  # While `nil` doesn't have an explicitly defined #to_hash method, it can be used
22
- # in `**` unpacking, not adding any keyword arguments.
22
+ # in <code>**</code> unpacking, not adding any keyword arguments.
23
23
  #
24
24
  # Another method provides inspection:
25
25
  #
@@ -97,7 +97,7 @@ class NilClass
97
97
  # rdoc-file=object.c
98
98
  # - inspect -> 'nil'
99
99
  # -->
100
- # Returns string `'nil'`:
100
+ # Returns string <code>'nil'</code>:
101
101
  #
102
102
  # nil.inspect # => "nil"
103
103
  #
@@ -107,12 +107,13 @@ class NilClass
107
107
  # rdoc-file=object.c
108
108
  # - nil.nil? -> true
109
109
  # -->
110
- # Returns `true`. For all other objects, method `nil?` returns `false`.
110
+ # Returns `true`. For all other objects, method <code>nil?</code> returns
111
+ # `false`.
111
112
  #
112
113
  def nil?: () -> true
113
114
 
114
115
  # <!--
115
- # rdoc-file=rational.c
116
+ # rdoc-file=nilclass.rb
116
117
  # - rationalize(eps = nil) -> (0/1)
117
118
  # -->
118
119
  # Returns zero as a Rational:
@@ -134,7 +135,7 @@ class NilClass
134
135
  def to_a: () -> []
135
136
 
136
137
  # <!--
137
- # rdoc-file=complex.c
138
+ # rdoc-file=nilclass.rb
138
139
  # - to_c -> (0+0i)
139
140
  # -->
140
141
  # Returns zero as a Complex:
@@ -174,7 +175,7 @@ class NilClass
174
175
  def to_i: () -> 0
175
176
 
176
177
  # <!--
177
- # rdoc-file=rational.c
178
+ # rdoc-file=nilclass.rb
178
179
  # - to_r -> (0/1)
179
180
  # -->
180
181
  # Returns zero as a Rational:
data/core/numeric.rbs CHANGED
@@ -23,10 +23,10 @@
23
23
  # two-member Array containing an object that has been coerced into an instance
24
24
  # of the new class and `self` (see #coerce).
25
25
  #
26
- # Inheriting classes should also implement arithmetic operator methods (`+`,
27
- # `-`, `*` and `/`) and the `<=>` operator (see Comparable). These methods may
28
- # rely on `coerce` to ensure interoperability with instances of other numeric
29
- # classes.
26
+ # Inheriting classes should also implement arithmetic operator methods
27
+ # (<code>+</code>, <code>-</code>, <code>*</code> and <code>/</code>) and the
28
+ # <code><=></code> operator (see Comparable). These methods may rely on `coerce`
29
+ # to ensure interoperability with instances of other numeric classes.
30
30
  #
31
31
  # class Tally < Numeric
32
32
  # def initialize(string)
@@ -88,7 +88,7 @@
88
88
  #
89
89
  # * #finite?: Returns true unless `self` is infinite or not a number.
90
90
  # * #infinite?: Returns -1, `nil` or +1, depending on whether `self` is
91
- # `-Infinity<tt>, finite, or <tt>+Infinity`.
91
+ # <code>-Infinity<tt>, finite, or <tt>+Infinity</code>.
92
92
  # * #integer?: Returns whether `self` is an integer.
93
93
  # * #negative?: Returns whether `self` is negative.
94
94
  # * #nonzero?: Returns whether `self` is not zero.
@@ -119,27 +119,29 @@
119
119
  # Math::PI otherwise.
120
120
  # * #ceil: Returns the smallest number greater than or equal to `self`, to a
121
121
  # given precision.
122
- # * #coerce: Returns array `[coerced_self, coerced_other]` for the given other
123
- # value.
122
+ # * #coerce: Returns array <code>[coerced_self, coerced_other]</code> for the
123
+ # given other value.
124
124
  # * #conj (aliased as #conjugate): Returns the complex conjugate of `self`.
125
125
  # * #denominator: Returns the denominator (always positive) of the Rational
126
126
  # representation of `self`.
127
127
  # * #div: Returns the value of `self` divided by the given value and converted
128
128
  # to an integer.
129
- # * #divmod: Returns array `[quotient, modulus]` resulting from dividing
130
- # `self` the given divisor.
129
+ # * #divmod: Returns array <code>[quotient, modulus]</code> resulting from
130
+ # dividing `self` the given divisor.
131
131
  # * #fdiv: Returns the Float result of dividing `self` by the given divisor.
132
132
  # * #floor: Returns the largest number less than or equal to `self`, to a
133
133
  # given precision.
134
- # * #i: Returns the Complex object `Complex(0, self)`. the given value.
134
+ # * #i: Returns the Complex object <code>Complex(0, self)</code>. the given
135
+ # value.
135
136
  # * #imaginary (aliased as #imag): Returns the imaginary part of the `self`.
136
137
  # * #numerator: Returns the numerator of the Rational representation of
137
138
  # `self`; has the same sign as `self`.
138
- # * #polar: Returns the array `[self.abs, self.arg]`.
139
+ # * #polar: Returns the array <code>[self.abs, self.arg]</code>.
139
140
  # * #quo: Returns the value of `self` divided by the given value.
140
141
  # * #real: Returns the real part of `self`.
141
- # * #rect (aliased as #rectangular): Returns the array `[self, 0]`.
142
- # * #remainder: Returns `self-arg*(self/arg).truncate` for the given `arg`.
142
+ # * #rect (aliased as #rectangular): Returns the array <code>[self, 0]</code>.
143
+ # * #remainder: Returns <code>self-arg*(self/arg).truncate</code> for the
144
+ # given `arg`.
143
145
  # * #round: Returns the value of `self` rounded to the nearest value for the
144
146
  # given a precision.
145
147
  # * #to_c: Returns the Complex representation of `self`.
@@ -156,11 +158,14 @@
156
158
  class Numeric
157
159
  include Comparable
158
160
 
161
+ # The direction you can round
162
+ type round_mode = :up | :down | :even | 'up' | 'down' | 'even' | string | nil
163
+
159
164
  # <!--
160
165
  # rdoc-file=numeric.c
161
166
  # - self % other -> real_numeric
162
167
  # -->
163
- # Returns `self` modulo `other` as a real number.
168
+ # Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
164
169
  #
165
170
  # Of the Core and Standard Library classes, only Rational uses this
166
171
  # implementation.
@@ -201,7 +206,7 @@ class Numeric
201
206
  # -->
202
207
  # Returns `self`.
203
208
  #
204
- def +@: () -> Numeric
209
+ def +@: () -> self
205
210
 
206
211
  # Performs subtraction: the class of the resulting object depends on the class
207
212
  # of `numeric`.
@@ -212,15 +217,23 @@ class Numeric
212
217
  # rdoc-file=numeric.c
213
218
  # - -self -> numeric
214
219
  # -->
215
- # Unary Minus---Returns the receiver, negated.
220
+ # Returns `self`, negated.
216
221
  #
217
- def -@: () -> Numeric
222
+ def -@: () -> self
218
223
 
219
224
  # <!--
220
225
  # rdoc-file=numeric.c
221
226
  # - self <=> other -> zero or nil
222
227
  # -->
223
- # Returns zero if `self` is the same as `other`, `nil` otherwise.
228
+ # Compares `self` and `other`.
229
+ #
230
+ # Returns:
231
+ #
232
+ # * Zero, if `self` is the same as `other`.
233
+ # * `nil`, otherwise.
234
+ #
235
+ # Class Numeric includes module Comparable, each of whose methods uses
236
+ # Numeric#<=> for comparison.
224
237
  #
225
238
  # No subclass in the Ruby Core or Standard Library uses this implementation.
226
239
  #
@@ -244,12 +257,12 @@ class Numeric
244
257
  # -->
245
258
  # Returns the square of `self`.
246
259
  #
247
- def abs2: () -> Numeric
260
+ def abs2: () -> self
248
261
 
249
262
  # <!-- rdoc-file=complex.c -->
250
263
  # Returns zero if `self` is positive, Math::PI otherwise.
251
264
  #
252
- def angle: () -> Numeric
265
+ def angle: () -> (0 | Float)
253
266
 
254
267
  # <!--
255
268
  # rdoc-file=complex.c
@@ -267,7 +280,7 @@ class Numeric
267
280
  # as specified by the given `ndigits`, which must be an [integer-convertible
268
281
  # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
269
282
  #
270
- # Equivalent to `self.to_f.ceil(ndigits)`.
283
+ # Equivalent to <code>self.to_f.ceil(ndigits)</code>.
271
284
  #
272
285
  # Related: #floor, Float#ceil.
273
286
  #
@@ -310,18 +323,18 @@ class Numeric
310
323
 
311
324
  # <!--
312
325
  # rdoc-file=numeric.rb
313
- # - conj()
326
+ # - conj -> self
314
327
  # -->
328
+ # Returns `self`.
315
329
  #
316
- def conj: () -> Numeric
330
+ def conjugate: () -> self
317
331
 
318
332
  # <!--
319
333
  # rdoc-file=numeric.rb
320
- # - conj -> self
334
+ # - conj()
321
335
  # -->
322
- # Returns `self`.
323
336
  #
324
- def conjugate: () -> Numeric
337
+ alias conj conjugate
325
338
 
326
339
  # <!--
327
340
  # rdoc-file=rational.c
@@ -335,9 +348,9 @@ class Numeric
335
348
  # rdoc-file=numeric.c
336
349
  # - div(other) -> integer
337
350
  # -->
338
- # Returns the quotient `self/other` as an integer (via `floor`), using method
339
- # `/` in the derived class of `self`. (Numeric itself does not define method
340
- # `/`.)
351
+ # Returns the quotient <code>self/other</code> as an integer (via `floor`),
352
+ # using method <code>/</code> as defined in the subclass of Numeric. (Numeric
353
+ # itself does not define <code>/</code>.)
341
354
  #
342
355
  # Of the Core and Standard Library classes, Only Float and Rational use this
343
356
  # implementation.
@@ -348,7 +361,7 @@ class Numeric
348
361
  # rdoc-file=numeric.c
349
362
  # - divmod(other) -> array
350
363
  # -->
351
- # Returns a 2-element array `[q, r]`, where
364
+ # Returns a 2-element array <code>[q, r]</code>, where
352
365
  #
353
366
  # q = (self/other).floor # Quotient
354
367
  # r = self % other # Remainder
@@ -389,8 +402,8 @@ class Numeric
389
402
  # 1.eql?(Rational(1, 1)) # => false
390
403
  # 1.eql?(Complex(1, 0)) # => false
391
404
  #
392
- # Method `eql?` is different from `==` in that `eql?` requires matching types,
393
- # while `==` does not.
405
+ # Method <code>eql?</code> is different from <code>==</code> in that
406
+ # <code>eql?</code> requires matching types, while <code>==</code> does not.
394
407
  #
395
408
  def eql?: (untyped) -> bool
396
409
 
@@ -398,8 +411,9 @@ class Numeric
398
411
  # rdoc-file=numeric.c
399
412
  # - fdiv(other) -> float
400
413
  # -->
401
- # Returns the quotient `self/other` as a float, using method `/` in the derived
402
- # class of `self`. (Numeric itself does not define method `/`.)
414
+ # Returns the quotient <code>self/other</code> as a float, using method
415
+ # <code>/</code> as defined in the subclass of Numeric. (Numeric itself does not
416
+ # define <code>/</code>.)
403
417
  #
404
418
  # Of the Core and Standard Library classes, only BigDecimal uses this
405
419
  # implementation.
@@ -422,7 +436,7 @@ class Numeric
422
436
  # specified by the given `ndigits`, which must be an [integer-convertible
423
437
  # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
424
438
  #
425
- # Equivalent to `self.to_f.floor(ndigits)`.
439
+ # Equivalent to <code>self.to_f.floor(ndigits)</code>.
426
440
  #
427
441
  # Related: #ceil, Float#floor.
428
442
  #
@@ -433,7 +447,7 @@ class Numeric
433
447
  # rdoc-file=numeric.c
434
448
  # - i -> complex
435
449
  # -->
436
- # Returns `Complex(0, self)`:
450
+ # Returns <code>Complex(0, self)</code>:
437
451
  #
438
452
  # 2.i # => (0+2i)
439
453
  # -2.i # => (0-2i)
@@ -445,25 +459,25 @@ class Numeric
445
459
 
446
460
  # <!--
447
461
  # rdoc-file=numeric.rb
448
- # - imag()
462
+ # - imag -> 0
449
463
  # -->
464
+ # Returns zero.
450
465
  #
451
- def imag: () -> Numeric
466
+ def imaginary: () -> 0
452
467
 
453
468
  # <!--
454
469
  # rdoc-file=numeric.rb
455
- # - imag -> 0
470
+ # - imag()
456
471
  # -->
457
- # Returns zero.
458
472
  #
459
- def imaginary: () -> Numeric
473
+ alias imag imaginary
460
474
 
461
475
  # <!--
462
476
  # rdoc-file=numeric.rb
463
477
  # - infinite? -> -1, 1, or nil
464
478
  # -->
465
- # Returns `nil`, -1, or 1 depending on whether `self` is finite, `-Infinity`, or
466
- # `+Infinity`.
479
+ # Returns `nil`, -1, or 1 depending on whether `self` is finite,
480
+ # <code>-Infinity</code>, or <code>+Infinity</code>.
467
481
  #
468
482
  def infinite?: () -> Integer?
469
483
 
@@ -488,7 +502,7 @@ class Numeric
488
502
  alias magnitude abs
489
503
 
490
504
  # <!-- rdoc-file=numeric.c -->
491
- # Returns `self` modulo `other` as a real number.
505
+ # Returns `self` modulo `other` as a real numeric (Integer, Float, or Rational).
492
506
  #
493
507
  # Of the Core and Standard Library classes, only Rational uses this
494
508
  # implementation.
@@ -530,17 +544,17 @@ class Numeric
530
544
  # rdoc-file=numeric.c
531
545
  # - nonzero? -> self or nil
532
546
  # -->
533
- # Returns +self+ if +self+ is not a zero value, +nil+ otherwise;
534
- # uses method <tt>zero?</tt> for the evaluation.
547
+ # Returns `self` if `self` is not a zero value, `nil` otherwise; uses method
548
+ # <code>zero?</code> for the evaluation.
535
549
  #
536
- # The returned +self+ allows the method to be chained:
550
+ # The returned `self` allows the method to be chained:
537
551
  #
538
- # a = %w[z Bb bB bb BB a aA Aa AA A]
539
- # a.sort {|a, b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
540
- # # => ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
552
+ # a = %w[z Bb bB bb BB a aA Aa AA A]
553
+ # a.sort {|a, b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
554
+ # # => ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
541
555
  #
542
- # Of the Core and Standard Library classes,
543
- # Integer, Float, Rational, and Complex use this implementation.
556
+ # Of the Core and Standard Library classes, Integer, Float, Rational, and
557
+ # Complex use this implementation.
544
558
  #
545
559
  # Related: #zero?
546
560
  #
@@ -563,7 +577,7 @@ class Numeric
563
577
  # rdoc-file=complex.c
564
578
  # - polar -> array
565
579
  # -->
566
- # Returns array `[self.abs, self.arg]`.
580
+ # Returns array <code>[self.abs, self.arg]</code>.
567
581
  #
568
582
  def polar: () -> [ Numeric, Numeric ]
569
583
 
@@ -590,7 +604,7 @@ class Numeric
590
604
  # -->
591
605
  # Returns `self`.
592
606
  #
593
- def real: () -> Numeric
607
+ def real: () -> self
594
608
 
595
609
  # <!--
596
610
  # rdoc-file=numeric.rb
@@ -598,10 +612,10 @@ class Numeric
598
612
  # -->
599
613
  # Returns `true` if `self` is a real number (i.e. not Complex).
600
614
  #
601
- def real?: () -> bool
615
+ def real?: () -> true
602
616
 
603
617
  # <!-- rdoc-file=complex.c -->
604
- # Returns array `[self, 0]`.
618
+ # Returns array <code>[self, 0]</code>.
605
619
  #
606
620
  def rect: () -> [ Numeric, Numeric ]
607
621
 
@@ -609,7 +623,7 @@ class Numeric
609
623
  # rdoc-file=complex.c
610
624
  # - rect -> array
611
625
  # -->
612
- # Returns array `[self, 0]`.
626
+ # Returns array <code>[self, 0]</code>.
613
627
  #
614
628
  alias rectangular rect
615
629
 
@@ -745,13 +759,13 @@ class Numeric
745
759
  # If all the arguments are integers, the loop operates using an integer counter.
746
760
  #
747
761
  # If any of the arguments are floating point numbers, all are converted to
748
- # floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
749
- # where *n = (limit - self)/step*.
762
+ # floats, and the loop is executed <em>floor(n + n*Float::EPSILON) + 1</em>
763
+ # times, where <em>n = (limit - self)/step</em>.
750
764
  #
751
765
  def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
752
- | (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
766
+ | (?Numeric limit, ?Numeric step) -> Enumerator::ArithmeticSequence
753
767
  | (?by: Numeric, ?to: Numeric) { (Numeric) -> void } -> self
754
- | (?by: Numeric, ?to: Numeric) -> Enumerator[Numeric, self]
768
+ | (?by: Numeric, ?to: Numeric) -> Enumerator::ArithmeticSequence
755
769
 
756
770
  # <!--
757
771
  # rdoc-file=complex.c
@@ -765,8 +779,8 @@ class Numeric
765
779
  # rdoc-file=numeric.c
766
780
  # - to_int -> integer
767
781
  # -->
768
- # Returns `self` as an integer; converts using method `to_i` in the derived
769
- # class.
782
+ # Returns `self` as an integer; converts using method `to_i` in the subclass of
783
+ # Numeric. (Numeric itself does not define `to_i`.)
770
784
  #
771
785
  # Of the Core and Standard Library classes, only Rational and Complex use this
772
786
  # implementation.
data/core/object.rbs CHANGED
@@ -12,7 +12,8 @@
12
12
  # will find the top-level File class.
13
13
  #
14
14
  # In the descriptions of Object's methods, the parameter *symbol* refers to a
15
- # symbol, which is either a quoted string or a Symbol (such as `:name`).
15
+ # symbol, which is either a quoted string or a Symbol (such as
16
+ # <code>:name</code>).
16
17
  #
17
18
  # ## What's Here
18
19
  #
@@ -32,7 +33,7 @@
32
33
  # * #!~: Returns `true` if `self` does not match the given object, otherwise
33
34
  # `false`.
34
35
  # * #<=>: Returns 0 if `self` and the given object `object` are the same
35
- # object, or if `self == object`; otherwise returns `nil`.
36
+ # object, or if <code>self == object</code>; otherwise returns `nil`.
36
37
  # * #===: Implements case equality, effectively the same as calling #==.
37
38
  # * #eql?: Implements hash equality, effectively the same as calling #==.
38
39
  # * #kind_of? (aliased as #is_a?): Returns whether given argument is an
@@ -40,23 +41,24 @@
40
41
  # * #instance_of?: Returns whether `self` is an instance of the given class.
41
42
  # * #instance_variable_defined?: Returns whether the given instance variable
42
43
  # is defined in `self`.
43
- # * #method: Returns the Method object for the given method in `self`.
44
+ # * #method: Returns the `Method` object for the given method in `self`.
44
45
  # * #methods: Returns an array of symbol names of public and protected methods
45
46
  # in `self`.
46
- # * #nil?: Returns `false`. (Only `nil` responds `true` to method `nil?`.)
47
+ # * #nil?: Returns `false`. (Only `nil` responds `true` to method
48
+ # <code>nil?</code>.)
47
49
  # * #object_id: Returns an integer corresponding to `self` that is unique for
48
50
  # the current process
49
51
  # * #private_methods: Returns an array of the symbol names of the private
50
52
  # methods in `self`.
51
53
  # * #protected_methods: Returns an array of the symbol names of the protected
52
54
  # methods in `self`.
53
- # * #public_method: Returns the Method object for the given public method in
55
+ # * #public_method: Returns the `Method` object for the given public method in
54
56
  # `self`.
55
57
  # * #public_methods: Returns an array of the symbol names of the public
56
58
  # methods in `self`.
57
59
  # * #respond_to?: Returns whether `self` responds to the given method.
58
60
  # * #singleton_class: Returns the singleton class of `self`.
59
- # * #singleton_method: Returns the Method object for the given singleton
61
+ # * #singleton_method: Returns the `Method` object for the given singleton
60
62
  # method in `self`.
61
63
  # * #singleton_methods: Returns an array of the symbol names of the singleton
62
64
  # methods in `self`.
@@ -85,7 +87,7 @@
85
87
  # frozen state.
86
88
  # * #define_singleton_method: Defines a singleton method in `self` for the
87
89
  # given symbol method-name and block or proc.
88
- # * #display: Prints `self` to the given IO stream or `$stdout`.
90
+ # * #display: Prints `self` to the given IO stream or <code>$stdout</code>.
89
91
  # * #dup: Returns a shallow unfrozen copy of `self`.
90
92
  # * #enum_for (aliased as #to_enum): Returns an Enumerator for `self` using
91
93
  # the using the given method, arguments, and block.
@@ -104,7 +106,3 @@
104
106
  class Object < BasicObject
105
107
  include Kernel
106
108
  end
107
-
108
- # A previous incarnation of `interned` for backward-compatibility (see #1499)
109
- %a{deprecated: Use `interned` instead}
110
- type Object::name = interned
@@ -57,7 +57,7 @@ module ObjectSpace
57
57
  # attributes always, but the values that aren't needed anymore wouldn't be
58
58
  # sitting in the cache forever.
59
59
  #
60
- class WeakKeyMap[Key, Value]
60
+ class WeakKeyMap[K, V]
61
61
  # <!--
62
62
  # rdoc-file=weakmap.c
63
63
  # - map[key] -> value
@@ -66,7 +66,7 @@ module ObjectSpace
66
66
  #
67
67
  # If `key` is not found, returns `nil`.
68
68
  #
69
- def []: (Key) -> Value?
69
+ def []: (K) -> V?
70
70
 
71
71
  # <!--
72
72
  # rdoc-file=weakmap.c
@@ -80,7 +80,7 @@ module ObjectSpace
80
80
  # If the given `key` exists, replaces its value with the given `value`; the
81
81
  # ordering is not affected
82
82
  #
83
- def []=: (Key, Value?) -> Value?
83
+ def []=: (K, V?) -> V?
84
84
 
85
85
  # <!--
86
86
  # rdoc-file=weakmap.c
@@ -119,8 +119,8 @@ module ObjectSpace
119
119
  # m = ObjectSpace::WeakKeyMap.new
120
120
  # m.delete("nosuch") { |key| "Key #{key} not found" } # => "Key nosuch not found"
121
121
  #
122
- def delete: (Key) -> Value?
123
- | [T] (Key) { (Key) -> T } -> (Value | T)
122
+ def delete: (K) -> V?
123
+ | [T] (K) { (K) -> T } -> (V | T)
124
124
 
125
125
  # <!--
126
126
  # rdoc-file=weakmap.c
@@ -141,7 +141,7 @@ module ObjectSpace
141
141
  # copy = cache.getkey({amount: 1, currency: 'USD'})
142
142
  # copy.object_id == value.object_id #=> true
143
143
  #
144
- def getkey: (untyped) -> Key?
144
+ def getkey: (untyped) -> K?
145
145
 
146
146
  # <!--
147
147
  # rdoc-file=weakmap.c
@@ -161,6 +161,6 @@ module ObjectSpace
161
161
  # -->
162
162
  # Returns `true` if `key` is a key in `self`, otherwise `false`.
163
163
  #
164
- def key?: (Key) -> bool
164
+ def key?: (K) -> bool
165
165
  end
166
166
  end
@@ -5,8 +5,8 @@
5
5
  #
6
6
  # ObjectSpace also provides support for object finalizers, procs that will be
7
7
  # called after a specific object was destroyed by garbage collection. See the
8
- # documentation for `ObjectSpace.define_finalizer` for important information on
9
- # how to use this method correctly.
8
+ # documentation for <code>ObjectSpace.define_finalizer</code> for important
9
+ # information on how to use this method correctly.
10
10
  #
11
11
  # a = "A"
12
12
  # b = "B"
@@ -17,7 +17,7 @@
17
17
  # a = nil
18
18
  # b = nil
19
19
  #
20
- # *produces:*
20
+ # <em>produces:</em>
21
21
  #
22
22
  # Finalizer two on 537763470
23
23
  # Finalizer one on 537763480
@@ -29,6 +29,7 @@ module ObjectSpace
29
29
  # - _id2ref(p1)
30
30
  # -->
31
31
  #
32
+ %a{deprecated}
32
33
  def self._id2ref: (Integer id) -> untyped
33
34
 
34
35
  # <!--
@@ -49,9 +50,9 @@ module ObjectSpace
49
50
  # The contents of the returned hash are implementation specific. It may be
50
51
  # changed in future.
51
52
  #
52
- # The keys starting with `:T_` means live objects. For example, `:T_ARRAY` is
53
- # the number of arrays. `:FREE` means object slots which is not used now.
54
- # `:TOTAL` means sum of above.
53
+ # The keys starting with <code>:T_</code> means live objects. For example,
54
+ # <code>:T_ARRAY</code> is the number of arrays. <code>:FREE</code> means object
55
+ # slots which is not used now. <code>:TOTAL</code> means sum of above.
55
56
  #
56
57
  # If the optional argument `result_hash` is given, it is overwritten and
57
58
  # returned. This is intended to avoid probe effect.
@@ -73,7 +74,7 @@ module ObjectSpace
73
74
  # object ID of the *obj* will be passed as an argument to *aProc*. If *aProc* is
74
75
  # a lambda or method, make sure it can be called with a single argument.
75
76
  #
76
- # The return value is an array `[0, aProc]`.
77
+ # The return value is an array <code>[0, aProc]</code>.
77
78
  #
78
79
  # The two recommended patterns are to either create the finaliser proc in a
79
80
  # non-instance method where it can safely capture the needed state, or to use a
@@ -136,28 +137,34 @@ module ObjectSpace
136
137
  # Calls the block once for each living, nonimmediate object in this Ruby
137
138
  # process. If *module* is specified, calls the block for only those classes or
138
139
  # modules that match (or are a subclass of) *module*. Returns the number of
139
- # objects found. Immediate objects (`Fixnum`s, `Symbol`s `true`, `false`, and
140
- # `nil`) are never returned. In the example below, #each_object returns both the
141
- # numbers we defined and several constants defined in the Math module.
140
+ # objects found. Immediate objects (such as `Fixnum`s, static `Symbol`s `true`,
141
+ # `false` and `nil`) are never returned.
142
142
  #
143
143
  # If no block is given, an enumerator is returned instead.
144
144
  #
145
- # a = 102.7
146
- # b = 95 # Won't be returned
147
- # c = 12345678987654321
148
- # count = ObjectSpace.each_object(Numeric) {|x| p x }
145
+ # Job = Class.new
146
+ # jobs = [Job.new, Job.new]
147
+ # count = ObjectSpace.each_object(Job) {|x| p x }
149
148
  # puts "Total count: #{count}"
150
149
  #
151
- # *produces:*
150
+ # <em>produces:</em>
152
151
  #
153
- # 12345678987654321
154
- # 102.7
155
- # 2.71828182845905
156
- # 3.14159265358979
157
- # 2.22044604925031e-16
158
- # 1.7976931348623157e+308
159
- # 2.2250738585072e-308
160
- # Total count: 7
152
+ # #<Job:0x000000011d6cbbf0>
153
+ # #<Job:0x000000011d6cbc68>
154
+ # Total count: 2
155
+ #
156
+ # Due to a current Ractor implementation issue, this method does not yield
157
+ # Ractor-unshareable objects when the process is in multi-Ractor mode.
158
+ # Multi-ractor mode is enabled when <code>Ractor.new</code> has been called for
159
+ # the first time. See https://bugs.ruby-lang.org/issues/19387 for more
160
+ # information.
161
+ #
162
+ # a = 12345678987654321 # shareable
163
+ # b = [].freeze # shareable
164
+ # c = {} # not shareable
165
+ # ObjectSpace.each_object {|x| x } # yields a, b, and c
166
+ # Ractor.new {} # enter multi-Ractor mode
167
+ # ObjectSpace.each_object {|x| x } # does not yield c
161
168
  #
162
169
  def self.each_object: (?Module `module`) -> Enumerator[untyped, Integer]
163
170
  | (?Module `module`) { (untyped obj) -> void } -> Integer