rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
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.
@@ -7,19 +7,240 @@
7
7
  # You may obtain information about the operation of the GC through GC::Profiler.
8
8
  #
9
9
  module GC
10
+ # <!-- rdoc-file=gc.c -->
11
+ # The GC profiler provides access to information on GC runs including time,
12
+ # length and object space size.
13
+ #
14
+ # Example:
15
+ #
16
+ # GC::Profiler.enable
17
+ #
18
+ # require 'rdoc/rdoc'
19
+ #
20
+ # GC::Profiler.report
21
+ #
22
+ # GC::Profiler.disable
23
+ #
24
+ # See also GC.count, GC.malloc_allocated_size and GC.malloc_allocations
25
+ #
26
+ module Profiler
27
+ # <!--
28
+ # rdoc-file=gc.c
29
+ # - GC::Profiler.clear -> nil
30
+ # -->
31
+ # Clears the GC profiler data.
32
+ #
33
+ def self.clear: () -> nil
34
+
35
+ # <!--
36
+ # rdoc-file=gc.c
37
+ # - GC::Profiler.disable -> nil
38
+ # -->
39
+ # Stops the GC profiler.
40
+ #
41
+ def self.disable: () -> nil
42
+
43
+ # <!--
44
+ # rdoc-file=gc.c
45
+ # - GC::Profiler.enable -> nil
46
+ # -->
47
+ # Starts the GC profiler.
48
+ #
49
+ def self.enable: () -> nil
50
+
51
+ # <!--
52
+ # rdoc-file=gc.c
53
+ # - GC::Profiler.enabled? -> true or false
54
+ # -->
55
+ # The current status of GC profile mode.
56
+ #
57
+ def self.enabled?: () -> bool
58
+
59
+ # <!--
60
+ # rdoc-file=gc.c
61
+ # - GC::Profiler.raw_data -> [Hash, ...]
62
+ # -->
63
+ # Returns an Array of individual raw profile data Hashes ordered from earliest
64
+ # to latest by `:GC_INVOKE_TIME`.
65
+ #
66
+ # For example:
67
+ #
68
+ # [
69
+ # {
70
+ # :GC_TIME=>1.3000000000000858e-05,
71
+ # :GC_INVOKE_TIME=>0.010634999999999999,
72
+ # :HEAP_USE_SIZE=>289640,
73
+ # :HEAP_TOTAL_SIZE=>588960,
74
+ # :HEAP_TOTAL_OBJECTS=>14724,
75
+ # :GC_IS_MARKED=>false
76
+ # },
77
+ # # ...
78
+ # ]
79
+ #
80
+ # The keys mean:
81
+ #
82
+ # `:GC_TIME`
83
+ # : Time elapsed in seconds for this GC run
84
+ #
85
+ # `:GC_INVOKE_TIME`
86
+ # : Time elapsed in seconds from startup to when the GC was invoked
87
+ #
88
+ # `:HEAP_USE_SIZE`
89
+ # : Total bytes of heap used
90
+ #
91
+ # `:HEAP_TOTAL_SIZE`
92
+ # : Total size of heap in bytes
93
+ #
94
+ # `:HEAP_TOTAL_OBJECTS`
95
+ # : Total number of objects
96
+ #
97
+ # `:GC_IS_MARKED`
98
+ # : Returns `true` if the GC is in mark phase
99
+ #
100
+ #
101
+ # If ruby was built with `GC_PROFILE_MORE_DETAIL`, you will also have access to
102
+ # the following hash keys:
103
+ #
104
+ # `:GC_MARK_TIME`
105
+ # `:GC_SWEEP_TIME`
106
+ # `:ALLOCATE_INCREASE`
107
+ # `:ALLOCATE_LIMIT`
108
+ # `:HEAP_USE_PAGES`
109
+ # `:HEAP_LIVE_OBJECTS`
110
+ # `:HEAP_FREE_OBJECTS`
111
+ # `:HAVE_FINALIZE`
112
+ # :
113
+ #
114
+ def self.raw_data: () -> Array[Hash[Symbol, untyped]]
115
+
116
+ # <!--
117
+ # rdoc-file=gc.c
118
+ # - GC::Profiler.report
119
+ # - GC::Profiler.report(io)
120
+ # -->
121
+ # Writes the GC::Profiler.result to `$stdout` or the given IO object.
122
+ #
123
+ def self.report: (?_Reporter io) -> nil
124
+
125
+ interface _Reporter
126
+ def write: (String msg) -> void
127
+ end
128
+
129
+ # <!--
130
+ # rdoc-file=gc.c
131
+ # - GC::Profiler.result -> String
132
+ # -->
133
+ # Returns a profile data report such as:
134
+ #
135
+ # GC 1 invokes.
136
+ # Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
137
+ # 1 0.012 159240 212940 10647 0.00000000000001530000
138
+ #
139
+ def self.result: () -> String
140
+
141
+ # <!--
142
+ # rdoc-file=gc.c
143
+ # - GC::Profiler.total_time -> float
144
+ # -->
145
+ # The total time used for garbage collection in seconds
146
+ #
147
+ def self.total_time: () -> Float
148
+ end
149
+
150
+ # <!-- rdoc-file=gc.c -->
151
+ # Internal constants in the garbage collector.
152
+ #
153
+ INTERNAL_CONSTANTS: Hash[Symbol, untyped]
154
+
155
+ # <!-- rdoc-file=gc.c -->
156
+ # GC build options
157
+ #
158
+ OPTS: Array[String]
159
+
10
160
  # <!--
