rbs-relaxed 3.9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +22 -0
  3. data/.github/workflows/comments.yml +35 -0
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +82 -0
  6. data/.github/workflows/typecheck.yml +38 -0
  7. data/.github/workflows/windows.yml +43 -0
  8. data/.gitignore +23 -0
  9. data/.rubocop.yml +68 -0
  10. data/BSDL +22 -0
  11. data/CHANGELOG.md +1868 -0
  12. data/COPYING +56 -0
  13. data/README.md +203 -0
  14. data/Rakefile +417 -0
  15. data/Steepfile +44 -0
  16. data/config.yml +313 -0
  17. data/core/array.rbs +4062 -0
  18. data/core/basic_object.rbs +375 -0
  19. data/core/binding.rbs +150 -0
  20. data/core/builtin.rbs +277 -0
  21. data/core/class.rbs +220 -0
  22. data/core/comparable.rbs +171 -0
  23. data/core/complex.rbs +786 -0
  24. data/core/constants.rbs +96 -0
  25. data/core/data.rbs +415 -0
  26. data/core/dir.rbs +981 -0
  27. data/core/encoding.rbs +1371 -0
  28. data/core/enumerable.rbs +2405 -0
  29. data/core/enumerator/product.rbs +92 -0
  30. data/core/enumerator.rbs +630 -0
  31. data/core/env.rbs +6 -0
  32. data/core/errno.rbs +673 -0
  33. data/core/errors.rbs +760 -0
  34. data/core/exception.rbs +485 -0
  35. data/core/false_class.rbs +82 -0
  36. data/core/fiber.rbs +550 -0
  37. data/core/fiber_error.rbs +11 -0
  38. data/core/file.rbs +2936 -0
  39. data/core/file_test.rbs +331 -0
  40. data/core/float.rbs +1151 -0
  41. data/core/gc.rbs +644 -0
  42. data/core/global_variables.rbs +184 -0
  43. data/core/hash.rbs +1861 -0
  44. data/core/integer.rbs +1413 -0
  45. data/core/io/buffer.rbs +984 -0
  46. data/core/io/wait.rbs +70 -0
  47. data/core/io.rbs +3406 -0
  48. data/core/kernel.rbs +3096 -0
  49. data/core/marshal.rbs +207 -0
  50. data/core/match_data.rbs +635 -0
  51. data/core/math.rbs +729 -0
  52. data/core/method.rbs +386 -0
  53. data/core/module.rbs +1704 -0
  54. data/core/nil_class.rbs +209 -0
  55. data/core/numeric.rbs +818 -0
  56. data/core/object.rbs +110 -0
  57. data/core/object_space/weak_key_map.rbs +166 -0
  58. data/core/object_space.rbs +190 -0
  59. data/core/proc.rbs +868 -0
  60. data/core/process.rbs +2296 -0
  61. data/core/ractor.rbs +1068 -0
  62. data/core/random.rbs +237 -0
  63. data/core/range.rbs +1107 -0
  64. data/core/rational.rbs +531 -0
  65. data/core/rb_config.rbs +88 -0
  66. data/core/rbs/unnamed/argf.rbs +1229 -0
  67. data/core/rbs/unnamed/env_class.rbs +1209 -0
  68. data/core/rbs/unnamed/random.rbs +293 -0
  69. data/core/refinement.rbs +59 -0
  70. data/core/regexp.rbs +1930 -0
  71. data/core/ruby_vm.rbs +765 -0
  72. data/core/rubygems/basic_specification.rbs +6 -0
  73. data/core/rubygems/config_file.rbs +38 -0
  74. data/core/rubygems/dependency_installer.rbs +6 -0
  75. data/core/rubygems/errors.rbs +176 -0
  76. data/core/rubygems/installer.rbs +15 -0
  77. data/core/rubygems/path_support.rbs +6 -0
  78. data/core/rubygems/platform.rbs +7 -0
  79. data/core/rubygems/request_set.rbs +49 -0
  80. data/core/rubygems/requirement.rbs +148 -0
  81. data/core/rubygems/rubygems.rbs +1171 -0
  82. data/core/rubygems/source_list.rbs +15 -0
  83. data/core/rubygems/specification.rbs +23 -0
  84. data/core/rubygems/stream_ui.rbs +5 -0
  85. data/core/rubygems/uninstaller.rbs +10 -0
  86. data/core/rubygems/version.rbs +294 -0
  87. data/core/set.rbs +621 -0
  88. data/core/signal.rbs +100 -0
  89. data/core/string.rbs +3583 -0
  90. data/core/struct.rbs +667 -0
  91. data/core/symbol.rbs +475 -0
  92. data/core/thread.rbs +1765 -0
  93. data/core/thread_group.rbs +79 -0
  94. data/core/time.rbs +1762 -0
  95. data/core/trace_point.rbs +477 -0
  96. data/core/true_class.rbs +98 -0
  97. data/core/unbound_method.rbs +329 -0
  98. data/core/warning.rbs +87 -0
  99. data/docs/CONTRIBUTING.md +106 -0
  100. data/docs/architecture.md +110 -0
  101. data/docs/collection.md +192 -0
  102. data/docs/data_and_struct.md +86 -0
  103. data/docs/gem.md +57 -0
  104. data/docs/rbs_by_example.md +309 -0
  105. data/docs/repo.md +125 -0
  106. data/docs/sigs.md +167 -0
  107. data/docs/stdlib.md +147 -0
  108. data/docs/syntax.md +910 -0
  109. data/docs/tools.md +17 -0
  110. data/exe/rbs +7 -0
  111. data/ext/rbs_extension/extconf.rb +15 -0
  112. data/ext/rbs_extension/lexer.c +2728 -0
  113. data/ext/rbs_extension/lexer.h +179 -0
  114. data/ext/rbs_extension/lexer.re +147 -0
  115. data/ext/rbs_extension/lexstate.c +175 -0
  116. data/ext/rbs_extension/location.c +325 -0
  117. data/ext/rbs_extension/location.h +85 -0
  118. data/ext/rbs_extension/main.c +33 -0
  119. data/ext/rbs_extension/parser.c +2973 -0
  120. data/ext/rbs_extension/parser.h +18 -0
  121. data/ext/rbs_extension/parserstate.c +397 -0
  122. data/ext/rbs_extension/parserstate.h +163 -0
  123. data/ext/rbs_extension/rbs_extension.h +31 -0
  124. data/ext/rbs_extension/unescape.c +32 -0
  125. data/goodcheck.yml +91 -0
  126. data/include/rbs/constants.h +82 -0
  127. data/include/rbs/ruby_objs.h +72 -0
  128. data/include/rbs/util/rbs_constant_pool.h +219 -0
  129. data/include/rbs.h +7 -0
  130. data/lib/rbs/ancestor_graph.rb +92 -0
  131. data/lib/rbs/annotate/annotations.rb +199 -0
  132. data/lib/rbs/annotate/formatter.rb +92 -0
  133. data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
  134. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  135. data/lib/rbs/annotate.rb +8 -0
  136. data/lib/rbs/ast/annotation.rb +29 -0
  137. data/lib/rbs/ast/comment.rb +29 -0
  138. data/lib/rbs/ast/declarations.rb +467 -0
  139. data/lib/rbs/ast/directives.rb +49 -0
  140. data/lib/rbs/ast/members.rb +451 -0
  141. data/lib/rbs/ast/type_param.rb +225 -0
  142. data/lib/rbs/ast/visitor.rb +137 -0
  143. data/lib/rbs/buffer.rb +67 -0
  144. data/lib/rbs/builtin_names.rb +58 -0
  145. data/lib/rbs/cli/colored_io.rb +48 -0
  146. data/lib/rbs/cli/diff.rb +83 -0
  147. data/lib/rbs/cli/validate.rb +357 -0
  148. data/lib/rbs/cli.rb +1223 -0
  149. data/lib/rbs/collection/cleaner.rb +38 -0
  150. data/lib/rbs/collection/config/lockfile.rb +92 -0
  151. data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
  152. data/lib/rbs/collection/config.rb +81 -0
  153. data/lib/rbs/collection/installer.rb +32 -0
  154. data/lib/rbs/collection/sources/base.rb +14 -0
  155. data/lib/rbs/collection/sources/git.rb +258 -0
  156. data/lib/rbs/collection/sources/local.rb +81 -0
  157. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  158. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  159. data/lib/rbs/collection/sources.rb +38 -0
  160. data/lib/rbs/collection.rb +16 -0
  161. data/lib/rbs/constant.rb +28 -0
  162. data/lib/rbs/definition.rb +401 -0
  163. data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
  164. data/lib/rbs/definition_builder/method_builder.rb +254 -0
  165. data/lib/rbs/definition_builder.rb +845 -0
  166. data/lib/rbs/diff.rb +125 -0
  167. data/lib/rbs/environment/use_map.rb +77 -0
  168. data/lib/rbs/environment.rb +829 -0
  169. data/lib/rbs/environment_loader.rb +173 -0
  170. data/lib/rbs/environment_walker.rb +155 -0
  171. data/lib/rbs/errors.rb +645 -0
  172. data/lib/rbs/factory.rb +18 -0
  173. data/lib/rbs/file_finder.rb +28 -0
  174. data/lib/rbs/location_aux.rb +138 -0
  175. data/lib/rbs/locator.rb +243 -0
  176. data/lib/rbs/method_type.rb +143 -0
  177. data/lib/rbs/namespace.rb +125 -0
  178. data/lib/rbs/parser/lex_result.rb +15 -0
  179. data/lib/rbs/parser/token.rb +23 -0
  180. data/lib/rbs/parser_aux.rb +114 -0
  181. data/lib/rbs/prototype/helpers.rb +140 -0
  182. data/lib/rbs/prototype/node_usage.rb +99 -0
  183. data/lib/rbs/prototype/rb.rb +840 -0
  184. data/lib/rbs/prototype/rbi.rb +641 -0
  185. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  186. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  187. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  188. data/lib/rbs/prototype/runtime.rb +667 -0
  189. data/lib/rbs/repository.rb +127 -0
  190. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  191. data/lib/rbs/resolver/type_name_resolver.rb +91 -0
  192. data/lib/rbs/sorter.rb +198 -0
  193. data/lib/rbs/substitution.rb +83 -0
  194. data/lib/rbs/subtractor.rb +201 -0
  195. data/lib/rbs/test/errors.rb +80 -0
  196. data/lib/rbs/test/guaranteed.rb +30 -0
  197. data/lib/rbs/test/hook.rb +212 -0
  198. data/lib/rbs/test/observer.rb +19 -0
  199. data/lib/rbs/test/setup.rb +84 -0
  200. data/lib/rbs/test/setup_helper.rb +50 -0
  201. data/lib/rbs/test/tester.rb +167 -0
  202. data/lib/rbs/test/type_check.rb +435 -0
  203. data/lib/rbs/test.rb +112 -0
  204. data/lib/rbs/type_alias_dependency.rb +100 -0
  205. data/lib/rbs/type_alias_regularity.rb +126 -0
  206. data/lib/rbs/type_name.rb +109 -0
  207. data/lib/rbs/types.rb +1596 -0
  208. data/lib/rbs/unit_test/convertibles.rb +176 -0
  209. data/lib/rbs/unit_test/spy.rb +138 -0
  210. data/lib/rbs/unit_test/type_assertions.rb +347 -0
  211. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  212. data/lib/rbs/unit_test.rb +6 -0
  213. data/lib/rbs/validator.rb +186 -0
  214. data/lib/rbs/variance_calculator.rb +189 -0
  215. data/lib/rbs/vendorer.rb +71 -0
  216. data/lib/rbs/version.rb +5 -0
  217. data/lib/rbs/writer.rb +424 -0
  218. data/lib/rbs.rb +94 -0
  219. data/lib/rdoc/discover.rb +20 -0
  220. data/lib/rdoc_plugin/parser.rb +163 -0
  221. data/rbs-relaxed.gemspec +48 -0
  222. data/schema/annotation.json +14 -0
  223. data/schema/comment.json +26 -0
  224. data/schema/decls.json +326 -0
  225. data/schema/function.json +87 -0
  226. data/schema/location.json +56 -0
  227. data/schema/members.json +266 -0
  228. data/schema/methodType.json +50 -0
  229. data/schema/typeParam.json +36 -0
  230. data/schema/types.json +317 -0
  231. data/sig/ancestor_builder.rbs +163 -0
  232. data/sig/ancestor_graph.rbs +60 -0
  233. data/sig/annotate/annotations.rbs +102 -0
  234. data/sig/annotate/formatter.rbs +24 -0
  235. data/sig/annotate/rdoc_annotater.rbs +82 -0
  236. data/sig/annotate/rdoc_source.rbs +30 -0
  237. data/sig/annotation.rbs +27 -0
  238. data/sig/buffer.rbs +32 -0
  239. data/sig/builtin_names.rbs +44 -0
  240. data/sig/cli/colored_io.rbs +15 -0
  241. data/sig/cli/diff.rbs +21 -0
  242. data/sig/cli/validate.rbs +43 -0
  243. data/sig/cli.rbs +87 -0
  244. data/sig/collection/cleaner.rbs +13 -0
  245. data/sig/collection/config/lockfile.rbs +74 -0
  246. data/sig/collection/config/lockfile_generator.rbs +66 -0
  247. data/sig/collection/config.rbs +46 -0
  248. data/sig/collection/installer.rbs +17 -0
  249. data/sig/collection/sources.rbs +214 -0
  250. data/sig/collection.rbs +4 -0
  251. data/sig/comment.rbs +26 -0
  252. data/sig/constant.rbs +21 -0
  253. data/sig/declarations.rbs +267 -0
  254. data/sig/definition.rbs +173 -0
  255. data/sig/definition_builder.rbs +165 -0
  256. data/sig/diff.rbs +28 -0
  257. data/sig/directives.rbs +77 -0
  258. data/sig/environment.rbs +279 -0
  259. data/sig/environment_loader.rbs +111 -0
  260. data/sig/environment_walker.rbs +65 -0
  261. data/sig/errors.rbs +405 -0
  262. data/sig/factory.rbs +5 -0
  263. data/sig/file_finder.rbs +28 -0
  264. data/sig/location.rbs +110 -0
  265. data/sig/locator.rbs +58 -0
  266. data/sig/manifest.yaml +7 -0
  267. data/sig/members.rbs +258 -0
  268. data/sig/method_builder.rbs +84 -0
  269. data/sig/method_types.rbs +58 -0
  270. data/sig/namespace.rbs +146 -0
  271. data/sig/parser.rbs +100 -0
  272. data/sig/prototype/helpers.rbs +27 -0
  273. data/sig/prototype/node_usage.rbs +20 -0
  274. data/sig/prototype/rb.rbs +96 -0
  275. data/sig/prototype/rbi.rbs +75 -0
  276. data/sig/prototype/runtime.rbs +182 -0
  277. data/sig/rbs.rbs +21 -0
  278. data/sig/rdoc/rbs.rbs +67 -0
  279. data/sig/repository.rbs +85 -0
  280. data/sig/resolver/constant_resolver.rbs +92 -0
  281. data/sig/resolver/context.rbs +34 -0
  282. data/sig/resolver/type_name_resolver.rbs +35 -0
  283. data/sig/shims/bundler.rbs +38 -0
  284. data/sig/shims/enumerable.rbs +5 -0
  285. data/sig/shims/rubygems.rbs +19 -0
  286. data/sig/sorter.rbs +41 -0
  287. data/sig/substitution.rbs +48 -0
  288. data/sig/subtractor.rbs +37 -0
  289. data/sig/test/errors.rbs +52 -0
  290. data/sig/test/guranteed.rbs +9 -0
  291. data/sig/test/type_check.rbs +19 -0
  292. data/sig/test.rbs +82 -0
  293. data/sig/type_alias_dependency.rbs +53 -0
  294. data/sig/type_alias_regularity.rbs +98 -0
  295. data/sig/type_param.rbs +110 -0
  296. data/sig/typename.rbs +79 -0
  297. data/sig/types.rbs +579 -0
  298. data/sig/unit_test/convertibles.rbs +154 -0
  299. data/sig/unit_test/spy.rbs +30 -0
  300. data/sig/unit_test/type_assertions.rbs +196 -0
  301. data/sig/unit_test/with_aliases.rbs +136 -0
  302. data/sig/use_map.rbs +35 -0
  303. data/sig/util.rbs +9 -0
  304. data/sig/validator.rbs +63 -0
  305. data/sig/variance_calculator.rbs +87 -0
  306. data/sig/vendorer.rbs +51 -0
  307. data/sig/version.rbs +3 -0
  308. data/sig/visitor.rbs +47 -0
  309. data/sig/writer.rbs +127 -0
  310. data/src/constants.c +153 -0
  311. data/src/ruby_objs.c +795 -0
  312. data/src/util/rbs_constant_pool.c +342 -0
  313. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  314. data/stdlib/abbrev/0/array.rbs +26 -0
  315. data/stdlib/base64/0/base64.rbs +355 -0
  316. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  317. data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
  318. data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
  319. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  320. data/stdlib/cgi/0/core.rbs +1285 -0
  321. data/stdlib/cgi/0/manifest.yaml +3 -0
  322. data/stdlib/coverage/0/coverage.rbs +263 -0
  323. data/stdlib/csv/0/csv.rbs +3776 -0
  324. data/stdlib/csv/0/manifest.yaml +3 -0
  325. data/stdlib/date/0/date.rbs +1585 -0
  326. data/stdlib/date/0/date_time.rbs +616 -0
  327. data/stdlib/date/0/time.rbs +26 -0
  328. data/stdlib/dbm/0/dbm.rbs +421 -0
  329. data/stdlib/delegate/0/delegator.rbs +184 -0
  330. data/stdlib/delegate/0/kernel.rbs +47 -0
  331. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  332. data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
  333. data/stdlib/digest/0/digest.rbs +577 -0
  334. data/stdlib/erb/0/erb.rbs +532 -0
  335. data/stdlib/etc/0/etc.rbs +865 -0
  336. data/stdlib/fileutils/0/fileutils.rbs +1734 -0
  337. data/stdlib/find/0/find.rbs +49 -0
  338. data/stdlib/forwardable/0/forwardable.rbs +268 -0
  339. data/stdlib/io-console/0/io-console.rbs +414 -0
  340. data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
  341. data/stdlib/json/0/json.rbs +1916 -0
  342. data/stdlib/kconv/0/kconv.rbs +166 -0
  343. data/stdlib/logger/0/formatter.rbs +45 -0
  344. data/stdlib/logger/0/log_device.rbs +100 -0
  345. data/stdlib/logger/0/logger.rbs +796 -0
  346. data/stdlib/logger/0/manifest.yaml +2 -0
  347. data/stdlib/logger/0/period.rbs +17 -0
  348. data/stdlib/logger/0/severity.rbs +34 -0
  349. data/stdlib/minitest/0/kernel.rbs +42 -0
  350. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  351. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  352. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  353. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  354. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  355. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  356. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  357. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  358. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  359. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  360. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  361. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  362. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  363. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  364. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  365. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  366. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  367. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  368. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  369. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  370. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  371. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  372. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  373. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  374. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  375. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  376. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  377. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  378. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  379. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  380. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  381. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  382. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  383. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  384. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  385. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  386. data/stdlib/minitest/0/minitest.rbs +115 -0
  387. data/stdlib/monitor/0/monitor.rbs +363 -0
  388. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  389. data/stdlib/net-http/0/manifest.yaml +3 -0
  390. data/stdlib/net-http/0/net-http.rbs +5552 -0
  391. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  392. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  393. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  394. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  395. data/stdlib/nkf/0/nkf.rbs +402 -0
  396. data/stdlib/objspace/0/objspace.rbs +487 -0
  397. data/stdlib/observable/0/observable.rbs +217 -0
  398. data/stdlib/open-uri/0/manifest.yaml +4 -0
  399. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  400. data/stdlib/open3/0/open3.rbs +147 -0
  401. data/stdlib/openssl/0/manifest.yaml +3 -0
  402. data/stdlib/openssl/0/openssl.rbs +12113 -0
  403. data/stdlib/optparse/0/optparse.rbs +1725 -0
  404. data/stdlib/pathname/0/pathname.rbs +1406 -0
  405. data/stdlib/pp/0/manifest.yaml +2 -0
  406. data/stdlib/pp/0/pp.rbs +300 -0
  407. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  408. data/stdlib/pstore/0/pstore.rbs +603 -0
  409. data/stdlib/psych/0/core_ext.rbs +12 -0
  410. data/stdlib/psych/0/dbm.rbs +237 -0
  411. data/stdlib/psych/0/manifest.yaml +3 -0
  412. data/stdlib/psych/0/psych.rbs +402 -0
  413. data/stdlib/psych/0/store.rbs +59 -0
  414. data/stdlib/pty/0/pty.rbs +237 -0
  415. data/stdlib/rdoc/0/code_object.rbs +51 -0
  416. data/stdlib/rdoc/0/comment.rbs +59 -0
  417. data/stdlib/rdoc/0/context.rbs +153 -0
  418. data/stdlib/rdoc/0/markup.rbs +117 -0
  419. data/stdlib/rdoc/0/parser.rbs +56 -0
  420. data/stdlib/rdoc/0/rdoc.rbs +391 -0
  421. data/stdlib/rdoc/0/ri.rbs +17 -0
  422. data/stdlib/rdoc/0/store.rbs +48 -0
  423. data/stdlib/rdoc/0/top_level.rbs +97 -0
  424. data/stdlib/resolv/0/manifest.yaml +3 -0
  425. data/stdlib/resolv/0/resolv.rbs +1830 -0
  426. data/stdlib/ripper/0/ripper.rbs +1648 -0
  427. data/stdlib/securerandom/0/securerandom.rbs +62 -0
  428. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  429. data/stdlib/singleton/0/singleton.rbs +131 -0
  430. data/stdlib/socket/0/addrinfo.rbs +666 -0
  431. data/stdlib/socket/0/basic_socket.rbs +590 -0
  432. data/stdlib/socket/0/constants.rbs +2295 -0
  433. data/stdlib/socket/0/ip_socket.rbs +92 -0
  434. data/stdlib/socket/0/socket.rbs +4157 -0
  435. data/stdlib/socket/0/socket_error.rbs +5 -0
  436. data/stdlib/socket/0/tcp_server.rbs +192 -0
  437. data/stdlib/socket/0/tcp_socket.rbs +79 -0
  438. data/stdlib/socket/0/udp_socket.rbs +133 -0
  439. data/stdlib/socket/0/unix_server.rbs +169 -0
  440. data/stdlib/socket/0/unix_socket.rbs +172 -0
  441. data/stdlib/stringio/0/stringio.rbs +567 -0
  442. data/stdlib/strscan/0/string_scanner.rbs +1627 -0
  443. data/stdlib/tempfile/0/tempfile.rbs +479 -0
  444. data/stdlib/time/0/time.rbs +432 -0
  445. data/stdlib/timeout/0/timeout.rbs +81 -0
  446. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  447. data/stdlib/tsort/0/cyclic.rbs +5 -0
  448. data/stdlib/tsort/0/interfaces.rbs +20 -0
  449. data/stdlib/tsort/0/tsort.rbs +409 -0
  450. data/stdlib/uri/0/common.rbs +582 -0
  451. data/stdlib/uri/0/file.rbs +118 -0
  452. data/stdlib/uri/0/ftp.rbs +13 -0
  453. data/stdlib/uri/0/generic.rbs +1108 -0
  454. data/stdlib/uri/0/http.rbs +104 -0
  455. data/stdlib/uri/0/https.rbs +14 -0
  456. data/stdlib/uri/0/ldap.rbs +230 -0
  457. data/stdlib/uri/0/ldaps.rbs +14 -0
  458. data/stdlib/uri/0/mailto.rbs +92 -0
  459. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  460. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  461. data/stdlib/uri/0/ws.rbs +13 -0
  462. data/stdlib/uri/0/wss.rbs +9 -0
  463. data/stdlib/yaml/0/manifest.yaml +2 -0
  464. data/stdlib/yaml/0/yaml.rbs +1 -0
  465. data/stdlib/zlib/0/buf_error.rbs +10 -0
  466. data/stdlib/zlib/0/data_error.rbs +10 -0
  467. data/stdlib/zlib/0/deflate.rbs +210 -0
  468. data/stdlib/zlib/0/error.rbs +20 -0
  469. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  470. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  471. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  472. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  473. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  474. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  475. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  476. data/stdlib/zlib/0/inflate.rbs +180 -0
  477. data/stdlib/zlib/0/mem_error.rbs +10 -0
  478. data/stdlib/zlib/0/need_dict.rbs +13 -0
  479. data/stdlib/zlib/0/stream_end.rbs +11 -0
  480. data/stdlib/zlib/0/stream_error.rbs +11 -0
  481. data/stdlib/zlib/0/version_error.rbs +11 -0
  482. data/stdlib/zlib/0/zlib.rbs +449 -0
  483. data/stdlib/zlib/0/zstream.rbs +200 -0
  484. metadata +532 -0
