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,845 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class DefinitionBuilder
5
+ attr_reader :env
6
+ attr_reader :ancestor_builder
7
+ attr_reader :method_builder
8
+
9
+ attr_reader :instance_cache
10
+ attr_reader :singleton_cache
11
+ attr_reader :singleton0_cache
12
+ attr_reader :interface_cache
13
+
14
+ def initialize(env:, ancestor_builder: nil, method_builder: nil)
15
+ @env = env
16
+ @ancestor_builder = ancestor_builder || AncestorBuilder.new(env: env)
17
+ @method_builder = method_builder || MethodBuilder.new(env: env)
18
+
19
+ @instance_cache = {}
20
+ @singleton_cache = {}
21
+ @singleton0_cache = {}
22
+ @interface_cache = {}
23
+ end
24
+
25
+ def ensure_namespace!(namespace, location:)
26
+ namespace.ascend do |ns|
27
+ unless ns.empty?
28
+ NoTypeFoundError.check!(ns.to_type_name, env: env, location: location)
29
+ end
30
+ end
31
+ end
32
+
33
+ def define_interface(definition, type_name, subst)
34
+ included_interfaces = ancestor_builder.interface_ancestors(type_name).ancestors #: Array[Definition::Ancestor::Instance]
35
+ included_interfaces = included_interfaces.reject {|ancestor| ancestor.source == nil }
36
+
37
+ interface_methods = interface_methods(included_interfaces)
38
+ methods = method_builder.build_interface(type_name)
39
+
40
+ import_methods(definition, type_name, methods, interface_methods, subst, nil)
41
+ end
42
+
43
+ def build_interface(type_name)
44
+ try_cache(type_name, cache: interface_cache) do
45
+ entry = env.interface_decls[type_name] or raise "Unknown name for build_interface: #{type_name}"
46
+ declaration = entry.decl
47
+ ensure_namespace!(type_name.namespace, location: declaration.location)
48
+
49
+ type_params = declaration.type_params.each.map(&:name)
50
+ type_args = Types::Variable.build(type_params)
51
+ self_type = Types::Interface.new(name: type_name, args: type_args, location: nil)
52
+
53
+ subst = Substitution.build(type_params, type_args)
54
+
55
+ ancestors = ancestor_builder.interface_ancestors(type_name)
56
+ Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
57
+ methods = method_builder.build_interface(type_name)
58
+ one_ancestors = ancestor_builder.one_interface_ancestors(type_name)
59
+ validate_type_params(definition, methods: methods, ancestors: one_ancestors)
60
+
61
+ define_interface(definition, type_name, subst)
62
+ end
63
+ end
64
+ end
65
+
66
+ def tapp_subst(name, args)
67
+ params =
68
+ case
69
+ when name.interface?
70
+ entry = env.interface_decls[name] or raise "Unknown interface name: #{name}"
71
+ entry.decl.type_params
72
+ when name.alias?
73
+ entry = env.type_alias_decls[name] or raise "Unknown alias name: #{name}"
74
+ entry.decl.type_params
75
+ when name.class?
76
+ entry = env.class_decls[name] or raise "Unknown module name: #{name}"
77
+ entry.type_params
78
+ else
79
+ raise
80
+ end
81
+
82
+ AST::TypeParam.application(params, args) || Substitution.new()
83
+ end
84
+
85
+ def define_instance(definition, type_name, subst)
86
+ one_ancestors = ancestor_builder.one_instance_ancestors(type_name)
87
+ methods = method_builder.build_instance(type_name)
88
+
89
+ self_type_methods = one_ancestors.each_self_type.with_object({}) do |self_type, hash| #$ Hash[Symbol, Definition::Method]
90
+ self_type.args.each do |arg|
91
+ validate_type_presence(arg)
92
+ end
93
+
94
+ self_type_defn = self_type.name.interface? ? build_interface(self_type.name) : build_instance(self_type.name)
95
+
96
+ s = subst + tapp_subst(self_type.name, self_type.args)
97
+ self_type_defn.methods.each do |method_name, method_def|
98
+ hash[method_name] = method_def.sub(s)
99
+ end
100
+ end
101
+
102
+ one_ancestors.each_included_module do |mod|
103
+ mod.args.each do |arg|
104
+ validate_type_presence(arg)
105
+ end
106
+
107
+ define_instance(definition, mod.name, subst + tapp_subst(mod.name, mod.args))
108
+ end
109
+
110
+ all_interfaces = one_ancestors.each_included_interface.flat_map do |interface|
111
+ other_interfaces = ancestor_builder.interface_ancestors(interface.name).ancestors #: Array[Definition::Ancestor::Instance]
112
+ other_interfaces = other_interfaces.select {|ancestor| ancestor.source }
113
+ [interface, *other_interfaces]
114
+ end
115
+ interface_methods = interface_methods(all_interfaces)
116
+ import_methods(definition, type_name, methods, interface_methods, subst, self_type_methods)
117
+
118
+ one_ancestors.each_prepended_module do |mod|
119
+ mod.args.each do |arg|
120
+ validate_type_presence(arg)
121
+ end
122
+
123
+ define_instance(definition, mod.name, subst + tapp_subst(mod.name, mod.args))
124
+ end
125
+
126
+ entry = env.class_decls[type_name] or raise "Unknown name for build_instance: #{type_name}"
127
+ args = entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
128
+
129
+ entry.decls.each do |d|
130
+ subst_ = subst + Substitution.build(d.decl.type_params.each.map(&:name), args)
131
+
132
+ d.decl.members.each do |member|
133
+ case member
134
+ when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
135
+ if member.kind == :instance
136
+ ivar_name = case member.ivar_name
137
+ when false
138
+ nil
139
+ else
140
+ member.ivar_name || :"@#{member.name}"
141
+ end
142
+
143
+ if ivar_name
144
+ insert_variable(
145
+ type_name,
146
+ definition.instance_variables,
147
+ name: ivar_name,
148
+ type: member.type.sub(subst_)
149
+ )
150
+ end
151
+ end
152
+
153
+ when AST::Members::InstanceVariable
154
+ InstanceVariableDuplicationError.check!(variables: definition.instance_variables, member: member, type_name: type_name)
155
+ insert_variable(
156
+ type_name,
157
+ definition.instance_variables,
158
+ name: member.name,
159
+ type: member.type.sub(subst_)
160
+ )
161
+
162
+ when AST::Members::ClassVariable
163
+ ClassVariableDuplicationError.check!(variables: definition.class_variables, member: member, type_name: type_name)
164
+ insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
165
+ end
166
+ end
167
+ end
168
+ end
169
+
170
+ def build_instance(type_name)
171
+ type_name = env.normalize_module_name(type_name)
172
+
173
+ try_cache(type_name, cache: instance_cache) do
174
+ entry = env.class_decls[type_name] or raise "Unknown name for build_instance: #{type_name}"
175
+ ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
176
+
177
+ ancestors = ancestor_builder.instance_ancestors(type_name)
178
+ args = entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) }
179
+ self_type = Types::ClassInstance.new(name: type_name, args: args, location: nil)
180
+
181
+ Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
182
+ one_ancestors = ancestor_builder.one_instance_ancestors(type_name)
183
+ methods = method_builder.build_instance(type_name)
184
+
185
+ validate_type_params definition, methods: methods, ancestors: one_ancestors
186
+
187
+ if entry.is_a?(Environment::ClassEntry)
188
+ if super_class = one_ancestors.super_class
189
+ super_class.is_a?(Definition::Ancestor::Instance) or raise
190
+
191
+ build_instance(super_class.name).tap do |defn|
192
+ unless super_class.args.empty?
193
+ super_class.args.each do |arg|
194
+ validate_type_presence(arg)
195
+ end
196
+
197
+ subst = tapp_subst(super_class.name, super_class.args)
198
+ defn = defn.sub(subst)
199
+ end
200
+
201
+ definition.methods.merge!(defn.methods)
202
+ definition.instance_variables.merge!(defn.instance_variables)
203
+ definition.class_variables.merge!(defn.class_variables)
204
+ end
205
+ end
206
+ end
207
+
208
+ if entry.is_a?(Environment::ModuleEntry)
209
+ if self_types = one_ancestors.self_types
210
+ self_types.each do |ans|
211
+ ans.args.each do |arg|
212
+ validate_type_presence(arg)
213
+ end
214
+
215
+ subst = tapp_subst(ans.name, ans.args)
216
+ if ans.name.interface?
217
+ define_interface(definition, ans.name, subst)
218
+ else
219
+ define_instance(definition, ans.name, subst)
220
+ end
221
+ end
222
+ end
223
+ end
224
+
225
+ define_instance(definition, type_name, Substitution.new)
226
+ end
227
+ end
228
+ end
229
+
230
+ # Builds a definition for singleton without .new method.
231
+ #
232
+ def build_singleton0(type_name)
233
+ try_cache type_name, cache: singleton0_cache do
234
+ entry = env.class_decls[type_name] or raise "Unknown name for build_singleton0: #{type_name}"
235
+ ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
236
+
237
+ ancestors = ancestor_builder.singleton_ancestors(type_name)
238
+ self_type = Types::ClassSingleton.new(name: type_name, location: nil)
239
+
240
+ Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
241
+ one_ancestors = ancestor_builder.one_singleton_ancestors(type_name)
242
+ methods = method_builder.build_singleton(type_name)
243
+
244
+ if super_class = one_ancestors.super_class
245
+ case super_class
246
+ when Definition::Ancestor::Instance
247
+ defn = build_instance(super_class.name)
248
+ when Definition::Ancestor::Singleton
249
+ defn = build_singleton0(super_class.name)
250
+ end
251
+
252
+ definition.methods.merge!(defn.methods)
253
+ definition.instance_variables.merge!(defn.instance_variables)
254
+ definition.class_variables.merge!(defn.class_variables)
255
+ end
256
+
257
+ one_ancestors.each_extended_module do |mod|
258
+ mod.args.each do |arg|
259
+ validate_type_presence(arg)
260
+ end
261
+
262
+ subst = tapp_subst(mod.name, mod.args)
263
+ define_instance(definition, mod.name, subst)
264
+ end
265
+
266
+ all_interfaces = one_ancestors.each_extended_interface.flat_map do |interface|
267
+ other_interfaces = ancestor_builder.interface_ancestors(interface.name).ancestors #: Array[Definition::Ancestor::Instance]
268
+ other_interfaces = other_interfaces.select {|ancestor| ancestor.source }
269
+ [interface, *other_interfaces]
270
+ end
271
+ interface_methods = interface_methods(all_interfaces)
272
+ import_methods(definition, type_name, methods, interface_methods, Substitution.new, nil)
273
+
274
+ entry.decls.each do |d|
275
+ d.decl.members.each do |member|
276
+ case member
277
+ when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
278
+ if member.kind == :singleton
279
+ ivar_name = case member.ivar_name
280
+ when false
281
+ nil
282
+ else
283
+ member.ivar_name || :"@#{member.name}"
284
+ end
285
+
286
+ if ivar_name
287
+ insert_variable(type_name, definition.instance_variables, name: ivar_name, type: member.type)
288
+ end
289
+ end
290
+
291
+ when AST::Members::ClassInstanceVariable
292
+ ClassInstanceVariableDuplicationError.check!(variables: definition.instance_variables, member: member, type_name: type_name)
293
+ insert_variable(type_name, definition.instance_variables, name: member.name, type: member.type)
294
+
295
+ when AST::Members::ClassVariable
296
+ ClassVariableDuplicationError.check!(variables: definition.class_variables, member: member, type_name: type_name)
297
+ insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
298
+ end
299
+ end
300
+ end
301
+ end
302
+ end
303
+ end
304
+
305
+ def build_singleton(type_name)
306
+ type_name = env.normalize_module_name(type_name)
307
+
308
+ try_cache type_name, cache: singleton_cache do
309
+ entry = env.class_decls[type_name] or raise "Unknown name for build_singleton: #{type_name}"
310
+ ensure_namespace!(type_name.namespace, location: entry.decls[0].decl.location)
311
+
312
+ ancestors = ancestor_builder.singleton_ancestors(type_name)
313
+ self_type = Types::ClassSingleton.new(name: type_name, location: nil)
314
+
315
+ Definition.new(type_name: type_name, entry: entry, self_type: self_type, ancestors: ancestors).tap do |definition|
316
+ definition0 = build_singleton0(type_name)
317
+ definition.methods.merge!(definition0.methods)
318
+ definition.instance_variables.merge!(definition0.instance_variables)
319
+ definition.class_variables.merge!(definition0.class_variables)
320
+
321
+ if entry.is_a?(Environment::ClassEntry)
322
+ new_method = definition.methods[:new]
323
+
324
+ if new_method.defs.all? {|d| d.defined_in == BuiltinNames::Class.name }
325
+ # The method is _untyped new_.
326
+
327
+ alias_methods = definition.methods.each.with_object([]) do |entry, array|
328
+ # @type var method: Definition::Method?
329
+ name, method = entry
330
+ while method
331
+ if method.alias_of == new_method
332
+ array << name
333
+ break
334
+ end
335
+ method = method.alias_of
336
+ end
337
+ end
338
+
339
+ instance = build_instance(type_name)
340
+ initialize = instance.methods[:initialize]
341
+
342
+ if initialize
343
+ class_params = entry.type_params
344
+
345
+ # Inject a virtual _typed new_.
346
+ initialize_defs = initialize.defs
347
+ typed_new = Definition::Method.new(
348
+ super_method: new_method,
349
+ defs: initialize_defs.map do |initialize_def|
350
+ method_type = initialize_def.type
351
+
352
+ class_type_param_vars = Set.new(class_params.map(&:name))
353
+ method_type_param_vars = Set.new(method_type.type_params.map(&:name))
354
+
355
+ if class_type_param_vars.intersect?(method_type_param_vars)
356
+ new_method_param_names = method_type.type_params.map do |method_param|
357
+ if class_type_param_vars.include?(method_param.name)
358
+ Types::Variable.fresh(method_param.name).name
359
+ else
360
+ method_param.name
361
+ end
362
+ end
363
+
364
+ sub = Substitution.build(
365
+ method_type.type_params.map(&:name),
366
+ Types::Variable.build(new_method_param_names)
367
+ )
368
+
369
+ method_params = class_params + AST::TypeParam.rename(method_type.type_params, new_names: new_method_param_names)
370
+ method_type = method_type
371
+ .update(type_params: [])
372
+ .sub(sub)
373
+ .update(type_params: method_params)
374
+ else
375
+ method_type = method_type
376
+ .update(type_params: class_params + method_type.type_params)
377
+ end
378
+
379
+ method_type = method_type.update(
380
+ type: method_type.type.with_return_type(
381
+ Types::ClassInstance.new(
382
+ name: type_name,
383
+ args: entry.type_params.map {|param| Types::Variable.new(name: param.name, location: param.location) },
384
+ location: nil
385
+ )
386
+ )
387
+ )
388
+
389
+ Definition::Method::TypeDef.new(
390
+ type: method_type,
391
+ member: initialize_def.member,
392
+ defined_in: initialize_def.defined_in,
393
+ implemented_in: initialize_def.implemented_in,
394
+ overload_annotations: initialize_def.overload_annotations
395
+ )
396
+ end,
397
+ accessibility: :public,
398
+ alias_of: nil
399
+ )
400
+
401
+ definition.methods[:new] = typed_new
402
+
403
+ alias_methods.each do |alias_name|
404
+ definition.methods[alias_name] = definition.methods[alias_name].update(
405
+ alias_of: typed_new,
406
+ defs: typed_new.defs
407
+ )
408
+ end
409
+ end
410
+ end
411
+ end
412
+ end
413
+ end
414
+ end
415
+
416
+ def interface_methods(interface_ancestors)
417
+ interface_methods = {} #: interface_methods
418
+
419
+ interface_ancestors.each do |mod|
420
+ source =
421
+ case mod.source
422
+ when AST::Members::Include, AST::Members::Extend
423
+ mod.source
424
+ else
425
+ raise "Interface mixin must be include/extend: #{mod.source.inspect}"
426
+ end
427
+
428
+ methods = method_builder.build_interface(mod.name)
429
+
430
+ interface_methods[mod] = [methods, source]
431
+ end
432
+
433
+ interface_methods
434
+ end
435
+
436
+ def validate_params_with(type_params, result:)
437
+ type_params.each do |param|
438
+ unless param.unchecked?
439
+ unless result.compatible?(param.name, with_annotation: param.variance)
440
+ yield param
441
+ end
442
+ end
443
+ end
444
+ end
445
+
446
+ def source_location(source, decl)
447
+ case source
448
+ when nil
449
+ decl.location
450
+ when :super
451
+ case decl
452
+ when AST::Declarations::Class
453
+ decl.super_class&.location
454
+ end
455
+ else
456
+ source.location
457
+ end
458
+ end
459
+
460
+ def validate_type_params(definition, ancestors:, methods:)
461
+ type_params = definition.type_params_decl
462
+
463
+ calculator = VarianceCalculator.new(builder: self)
464
+ param_names = type_params.each.map(&:name)
465
+
466
+ ancestors.each_ancestor do |ancestor|
467
+ case ancestor
468
+ when Definition::Ancestor::Instance
469
+ result = calculator.in_inherit(name: ancestor.name, args: ancestor.args, variables: param_names)
470
+ validate_params_with(type_params, result: result) do |param|
471
+ decl = case entry = definition.entry
472
+ when Environment::ModuleEntry, Environment::ClassEntry
473
+ entry.primary.decl
474
+ when Environment::SingleEntry
475
+ entry.decl
476
+ end
477
+
478
+ raise InvalidVarianceAnnotationError.new(
479
+ type_name: definition.type_name,
480
+ param: param,
481
+ location: source_location(ancestor.source, decl)
482
+ )
483
+ end
484
+ end
485
+ end
486
+
487
+ methods.each do |defn|
488
+ next if defn.name == :initialize
489
+
490
+ method_types = case original = defn.original
491
+ when AST::Members::MethodDefinition
492
+ original.overloads.map(&:method_type)
493
+ when AST::Members::AttrWriter, AST::Members::AttrReader, AST::Members::AttrAccessor
494
+ if defn.name.to_s.end_with?("=")
495
+ [
496
+ MethodType.new(
497
+ type_params: [],
498
+ type: Types::Function.empty(original.type).update(
499
+ required_positionals: [
500
+ Types::Function::Param.new(type: original.type, name: original.name)
501
+ ]
502
+ ),
503
+ block: nil,
504
+ location: original.location
505
+ )
506
+ ]
507
+ else
508
+ [
509
+ MethodType.new(
510
+ type_params: [],
511
+ type: Types::Function.empty(original.type),
512
+ block: nil,
513
+ location: original.location
514
+ )
515
+ ]
516
+ end
517
+ when AST::Members::Alias
518
+ nil
519
+ when nil
520
+ nil
521
+ end
522
+
523
+ if method_types
524
+ method_types.each do |method_type|
525
+ merged_params = type_params
526
+ .reject {|param| method_type.type_param_names.include?(param.name) }
527
+ .concat(method_type.type_params)
528
+
529
+ result = calculator.in_method_type(method_type: method_type, variables: param_names)
530
+ validate_params_with(merged_params, result: result) do |param|
531
+ raise InvalidVarianceAnnotationError.new(
532
+ type_name: definition.type_name,
533
+ param: param,
534
+ location: method_type.location
535
+ )
536
+ end
537
+ end
538
+ end
539
+ end
540
+ end
541
+
542
+ def insert_variable(type_name, variables, name:, type:)
543
+ variables[name] = Definition::Variable.new(
544
+ parent_variable: variables[name],
545
+ type: type,
546
+ declared_in: type_name
547
+ )
548
+ end
549
+
550
+ def import_methods(definition, module_name, module_methods, interfaces_methods, subst, self_type_methods)
551
+ new_methods = {} #: Hash[Symbol, Definition::Method]
552
+ interface_method_duplicates = Set[] #: Set[Symbol]
553
+
554
+ interfaces_methods.each do |interface, (methods, member)|
555
+ unless interface.args.empty?
556
+ methods.type.is_a?(Types::Interface) or raise
557
+
558
+ interface.args.each do |arg|
559
+ validate_type_presence(arg)
560
+ end
561
+
562
+ type_params = env.interface_decls.fetch(interface.name).decl.type_params
563
+ if s = AST::TypeParam.application(type_params, interface.args)
564
+ subst_ = subst + s
565
+ else
566
+ subst_ = subst
567
+ end
568
+ else
569
+ subst_ = subst
570
+ end
571
+
572
+ methods.each do |method|
573
+ if interface_method_duplicates.include?(method.name)
574
+ member.is_a?(AST::Members::Include) || member.is_a?(AST::Members::Extend) or raise
575
+
576
+ raise DuplicatedInterfaceMethodDefinitionError.new(
577
+ type: definition.self_type,
578
+ method_name: method.name,
579
+ member: member
580
+ )
581
+ end
582
+
583
+ interface_method_duplicates << method.name
584
+ define_method(
585
+ new_methods,
586
+ definition,
587
+ method,
588
+ subst_,
589
+ nil,
590
+ defined_in: interface.name,
591
+ implemented_in: module_name
592
+ )
593
+ end
594
+ end
595
+
596
+ module_methods.each do |method|
597
+ define_method(
598
+ new_methods,
599
+ definition,
600
+ method,
601
+ subst,
602
+ self_type_methods,
603
+ defined_in: module_name,
604
+ implemented_in: module_name.interface? ? nil : module_name
605
+ )
606
+ end
607
+
608
+ definition.methods.merge!(new_methods)
609
+ end
610
+
611
+ def define_method(methods, definition, method, subst, self_type_methods, defined_in:, implemented_in: defined_in)
612
+ existing_method = methods[method.name] || definition.methods[method.name]
613
+
614
+ case original = method.original
615
+ when AST::Members::Alias
616
+ original_method = methods[original.old_name] || definition.methods[original.old_name] || self_type_methods&.fetch(original.old_name, nil)
617
+
618
+ unless original_method
619
+ raise UnknownMethodAliasError.new(
620
+ type_name: definition.type_name,
621
+ original_name: original.old_name,
622
+ aliased_name: original.new_name,
623
+ location: original.location
624
+ )
625
+ end
626
+
627
+ method_definition = Definition::Method.new(
628
+ super_method: existing_method,
629
+ defs: original_method.defs.map do |defn|
630
+ defn.update(defined_in: defined_in, implemented_in: implemented_in)
631
+ end,
632
+ accessibility: original_method.accessibility,
633
+ alias_of: original_method
634
+ )
635
+ when AST::Members::MethodDefinition
636
+ if duplicated_method = methods[method.name]
637
+ raise DuplicatedMethodDefinitionError.new(
638
+ type: definition.self_type,
639
+ method_name: method.name,
640
+ members: [original, *duplicated_method.members]
641
+ )
642
+ end
643
+
644
+ defs = original.overloads.map do |overload|
645
+ Definition::Method::TypeDef.new(
646
+ type: subst.empty? ? overload.method_type : overload.method_type.sub(subst),
647
+ member: original,
648
+ defined_in: defined_in,
649
+ implemented_in: implemented_in,
650
+ overload_annotations: overload.annotations
651
+ )
652
+ end
653
+
654
+ # @type var accessibility: RBS::Definition::accessibility
655
+ accessibility =
656
+ if original.instance? && [:initialize, :initialize_copy, :initialize_clone, :initialize_dup, :respond_to_missing?].include?(method.name)
657
+ :private
658
+ else
659
+ method.accessibility
660
+ end
661
+ # Skip setting up `super_method` if `implemented_in` is `nil`, that means the type doesn't have implementation.
662
+ # This typically happens if the type is an interface.
663
+ if implemented_in
664
+ super_method = existing_method
665
+ end
666
+
667
+ method_definition = Definition::Method.new(
668
+ super_method: super_method,
669
+ defs: defs,
670
+ accessibility: accessibility,
671
+ alias_of: nil
672
+ )
673
+ when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
674
+ if duplicated_method = methods[method.name]
675
+ raise DuplicatedMethodDefinitionError.new(
676
+ type: definition.self_type,
677
+ method_name: method.name,
678
+ members: [*duplicated_method.members, original]
679
+ )
680
+ end
681
+
682
+ attr_type = original.type.sub(subst)
683
+ method_type =
684
+ if method.name.to_s.end_with?("=")
685
+ # setter
686
+ MethodType.new(
687
+ type_params: [],
688
+ type: Types::Function.empty(attr_type).update(
689
+ required_positionals: [
690
+ Types::Function::Param.new(type: attr_type, name: original.name)
691
+ ]
692
+ ),
693
+ block: nil,
694
+ location: original.location
695
+ )
696
+ else
697
+ # getter
698
+ MethodType.new(
699
+ type_params: [],
700
+ type: Types::Function.empty(attr_type),
701
+ block: nil,
702
+ location: original.location
703
+ )
704
+ end
705
+
706
+ if implemented_in
707
+ super_method = existing_method
708
+ end
709
+
710
+ method_definition = Definition::Method.new(
711
+ super_method: super_method,
712
+ defs: [
713
+ Definition::Method::TypeDef.new(
714
+ type: method_type,
715
+ member: original,
716
+ defined_in: defined_in,
717
+ implemented_in: implemented_in
718
+ )
719
+ ],
720
+ accessibility: method.accessibility,
721
+ alias_of: nil
722
+ )
723
+ when nil
724
+ # Overloading method definition only
725
+
726
+ case
727
+ when methods.key?(method.name)
728
+ # The method is defined in an interface
729
+ super_method = methods[method.name].super_method
730
+ when definition.methods.key?(method.name)
731
+ # The method is defined in the super class
732
+ super_method = existing_method
733
+ else
734
+ # Cannot find any non-overloading method
735
+ raise InvalidOverloadMethodError.new(
736
+ type_name: definition.type_name,
737
+ method_name: method.name,
738
+ kind: :instance,
739
+ members: method.overloads
740
+ )
741
+ end
742
+
743
+ method_definition = Definition::Method.new(
744
+ super_method: super_method,
745
+ defs: existing_method.defs.map do |defn|
746
+ defn.update(implemented_in: implemented_in)
747
+ end,
748
+ accessibility: existing_method.accessibility,
749
+ alias_of: existing_method.alias_of
750
+ )
751
+ end
752
+
753
+ method.overloads.each do |overloading_def|
754
+ overloading_def.overloads.reverse_each do |overload|
755
+ type_def = Definition::Method::TypeDef.new(
756
+ type: subst.empty? ? overload.method_type : overload.method_type.sub(subst),
757
+ member: overloading_def,
758
+ defined_in: defined_in,
759
+ implemented_in: implemented_in,
760
+ overload_annotations: overload.annotations
761
+ )
762
+
763
+ method_definition.defs.unshift(type_def)
764
+ end
765
+ end
766
+
767
+ methods[method.name] = method_definition
768
+ end
769
+
770
+ def try_cache(type_name, cache:)
771
+ cache[type_name] ||= yield
772
+ end
773
+
774
+ def expand_alias(type_name)
775
+ expand_alias2(type_name, [])
776
+ end
777
+
778
+ def expand_alias1(type_name)
779
+ type_name = env.normalize_type_name(type_name)
780
+ entry = env.type_alias_decls[type_name] or raise "Unknown alias name: #{type_name}"
781
+ as = entry.decl.type_params.each.map { Types::Bases::Any.new(location: nil) }
782
+ expand_alias2(type_name, as)
783
+ end
784
+
785
+ def expand_alias2(type_name, args)
786
+ type_name = env.normalize_type_name(type_name)
787
+ entry = env.type_alias_decls[type_name] or raise "Unknown alias name: #{type_name}"
788
+
789
+ ensure_namespace!(type_name.namespace, location: entry.decl.location)
790
+ params = entry.decl.type_params.each.map(&:name)
791
+
792
+ unless params.size == args.size
793
+ as = "[#{args.join(", ")}]" unless args.empty?
794
+ ps = "[#{params.join(", ")}]" unless params.empty?
795
+
796
+ raise "Invalid type application: type = #{type_name}#{as}, decl = #{type_name}#{ps}"
797
+ end
798
+
799
+ type = entry.decl.type
800
+
801
+ unless params.empty?
802
+ subst = Substitution.build(params, args)
803
+ type = type.sub(subst)
804
+ end
805
+
806
+ type
807
+ end
808
+
809
+ def update(env:, except:, ancestor_builder:)
810
+ method_builder = self.method_builder.update(env: env, except: except)
811
+
812
+ DefinitionBuilder.new(env: env, ancestor_builder: ancestor_builder, method_builder: method_builder).tap do |builder|
813
+ builder.instance_cache.merge!(instance_cache)
814
+ builder.singleton_cache.merge!(singleton_cache)
815
+ builder.singleton0_cache.merge!(singleton0_cache)
816
+ builder.interface_cache.merge!(interface_cache)
817
+
818
+ except.each do |name|
819
+ builder.instance_cache.delete(name)
820
+ builder.singleton_cache.delete(name)
821
+ builder.singleton0_cache.delete(name)
822
+ builder.interface_cache.delete(name)
823
+ end
824
+ end
825
+ end
826
+
827
+ def validate_type_presence(type)
828
+ case type
829
+ when Types::ClassInstance, Types::ClassSingleton, Types::Interface, Types::Alias
830
+ validate_type_name(type.name, type.location)
831
+ end
832
+
833
+ type.each_type do |type|
834
+ validate_type_presence(type)
835
+ end
836
+ end
837
+
838
+ def validate_type_name(name, location)
839
+ name = name.absolute! unless name.absolute?
840
+ return if env.type_name?(env.normalize_type_name(name))
841
+
842
+ raise NoTypeFoundError.new(type_name: name, location: location)
843
+ end
844
+ end
845
+ end