11
161
  # rdoc-file=gc.rb
12
- # - GC.count -> Integer
162
+ # - GC.config -> hash
163
+ # - GC.config(hash) -> hash
13
164
  # -->
14
- # 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.
15
172
  #
16
- # It returns the number of times GC occurred since the process started.
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
+ #
202
+ #
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.
17
238
  #
18
239
  def self.count: () -> Integer
19
240
 
20
241
  # <!--
21
242
  # rdoc-file=gc.rb
22
- # - GC.disable -> true or false
243
+ # - GC.disable -> true or false
23
244
  # -->
24
245
  # Disables garbage collection, returning `true` if garbage collection was
25
246
  # already disabled.
@@ -31,7 +252,7 @@ module GC
31
252
 
32
253
  # <!--
33
254
  # rdoc-file=gc.rb
34
- # - GC.enable -> true or false
255
+ # - GC.enable -> true or false
35
256
  # -->
36
257
  # Enables garbage collection, returning `true` if garbage collection was
37
258
  # previously disabled.
@@ -44,27 +265,33 @@ module GC
44
265
 
45
266
  # <!--
46
267
  # rdoc-file=gc.rb
47
- # - GC.start -> nil
48
- # - ObjectSpace.garbage_collect -> nil
49
- # - include GC; garbage_collect -> nil
50
- # - GC.start(full_mark: true, immediate_sweep: true) -> nil
51
- # - ObjectSpace.garbage_collect(full_mark: true, immediate_sweep: true) -> nil
52
- # - include GC; garbage_collect(full_mark: true, immediate_sweep: true) -> nil
268
+ # - start(full_mark: true, immediate_mark: true, immediate_sweep: true)
53
269
  # -->
54
270
  # Initiates garbage collection, even if manually disabled.
55
271
  #
