rbs 3.6.1 → 3.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -2
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/ruby.yml +34 -10
  5. data/.github/workflows/windows.yml +20 -3
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +26 -1
  8. data/CHANGELOG.md +241 -0
  9. data/Rakefile +54 -4
  10. data/config.yml +317 -0
  11. data/core/array.rbs +1756 -1591
  12. data/core/basic_object.rbs +38 -35
  13. data/core/comparable.rbs +1 -1
  14. data/core/complex.rbs +166 -94
  15. data/core/data.rbs +2 -2
  16. data/core/dir.rbs +2 -18
  17. data/core/encoding.rbs +12 -32
  18. data/core/enumerable.rbs +270 -266
  19. data/core/enumerator.rbs +14 -4
  20. data/core/env.rbs +1 -1
  21. data/core/errno.rbs +33 -16
  22. data/core/errors.rbs +6 -2
  23. data/core/exception.rbs +342 -167
  24. data/core/fiber.rbs +3 -2
  25. data/core/file.rbs +26 -75
  26. data/core/float.rbs +125 -72
  27. data/core/gc.rbs +158 -42
  28. data/core/hash.rbs +122 -143
  29. data/core/integer.rbs +79 -50
  30. data/core/io/buffer.rbs +49 -43
  31. data/core/io.rbs +108 -151
  32. data/core/kernel.rbs +341 -209
  33. data/core/match_data.rbs +76 -2
  34. data/core/math.rbs +0 -36
  35. data/core/method.rbs +2 -2
  36. data/core/module.rbs +32 -27
  37. data/core/nil_class.rbs +2 -2
  38. data/core/numeric.rbs +101 -104
  39. data/core/object.rbs +1 -5
  40. data/core/object_space/weak_key_map.rbs +3 -4
  41. data/core/object_space.rbs +3 -3
  42. data/core/proc.rbs +82 -14
  43. data/core/process.rbs +110 -58
  44. data/core/ractor.rbs +57 -4
  45. data/core/range.rbs +114 -87
  46. data/core/rational.rbs +0 -2
  47. data/core/rbs/unnamed/argf.rbs +237 -36
  48. data/core/rbs/unnamed/env_class.rbs +35 -53
  49. data/core/rbs/unnamed/random.rbs +1 -2
  50. data/core/regexp.rbs +10 -56
  51. data/core/ruby_vm.rbs +88 -9
  52. data/core/rubygems/config_file.rbs +3 -0
  53. data/core/rubygems/errors.rbs +3 -6
  54. data/core/rubygems/platform.rbs +0 -9
  55. data/core/rubygems/rubygems.rbs +3 -6
  56. data/core/rubygems/version.rbs +8 -8
  57. data/core/set.rbs +4 -16
  58. data/core/string.rbs +271 -264
  59. data/core/struct.rbs +6 -18
  60. data/core/symbol.rbs +14 -21
  61. data/core/thread.rbs +32 -35
  62. data/core/time.rbs +131 -50
  63. data/core/trace_point.rbs +124 -113
  64. data/core/true_class.rbs +0 -1
  65. data/core/unbound_method.rbs +1 -1
  66. data/core/warning.rbs +9 -2
  67. data/docs/architecture.md +1 -1
  68. data/docs/syntax.md +17 -10
  69. data/ext/rbs_extension/extconf.rb +11 -0
  70. data/ext/rbs_extension/location.c +61 -29
  71. data/ext/rbs_extension/location.h +4 -3
  72. data/ext/rbs_extension/main.c +23 -1
  73. data/ext/rbs_extension/parser.c +506 -517
  74. data/ext/rbs_extension/parserstate.c +109 -30
  75. data/ext/rbs_extension/parserstate.h +6 -4
  76. data/ext/rbs_extension/rbs_extension.h +1 -10
  77. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  78. data/include/rbs/ruby_objs.h +72 -0
  79. data/include/rbs/util/rbs_constant_pool.h +219 -0
  80. data/include/rbs.h +7 -0
  81. data/lib/rbs/annotate/annotations.rb +3 -3
  82. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  83. data/lib/rbs/ast/declarations.rb +9 -4
  84. data/lib/rbs/ast/directives.rb +10 -0
  85. data/lib/rbs/ast/members.rb +2 -0
  86. data/lib/rbs/ast/type_param.rb +2 -12
  87. data/lib/rbs/cli/diff.rb +3 -3
  88. data/lib/rbs/cli/validate.rb +2 -1
  89. data/lib/rbs/cli.rb +16 -16
  90. data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
  91. data/lib/rbs/collection/config.rb +5 -3
  92. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  93. data/lib/rbs/collection.rb +1 -0
  94. data/lib/rbs/definition.rb +51 -34
  95. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
  96. data/lib/rbs/definition_builder.rb +83 -24
  97. data/lib/rbs/environment.rb +33 -18
  98. data/lib/rbs/environment_loader.rb +6 -1
  99. data/lib/rbs/errors.rb +24 -0
  100. data/lib/rbs/locator.rb +2 -0
  101. data/lib/rbs/method_type.rb +2 -0
  102. data/lib/rbs/namespace.rb +1 -0
  103. data/lib/rbs/parser_aux.rb +40 -3
  104. data/lib/rbs/prototype/rb.rb +20 -12
  105. data/lib/rbs/prototype/rbi.rb +11 -6
  106. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  107. data/lib/rbs/prototype/runtime.rb +7 -5
  108. data/lib/rbs/subtractor.rb +3 -3
  109. data/lib/rbs/test/hook.rb +47 -42
  110. data/lib/rbs/test/type_check.rb +7 -5
  111. data/lib/rbs/type_name.rb +14 -9
  112. data/lib/rbs/types.rb +63 -14
  113. data/lib/rbs/unit_test/spy.rb +4 -2
  114. data/lib/rbs/unit_test/type_assertions.rb +19 -13
  115. data/lib/rbs/unit_test/with_aliases.rb +3 -1
  116. data/lib/rbs/validator.rb +7 -1
  117. data/lib/rbs/version.rb +1 -1
  118. data/lib/rbs/writer.rb +10 -5
  119. data/lib/rbs.rb +1 -0
  120. data/lib/rdoc_plugin/parser.rb +2 -2
  121. data/rbs.gemspec +6 -2
  122. data/sig/ancestor_graph.rbs +5 -5
  123. data/sig/annotate/rdoc_source.rbs +2 -0
  124. data/sig/cli.rbs +2 -0
  125. data/sig/collection/config/lockfile_generator.rbs +9 -1
  126. data/sig/declarations.rbs +10 -3
  127. data/sig/definition.rbs +80 -12
  128. data/sig/definition_builder.rbs +18 -4
  129. data/sig/directives.rbs +17 -1
  130. data/sig/environment.rbs +3 -1
  131. data/sig/errors.rbs +19 -0
  132. data/sig/namespace.rbs +2 -3
  133. data/sig/parser.rbs +5 -1
  134. data/sig/prototype/rb.rbs +1 -1
  135. data/sig/resolver/constant_resolver.rbs +2 -2
  136. data/sig/resolver/context.rbs +1 -1
  137. data/sig/subtractor.rbs +1 -1
  138. data/sig/test/type_check.rbs +2 -2
  139. data/sig/type_alias_dependency.rbs +2 -2
  140. data/sig/type_alias_regularity.rbs +6 -6
  141. data/sig/type_param.rbs +4 -4
  142. data/sig/typename.rbs +8 -5
  143. data/sig/types.rbs +1 -1
  144. data/sig/unit_test/spy.rbs +2 -0
  145. data/sig/unit_test/type_assertions.rbs +2 -0
  146. data/sig/use_map.rbs +1 -1
  147. data/sig/validator.rbs +6 -2
  148. data/sig/vendorer.rbs +1 -1
  149. data/sig/writer.rbs +1 -1
  150. data/{ext/rbs_extension → src}/constants.c +35 -36
  151. data/src/ruby_objs.c +799 -0
  152. data/src/util/rbs_constant_pool.c +342 -0
  153. data/stdlib/base64/0/base64.rbs +0 -9
  154. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  155. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  156. data/stdlib/cgi/0/core.rbs +60 -3
  157. data/stdlib/cgi/0/manifest.yaml +1 -0
  158. data/stdlib/coverage/0/coverage.rbs +0 -3
  159. data/stdlib/csv/0/csv.rbs +18 -58
  160. data/stdlib/csv/0/manifest.yaml +1 -0
  161. data/stdlib/date/0/date.rbs +27 -42
  162. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
  163. data/stdlib/digest/0/digest.rbs +25 -2
  164. data/stdlib/erb/0/erb.rbs +0 -1
  165. data/stdlib/etc/0/etc.rbs +51 -34
  166. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  167. data/stdlib/io-console/0/io-console.rbs +69 -15
  168. data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
  169. data/stdlib/json/0/json.rbs +107 -120
  170. data/stdlib/logger/0/log_device.rbs +1 -1
  171. data/stdlib/logger/0/logger.rbs +3 -18
  172. data/stdlib/minitest/0/kernel.rbs +2 -2
  173. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  174. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  175. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  176. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  177. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  178. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  179. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  180. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  181. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  182. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  183. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  184. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  185. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  186. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  187. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  188. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  189. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  190. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  191. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  192. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  193. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  194. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  195. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  196. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  197. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  198. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  199. data/stdlib/minitest/0/minitest.rbs +41 -892
  200. data/stdlib/monitor/0/monitor.rbs +13 -4
  201. data/stdlib/net-http/0/net-http.rbs +42 -109
  202. data/stdlib/nkf/0/nkf.rbs +30 -0
  203. data/stdlib/objspace/0/objspace.rbs +1 -2
  204. data/stdlib/observable/0/observable.rbs +1 -1
  205. data/stdlib/open-uri/0/manifest.yaml +1 -0
  206. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  207. data/stdlib/open3/0/open3.rbs +0 -8
  208. data/stdlib/openssl/0/manifest.yaml +1 -0
  209. data/stdlib/openssl/0/openssl.rbs +235 -143
  210. data/stdlib/optparse/0/optparse.rbs +58 -18
  211. data/stdlib/pathname/0/pathname.rbs +2 -8
  212. data/stdlib/pp/0/pp.rbs +3 -1
  213. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  214. data/stdlib/pstore/0/pstore.rbs +0 -6
  215. data/stdlib/psych/0/core_ext.rbs +12 -0
  216. data/stdlib/psych/0/psych.rbs +15 -4
  217. data/stdlib/pty/0/pty.rbs +46 -4
  218. data/stdlib/rdoc/0/code_object.rbs +0 -4
  219. data/stdlib/rdoc/0/markup.rbs +10 -12
  220. data/stdlib/rdoc/0/rdoc.rbs +13 -8
  221. data/stdlib/resolv/0/resolv.rbs +21 -12
  222. data/stdlib/ripper/0/ripper.rbs +0 -2
  223. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  224. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  225. data/stdlib/singleton/0/singleton.rbs +0 -1
  226. data/stdlib/socket/0/addrinfo.rbs +1 -2
  227. data/stdlib/socket/0/basic_socket.rbs +0 -5
  228. data/stdlib/socket/0/socket.rbs +32 -27
  229. data/stdlib/socket/0/tcp_server.rbs +0 -3
  230. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  231. data/stdlib/socket/0/udp_socket.rbs +0 -1
  232. data/stdlib/socket/0/unix_server.rbs +0 -3
  233. data/stdlib/socket/0/unix_socket.rbs +4 -2
  234. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
  235. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  236. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  237. data/stdlib/time/0/time.rbs +48 -35
  238. data/stdlib/timeout/0/timeout.rbs +11 -8
  239. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  240. data/stdlib/tsort/0/tsort.rbs +0 -4
  241. data/stdlib/uri/0/common.rbs +28 -30
  242. data/stdlib/uri/0/ftp.rbs +1 -1
  243. data/stdlib/uri/0/generic.rbs +22 -18
  244. data/stdlib/uri/0/http.rbs +2 -2
  245. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  246. data/stdlib/zlib/0/buf_error.rbs +1 -70
  247. data/stdlib/zlib/0/data_error.rbs +1 -70
  248. data/stdlib/zlib/0/deflate.rbs +8 -72
  249. data/stdlib/zlib/0/error.rbs +1 -70
  250. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  251. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  252. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  253. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  254. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  255. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  256. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  257. data/stdlib/zlib/0/inflate.rbs +4 -71
  258. data/stdlib/zlib/0/mem_error.rbs +1 -70
  259. data/stdlib/zlib/0/need_dict.rbs +1 -70
  260. data/stdlib/zlib/0/stream_end.rbs +1 -70
  261. data/stdlib/zlib/0/stream_error.rbs +1 -70
  262. data/stdlib/zlib/0/version_error.rbs +1 -70
  263. data/stdlib/zlib/0/zlib.rbs +0 -2
  264. data/stdlib/zlib/0/zstream.rbs +4 -72
  265. metadata +17 -13
  266. data/ext/rbs_extension/ruby_objs.c +0 -602
  267. data/ext/rbs_extension/ruby_objs.h +0 -51
  268. data/stdlib/minitest/0/manifest.yaml +0 -2
