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
@@ -0,0 +1,625 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Prototype
5
+ class RBI
6
+ include Helpers
7
+
8
+ attr_reader :decls
9
+ attr_reader :modules
10
+ attr_reader :last_sig
11
+
12
+ def initialize
13
+ @decls = []
14
+
15
+ @modules = []
16
+ end
17
+
18
+ def parse(string)
19
+ comments = parse_comments(string, include_trailing: true)
20
+ process RubyVM::AbstractSyntaxTree.parse(string), comments: comments
21
+ end
22
+
23
+ def nested_name(name)
24
+ (current_namespace + const_to_name(name).to_namespace).to_type_name.relative!
25
+ end
26
+
27
+ def current_namespace
28
+ modules.inject(Namespace.empty) do |parent, mod|
29
+ parent + mod.name.to_namespace
30
+ end
31
+ end
32
+
33
+ def push_class(name, super_class, comment:)
34
+ class_decl = AST::Declarations::Class.new(
35
+ name: nested_name(name),
36
+ super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
37
+ type_params: [],
38
+ members: [],
39
+ annotations: [],
40
+ location: nil,
41
+ comment: comment
42
+ )
43
+
44
+ modules << class_decl
45
+ decls << class_decl
46
+
47
+ yield
48
+ ensure
49
+ modules.pop
50
+ end
51
+
52
+ def push_module(name, comment:)
53
+ module_decl = AST::Declarations::Module.new(
54
+ name: nested_name(name),
55
+ type_params: [],
56
+ members: [],
57
+ annotations: [],
58
+ location: nil,
59
+ self_types: [],
60
+ comment: comment
61
+ )
62
+
63
+ modules << module_decl
64
+ decls << module_decl
65
+
66
+ yield
67
+ ensure
68
+ modules.pop
69
+ end
70
+
71
+ def current_module
72
+ modules.last
73
+ end
74
+
75
+ def current_module!
76
+ current_module or raise
77
+ end
78
+
79
+ def push_sig(node)
80
+ if last_sig = @last_sig
81
+ last_sig << node
82
+ else
83
+ @last_sig = [node]
84
+ end
85
+ end
86
+
87
+ def pop_sig
88
+ @last_sig.tap do
89
+ @last_sig = nil
90
+ end
91
+ end
92
+
93
+ def join_comments(nodes, comments)
94
+ cs = nodes.map {|node| comments[node.first_lineno - 1] }.compact
95
+ AST::Comment.new(string: cs.map(&:string).join("\n"), location: nil)
96
+ end
97
+
98
+ def process(node, outer: [], comments:)
99
+ case node.type
100
+ when :CLASS
101
+ comment = comments[node.first_lineno - 1]
102
+ push_class node.children[0], node.children[1], comment: comment do
103
+ process node.children[2], outer: outer + [node], comments: comments
104
+ end
105
+ when :MODULE
106
+ comment = comments[node.first_lineno - 1]
107
+ push_module node.children[0], comment: comment do
108
+ process node.children[1], outer: outer + [node], comments: comments
109
+ end
110
+ when :FCALL
111
+ case node.children[0]
112
+ when :include
113
+ each_arg node.children[1] do |arg|
114
+ if arg.type == :CONST || arg.type == :COLON2 || arg.type == :COLON3
115
+ name = const_to_name(arg)
116
+ include_member = AST::Members::Include.new(
117
+ name: name,
118
+ args: [],
119
+ annotations: [],
120
+ location: nil,
121
+ comment: nil
122
+ )
123
+ current_module!.members << include_member
124
+ end
125
+ end
126
+ when :extend
127
+ each_arg node.children[1] do |arg|
128
+ if arg.type == :CONST || arg.type == :COLON2
129
+ name = const_to_name(arg)
130
+ unless name.to_s == "T::Generic" || name.to_s == "T::Sig"
131
+ member = AST::Members::Extend.new(
132
+ name: name,
133
+ args: [],
134
+ annotations: [],
135
+ location: nil,
136
+ comment: nil
137
+ )
138
+ current_module!.members << member
139
+ end
140
+ end
141
+ end
142
+ when :sig
143
+ out = outer.last or raise
144
+ push_sig out.children.last.children.last
145
+ when :alias_method
146
+ new, old = each_arg(node.children[1]).map {|x| x.children[0] }
147
+ current_module!.members << AST::Members::Alias.new(
148
+ new_name: new,
149
+ old_name: old,
150
+ location: nil,
151
+ annotations: [],
152
+ kind: :instance,
153
+ comment: nil
154
+ )
155
+ end
156
+ when :DEFS
157
+ sigs = pop_sig
158
+
159
+ if sigs
160
+ comment = join_comments(sigs, comments)
161
+
162
+ args = node.children[2]
163
+ types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
164
+
165
+ current_module!.members << AST::Members::MethodDefinition.new(
166
+ name: node.children[1],
167
+ location: nil,
168
+ annotations: [],
169
+ overloads: types.map {|type| AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: type) },
170
+ kind: :singleton,
171
+ comment: comment,
172
+ overloading: false,
173
+ visibility: nil
174
+ )
175
+ end
176
+
177
+ when :DEFN
178
+ sigs = pop_sig
179
+
180
+ if sigs
181
+ comment = join_comments(sigs, comments)
182
+
183
+ args = node.children[1]
184
+ types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
185
+
186
+ current_module!.members << AST::Members::MethodDefinition.new(
187
+ name: node.children[0],
188
+ location: nil,
189
+ annotations: [],
190
+ overloads: types.map {|type| AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: type) },
191
+ kind: :instance,
192
+ comment: comment,
193
+ overloading: false,
194
+ visibility: nil
195
+ )
196
+ end
197
+
198
+ when :CDECL
199
+ if (send = node.children.last) && send.type == :FCALL && send.children[0] == :type_member
200
+ unless each_arg(send.children[1]).any? {|node|
201
+ node.type == :HASH &&
202
+ each_arg(node.children[0]).each_slice(2).any? {|a, _| symbol_literal_node?(a) == :fixed }
203
+ }
204
+ # @type var variance: AST::TypeParam::variance?
205
+ if (a0 = each_arg(send.children[1]).to_a[0]) && (v = symbol_literal_node?(a0))
206
+ variance = case v
207
+ when :out
208
+ :covariant
209
+ when :in
210
+ :contravariant
211
+ end
212
+ end
213
+
214
+ current_module!.type_params << AST::TypeParam.new(
215
+ name: node.children[0],
216
+ variance: variance || :invariant,
217
+ location: nil,
218
+ upper_bound: nil,
219
+ lower_bound: nil,
220
+ default_type: nil
221
+ )
222
+ end
223
+ else
224
+ name = node.children[0].yield_self do |n|
225
+ if n.is_a?(Symbol)
226
+ TypeName.new(namespace: current_namespace, name: n)
227
+ else
228
+ const_to_name(n)
229
+ end
230
+ end
231
+ value_node = node.children.last
232
+ type = if value_node && value_node.type == :CALL && value_node.children[1] == :let
233
+ type_node = each_arg(value_node.children[2]).to_a[1]
234
+ type_of type_node, variables: current_module&.type_params || []
235
+ else
236
+ Types::Bases::Any.new(location: nil)
237
+ end
238
+ decls << AST::Declarations::Constant.new(
239
+ name: name,
240
+ type: type,
241
+ location: nil,
242
+ comment: nil,
243
+ annotations: []
244
+ )
245
+ end
246
+ when :ALIAS
247
+ current_module!.members << AST::Members::Alias.new(
248
+ new_name: node.children[0].children[0],
249
+ old_name: node.children[1].children[0],
250
+ location: nil,
251
+ annotations: [],
252
+ kind: :instance,
253
+ comment: nil
254
+ )
255
+ else
256
+ each_child node do |child|
257
+ process child, outer: outer + [node], comments: comments
258
+ end
259
+ end
260
+ end
261
+
262
+ def method_type(args_node, type_node, variables:, overloads:)
263
+ if type_node
264
+ if type_node.type == :CALL
265
+ method_type = method_type(args_node, type_node.children[0], variables: variables, overloads: overloads) or raise
266
+ else
267
+ method_type = MethodType.new(
268
+ type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
269
+ block: nil,
270
+ location: nil,
271
+ type_params: []
272
+ )
273
+ end
274
+
275
+ name, args = case type_node.type
276
+ when :CALL
277
+ [
278
+ type_node.children[1],
279
+ type_node.children[2]
280
+ ]
281
+ when :FCALL, :VCALL
282
+ [
283
+ type_node.children[0],
284
+ type_node.children[1]
285
+ ]
286
+ end
287
+
288
+ case name
289
+ when :returns
290
+ return_type = each_arg(args).to_a[0]
291
+ method_type.update(type: method_type.type.with_return_type(type_of(return_type, variables: variables)))
292
+ when :params
293
+ if args_node
294
+ parse_params(args_node, args, method_type, variables: variables, overloads: overloads)
295
+ else
296
+ vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
297
+
298
+ required_positionals = vars.map do |name, type|
299
+ Types::Function::Param.new(name: name, type: type)
300
+ end
301
+
302
+ if method_type.type.is_a?(RBS::Types::Function)
303
+ method_type.update(type: method_type.type.update(required_positionals: required_positionals))
304
+ else
305
+ method_type
306
+ end
307
+ end
308
+ when :type_parameters
309
+ type_params = [] #: Array[AST::TypeParam]
310
+
311
+ each_arg args do |node|
312
+ if name = symbol_literal_node?(node)
313
+ type_params << AST::TypeParam.new(
314
+ name: name,
315
+ variance: :invariant,
316
+ upper_bound: nil,
317
+ lower_bound: nil,
318
+ location: nil,
319
+ default_type: nil
320
+ )
321
+ end
322
+ end
323
+
324
+ method_type.update(type_params: type_params)
325
+ when :void
326
+ method_type.update(type: method_type.type.with_return_type(Types::Bases::Void.new(location: nil)))
327
+ when :proc
328
+ method_type
329
+ else
330
+ method_type
331
+ end
332
+ end
333
+ end
334
+
335
+ def parse_params(args_node, args, method_type, variables:, overloads:)
336
+ vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
337
+
338
+ # @type var required_positionals: Array[Types::Function::Param]
339
+ required_positionals = []
340
+ # @type var optional_positionals: Array[Types::Function::Param]
341
+ optional_positionals = []
342
+ # @type var rest_positionals: Types::Function::Param?
343
+ rest_positionals = nil
344
+ # @type var trailing_positionals: Array[Types::Function::Param]
345
+ trailing_positionals = []
346
+ # @type var required_keywords: Hash[Symbol, Types::Function::Param]
347
+ required_keywords = {}
348
+ # @type var optional_keywords: Hash[Symbol, Types::Function::Param]
349
+ optional_keywords = {}
350
+ # @type var rest_keywords: Types::Function::Param?
351
+ rest_keywords = nil
352
+
353
+ var_names = args_node.children[0]
354
+ pre_num, _pre_init, opt, _first_post, post_num, _post_init, rest, kw, kwrest, block = args_node.children[1].children
355
+
356
+ pre_num.times.each do |i|
357
+ name = var_names[i]
358
+ type = vars[name] || Types::Bases::Any.new(location: nil)
359
+ required_positionals << Types::Function::Param.new(type: type, name: name)
360
+ end
361
+
362
+ index = pre_num
363
+ while opt
364
+ name = var_names[index]
365
+ if (type = vars[name])
366
+ optional_positionals << Types::Function::Param.new(type: type, name: name)
367
+ end
368
+ index += 1
369
+ opt = opt.children[1]
370
+ end
371
+
372
+ if rest
373
+ name = var_names[index]
374
+ if (type = vars[name])
375
+ rest_positionals = Types::Function::Param.new(type: type, name: name)
376
+ end
377
+ index += 1
378
+ end
379
+
380
+ post_num.times do |i|
381
+ name = var_names[i+index]
382
+ if (type = vars[name])
383
+ trailing_positionals << Types::Function::Param.new(type: type, name: name)
384
+ end
385
+ index += 1
386
+ end
387
+
388
+ while kw
389
+ name, value = kw.children[0].children
390
+ if (type = vars[name])
391
+ if value
392
+ optional_keywords[name] = Types::Function::Param.new(type: type, name: name)
393
+ else
394
+ required_keywords[name] = Types::Function::Param.new(type: type, name: name)
395
+ end
396
+ end
397
+
398
+ kw = kw.children[1]
399
+ end
400
+
401
+ if kwrest
402
+ name = kwrest.children[0]
403
+ if (type = vars[name])
404
+ rest_keywords = Types::Function::Param.new(type: type, name: name)
405
+ end
406
+ end
407
+
408
+ method_block = nil
409
+ if block
410
+ if (type = vars[block])
411
+ if type.is_a?(Types::Proc)
412
+ method_block = Types::Block.new(required: true, type: type.type, self_type: nil)
413
+ elsif type.is_a?(Types::Bases::Any)
414
+ method_block = Types::Block.new(
415
+ required: true,
416
+ type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
417
+ self_type: nil
418
+ )
419
+ # Handle an optional block like `T.nilable(T.proc.void)`.
420
+ elsif type.is_a?(Types::Optional) && (proc_type = type.type).is_a?(Types::Proc)
421
+ method_block = Types::Block.new(required: false, type: proc_type.type, self_type: nil)
422
+ else
423
+ STDERR.puts "Unexpected block type: #{type}"
424
+ PP.pp args_node, STDERR
425
+ method_block = Types::Block.new(
426
+ required: true,
427
+ type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
428
+ self_type: nil
429
+ )
430
+ end
431
+ else
432
+ if overloads == 1
433
+ method_block = Types::Block.new(
434
+ required: false,
435
+ type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
436
+ self_type: nil
437
+ )
438
+ end
439
+ end
440
+ end
441
+
442
+ if method_type.type.is_a?(Types::Function)
443
+ method_type.update(
444
+ type: method_type.type.update(
445
+ required_positionals: required_positionals,
446
+ optional_positionals: optional_positionals,
447
+ rest_positionals: rest_positionals,
448
+ trailing_positionals: trailing_positionals,
449
+ required_keywords: required_keywords,
450
+ optional_keywords: optional_keywords,
451
+ rest_keywords: rest_keywords
452
+ ),
453
+ block: method_block
454
+ )
455
+ else
456
+ method_type
457
+ end
458
+ end
459
+
460
+ def type_of(type_node, variables:)
461
+ type = type_of0(type_node, variables: variables)
462
+
463
+ case
464
+ when type.is_a?(Types::ClassInstance) && type.name.name == BuiltinNames::BasicObject.name.name
465
+ Types::Bases::Any.new(location: nil)
466
+ when type.is_a?(Types::ClassInstance) && type.name.to_s == "T::Boolean"
467
+ Types::Bases::Bool.new(location: nil)
468
+ else
469
+ type
470
+ end
471
+ end
472
+
473
+ def type_of0(type_node, variables:)
474
+ case
475
+ when type_node.type == :CONST
476
+ if variables.include?(type_node.children[0])
477
+ Types::Variable.new(name: type_node.children[0], location: nil)
478
+ else
479
+ Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
480
+ end
481
+ when type_node.type == :COLON2 || type_node.type == :COLON3
482
+ Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
483
+ when call_node?(type_node, name: :[], receiver: -> (_) { true })
484
+ # The type_node represents a type application
485
+ type = type_of(type_node.children[0], variables: variables)
486
+ type.is_a?(Types::ClassInstance) or raise
487
+
488
+ each_arg(type_node.children[2]) do |arg|
489
+ type.args << type_of(arg, variables: variables)
490
+ end
491
+
492
+ type
493
+ when call_node?(type_node, name: :type_parameter)
494
+ name = each_arg(type_node.children[2]).to_a[0].children[0]
495
+ Types::Variable.new(name: name, location: nil)
496
+ when call_node?(type_node, name: :any)
497
+ types = each_arg(type_node.children[2]).to_a.map {|node| type_of(node, variables: variables) }
498
+ Types::Union.new(types: types, location: nil)
499
+ when call_node?(type_node, name: :all)
500
+ types = each_arg(type_node.children[2]).to_a.map {|node| type_of(node, variables: variables) }
501
+ Types::Intersection.new(types: types, location: nil)
502
+ when call_node?(type_node, name: :untyped)
503
+ Types::Bases::Any.new(location: nil)
504
+ when call_node?(type_node, name: :nilable)
505
+ type = type_of each_arg(type_node.children[2]).to_a[0], variables: variables
506
+ Types::Optional.new(type: type, location: nil)
507
+ when call_node?(type_node, name: :self_type)
508
+ Types::Bases::Self.new(location: nil)
509
+ when call_node?(type_node, name: :attached_class)
510
+ Types::Bases::Instance.new(location: nil)
511
+ when call_node?(type_node, name: :noreturn)
512
+ Types::Bases::Bottom.new(location: nil)
513
+ when call_node?(type_node, name: :class_of)
514
+ type = type_of each_arg(type_node.children[2]).to_a[0], variables: variables
515
+ case type
516
+ when Types::ClassInstance
517
+ Types::ClassSingleton.new(name: type.name, location: nil)
518
+ else
519
+ STDERR.puts "Unexpected type for `class_of`: #{type}"
520
+ Types::Bases::Any.new(location: nil)
521
+ end
522
+ when type_node.type == :ARRAY, type_node.type == :LIST
523
+ types = each_arg(type_node).map {|node| type_of(node, variables: variables) }
524
+ Types::Tuple.new(types: types, location: nil)
525
+ else
526
+ if proc_type?(type_node)
527
+ method_type = method_type(nil, type_node, variables: variables, overloads: 1) or raise
528
+ Types::Proc.new(type: method_type.type, block: nil, location: nil, self_type: nil)
529
+ else
530
+ STDERR.puts "Unexpected type_node:"
531
+ PP.pp type_node, STDERR
532
+ Types::Bases::Any.new(location: nil)
533
+ end
534
+ end
535
+ end
536
+
537
+ def proc_type?(type_node)
538
+ if call_node?(type_node, name: :proc)
539
+ true
540
+ else
541
+ type_node.type == :CALL && proc_type?(type_node.children[0])
542
+ end
543
+ end
544
+
545
+ def call_node?(node, name:, receiver: -> (node) { node.type == :CONST && node.children[0] == :T }, args: -> (node) { true })
546
+ node.type == :CALL && receiver[node.children[0]] && name == node.children[1] && args[node.children[2]]
547
+ end
548
+
549
+ def const_to_name(node)
550
+ case node.type
551
+ when :CONST
552
+ TypeName.new(name: node.children[0], namespace: Namespace.empty)
553
+ when :COLON2
554
+ if node.children[0]
555
+ namespace = const_to_name(node.children[0]).to_namespace
556
+ else
557
+ namespace = Namespace.empty
558
+ end
559
+
560
+ type_name = TypeName.new(name: node.children[1], namespace: namespace)
561
+
562
+ case type_name.to_s
563
+ when "T::Array"
564
+ BuiltinNames::Array.name
565
+ when "T::Hash"
566
+ BuiltinNames::Hash.name
567
+ when "T::Range"
568
+ BuiltinNames::Range.name
569
+ when "T::Enumerator"
570
+ BuiltinNames::Enumerator.name
571
+ when "T::Enumerable"
572
+ BuiltinNames::Enumerable.name
573
+ when "T::Set"
574
+ BuiltinNames::Set.name
575
+ else
576
+ type_name
577
+ end
578
+ when :COLON3
579
+ TypeName.new(name: node.children[0], namespace: Namespace.root)
580
+ else
581
+ raise "Unexpected node type: #{node.type}"
582
+ end
583
+ end
584
+
585
+ def each_arg(array, &block)
586
+ if block_given?
587
+ if array&.type == :ARRAY || array&.type == :LIST
588
+ array.children.each do |arg|
589
+ if arg
590
+ yield arg
591
+ end
592
+ end
593
+ end
594
+ else
595
+ enum_for :each_arg, array
596
+ end
597
+ end
598
+
599
+ def each_child(node)
600
+ node.children.each do |child|
601
+ if child.is_a?(RubyVM::AbstractSyntaxTree::Node)
602
+ yield child
603
+ end
604
+ end
605
+ end
606
+
607
+ def node_to_hash(node)
608
+ if node&.type == :HASH
609
+ # @type var hash: Hash[Symbol, untyped]
610
+ hash = {}
611
+
612
+ each_arg(node.children[0]).each_slice(2) do |var, type|
613
+ var or raise
614
+
615
+ if (name = symbol_literal_node?(var)) && type
616
+ hash[name] = type
617
+ end
618
+ end
619
+
620
+ hash
621
+ end
622
+ end
623
+ end
624
+ end
625
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Prototype
5
+ class Runtime
6
+ module Helpers
7
+ private
8
+
9
+ # Returns the exact name & not compactly declared name
10
+ def only_name(mod)
11
+ # No nil check because this method is invoked after checking if the module exists
12
+ const_name!(mod).split(/::/).last or raise # (A::B::C) => C
13
+ end
14
+
15
+ def const_name!(const)
16
+ const_name(const) or raise
17
+ end
18
+
19
+ def const_name(const)
20
+ @module_name_method ||= Module.instance_method(:name)
21
+ name = @module_name_method.bind(const).call
22
+ return nil unless name
23
+
24
+ begin
25
+ deprecated, Warning[:deprecated] = Warning[:deprecated], false
26
+ Object.const_get(name)
27
+ rescue NameError
28
+ # Should generate const name if anonymous or internal module (e.g. NameError::message)
29
+ nil
30
+ else
31
+ name
32
+ ensure
33
+ Warning[:deprecated] = deprecated
34
+ end
35
+ end
36
+
37
+ def to_type_name(name, full_name: false)
38
+ *prefix, last = name.split(/::/)
39
+
40
+ last or raise
41
+
42
+ if full_name
43
+ if prefix.empty?
44
+ TypeName.new(name: last.to_sym, namespace: Namespace.empty)
45
+ else
46
+ TypeName.new(name: last.to_sym, namespace: Namespace.parse(prefix.join("::")))
47
+ end
48
+ else
49
+ TypeName.new(name: last.to_sym, namespace: Namespace.empty)
50
+ end
51
+ end
52
+
53
+ def untyped
54
+ @untyped ||= Types::Bases::Any.new(location: nil)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Prototype
5
+ class Runtime
6
+ module Reflection
7
+ def self.object_class(value)
8
+ @object_class ||= Object.instance_method(:class)
9
+ @object_class.bind_call(value)
10
+ end
11
+
12
+ def self.constants_of(mod, inherit = true)
13
+ @constants_of ||= Module.instance_method(:constants)
14
+ @constants_of.bind_call(mod, inherit)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end