56
- # This method is defined with keyword arguments that default to true:
57
- #
58
- # def GC.start(full_mark: true, immediate_sweep: true); end
59
- #
60
- # Use full_mark: false to perform a minor GC. Use immediate_sweep: false to
61
- # defer sweeping (use lazy sweep).
62
- #
63
- # Note: These keyword arguments are implementation and version dependent. They
64
- # are not guaranteed to be future-compatible, and may be ignored if the
272
+ # The `full_mark` keyword argument determines whether or not to perform a major
273
+ # garbage collection cycle. When set to `true`, a major garbage collection cycle
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.
276
+ #
277
+ # The `immediate_mark` keyword argument determines whether or not to perform
278
+ # incremental marking. When set to `true`, marking is completed during the call
279
+ # to this method. When set to `false`, marking is performed in steps that are
280
+ # interleaved with future Ruby code execution, so marking might not be completed
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`.
283
+ #
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
288
+ # completed during the call to this method.
289
+ #
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
65
292
  # underlying implementation does not support them.
66
293
  #
67
- def self.start: (?immediate_sweep: boolish immediate_sweep, ?immediate_mark: boolish immediate_mark, ?full_mark: boolish full_mark) -> nil
294
+ def self.start: (?immediate_sweep: boolish, ?immediate_mark: boolish, ?full_mark: boolish) -> nil
68
295
 
69
296
  # <!--
70
297
  # rdoc-file=gc.rb
@@ -74,113 +301,273 @@ module GC
74
301
  # -->
75
302
  # Returns a Hash containing information about the GC.
76
303
  #
77
- # 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
78
305
  # future without notice.
79
306
  #
80
- # The hash includes information about internal statistics about GC such as:
307
+ # The hash includes internal statistics about GC such as:
81
308
  #
82
309
  # count
83
- # : The total number of garbage collections ran since application start (count
310
+ # : The total number of garbage collections run since application start (count
84
311
  # includes both minor and major garbage collections)
312
+ #
313
+ # time
314
+ # : The total time spent in garbage collections (in milliseconds)
315
+ #
85
316
  # heap_allocated_pages
86
317
  # : The total number of `:heap_eden_pages` + `:heap_tomb_pages`
318
+ #
87
319
  # heap_sorted_length
88
320
  # : The number of pages that can fit into the buffer that holds references to
89
321
  # all pages
322
+ #
90
323
  # heap_allocatable_pages
91
324
  # : The total number of pages the application could allocate without
92
325
  # additional GC
326
+ #
93
327
  # heap_available_slots
94
328
  # : The total number of slots in all `:heap_allocated_pages`
329
+ #
95
330
  # heap_live_slots
96
331
  # : The total number of slots which contain live objects
332
+ #
97
333
  # heap_free_slots
98
334
  # : The total number of slots which do not contain live objects
335
+ #
99
336
  # heap_final_slots
100
337
  # : The total number of slots with pending finalizers to be run
338
+ #
101
339
  # heap_marked_slots
102
340
  # : The total number of objects marked in the last GC
341
+ #
103
342
  # heap_eden_pages
104
343
  # : The total number of pages which contain at least one live slot
344
+ #
105
345
  # heap_tomb_pages
106
346
  # : The total number of pages which do not contain any live slots
347
+ #
107
348
  # total_allocated_pages
108
349
  # : The cumulative number of pages allocated since application start
350
+ #
109
351
  # total_freed_pages
110
352
  # : The cumulative number of pages freed since application start
353
+ #
111
354
  # total_allocated_objects
112
355
  # : The cumulative number of objects allocated since application start
356
+ #
113
357
  # total_freed_objects
114
358
  # : The cumulative number of objects freed since application start
359
+ #
115
360
  # malloc_increase_bytes
116
361
  # : Amount of memory allocated on the heap for objects. Decreased by any GC
362
+ #
117
363
  # malloc_increase_bytes_limit
118
364
  # : When `:malloc_increase_bytes` crosses this limit, GC is triggered
365
+ #
119
366
  # minor_gc_count
120
367
  # : The total number of minor garbage collections run since process start
368
+ #
121
369
  # major_gc_count
122
370
  # : The total number of major garbage collections run since process start
371
+ #
372
+ # compact_count
373
+ # : The total number of compactions run since process start
374
+ #
375
+ # read_barrier_faults
376
+ # : The total number of times the read barrier was triggered during compaction
377
+ #
378
+ # total_moved_objects
379
+ # : The total number of objects compaction has moved
380
+ #
123
381
  # remembered_wb_unprotected_objects
124
382
  # : The total number of objects without write barriers
383
+ #
125
384
  # remembered_wb_unprotected_objects_limit
126
385
  # : When `:remembered_wb_unprotected_objects` crosses this limit, major GC is
127
386
  # triggered
387
+ #
128
388
  # old_objects
129
389
  # : Number of live, old objects which have survived at least 3 garbage
130
390
  # collections
391
+ #
131
392
  # old_objects_limit
132
393
  # : When `:old_objects` crosses this limit, major GC is triggered
394
+ #
133
395
  # oldmalloc_increase_bytes
134
396
  # : Amount of memory allocated on the heap for objects. Decreased by major GC
397
+ #
135
398
  # oldmalloc_increase_bytes_limit
136
- # : When `:old_malloc_increase_bytes` crosses this limit, major GC is
137
- # triggered
399
+ # : When `:oldmalloc_increase_bytes` crosses this limit, major GC is triggered
138
400
  #
139
401
  #
140
402
  # If the optional argument, hash, is given, it is overwritten and returned. This
141
- # is intended to avoid probe effect.
403
+ # is intended to avoid the probe effect.
142
404
  #
143
405
  # This method is only expected to work on CRuby.
144
406
  #
145
- def self.stat: (?::Hash[Symbol, Integer] arg0) -> ::Hash[Symbol, Integer]
146
- | (?Symbol arg0) -> Integer
407
+ def self.stat: (?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
408
+ | (Symbol key) -> Integer
147
409
 
148
410
  # <!--
149
411
  # rdoc-file=gc.rb
150
- # - GC.stress -> integer, true or false
412
+ # - GC.measure_total_time = true/false
151
413
  # -->
152
- # Returns current status of GC stress mode.
414
+ # Enables measuring GC time. You can get the result with `GC.stat(:time)`. Note
415
+ # that GC time measurement can cause some performance overhead.
153
416
  #
154
- def self.stress: () -> (Integer | TrueClass | FalseClass)
417
+ def self.measure_total_time=: [T] (T enable) -> T
155
418
 
156
419
  # <!--
157
420
  # rdoc-file=gc.rb
158
- # - GC.stress = flag -> flag
421
+ # - GC.measure_total_time -> true/false
422
+ # -->
423
+ # Returns the measure_total_time flag (default: `true`). Note that measurement
424
+ # can affect the application's performance.
425
+ #
426
+ def self.measure_total_time: () -> bool
427
+
428
+ # <!--
429
+ # rdoc-file=gc.c
430
+ # - GC.auto_compact = flag
431
+ # -->
432
+ # Updates automatic compaction mode.
433
+ #
434
+ # When enabled, the compactor will execute on every major collection.
435
+ #
436
+ # Enabling compaction will degrade performance on major collections.
437
+ #
438
+ def self.auto_compact=: [T] (T enable) -> T
439
+
440
+ # <!--
441
+ # rdoc-file=gc.c
442
+ # - GC.auto_compact -> true or false
443
+ # -->
444
+ # Returns whether or not automatic compaction has been enabled.
445
+ #
446
+ def self.auto_compact: () -> bool
447
+
448
+ # <!--
449
+ # rdoc-file=gc.rb
450
+ # - GC.stat_heap -> Hash
451
+ # - GC.stat_heap(nil, hash) -> Hash
452
+ # - GC.stat_heap(heap_name) -> Hash
453
+ # - GC.stat_heap(heap_name, hash) -> Hash
454
+ # - GC.stat_heap(heap_name, :key) -> Numeric
455
+ # -->
456
+ # Returns information for heaps in the GC.
457
+ #
458
+ # If the first optional argument, `heap_name`, is passed in and not `nil`, it
459
+ # returns a `Hash` containing information about the particular heap. Otherwise,
460
+ # it will return a `Hash` with heap names as keys and a `Hash` containing
461
+ # information about the heap as values.
462
+ #
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.
465
+ #
466
+ # If both optional arguments are passed in and the second optional argument is a
467
+ # symbol, it will return a `Numeric` value for the particular heap.
468
+ #
469
+ # On CRuby, `heap_name` is of the type `Integer` but may be of type `String` on
470
+ # other implementations.
471
+ #
472
+ # The contents of the hash are implementation-specific and may change in the
473
+ # future without notice.
474
+ #
475
+ # If the optional argument, hash, is given, it is overwritten and returned.
476
+ #
477
+ # This method is only expected to work on CRuby.
478
+ #
479
+ # The hash includes the following keys about the internal information in the GC:
480
+ #
481
+ # slot_size
482
+ # : The slot size of the heap in bytes.
483
+ #
484
+ # heap_allocatable_pages
485
+ # : The number of pages that can be allocated without triggering a new garbage
486
+ # collection cycle.
487
+ #
488
+ # heap_eden_pages
489
+ # : The number of pages in the eden heap.
490
+ #
491
+ # heap_eden_slots
492
+ # : The total number of slots in all of the pages in the eden heap.
493
+ #
494
+ # heap_tomb_pages
495
+ # : The number of pages in the tomb heap. The tomb heap only contains pages
496
+ # that do not have any live objects.
497
+ #
498
+ # heap_tomb_slots
499
+ # : The total number of slots in all of the pages in the tomb heap.
500
+ #
501
+ # total_allocated_pages
502
+ # : The total number of pages that have been allocated in the heap.
503
+ #
504
+ # total_freed_pages
505
+ # : The total number of pages that have been freed and released back to the
506
+ # system in the heap.
507
+ #
508
+ # force_major_gc_count
509
+ # : The number of times this heap has forced major garbage collection cycles
510
+ # to start due to running out of free slots.
511
+ #
512
+ # force_incremental_marking_finish_count
513
+ # : The number of times this heap has forced incremental marking to complete
514
+ # due to running out of pooled slots.
515
+ #
516
+ def self.stat_heap: (?Integer? heap_name, ?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
517
+ | (Integer heap_name, Symbol key) -> Integer
518
+
519
+ # <!--
520
+ # rdoc-file=gc.c
521
+ # - GC.latest_compact_info -> hash
522
+ # -->
523
+ # Returns information about object moved in the most recent GC compaction.
524
+ #
525
+ # The returned hash has two keys :considered and :moved. The hash for
526
+ # :considered lists the number of objects that were considered for movement by
527
+ # the compactor, and the :moved hash lists the number of objects that were
528
+ # actually moved. Some objects can't be moved (maybe they were pinned) so these
529
+ # numbers can be used to calculate compaction efficiency.
530
+ #
531
+ def self.latest_compact_info: () -> compact_info
532
+
533
+ # <!--
534
+ # rdoc-file=gc.rb
535
+ # - GC.stress -> integer, true, or false
536
+ # -->
537
+ # Returns the current status of GC stress mode.
538
+ #
539
+ def self.stress: () -> (Integer | bool)
540
+
541
+ # <!--
542
+ # rdoc-file=gc.rb
543
+ # - GC.stress = flag -> flag
159
544
  # -->
160
545
  # Updates the GC stress mode.
161
546
  #
162
547
  # When stress mode is enabled, the GC is invoked at every GC opportunity: all
163
548
  # memory and object allocations.
164
549
  #
165
- # Enabling stress mode will degrade performance, it is only for debugging.
550
+ # Enabling stress mode will degrade performance; it is only for debugging.
166
551
  #
167
- # 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:
168
554
  # 0x01:: no major GC
169
555
  # 0x02:: no immediate sweep
170
556
  # 0x04:: full mark after malloc/calloc/realloc
171
557
  #
172
- def self.stress=: (Integer | TrueClass | FalseClass flag) -> (Integer | TrueClass | FalseClass)
558
+ def self.stress=: (Integer flag) -> Integer
559
+ | (bool flag) -> bool
173
560
 
174
561
  # <!--
175
562
  # rdoc-file=gc.rb
176
563
  # - GC.total_time -> int
177
564
  # -->
178
- # Return measured GC total time in nano seconds.
565
+ # Returns the measured GC total time in nanoseconds.
179
566
  #
180
567
  def self.total_time: () -> Integer
181
568
 
182
569
  # <!--
183
- # rdoc-file=gc.rb
570
+ # rdoc-file=gc.c
184
571
  # - GC.compact
185
572
  # -->
186
573
  # This function compacts objects together in Ruby's heap. It eliminates unused
@@ -192,7 +579,15 @@ module GC
192
579
  # This method is implementation specific and not expected to be implemented in
193
580
  # any implementation besides MRI.
194
581
  #
195
- def self.compact: () -> ::Hash[:considered | :moved, Hash[Symbol | Integer, Integer]]
582
+ # To test whether GC compaction is supported, use the idiom:
583
+ #
584
+ # GC.respond_to?(:compact)
585
+ #
586
+ def self.compact: () -> compact_info
587
+
588
+ # The type that `GC.compact` and related functions can return.
589
+ #
590
+ type compact_info = Hash[:considered | :moved | :moved_up | :moved_down, Hash[Symbol, Integer]]
196
591
 
197
592
  # <!--
198
593
  # rdoc-file=gc.rb
@@ -204,12 +599,12 @@ module GC
204
599
  # moved are replaced with T_MOVED objects. No object should have a reference to
205
600
  # a T_MOVED object after compaction.
206
601
  #
207
- # This function doubles the heap to ensure room to move all objects, compacts
602
+ # This function expands the heap to ensure room to move all objects, compacts
208
603
  # the heap to make sure everything moves, updates all references, then performs
209
604
  # a full GC. If any object contains a reference to a T_MOVED object, that
210
605
  # object should be pushed on the mark stack, and will make a SEGV.
211
606
  #
212
- def self.verify_compaction_references: () -> ::Hash[:considered | :moved, Hash[Symbol | Integer, Integer]]
607
+ def self.verify_compaction_references: (?toward: :empty | untyped, ?double_heap: boolish, ?expand_heap: boolish) -> compact_info
213
608
 
214
609
  # <!--
215
610
  # rdoc-file=gc.c
@@ -222,173 +617,28 @@ module GC
222
617
  #
223
618
  def self.verify_internal_consistency: () -> nil
224
619
 
225
- # <!--
226
- # rdoc-file=gc.c
227
- # - verify_transient_heap_internal_consistency()
228
- # -->
229
- #
230
- def self.verify_transient_heap_internal_consistency: () -> nil
231
-
232
620
  # <!--
233
621
  # rdoc-file=gc.rb
234
- # - GC.latest_gc_info -> {:gc_by=>:newobj}
622
+ # - GC.latest_gc_info -> hash
235
623
  # - GC.latest_gc_info(hash) -> hash
236
- # - GC.latest_gc_info(:major_by) -> :malloc
624
+ # - GC.latest_gc_info(key) -> value
237
625
  # -->
238
626
  # Returns information about the most recent garbage collection.
239
627
  #
240
- # If the optional argument, hash, is given, it is overwritten and returned. This
241
- # 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.
242
630
  #
243
- def self.latest_gc_info: () -> ::Hash[::Symbol, untyped]
244
- | [K] (?Hash[K, untyped] hash) -> ::Hash[::Symbol | K, untyped]
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]`.
633
+ #
634
+ def self.latest_gc_info: (?Hash[Symbol, untyped]? hash) -> Hash[Symbol, untyped]
245
635
  | (Symbol key) -> untyped
