rbs-relaxed 3.9.0.1

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 (484) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +22 -0
  3. data/.github/workflows/comments.yml +35 -0
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +82 -0
  6. data/.github/workflows/typecheck.yml +38 -0
  7. data/.github/workflows/windows.yml +43 -0
  8. data/.gitignore +23 -0
  9. data/.rubocop.yml +68 -0
  10. data/BSDL +22 -0
  11. data/CHANGELOG.md +1868 -0
  12. data/COPYING +56 -0
  13. data/README.md +203 -0
  14. data/Rakefile +417 -0
  15. data/Steepfile +44 -0
  16. data/config.yml +313 -0
  17. data/core/array.rbs +4062 -0
  18. data/core/basic_object.rbs +375 -0
  19. data/core/binding.rbs +150 -0
  20. data/core/builtin.rbs +277 -0
  21. data/core/class.rbs +220 -0
  22. data/core/comparable.rbs +171 -0
  23. data/core/complex.rbs +786 -0
  24. data/core/constants.rbs +96 -0
  25. data/core/data.rbs +415 -0
  26. data/core/dir.rbs +981 -0
  27. data/core/encoding.rbs +1371 -0
  28. data/core/enumerable.rbs +2405 -0
  29. data/core/enumerator/product.rbs +92 -0
  30. data/core/enumerator.rbs +630 -0
  31. data/core/env.rbs +6 -0
  32. data/core/errno.rbs +673 -0
  33. data/core/errors.rbs +760 -0
  34. data/core/exception.rbs +485 -0
  35. data/core/false_class.rbs +82 -0
  36. data/core/fiber.rbs +550 -0
  37. data/core/fiber_error.rbs +11 -0
  38. data/core/file.rbs +2936 -0
  39. data/core/file_test.rbs +331 -0
  40. data/core/float.rbs +1151 -0
  41. data/core/gc.rbs +644 -0
  42. data/core/global_variables.rbs +184 -0
  43. data/core/hash.rbs +1861 -0
  44. data/core/integer.rbs +1413 -0
  45. data/core/io/buffer.rbs +984 -0
  46. data/core/io/wait.rbs +70 -0
  47. data/core/io.rbs +3406 -0
  48. data/core/kernel.rbs +3096 -0
  49. data/core/marshal.rbs +207 -0
  50. data/core/match_data.rbs +635 -0
  51. data/core/math.rbs +729 -0
  52. data/core/method.rbs +386 -0
  53. data/core/module.rbs +1704 -0
  54. data/core/nil_class.rbs +209 -0
  55. data/core/numeric.rbs +818 -0
  56. data/core/object.rbs +110 -0
  57. data/core/object_space/weak_key_map.rbs +166 -0
  58. data/core/object_space.rbs +190 -0
  59. data/core/proc.rbs +868 -0
  60. data/core/process.rbs +2296 -0
  61. data/core/ractor.rbs +1068 -0
  62. data/core/random.rbs +237 -0
  63. data/core/range.rbs +1107 -0
  64. data/core/rational.rbs +531 -0
  65. data/core/rb_config.rbs +88 -0
  66. data/core/rbs/unnamed/argf.rbs +1229 -0
  67. data/core/rbs/unnamed/env_class.rbs +1209 -0
  68. data/core/rbs/unnamed/random.rbs +293 -0
  69. data/core/refinement.rbs +59 -0
  70. data/core/regexp.rbs +1930 -0
  71. data/core/ruby_vm.rbs +765 -0
  72. data/core/rubygems/basic_specification.rbs +6 -0
  73. data/core/rubygems/config_file.rbs +38 -0
  74. data/core/rubygems/dependency_installer.rbs +6 -0
  75. data/core/rubygems/errors.rbs +176 -0
  76. data/core/rubygems/installer.rbs +15 -0
  77. data/core/rubygems/path_support.rbs +6 -0
  78. data/core/rubygems/platform.rbs +7 -0
  79. data/core/rubygems/request_set.rbs +49 -0
  80. data/core/rubygems/requirement.rbs +148 -0
  81. data/core/rubygems/rubygems.rbs +1171 -0
  82. data/core/rubygems/source_list.rbs +15 -0
  83. data/core/rubygems/specification.rbs +23 -0
  84. data/core/rubygems/stream_ui.rbs +5 -0
  85. data/core/rubygems/uninstaller.rbs +10 -0
  86. data/core/rubygems/version.rbs +294 -0
  87. data/core/set.rbs +621 -0
  88. data/core/signal.rbs +100 -0
  89. data/core/string.rbs +3583 -0
  90. data/core/struct.rbs +667 -0
  91. data/core/symbol.rbs +475 -0
  92. data/core/thread.rbs +1765 -0
  93. data/core/thread_group.rbs +79 -0
  94. data/core/time.rbs +1762 -0
  95. data/core/trace_point.rbs +477 -0
  96. data/core/true_class.rbs +98 -0
  97. data/core/unbound_method.rbs +329 -0
  98. data/core/warning.rbs +87 -0
  99. data/docs/CONTRIBUTING.md +106 -0
  100. data/docs/architecture.md +110 -0
  101. data/docs/collection.md +192 -0
  102. data/docs/data_and_struct.md +86 -0
  103. data/docs/gem.md +57 -0
  104. data/docs/rbs_by_example.md +309 -0
  105. data/docs/repo.md +125 -0
  106. data/docs/sigs.md +167 -0
  107. data/docs/stdlib.md +147 -0
  108. data/docs/syntax.md +910 -0
  109. data/docs/tools.md +17 -0
  110. data/exe/rbs +7 -0
  111. data/ext/rbs_extension/extconf.rb +15 -0
  112. data/ext/rbs_extension/lexer.c +2728 -0
  113. data/ext/rbs_extension/lexer.h +179 -0
  114. data/ext/rbs_extension/lexer.re +147 -0
  115. data/ext/rbs_extension/lexstate.c +175 -0
  116. data/ext/rbs_extension/location.c +325 -0
  117. data/ext/rbs_extension/location.h +85 -0
  118. data/ext/rbs_extension/main.c +33 -0
  119. data/ext/rbs_extension/parser.c +2973 -0
  120. data/ext/rbs_extension/parser.h +18 -0
  121. data/ext/rbs_extension/parserstate.c +397 -0
  122. data/ext/rbs_extension/parserstate.h +163 -0
  123. data/ext/rbs_extension/rbs_extension.h +31 -0
  124. data/ext/rbs_extension/unescape.c +32 -0
  125. data/goodcheck.yml +91 -0
  126. data/include/rbs/constants.h +82 -0
  127. data/include/rbs/ruby_objs.h +72 -0
  128. data/include/rbs/util/rbs_constant_pool.h +219 -0
  129. data/include/rbs.h +7 -0
  130. data/lib/rbs/ancestor_graph.rb +92 -0
  131. data/lib/rbs/annotate/annotations.rb +199 -0
  132. data/lib/rbs/annotate/formatter.rb +92 -0
  133. data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
  134. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  135. data/lib/rbs/annotate.rb +8 -0
  136. data/lib/rbs/ast/annotation.rb +29 -0
  137. data/lib/rbs/ast/comment.rb +29 -0
  138. data/lib/rbs/ast/declarations.rb +467 -0
  139. data/lib/rbs/ast/directives.rb +49 -0
  140. data/lib/rbs/ast/members.rb +451 -0
  141. data/lib/rbs/ast/type_param.rb +225 -0
  142. data/lib/rbs/ast/visitor.rb +137 -0
  143. data/lib/rbs/buffer.rb +67 -0
  144. data/lib/rbs/builtin_names.rb +58 -0
  145. data/lib/rbs/cli/colored_io.rb +48 -0
  146. data/lib/rbs/cli/diff.rb +83 -0
  147. data/lib/rbs/cli/validate.rb +357 -0
  148. data/lib/rbs/cli.rb +1223 -0
  149. data/lib/rbs/collection/cleaner.rb +38 -0
  150. data/lib/rbs/collection/config/lockfile.rb +92 -0
  151. data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
  152. data/lib/rbs/collection/config.rb +81 -0
  153. data/lib/rbs/collection/installer.rb +32 -0
  154. data/lib/rbs/collection/sources/base.rb +14 -0
  155. data/lib/rbs/collection/sources/git.rb +258 -0
  156. data/lib/rbs/collection/sources/local.rb +81 -0
  157. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  158. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  159. data/lib/rbs/collection/sources.rb +38 -0
  160. data/lib/rbs/collection.rb +16 -0
  161. data/lib/rbs/constant.rb +28 -0
  162. data/lib/rbs/definition.rb +401 -0
  163. data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
  164. data/lib/rbs/definition_builder/method_builder.rb +254 -0
  165. data/lib/rbs/definition_builder.rb +845 -0
  166. data/lib/rbs/diff.rb +125 -0
  167. data/lib/rbs/environment/use_map.rb +77 -0
  168. data/lib/rbs/environment.rb +829 -0
  169. data/lib/rbs/environment_loader.rb +173 -0
  170. data/lib/rbs/environment_walker.rb +155 -0
  171. data/lib/rbs/errors.rb +645 -0
  172. data/lib/rbs/factory.rb +18 -0
  173. data/lib/rbs/file_finder.rb +28 -0
  174. data/lib/rbs/location_aux.rb +138 -0
  175. data/lib/rbs/locator.rb +243 -0
  176. data/lib/rbs/method_type.rb +143 -0
  177. data/lib/rbs/namespace.rb +125 -0
  178. data/lib/rbs/parser/lex_result.rb +15 -0
  179. data/lib/rbs/parser/token.rb +23 -0
  180. data/lib/rbs/parser_aux.rb +114 -0
  181. data/lib/rbs/prototype/helpers.rb +140 -0
  182. data/lib/rbs/prototype/node_usage.rb +99 -0
  183. data/lib/rbs/prototype/rb.rb +840 -0
  184. data/lib/rbs/prototype/rbi.rb +641 -0
  185. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  186. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  187. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  188. data/lib/rbs/prototype/runtime.rb +667 -0
  189. data/lib/rbs/repository.rb +127 -0
  190. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  191. data/lib/rbs/resolver/type_name_resolver.rb +91 -0
  192. data/lib/rbs/sorter.rb +198 -0
  193. data/lib/rbs/substitution.rb +83 -0
  194. data/lib/rbs/subtractor.rb +201 -0
  195. data/lib/rbs/test/errors.rb +80 -0
  196. data/lib/rbs/test/guaranteed.rb +30 -0
  197. data/lib/rbs/test/hook.rb +212 -0
  198. data/lib/rbs/test/observer.rb +19 -0
  199. data/lib/rbs/test/setup.rb +84 -0
  200. data/lib/rbs/test/setup_helper.rb +50 -0
  201. data/lib/rbs/test/tester.rb +167 -0
  202. data/lib/rbs/test/type_check.rb +435 -0
  203. data/lib/rbs/test.rb +112 -0
  204. data/lib/rbs/type_alias_dependency.rb +100 -0
  205. data/lib/rbs/type_alias_regularity.rb +126 -0
  206. data/lib/rbs/type_name.rb +109 -0
  207. data/lib/rbs/types.rb +1596 -0
  208. data/lib/rbs/unit_test/convertibles.rb +176 -0
  209. data/lib/rbs/unit_test/spy.rb +138 -0
  210. data/lib/rbs/unit_test/type_assertions.rb +347 -0
  211. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  212. data/lib/rbs/unit_test.rb +6 -0
  213. data/lib/rbs/validator.rb +186 -0
  214. data/lib/rbs/variance_calculator.rb +189 -0
  215. data/lib/rbs/vendorer.rb +71 -0
  216. data/lib/rbs/version.rb +5 -0
  217. data/lib/rbs/writer.rb +424 -0
  218. data/lib/rbs.rb +94 -0
  219. data/lib/rdoc/discover.rb +20 -0
  220. data/lib/rdoc_plugin/parser.rb +163 -0
  221. data/rbs-relaxed.gemspec +48 -0
  222. data/schema/annotation.json +14 -0
  223. data/schema/comment.json +26 -0
  224. data/schema/decls.json +326 -0
  225. data/schema/function.json +87 -0
  226. data/schema/location.json +56 -0
  227. data/schema/members.json +266 -0
  228. data/schema/methodType.json +50 -0
  229. data/schema/typeParam.json +36 -0
  230. data/schema/types.json +317 -0
  231. data/sig/ancestor_builder.rbs +163 -0
  232. data/sig/ancestor_graph.rbs +60 -0
  233. data/sig/annotate/annotations.rbs +102 -0
  234. data/sig/annotate/formatter.rbs +24 -0
  235. data/sig/annotate/rdoc_annotater.rbs +82 -0
  236. data/sig/annotate/rdoc_source.rbs +30 -0
  237. data/sig/annotation.rbs +27 -0
  238. data/sig/buffer.rbs +32 -0
  239. data/sig/builtin_names.rbs +44 -0
  240. data/sig/cli/colored_io.rbs +15 -0
  241. data/sig/cli/diff.rbs +21 -0
  242. data/sig/cli/validate.rbs +43 -0
  243. data/sig/cli.rbs +87 -0
  244. data/sig/collection/cleaner.rbs +13 -0
  245. data/sig/collection/config/lockfile.rbs +74 -0
  246. data/sig/collection/config/lockfile_generator.rbs +66 -0
  247. data/sig/collection/config.rbs +46 -0
  248. data/sig/collection/installer.rbs +17 -0
  249. data/sig/collection/sources.rbs +214 -0
  250. data/sig/collection.rbs +4 -0
  251. data/sig/comment.rbs +26 -0
  252. data/sig/constant.rbs +21 -0
  253. data/sig/declarations.rbs +267 -0
  254. data/sig/definition.rbs +173 -0
  255. data/sig/definition_builder.rbs +165 -0
  256. data/sig/diff.rbs +28 -0
  257. data/sig/directives.rbs +77 -0
  258. data/sig/environment.rbs +279 -0
  259. data/sig/environment_loader.rbs +111 -0
  260. data/sig/environment_walker.rbs +65 -0
  261. data/sig/errors.rbs +405 -0
  262. data/sig/factory.rbs +5 -0
  263. data/sig/file_finder.rbs +28 -0
  264. data/sig/location.rbs +110 -0
  265. data/sig/locator.rbs +58 -0
  266. data/sig/manifest.yaml +7 -0
  267. data/sig/members.rbs +258 -0
  268. data/sig/method_builder.rbs +84 -0
  269. data/sig/method_types.rbs +58 -0
  270. data/sig/namespace.rbs +146 -0
  271. data/sig/parser.rbs +100 -0
  272. data/sig/prototype/helpers.rbs +27 -0
  273. data/sig/prototype/node_usage.rbs +20 -0
  274. data/sig/prototype/rb.rbs +96 -0
  275. data/sig/prototype/rbi.rbs +75 -0
  276. data/sig/prototype/runtime.rbs +182 -0
  277. data/sig/rbs.rbs +21 -0
  278. data/sig/rdoc/rbs.rbs +67 -0
  279. data/sig/repository.rbs +85 -0
  280. data/sig/resolver/constant_resolver.rbs +92 -0
  281. data/sig/resolver/context.rbs +34 -0
  282. data/sig/resolver/type_name_resolver.rbs +35 -0
  283. data/sig/shims/bundler.rbs +38 -0
  284. data/sig/shims/enumerable.rbs +5 -0
  285. data/sig/shims/rubygems.rbs +19 -0
  286. data/sig/sorter.rbs +41 -0
  287. data/sig/substitution.rbs +48 -0
  288. data/sig/subtractor.rbs +37 -0
  289. data/sig/test/errors.rbs +52 -0
  290. data/sig/test/guranteed.rbs +9 -0
  291. data/sig/test/type_check.rbs +19 -0
  292. data/sig/test.rbs +82 -0
  293. data/sig/type_alias_dependency.rbs +53 -0
  294. data/sig/type_alias_regularity.rbs +98 -0
  295. data/sig/type_param.rbs +110 -0
  296. data/sig/typename.rbs +79 -0
  297. data/sig/types.rbs +579 -0
  298. data/sig/unit_test/convertibles.rbs +154 -0
  299. data/sig/unit_test/spy.rbs +30 -0
  300. data/sig/unit_test/type_assertions.rbs +196 -0
  301. data/sig/unit_test/with_aliases.rbs +136 -0
  302. data/sig/use_map.rbs +35 -0
  303. data/sig/util.rbs +9 -0
  304. data/sig/validator.rbs +63 -0
  305. data/sig/variance_calculator.rbs +87 -0
  306. data/sig/vendorer.rbs +51 -0
  307. data/sig/version.rbs +3 -0
  308. data/sig/visitor.rbs +47 -0
  309. data/sig/writer.rbs +127 -0
  310. data/src/constants.c +153 -0
  311. data/src/ruby_objs.c +795 -0
  312. data/src/util/rbs_constant_pool.c +342 -0
  313. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  314. data/stdlib/abbrev/0/array.rbs +26 -0
  315. data/stdlib/base64/0/base64.rbs +355 -0
  316. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  317. data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
  318. data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
  319. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  320. data/stdlib/cgi/0/core.rbs +1285 -0
  321. data/stdlib/cgi/0/manifest.yaml +3 -0
  322. data/stdlib/coverage/0/coverage.rbs +263 -0
  323. data/stdlib/csv/0/csv.rbs +3776 -0
  324. data/stdlib/csv/0/manifest.yaml +3 -0
  325. data/stdlib/date/0/date.rbs +1585 -0
  326. data/stdlib/date/0/date_time.rbs +616 -0
  327. data/stdlib/date/0/time.rbs +26 -0
  328. data/stdlib/dbm/0/dbm.rbs +421 -0
  329. data/stdlib/delegate/0/delegator.rbs +184 -0
  330. data/stdlib/delegate/0/kernel.rbs +47 -0
  331. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  332. data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
  333. data/stdlib/digest/0/digest.rbs +577 -0
  334. data/stdlib/erb/0/erb.rbs +532 -0
  335. data/stdlib/etc/0/etc.rbs +865 -0
  336. data/stdlib/fileutils/0/fileutils.rbs +1734 -0
  337. data/stdlib/find/0/find.rbs +49 -0
  338. data/stdlib/forwardable/0/forwardable.rbs +268 -0
  339. data/stdlib/io-console/0/io-console.rbs +414 -0
  340. data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
  341. data/stdlib/json/0/json.rbs +1916 -0
  342. data/stdlib/kconv/0/kconv.rbs +166 -0
  343. data/stdlib/logger/0/formatter.rbs +45 -0
  344. data/stdlib/logger/0/log_device.rbs +100 -0
  345. data/stdlib/logger/0/logger.rbs +796 -0
  346. data/stdlib/logger/0/manifest.yaml +2 -0
  347. data/stdlib/logger/0/period.rbs +17 -0
  348. data/stdlib/logger/0/severity.rbs +34 -0
  349. data/stdlib/minitest/0/kernel.rbs +42 -0
  350. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  351. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  352. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  353. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  354. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  355. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  356. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  357. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  358. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  359. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  360. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  361. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  362. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  363. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  364. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  365. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  366. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  367. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  368. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  369. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  370. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  371. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  372. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  373. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  374. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  375. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  376. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  377. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  378. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  379. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  380. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  381. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  382. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  383. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  384. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  385. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  386. data/stdlib/minitest/0/minitest.rbs +115 -0
  387. data/stdlib/monitor/0/monitor.rbs +363 -0
  388. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  389. data/stdlib/net-http/0/manifest.yaml +3 -0
  390. data/stdlib/net-http/0/net-http.rbs +5552 -0
  391. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  392. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  393. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  394. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  395. data/stdlib/nkf/0/nkf.rbs +402 -0
  396. data/stdlib/objspace/0/objspace.rbs +487 -0
  397. data/stdlib/observable/0/observable.rbs +217 -0
  398. data/stdlib/open-uri/0/manifest.yaml +4 -0
  399. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  400. data/stdlib/open3/0/open3.rbs +147 -0
  401. data/stdlib/openssl/0/manifest.yaml +3 -0
  402. data/stdlib/openssl/0/openssl.rbs +12113 -0
  403. data/stdlib/optparse/0/optparse.rbs +1725 -0
  404. data/stdlib/pathname/0/pathname.rbs +1406 -0
  405. data/stdlib/pp/0/manifest.yaml +2 -0
  406. data/stdlib/pp/0/pp.rbs +300 -0
  407. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  408. data/stdlib/pstore/0/pstore.rbs +603 -0
  409. data/stdlib/psych/0/core_ext.rbs +12 -0
  410. data/stdlib/psych/0/dbm.rbs +237 -0
  411. data/stdlib/psych/0/manifest.yaml +3 -0
  412. data/stdlib/psych/0/psych.rbs +402 -0
  413. data/stdlib/psych/0/store.rbs +59 -0
  414. data/stdlib/pty/0/pty.rbs +237 -0
  415. data/stdlib/rdoc/0/code_object.rbs +51 -0
  416. data/stdlib/rdoc/0/comment.rbs +59 -0
  417. data/stdlib/rdoc/0/context.rbs +153 -0
  418. data/stdlib/rdoc/0/markup.rbs +117 -0
  419. data/stdlib/rdoc/0/parser.rbs +56 -0
  420. data/stdlib/rdoc/0/rdoc.rbs +391 -0
  421. data/stdlib/rdoc/0/ri.rbs +17 -0
  422. data/stdlib/rdoc/0/store.rbs +48 -0
  423. data/stdlib/rdoc/0/top_level.rbs +97 -0
  424. data/stdlib/resolv/0/manifest.yaml +3 -0
  425. data/stdlib/resolv/0/resolv.rbs +1830 -0
  426. data/stdlib/ripper/0/ripper.rbs +1648 -0
  427. data/stdlib/securerandom/0/securerandom.rbs +62 -0
  428. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  429. data/stdlib/singleton/0/singleton.rbs +131 -0
  430. data/stdlib/socket/0/addrinfo.rbs +666 -0
  431. data/stdlib/socket/0/basic_socket.rbs +590 -0
  432. data/stdlib/socket/0/constants.rbs +2295 -0
  433. data/stdlib/socket/0/ip_socket.rbs +92 -0
  434. data/stdlib/socket/0/socket.rbs +4157 -0
  435. data/stdlib/socket/0/socket_error.rbs +5 -0
  436. data/stdlib/socket/0/tcp_server.rbs +192 -0
  437. data/stdlib/socket/0/tcp_socket.rbs +79 -0
  438. data/stdlib/socket/0/udp_socket.rbs +133 -0
  439. data/stdlib/socket/0/unix_server.rbs +169 -0
  440. data/stdlib/socket/0/unix_socket.rbs +172 -0
  441. data/stdlib/stringio/0/stringio.rbs +567 -0
  442. data/stdlib/strscan/0/string_scanner.rbs +1627 -0
  443. data/stdlib/tempfile/0/tempfile.rbs +479 -0
  444. data/stdlib/time/0/time.rbs +432 -0
  445. data/stdlib/timeout/0/timeout.rbs +81 -0
  446. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  447. data/stdlib/tsort/0/cyclic.rbs +5 -0
  448. data/stdlib/tsort/0/interfaces.rbs +20 -0
  449. data/stdlib/tsort/0/tsort.rbs +409 -0
  450. data/stdlib/uri/0/common.rbs +582 -0
  451. data/stdlib/uri/0/file.rbs +118 -0
  452. data/stdlib/uri/0/ftp.rbs +13 -0
  453. data/stdlib/uri/0/generic.rbs +1108 -0
  454. data/stdlib/uri/0/http.rbs +104 -0
  455. data/stdlib/uri/0/https.rbs +14 -0
  456. data/stdlib/uri/0/ldap.rbs +230 -0
  457. data/stdlib/uri/0/ldaps.rbs +14 -0
  458. data/stdlib/uri/0/mailto.rbs +92 -0
  459. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  460. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  461. data/stdlib/uri/0/ws.rbs +13 -0
  462. data/stdlib/uri/0/wss.rbs +9 -0
  463. data/stdlib/yaml/0/manifest.yaml +2 -0
  464. data/stdlib/yaml/0/yaml.rbs +1 -0
  465. data/stdlib/zlib/0/buf_error.rbs +10 -0
  466. data/stdlib/zlib/0/data_error.rbs +10 -0
  467. data/stdlib/zlib/0/deflate.rbs +210 -0
  468. data/stdlib/zlib/0/error.rbs +20 -0
  469. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  470. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  471. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  472. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  473. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  474. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  475. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  476. data/stdlib/zlib/0/inflate.rbs +180 -0
  477. data/stdlib/zlib/0/mem_error.rbs +10 -0
  478. data/stdlib/zlib/0/need_dict.rbs +13 -0
  479. data/stdlib/zlib/0/stream_end.rbs +11 -0
  480. data/stdlib/zlib/0/stream_error.rbs +11 -0
  481. data/stdlib/zlib/0/version_error.rbs +11 -0
  482. data/stdlib/zlib/0/zlib.rbs +449 -0
  483. data/stdlib/zlib/0/zstream.rbs +200 -0
  484. metadata +532 -0
