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,680 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'runtime/helpers'
4
+ require_relative 'runtime/value_object_generator'
5
+ require_relative 'runtime/reflection'
6
+
7
+ module RBS
8
+ module Prototype
9
+ class Runtime
10
+ class Todo
11
+ def initialize(builder:)
12
+ @builder = builder
13
+ end
14
+
15
+ def skip_mixin?(type_name:, module_name:, mixin_class:)
16
+ return false unless @builder.env.module_class_entry(type_name.absolute!)
17
+ return false unless @builder.env.module_class_entry(module_name.absolute!)
18
+
19
+ mixin_decls(type_name).any? do |decl|
20
+ decl.instance_of?(mixin_class) && decl.name == module_name.absolute!
21
+ end
22
+ end
23
+
24
+ def skip_singleton_method?(module_name:, method:, accessibility:)
25
+ return false unless @builder.env.module_class_entry(module_name.absolute!)
26
+
27
+ method_definition = @builder.build_singleton(module_name.absolute!).methods[method.name]
28
+ return false unless method_definition
29
+
30
+ return false unless method_definition.defs.any? do |type_def|
31
+ type_def.implemented_in&.relative!.to_s == method.owner.to_s.delete_prefix("#<Class:").delete_suffix(">")
32
+ end
33
+
34
+ method_definition.accessibility == accessibility
35
+ end
36
+
37
+ def skip_instance_method?(module_name:, method:, accessibility:)
38
+ return false unless @builder.env.module_class_entry(module_name.absolute!)
39
+
40
+ method_definition = @builder.build_instance(module_name.absolute!).methods[method.name]
41
+ return false unless method_definition
42
+
43
+ return false unless method_definition.defs.any? do |type_def|
44
+ type_def.implemented_in&.relative!.to_s == method.owner.to_s
45
+ end
46
+
47
+ method_definition.accessibility == accessibility
48
+ end
49
+
50
+ def skip_constant?(module_name:, name:)
51
+ namespace = Namespace.new(path: module_name.split('::').map(&:to_sym), absolute: true)
52
+ @builder.env.constant_decl?(TypeName.new(namespace: namespace, name: name))
53
+ end
54
+
55
+ private
56
+
57
+ def mixin_decls(type_name)
58
+ type_name_absolute = type_name.absolute!
59
+ @mixin_decls_cache ||= {} #: Hash[TypeName, Array[AST::Members::Mixin]]
60
+ @mixin_decls_cache.fetch(type_name_absolute) do
61
+ @mixin_decls_cache[type_name_absolute] = @builder.env.class_decls[type_name_absolute].each_decl.flat_map do |decl|
62
+ decl.members.select { |m| m.kind_of?(AST::Members::Mixin) }
63
+ end
64
+ end
65
+ end
66
+ end
67
+ private_constant :Todo
68
+
69
+ include Prototype::Helpers
70
+ include Runtime::Helpers
71
+
72
+ attr_reader :patterns
73
+ attr_reader :env
74
+ attr_reader :merge
75
+ attr_reader :todo
76
+ attr_reader :owners_included
77
+ attr_accessor :outline
78
+
79
+ def initialize(patterns:, env:, merge:, todo: false, owners_included: [])
80
+ Kernel.warn("RBS::Prototype::Runtime is deprecated. See https://github.com/ruby/rbs/issues/2841")
81
+
82
+ @patterns = patterns
83
+ @decls = nil
84
+ @modules = {}
85
+ @env = env
86
+ @merge = merge
87
+ @owners_included = owners_included.map do |name|
88
+ Object.const_get(name)
89
+ end
90
+ @outline = false
91
+ @todo = todo
92
+ end
93
+
94
+ def target?(const)
95
+ name = const_name(const)
96
+ return false unless name
97
+
98
+ patterns.any? do |pattern|
99
+ if pattern.end_with?("*")
100
+ (name || "").start_with?(pattern.chop)
101
+ else
102
+ name == pattern
103
+ end
104
+ end
105
+ end
106
+
107
+ def todo_object
108
+ @todo_object ||= Todo.new(builder: builder) if todo
109
+ end
110
+
111
+ def builder
112
+ @builder ||= DefinitionBuilder.new(env: env)
113
+ end
114
+
115
+ def parse(file)
116
+ require file
117
+ end
118
+
119
+ def decls
120
+ unless @decls
121
+ @decls = []
122
+ @modules = ObjectSpace.each_object(Module)
123
+ .map { |mod| [const_name(mod), mod] }
124
+ .select { |name, _| name }
125
+ .to_h
126
+ @modules.select { |name, mod| target?(mod) }.sort_by { |name, _| name }.each do |_, mod|
127
+ case mod
128
+ when Class
129
+ generate_class mod
130
+ when Module
131
+ generate_module mod
132
+ end
133
+ end
134
+ end
135
+
136
+ @decls or raise
137
+ end
138
+
139
+ private def each_mixined_module(type_name, mod)
140
+ each_mixined_module_one(type_name, mod) do |module_name, module_full_name, is_prepend|
141
+ yield module_name, module_full_name, is_prepend ? AST::Members::Prepend : AST::Members::Include
142
+ end
143
+ each_mixined_module_one(type_name, mod.singleton_class) do |module_name, module_full_name, _|
144
+ yield module_name, module_full_name, AST::Members::Extend
145
+ end
146
+ end
147
+
148
+ private def each_mixined_module_one(type_name, mod)
149
+ supers = Set[] #: Set[Module]
150
+ prepends = mod.ancestors.take_while { |m| !mod.equal?(m) }.to_set
151
+
152
+ mod.included_modules.each do |mix|
153
+ supers.merge(mix.included_modules)
154
+ end
155
+
156
+ if mod.is_a?(Class)
157
+ if superclass = mod.superclass
158
+ superclass.included_modules.each do |mix|
159
+ supers << mix
160
+ supers.merge(mix.included_modules)
161
+ end
162
+ end
163
+ end
164
+
165
+ mod.included_modules.uniq.each do |mix|
166
+ if !supers.include?(mix) || prepends.include?(mix)
167
+ unless const_name(mix)
168
+ RBS.logger.warn("Skipping anonymous module #{mix} included in #{mod}")
169
+ else
170
+ module_name = module_full_name = to_type_name(const_name!(mix), full_name: true)
171
+ if module_full_name.namespace == type_name.namespace
172
+ module_name = TypeName.new(name: module_full_name.name, namespace: Namespace.empty)
173
+ end
174
+
175
+ yield module_name, module_full_name, prepends.include?(mix)
176
+ end
177
+ end
178
+ end
179
+ end
180
+
181
+ def method_type(method)
182
+ untyped = Types::Bases::Any.new(location: nil)
183
+
184
+ required_positionals = [] #: Array[Types::Function::Param]
185
+ optional_positionals = [] #: Array[Types::Function::Param]
186
+ rest = nil #: Types::Function::Param?
187
+ trailing_positionals = [] #: Array[Types::Function::Param]
188
+ required_keywords = {} #: Hash[Symbol, Types::Function::Param]
189
+ optional_keywords = {} #: Hash[Symbol, Types::Function::Param]
190
+ rest_keywords = nil #: Types::Function::Param?
191
+
192
+ requireds = required_positionals
193
+
194
+ block = nil #: Types::Block?
195
+
196
+ method.parameters.each do |(kind, name)|
197
+ case kind
198
+ when :req
199
+ requireds << Types::Function::Param.new(name: name, type: untyped)
200
+ when :opt
201
+ requireds = trailing_positionals
202
+ optional_positionals << Types::Function::Param.new(name: name, type: untyped)
203
+ when :rest
204
+ requireds = trailing_positionals
205
+ name = nil if name == :* # For `def f(...) end` syntax
206
+ rest = Types::Function::Param.new(name: name, type: untyped)
207
+ when :keyreq
208
+ name or raise
209
+ required_keywords[name] = Types::Function::Param.new(name: nil, type: untyped)
210
+ when :key
211
+ name or raise
212
+ optional_keywords[name] = Types::Function::Param.new(name: nil, type: untyped)
213
+ when :keyrest
214
+ rest_keywords = Types::Function::Param.new(name: nil, type: untyped)
215
+ when :block
216
+ block = Types::Block.new(
217
+ type: Types::Function.empty(untyped).update(rest_positionals: Types::Function::Param.new(name: nil, type: untyped)),
218
+ required: true,
219
+ self_type: nil
220
+ )
221
+ end
222
+ end
223
+
224
+ block ||= block_from_ast_of(method)
225
+
226
+ return_type = if method.name == :initialize
227
+ Types::Bases::Void.new(location: nil)
228
+ else
229
+ untyped
230
+ end
231
+ method_type = Types::Function.new(
232
+ required_positionals: required_positionals,
233
+ optional_positionals: optional_positionals,
234
+ rest_positionals: rest,
235
+ trailing_positionals: trailing_positionals,
236
+ required_keywords: required_keywords,
237
+ optional_keywords: optional_keywords,
238
+ rest_keywords: rest_keywords,
239
+ return_type: return_type,
240
+ )
241
+
242
+ MethodType.new(
243
+ location: nil,
244
+ type_params: [],
245
+ type: method_type,
246
+ block: block
247
+ )
248
+ end
249
+
250
+ def merge_rbs(module_name, members, instance: nil, singleton: nil)
251
+ if merge
252
+ if env.class_decls[module_name.absolute!]
253
+ # @type var kind: AST::Members::MethodDefinition::kind
254
+ case
255
+ when instance
256
+ method = builder.build_instance(module_name.absolute!).methods[instance]
257
+ method_name = instance
258
+ kind = :instance
259
+ when singleton
260
+ method = builder.build_singleton(module_name.absolute!).methods[singleton]
261
+ method_name = singleton
262
+ kind = :singleton
263
+ else
264
+ raise
265
+ end
266
+
267
+ if method
268
+ members << AST::Members::MethodDefinition.new(
269
+ name: method_name,
270
+ overloads: method.method_types.map {|type|
271
+ AST::Members::MethodDefinition::Overload.new(
272
+ annotations: [],
273
+ method_type: type.update.tap do |ty|
274
+ def ty.to_s
275
+ location or raise
276
+ location.source
277
+ end
278
+ end
279
+ )
280
+ },
281
+ kind: kind,
282
+ location: nil,
283
+ comment: method.comments[0],
284
+ annotations: method.annotations,
285
+ overloading: false,
286
+ visibility: nil
287
+ )
288
+ return
289
+ end
290
+ end
291
+
292
+ yield
293
+ else
294
+ yield
295
+ end
296
+ end
297
+
298
+ def target_method?(mod, instance: nil, singleton: nil)
299
+ case
300
+ when instance
301
+ method = mod.instance_method(instance)
302
+ method.owner == mod || owners_included.any? {|m| method.owner == m }
303
+ when singleton
304
+ method = mod.singleton_class.instance_method(singleton)
305
+ method.owner == mod.singleton_class || owners_included.any? {|m| method.owner == m.singleton_class }
306
+ else
307
+ raise
308
+ end
309
+ end
310
+
311
+ def generate_methods(mod, module_name, members)
312
+ module_name_absolute = to_type_name(const_name!(mod), full_name: true).absolute!
313
+ mod.singleton_methods.select {|name| target_method?(mod, singleton: name) }.sort.each do |name|
314
+ method = mod.singleton_class.instance_method(name)
315
+ next if todo_object&.skip_singleton_method?(module_name: module_name_absolute, method: method, accessibility: :public)
316
+
317
+ if can_alias?(mod.singleton_class, method)
318
+ members << AST::Members::Alias.new(
319
+ new_name: method.name,
320
+ old_name: method.original_name,
321
+ kind: :singleton,
322
+ location: nil,
323
+ comment: nil,
324
+ annotations: [],
325
+ )
326
+ else
327
+ merge_rbs(module_name, members, singleton: name) do
328
+ RBS.logger.info "missing #{module_name}.#{name} #{method.source_location}"
329
+
330
+ members << AST::Members::MethodDefinition.new(
331
+ name: method.name,
332
+ overloads: [
333
+ AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: method_type(method))
334
+ ],
335
+ kind: :singleton,
336
+ location: nil,
337
+ comment: nil,
338
+ annotations: [],
339
+ overloading: false,
340
+ visibility: nil
341
+ )
342
+ end
343
+ end
344
+ end
345
+
346
+ public_instance_methods = mod.public_instance_methods.select {|name| target_method?(mod, instance: name) }
347
+ unless public_instance_methods.empty?
348
+ public_instance_methods.sort.each do |name|
349
+ method = mod.instance_method(name)
350
+ next if todo_object&.skip_instance_method?(module_name: module_name_absolute, method: method, accessibility: :public)
351
+
352
+ if can_alias?(mod, method)
353
+ members << AST::Members::Alias.new(
354
+ new_name: method.name,
355
+ old_name: method.original_name,
356
+ kind: :instance,
357
+ location: nil,
358
+ comment: nil,
359
+ annotations: [],
360
+ )
361
+ else
362
+ merge_rbs(module_name, members, instance: name) do
363
+ RBS.logger.info "missing #{module_name}##{name} #{method.source_location}"
364
+
365
+ members << AST::Members::MethodDefinition.new(
366
+ name: method.name,
367
+ overloads: [
368
+ AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: method_type(method))
369
+ ],
370
+ kind: :instance,
371
+ location: nil,
372
+ comment: nil,
373
+ annotations: [],
374
+ overloading: false,
375
+ visibility: nil
376
+ )
377
+ end
378
+ end
379
+ end
380
+ end
381
+
382
+ private_instance_methods = mod.private_instance_methods.select {|name| target_method?(mod, instance: name) }
383
+ unless private_instance_methods.empty?
384
+ added = false
385
+ members << AST::Members::Private.new(location: nil)
386
+
387
+ private_instance_methods.sort.each do |name|
388
+ method = mod.instance_method(name)
389
+ next if todo_object&.skip_instance_method?(module_name: module_name_absolute, method: method, accessibility: :private)
390
+
391
+ added = true
392
+ if can_alias?(mod, method)
393
+ members << AST::Members::Alias.new(
394
+ new_name: method.name,
395
+ old_name: method.original_name,
396
+ kind: :instance,
397
+ location: nil,
398
+ comment: nil,
399
+ annotations: [],
400
+ )
401
+ else
402
+ merge_rbs(module_name, members, instance: name) do
403
+ RBS.logger.info "missing #{module_name}##{name} #{method.source_location}"
404
+
405
+ members << AST::Members::MethodDefinition.new(
406
+ name: method.name,
407
+ overloads: [
408
+ AST::Members::MethodDefinition::Overload.new(annotations: [], method_type: method_type(method))
409
+ ],
410
+ kind: :instance,
411
+ location: nil,
412
+ comment: nil,
413
+ annotations: [],
414
+ overloading: false,
415
+ visibility: nil
416
+ )
417
+ end
418
+ end
419
+ end
420
+
421
+ members.pop unless added
422
+ end
423
+ end
424
+
425
+ private def can_alias?(mod, method)
426
+ return false if method.name == method.original_name
427
+
428
+ begin
429
+ mod.instance_method(method.original_name) && true
430
+ rescue NameError
431
+ false
432
+ end
433
+ end
434
+
435
+ def generate_constants(mod, decls)
436
+ module_name = const_name!(mod)
437
+ Reflection.constants_of(mod, false).sort.each do |name|
438
+ next if todo_object&.skip_constant?(module_name: module_name, name: name)
439
+
440
+ begin
441
+ value = mod.const_get(name)
442
+ rescue StandardError, LoadError => e
443
+ RBS.logger.warn("Skipping constant #{name} of #{mod} since #{e}")
444
+ next
445
+ end
446
+
447
+ next if Reflection.object_class(value).equal?(Class)
448
+ next if Reflection.object_class(value).equal?(Module)
449
+
450
+ unless Reflection.object_class(value).name
451
+ RBS.logger.warn("Skipping constant #{name} #{value} of #{mod} as an instance of anonymous class")
452
+ next
453
+ end
454
+
455
+ type = case value
456
+ when true, false
457
+ Types::Bases::Bool.new(location: nil)
458
+ when nil
459
+ Types::Optional.new(
460
+ type: Types::Bases::Any.new(location: nil),
461
+ location: nil
462
+ )
463
+ when ARGF
464
+ Types::ClassInstance.new(name: TypeName.parse("::RBS::Unnamed::ARGFClass"), args: [], location: nil)
465
+ when ENV
466
+ Types::ClassInstance.new(name: TypeName.parse("::RBS::Unnamed::ENVClass"), args: [], location: nil)
467
+ else
468
+ value_type_name = to_type_name(const_name!(Reflection.object_class(value)), full_name: true).absolute!
469
+ args = type_args(value_type_name)
470
+ Types::ClassInstance.new(name: value_type_name, args: args, location: nil)
471
+ end
472
+
473
+ decls << AST::Declarations::Constant.new(
474
+ name: to_type_name(name.to_s),
475
+ type: type,
476
+ location: nil,
477
+ annotations: [],
478
+ comment: nil
479
+ )
480
+ end
481
+ end
482
+
483
+ def generate_super_class(mod)
484
+ superclass = mod.superclass
485
+
486
+ if superclass.nil? || superclass == ::Object
487
+ nil
488
+ elsif const_name(superclass).nil?
489
+ RBS.logger.warn("Skipping anonymous superclass #{superclass} of #{mod}")
490
+ nil
491
+ else
492
+ super_name = to_type_name(const_name!(superclass), full_name: true).absolute!
493
+ super_args = type_args(super_name)
494
+ AST::Declarations::Class::Super.new(name: super_name, args: super_args, location: nil)
495
+ end
496
+ end
497
+
498
+ def generate_class(mod)
499
+ type_name_absolute = to_type_name(const_name!(mod), full_name: true).absolute!
500
+ type_name = to_type_name(const_name!(mod))
501
+ outer_decls = ensure_outer_module_declarations(mod)
502
+
503
+ # Check if a declaration exists for the actual module
504
+ decl = outer_decls.detect do |decl|
505
+ decl.is_a?(AST::Declarations::Class) && decl.name.name == only_name(mod).to_sym
506
+ end #: AST::Declarations::Class?
507
+
508
+ unless decl
509
+ if StructGenerator.generatable?(mod)
510
+ decl = StructGenerator.new(mod).build_decl
511
+ elsif DataGenerator.generatable?(mod)
512
+ decl = DataGenerator.new(mod).build_decl
513
+ else
514
+ decl = AST::Declarations::Class.new(
515
+ name: to_type_name(only_name(mod)),
516
+ type_params: type_params(mod),
517
+ super_class: generate_super_class(mod),
518
+ members: [],
519
+ annotations: [],
520
+ location: nil,
521
+ comment: nil
522
+ )
523
+ end
524
+
525
+ outer_decls << decl
526
+ end
527
+
528
+ generate_mixin(mod, decl, type_name, type_name_absolute)
529
+
530
+ unless mod < Struct || (RUBY_VERSION >= '3.2' && mod < Data)
531
+ generate_methods(mod, type_name, decl.members) unless outline
532
+ end
533
+
534
+ generate_constants mod, decl.members
535
+ end
536
+
537
+ def generate_module(mod)
538
+ name = const_name(mod)
539
+
540
+ unless name
541
+ RBS.logger.warn("Skipping anonymous module #{mod}")
542
+ return
543
+ end
544
+
545
+ type_name_absolute = to_type_name(name, full_name: true).absolute!
546
+ type_name = to_type_name(name)
547
+ outer_decls = ensure_outer_module_declarations(mod)
548
+
549
+ # Check if a declaration exists for the actual class
550
+ decl = outer_decls.detect do |decl|
551
+ decl.is_a?(AST::Declarations::Module) && decl.name.name == only_name(mod).to_sym
552
+ end #: AST::Declarations::Module?
553
+
554
+ unless decl
555
+ decl = AST::Declarations::Module.new(
556
+ name: to_type_name(only_name(mod)),
557
+ type_params: type_params(mod),
558
+ self_types: [],
559
+ members: [],
560
+ annotations: [],
561
+ location: nil,
562
+ comment: nil
563
+ )
564
+
565
+ outer_decls << decl
566
+ end
567
+
568
+ generate_mixin(mod, decl, type_name, type_name_absolute)
569
+
570
+ generate_methods(mod, type_name, decl.members) unless outline
571
+
572
+ generate_constants mod, decl.members
573
+ end
574
+
575
+ def generate_mixin(mod, decl, type_name, type_name_absolute)
576
+ each_mixined_module(type_name, mod) do |module_name, module_full_name, mixin_class|
577
+ next if todo_object&.skip_mixin?(type_name: type_name_absolute, module_name: module_full_name, mixin_class: mixin_class)
578
+
579
+ args = type_args(module_full_name)
580
+ decl.members << mixin_class.new(
581
+ name: module_name,
582
+ args: args,
583
+ location: nil,
584
+ comment: nil,
585
+ annotations: []
586
+ )
587
+ end
588
+ end
589
+
590
+ # Generate/find outer module declarations
591
+ # This is broken down into another method to comply with `DRY`
592
+ # This generates/finds declarations in nested form & returns the last array of declarations
593
+ def ensure_outer_module_declarations(mod)
594
+ # @type var outer_module_names: Array[String]
595
+ *outer_module_names, _ = const_name!(mod).split(/::/) #=> parent = [A, B], mod = C
596
+ # Copy the entries in ivar @decls, not .dup
597
+ destination = @decls || [] #: Array[AST::Declarations::Class::member]
598
+
599
+ outer_module_names&.each_with_index do |outer_module_name, i|
600
+ current_name = outer_module_names.take(i+1).join('::')
601
+ outer_module = @modules[current_name]
602
+ outer_decl = destination.detect do |decl|
603
+ case outer_module
604
+ when Class
605
+ decl.is_a?(AST::Declarations::Class) && decl.name.name == outer_module_name.to_sym
606
+ when Module
607
+ decl.is_a?(AST::Declarations::Module) && decl.name.name == outer_module_name.to_sym
608
+ end
609
+ end #: AST::Declarations::Class | AST::Declarations::Module | nil
610
+
611
+ # Insert AST::Declarations if declarations are not added previously
612
+ unless outer_decl
613
+ outer_module or raise
614
+
615
+ if outer_module.is_a?(Class)
616
+ outer_decl = AST::Declarations::Class.new(
617
+ name: to_type_name(outer_module_name),
618
+ type_params: type_params(outer_module),
619
+ super_class: generate_super_class(outer_module),
620
+ members: [],
621
+ annotations: [],
622
+ location: nil,
623
+ comment: nil
624
+ )
625
+ else
626
+ outer_decl = AST::Declarations::Module.new(
627
+ name: to_type_name(outer_module_name),
628
+ type_params: type_params(outer_module),
629
+ self_types: [],
630
+ members: [],
631
+ annotations: [],
632
+ location: nil,
633
+ comment: nil
634
+ )
635
+ end
636
+
637
+ destination << outer_decl
638
+ end
639
+
640
+ destination = outer_decl.members
641
+ end
642
+
643
+ # Return the array of declarations checked out at the end
644
+ destination
645
+ end
646
+
647
+ def type_args(type_name)
648
+ if class_decl = env.class_decls.fetch(type_name.absolute!, nil)
649
+ class_decl.type_params.size.times.map { Types::Bases::Any.new(location: nil) }
650
+ else
651
+ []
652
+ end
653
+ end
654
+
655
+ def type_params(mod)
656
+ type_name = to_type_name(const_name!(mod), full_name: true)
657
+ if class_decl = env.class_decls[type_name.absolute!]
658
+ class_decl.type_params
659
+ else
660
+ []
661
+ end
662
+ end
663
+
664
+ def block_from_ast_of(method)
665
+ begin
666
+ ast = RubyVM::AbstractSyntaxTree.of(method)
667
+ rescue ArgumentError
668
+ return # When the method is defined in eval
669
+ rescue RuntimeError => error
670
+ raise unless error.message.include?("prism")
671
+ return # When the method was compiled by prism
672
+ end
673
+
674
+ if ast && ast.type == :SCOPE
675
+ block_from_body(ast)
676
+ end
677
+ end
678
+ end
679
+ end
680
+ end