246
636
 
247
637
  # <!--
248
638
  # rdoc-file=gc.rb
249
639
  # - garbage_collect(full_mark: true, immediate_mark: true, immediate_sweep: true)
250
640
  # -->
641
+ # Alias of GC.start
251
642
  #
252
643
  def garbage_collect: (?immediate_sweep: boolish immediate_sweep, ?immediate_mark: boolish immediate_mark, ?full_mark: boolish full_mark) -> nil
253
644
  end
254
-
255
- # <!-- rdoc-file=gc.c -->
256
- # internal constants
257
- #
258
- GC::INTERNAL_CONSTANTS: Hash[Symbol, Integer]
259
-
260
- # <!-- rdoc-file=gc.c -->
261
- # GC build options
262
- #
263
- GC::OPTS: Array[String]
264
-
265
- # <!-- rdoc-file=gc.c -->
266
- # The GC profiler provides access to information on GC runs including time,
267
- # length and object space size.
268
- #
269
- # Example:
270
- #
271
- # GC::Profiler.enable
272
- #
273
- # require 'rdoc/rdoc'
274
- #
275
- # GC::Profiler.report
276
- #
277
- # GC::Profiler.disable
278
- #
279
- # See also GC.count, GC.malloc_allocated_size and GC.malloc_allocations
280
- #
281
- module GC::Profiler
282
- # <!--
283
- # rdoc-file=gc.c
284
- # - GC::Profiler.clear -> nil
285
- # -->
286
- # Clears the GC profiler data.
287
- #
288
- def self.clear: () -> void
289
-
290
- # <!--
291
- # rdoc-file=gc.c
292
- # - GC::Profiler.disable -> nil
293
- # -->
294
- # Stops the GC profiler.
295
- #
296
- def self.disable: () -> void
297
-
298
- # <!--
299
- # rdoc-file=gc.c
300
- # - GC::Profiler.enable -> nil
301
- # -->
302
- # Starts the GC profiler.
303
- #
304
- def self.enable: () -> void
305
-
306
- # <!--
307
- # rdoc-file=gc.c
308
- # - GC::Profiler.enabled? -> true or false
309
- # -->
310
- # The current status of GC profile mode.
311
- #
312
- def self.enabled?: () -> bool
313
-
314
- # <!--
315
- # rdoc-file=gc.c
316
- # - GC::Profiler.raw_data -> [Hash, ...]
317
- # -->
318
- # Returns an Array of individual raw profile data Hashes ordered from earliest
319
- # to latest by `:GC_INVOKE_TIME`.
320
- #
321
- # For example:
322
- #
323
- # [
324
- # {
325
- # :GC_TIME=>1.3000000000000858e-05,
326
- # :GC_INVOKE_TIME=>0.010634999999999999,
327
- # :HEAP_USE_SIZE=>289640,
328
- # :HEAP_TOTAL_SIZE=>588960,
329
- # :HEAP_TOTAL_OBJECTS=>14724,
330
- # :GC_IS_MARKED=>false
331
- # },
332
- # # ...
333
- # ]
334
- #
335
- # The keys mean:
336
- #
337
- # `:GC_TIME`
338
- # : Time elapsed in seconds for this GC run
339
- # `:GC_INVOKE_TIME`
340
- # : Time elapsed in seconds from startup to when the GC was invoked
341
- # `:HEAP_USE_SIZE`
342
- # : Total bytes of heap used
343
- # `:HEAP_TOTAL_SIZE`
344
- # : Total size of heap in bytes
345
- # `:HEAP_TOTAL_OBJECTS`
346
- # : Total number of objects
347
- # `:GC_IS_MARKED`
348
- # : Returns `true` if the GC is in mark phase
349
- #
350
- #
351
- # If ruby was built with `GC_PROFILE_MORE_DETAIL`, you will also have access to
352
- # the following hash keys:
353
- #
354
- # `:GC_MARK_TIME`
355
- # `:GC_SWEEP_TIME`
356
- # `:ALLOCATE_INCREASE`
357
- # `:ALLOCATE_LIMIT`
358
- # `:HEAP_USE_PAGES`
359
- # `:HEAP_LIVE_OBJECTS`
360
- # `:HEAP_FREE_OBJECTS`
361
- # `:HAVE_FINALIZE`
362
- # :
363
- #
364
- def self.raw_data: () -> ::Array[::Hash[Symbol, untyped]]
365
-
366
- # <!--
367
- # rdoc-file=gc.c
368
- # - GC::Profiler.report
369
- # - GC::Profiler.report(io)
370
- # -->
371
- # Writes the GC::Profiler.result to `$stdout` or the given IO object.
372
- #
373
- def self.report: (?IO io) -> void
374
-
375
- # <!--
376
- # rdoc-file=gc.c
377
- # - GC::Profiler.result -> String
378
- # -->
379
- # Returns a profile data report such as:
380
- #
381
- # GC 1 invokes.
382
- # Index Invoke Time(sec) Use Size(byte) Total Size(byte) Total Object GC time(ms)
383
- # 1 0.012 159240 212940 10647 0.00000000000001530000
384
- #
385
- def self.result: () -> String
386
-
387
- # <!--
388
- # rdoc-file=gc.c
389
- # - GC::Profiler.total_time -> float
390
- # -->
391
- # The total time used for garbage collection in seconds
392
- #
393
- def self.total_time: () -> Float
394
- end