data/core/gc.rbs CHANGED
@@ -1,5 +1,5 @@
1
1
  # <!-- rdoc-file=gc.rb -->
2
- # The GC module provides an interface to Ruby's mark and sweep garbage
2
+ # The GC module provides an interface to Ruby's mark-and-sweep garbage
3
3
  # collection mechanism.
4
4
  #
5
5
  # Some of the underlying methods are also available via the ObjectSpace module.
@@ -81,14 +81,19 @@ module GC
81
81
  #
82
82
  # `:GC_TIME`
83
83
  # : Time elapsed in seconds for this GC run
84
+ #
84
85
  # `:GC_INVOKE_TIME`
85
86
  # : Time elapsed in seconds from startup to when the GC was invoked
87
+ #
86
88
  # `:HEAP_USE_SIZE`
87
89
  # : Total bytes of heap used
90
+ #
88
91
  # `:HEAP_TOTAL_SIZE`
89
92
  # : Total size of heap in bytes
93
+ #
90
94
  # `:HEAP_TOTAL_OBJECTS`
91
95
  # : Total number of objects
96
+ #
92
97
  # `:GC_IS_MARKED`
93
98
  # : Returns `true` if the GC is in mark phase
94
99
  #
@@ -106,7 +111,7 @@ module GC
106
111
  # `:HAVE_FINALIZE`