@@ -0,0 +1,329 @@
1
+ # <!-- rdoc-file=proc.c -->
2
+ # Ruby supports two forms of objectified methods. Class Method is used to
3
+ # represent methods that are associated with a particular object: these method
4
+ # objects are bound to that object. Bound method objects for an object can be
5
+ # created using Object#method.
6
+ #
7
+ # Ruby also supports unbound methods; methods objects that are not associated
8
+ # with a particular object. These can be created either by calling
9
+ # Module#instance_method or by calling #unbind on a bound method object. The
10
+ # result of both of these is an UnboundMethod object.
11
+ #
12
+ # Unbound methods can only be called after they are bound to an object. That
13
+ # object must be a kind_of? the method's original class.
14
+ #
15
+ # class Square
16
+ # def area
17
+ # @side * @side
18
+ # end
19
+ # def initialize(side)
20
+ # @side = side
21
+ # end
22
+ # end
23
+ #
24
+ # area_un = Square.instance_method(:area)
25
+ #
26
+ # s = Square.new(12)
27
+ # area = area_un.bind(s)
28
+ # area.call #=> 144
29
+ #
30
+ # Unbound methods are a reference to the method at the time it was objectified:
31
+ # subsequent changes to the underlying class will not affect the unbound method.
32
+ #
33
+ # class Test
34
+ # def test
35
+ # :original
36
+ # end
37
+ # end
38
+ # um = Test.instance_method(:test)
39
+ # class Test
40
+ # def test
41
+ # :modified
42
+ # end
43
+ # end
44
+ # t = Test.new
45
+ # t.test #=> :modified
46
+ # um.bind(t).call #=> :original
47
+ #
48
+ class UnboundMethod
49
+ # <!--
50
+ # rdoc-file=proc.c
51
+ # - meth.eql?(other_meth) -> true or false
52
+ # - meth == other_meth -> true or false
53
+ # -->
54
+ # Two unbound method objects are equal if they refer to the same method
55
+ # definition.
56
+ #
57
+ # Array.instance_method(:each_slice) == Enumerable.instance_method(:each_slice)
58
+ # #=> true
59
+ #
60
+ # Array.instance_method(:sum) == Enumerable.instance_method(:sum)
61
+ # #=> false, Array redefines the method for efficiency
62
+ #
63
+ def ==: (untyped other) -> bool
64
+
65
+ # <!-- rdoc-file=proc.c -->
66
+ # Two unbound method objects are equal if they refer to the same method
67
+ # definition.
68
+ #
69
+ # Array.instance_method(:each_slice) == Enumerable.instance_method(:each_slice)
70
+ # #=> true
71
+ #
72
+ # Array.instance_method(:sum) == Enumerable.instance_method(:sum)
73
+ # #=> false, Array redefines the method for efficiency
74
+ #
75
+ alias eql? ==
76
+
77
+ # <!--
78
+ # rdoc-file=proc.c
79
+ # - meth.hash -> integer
80
+ # -->
81
+ # Returns a hash value corresponding to the method object.
82
+ #
83
+ # See also Object#hash.
84
+ #
85
+ def hash: () -> Integer
86
+
87
+ # <!--
88
+ # rdoc-file=proc.c
89
+ # - method.clone -> new_method
90
+ # -->
91
+ # Returns a clone of this method.
92
+ #
93
+ # class A
94
+ # def foo
95
+ # return "bar"
96
+ # end
97
+ # end
98
+ #
99
+ # m = A.new.method(:foo)
100
+ # m.call # => "bar"
101
+ # n = m.clone.call # => "bar"
102
+ #
103
+ def clone: () -> instance
104
+
105
+ # <!--
106
+ # rdoc-file=proc.c
107
+ # - meth.arity -> integer
108
+ # -->
109
+ # Returns an indication of the number of arguments accepted by a method. Returns
110
+ # a nonnegative integer for methods that take a fixed number of arguments. For
111
+ # Ruby methods that take a variable number of arguments, returns -n-1, where n
112
+ # is the number of required arguments. Keyword arguments will be considered as a
113
+ # single additional argument, that argument being mandatory if any keyword
114
+ # argument is mandatory. For methods written in C, returns -1 if the call takes
115
+ # a variable number of arguments.
116
+ #
117
+ # class C
118
+ # def one; end
119
+ # def two(a); end
120
+ # def three(*a); end
121
+ # def four(a, b); end
122
+ # def five(a, b, *c); end
123
+ # def six(a, b, *c, &d); end
124
+ # def seven(a, b, x:0); end
125
+ # def eight(x:, y:); end
126
+ # def nine(x:, y:, **z); end
127
+ # def ten(*a, x:, y:); end
128
+ # end
129
+ # c = C.new
130
+ # c.method(:one).arity #=> 0
131
+ # c.method(:two).arity #=> 1
132
+ # c.method(:three).arity #=> -1
133
+ # c.method(:four).arity #=> 2
134
+ # c.method(:five).arity #=> -3
135
+ # c.method(:six).arity #=> -3
136
+ # c.method(:seven).arity #=> -3
137
+ # c.method(:eight).arity #=> 1
138
+ # c.method(:nine).arity #=> 1
139
+ # c.method(:ten).arity #=> -2
140
+ #
141
+ # "cat".method(:size).arity #=> 0
142
+ # "cat".method(:replace).arity #=> 1
143
+ # "cat".method(:squeeze).arity #=> -1
144
+ # "cat".method(:count).arity #=> -1
145
+ #
146
+ def arity: () -> Integer
147
+
148
+ # <!--
149
+ # rdoc-file=proc.c
150
+ # - umeth.bind(obj) -> method
151
+ # -->
152
+ # Bind *umeth* to *obj*. If Klass was the class from which *umeth* was obtained,
153
+ # `obj.kind_of?(Klass)` must be true.
154
+ #
155
+ # class A
156
+ # def test
157
+ # puts "In test, class = #{self.class}"
158
+ # end
159
+ # end
160
+ # class B < A
161
+ # end
162
+ # class C < B
163
+ # end
164
+ #
165
+ # um = B.instance_method(:test)
166
+ # bm = um.bind(C.new)
167
+ # bm.call
168
+ # bm = um.bind(B.new)
169
+ # bm.call
170
+ # bm = um.bind(A.new)
171
+ # bm.call
172
+ #
173
+ # *produces:*
174
+ #
175
+ # In test, class = C
176
+ # In test, class = B
177
+ # prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)
178
+ # from prog.rb:16
179
+ #
180
+ def bind: (untyped obj) -> Method
181
+
182
+ # <!--
183
+ # rdoc-file=proc.c
184
+ # - meth.to_s -> string
185
+ # - meth.inspect -> string
186
+ # -->
187
+ # Returns a human-readable description of the underlying method.
188
+ #
189
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
190
+ # (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
191
+ #
192
+ # In the latter case, the method description includes the "owner" of the
193
+ # original method (`Enumerable` module, which is included into `Range`).
194
+ #
195
+ # `inspect` also provides, when possible, method argument names (call sequence)
196
+ # and source location.
197
+ #
198
+ # require 'net/http'
199
+ # Net::HTTP.method(:get).inspect
200
+ # #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
201
+ #
202
+ # `...` in argument definition means argument is optional (has some default
203
+ # value).
204
+ #
205
+ # For methods defined in C (language core and extensions), location and argument
206
+ # names can't be extracted, and only generic information is provided in form of
207
+ # `*` (any number of arguments) or `_` (some positional argument).
208
+ #
209
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
210
+ # "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
211
+ #
212
+ def inspect: () -> String
213
+
214
+ # <!-- rdoc-file=proc.c -->
215
+ # Returns a human-readable description of the underlying method.
216
+ #
217
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
218
+ # (1..3).method(:map).inspect #=> "#<Method: Range(Enumerable)#map()>"
219
+ #
220
+ # In the latter case, the method description includes the "owner" of the
221
+ # original method (`Enumerable` module, which is included into `Range`).
222
+ #
223
+ # `inspect` also provides, when possible, method argument names (call sequence)
224
+ # and source location.
225
+ #
226
+ # require 'net/http'
227
+ # Net::HTTP.method(:get).inspect
228
+ # #=> "#<Method: Net::HTTP.get(uri_or_host, path=..., port=...) <skip>/lib/ruby/2.7.0/net/http.rb:457>"
229
+ #
230
+ # `...` in argument definition means argument is optional (has some default
231
+ # value).
232
+ #
233
+ # For methods defined in C (language core and extensions), location and argument
234
+ # names can't be extracted, and only generic information is provided in form of
235
+ # `*` (any number of arguments) or `_` (some positional argument).
236
+ #
237
+ # "cat".method(:count).inspect #=> "#<Method: String#count(*)>"
238
+ # "cat".method(:+).inspect #=> "#<Method: String#+(_)>""
239
+ #
240
+ alias to_s inspect
241
+
242
+ # <!--
243
+ # rdoc-file=proc.c
244
+ # - meth.name -> symbol
245
+ # -->
246
+ # Returns the name of the method.
247
+ #
248
+ def name: () -> Symbol
249
+
250
+ # <!--
251
+ # rdoc-file=proc.c
252
+ # - meth.owner -> class_or_module
253
+ # -->
254
+ # Returns the class or module on which this method is defined. In other words,
255
+ #
256
+ # meth.owner.instance_methods(false).include?(meth.name) # => true
257
+ #
258
+ # holds as long as the method is not removed/undefined/replaced, (with
259
+ # private_instance_methods instead of instance_methods if the method is
260
+ # private).
261
+ #
262
+ # See also Method#receiver.
263
+ #
264
+ # (1..3).method(:map).owner #=> Enumerable
265
+ #
266
+ def owner: () -> (Class | Module)
267
+
268
+ # <!--
269
+ # rdoc-file=proc.c
270
+ # - meth.parameters -> array
271
+ # -->
272
+ # Returns the parameter information of this method.
273
+ #
274
+ # def foo(bar); end
275
+ # method(:foo).parameters #=> [[:req, :bar]]
276
+ #
277
+ # def foo(bar, baz, bat, &blk); end
278
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:req, :bat], [:block, :blk]]
279
+ #
280
+ # def foo(bar, *args); end
281
+ # method(:foo).parameters #=> [[:req, :bar], [:rest, :args]]
282
+ #
283
+ # def foo(bar, baz, *args, &blk); end
284
+ # method(:foo).parameters #=> [[:req, :bar], [:req, :baz], [:rest, :args], [:block, :blk]]
285
+ #
286
+ def parameters: () -> Method::param_types
287
+
288
+ # <!--
289
+ # rdoc-file=proc.c
290
+ # - meth.source_location -> [String, Integer]
291
+ # -->
292
+ # Returns the Ruby source filename and line number containing this method or nil
293
+ # if this method was not defined in Ruby (i.e. native).
294
+ #
295
+ def source_location: () -> [String, Integer]?
296
+
297
+ # <!--
298
+ # rdoc-file=proc.c
299
+ # - meth.super_method -> method
300
+ # -->
301
+ # Returns a Method of superclass which would be called when super is used or nil
302
+ # if there is no method on superclass.
303
+ #
304
+ def super_method: () -> UnboundMethod?
305
+
306
+ # <!--
307
+ # rdoc-file=proc.c
308
+ # - meth.original_name -> symbol
309
+ # -->
310
+ # Returns the original name of the method.
311
+ #
312
+ # class C
313
+ # def foo; end
314
+ # alias bar foo
315
+ # end
316
+ # C.instance_method(:bar).original_name # => :foo
317
+ #
318
+ def original_name: () -> Symbol
319
+
320
+ # <!--
321
+ # rdoc-file=proc.c
322
+ # - umeth.bind_call(recv, args, ...) -> obj
323
+ # -->
324
+ # Bind *umeth* to *recv* and then invokes the method with the specified
325
+ # arguments. This is semantically equivalent to `umeth.bind(recv).call(args,
326
+ # ...)`.
327
+ #
328
+ def bind_call: (untyped recv, *untyped, **untyped) ?{ (?) -> untyped } -> untyped
329
+ end
data/core/warning.rbs ADDED
@@ -0,0 +1,87 @@
1
+ # <!-- rdoc-file=error.c -->
2
+ # The Warning module contains a single method named #warn, and the module
3
+ # extends itself, making Warning.warn available. Warning.warn is called for all
4
+ # warnings issued by Ruby. By default, warnings are printed to $stderr.
5
+ #
6
+ # Changing the behavior of Warning.warn is useful to customize how warnings are
7
+ # handled by Ruby, for instance by filtering some warnings, and/or outputting
8
+ # warnings somewhere other than `$stderr`.
9
+ #
10
+ # If you want to change the behavior of Warning.warn you should use
11
+ # `Warning.extend(MyNewModuleWithWarnMethod)` and you can use `super` to get the
12
+ # default behavior of printing the warning to `$stderr`.
13
+ #
14
+ # Example:
15
+ # module MyWarningFilter
16
+ # def warn(message, category: nil, **kwargs)
17
+ # if /some warning I want to ignore/.match?(message)
18
+ # # ignore
19
+ # else
20
+ # super
21
+ # end
22
+ # end
23
+ # end
24
+ # Warning.extend MyWarningFilter
25
+ #
26
+ # You should never redefine Warning#warn (the instance method), as that will
27
+ # then no longer provide a way to use the default behavior.
28
+ #
29
+ # The [warning](https://rubygems.org/gems/warning) gem provides convenient ways
30
+ # to customize Warning.warn.
31
+ #
32
+ module Warning
33
+ # The types of categories the `Warning` module understands.
34
+ #
35
+ type category = :deprecated | :experimental | :performance
36
+
37
+ # <!--
38
+ # rdoc-file=error.c
39
+ # - Warning[category] -> true or false
40
+ # -->
41
+ # Returns the flag to show the warning messages for `category`. Supported
42
+ # categories are:
43
+ #
44
+ # `:deprecated`
45
+ # : deprecation warnings
46
+ # * assignment of non-nil value to `$,` and `$;`
47
+ # * keyword arguments
48
+ # etc.
49
+ #
50
+ #
51
+ # `:experimental`
52
+ # : experimental features
53
+ #
54
+ #
55
+ # `:performance`
56
+ # : performance hints
57
+ # * Shape variation limit
58
+ #
59
+ def self.[]: (category) -> bool
60
+
61
+ # <!--
62
+ # rdoc-file=error.c
63
+ # - Warning[category] = flag -> flag
64
+ # -->
65
+ # Sets the warning flags for `category`. See Warning.[] for the categories.
66
+ #
67
+ def self.[]=: [T] (category, T flag) -> T
68
+
69
+ # <!--
70
+ # rdoc-file=error.c
71
+ # - categories -> array
72
+ # -->
73
+ # Returns a list of the supported category symbols.
74
+ #
75
+ def self.categories: () -> Array[Symbol]
76
+
77
+ # <!--
78
+ # rdoc-file=error.c
79
+ # - warn(msg, category: nil) -> nil
80
+ # -->
81
+ # Writes warning message `msg` to $stderr. This method is called by Ruby for all
82
+ # emitted warnings. A `category` may be included with the warning.
83
+ #
84
+ # See the documentation of the Warning module for how to customize this.
85
+ #
86
+ def self?.warn: (String message, ?category: category?) -> nil
87
+ end
@@ -0,0 +1,106 @@
1
+ # Core and Standard Library Signatures Contribution Guide
2
+
3
+ ## Guides
4
+
5
+ * [RBS by Example](rbs_by_example.md)
6
+ * [Writing Signature Guide](sigs.md)
7
+ * [Testing Core API and Standard Library Types](stdlib.md)
8
+ * [Syntax](syntax.md)
9
+
10
+ ## Introduction
11
+
12
+ The RBS repository contains the type definitions of Core API and Standard Libraries.
13
+ There are some discussions whether if it is the best to have them in this repository, but we have them and continue updating the files meanwhile.
14
+
15
+ The target version of the bundled type definitions is the latest _release_ of Ruby -- `3.1` as of January 2022.
16
+
17
+ **The core API** type definitions are in `core` directory.
18
+ You will find the familiar class names in the directory, like `string.rbs` or `array.rbs`.
19
+
20
+ **The standard libraries** type definitions are in `stdlib` directory.
21
+ They have the [third party repository](repo.md) structure.
22
+ There is a `set` directory for the `set` library, and it contains `0` directory.
23
+ Because RBS supports the latest release of Ruby, we have one set of RBS files which corresponds to the bundled versions of the libraries.
24
+
25
+ ## Steps for Contribution
26
+
27
+ 1. Pick the class/library you will work for.
28
+ 2. Make a directory `stdlib/foo/0` if you work for one of the standard libraries.
29
+ 3. Write RBS type definitions and tests.
30
+
31
+ You will typically follow the steps as follows:
32
+
33
+ 1. Run `rbs prototype runtime` to generate list of methods.
34
+ 2. Run `rbs annotate` to import RDoc comments.
35
+ 3. Run `rake generate:stdlib_test[LIB]` to generate a test case.
36
+ 4. Write the type definitions and tests.
37
+
38
+ See the next *Useful Tools* section and the guides above for writing and testing RBS files.
39
+
40
+ ## Useful Tools
41
+
42
+ * `rbs prototype runtime --merge String`
43
+ * Generate a prototype using runtime API.
44
+ * `--merge` tells to use the method types in RBS if exists.
45
+ * `rbs prototype runtime --merge --method-owner=Numeric Integer`
46
+ * You can use --method-owner if you want to print method of other classes too, for documentation purpose.
47
+ * `rbs annotate core/string.rbs`
48
+ * Import RDoc comments.
49
+ * The imported docs contain the description, *arglists*, and filenames to help writing types.
50
+ * `bin/query-rdoc String#initialize`
51
+ * Print RDoc documents in the format you can copy-and-paste to RBS.
52
+ * `bin/sort core/string.rbs`
53
+ * Sort declarations members in RBS files.
54
+ * `rbs -r LIB validate`
55
+ Validate the syntax and some of the semantics.
56
+ * `rake generate:stdlib_test[String]`
57
+ Scaffold the stdlib test.
58
+ * `rake test/stdlib/Array_test.rb`
59
+ Run specific stdlib test with the path.
60
+
61
+ ### Standard STDLIB Members Order
62
+
63
+ We define the standard members order so that ordering doesn't bother reading diffs or git-annotate outputs.
64
+
65
+ 1. `def self.new` or `def initialize`
66
+ 2. Mixins
67
+ 3. Attributes
68
+ 4. Singleton methods
69
+ 5. `public` & public instance methods
70
+ 6. `private` & private instance methods
71
+
72
+ ```rbs
73
+ class HelloWorld[X]
74
+ def self.new: [A] () { (void) -> A } -> HelloWorld[A] # new or initialize comes first
75
+ def initialize: () -> void
76
+
77
+ include Enumerable[X, void] # Mixin comes next
78
+
79
+ attr_reader language: (:ja | :en) # Attributes
80
+
81
+ def self.all_languages: () -> Array[Symbol] # Singleton methods
82
+
83
+ public # Public instance methods
84
+
85
+ def each: () { (A) -> void } -> void # Members are sorted dictionary order
86
+
87
+ def to_s: (?Locale) -> String
88
+
89
+ private # Private instance methods
90
+
91
+ alias validate validate_locale
92
+
93
+ def validate_locale: () -> void
94
+ end
95
+ ```
96
+
97
+ ## Q&A
98
+
99
+ ### Some of the standard libraries are gems. Why we put the files in this repo?
100
+
101
+ You are correct. We want to move to their repos. We haven't started the migration yet.
102
+
103
+ ### How can we handle incompatibilities of core APIs and standard libraries between Rubies
104
+
105
+ We ignore the incompatibilities for now.
106
+ We focus on the latest version of core APIs and standard libraries.
@@ -0,0 +1,110 @@
1
+ # Architecture
2
+
3
+ This guide describes the outline of the architecture of RBS library. It helps you to understand the structure and key features of the library to start contributing to the library.
4
+
5
+ ## Bird's Eye View
6
+
7
+ The goal of the library is simple: Read RBS files and generate the structure of Ruby programs.
8
+
9
+ ```
10
+ RBS files
11
+ ↓ -- RBS::Parser
12
+ Syntax tree
13
+
14
+ Environment
15
+ ↓ -- Definition builder
16
+ Definition
17
+ ```
18
+
19
+ The input is RBS files. The gem ships with RBS type definitions of Ruby core library and some of the standard libraries. You write RBS files for your applications or gems.
20
+
21
+ Syntax tree is the next representation. `RBS::Parser` transforms the sequence of characters in RBS files into syntax trees.
22
+
23
+ Syntax tree objects are loaded to `RBS::Environment`. It collects loaded RBS objects, organizes the definitions, and provides some utilities, like resolving type names and finding the declarations.
24
+
25
+ `RBS::Definition` is the goal of the transformation steps. It is associated with a class singleton, a class object, or an interface. You can find the list of available methods and their types, instance variables, and class hierarchies.
26
+
27
+ ## Core classes
28
+
29
+ ### Types
30
+
31
+ Types are defined under `RBS::Types`, like `RBS::Types::ClassInstance` or `RBS::Types::Union`. You will find the definition of each type supported in RBS.
32
+
33
+ ### Parsing RBS files
34
+
35
+ The RBS source code is loaded into `RBS::Buffer`, and `RBS::Parser` is the parser. The parser is implemented in C extension.
36
+
37
+ `RBS::Parser` provides three entrypoints.
38
+
39
+ - `RBS::Parser.parse_method_type` parsers a *method type*. (`[T] (String) { (IO) -> T } -> Array[T]`)
40
+ - `RBS::Parser.parse_type` parses a *type*. (`Hash[Symbol, untyped]`)
41
+ - `RBS::Parser.parse_signature` parses the whole RBS file.
42
+
43
+ ### Environment
44
+
45
+ RBS AST is loaded to `RBS::Environment` by `RBS::EnvironmentLoader`. `Environment` gives *absolute names* to the declarations, and provides an index from the *absolute name* to their declarations.
46
+
47
+ Assume we have the following nested RBS declarations:
48
+
49
+ ```rbs
50
+ module Hello
51
+ class World
52
+ end
53
+ end
54
+
55
+ class Hello::World
56
+ end
57
+ ```
58
+
59
+ And the environment organizes the definitions as follows:
60
+
61
+ - There are two classes `::Hello` and `::Hello::World`
62
+ - It provides a mapping from `::Hello` to it's `module` declaration and `::Hello::World` to it's two `class` declarations
63
+
64
+ ### Definition and DefinitionBuilder
65
+
66
+ `RBS::Definition` tells you:
67
+
68
+ - The set of available methods in a class/module/interface
69
+ - The set of instance variables in a class/module
70
+ - The ancestors in a class/module
71
+
72
+ Definition is constructed for:
73
+
74
+ - A singleton class of a class/module -- `singleton(String)`, `singleton(Array)`,
75
+ - An instance of a class -- `String`, `Array[T]`, or
76
+ - An interface -- `_ToS`
77
+
78
+ Note that generic class instances/interfaces are kept generic. We don't have a definition of `Array[String]` but of `Array[T]`.
79
+
80
+ `DefinitionBuilder` constructs `Definition` of given type names.
81
+
82
+ - `DefinitionBuilder#build_singleton` returns a definition of singleton classes of given class/module.
83
+ - `DefinitionBuilder#build_instance` returns a definition of instances of given class/module.
84
+ - `DefinitionBuilder#build_interface` returns a definition of interfaces.
85
+
86
+ It uses `AncestorBuilder` to construct ancestor chains of the type. `MethodBuilder` constructs sets of available methods based on the ancestor chains.
87
+
88
+ The `#build_singleton` calculates the type of `.new` methods based on the definition of `#initialize` method. This is different from Ruby's implementation -- it reused `Class#new` method but we need the custom implementation to give precise `.new` method type of each class.
89
+
90
+ #### Working with type aliases
91
+
92
+ `DefinitionBuilder#expand_alias` and its variants provide one step *unfold* operation of type aliases.
93
+
94
+ ```ruby
95
+ builder.expand_alias2(RBS::TypeName.parse("::int"), []) # => returns `::Integer | ::_ToInt`
96
+ ```
97
+
98
+ We don't have *normalize* operation for type aliases, because RBS allows recursive type alias definition, which cannot be *fully* unfolded.
99
+
100
+ ### Other utilities
101
+
102
+ `RBS::Validator` provides validation of RBS type declaration. It validates that all of the type name references can be resolved, all type applications have correct arity, and so on.
103
+
104
+ `RBS::Test` provides runtime type checking, which confirms if a Ruby object can have an RBS type. It also provides an integration to existing Ruby code so that we run Ruby code, assuming unit tests, with runtime type checking.
105
+
106
+ `RBS::UnitTest` provides utilities to help write unit tests for RBS type definitions. Use the tool to make sure your RBS type definition is consistent with implementation.
107
+
108
+ `RBS::Prototype` is the core of `rbs prototype` feature. It scans Ruby source code or uses reflection features, and it generates the prototype of RBS files.
109
+
110
+ `RBS::Collection` includes `rbs collection` features.