rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
data/core/fiber.rbs ADDED
@@ -0,0 +1,570 @@
1
+ # <!-- rdoc-file=cont.c -->
2
+ # Fibers are primitives for implementing light weight cooperative concurrency in
3
+ # Ruby. Basically they are a means of creating code blocks that can be paused
4
+ # and resumed, much like threads. The main difference is that they are never
5
+ # preempted and that the scheduling must be done by the programmer and not the
6
+ # VM.
7
+ #
8
+ # As opposed to other stackless light weight concurrency models, each fiber
9
+ # comes with a stack. This enables the fiber to be paused from deeply nested
10
+ # function calls within the fiber block. See the ruby(1) manpage to configure
11
+ # the size of the fiber stack(s).
12
+ #
13
+ # When a fiber is created it will not run automatically. Rather it must be
14
+ # explicitly asked to run using the Fiber#resume method. The code running inside
15
+ # the fiber can give up control by calling Fiber.yield in which case it yields
16
+ # control back to caller (the caller of the Fiber#resume).
17
+ #
18
+ # Upon yielding or termination the Fiber returns the value of the last executed
19
+ # expression
20
+ #
21
+ # For instance:
22
+ #
23
+ # fiber = Fiber.new do
24
+ # Fiber.yield 1
25
+ # 2
26
+ # end
27
+ #
28
+ # puts fiber.resume
29
+ # puts fiber.resume
30
+ # puts fiber.resume
31
+ #
32
+ # *produces*
33
+ #
34
+ # 1
35
+ # 2
36
+ # FiberError: dead fiber called
37
+ #
38
+ # The Fiber#resume method accepts an arbitrary number of parameters, if it is
39
+ # the first call to #resume then they will be passed as block arguments.
40
+ # Otherwise they will be the return value of the call to Fiber.yield
41
+ #
42
+ # Example:
43
+ #
44
+ # fiber = Fiber.new do |first|
45
+ # second = Fiber.yield first + 2
46
+ # end
47
+ #
48
+ # puts fiber.resume 10
49
+ # puts fiber.resume 1_000_000
50
+ # puts fiber.resume "The fiber will be dead before I can cause trouble"
51
+ #
52
+ # *produces*
53
+ #
54
+ # 12
55
+ # 1000000
56
+ # FiberError: dead fiber called
57
+ #
58
+ # ## Non-blocking Fibers
59
+ #
60
+ # The concept of <em>non-blocking fiber</em> was introduced in Ruby 3.0. A
61
+ # non-blocking fiber, when reaching an operation that would normally block the
62
+ # fiber (like `sleep`, or wait for another process or I/O) will yield control to
63
+ # other fibers and allow the *scheduler* to handle blocking and waking up
64
+ # (resuming) this fiber when it can proceed.
65
+ #
66
+ # For a Fiber to behave as non-blocking, it need to be created in Fiber.new with
67
+ # <code>blocking: false</code> (which is the default), and Fiber.scheduler
68
+ # should be set with Fiber.set_scheduler. If Fiber.scheduler is not set in the
69
+ # current thread, blocking and non-blocking fibers' behavior is identical.
70
+ #
71
+ # Ruby doesn't provide a scheduler class: it is expected to be implemented by
72
+ # the user and correspond to Fiber::Scheduler.
73
+ #
74
+ # There is also Fiber.schedule method, which is expected to immediately perform
75
+ # the given block in a non-blocking manner. Its actual implementation is up to
76
+ # the scheduler.
77
+ #
78
+ class Fiber < Object
79
+ # <!--
80
+ # rdoc-file=cont.c
81
+ # - Fiber[key] -> value
82
+ # -->
83
+ # Returns the value of the fiber storage variable identified by `key`.
84
+ #
85
+ # The `key` must be a symbol, and the value is set by Fiber#[]= or
86
+ # Fiber#storage.
87
+ #
88
+ # See also Fiber::[]=.
89
+ #
90
+ def self.[]: (Symbol) -> untyped
91
+
92
+ # <!--
93
+ # rdoc-file=cont.c
94
+ # - Fiber[key] = value
95
+ # -->
96
+ # Assign `value` to the fiber storage variable identified by `key`. The variable
97
+ # is created if it doesn't exist.
98
+ #
99
+ # `key` must be a Symbol, otherwise a TypeError is raised.
100
+ #
101
+ # See also Fiber::[].
102
+ #
103
+ def self.[]=: [A] (Symbol, A) -> A
104
+
105
+ # <!--
106
+ # rdoc-file=cont.c
107
+ # - Fiber.blocking{|fiber| ...} -> result
108
+ # -->
109
+ # Forces the fiber to be blocking for the duration of the block. Returns the
110
+ # result of the block.
111
+ #
112
+ # See the "Non-blocking fibers" section in class docs for details.
113
+ #
114
+ def self.blocking: [T] () { (Fiber) -> T } -> T
115
+
116
+ # <!--
117
+ # rdoc-file=cont.c
118
+ # - Fiber.blocking? -> false or 1
119
+ # -->
120
+ # Returns `false` if the current fiber is non-blocking. Fiber is non-blocking if
121
+ # it was created via passing <code>blocking: false</code> to Fiber.new, or via
122
+ # Fiber.schedule.
123
+ #
124
+ # If the current Fiber is blocking, the method returns 1. Future developments
125
+ # may allow for situations where larger integers could be returned.
126
+ #
127
+ # Note that, even if the method returns `false`, Fiber behaves differently only
128
+ # if Fiber.scheduler is set in the current thread.
129
+ #
130
+ # See the "Non-blocking fibers" section in class docs for details.
131
+ #
132
+ def self.blocking?: () -> untyped
133
+
134
+ # <!--
135
+ # rdoc-file=cont.c
136
+ # - Fiber.current -> fiber
137
+ # -->
138
+ # Returns the current fiber. If you are not running in the context of a fiber
139
+ # this method will return the root fiber.
140
+ #
141
+ def self.current: () -> Fiber
142
+
143
+ # <!--
144
+ # rdoc-file=cont.c
145
+ # - Fiber.current_scheduler -> obj or nil
146
+ # -->
147
+ # Returns the Fiber scheduler, that was last set for the current thread with
148
+ # Fiber.set_scheduler if and only if the current fiber is non-blocking.
149
+ #
150
+ def self.current_scheduler: () -> untyped?
151
+
152
+ # <!--
153
+ # rdoc-file=cont.c
154
+ # - Fiber.schedule { |*args| ... } -> fiber
155
+ # -->
156
+ # The method is *expected* to immediately run the provided block of code in a
157
+ # separate non-blocking fiber.
158
+ #
159
+ # puts "Go to sleep!"
160
+ #
161
+ # Fiber.set_scheduler(MyScheduler.new)
162
+ #
163
+ # Fiber.schedule do
164
+ # puts "Going to sleep"
165
+ # sleep(1)
166
+ # puts "I slept well"
167
+ # end
168
+ #
169
+ # puts "Wakey-wakey, sleepyhead"
170
+ #
171
+ # Assuming MyScheduler is properly implemented, this program will produce:
172
+ #
173
+ # Go to sleep!
174
+ # Going to sleep
175
+ # Wakey-wakey, sleepyhead
176
+ # ...1 sec pause here...
177
+ # I slept well
178
+ #
179
+ # ...e.g. on the first blocking operation inside the Fiber
180
+ # (<code>sleep(1)</code>), the control is yielded to the outside code (main
181
+ # fiber), and *at the end of that execution*, the scheduler takes care of
182
+ # properly resuming all the blocked fibers.
183
+ #
184
+ # Note that the behavior described above is how the method is *expected* to
185
+ # behave, actual behavior is up to the current scheduler's implementation of
186
+ # Fiber::Scheduler#fiber method. Ruby doesn't enforce this method to behave in
187
+ # any particular way.
188
+ #
189
+ # If the scheduler is not set, the method raises <code>RuntimeError (No
190
+ # scheduler is available!)</code>.
191
+ #
192
+ def self.schedule: () { () -> void } -> Fiber
193
+
194
+ # <!--
195
+ # rdoc-file=cont.c
196
+ # - Fiber.scheduler -> obj or nil
197
+ # -->
198
+ # Returns the Fiber scheduler, that was last set for the current thread with
199
+ # Fiber.set_scheduler. Returns `nil` if no scheduler is set (which is the
200
+ # default), and non-blocking fibers' behavior is the same as blocking. (see
201
+ # "Non-blocking fibers" section in class docs for details about the scheduler
202
+ # concept).
203
+ #
204
+ def self.scheduler: () -> untyped?
205
+
206
+ # <!--
207
+ # rdoc-file=cont.c
208
+ # - Fiber.set_scheduler(scheduler) -> scheduler
209
+ # -->
210
+ # Sets the Fiber scheduler for the current thread. If the scheduler is set,
211
+ # non-blocking fibers (created by Fiber.new with <code>blocking: false</code>,
212
+ # or by Fiber.schedule) call that scheduler's hook methods on potentially
213
+ # blocking operations, and the current thread will call scheduler's `close`
214
+ # method on finalization (allowing the scheduler to properly manage all
215
+ # non-finished fibers).
216
+ #
217
+ # `scheduler` can be an object of any class corresponding to Fiber::Scheduler.
218
+ # Its implementation is up to the user.
219
+ #
220
+ # See also the "Non-blocking fibers" section in class docs.
221
+ #
222
+ def self.set_scheduler: (untyped) -> untyped
223
+
224
+ # <!--
225
+ # rdoc-file=cont.c
226
+ # - Fiber.yield(args, ...) -> obj
227
+ # -->
228
+ # Yields control back to the context that resumed the fiber, passing along any
229
+ # arguments that were passed to it. The fiber will resume processing at this
230
+ # point when #resume is called next. Any arguments passed to the next #resume
231
+ # will be the value that this Fiber.yield expression evaluates to.
232
+ #
233
+ def self.yield: (*untyped) -> untyped
234
+
235
+ # <!--
236
+ # rdoc-file=cont.c
237
+ # - Fiber.new(blocking: false, storage: true) { |*args| ... } -> fiber
238
+ # -->
239
+ # Creates new Fiber. Initially, the fiber is not running and can be resumed with
240
+ # #resume. Arguments to the first #resume call will be passed to the block:
241
+ #
242
+ # f = Fiber.new do |initial|
243
+ # current = initial
244
+ # loop do
245
+ # puts "current: #{current.inspect}"
246
+ # current = Fiber.yield
247
+ # end
248
+ # end
249
+ # f.resume(100) # prints: current: 100
250
+ # f.resume(1, 2, 3) # prints: current: [1, 2, 3]
251
+ # f.resume # prints: current: nil
252
+ # # ... and so on ...
253
+ #
254
+ # If <code>blocking: false</code> is passed to <code>Fiber.new</code>, *and*
255
+ # current thread has a Fiber.scheduler defined, the Fiber becomes non-blocking
256
+ # (see "Non-blocking Fibers" section in class docs).
257
+ #
258
+ # If the `storage` is unspecified, the default is to inherit a copy of the
259
+ # storage from the current fiber. This is the same as specifying <code>storage:
260
+ # true</code>.
261
+ #
262
+ # Fiber[:x] = 1
263
+ # Fiber.new do
264
+ # Fiber[:x] # => 1
265
+ # Fiber[:x] = 2
266
+ # end.resume
267
+ # Fiber[:x] # => 1
268
+ #
269
+ # If the given `storage` is `nil`, this function will lazy initialize the
270
+ # internal storage, which starts as an empty hash.
271
+ #
272
+ # Fiber[:x] = "Hello World"
273
+ # Fiber.new(storage: nil) do
274
+ # Fiber[:x] # nil
275
+ # end
276
+ #
277
+ # Otherwise, the given `storage` is used as the new fiber's storage, and it must
278
+ # be an instance of Hash.
279
+ #
280
+ # Explicitly using <code>storage: true</code> is currently experimental and may
281
+ # change in the future.
282
+ #
283
+ def initialize: (?blocking: boolish, ?storage: true | Hash[interned, untyped] | nil) { (?) -> void } -> void
284
+
285
+ # <!--
286
+ # rdoc-file=cont.c
287
+ # - fiber.alive? -> true or false
288
+ # -->
289
+ # Returns true if the fiber can still be resumed (or transferred to). After
290
+ # finishing execution of the fiber block this method will always return `false`.
291
+ #
292
+ def alive?: () -> bool
293
+
294
+ # <!--
295
+ # rdoc-file=cont.c
296
+ # - fiber.backtrace -> array
297
+ # - fiber.backtrace(start) -> array
298
+ # - fiber.backtrace(start, count) -> array
299
+ # - fiber.backtrace(start..end) -> array
300
+ # -->
301
+ # Returns the current execution stack of the fiber. `start`, `count` and `end`
302
+ # allow to select only parts of the backtrace.
303
+ #
304
+ # def level3
305
+ # Fiber.yield
306
+ # end
307
+ #
308
+ # def level2
309
+ # level3
310
+ # end
311
+ #
312
+ # def level1
313
+ # level2
314
+ # end
315
+ #
316
+ # f = Fiber.new { level1 }
317
+ #
318
+ # # It is empty before the fiber started
319
+ # f.backtrace
320
+ # #=> []
321
+ #
322
+ # f.resume
323
+ #
324
+ # f.backtrace
325
+ # #=> ["test.rb:2:in `yield'", "test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"]
326
+ # p f.backtrace(1) # start from the item 1
327
+ # #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"]
328
+ # p f.backtrace(2, 2) # start from item 2, take 2
329
+ # #=> ["test.rb:6:in `level2'", "test.rb:10:in `level1'"]
330
+ # p f.backtrace(1..3) # take items from 1 to 3
331
+ # #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'"]
332
+ #
333
+ # f.resume
334
+ #
335
+ # # It is nil after the fiber is finished
336
+ # f.backtrace
337
+ # #=> nil
338
+ #
339
+ def backtrace: (?Integer start, ?Integer count) -> Array[String]?
340
+ | (Range[Integer]) -> Array[String]?
341
+
342
+ # <!--
343
+ # rdoc-file=cont.c
344
+ # - fiber.backtrace_locations -> array
345
+ # - fiber.backtrace_locations(start) -> array
346
+ # - fiber.backtrace_locations(start, count) -> array
347
+ # - fiber.backtrace_locations(start..end) -> array
348
+ # -->
349
+ # Like #backtrace, but returns each line of the execution stack as a
350
+ # Thread::Backtrace::Location. Accepts the same arguments as #backtrace.
351
+ #
352
+ # f = Fiber.new { Fiber.yield }
353
+ # f.resume
354
+ # loc = f.backtrace_locations.first
355
+ # loc.label #=> "yield"
356
+ # loc.path #=> "test.rb"
357
+ # loc.lineno #=> 1
358
+ #
359
+ def backtrace_locations: (?Integer start, ?Integer count) -> Array[Thread::Backtrace::Location]?
360
+ | (Range[Integer]) -> Array[Thread::Backtrace::Location]?
361
+
362
+ # <!--
363
+ # rdoc-file=cont.c
364
+ # - fiber.blocking? -> true or false
365
+ # -->
366
+ # Returns `true` if `fiber` is blocking and `false` otherwise. Fiber is
367
+ # non-blocking if it was created via passing <code>blocking: false</code> to
368
+ # Fiber.new, or via Fiber.schedule.
369
+ #
370
+ # Note that, even if the method returns `false`, the fiber behaves differently
371
+ # only if Fiber.scheduler is set in the current thread.
372
+ #
373
+ # See the "Non-blocking fibers" section in class docs for details.
374
+ #
375
+ def blocking?: () -> bool
376
+
377
+ # <!--
378
+ # rdoc-file=cont.c
379
+ # - inspect()
380
+ # -->
381
+ #
382
+ alias inspect to_s
383
+
384
+ # <!--
385
+ # rdoc-file=cont.c
386
+ # - fiber.kill -> nil
387
+ # -->
388
+ # Terminates the fiber by raising an uncatchable exception. It only terminates
389
+ # the given fiber and no other fiber, returning `nil` to another fiber if that
390
+ # fiber was calling #resume or #transfer.
391
+ #
392
+ # <code>Fiber#kill</code> only interrupts another fiber when it is in
393
+ # Fiber.yield. If called on the current fiber then it raises that exception at
394
+ # the <code>Fiber#kill</code> call site.
395
+ #
396
+ # If the fiber has not been started, transition directly to the terminated
397
+ # state.
398
+ #
399
+ # If the fiber is already terminated, does nothing.
400
+ #
401
+ # Raises FiberError if called on a fiber belonging to another thread.
402
+ #
403
+ def kill: () -> nil
404
+
405
+ # <!--
406
+ # rdoc-file=cont.c
407
+ # - raise(exception, message = exception.to_s, backtrace = nil, cause: $!)
408
+ # - raise(message = nil, cause: $!)
409
+ # -->
410
+ # Raises an exception in the fiber at the point at which the last
411
+ # <code>Fiber.yield</code> was called.
412
+ #
413
+ # f = Fiber.new {
414
+ # puts "Before the yield"
415
+ # Fiber.yield 1 # -- exception will be raised here
416
+ # puts "After the yield"
417
+ # }
418
+ #
419
+ # p f.resume
420
+ # f.raise "Gotcha"
421
+ #
422
+ # Output
423
+ #
424
+ # Before the first yield
425
+ # 1
426
+ # t.rb:8:in 'Fiber.yield': Gotcha (RuntimeError)
427
+ # from t.rb:8:in 'block in <main>'
428
+ #
429
+ # If the fiber has not been started or has already run to completion, raises
430
+ # `FiberError`. If the fiber is yielding, it is resumed. If it is transferring,
431
+ # it is transferred into. But if it is resuming, raises `FiberError`.
432
+ #
433
+ # Raises `FiberError` if called on a Fiber belonging to another `Thread`.
434
+ #
435
+ # See Kernel#raise for more information on arguments.
436
+ #
437
+ def raise: (?string msg, ?cause: Exception?) -> untyped
438
+ | (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace, ?cause: Exception?) -> untyped
439
+
440
+ # <!--
441
+ # rdoc-file=cont.c
442
+ # - fiber.resume(args, ...) -> obj
443
+ # -->
444
+ # Resumes the fiber from the point at which the last Fiber.yield was called, or
445
+ # starts running it if it is the first call to #resume. Arguments passed to
446
+ # resume will be the value of the Fiber.yield expression or will be passed as
447
+ # block parameters to the fiber's block if this is the first #resume.
448
+ #
449
+ # Alternatively, when resume is called it evaluates to the arguments passed to
450
+ # the next Fiber.yield statement inside the fiber's block or to the block value
451
+ # if it runs to completion without any Fiber.yield
452
+ #
453
+ def resume: (*untyped) -> untyped
454
+
455
+ # <!--
456
+ # rdoc-file=cont.c
457
+ # - fiber.storage -> hash (dup)
458
+ # -->
459
+ # Returns a copy of the storage hash for the fiber. The method can only be
460
+ # called on the Fiber.current.
461
+ #
462
+ def storage: () -> Hash[interned, untyped]
463
+
464
+ # <!--
465
+ # rdoc-file=cont.c
466
+ # - fiber.storage = hash
467
+ # -->
468
+ # Sets the storage hash for the fiber. This feature is experimental and may
469
+ # change in the future. The method can only be called on the Fiber.current.
470
+ #
471
+ # You should be careful about using this method as you may inadvertently clear
472
+ # important fiber-storage state. You should mostly prefer to assign specific
473
+ # keys in the storage using Fiber::[]=.
474
+ #
475
+ # You can also use <code>Fiber.new(storage: nil)</code> to create a fiber with
476
+ # an empty storage.
477
+ #
478
+ # Example:
479
+ #
480
+ # while request = request_queue.pop
481
+ # # Reset the per-request state:
482
+ # Fiber.current.storage = nil
483
+ # handle_request(request)
484
+ # end
485
+ #
486
+ def storage=: (Hash[interned, untyped]) -> Hash[interned, untyped]
487
+
488
+ # <!--
489
+ # rdoc-file=cont.c
490
+ # - to_s()
491
+ # -->
492
+ #
493
+ def to_s: () -> untyped
494
+
495
+ # <!--
496
+ # rdoc-file=cont.c
497
+ # - fiber.transfer(args, ...) -> obj
498
+ # -->
499
+ # Transfer control to another fiber, resuming it from where it last stopped or
500
+ # starting it if it was not resumed before. The calling fiber will be suspended
501
+ # much like in a call to Fiber.yield.
502
+ #
503
+ # The fiber which receives the transfer call treats it much like a resume call.
504
+ # Arguments passed to transfer are treated like those passed to resume.
505
+ #
506
+ # The two style of control passing to and from fiber (one is #resume and
507
+ # Fiber::yield, another is #transfer to and from fiber) can't be freely mixed.
508
+ #
509
+ # * If the Fiber's lifecycle had started with transfer, it will never be able
510
+ # to yield or be resumed control passing, only finish or transfer back. (It
511
+ # still can resume other fibers that are allowed to be resumed.)
512
+ # * If the Fiber's lifecycle had started with resume, it can yield or transfer
513
+ # to another Fiber, but can receive control back only the way compatible
514
+ # with the way it was given away: if it had transferred, it only can be
515
+ # transferred back, and if it had yielded, it only can be resumed back.
516
+ # After that, it again can transfer or yield.
517
+ #
518
+ # If those rules are broken FiberError is raised.
519
+ #
520
+ # For an individual Fiber design, yield/resume is easier to use (the Fiber just
521
+ # gives away control, it doesn't need to think about who the control is given
522
+ # to), while transfer is more flexible for complex cases, allowing to build
523
+ # arbitrary graphs of Fibers dependent on each other.
524
+ #
525
+ # Example:
526
+ #
527
+ # manager = nil # For local var to be visible inside worker block
528
+ #
529
+ # # This fiber would be started with transfer
530
+ # # It can't yield, and can't be resumed
531
+ # worker = Fiber.new { |work|
532
+ # puts "Worker: starts"
533
+ # puts "Worker: Performed #{work.inspect}, transferring back"
534
+ # # Fiber.yield # this would raise FiberError: attempt to yield on a not resumed fiber
535
+ # # manager.resume # this would raise FiberError: attempt to resume a resumed fiber (double resume)
536
+ # manager.transfer(work.capitalize)
537
+ # }
538
+ #
539
+ # # This fiber would be started with resume
540
+ # # It can yield or transfer, and can be transferred
541
+ # # back or resumed
542
+ # manager = Fiber.new {
543
+ # puts "Manager: starts"
544
+ # puts "Manager: transferring 'something' to worker"
545
+ # result = worker.transfer('something')
546
+ # puts "Manager: worker returned #{result.inspect}"
547
+ # # worker.resume # this would raise FiberError: attempt to resume a transferring fiber
548
+ # Fiber.yield # this is OK, the fiber transferred from and to, now it can yield
549
+ # puts "Manager: finished"
550
+ # }
551
+ #
552
+ # puts "Starting the manager"
553
+ # manager.resume
554
+ # puts "Resuming the manager"
555
+ # # manager.transfer # this would raise FiberError: attempt to transfer to a yielding fiber
556
+ # manager.resume
557
+ #
558
+ # *produces*
559
+ #
560
+ # Starting the manager
561
+ # Manager: starts
562
+ # Manager: transferring 'something' to worker
563
+ # Worker: starts
564
+ # Worker: Performed "something", transferring back
565
+ # Manager: worker returned "Something"
566
+ # Resuming the manager
567
+ # Manager: finished
568
+ #
569
+ def transfer: (*untyped) -> untyped
570
+ end
@@ -0,0 +1,11 @@
1
+ # <!-- rdoc-file=cont.c -->
2
+ # Raised when an invalid operation is attempted on a Fiber, in particular when
3
+ # attempting to call/resume a dead fiber, attempting to yield from the root
4
+ # fiber, or calling a fiber across threads.
5
+ #
6
+ # fiber = Fiber.new{}
7
+ # fiber.resume #=> nil
8
+ # fiber.resume #=> FiberError: dead fiber called
9
+ #
10
+ class FiberError < StandardError
11
+ end