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,678 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class DefinitionBuilder
5
+ class AncestorBuilder
6
+ class OneAncestors
7
+ attr_reader :type_name
8
+ attr_reader :params
9
+ attr_reader :super_class
10
+ attr_reader :self_types
11
+ attr_reader :included_modules
12
+ attr_reader :included_interfaces
13
+ attr_reader :prepended_modules
14
+ attr_reader :extended_modules
15
+ attr_reader :extended_interfaces
16
+
17
+ def initialize(type_name:, params:, super_class:, self_types:, included_modules:, included_interfaces:, prepended_modules:, extended_modules:, extended_interfaces:)
18
+ @type_name = type_name
19
+ @params = params
20
+ @super_class = super_class
21
+ @self_types = self_types
22
+ @included_modules = included_modules
23
+ @included_interfaces = included_interfaces
24
+ @prepended_modules = prepended_modules
25
+ @extended_modules = extended_modules
26
+ @extended_interfaces = extended_interfaces
27
+ end
28
+
29
+ def each_ancestor(&block)
30
+ if block
31
+ if s = super_class
32
+ yield s
33
+ end
34
+
35
+ each_self_type(&block)
36
+ each_included_module(&block)
37
+ each_included_interface(&block)
38
+ each_prepended_module(&block)
39
+ each_extended_module(&block)
40
+ each_extended_interface(&block)
41
+ else
42
+ enum_for :each_ancestor
43
+ end
44
+ end
45
+
46
+ def each_self_type(&block)
47
+ if block
48
+ self_types&.each(&block)
49
+ else
50
+ enum_for :each_self_type
51
+ end
52
+ end
53
+
54
+ def each_included_module(&block)
55
+ if block
56
+ included_modules&.each(&block)
57
+ else
58
+ enum_for :each_included_module
59
+ end
60
+ end
61
+
62
+ def each_included_interface(&block)
63
+ if block
64
+ included_interfaces&.each(&block)
65
+ else
66
+ enum_for :each_included_interface
67
+ end
68
+ end
69
+
70
+ def each_prepended_module(&block)
71
+ if block
72
+ prepended_modules&.each(&block)
73
+ else
74
+ enum_for :each_prepended_module
75
+ end
76
+ end
77
+
78
+ def each_extended_module(&block)
79
+ if block
80
+ extended_modules&.each(&block)
81
+ else
82
+ enum_for :each_extended_module
83
+ end
84
+ end
85
+
86
+ def each_extended_interface(&block)
87
+ if block
88
+ extended_interfaces&.each(&block)
89
+ else
90
+ enum_for :each_extended_interface
91
+ end
92
+ end
93
+
94
+ def self.class_instance(type_name:, params:, super_class:)
95
+ new(
96
+ type_name: type_name,
97
+ params: params,
98
+ super_class: super_class,
99
+ self_types: nil,
100
+ included_modules: [],
101
+ included_interfaces: [],
102
+ prepended_modules: [],
103
+ extended_modules: nil,
104
+ extended_interfaces: nil
105
+ )
106
+ end
107
+
108
+ def self.singleton(type_name:, super_class:)
109
+ new(
110
+ type_name: type_name,
111
+ params: nil,
112
+ super_class: super_class,
113
+ self_types: nil,
114
+ included_modules: nil,
115
+ included_interfaces: nil,
116
+ prepended_modules: nil,
117
+ extended_modules: [],
118
+ extended_interfaces: []
119
+ )
120
+ end
121
+
122
+ def self.module_instance(type_name:, params:)
123
+ new(
124
+ type_name: type_name,
125
+ params: params,
126
+ self_types: [],
127
+ included_modules: [],
128
+ included_interfaces: [],
129
+ prepended_modules: [],
130
+ super_class: nil,
131
+ extended_modules: nil,
132
+ extended_interfaces: nil
133
+ )
134
+ end
135
+
136
+ def self.interface(type_name:, params:)
137
+ new(
138
+ type_name: type_name,
139
+ params: params,
140
+ self_types: nil,
141
+ included_modules: nil,
142
+ included_interfaces: [],
143
+ prepended_modules: nil,
144
+ super_class: nil,
145
+ extended_modules: nil,
146
+ extended_interfaces: nil
147
+ )
148
+ end
149
+ end
150
+
151
+ attr_reader :env
152
+
153
+ attr_reader :one_instance_ancestors_cache
154
+ attr_reader :instance_ancestors_cache
155
+
156
+ attr_reader :one_singleton_ancestors_cache
157
+ attr_reader :singleton_ancestors_cache
158
+
159
+ attr_reader :one_interface_ancestors_cache
160
+ attr_reader :interface_ancestors_cache
161
+
162
+ def initialize(env:)
163
+ @env = env
164
+
165
+ @one_instance_ancestors_cache = {}
166
+ @instance_ancestors_cache = {}
167
+
168
+ @one_singleton_ancestors_cache = {}
169
+ @singleton_ancestors_cache = {}
170
+
171
+ @one_interface_ancestors_cache = {}
172
+ @interface_ancestors_cache = {}
173
+ end
174
+
175
+ def validate_super_class!(type_name, entry)
176
+ with_super_classes = entry.each_decl.select {|decl| decl.super_class }
177
+
178
+ return if with_super_classes.size <= 1
179
+
180
+ super_types = with_super_classes.map do |decl|
181
+ super_class = decl.super_class or raise
182
+ Types::ClassInstance.new(name: super_class.name, args: super_class.args, location: nil)
183
+ end
184
+
185
+ super_types.uniq!
186
+
187
+ return if super_types.size == 1
188
+
189
+ raise SuperclassMismatchError.new(name: type_name, entry: entry)
190
+ end
191
+
192
+ def one_instance_ancestors(type_name)
193
+ type_name = env.normalize_module_name(type_name)
194
+
195
+ as = one_instance_ancestors_cache[type_name] and return as
196
+
197
+ entry = env.class_decls[type_name] or raise "Unknown name for one_instance_ancestors: #{type_name}"
198
+ params = entry.type_params.each.map(&:name)
199
+
200
+ case entry
201
+ when Environment::ClassEntry
202
+ validate_super_class!(type_name, entry)
203
+ primary = entry.primary_decl
204
+ super_class = primary.super_class
205
+
206
+ if type_name != BuiltinNames::BasicObject.name
207
+ if super_class
208
+ super_name = super_class.name
209
+ super_args = super_class.args
210
+ else
211
+ super_name = BuiltinNames::Object.name
212
+ super_args = [] #: Array[Types::t]
213
+ end
214
+
215
+ super_name = env.normalize_module_name(super_name)
216
+
217
+ NoSuperclassFoundError.check!(super_name, env: env, location: primary.location)
218
+ if super_class
219
+ InheritModuleError.check!(super_class, env: env)
220
+ InvalidTypeApplicationError.check2!(type_name: super_class.name, args: super_class.args, env: env, location: super_class.location)
221
+ end
222
+
223
+ super_entry = env.class_entry(super_name, normalized: true) or raise
224
+ super_args = AST::TypeParam.normalize_args(super_entry.type_params, super_args)
225
+
226
+ ancestors = OneAncestors.class_instance(
227
+ type_name: type_name,
228
+ params: params,
229
+ super_class: Definition::Ancestor::Instance.new(name: super_name, args: super_args, source: :super)
230
+ )
231
+ else
232
+ ancestors = OneAncestors.class_instance(
233
+ type_name: type_name,
234
+ params: params,
235
+ super_class: nil
236
+ )
237
+ end
238
+ when Environment::ModuleEntry
239
+ ancestors = OneAncestors.module_instance(type_name: type_name, params: params)
240
+
241
+ self_types = ancestors.self_types or raise
242
+ if entry.self_types.empty?
243
+ self_types.push Definition::Ancestor::Instance.new(name: BuiltinNames::Object.name, args: [], source: nil)
244
+ else
245
+ entry.self_types.each do |module_self|
246
+ NoSelfTypeFoundError.check!(module_self, env: env)
247
+ InvalidTypeApplicationError.check2!(type_name: module_self.name, args: module_self.args, env: env, location: module_self.location)
248
+
249
+ module_name = module_self.name
250
+ if module_name.class?
251
+ module_entry = env.module_class_entry(module_name, normalized: true) or raise
252
+ module_name = module_entry.name
253
+ self_args = AST::TypeParam.normalize_args(module_entry.type_params, module_self.args)
254
+ end
255
+ if module_name.interface?
256
+ interface_entry = env.interface_decls.fetch(module_name)
257
+ self_args = AST::TypeParam.normalize_args(interface_entry.decl.type_params, module_self.args)
258
+ end
259
+ self_args or raise
260
+
261
+ self_types.push Definition::Ancestor::Instance.new(name: module_name, args: self_args, source: module_self)
262
+ end
263
+ end
264
+ end
265
+
266
+ mixin_ancestors(entry,
267
+ type_name,
268
+ included_modules: ancestors.included_modules,
269
+ included_interfaces: ancestors.included_interfaces,
270
+ prepended_modules: ancestors.prepended_modules,
271
+ extended_modules: nil,
272
+ extended_interfaces: nil)
273
+
274
+ one_instance_ancestors_cache[type_name] = ancestors
275
+ end
276
+
277
+ def one_singleton_ancestors(type_name)
278
+ type_name = env.normalize_module_name(type_name)
279
+ as = one_singleton_ancestors_cache[type_name] and return as
280
+
281
+ entry = env.class_decls[type_name] or raise "Unknown name for one_singleton_ancestors: #{type_name}"
282
+
283
+ case entry
284
+ when Environment::ClassEntry
285
+ validate_super_class!(type_name, entry)
286
+ primary = entry.primary_decl
287
+ super_class = primary.super_class
288
+
289
+ if type_name != BuiltinNames::BasicObject.name
290
+ if super_class
291
+ super_name = super_class.name
292
+ else
293
+ super_name = BuiltinNames::Object.name
294
+ end
295
+
296
+ super_name = env.normalize_module_name(super_name)
297
+
298
+ NoSuperclassFoundError.check!(super_name, env: env, location: primary.location)
299
+ if super_class
300
+ InheritModuleError.check!(super_class, env: env)
301
+ end
302
+
303
+ ancestors = OneAncestors.singleton(
304
+ type_name: type_name,
305
+ super_class: Definition::Ancestor::Singleton.new(name: super_name)
306
+ )
307
+ else
308
+ ancestors = OneAncestors.singleton(
309
+ type_name: type_name,
310
+ super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Class.name, args: [], source: :super)
311
+ )
312
+ end
313
+ when Environment::ModuleEntry
314
+ ancestors = OneAncestors.singleton(
315
+ type_name: type_name,
316
+ super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Module.name, args: [], source: :super)
317
+ )
318
+ end
319
+
320
+ mixin_ancestors(entry,
321
+ type_name,
322
+ included_modules: nil,
323
+ included_interfaces: nil,
324
+ prepended_modules: nil,
325
+ extended_modules: ancestors.extended_modules,
326
+ extended_interfaces: ancestors.extended_interfaces)
327
+
328
+ one_singleton_ancestors_cache[type_name] = ancestors
329
+ end
330
+
331
+ def one_interface_ancestors(type_name)
332
+ one_interface_ancestors_cache[type_name] ||=
333
+ begin
334
+ entry = env.interface_decls[type_name] or raise "Unknown name for one_interface_ancestors: #{type_name}"
335
+ params = entry.decl.type_params.each.map(&:name)
336
+
337
+ OneAncestors.interface(type_name: type_name, params: params).tap do |ancestors|
338
+ mixin_ancestors0(entry.decl,
339
+ type_name,
340
+ align_params: nil,
341
+ included_modules: nil,
342
+ included_interfaces: ancestors.included_interfaces,
343
+ prepended_modules: nil,
344
+ extended_modules: nil,
345
+ extended_interfaces: nil)
346
+ end
347
+ end
348
+ end
349
+
350
+ def mixin_ancestors0(decl, type_name, align_params:, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
351
+ case decl
352
+ when AST::Declarations::Base
353
+ decl.each_mixin do |member|
354
+ case member
355
+ when AST::Members::Include
356
+ module_name = member.name
357
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
358
+
359
+ case
360
+ when member.name.class? && included_modules
361
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
362
+ NoMixinFoundError.check!(member.name, env: env, member: member)
363
+
364
+ module_decl = env.module_entry(module_name, normalized: true) or raise
365
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
366
+
367
+ module_name = env.normalize_module_name(module_name)
368
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
369
+ when member.name.interface? && included_interfaces
370
+ NoMixinFoundError.check!(member.name, env: env, member: member)
371
+
372
+ interface_decl = env.interface_decls.fetch(module_name)
373
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
374
+
375
+ included_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
376
+ end
377
+
378
+ when AST::Members::Prepend
379
+ if prepended_modules
380
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
381
+ NoMixinFoundError.check!(member.name, env: env, member: member)
382
+
383
+ module_decl = env.module_entry(member.name, normalized: true) or raise
384
+ module_name = module_decl.name
385
+
386
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
387
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
388
+
389
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
390
+ end
391
+
392
+ when AST::Members::Extend
393
+ module_name = member.name
394
+ module_args = member.args
395
+
396
+ case
397
+ when member.name.class? && extended_modules
398
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
399
+ NoMixinFoundError.check!(member.name, env: env, member: member)
400
+
401
+ module_decl = env.module_entry(module_name, normalized: true) or raise
402
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
403
+
404
+ module_name = env.normalize_module_name(module_name)
405
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
406
+ when member.name.interface? && extended_interfaces
407
+ NoMixinFoundError.check!(member.name, env: env, member: member)
408
+
409
+ interface_decl = env.interface_decls.fetch(module_name)
410
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
411
+
412
+ extended_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
413
+ end
414
+ end
415
+ end
416
+ when AST::Ruby::Declarations::Base
417
+ decl.members.each do |member|
418
+ case member
419
+ when AST::Ruby::Members::IncludeMember
420
+ if included_modules
421
+ module_name = member.module_name
422
+ module_args = member.type_args
423
+
424
+ # Check if mixing in a class (not allowed)
425
+ if env.class_decl?(module_name)
426
+ raise MixinClassError.new(type_name: type_name, member: member)
427
+ end
428
+
429
+ # Check if module exists
430
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
431
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
432
+ module_name = env.normalize_module_name(module_name)
433
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
434
+ end
435
+
436
+ when AST::Ruby::Members::ExtendMember
437
+ if extended_modules
438
+ module_name = member.module_name
439
+ module_args = member.type_args
440
+
441
+ # Check if mixing in a class (not allowed)
442
+ if env.class_decl?(module_name)
443
+ raise MixinClassError.new(type_name: type_name, member: member)
444
+ end
445
+
446
+ # Check if module exists
447
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
448
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
449
+ module_name = env.normalize_module_name(module_name)
450
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
451
+ end
452
+
453
+ when AST::Ruby::Members::PrependMember
454
+ if prepended_modules
455
+ module_name = member.module_name
456
+ module_args = member.type_args
457
+
458
+ # Check if mixing in a class (not allowed)
459
+ if env.class_decl?(module_name)
460
+ raise MixinClassError.new(type_name: type_name, member: member)
461
+ end
462
+
463
+ # Check if module exists
464
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
465
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
466
+ module_name = env.normalize_module_name(module_name)
467
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
468
+ end
469
+ end
470
+ end
471
+ end
472
+ end
473
+
474
+ def mixin_ancestors(entry, type_name, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
475
+ entry.each_decl do |decl|
476
+ align_params = Substitution.build(
477
+ decl.type_params.each.map(&:name),
478
+ entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
479
+ )
480
+
481
+ mixin_ancestors0(decl,
482
+ type_name,
483
+ align_params: align_params,
484
+ included_modules: included_modules,
485
+ included_interfaces: included_interfaces,
486
+ extended_modules: extended_modules,
487
+ prepended_modules: prepended_modules,
488
+ extended_interfaces: extended_interfaces)
489
+ end
490
+ end
491
+
492
+ def instance_ancestors(type_name, building_ancestors: [])
493
+ as = instance_ancestors_cache[type_name] and return as
494
+
495
+ entry = env.class_decls[type_name] or raise "Unknown name for instance_ancestors: #{type_name}"
496
+ params = entry.type_params.each.map(&:name)
497
+ args = entry.type_params.map do |type_param|
498
+ Types::Variable.new(name: type_param.name, location: type_param.location)
499
+ end
500
+ self_ancestor = Definition::Ancestor::Instance.new(name: type_name, args: args, source: nil)
501
+
502
+ RecursiveAncestorError.check!(self_ancestor,
503
+ ancestors: building_ancestors,
504
+ location: entry.primary_decl.location)
505
+ building_ancestors.push self_ancestor
506
+
507
+ one_ancestors = one_instance_ancestors(type_name)
508
+
509
+ # @type var ancestors: Array[::RBS::Definition::Ancestor::t]
510
+ ancestors = []
511
+
512
+ case entry
513
+ when Environment::ClassEntry
514
+ if super_class = one_ancestors.super_class
515
+ # @type var super_class: Definition::Ancestor::Instance
516
+ super_name = super_class.name
517
+ super_args = super_class.args
518
+
519
+ super_ancestors =
520
+ instance_ancestors(super_name, building_ancestors: building_ancestors)
521
+ .apply(super_args, env: env, location: entry.primary_decl.super_class&.location)
522
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
523
+ ancestors.unshift(*super_ancestors)
524
+ end
525
+ end
526
+
527
+ if self_types = one_ancestors.self_types
528
+ self_types.each do |mod|
529
+ if mod.name.class?
530
+ # Ensure there is no loop in ancestors chain
531
+ instance_ancestors(mod.name, building_ancestors: building_ancestors)
532
+ end
533
+ end
534
+ end
535
+
536
+ if included_modules = one_ancestors.included_modules
537
+ included_modules.each do |mod|
538
+ name = mod.name
539
+ arg_types = mod.args
540
+ (mod.source.is_a?(AST::Members::Include) || mod.source.is_a?(AST::Ruby::Members::IncludeMember)) or raise
541
+ mod_ancestors =
542
+ instance_ancestors(name, building_ancestors: building_ancestors)
543
+ .apply(arg_types, env: env, location: mod.source.location)
544
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
545
+ ancestors.unshift(*mod_ancestors)
546
+ end
547
+ end
548
+
549
+ ancestors.unshift(self_ancestor)
550
+
551
+ if prepended_modules = one_ancestors.prepended_modules
552
+ prepended_modules.each do |mod|
553
+ name = mod.name
554
+ arg_types = mod.args
555
+ (mod.source.is_a?(AST::Members::Prepend) || mod.source.is_a?(AST::Ruby::Members::PrependMember)) or raise
556
+ mod_ancestors =
557
+ instance_ancestors(name, building_ancestors: building_ancestors)
558
+ .apply(arg_types, env: env, location: mod.source.location)
559
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
560
+ ancestors.unshift(*mod_ancestors)
561
+ end
562
+ end
563
+
564
+ building_ancestors.pop
565
+
566
+ instance_ancestors_cache[type_name] = Definition::InstanceAncestors.new(
567
+ type_name: type_name,
568
+ params: params,
569
+ ancestors: ancestors
570
+ )
571
+ end
572
+
573
+ def singleton_ancestors(type_name, building_ancestors: [])
574
+ as = singleton_ancestors_cache[type_name] and return as
575
+
576
+ entry = env.class_decls[type_name] or raise "Unknown name for singleton_ancestors: #{type_name}"
577
+ self_ancestor = Definition::Ancestor::Singleton.new(name: type_name)
578
+
579
+ RecursiveAncestorError.check!(self_ancestor,
580
+ ancestors: building_ancestors,
581
+ location: entry.primary_decl.location)
582
+ building_ancestors.push self_ancestor
583
+
584
+ one_ancestors = one_singleton_ancestors(type_name)
585
+
586
+ ancestors = [] #: Array[Definition::Ancestor::t]
587
+
588
+ case super_class = one_ancestors.super_class
589
+ when Definition::Ancestor::Instance
590
+ super_name = super_class.name
591
+ super_args = super_class.args
592
+
593
+ super_ancestors =
594
+ instance_ancestors(super_name, building_ancestors: building_ancestors)
595
+ .apply(super_args, env: env, location: nil)
596
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
597
+ ancestors.unshift(*super_ancestors)
598
+
599
+ when Definition::Ancestor::Singleton
600
+ super_name = super_class.name
601
+
602
+ super_ancestors = singleton_ancestors(super_name, building_ancestors: [])
603
+ ancestors.unshift(*super_ancestors.ancestors)
604
+ end
605
+
606
+ extended_modules = one_ancestors.extended_modules or raise
607
+ extended_modules.each do |mod|
608
+ name = mod.name
609
+ args = mod.args
610
+ (mod.source.is_a?(AST::Members::Extend) || mod.source.is_a?(AST::Ruby::Members::ExtendMember)) or raise
611
+ mod_ancestors =
612
+ instance_ancestors(name, building_ancestors: building_ancestors)
613
+ .apply(args, env: env, location: mod.source.location)
614
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
615
+ ancestors.unshift(*mod_ancestors)
616
+ end
617
+
618
+ ancestors.unshift(self_ancestor)
619
+
620
+ building_ancestors.pop
621
+
622
+ singleton_ancestors_cache[type_name] = Definition::SingletonAncestors.new(
623
+ type_name: type_name,
624
+ ancestors: ancestors
625
+ )
626
+ end
627
+
628
+ def interface_ancestors(type_name, building_ancestors: [])
629
+ as = interface_ancestors_cache[type_name] and return as
630
+
631
+ entry = env.interface_decls[type_name] or raise "Unknown name for interface_ancestors: #{type_name}"
632
+ params = entry.decl.type_params.each.map(&:name)
633
+ args = Types::Variable.build(params)
634
+ self_ancestor = Definition::Ancestor::Instance.new(name: type_name, args: args, source: nil)
635
+
636
+ RecursiveAncestorError.check!(self_ancestor,
637
+ ancestors: building_ancestors,
638
+ location: entry.decl.location)
639
+ building_ancestors.push self_ancestor
640
+
641
+ one_ancestors = one_interface_ancestors(type_name)
642
+ ancestors = [] #: Array[Definition::Ancestor::t]
643
+
644
+ included_interfaces = one_ancestors.included_interfaces or raise
645
+ included_interfaces.each do |a|
646
+ a.source.is_a?(AST::Members::Include) or raise
647
+ included_ancestors =
648
+ interface_ancestors(a.name, building_ancestors: building_ancestors)
649
+ .apply(a.args, env: env, location: a.source.location)
650
+ included_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: a.name, source: a.source) }
651
+ ancestors.unshift(*included_ancestors)
652
+ end
653
+
654
+ ancestors.unshift(self_ancestor)
655
+ building_ancestors.pop
656
+
657
+ interface_ancestors_cache[type_name] = Definition::InstanceAncestors.new(
658
+ type_name: type_name,
659
+ params: params,
660
+ ancestors: ancestors
661
+ )
662
+ end
663
+
664
+ def fill_ancestor_source(ancestor, name:, source:, &block)
665
+ case ancestor
666
+ when Definition::Ancestor::Instance
667
+ if ancestor.name == name && !ancestor.source
668
+ Definition::Ancestor::Instance.new(name: ancestor.name, args: ancestor.args, source: source)
669
+ else
670
+ ancestor
671
+ end
672
+ else
673
+ ancestor
674
+ end
675
+ end
676
+ end
677
+ end
678
+ end