rbs 4.1.0-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 (569) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.dockerignore +37 -0
  5. data/.github/dependabot.yml +24 -0
  6. data/.github/workflows/bundle-update.yml +63 -0
  7. data/.github/workflows/c-check.yml +66 -0
  8. data/.github/workflows/comments.yml +37 -0
  9. data/.github/workflows/dependabot.yml +30 -0
  10. data/.github/workflows/jruby.yml +79 -0
  11. data/.github/workflows/milestone.yml +91 -0
  12. data/.github/workflows/ruby.yml +158 -0
  13. data/.github/workflows/rust.yml +186 -0
  14. data/.github/workflows/truffleruby.yml +54 -0
  15. data/.github/workflows/typecheck.yml +39 -0
  16. data/.github/workflows/wasm.yml +55 -0
  17. data/.github/workflows/windows.yml +49 -0
  18. data/.gitignore +39 -0
  19. data/.rubocop.yml +72 -0
  20. data/BSDL +22 -0
  21. data/CHANGELOG.md +2380 -0
  22. data/COPYING +56 -0
  23. data/Dockerfile.jruby +53 -0
  24. data/README.md +240 -0
  25. data/Rakefile +856 -0
  26. data/Steepfile +55 -0
  27. data/config.yml +913 -0
  28. data/core/array.rbs +4205 -0
  29. data/core/basic_object.rbs +376 -0
  30. data/core/binding.rbs +148 -0
  31. data/core/builtin.rbs +278 -0
  32. data/core/class.rbs +223 -0
  33. data/core/comparable.rbs +192 -0
  34. data/core/complex.rbs +812 -0
  35. data/core/constants.rbs +96 -0
  36. data/core/data.rbs +415 -0
  37. data/core/dir.rbs +993 -0
  38. data/core/encoding.rbs +1368 -0
  39. data/core/enumerable.rbs +2506 -0
  40. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  41. data/core/enumerator/product.rbs +92 -0
  42. data/core/enumerator.rbs +705 -0
  43. data/core/env.rbs +6 -0
  44. data/core/errno.rbs +682 -0
  45. data/core/errors.rbs +789 -0
  46. data/core/exception.rbs +485 -0
  47. data/core/false_class.rbs +82 -0
  48. data/core/fiber.rbs +570 -0
  49. data/core/fiber_error.rbs +11 -0
  50. data/core/file.rbs +2045 -0
  51. data/core/file_constants.rbs +463 -0
  52. data/core/file_stat.rbs +534 -0
  53. data/core/file_test.rbs +331 -0
  54. data/core/float.rbs +1292 -0
  55. data/core/gc.rbs +788 -0
  56. data/core/global_variables.rbs +184 -0
  57. data/core/hash.rbs +2183 -0
  58. data/core/integer.rbs +1374 -0
  59. data/core/io/buffer.rbs +995 -0
  60. data/core/io/wait.rbs +48 -0
  61. data/core/io.rbs +3472 -0
  62. data/core/kernel.rbs +3172 -0
  63. data/core/marshal.rbs +207 -0
  64. data/core/match_data.rbs +637 -0
  65. data/core/math.rbs +770 -0
  66. data/core/method.rbs +422 -0
  67. data/core/module.rbs +1856 -0
  68. data/core/nil_class.rbs +210 -0
  69. data/core/numeric.rbs +832 -0
  70. data/core/object.rbs +108 -0
  71. data/core/object_space/weak_key_map.rbs +166 -0
  72. data/core/object_space.rbs +197 -0
  73. data/core/pathname.rbs +1312 -0
  74. data/core/proc.rbs +905 -0
  75. data/core/process.rbs +2316 -0
  76. data/core/ractor.rbs +914 -0
  77. data/core/random.rbs +255 -0
  78. data/core/range.rbs +1209 -0
  79. data/core/rational.rbs +502 -0
  80. data/core/rb_config.rbs +88 -0
  81. data/core/rbs/ops.rbs +154 -0
  82. data/core/rbs/unnamed/argf.rbs +1236 -0
  83. data/core/rbs/unnamed/env_class.rbs +1214 -0
  84. data/core/rbs/unnamed/main_class.rbs +123 -0
  85. data/core/rbs/unnamed/random.rbs +186 -0
  86. data/core/refinement.rbs +59 -0
  87. data/core/regexp.rbs +1974 -0
  88. data/core/ruby.rbs +53 -0
  89. data/core/ruby_vm.rbs +809 -0
  90. data/core/rubygems/basic_specification.rbs +6 -0
  91. data/core/rubygems/config_file.rbs +38 -0
  92. data/core/rubygems/dependency_installer.rbs +6 -0
  93. data/core/rubygems/errors.rbs +112 -0
  94. data/core/rubygems/installer.rbs +15 -0
  95. data/core/rubygems/path_support.rbs +6 -0
  96. data/core/rubygems/platform.rbs +7 -0
  97. data/core/rubygems/request_set.rbs +49 -0
  98. data/core/rubygems/requirement.rbs +138 -0
  99. data/core/rubygems/rubygems.rbs +1108 -0
  100. data/core/rubygems/source_list.rbs +15 -0
  101. data/core/rubygems/specification.rbs +31 -0
  102. data/core/rubygems/stream_ui.rbs +5 -0
  103. data/core/rubygems/uninstaller.rbs +10 -0
  104. data/core/rubygems/version.rbs +133 -0
  105. data/core/set.rbs +751 -0
  106. data/core/signal.rbs +110 -0
  107. data/core/string.rbs +5532 -0
  108. data/core/struct.rbs +668 -0
  109. data/core/symbol.rbs +482 -0
  110. data/core/thread.rbs +1821 -0
  111. data/core/thread_group.rbs +79 -0
  112. data/core/time.rbs +1793 -0
  113. data/core/trace_point.rbs +483 -0
  114. data/core/true_class.rbs +98 -0
  115. data/core/unbound_method.rbs +337 -0
  116. data/core/warning.rbs +87 -0
  117. data/docs/CONTRIBUTING.md +107 -0
  118. data/docs/aliases.md +79 -0
  119. data/docs/architecture.md +110 -0
  120. data/docs/collection.md +192 -0
  121. data/docs/config.md +171 -0
  122. data/docs/data_and_struct.md +86 -0
  123. data/docs/encoding.md +56 -0
  124. data/docs/gem.md +56 -0
  125. data/docs/inline.md +634 -0
  126. data/docs/rbs_by_example.md +309 -0
  127. data/docs/release.md +69 -0
  128. data/docs/repo.md +125 -0
  129. data/docs/rust.md +96 -0
  130. data/docs/sigs.md +167 -0
  131. data/docs/stdlib.md +147 -0
  132. data/docs/syntax.md +940 -0
  133. data/docs/tools.md +17 -0
  134. data/docs/type_fingerprint.md +21 -0
  135. data/docs/wasm_serialization.md +80 -0
  136. data/exe/rbs +7 -0
  137. data/ext/rbs_extension/ast_translation.c +1855 -0
  138. data/ext/rbs_extension/ast_translation.h +41 -0
  139. data/ext/rbs_extension/class_constants.c +187 -0
  140. data/ext/rbs_extension/class_constants.h +104 -0
  141. data/ext/rbs_extension/compat.h +10 -0
  142. data/ext/rbs_extension/extconf.rb +40 -0
  143. data/ext/rbs_extension/legacy_location.c +299 -0
  144. data/ext/rbs_extension/legacy_location.h +82 -0
  145. data/ext/rbs_extension/main.c +613 -0
  146. data/ext/rbs_extension/rbs_extension.h +16 -0
  147. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  148. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  149. data/goodcheck.yml +91 -0
  150. data/include/rbs/ast.h +1047 -0
  151. data/include/rbs/defines.h +99 -0
  152. data/include/rbs/lexer.h +207 -0
  153. data/include/rbs/location.h +40 -0
  154. data/include/rbs/parser.h +153 -0
  155. data/include/rbs/serialize.h +39 -0
  156. data/include/rbs/string.h +47 -0
  157. data/include/rbs/util/rbs_allocator.h +59 -0
  158. data/include/rbs/util/rbs_assert.h +20 -0
  159. data/include/rbs/util/rbs_buffer.h +83 -0
  160. data/include/rbs/util/rbs_constant_pool.h +155 -0
  161. data/include/rbs/util/rbs_encoding.h +282 -0
  162. data/include/rbs/util/rbs_unescape.h +24 -0
  163. data/include/rbs.h +14 -0
  164. data/lib/rbs/ancestor_graph.rb +92 -0
  165. data/lib/rbs/annotate/annotations.rb +199 -0
  166. data/lib/rbs/annotate/formatter.rb +82 -0
  167. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  168. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  169. data/lib/rbs/annotate.rb +8 -0
  170. data/lib/rbs/ast/annotation.rb +29 -0
  171. data/lib/rbs/ast/comment.rb +29 -0
  172. data/lib/rbs/ast/declarations.rb +472 -0
  173. data/lib/rbs/ast/directives.rb +49 -0
  174. data/lib/rbs/ast/members.rb +451 -0
  175. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  176. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  177. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  178. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  179. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  180. data/lib/rbs/ast/ruby/members.rb +762 -0
  181. data/lib/rbs/ast/type_param.rb +235 -0
  182. data/lib/rbs/ast/visitor.rb +137 -0
  183. data/lib/rbs/buffer.rb +189 -0
  184. data/lib/rbs/builtin_names.rb +58 -0
  185. data/lib/rbs/cli/colored_io.rb +48 -0
  186. data/lib/rbs/cli/diff.rb +84 -0
  187. data/lib/rbs/cli/validate.rb +294 -0
  188. data/lib/rbs/cli.rb +1253 -0
  189. data/lib/rbs/collection/cleaner.rb +38 -0
  190. data/lib/rbs/collection/config/lockfile.rb +92 -0
  191. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  192. data/lib/rbs/collection/config.rb +81 -0
  193. data/lib/rbs/collection/installer.rb +32 -0
  194. data/lib/rbs/collection/sources/base.rb +14 -0
  195. data/lib/rbs/collection/sources/git.rb +265 -0
  196. data/lib/rbs/collection/sources/local.rb +81 -0
  197. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  198. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  199. data/lib/rbs/collection/sources.rb +38 -0
  200. data/lib/rbs/collection.rb +16 -0
  201. data/lib/rbs/constant.rb +28 -0
  202. data/lib/rbs/definition.rb +415 -0
  203. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  204. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  205. data/lib/rbs/definition_builder.rb +1054 -0
  206. data/lib/rbs/diff.rb +131 -0
  207. data/lib/rbs/environment/class_entry.rb +69 -0
  208. data/lib/rbs/environment/module_entry.rb +66 -0
  209. data/lib/rbs/environment/use_map.rb +77 -0
  210. data/lib/rbs/environment.rb +1028 -0
  211. data/lib/rbs/environment_loader.rb +167 -0
  212. data/lib/rbs/environment_walker.rb +155 -0
  213. data/lib/rbs/errors.rb +634 -0
  214. data/lib/rbs/factory.rb +18 -0
  215. data/lib/rbs/file_finder.rb +28 -0
  216. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  217. data/lib/rbs/inline_parser.rb +568 -0
  218. data/lib/rbs/location_aux.rb +170 -0
  219. data/lib/rbs/locator.rb +247 -0
  220. data/lib/rbs/method_type.rb +145 -0
  221. data/lib/rbs/namespace.rb +154 -0
  222. data/lib/rbs/parser/lex_result.rb +15 -0
  223. data/lib/rbs/parser/token.rb +23 -0
  224. data/lib/rbs/parser_aux.rb +144 -0
  225. data/lib/rbs/prototype/helpers.rb +197 -0
  226. data/lib/rbs/prototype/node_usage.rb +99 -0
  227. data/lib/rbs/prototype/rb.rb +816 -0
  228. data/lib/rbs/prototype/rbi.rb +793 -0
  229. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  230. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  231. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  232. data/lib/rbs/prototype/runtime.rb +680 -0
  233. data/lib/rbs/repository.rb +127 -0
  234. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  235. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  236. data/lib/rbs/rewriter.rb +70 -0
  237. data/lib/rbs/sorter.rb +198 -0
  238. data/lib/rbs/source.rb +99 -0
  239. data/lib/rbs/substitution.rb +83 -0
  240. data/lib/rbs/subtractor.rb +204 -0
  241. data/lib/rbs/test/errors.rb +80 -0
  242. data/lib/rbs/test/guaranteed.rb +30 -0
  243. data/lib/rbs/test/hook.rb +212 -0
  244. data/lib/rbs/test/observer.rb +19 -0
  245. data/lib/rbs/test/setup.rb +84 -0
  246. data/lib/rbs/test/setup_helper.rb +50 -0
  247. data/lib/rbs/test/tester.rb +167 -0
  248. data/lib/rbs/test/type_check.rb +457 -0
  249. data/lib/rbs/test.rb +112 -0
  250. data/lib/rbs/type_alias_dependency.rb +100 -0
  251. data/lib/rbs/type_alias_regularity.rb +126 -0
  252. data/lib/rbs/type_name.rb +122 -0
  253. data/lib/rbs/types.rb +1604 -0
  254. data/lib/rbs/unit_test/convertibles.rb +177 -0
  255. data/lib/rbs/unit_test/spy.rb +138 -0
  256. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  257. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  258. data/lib/rbs/unit_test.rb +6 -0
  259. data/lib/rbs/validator.rb +186 -0
  260. data/lib/rbs/variance_calculator.rb +189 -0
  261. data/lib/rbs/vendorer.rb +71 -0
  262. data/lib/rbs/version.rb +5 -0
  263. data/lib/rbs/wasm/deserializer.rb +213 -0
  264. data/lib/rbs/wasm/location.rb +61 -0
  265. data/lib/rbs/wasm/parser.rb +137 -0
  266. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  267. data/lib/rbs/wasm/runtime.rb +196 -0
  268. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  269. data/lib/rbs/writer.rb +424 -0
  270. data/lib/rbs.rb +117 -0
  271. data/lib/rbs_jars.rb +39 -0
  272. data/lib/rdoc/discover.rb +20 -0
  273. data/lib/rdoc_plugin/parser.rb +168 -0
  274. data/rbs.gemspec +81 -0
  275. data/schema/annotation.json +14 -0
  276. data/schema/comment.json +26 -0
  277. data/schema/decls.json +326 -0
  278. data/schema/function.json +87 -0
  279. data/schema/location.json +56 -0
  280. data/schema/members.json +266 -0
  281. data/schema/methodType.json +50 -0
  282. data/schema/typeParam.json +52 -0
  283. data/schema/types.json +317 -0
  284. data/sig/ancestor_builder.rbs +163 -0
  285. data/sig/ancestor_graph.rbs +60 -0
  286. data/sig/annotate/annotations.rbs +102 -0
  287. data/sig/annotate/formatter.rbs +24 -0
  288. data/sig/annotate/rdoc_annotater.rbs +85 -0
  289. data/sig/annotate/rdoc_source.rbs +32 -0
  290. data/sig/annotation.rbs +27 -0
  291. data/sig/ast/ruby/annotations.rbs +470 -0
  292. data/sig/ast/ruby/comment_block.rbs +127 -0
  293. data/sig/ast/ruby/declarations.rbs +158 -0
  294. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  295. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  296. data/sig/ast/ruby/members.rbs +198 -0
  297. data/sig/buffer.rbs +108 -0
  298. data/sig/builtin_names.rbs +44 -0
  299. data/sig/cli/colored_io.rbs +15 -0
  300. data/sig/cli/diff.rbs +15 -0
  301. data/sig/cli/validate.rbs +47 -0
  302. data/sig/cli.rbs +89 -0
  303. data/sig/collection/cleaner.rbs +13 -0
  304. data/sig/collection/config/lockfile.rbs +74 -0
  305. data/sig/collection/config/lockfile_generator.rbs +68 -0
  306. data/sig/collection/config.rbs +46 -0
  307. data/sig/collection/installer.rbs +17 -0
  308. data/sig/collection/sources.rbs +214 -0
  309. data/sig/collection.rbs +4 -0
  310. data/sig/comment.rbs +26 -0
  311. data/sig/constant.rbs +21 -0
  312. data/sig/declarations.rbs +274 -0
  313. data/sig/definition.rbs +232 -0
  314. data/sig/definition_builder.rbs +181 -0
  315. data/sig/diff.rbs +28 -0
  316. data/sig/directives.rbs +77 -0
  317. data/sig/environment/class_entry.rbs +50 -0
  318. data/sig/environment/module_entry.rbs +50 -0
  319. data/sig/environment.rbs +286 -0
  320. data/sig/environment_loader.rbs +111 -0
  321. data/sig/environment_walker.rbs +65 -0
  322. data/sig/errors.rbs +408 -0
  323. data/sig/factory.rbs +5 -0
  324. data/sig/file_finder.rbs +28 -0
  325. data/sig/inline_parser/comment_association.rbs +71 -0
  326. data/sig/inline_parser.rbs +126 -0
  327. data/sig/location.rbs +135 -0
  328. data/sig/locator.rbs +56 -0
  329. data/sig/manifest.yaml +5 -0
  330. data/sig/members.rbs +258 -0
  331. data/sig/method_builder.rbs +89 -0
  332. data/sig/method_types.rbs +58 -0
  333. data/sig/namespace.rbs +161 -0
  334. data/sig/parser.rbs +164 -0
  335. data/sig/prototype/helpers.rbs +29 -0
  336. data/sig/prototype/node_usage.rbs +20 -0
  337. data/sig/prototype/rb.rbs +96 -0
  338. data/sig/prototype/rbi.rbs +104 -0
  339. data/sig/prototype/runtime.rbs +182 -0
  340. data/sig/rbs.rbs +21 -0
  341. data/sig/rdoc/rbs.rbs +67 -0
  342. data/sig/repository.rbs +85 -0
  343. data/sig/resolver/constant_resolver.rbs +92 -0
  344. data/sig/resolver/context.rbs +34 -0
  345. data/sig/resolver/type_name_resolver.rbs +61 -0
  346. data/sig/rewriter.rbs +45 -0
  347. data/sig/shims/bundler.rbs +38 -0
  348. data/sig/shims/enumerable.rbs +5 -0
  349. data/sig/shims/rubygems.rbs +19 -0
  350. data/sig/sorter.rbs +41 -0
  351. data/sig/source.rbs +48 -0
  352. data/sig/substitution.rbs +48 -0
  353. data/sig/subtractor.rbs +37 -0
  354. data/sig/test/errors.rbs +52 -0
  355. data/sig/test/guranteed.rbs +9 -0
  356. data/sig/test/type_check.rbs +19 -0
  357. data/sig/test.rbs +82 -0
  358. data/sig/type_alias_dependency.rbs +53 -0
  359. data/sig/type_alias_regularity.rbs +98 -0
  360. data/sig/type_param.rbs +115 -0
  361. data/sig/typename.rbs +89 -0
  362. data/sig/types.rbs +578 -0
  363. data/sig/unit_test/convertibles.rbs +154 -0
  364. data/sig/unit_test/spy.rbs +22 -0
  365. data/sig/unit_test/type_assertions.rbs +211 -0
  366. data/sig/unit_test/with_aliases.rbs +136 -0
  367. data/sig/use_map.rbs +35 -0
  368. data/sig/util.rbs +9 -0
  369. data/sig/validator.rbs +63 -0
  370. data/sig/variance_calculator.rbs +87 -0
  371. data/sig/vendorer.rbs +51 -0
  372. data/sig/version.rbs +3 -0
  373. data/sig/visitor.rbs +47 -0
  374. data/sig/wasm/deserializer.rbs +66 -0
  375. data/sig/wasm/serialization_schema.rbs +13 -0
  376. data/sig/writer.rbs +127 -0
  377. data/src/ast.c +1628 -0
  378. data/src/lexer.c +3221 -0
  379. data/src/lexer.re +155 -0
  380. data/src/lexstate.c +221 -0
  381. data/src/location.c +31 -0
  382. data/src/parser.c +4255 -0
  383. data/src/serialize.c +958 -0
  384. data/src/string.c +41 -0
  385. data/src/util/rbs_allocator.c +171 -0
  386. data/src/util/rbs_assert.c +19 -0
  387. data/src/util/rbs_buffer.c +54 -0
  388. data/src/util/rbs_constant_pool.c +268 -0
  389. data/src/util/rbs_encoding.c +21308 -0
  390. data/src/util/rbs_unescape.c +167 -0
  391. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  392. data/stdlib/abbrev/0/array.rbs +26 -0
  393. data/stdlib/base64/0/base64.rbs +355 -0
  394. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  395. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  396. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  397. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  398. data/stdlib/cgi/0/core.rbs +911 -0
  399. data/stdlib/cgi/0/manifest.yaml +4 -0
  400. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  401. data/stdlib/coverage/0/coverage.rbs +266 -0
  402. data/stdlib/csv/0/csv.rbs +3776 -0
  403. data/stdlib/csv/0/manifest.yaml +3 -0
  404. data/stdlib/date/0/date.rbs +1598 -0
  405. data/stdlib/date/0/date_time.rbs +617 -0
  406. data/stdlib/date/0/time.rbs +26 -0
  407. data/stdlib/dbm/0/dbm.rbs +421 -0
  408. data/stdlib/delegate/0/delegator.rbs +188 -0
  409. data/stdlib/delegate/0/kernel.rbs +47 -0
  410. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  411. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  412. data/stdlib/digest/0/digest.rbs +693 -0
  413. data/stdlib/erb/0/erb.rbs +933 -0
  414. data/stdlib/etc/0/etc.rbs +884 -0
  415. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  416. data/stdlib/find/0/find.rbs +49 -0
  417. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  418. data/stdlib/io-console/0/io-console.rbs +414 -0
  419. data/stdlib/ipaddr/0/ipaddr.rbs +431 -0
  420. data/stdlib/json/0/json.rbs +1963 -0
  421. data/stdlib/kconv/0/kconv.rbs +166 -0
  422. data/stdlib/logger/0/formatter.rbs +45 -0
  423. data/stdlib/logger/0/log_device.rbs +100 -0
  424. data/stdlib/logger/0/logger.rbs +796 -0
  425. data/stdlib/logger/0/manifest.yaml +2 -0
  426. data/stdlib/logger/0/period.rbs +17 -0
  427. data/stdlib/logger/0/severity.rbs +34 -0
  428. data/stdlib/minitest/0/kernel.rbs +42 -0
  429. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  430. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  431. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  432. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  433. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  434. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  435. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  436. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  437. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  438. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  439. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  440. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  441. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  442. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  443. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  444. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  445. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  446. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  447. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  448. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  449. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  450. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  451. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  452. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  453. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  454. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  455. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  456. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  457. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  458. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  459. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  460. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  461. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  462. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  463. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  464. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  465. data/stdlib/minitest/0/minitest.rbs +115 -0
  466. data/stdlib/monitor/0/monitor.rbs +363 -0
  467. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  468. data/stdlib/net-http/0/manifest.yaml +3 -0
  469. data/stdlib/net-http/0/net-http.rbs +5580 -0
  470. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  471. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  472. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  473. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  474. data/stdlib/nkf/0/nkf.rbs +402 -0
  475. data/stdlib/objspace/0/objspace.rbs +470 -0
  476. data/stdlib/observable/0/observable.rbs +217 -0
  477. data/stdlib/open-uri/0/manifest.yaml +4 -0
  478. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  479. data/stdlib/open3/0/open3.rbs +606 -0
  480. data/stdlib/openssl/0/manifest.yaml +3 -0
  481. data/stdlib/openssl/0/openssl.rbs +12237 -0
  482. data/stdlib/optparse/0/optparse.rbs +1734 -0
  483. data/stdlib/pathname/0/pathname.rbs +36 -0
  484. data/stdlib/pp/0/manifest.yaml +2 -0
  485. data/stdlib/pp/0/pp.rbs +301 -0
  486. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  487. data/stdlib/pstore/0/pstore.rbs +608 -0
  488. data/stdlib/psych/0/core_ext.rbs +12 -0
  489. data/stdlib/psych/0/dbm.rbs +237 -0
  490. data/stdlib/psych/0/manifest.yaml +3 -0
  491. data/stdlib/psych/0/psych.rbs +455 -0
  492. data/stdlib/psych/0/store.rbs +57 -0
  493. data/stdlib/pty/0/pty.rbs +240 -0
  494. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  495. data/stdlib/rdoc/0/code_object.rbs +52 -0
  496. data/stdlib/rdoc/0/comment.rbs +61 -0
  497. data/stdlib/rdoc/0/context.rbs +153 -0
  498. data/stdlib/rdoc/0/markup.rbs +117 -0
  499. data/stdlib/rdoc/0/options.rbs +76 -0
  500. data/stdlib/rdoc/0/parser.rbs +56 -0
  501. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  502. data/stdlib/rdoc/0/ri.rbs +17 -0
  503. data/stdlib/rdoc/0/store.rbs +48 -0
  504. data/stdlib/rdoc/0/top_level.rbs +97 -0
  505. data/stdlib/resolv/0/manifest.yaml +3 -0
  506. data/stdlib/resolv/0/resolv.rbs +1787 -0
  507. data/stdlib/ripper/0/ripper.rbs +1654 -0
  508. data/stdlib/securerandom/0/manifest.yaml +2 -0
  509. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  510. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  511. data/stdlib/singleton/0/singleton.rbs +134 -0
  512. data/stdlib/socket/0/addrinfo.rbs +666 -0
  513. data/stdlib/socket/0/basic_socket.rbs +590 -0
  514. data/stdlib/socket/0/constants.rbs +2295 -0
  515. data/stdlib/socket/0/ip_socket.rbs +94 -0
  516. data/stdlib/socket/0/socket.rbs +4170 -0
  517. data/stdlib/socket/0/socket_error.rbs +5 -0
  518. data/stdlib/socket/0/tcp_server.rbs +192 -0
  519. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  520. data/stdlib/socket/0/udp_socket.rbs +133 -0
  521. data/stdlib/socket/0/unix_server.rbs +169 -0
  522. data/stdlib/socket/0/unix_socket.rbs +172 -0
  523. data/stdlib/stringio/0/stringio.rbs +1681 -0
  524. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  525. data/stdlib/tempfile/0/manifest.yaml +3 -0
  526. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  527. data/stdlib/time/0/time.rbs +434 -0
  528. data/stdlib/timeout/0/timeout.rbs +132 -0
  529. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  530. data/stdlib/tsort/0/cyclic.rbs +8 -0
  531. data/stdlib/tsort/0/interfaces.rbs +20 -0
  532. data/stdlib/tsort/0/tsort.rbs +410 -0
  533. data/stdlib/uri/0/common.rbs +621 -0
  534. data/stdlib/uri/0/file.rbs +118 -0
  535. data/stdlib/uri/0/ftp.rbs +13 -0
  536. data/stdlib/uri/0/generic.rbs +1111 -0
  537. data/stdlib/uri/0/http.rbs +104 -0
  538. data/stdlib/uri/0/https.rbs +14 -0
  539. data/stdlib/uri/0/ldap.rbs +230 -0
  540. data/stdlib/uri/0/ldaps.rbs +14 -0
  541. data/stdlib/uri/0/mailto.rbs +92 -0
  542. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  543. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  544. data/stdlib/uri/0/ws.rbs +13 -0
  545. data/stdlib/uri/0/wss.rbs +9 -0
  546. data/stdlib/yaml/0/manifest.yaml +2 -0
  547. data/stdlib/yaml/0/yaml.rbs +1 -0
  548. data/stdlib/zlib/0/buf_error.rbs +10 -0
  549. data/stdlib/zlib/0/data_error.rbs +10 -0
  550. data/stdlib/zlib/0/deflate.rbs +211 -0
  551. data/stdlib/zlib/0/error.rbs +20 -0
  552. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  553. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  554. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  555. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  556. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  557. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  558. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  559. data/stdlib/zlib/0/inflate.rbs +180 -0
  560. data/stdlib/zlib/0/mem_error.rbs +10 -0
  561. data/stdlib/zlib/0/need_dict.rbs +13 -0
  562. data/stdlib/zlib/0/stream_end.rbs +11 -0
  563. data/stdlib/zlib/0/stream_error.rbs +11 -0
  564. data/stdlib/zlib/0/version_error.rbs +11 -0
  565. data/stdlib/zlib/0/zlib.rbs +449 -0
  566. data/stdlib/zlib/0/zstream.rbs +200 -0
  567. data/wasm/README.md +60 -0
  568. data/wasm/rbs_wasm.c +423 -0
  569. metadata +671 -0