107
112
  # :
108
113
  #
109
- def self.raw_data: () -> Array[Hash[Symbol, untyped]]
114
+ def self.raw_data: () -> Array[Hash[Symbol, untyped]]?
110
115
 
111
116
  # <!--
112
117
  # rdoc-file=gc.c
@@ -154,17 +159,88 @@ module GC
154
159
 
155
160
  # <!--
156
161
  # rdoc-file=gc.rb
157
- # - GC.count -> Integer
162
+ # - GC.config -> hash
163
+ # - GC.config(hash) -> hash
158
164
  # -->
159
- # The number of times GC occurred.
165
+ # Sets or gets information about the current GC config.
166
+ #
167
+ # Configuration parameters are GC implementation-specific and may change without
168
+ # notice.
169
+ #
170
+ # This method can be called without parameters to retrieve the current config as
171
+ # a `Hash` with `Symbol` keys.
172
+ #
173
+ # This method can also be called with a `Hash` argument to assign values to
174
+ # valid config keys. Config keys missing from the passed `Hash` will be left
175
+ # unmodified.
176
+ #
177
+ # If a key/value pair is passed to this function that does not correspond to a
178
+ # valid config key for the GC implementation being used, no config will be
179
+ # updated, the key will be present in the returned Hash, and its value will be
180
+ # `nil`. This is to facilitate easy migration between GC implementations.
181
+ #
182
+ # In both call-seqs, the return value of `GC.config` will be a `Hash` containing
183
+ # the most recent full configuration, i.e., all keys and values defined by the
184
+ # specific GC implementation being used. In the case of a config update, the
185
+ # return value will include the new values being updated.
186
+ #
187
+ # This method is only expected to work on CRuby.
188
+ #
189
+ # ### GC Implementation independent values
190
+ #
191
+ # The `GC.config` hash can also contain keys that are global and read-only.
192
+ # These keys are not specific to any one GC library implementation and
193
+ # attempting to write to them will raise `ArgumentError`.
194
+ #
195
+ # There is currently only one global, read-only key:
196
+ #
197
+ # implementation
198
+ # : Returns a `String` containing the name of the currently loaded GC library,
199
+ # if one has been loaded using `RUBY_GC_LIBRARY`, and "default" in all other
200
+ # cases
201
+ #
160
202
  #