@@ -0,0 +1,620 @@
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.decls.select {|d| d.decl.super_class }
177
+
178
+ return if with_super_classes.size <= 1
179
+
180
+ super_types = with_super_classes.map do |d|
181
+ super_class = d.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
204
+ super_class = primary.decl.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.decl.location)
218
+ if super_class
219
+ InheritModuleError.check!(super_class, env: env)
220
+ end
221
+
222
+ super_entry = env.normalized_class_entry(super_name) or raise
223
+ super_args = AST::TypeParam.normalize_args(super_entry.type_params, super_args)
224
+
225
+ ancestors = OneAncestors.class_instance(
226
+ type_name: type_name,
227
+ params: params,
228
+ super_class: Definition::Ancestor::Instance.new(name: super_name, args: super_args, source: :super)
229
+ )
230
+ else
231
+ ancestors = OneAncestors.class_instance(
232
+ type_name: type_name,
233
+ params: params,
234
+ super_class: nil
235
+ )
236
+ end
237
+ when Environment::ModuleEntry
238
+ ancestors = OneAncestors.module_instance(type_name: type_name, params: params)
239
+
240
+ self_types = ancestors.self_types or raise
241
+ if entry.self_types.empty?
242
+ self_types.push Definition::Ancestor::Instance.new(name: BuiltinNames::Object.name, args: [], source: nil)
243
+ else
244
+ entry.self_types.each do |module_self|
245
+ NoSelfTypeFoundError.check!(module_self, env: env)
246
+
247
+ module_name = module_self.name
248
+ if module_name.class?
249
+ module_entry = env.normalized_module_class_entry(module_name) or raise
250
+ module_name = module_entry.name
251
+ self_args = AST::TypeParam.normalize_args(module_entry.type_params, module_self.args)
252
+ end
253
+ if module_name.interface?
254
+ interface_entry = env.interface_decls.fetch(module_name)
255
+ self_args = AST::TypeParam.normalize_args(interface_entry.decl.type_params, module_self.args)
256
+ end
257
+ self_args or raise
258
+
259
+ self_types.push Definition::Ancestor::Instance.new(name: module_name, args: self_args, source: module_self)
260
+ end
261
+ end
262
+ end
263
+
264
+ mixin_ancestors(entry,
265
+ type_name,
266
+ included_modules: ancestors.included_modules,
267
+ included_interfaces: ancestors.included_interfaces,
268
+ prepended_modules: ancestors.prepended_modules,
269
+ extended_modules: nil,
270
+ extended_interfaces: nil)
271
+
272
+ one_instance_ancestors_cache[type_name] = ancestors
273
+ end
274
+
275
+ def one_singleton_ancestors(type_name)
276
+ type_name = env.normalize_module_name(type_name)
277
+ as = one_singleton_ancestors_cache[type_name] and return as
278
+
279
+ entry = env.class_decls[type_name] or raise "Unknown name for one_singleton_ancestors: #{type_name}"
280
+
281
+ case entry
282
+ when Environment::ClassEntry
283
+ validate_super_class!(type_name, entry)
284
+ primary = entry.primary
285
+ super_class = primary.decl.super_class
286
+
287
+ if type_name != BuiltinNames::BasicObject.name
288
+ if super_class
289
+ super_name = super_class.name
290
+ else
291
+ super_name = BuiltinNames::Object.name
292
+ end
293
+
294
+ super_name = env.normalize_module_name(super_name)
295
+
296
+ NoSuperclassFoundError.check!(super_name, env: env, location: primary.decl.location)
297
+ if super_class
298
+ InheritModuleError.check!(super_class, env: env)
299
+ end
300
+
301
+ ancestors = OneAncestors.singleton(
302
+ type_name: type_name,
303
+ super_class: Definition::Ancestor::Singleton.new(name: super_name)
304
+ )
305
+ else
306
+ ancestors = OneAncestors.singleton(
307
+ type_name: type_name,
308
+ super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Class.name, args: [], source: :super)
309
+ )
310
+ end
311
+ when Environment::ModuleEntry
312
+ ancestors = OneAncestors.singleton(
313
+ type_name: type_name,
314
+ super_class: Definition::Ancestor::Instance.new(name: BuiltinNames::Module.name, args: [], source: :super)
315
+ )
316
+ end
317
+
318
+ mixin_ancestors(entry,
319
+ type_name,
320
+ included_modules: nil,
321
+ included_interfaces: nil,
322
+ prepended_modules: nil,
323
+ extended_modules: ancestors.extended_modules,
324
+ extended_interfaces: ancestors.extended_interfaces)
325
+
326
+ one_singleton_ancestors_cache[type_name] = ancestors
327
+ end
328
+
329
+ def one_interface_ancestors(type_name)
330
+ one_interface_ancestors_cache[type_name] ||=
331
+ begin
332
+ entry = env.interface_decls[type_name] or raise "Unknown name for one_interface_ancestors: #{type_name}"
333
+ params = entry.decl.type_params.each.map(&:name)
334
+
335
+ OneAncestors.interface(type_name: type_name, params: params).tap do |ancestors|
336
+ mixin_ancestors0(entry.decl,
337
+ type_name,
338
+ align_params: nil,
339
+ included_modules: nil,
340
+ included_interfaces: ancestors.included_interfaces,
341
+ prepended_modules: nil,
342
+ extended_modules: nil,
343
+ extended_interfaces: nil)
344
+ end
345
+ end
346
+ end
347
+
348
+ def mixin_ancestors0(decl, type_name, align_params:, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
349
+ decl.each_mixin do |member|
350
+ case member
351
+ when AST::Members::Include
352
+ module_name = member.name
353
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
354
+
355
+ case
356
+ when member.name.class? && included_modules
357
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
358
+ NoMixinFoundError.check!(member.name, env: env, member: member)
359
+
360
+ module_decl = env.normalized_module_entry(module_name) or raise
361
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
362
+
363
+ module_name = env.normalize_module_name(module_name)
364
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
365
+ when member.name.interface? && included_interfaces
366
+ NoMixinFoundError.check!(member.name, env: env, member: member)
367
+
368
+ interface_decl = env.interface_decls.fetch(module_name)
369
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
370
+
371
+ included_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
372
+ end
373
+
374
+ when AST::Members::Prepend
375
+ if prepended_modules
376
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
377
+ NoMixinFoundError.check!(member.name, env: env, member: member)
378
+
379
+ module_decl = env.normalized_module_entry(member.name) or raise
380
+ module_name = module_decl.name
381
+
382
+ module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
383
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
384
+
385
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
386
+ end
387
+
388
+ when AST::Members::Extend
389
+ module_name = member.name
390
+ module_args = member.args
391
+
392
+ case
393
+ when member.name.class? && extended_modules
394
+ MixinClassError.check!(type_name: type_name, env: env, member: member)
395
+ NoMixinFoundError.check!(member.name, env: env, member: member)
396
+
397
+ module_decl = env.normalized_module_entry(module_name) or raise
398
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
399
+
400
+ module_name = env.normalize_module_name(module_name)
401
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
402
+ when member.name.interface? && extended_interfaces
403
+ NoMixinFoundError.check!(member.name, env: env, member: member)
404
+
405
+ interface_decl = env.interface_decls.fetch(module_name)
406
+ module_args = AST::TypeParam.normalize_args(interface_decl.decl.type_params, module_args)
407
+
408
+ extended_interfaces << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
409
+ end
410
+ end
411
+ end
412
+ end
413
+
414
+ def mixin_ancestors(entry, type_name, included_modules:, included_interfaces:, extended_modules:, prepended_modules:, extended_interfaces:)
415
+ entry.decls.each do |d|
416
+ decl = d.decl
417
+
418
+ align_params = Substitution.build(
419
+ decl.type_params.each.map(&:name),
420
+ entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
421
+ )
422
+
423
+ mixin_ancestors0(decl,
424
+ type_name,
425
+ align_params: align_params,
426
+ included_modules: included_modules,
427
+ included_interfaces: included_interfaces,
428
+ extended_modules: extended_modules,
429
+ prepended_modules: prepended_modules,
430
+ extended_interfaces: extended_interfaces)
431
+ end
432
+ end
433
+
434
+ def instance_ancestors(type_name, building_ancestors: [])
435
+ as = instance_ancestors_cache[type_name] and return as
436
+
437
+ entry = env.class_decls[type_name] or raise "Unknown name for instance_ancestors: #{type_name}"
438
+ params = entry.type_params.each.map(&:name)
439
+ args = entry.type_params.map do |type_param|
440
+ Types::Variable.new(name: type_param.name, location: type_param.location)
441
+ end
442
+ self_ancestor = Definition::Ancestor::Instance.new(name: type_name, args: args, source: nil)
443
+
444
+ RecursiveAncestorError.check!(self_ancestor,
445
+ ancestors: building_ancestors,
446
+ location: entry.primary.decl.location)
447
+ building_ancestors.push self_ancestor
448
+
449
+ one_ancestors = one_instance_ancestors(type_name)
450
+
451
+ # @type var ancestors: Array[::RBS::Definition::Ancestor::t]
452
+ ancestors = []
453
+
454
+ case entry
455
+ when Environment::ClassEntry
456
+ if super_class = one_ancestors.super_class
457
+ # @type var super_class: Definition::Ancestor::Instance
458
+ super_name = super_class.name
459
+ super_args = super_class.args
460
+
461
+ super_ancestors =
462
+ instance_ancestors(super_name, building_ancestors: building_ancestors)
463
+ .apply(super_args, env: env, location: entry.primary.decl.super_class&.location)
464
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
465
+ ancestors.unshift(*super_ancestors)
466
+ end
467
+ end
468
+
469
+ if self_types = one_ancestors.self_types
470
+ self_types.each do |mod|
471
+ if mod.name.class?
472
+ # Ensure there is no loop in ancestors chain
473
+ instance_ancestors(mod.name, building_ancestors: building_ancestors)
474
+ end
475
+ end
476
+ end
477
+
478
+ if included_modules = one_ancestors.included_modules
479
+ included_modules.each do |mod|
480
+ name = mod.name
481
+ arg_types = mod.args
482
+ mod.source.is_a?(AST::Members::Include) or raise
483
+ mod_ancestors =
484
+ instance_ancestors(name, building_ancestors: building_ancestors)
485
+ .apply(arg_types, env: env, location: mod.source.location)
486
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
487
+ ancestors.unshift(*mod_ancestors)
488
+ end
489
+ end
490
+
491
+ ancestors.unshift(self_ancestor)
492
+
493
+ if prepended_modules = one_ancestors.prepended_modules
494
+ prepended_modules.each do |mod|
495
+ name = mod.name
496
+ arg_types = mod.args
497
+ mod.source.is_a?(AST::Members::Prepend) or raise
498
+ mod_ancestors =
499
+ instance_ancestors(name, building_ancestors: building_ancestors)
500
+ .apply(arg_types, env: env, location: mod.source.location)
501
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
502
+ ancestors.unshift(*mod_ancestors)
503
+ end
504
+ end
505
+
506
+ building_ancestors.pop
507
+
508
+ instance_ancestors_cache[type_name] = Definition::InstanceAncestors.new(
509
+ type_name: type_name,
510
+ params: params,
511
+ ancestors: ancestors
512
+ )
513
+ end
514
+
515
+ def singleton_ancestors(type_name, building_ancestors: [])
516
+ as = singleton_ancestors_cache[type_name] and return as
517
+
518
+ entry = env.class_decls[type_name] or raise "Unknown name for singleton_ancestors: #{type_name}"
519
+ self_ancestor = Definition::Ancestor::Singleton.new(name: type_name)
520
+
521
+ RecursiveAncestorError.check!(self_ancestor,
522
+ ancestors: building_ancestors,
523
+ location: entry.primary.decl.location)
524
+ building_ancestors.push self_ancestor
525
+
526
+ one_ancestors = one_singleton_ancestors(type_name)
527
+
528
+ ancestors = [] #: Array[Definition::Ancestor::t]
529
+
530
+ case super_class = one_ancestors.super_class
531
+ when Definition::Ancestor::Instance
532
+ super_name = super_class.name
533
+ super_args = super_class.args
534
+
535
+ super_ancestors =
536
+ instance_ancestors(super_name, building_ancestors: building_ancestors)
537
+ .apply(super_args, env: env, location: nil)
538
+ super_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: super_name, source: :super) }
539
+ ancestors.unshift(*super_ancestors)
540
+
541
+ when Definition::Ancestor::Singleton
542
+ super_name = super_class.name
543
+
544
+ super_ancestors = singleton_ancestors(super_name, building_ancestors: [])
545
+ ancestors.unshift(*super_ancestors.ancestors)
546
+ end
547
+
548
+ extended_modules = one_ancestors.extended_modules or raise
549
+ extended_modules.each do |mod|
550
+ name = mod.name
551
+ args = mod.args
552
+ mod.source.is_a?(AST::Members::Extend) or raise
553
+ mod_ancestors =
554
+ instance_ancestors(name, building_ancestors: building_ancestors)
555
+ .apply(args, env: env, location: mod.source.location)
556
+ mod_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: name, source: mod.source) }
557
+ ancestors.unshift(*mod_ancestors)
558
+ end
559
+
560
+ ancestors.unshift(self_ancestor)
561
+
562
+ building_ancestors.pop
563
+
564
+ singleton_ancestors_cache[type_name] = Definition::SingletonAncestors.new(
565
+ type_name: type_name,
566
+ ancestors: ancestors
567
+ )
568
+ end
569
+
570
+ def interface_ancestors(type_name, building_ancestors: [])
571
+ as = interface_ancestors_cache[type_name] and return as
572
+
573
+ entry = env.interface_decls[type_name] or raise "Unknown name for interface_ancestors: #{type_name}"
574
+ params = entry.decl.type_params.each.map(&:name)
575
+ args = Types::Variable.build(params)
576
+ self_ancestor = Definition::Ancestor::Instance.new(name: type_name, args: args, source: nil)
577
+
578
+ RecursiveAncestorError.check!(self_ancestor,
579
+ ancestors: building_ancestors,
580
+ location: entry.decl.location)
581
+ building_ancestors.push self_ancestor
582
+
583
+ one_ancestors = one_interface_ancestors(type_name)
584
+ ancestors = [] #: Array[Definition::Ancestor::t]
585
+
586
+ included_interfaces = one_ancestors.included_interfaces or raise
587
+ included_interfaces.each do |a|
588
+ a.source.is_a?(AST::Members::Include) or raise
589
+ included_ancestors =
590
+ interface_ancestors(a.name, building_ancestors: building_ancestors)
591
+ .apply(a.args, env: env, location: a.source.location)
592
+ included_ancestors.map! {|ancestor| fill_ancestor_source(ancestor, name: a.name, source: a.source) }
593
+ ancestors.unshift(*included_ancestors)
594
+ end
595
+
596
+ ancestors.unshift(self_ancestor)
597
+ building_ancestors.pop
598
+
599
+ interface_ancestors_cache[type_name] = Definition::InstanceAncestors.new(
600
+ type_name: type_name,
601
+ params: params,
602
+ ancestors: ancestors
603
+ )
604
+ end
605
+
606
+ def fill_ancestor_source(ancestor, name:, source:, &block)
607
+ case ancestor
608
+ when Definition::Ancestor::Instance
609
+ if ancestor.name == name && !ancestor.source
610
+ Definition::Ancestor::Instance.new(name: ancestor.name, args: ancestor.args, source: source)
611
+ else
612
+ ancestor
613
+ end
614
+ else
615
+ ancestor
616
+ end
617
+ end
618
+ end
619
+ end
620
+ end