@@ -0,0 +1,309 @@
1
+ # RBS By Example
2
+
3
+ ## Goal
4
+
5
+ The purpose of this doc is to teach you how to write RBS signatures by using the standard library's methods as a guide.
6
+
7
+ ## Examples
8
+
9
+ In each example, the first snippet is for *Ruby* and the second one is for *RBS*.
10
+
11
+ ### Zero argument methods
12
+
13
+ **Example:** `String#empty?`
14
+
15
+ ```ruby
16
+ "".empty?
17
+ # => true
18
+ "hello".empty?
19
+ # => false
20
+ ```
21
+
22
+ ```rbs
23
+ class String
24
+ def empty?: () -> bool
25
+ end
26
+ ```
27
+
28
+ `String`'s `#empty` method takes no parameters, and returns a boolean value
29
+
30
+ ### Single argument methods
31
+
32
+ **Example:** `String#include?`
33
+
34
+ ```ruby
35
+ "homeowner".include?("house")
36
+ # => false
37
+ "homeowner".include?("meow")
38
+ # => true
39
+ ```
40
+
41
+ ```rbs
42
+ class String
43
+ def include?: (String) -> bool
44
+ end
45
+ ```
46
+
47
+ `String`'s `include?` method takes one argument, a `String`, and returns a
48
+ boolean value
49
+
50
+ ### Variable argument methods
51
+
52
+ **Example:** `String#end_with?`
53
+
54
+ ```ruby
55
+ "hello?".end_with?("!")
56
+ # => false
57
+ "hello?".end_with?("?")
58
+ # => true
59
+ "hello?".end_with?("?", "!")
60
+ # => true
61
+ "hello?".end_with?(".", "!")
62
+ # => false
63
+ ```
64
+
65
+ ```rbs
66
+ class String
67
+ def end_with?: (*String) -> bool
68
+ end
69
+ ```
70
+
71
+ `String`'s `#end_with?` method takes any number of `String` arguments, and
72
+ returns a boolean value.
73
+
74
+ ### Optional positional arguments
75
+
76
+ **Example:** `String#ljust`
77
+
78
+ ```ruby
79
+ "hello".ljust(4)
80
+ #=> "hello"
81
+ "hello".ljust(20)
82
+ #=> "hello "
83
+ "hello".ljust(20, '1234')
84
+ #=> "hello123412341234123"
85
+ ```
86
+
87
+ ```rbs
88
+ class String
89
+ def ljust: (Integer, ?String) -> String
90
+ end
91
+ ```
92
+
93
+ `String`'s `ljust` takes one `Integer` argument, and an optional `String` argument, indicated by the the `?` prefix marker. It returns a `String`.
94
+
95
+ ### Multiple signatures for a single method
96
+
97
+ **Example:** `Array#*`
98
+
99
+ ```ruby
100
+ [1, 2, 3] * ","
101
+ # => "1,2,3"
102
+ [1, 2, 3] * 2
103
+ # => [1, 2, 3, 1, 2, 3]
104
+ ```
105
+
106
+ *Note:* Some of the signatures after this point include type variables (e.g. `Elem`, `T`).
107
+ For now, it's safe to ignore them, but they're included for completeness.
108
+
109
+ ```rbs
110
+ class Array[E]
111
+ def *: (String) -> String
112
+ | (Integer) -> Array[E]
113
+ end
114
+ ```
115
+
116
+ `Array`'s `*` method, when given a `String` returns a `String`. When given an
117
+ `Integer`, it returns an `Array` of the same contained type `E` (in our example case, `E` corresponds to `Integer`).
118
+
119
+ ### Union types
120
+
121
+ **Example:** `String#<<`
122
+
123
+ ```ruby
124
+ a = "hello "
125
+ a << "world"
126
+ #=> "hello world"
127
+ a << 33
128
+ #=> "hello world!"
129
+ ```
130
+
131
+ ```rbs
132
+ class String
133
+ def <<: (String | Integer) -> String
134
+ end
135
+ ```
136
+
137
+ `String`'s `<<` operator takes either a `String` or an `Integer`, and returns a `String`.
138
+
139
+ ### Nilable types
140
+
141
+ ```ruby
142
+ [1, 2, 3].first
143
+ # => 1
144
+ [].first
145
+ # => nil
146
+ [1, 2, 3].first(2)
147
+ # => [1, 2]
148
+ [].first(2)
149
+ # => []
150
+ ```
151
+
152
+ ```rbs
153
+ class Enumerable[E]
154
+ def first: () -> E?
155
+ | (Integer) -> Array[E]
156
+ end
157
+ ```
158
+
159
+ `Enumerable`'s `#first` method has two different signatures.
160
+
161
+ When called with no arguments, the return value will either be an instance of
162
+ whatever type is contained in the enumerable, or `nil`. We represent that with
163
+ the type variable `E`, and the `?` suffix nilable marker.
164
+
165
+ When called with an `Integer` positional argument, the return value will be an
166
+ `Array` of whatever type is contained.
167
+
168
+ The `?` syntax is a convenient shorthand for a union with nil. An equivalent union type would be `(E | nil)`.
169
+
170
+ ### Keyword Arguments
171
+
172
+ **Example**: `String#lines`
173
+
174
+ ```ruby
175
+ "hello\nworld\n".lines
176
+ # => ["hello\n", "world\n"]
177
+ "hello world".lines(' ')
178
+ # => ["hello ", " ", "world"]
179
+ "hello\nworld\n".lines(chomp: true)
180
+ # => ["hello", "world"]
181
+ ```
182
+
183
+ ```rbs
184
+ class String
185
+ def lines: (?String, ?chomp: bool) -> Array[String]
186
+ end
187
+ ```
188
+
189
+ `String`'s `#lines` method take two arguments: one optional String argument, and another optional boolean keyword argument. It returns an `Array` of `String`s.
190
+
191
+ Keyword arguments are declared similar to in ruby, with the keyword immediately followed by a colon. Keyword arguments that are optional are indicated as optional using the same `?` prefix as positional arguments.
192
+
193
+
194
+ ### Class methods
195
+
196
+ **Example**: `Time.now`
197
+
198
+ ```ruby
199
+ Time.now
200
+ # => 2009-06-24 12:39:54 +0900
201
+ ```
202
+
203
+ ```rbs
204
+ class Time
205
+ def self.now: () -> Time
206
+ end
207
+ ```
208
+
209
+ `Time`'s class method `now` takes no arguments, and returns an instance of the
210
+ `Time` class.
211
+
212
+ ### Block Arguments
213
+
214
+ **Example**: `Array#filter`
215
+
216
+ ```ruby
217
+ [1,2,3,4,5].filter {|num| num.even? }
218
+ # => [2, 4]
219
+ %w[ a b c d e f ].filter {|v| v =~ /[aeiou]/ }
220
+ # => ["a", "e"]
221
+ [1,2,3,4,5].filter
222
+ ```
223
+
224
+ ```rbs
225
+ class Array[E]
226
+ def filter: () { (E) -> boolish } -> ::Array[E]
227
+ | () -> ::Enumerator[E, ::Array[E]]
228
+ end
229
+ ```
230
+
231
+ `Array`'s `#filter` method, when called with no arguments returns an Enumerator.
232
+
233
+ When called with a block, the method returns an `Array` of whatever type the original contained. The block will take one argument, of the type of the contained value, and the block will return a truthy or falsy value.
234
+
235
+ `boolish` is a special keyword for any type that will be treated as if it were a `bool`.
236
+
237
+ ### Type Variables
238
+
239
+ **Example**: `Hash`, `Hash#keys`
240
+
241
+ ```ruby
242
+ h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }
243
+ h.keys
244
+ # => ["a", "b", "c", "d"]
245
+ ```
246
+
247
+ ```rbs
248
+ class Hash[K, V]
249
+ def keys: () -> Array[K]
250
+ end
251
+ ```
252
+
253
+ Generic types in RBS are parameterized at declaration time. These type variables are then available throughout all the methods contained in the `class` block.
254
+
255
+ `Hash`'s `#keys` method takes no arguments, and returns an `Array` of the first type parameter. In the above example, `a` is of concrete type `Hash[String, Integer]`, so `#keys` returns an `Array` for `String`.
256
+
257
+
258
+ ```ruby
259
+ a = [ "a", "b", "c", "d" ]
260
+ a.collect {|x| x + "!"}
261
+ # => ["a!", "b!", "c!", "d!"]
262
+ a.collect.with_index {|x, i| x * i}
263
+ # => ["", "b", "cc", "ddd"]
264
+ ```
265
+
266
+ ```rbs
267
+ class Array[E]
268
+ def collect: [U] () { (E) -> U } -> Array[U]
269
+ | () -> Enumerator[E, Array[untyped]]
270
+ end
271
+ ```
272
+
273
+ Type variables can also be introduced in methods. Here, in `Array`'s `#collect` method, we introduce a type variable `U`. The block passed to `#collect` will receive a parameter of type `E`, and return a value of type `U`. Then `#collect` will return an `Array` of type `U`.
274
+
275
+ In this example, the method receives its signature from the inferred return type of the passed block. When then block is absent, as in when the method returns an `Enumerator`, we can't infer the type, and so the return value of the enumerator can only be described as `Array[untyped]`.
276
+
277
+ ### Tuples
278
+
279
+ **Examples**: `Enumerable#partition`, `Enumerable#to_h`
280
+
281
+ ```ruby
282
+ (1..6).partition { |v| v.even? }
283
+ # => [[2, 4, 6], [1, 3, 5]]
284
+ ```
285
+
286
+ ```rbs
287
+ class Enumerable[E]
288
+ def partition: () { (E) -> boolish } -> [Array[E], Array[E]]
289
+ | () -> ::Enumerator[E, [Array[E], Array[E] ]]
290
+ end
291
+ ```
292
+
293
+ `Enumerable`'s `partition` method, when given a block, returns a 2-item tuple of `Array`s containing the original type of the `Enumerable`.
294
+
295
+ Tuples can be of any size, and they can have mixed types.
296
+
297
+ ```ruby
298
+ (1..5).to_h {|x| [x, x ** 2]}
299
+ # => {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
300
+ ```
301
+
302
+ ```rbs
303
+ class Enumerable[E]
304
+ def to_h: () -> ::Hash[untyped, untyped]
305
+ | [T, U] () { (E) -> [T, U] } -> ::Hash[T, U]
306
+ end
307
+ ```
308
+
309
+ `Enumerable`'s `to_h` method, when given a block that returns a 2-item tuple, returns a `Hash` with keys the type of the first position in the tuple, and values the type of the second position in the tuple.
data/docs/release.md ADDED
@@ -0,0 +1,69 @@
1
+ # Releasing RBS
2
+
3
+ Each release ships **two gems**:
4
+
5
+ | Gem | Platform | Parser | How it is built |
6
+ | --- | --- | --- | --- |
7
+ | `rbs-X.Y.Z.gem` | `ruby` (MRI) | C extension | `rake release` (re-builds it) |
8
+ | `rbs-X.Y.Z-java.gem` | `java` (JRuby) | WebAssembly (`lib/rbs/wasm`) | Docker image, pushed manually |
9
+
10
+ The `-java` gem contains no native code — just `rbs_parser.wasm`. The Chicory/ASM
11
+ jars it needs are not shipped in the gem; they are declared as `jar-dependencies`
12
+ requirements and fetched from Maven when the gem is installed. So the gem can be
13
+ built once in any environment and runs on every JRuby.
14
+
15
+ ## Prerequisites
16
+
17
+ - Push rights to the `rbs` gem on RubyGems (`gem signin`). If your account has
18
+ MFA enabled, `gem push` / `rake release` will prompt for an OTP.
19
+ - Docker, for the `-java` gem. The WASI SDK is baked into the image, so there is
20
+ nothing to install on the host.
21
+
22
+ ## Steps
23
+
24
+ ### 1. Release the `ruby` gem
25
+
26
+ Once the version is bumped and committed, run on CRuby:
27
+
28
+ ```console
29
+ $ bundle exec rake release
30
+ ```
31
+
32
+ This re-builds the `ruby`-platform gem and then:
33
+
34
+ - creates the tag `vX.Y.Z`,
35
+ - pushes the current branch and the tag to `origin`,
36
+ - pushes the gem to RubyGems,
37
+ - runs `release:note`, which opens a GitHub **draft** release (with
38
+ `--prerelease` for `*.pre.*` versions) and prints the remaining manual steps.
39
+
40
+ ### 2. Build and push the `java` gem
41
+
42
+ The `java` gem is not built by `rake release`, so build and push it manually:
43
+
44
+ ```console
45
+ # Build from the committed state (the gemspec's file list comes from `git ls-files`).
46
+ $ docker build -f Dockerfile.jruby -t rbs-jruby .
47
+
48
+ # Build rbs_parser.wasm and the -java gem into ./pkg on the host. The Chicory/ASM
49
+ # jars are not bundled; they are fetched from Maven when the gem is installed.
50
+ $ docker run --rm -e RBS_PLATFORM=java -v "$PWD/pkg:/out" rbs-jruby \
51
+ gem build rbs.gemspec -o /out/rbs-X.Y.Z-java.gem
52
+
53
+ $ gem push pkg/rbs-X.Y.Z-java.gem
54
+ ```
55
+
56
+ Optionally confirm it installs and runs on JRuby before pushing:
57
+
58
+ ```console
59
+ $ docker run --rm -v "$PWD/pkg:/pkg" -w /tmp rbs-jruby bash -c \
60
+ 'gem install /pkg/rbs-X.Y.Z-java.gem && ruby -e "require %q{rbs}; puts [RUBY_ENGINE, RBS::VERSION].join(%q{ })"'
61
+ ```
62
+
63
+ ## Notes
64
+
65
+ - Prereleases (`X.Y.Z.pre.N`) are only installed with `gem install rbs --pre`;
66
+ a plain `gem install rbs` is unaffected. On JRuby, `gem install rbs [--pre]`
67
+ resolves to the `-java` gem automatically.
68
+ - The Dockerfile pins the WASI SDK / Chicory / ASM versions to match the
69
+ `wasm` and `jruby` CI workflows. Keep them in sync when bumping.
data/docs/repo.md ADDED
@@ -0,0 +1,125 @@
1
+ # Third-party RBS Repository
2
+
3
+ This is the spec of the directory structure for RBS files of gems without RBS files. It allows distributing RBS type definitions of gems separately from the `.gemspec` files so that the Ruby developers can type check their Ruby programs even if the dependent gems don't ship with their type definitions.
4
+
5
+ The spec includes:
6
+
7
+ * The directory structure, and
8
+ * The RBS file lookup rules given _repository root_, gem name, and version.
9
+
10
+ ## Motivating Example
11
+
12
+ Assume there is a rubygem called `bug-free-doodle` and our application depends on the library. We are trying to type check our application and we need RBS files of `bug-free-doodle`. The problem is that the `bug-free-doodle` gem doesn't ship with RBS files. The type checkers cannot resolve the type of constant `Bug::Free::Doodle` and its methods.
13
+
14
+ One workaround is to add type definitions of the library in the application signatures.
15
+
16
+ ```rbs
17
+ # sig/polyfill/bug-free-doodle.rbs
18
+
19
+ module Bug
20
+ module Free
21
+ class Doodle
22
+ attr_reader name: Symbol
23
+ attr_reader strokes: Array[Stroke]
24
+
25
+ def initialize: (name: Symbol) -> void
26
+ end
27
+ end
28
+ end
29
+ ```
30
+
31
+ You may want to distribute the RBS file to anyone who needs it. Which version do we support? Testing it? How to load the RBS files? This is the spec you need!
32
+
33
+ ### Third-party RBS repository
34
+
35
+ Make a directory (or you may want to `git init`) to put your _third party RBSs_.
36
+
37
+ ```sh
38
+ $ make my-rbs # Or you may want a git repository: git init my-rbs
39
+ $ cd my-rbs
40
+ $ mkdir gems
41
+ ```
42
+
43
+ We call the `my-rbs/gems` directory _repository root_. Note that it is different from the root of the git repository. The RBS repository root is the directory that contains directories of gem names.
44
+
45
+ Make a directory for the gem and the version.
46
+
47
+ ```sh
48
+ $ mkdir gems/bug-free-doodle
49
+ $ mkdir gems/bug-free-doodle/1.2.3
50
+ ```
51
+
52
+ And copy the RBS file in it.
53
+
54
+ ```sh
55
+ $ cp your-app/sig/polyfill/bug-free-doodle.rbs gems/bug-free-doodle/1.2.3
56
+ ```
57
+
58
+ ### Reading Third-party RBS
59
+
60
+ `rbs` command accepts `--repo` option which points to a _repository root_. You can specify `-r` option to let the command know which gems you want to load.
61
+
62
+ In this case, the _repository root_ is `./gems` and we are trying to load `bug-free-doodle` gem.
63
+
64
+ ```sh
65
+ $ rbs --repo=gems -r bug-free-doodle paths
66
+ ```
67
+
68
+ The `-r` option also accepts gem name with version.
69
+
70
+ ```sh
71
+ $ rbs --repo=gems -r bug-free-doodle:1.2.3 paths
72
+ ```
73
+
74
+ Note that the version resolution is not compatible with semantic versioning. It is optimistic. It resolves to some version unless no version for the gem is available.
75
+
76
+ ## Directory Structure
77
+
78
+ There are directories for each gem under _repository root_. We also have directories for each version of each gem.
79
+
80
+ - $REPO_ROOT/bug-free-doodle/0.2.0
81
+ - $REPO_ROOT/bug-free-doodle/1.0
82
+ - $REPO_ROOT/bug-free-doodle/1.2.3
83
+ - $REPO_ROOT/bug-free-doodle/2.0
84
+
85
+ Note that we assume that we have git repositories for each RBS repository, and we have a directory at the root of the git repository for _repository root_.
86
+
87
+ So the git repository structure would be something like the following:
88
+
89
+ - /Gemfile
90
+ - /Gemfile.lock
91
+ - /README.md
92
+ - /LICENSE
93
+ - /gems/bug-free-doodle/1.2.3/bug-free-doodle.rbs
94
+
95
+ You should have `Gemfile` and `Gemfile.lock` to manage dependencies, `README.md` and `LICENSE` to documentation, and `gems` directory as _repository root_.
96
+
97
+ (We call _repository root_ `gems` in this doc, but the name can be anything you like.)
98
+
99
+ ## Version Resolution
100
+
101
+ The version resolution in RBS is optimistic. We don't block loading RBS files for _incompatible_ version in terms of semantic versioning.
102
+
103
+ It tries to resolve version _n_ as follows:
104
+
105
+ 1. It resolves to _m_ such that _m_ is the latest version available and _m_ <= _n_ holds.
106
+ 2. It resolves to the oldest version when rule 1 cannot find version _m_.
107
+
108
+ If two versions, `0.4.0`, `1.0.0` are available for a gem:
109
+
110
+ | Requested version | Resolved version |
111
+ |-------------------|------------------|
112
+ | `0.3.0` | `0.4.0` (Rule 2) |
113
+ | `0.4.0` | `0.4.0` |
114
+ | `0.5.0` | `0.4.0` |
115
+ | `1.0.0` | `1.0.0` |
116
+ | `2.0.0` | `1.0.0` |
117
+
118
+ This is not compatible with the concept of semantic versioning. We don't want to block users to load RBS even for incompatible versions of gems.
119
+
120
+ We believe this makes more sense because:
121
+
122
+ * Using (potentially) incompatible type definitions are better than no type definition.
123
+ * Users can stop loading RBS if incompatibility causes an issue and falling back to hand-written polyfills.
124
+
125
+
data/docs/rust.md ADDED
@@ -0,0 +1,96 @@
1
+ # Rust Crates
2
+
3
+ RBS provides two Rust crates:
4
+
5
+ - **`ruby-rbs-sys`** -- Low-level FFI bindings to the RBS C parser
6
+ - **`ruby-rbs`** -- High-level safe Rust API for parsing RBS signatures
7
+
8
+ Both crates are published to [crates.io](https://crates.io/) and are developed within the `rust/` directory of this repository.
9
+
10
+ ## Vendored RBS Source
11
+
12
+ The Rust crates depend on the RBS C parser source code (`include/`, `src/`) and configuration (`config.yml`) from this repository. These files are vendored into each crate's `vendor/rbs/` directory, which is managed by Rake tasks and not tracked by git.
13
+
14
+ The file `rust/rbs_version` records which version of RBS the Rust crates are pinned to.
15
+
16
+ ## Setup
17
+
18
+ After cloning the repository, set up the vendored source before building the Rust crates:
19
+
20
+ ```bash
21
+ rake rust:rbs:sync # Uses the pinned version from rust/rbs_version
22
+ ```
23
+
24
+ Then build and test:
25
+
26
+ ```bash
27
+ cd rust
28
+ cargo test
29
+ ```
30
+
31
+ ## Rake Tasks
32
+
33
+ ### `rake rust:rbs:sync`
34
+
35
+ Copies the source files from the pinned version into each crate's `vendor/rbs/`. The copied files are made read-only to prevent accidental edits.
36
+
37
+ ### `rake rust:rbs:pin[VERSION]`
38
+
39
+ Records a git tag in `rust/rbs_version`. For example:
40
+
41
+ ```bash
42
+ rake rust:rbs:pin[v4.0.3]
43
+ ```
44
+
45
+ ### `rake rust:publish:ruby-rbs-sys` / `rake rust:publish:ruby-rbs`
46
+
47
+ Publishes each crate to crates.io individually. Each task:
48
+
49
+ 1. Verifies `rust/rbs_version` is set
50
+ 2. Verifies vendor directories contain real files (not symlinks)
51
+ 3. Verifies the git working tree is clean
52
+ 4. Creates a release branch and commits the vendor files
53
+ 5. Runs a dry-run to check packaging
54
+ 6. Publishes the crate
55
+
56
+ Set `RBS_RUST_PUBLISH_DRY_RUN=1` to only run the dry-run step and skip the actual publish to crates.io. This is used in CI to verify that the crates can be packaged correctly.
57
+
58
+ ### `rake rust:rbs:symlink`
59
+
60
+ If your development needs unreleased version of RBS source code, use `rake rust:rbs:symlink` to set up symlinks in vendor directories to refer the worktree source code. Changes to the C parser source are immediately reflected in Rust builds.
61
+
62
+ ## Publishing Workflow
63
+
64
+ 1. Pin the RBS version to release against:
65
+
66
+ ```bash
67
+ rake rust:rbs:pin[v4.0.3]
68
+ ```
69
+
70
+ 2. Sync the vendored source:
71
+
72
+ ```bash
73
+ rake rust:rbs:sync
74
+ ```
75
+
76
+ 3. Update crate versions in `rust/ruby-rbs-sys/Cargo.toml` and `rust/ruby-rbs/Cargo.toml`.
77
+
78
+ 4. Build and test:
79
+
80
+ ```bash
81
+ cd rust && cargo test
82
+ ```
83
+
84
+ 5. Commit the version changes and `rust/rbs_version`:
85
+
86
+ ```bash
87
+ git add rust/rbs_version rust/ruby-rbs-sys/Cargo.toml rust/ruby-rbs/Cargo.toml
88
+ git commit -m "Bump Rust crate versions"
89
+ ```
90
+
91
+ 6. Publish each crate:
92
+
93
+ ```bash
94
+ rake rust:publish:ruby-rbs-sys
95
+ rake rust:publish:ruby-rbs
96
+ ```