161
- # It returns the number of times GC occurred since the process started.
203
+ # ### GC Implementation specific values
204
+ #
205
+ # GC libraries are expected to document their own configuration. Valid keys for
206
+ # Ruby's default GC implementation are:
207
+ #
208
+ # rgengc_allow_full_mark
209
+ # : Controls whether the GC is allowed to run a full mark (young & old
210
+ # objects).
211
+ #
212
+ # When `true`, GC interleaves major and minor collections. This is the
213
+ # default. GC will function as intended.
214
+ #
215
+ # When `false`, the GC will never trigger a full marking cycle unless
216
+ # explicitly requested by user code. Instead, only a minor mark will
217
+ # run—only young objects will be marked. When the heap space is exhausted,
218
+ # new pages will be allocated immediately instead of running a full mark.
219
+ #
220
+ # A flag will be set to notify that a full mark has been requested. This
221
+ # flag is accessible using `GC.latest_gc_info(:needs_major_by)`
222
+ #
223
+ # The user can trigger a major collection at any time using
224
+ # `GC.start(full_mark: true)`
225
+ #
226
+ # When `false`, Young to Old object promotion is disabled. For performance
227
+ # reasons, it is recommended to warm up an application using
228
+ # `Process.warmup` before setting this parameter to `false`.
229
+ #
230
+ def self.config: () -> Hash[Symbol, untyped]
231
+ | (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
232
+
233
+ # <!--
234
+ # rdoc-file=gc.rb
235
+ # - GC.count -> Integer
236
+ # -->
237
+ # Returns the number of times GC has occurred since the process started.
162
238
  #
163
239
  def self.count: () -> Integer
164
240
 
165
241
  # <!--
166
242
  # rdoc-file=gc.rb
167
- # - GC.disable -> true or false
243
+ # - GC.disable -> true or false
168
244
  # -->
169
245
  # Disables garbage collection, returning `true` if garbage collection was
170
246
  # already disabled.
@@ -176,7 +252,7 @@ module GC
176
252
 
177
253
  # <!--
178
254
  # rdoc-file=gc.rb
179
- # - GC.enable -> true or false
255
+ # - GC.enable -> true or false
180
256
  # -->
181
257
  # Enables garbage collection, returning `true` if garbage collection was
182
258
  # previously disabled.
@@ -195,24 +271,24 @@ module GC
195
271
  #
196
272
  # The `full_mark` keyword argument determines whether or not to perform a major
197
273
  # garbage collection cycle. When set to `true`, a major garbage collection cycle
198
- # is ran, meaning all objects are marked. When set to `false`, a minor garbage
199
- # collection cycle is ran, meaning only young objects are marked.
274
+ # is run, meaning all objects are marked. When set to `false`, a minor garbage
275
+ # collection cycle is run, meaning only young objects are marked.
200
276
  #
201
277
  # The `immediate_mark` keyword argument determines whether or not to perform
202
278
  # incremental marking. When set to `true`, marking is completed during the call
203
- # to this method. When set to `false`, marking is performed in steps that is
279
+ # to this method. When set to `false`, marking is performed in steps that are
204
280
  # interleaved with future Ruby code execution, so marking might not be completed
205
- # during this method call. Note that if `full_mark` is `false` then marking will
206
- # always be immediate, regardless of the value of `immediate_mark`.
281
+ # during this method call. Note that if `full_mark` is `false`, then marking
282
+ # will always be immediate, regardless of the value of `immediate_mark`.
207
283
  #
208
- # The `immedate_sweep` keyword argument determines whether or not to defer
209
- # sweeping (using lazy sweep). When set to `true`, sweeping is performed in
210
- # steps that is interleaved with future Ruby code execution, so sweeping might
211
- # not be completed during this method call. When set to `false`, sweeping is
284
+ # The `immediate_sweep` keyword argument determines whether or not to defer
285
+ # sweeping (using lazy sweep). When set to `false`, sweeping is performed in
286
+ # steps that are interleaved with future Ruby code execution, so sweeping might
287
+ # not be completed during this method call. When set to `true`, sweeping is
212
288
  # completed during the call to this method.
213
289
  #
214
- # Note: These keyword arguments are implementation and version dependent. They
215
- # are not guaranteed to be future-compatible, and may be ignored if the
290
+ # Note: These keyword arguments are implementation and version-dependent. They
291
+ # are not guaranteed to be future-compatible and may be ignored if the
216
292
  # underlying implementation does not support them.
217
293
  #
218
294
  def self.start: (?immediate_sweep: boolish, ?immediate_mark: boolish, ?full_mark: boolish) -> nil
@@ -225,79 +301,106 @@ module GC
225
301
  # -->
226
302
  # Returns a Hash containing information about the GC.
227
303
  #
228
- # The contents of the hash are implementation specific and may change in the
304
+ # The contents of the hash are implementation-specific and may change in the
229
305
  # future without notice.
230
306
  #
231
- # The hash includes information about internal statistics about GC such as:
307
+ # The hash includes internal statistics about GC such as:
232
308
  #
233
309
  # count
234
- # : The total number of garbage collections ran since application start (count
310
+ # : The total number of garbage collections run since application start (count
235
311
  # includes both minor and major garbage collections)
312
+ #
236
313
  # time
237
314
  # : The total time spent in garbage collections (in milliseconds)
315
+ #
238
316
  # heap_allocated_pages
239
317
  # : The total number of `:heap_eden_pages` + `:heap_tomb_pages`
318
+ #
240
319
  # heap_sorted_length
241
320
  # : The number of pages that can fit into the buffer that holds references to
242
321
  # all pages
322
+ #
243
323
  # heap_allocatable_pages
244
324
  # : The total number of pages the application could allocate without
245
325
  # additional GC
326
+ #
246
327
  # heap_available_slots
247
328
  # : The total number of slots in all `:heap_allocated_pages`
329
+ #
248
330
  # heap_live_slots
249
331
  # : The total number of slots which contain live objects
332
+ #
250
333
  # heap_free_slots
251
334
  # : The total number of slots which do not contain live objects
335
+ #
252
336
  # heap_final_slots
253
337
  # : The total number of slots with pending finalizers to be run
338
+ #
254
339
  # heap_marked_slots
255
340
  # : The total number of objects marked in the last GC
341
+ #
256
342
  # heap_eden_pages
257
343
  # : The total number of pages which contain at least one live slot
344
+ #
258
345
  # heap_tomb_pages
259
346
  # : The total number of pages which do not contain any live slots
347
+ #
260
348
  # total_allocated_pages
261
349
  # : The cumulative number of pages allocated since application start
350
+ #
262
351
  # total_freed_pages
263
352
  # : The cumulative number of pages freed since application start
353
+ #
264
354
  # total_allocated_objects
265
355
  # : The cumulative number of objects allocated since application start
356
+ #
266
357
  # total_freed_objects
267
358
  # : The cumulative number of objects freed since application start
359
+ #
268
360
  # malloc_increase_bytes
269
361
  # : Amount of memory allocated on the heap for objects. Decreased by any GC
362
+ #
270
363
  # malloc_increase_bytes_limit
271
364
  # : When `:malloc_increase_bytes` crosses this limit, GC is triggered
365
+ #
272
366
  # minor_gc_count
273
367
  # : The total number of minor garbage collections run since process start
368
+ #
274
369
  # major_gc_count
275
370
  # : The total number of major garbage collections run since process start
371
+ #
276
372
  # compact_count
277
373
  # : The total number of compactions run since process start
374
+ #
278
375
  # read_barrier_faults
279
376
  # : The total number of times the read barrier was triggered during compaction
377
+ #
280
378
  # total_moved_objects
281
379
  # : The total number of objects compaction has moved
380
+ #
282
381
  # remembered_wb_unprotected_objects
283
382
  # : The total number of objects without write barriers
383
+ #
284
384
  # remembered_wb_unprotected_objects_limit
285
385
  # : When `:remembered_wb_unprotected_objects` crosses this limit, major GC is
286
386
  # triggered
387
+ #
287
388
  # old_objects
288
389
  # : Number of live, old objects which have survived at least 3 garbage
289
390
  # collections
391
+ #
290
392
  # old_objects_limit
291
393
  # : When `:old_objects` crosses this limit, major GC is triggered
394
+ #
292
395
  # oldmalloc_increase_bytes
293
396
  # : Amount of memory allocated on the heap for objects. Decreased by major GC
397
+ #
294
398
  # oldmalloc_increase_bytes_limit
295
- # : When `:old_malloc_increase_bytes` crosses this limit, major GC is
296
- # triggered
399
+ # : When `:oldmalloc_increase_bytes` crosses this limit, major GC is triggered
297
400
  #
298
401
  #
299
402
  # If the optional argument, hash, is given, it is overwritten and returned. This
300
- # is intended to avoid probe effect.
403
+ # is intended to avoid the probe effect.
301
404
  #
302
405
  # This method is only expected to work on CRuby.
303
406
  #
@@ -308,7 +411,7 @@ module GC
308
411
  # rdoc-file=gc.rb
309
412
  # - GC.measure_total_time = true/false
310
413
  # -->
311
- # Enable to measure GC time. You can get the result with `GC.stat(:time)`. Note
414
+ # Enables measuring GC time. You can get the result with `GC.stat(:time)`. Note
312
415
  # that GC time measurement can cause some performance overhead.
313
416
  #
314
417
  def self.measure_total_time=: [T] (T enable) -> T
@@ -317,8 +420,8 @@ module GC
317
420
  # rdoc-file=gc.rb
318
421
  # - GC.measure_total_time -> true/false
319
422
  # -->
320
- # Return measure_total_time flag (default: `true`). Note that measurement can
321
- # affect the application performance.
423
+ # Returns the measure_total_time flag (default: `true`). Note that measurement
424
+ # can affect the application's performance.
322
425
  #
323
426
  def self.measure_total_time: () -> bool
324
427
 
@@ -357,16 +460,16 @@ module GC
357
460
  # it will return a `Hash` with heap names as keys and a `Hash` containing
358
461
  # information about the heap as values.
359
462
  #
360
- # If the second optional argument, `hash_or_key`, is given as `Hash`, it will be
361
- # overwritten and returned. This is intended to avoid the probe effect.
463
+ # If the second optional argument, `hash_or_key`, is given as a `Hash`, it will
464
+ # be overwritten and returned. This is intended to avoid the probe effect.
362
465
  #
363
466
  # If both optional arguments are passed in and the second optional argument is a
364
- # symbol, it will return a `Numeric` of the value for the particular heap.
467
+ # symbol, it will return a `Numeric` value for the particular heap.
365
468
  #
366
469
  # On CRuby, `heap_name` is of the type `Integer` but may be of type `String` on
367
470
  # other implementations.
368
471
  #
369
- # The contents of the hash are implementation specific and may change in the
472
+ # The contents of the hash are implementation-specific and may change in the
370
473
  # future without notice.
371
474
  #
372
475
  # If the optional argument, hash, is given, it is overwritten and returned.
@@ -377,26 +480,35 @@ module GC
377
480
  #
378
481
  # slot_size
379
482
  # : The slot size of the heap in bytes.
483
+ #
380
484
  # heap_allocatable_pages
381
485
  # : The number of pages that can be allocated without triggering a new garbage
382
486
  # collection cycle.
487
+ #
383
488
  # heap_eden_pages
384
489
  # : The number of pages in the eden heap.
490
+ #
385
491
  # heap_eden_slots
386
492
  # : The total number of slots in all of the pages in the eden heap.
493
+ #
387
494
  # heap_tomb_pages
388
495
  # : The number of pages in the tomb heap. The tomb heap only contains pages
389
496
  # that do not have any live objects.
497
+ #
390
498
  # heap_tomb_slots
391
499
  # : The total number of slots in all of the pages in the tomb heap.
500
+ #
392
501
  # total_allocated_pages
393
502
  # : The total number of pages that have been allocated in the heap.
503
+ #
394
504
  # total_freed_pages
395
505
  # : The total number of pages that have been freed and released back to the
396
506
  # system in the heap.
507
+ #
397
508
  # force_major_gc_count
398
- # : The number of times major garbage collection cycles this heap has forced
509
+ # : The number of times this heap has forced major garbage collection cycles
399
510
  # to start due to running out of free slots.
511
+ #
400
512
  # force_incremental_marking_finish_count
401
513
  # : The number of times this heap has forced incremental marking to complete
402
514
  # due to running out of pooled slots.
@@ -420,24 +532,25 @@ module GC
420
532
 
421
533
  # <!--
422
534
  # rdoc-file=gc.rb
423
- # - GC.stress -> integer, true or false
535
+ # - GC.stress -> integer, true, or false
424
536
  # -->
425
- # Returns current status of GC stress mode.
537
+ # Returns the current status of GC stress mode.
426
538
  #
427
539
  def self.stress: () -> (Integer | bool)
428
540
 
429
541
  # <!--
430
542
  # rdoc-file=gc.rb
431
- # - GC.stress = flag -> flag
543
+ # - GC.stress = flag -> flag
432
544
  # -->
433
545
  # Updates the GC stress mode.
434
546
  #
435
547
  # When stress mode is enabled, the GC is invoked at every GC opportunity: all
436
548
  # memory and object allocations.
437
549
  #
438
- # Enabling stress mode will degrade performance, it is only for debugging.
550
+ # Enabling stress mode will degrade performance; it is only for debugging.
439
551
  #
440
- # flag can be true, false, or an integer bit-ORed following flags.
552
+ # The flag can be true, false, or an integer bitwise-ORed with the following
553
+ # flags:
441
554
  # 0x01:: no major GC
442
555
  # 0x02:: no immediate sweep
443
556
  # 0x04:: full mark after malloc/calloc/realloc
@@ -449,7 +562,7 @@ module GC
449
562
  # rdoc-file=gc.rb
450
563
  # - GC.total_time -> int
451
564
  # -->
452
- # Return measured GC total time in nano seconds.
565
+ # Returns the measured GC total time in nanoseconds.
453
566
  #
454
567
  def self.total_time: () -> Integer
455
568
 
@@ -474,7 +587,7 @@ module GC
474
587
 
475
588
  # The type that `GC.compact` and related functions can return.
476
589
  #
477
- type compact_info = Hash[:considered | :moved |:moved_up | :moved_down, Hash[Symbol, Integer]]
590
+ type compact_info = Hash[:considered | :moved | :moved_up | :moved_down, Hash[Symbol, Integer]]
478
591
 
479
592
  # <!--
480
593
  # rdoc-file=gc.rb
@@ -508,12 +621,15 @@ module GC
508
621
  # rdoc-file=gc.rb
509
622
  # - GC.latest_gc_info -> hash
510
623
  # - GC.latest_gc_info(hash) -> hash
511
- # - GC.latest_gc_info(:major_by) -> :malloc
624
+ # - GC.latest_gc_info(key) -> value
512
625
  # -->
513
626
  # Returns information about the most recent garbage collection.
514
627
  #
515
- # If the optional argument, hash, is given, it is overwritten and returned. This
516
- # is intended to avoid probe effect.
628
+ # If the argument `hash` is given and is a Hash object, it is overwritten and
629
+ # returned. This is intended to avoid the probe effect.
630
+ #
631
+ # If the argument `key` is given and is a Symbol object, it returns the value
632
+ # associated with the key. This is equivalent to `GC.latest_gc_info[key]`.
517
633
  #
518
634
  def self.latest_gc_info: (?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
519
635
  | (Symbol key) -> untyped