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