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,829 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Environment
5
+ attr_reader :declarations
6
+
7
+ attr_reader :class_decls
8
+ attr_reader :interface_decls
9
+ attr_reader :type_alias_decls
10
+ attr_reader :constant_decls
11
+ attr_reader :global_decls
12
+ attr_reader :class_alias_decls
13
+
14
+ attr_reader :signatures
15
+
16
+ module ContextUtil
17
+ def calculate_context(decls)
18
+ decls.inject(nil) do |context, decl| #$ Resolver::context
19
+ if (_, last = context)
20
+ last or raise
21
+ [context, last + decl.name]
22
+ else
23
+ [nil, decl.name.absolute!]
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ class MultiEntry
30
+ D = _ = Struct.new(:decl, :outer, keyword_init: true) do
31
+ # @implements D[M]
32
+
33
+ include ContextUtil
34
+
35
+ def context
36
+ @context ||= calculate_context(outer + [decl])
37
+ end
38
+ end
39
+
40
+ attr_reader :name
41
+ attr_reader :decls
42
+
43
+ def initialize(name:)
44
+ @name = name
45
+ @decls = []
46
+ end
47
+
48
+ def insert(decl:, outer:)
49
+ decls << D.new(decl: decl, outer: outer)
50
+ @primary = nil
51
+ end
52
+
53
+ def validate_type_params
54
+ unless decls.empty?
55
+ hd_decl, *tl_decls = decls
56
+ raise unless hd_decl
57
+
58
+ hd_params = hd_decl.decl.type_params
59
+
60
+ tl_decls.each do |tl_decl|
61
+ tl_params = tl_decl.decl.type_params
62
+
63
+ unless compatible_params?(hd_params, tl_params)
64
+ raise GenericParameterMismatchError.new(name: name, decl: _ = tl_decl.decl)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ def compatible_params?(ps1, ps2)
71
+ if ps1.size == ps2.size
72
+ ps1 == AST::TypeParam.rename(ps2, new_names: ps1.map(&:name))
73
+ end
74
+ end
75
+
76
+ def type_params
77
+ primary.decl.type_params
78
+ end
79
+
80
+ def primary
81
+ raise "Not implemented"
82
+ end
83
+ end
84
+
85
+ class ModuleEntry < MultiEntry
86
+ def self_types
87
+ decls.flat_map do |d|
88
+ d.decl.self_types
89
+ end.uniq
90
+ end
91
+
92
+ def primary
93
+ @primary ||= begin
94
+ validate_type_params
95
+ decls.first or raise("decls cannot be empty")
96
+ end
97
+ end
98
+ end
99
+
100
+ class ClassEntry < MultiEntry
101
+ def primary
102
+ @primary ||= begin
103
+ validate_type_params
104
+ decls.find {|d| d.decl.super_class } || decls.first or raise("decls cannot be empty")
105
+ end
106
+ end
107
+ end
108
+
109
+ class SingleEntry
110
+ attr_reader :name
111
+ attr_reader :outer
112
+ attr_reader :decl
113
+
114
+ def initialize(name:, decl:, outer:)
115
+ @name = name
116
+ @decl = decl
117
+ @outer = outer
118
+ end
119
+
120
+ include ContextUtil
121
+
122
+ def context
123
+ @context ||= calculate_context(outer)
124
+ end
125
+ end
126
+
127
+ class ModuleAliasEntry < SingleEntry
128
+ end
129
+
130
+ class ClassAliasEntry < SingleEntry
131
+ end
132
+
133
+ class InterfaceEntry < SingleEntry
134
+ end
135
+
136
+ class TypeAliasEntry < SingleEntry
137
+ end
138
+
139
+ class ConstantEntry < SingleEntry
140
+ end
141
+
142
+ class GlobalEntry < SingleEntry
143
+ end
144
+
145
+ def initialize
146
+ @signatures = {}
147
+ @declarations = []
148
+
149
+ @class_decls = {}
150
+ @interface_decls = {}
151
+ @type_alias_decls = {}
152
+ @constant_decls = {}
153
+ @global_decls = {}
154
+ @class_alias_decls = {}
155
+ @normalize_module_name_cache = {}
156
+ end
157
+
158
+ def initialize_copy(other)
159
+ @signatures = other.signatures.dup
160
+ @declarations = other.declarations.dup
161
+
162
+ @class_decls = other.class_decls.dup
163
+ @interface_decls = other.interface_decls.dup
164
+ @type_alias_decls = other.type_alias_decls.dup
165
+ @constant_decls = other.constant_decls.dup
166
+ @global_decls = other.global_decls.dup
167
+ @class_alias_decls = other.class_alias_decls.dup
168
+ end
169
+
170
+ def self.from_loader(loader)
171
+ self.new.tap do |env|
172
+ loader.load(env: env)
173
+ end
174
+ end
175
+
176
+ def interface_name?(name)
177
+ interface_decls.key?(name)
178
+ end
179
+
180
+ def type_alias_name?(name)
181
+ type_alias_decls.key?(name)
182
+ end
183
+
184
+ def module_name?(name)
185
+ class_decls.key?(name) || class_alias_decls.key?(name)
186
+ end
187
+
188
+ def type_name?(name)
189
+ interface_name?(name) ||
190
+ type_alias_name?(name) ||
191
+ module_name?(name)
192
+ end
193
+
194
+ def constant_name?(name)
195
+ constant_decl?(name) || module_name?(name)
196
+ end
197
+
198
+ def constant_decl?(name)
199
+ constant_decls.key?(name)
200
+ end
201
+
202
+ def class_decl?(name)
203
+ class_decls[name].is_a?(ClassEntry)
204
+ end
205
+
206
+ def module_decl?(name)
207
+ class_decls[name].is_a?(ModuleEntry)
208
+ end
209
+
210
+ def module_alias?(name)
211
+ if decl = class_alias_decls[name]
212
+ decl.decl.is_a?(AST::Declarations::ModuleAlias)
213
+ else
214
+ false
215
+ end
216
+ end
217
+
218
+ def class_alias?(name)
219
+ if decl = class_alias_decls[name]
220
+ decl.decl.is_a?(AST::Declarations::ClassAlias)
221
+ else
222
+ false
223
+ end
224
+ end
225
+
226
+ def class_entry(type_name)
227
+ case
228
+ when (class_entry = class_decls[type_name]).is_a?(ClassEntry)
229
+ class_entry
230
+ when (class_alias = class_alias_decls[type_name]).is_a?(ClassAliasEntry)
231
+ class_alias
232
+ end
233
+ end
234
+
235
+ def module_entry(type_name)
236
+ case
237
+ when (module_entry = class_decls[type_name]).is_a?(ModuleEntry)
238
+ module_entry
239
+ when (module_alias = class_alias_decls[type_name]).is_a?(ModuleAliasEntry)
240
+ module_alias
241
+ end
242
+ end
243
+
244
+ def normalized_class_entry(type_name)
245
+ if name = normalize_module_name?(type_name)
246
+ case entry = class_entry(name)
247
+ when ClassEntry, nil
248
+ entry
249
+ when ClassAliasEntry
250
+ raise
251
+ end
252
+ end
253
+ end
254
+
255
+ def normalized_module_entry(type_name)
256
+ if name = normalize_module_name?(type_name)
257
+ case entry = module_entry(name)
258
+ when ModuleEntry, nil
259
+ entry
260
+ when ModuleAliasEntry
261
+ raise
262
+ end
263
+ end
264
+ end
265
+
266
+ def module_class_entry(type_name)
267
+ class_entry(type_name) || module_entry(type_name)
268
+ end
269
+
270
+ def normalized_module_class_entry(type_name)
271
+ normalized_class_entry(type_name) || normalized_module_entry(type_name)
272
+ end
273
+
274
+ def constant_entry(type_name)
275
+ class_entry(type_name) || module_entry(type_name) || constant_decls[type_name]
276
+ end
277
+
278
+ def normalize_type_name?(name)
279
+ return normalize_module_name?(name) if name.class?
280
+
281
+ type_name =
282
+ unless name.namespace.empty?
283
+ parent = name.namespace.to_type_name
284
+ parent = normalize_module_name?(parent)
285
+ return parent unless parent
286
+
287
+ TypeName.new(namespace: parent.to_namespace, name: name.name)
288
+ else
289
+ name
290
+ end
291
+
292
+ if type_name?(type_name)
293
+ type_name
294
+ end
295
+ end
296
+
297
+ def normalize_type_name!(name)
298
+ result = normalize_type_name?(name)
299
+
300
+ case result
301
+ when TypeName
302
+ result
303
+ when false
304
+ raise "Type name `#{name}` cannot be normalized because it's a cyclic definition"
305
+ when nil
306
+ raise "Type name `#{name}` cannot be normalized because of unknown type name in the path"
307
+ end
308
+ end
309
+
310
+ def normalized_type_name?(type_name)
311
+ case
312
+ when type_name.interface?
313
+ interface_decls.key?(type_name)
314
+ when type_name.class?
315
+ class_decls.key?(type_name)
316
+ when type_name.alias?
317
+ type_alias_decls.key?(type_name)
318
+ else
319
+ false
320
+ end
321
+ end
322
+
323
+ def normalized_type_name!(name)
324
+ normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}`, which is normalized to `#{normalize_type_name?(name)}`"
325
+ name
326
+ end
327
+
328
+ def normalize_type_name(name)
329
+ normalize_type_name?(name) || name
330
+ end
331
+
332
+ def normalize_module_name(name)
333
+ normalize_module_name?(name) or name
334
+ end
335
+
336
+ def normalize_module_name?(name)
337
+ raise "Class/module name is expected: #{name}" unless name.class?
338
+ name = name.absolute! unless name.absolute?
339
+
340
+ if @normalize_module_name_cache.key?(name)
341
+ return @normalize_module_name_cache[name]
342
+ end
343
+
344
+ unless name.namespace.empty?
345
+ parent = name.namespace.to_type_name
346
+ if normalized_parent = normalize_module_name?(parent)
347
+ type_name = TypeName.new(namespace: normalized_parent.to_namespace, name: name.name)
348
+ else
349
+ @normalize_module_name_cache[name] = nil
350
+ return
351
+ end
352
+ else
353
+ type_name = name
354
+ end
355
+
356
+ @normalize_module_name_cache[name] = false
357
+
358
+ entry = constant_entry(type_name)
359
+
360
+ normalized_type_name =
361
+ case entry
362
+ when ClassEntry, ModuleEntry
363
+ type_name
364
+ when ClassAliasEntry, ModuleAliasEntry
365
+ normalize_module_name?(entry.decl.old_name)
366
+ else
367
+ nil
368
+ end
369
+
370
+ @normalize_module_name_cache[name] = normalized_type_name
371
+ end
372
+
373
+ def insert_decl(decl, outer:, namespace:)
374
+ case decl
375
+ when AST::Declarations::Class, AST::Declarations::Module
376
+ name = decl.name.with_prefix(namespace)
377
+
378
+ if cdecl = constant_entry(name)
379
+ if cdecl.is_a?(ConstantEntry) || cdecl.is_a?(ModuleAliasEntry) || cdecl.is_a?(ClassAliasEntry)
380
+ raise DuplicatedDeclarationError.new(name, decl, cdecl.decl)
381
+ end
382
+ end
383
+
384
+ unless class_decls.key?(name)
385
+ case decl
386
+ when AST::Declarations::Class
387
+ class_decls[name] ||= ClassEntry.new(name: name)
388
+ when AST::Declarations::Module
389
+ class_decls[name] ||= ModuleEntry.new(name: name)
390
+ end
391
+ end
392
+
393
+ existing_entry = class_decls[name]
394
+
395
+ case
396
+ when decl.is_a?(AST::Declarations::Module) && existing_entry.is_a?(ModuleEntry)
397
+ existing_entry.insert(decl: decl, outer: outer)
398
+ when decl.is_a?(AST::Declarations::Class) && existing_entry.is_a?(ClassEntry)
399
+ existing_entry.insert(decl: decl, outer: outer)
400
+ else
401
+ raise DuplicatedDeclarationError.new(name, decl, existing_entry.decls[0].decl)
402
+ end
403
+
404
+ prefix = outer + [decl]
405
+ ns = name.to_namespace
406
+ decl.each_decl do |d|
407
+ insert_decl(d, outer: prefix, namespace: ns)
408
+ end
409
+
410
+ when AST::Declarations::Interface
411
+ name = decl.name.with_prefix(namespace)
412
+
413
+ if interface_entry = interface_decls[name]
414
+ raise DuplicatedDeclarationError.new(name, decl, interface_entry.decl)
415
+ end
416
+
417
+ interface_decls[name] = InterfaceEntry.new(name: name, decl: decl, outer: outer)
418
+
419
+ when AST::Declarations::TypeAlias
420
+ name = decl.name.with_prefix(namespace)
421
+
422
+ if entry = type_alias_decls[name]
423
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
424
+ end
425
+
426
+ type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl, outer: outer)
427
+
428
+ when AST::Declarations::Constant
429
+ name = decl.name.with_prefix(namespace)
430
+
431
+ if entry = constant_entry(name)
432
+ case entry
433
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
434
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
435
+ when ClassEntry, ModuleEntry
436
+ raise DuplicatedDeclarationError.new(name, decl, *entry.decls.map(&:decl))
437
+ end
438
+ end
439
+
440
+ constant_decls[name] = ConstantEntry.new(name: name, decl: decl, outer: outer)
441
+
442
+ when AST::Declarations::Global
443
+ if entry = global_decls[decl.name]
444
+ raise DuplicatedDeclarationError.new(decl.name, decl, entry.decl)
445
+ end
446
+
447
+ global_decls[decl.name] = GlobalEntry.new(name: decl.name, decl: decl, outer: outer)
448
+
449
+ when AST::Declarations::ClassAlias, AST::Declarations::ModuleAlias
450
+ name = decl.new_name.with_prefix(namespace)
451
+
452
+ if entry = constant_entry(name)
453
+ case entry
454
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
455
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
456
+ when ClassEntry, ModuleEntry
457
+ raise DuplicatedDeclarationError.new(name, decl, *entry.decls.map(&:decl))
458
+ end
459
+ end
460
+
461
+ case decl
462
+ when AST::Declarations::ClassAlias
463
+ class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, outer: outer)
464
+ when AST::Declarations::ModuleAlias
465
+ class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, outer: outer)
466
+ end
467
+ end
468
+ end
469
+
470
+ def <<(decl)
471
+ declarations << decl
472
+ insert_decl(decl, outer: [], namespace: Namespace.root)
473
+ self
474
+ end
475
+
476
+ def add_signature(buffer:, directives:, decls:)
477
+ signatures[buffer] = [directives, decls]
478
+ decls.each do |decl|
479
+ self << decl
480
+ end
481
+ end
482
+
483
+ def validate_type_params
484
+ class_decls.each_value do |decl|
485
+ decl.primary
486
+ end
487
+ end
488
+
489
+ def resolve_signature(resolver, table, dirs, decls, only: nil)
490
+ map = UseMap.new(table: table)
491
+ dirs.each do |dir|
492
+ case dir
493
+ when AST::Directives::Use
494
+ dir.clauses.each do |clause|
495
+ map.build_map(clause)
496
+ end
497
+ end
498
+ end
499
+
500
+ decls = decls.map do |decl|
501
+ if only && !only.member?(decl)
502
+ decl
503
+ else
504
+ resolve_declaration(resolver, map, decl, outer: [], prefix: Namespace.root)
505
+ end
506
+ end
507
+
508
+ [dirs, decls]
509
+ end
510
+
511
+ def resolve_type_names(only: nil)
512
+ resolver = Resolver::TypeNameResolver.new(self)
513
+ env = Environment.new
514
+
515
+ table = UseMap::Table.new()
516
+ table.known_types.merge(class_decls.keys)
517
+ table.known_types.merge(class_alias_decls.keys)
518
+ table.known_types.merge(type_alias_decls.keys)
519
+ table.known_types.merge(interface_decls.keys)
520
+ table.compute_children
521
+
522
+ signatures.each do |buffer, (dirs, decls)|
523
+ resolve = dirs.find { _1.is_a?(AST::Directives::ResolveTypeNames) } #: AST::Directives::ResolveTypeNames?
524
+ if !resolve || resolve.value
525
+ _, decls = resolve_signature(resolver, table, dirs, decls)
526
+ end
527
+ env.add_signature(buffer: buffer, directives: dirs, decls: decls)
528
+ end
529
+
530
+ env
531
+ end
532
+
533
+ def resolver_context(*nesting)
534
+ nesting.inject(nil) {|context, decl| #$ Resolver::context
535
+ append_context(context, decl)
536
+ }
537
+ end
538
+
539
+ def append_context(context, decl)
540
+ if (_, last = context)
541
+ last or raise
542
+ [context, last + decl.name]
543
+ else
544
+ [nil, decl.name.absolute!]
545
+ end
546
+ end
547
+
548
+ def resolve_declaration(resolver, map, decl, outer:, prefix:)
549
+ if decl.is_a?(AST::Declarations::Global)
550
+ # @type var decl: AST::Declarations::Global
551
+ return AST::Declarations::Global.new(
552
+ name: decl.name,
553
+ type: absolute_type(resolver, map, decl.type, context: nil),
554
+ location: decl.location,
555
+ comment: decl.comment
556
+ )
557
+ end
558
+
559
+ context = resolver_context(*outer)
560
+
561
+ case decl
562
+ when AST::Declarations::Class
563
+ outer_context = context
564
+ inner_context = append_context(outer_context, decl)
565
+
566
+ outer_ = outer + [decl]
567
+ prefix_ = prefix + decl.name.to_namespace
568
+ AST::Declarations::Class.new(
569
+ name: decl.name.with_prefix(prefix),
570
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: inner_context),
571
+ super_class: decl.super_class&.yield_self do |super_class|
572
+ AST::Declarations::Class::Super.new(
573
+ name: absolute_type_name(resolver, map, super_class.name, context: outer_context),
574
+ args: super_class.args.map {|type| absolute_type(resolver, map, type, context: outer_context) },
575
+ location: super_class.location
576
+ )
577
+ end,
578
+ members: decl.members.map do |member|
579
+ case member
580
+ when AST::Members::Base
581
+ resolve_member(resolver, map, member, context: inner_context)
582
+ when AST::Declarations::Base
583
+ resolve_declaration(
584
+ resolver,
585
+ map,
586
+ member,
587
+ outer: outer_,
588
+ prefix: prefix_
589
+ )
590
+ else
591
+ raise
592
+ end
593
+ end,
594
+ location: decl.location,
595
+ annotations: decl.annotations,
596
+ comment: decl.comment
597
+ )
598
+
599
+ when AST::Declarations::Module
600
+ outer_context = context
601
+ inner_context = append_context(outer_context, decl)
602
+
603
+ outer_ = outer + [decl]
604
+ prefix_ = prefix + decl.name.to_namespace
605
+ AST::Declarations::Module.new(
606
+ name: decl.name.with_prefix(prefix),
607
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: inner_context),
608
+ self_types: decl.self_types.map do |module_self|
609
+ AST::Declarations::Module::Self.new(
610
+ name: absolute_type_name(resolver, map, module_self.name, context: inner_context),
611
+ args: module_self.args.map {|type| absolute_type(resolver, map, type, context: inner_context) },
612
+ location: module_self.location
613
+ )
614
+ end,
615
+ members: decl.members.map do |member|
616
+ case member
617
+ when AST::Members::Base
618
+ resolve_member(resolver, map, member, context: inner_context)
619
+ when AST::Declarations::Base
620
+ resolve_declaration(
621
+ resolver,
622
+ map,
623
+ member,
624
+ outer: outer_,
625
+ prefix: prefix_
626
+ )
627
+ else
628
+ raise
629
+ end
630
+ end,
631
+ location: decl.location,
632
+ annotations: decl.annotations,
633
+ comment: decl.comment
634
+ )
635
+
636
+ when AST::Declarations::Interface
637
+ AST::Declarations::Interface.new(
638
+ name: decl.name.with_prefix(prefix),
639
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: context),
640
+ members: decl.members.map do |member|
641
+ resolve_member(resolver, map, member, context: context)
642
+ end,
643
+ comment: decl.comment,
644
+ location: decl.location,
645
+ annotations: decl.annotations
646
+ )
647
+
648
+ when AST::Declarations::TypeAlias
649
+ AST::Declarations::TypeAlias.new(
650
+ name: decl.name.with_prefix(prefix),
651
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: context),
652
+ type: absolute_type(resolver, map, decl.type, context: context),
653
+ location: decl.location,
654
+ annotations: decl.annotations,
655
+ comment: decl.comment
656
+ )
657
+
658
+ when AST::Declarations::Constant
659
+ AST::Declarations::Constant.new(
660
+ name: decl.name.with_prefix(prefix),
661
+ type: absolute_type(resolver, map, decl.type, context: context),
662
+ location: decl.location,
663
+ comment: decl.comment
664
+ )
665
+
666
+ when AST::Declarations::ClassAlias
667
+ AST::Declarations::ClassAlias.new(
668
+ new_name: decl.new_name.with_prefix(prefix),
669
+ old_name: absolute_type_name(resolver, map, decl.old_name, context: context),
670
+ location: decl.location,
671
+ comment: decl.comment
672
+ )
673
+
674
+ when AST::Declarations::ModuleAlias
675
+ AST::Declarations::ModuleAlias.new(
676
+ new_name: decl.new_name.with_prefix(prefix),
677
+ old_name: absolute_type_name(resolver, map, decl.old_name, context: context),
678
+ location: decl.location,
679
+ comment: decl.comment
680
+ )
681
+ end
682
+ end
683
+
684
+ def resolve_member(resolver, map, member, context:)
685
+ case member
686
+ when AST::Members::MethodDefinition
687
+ AST::Members::MethodDefinition.new(
688
+ name: member.name,
689
+ kind: member.kind,
690
+ overloads: member.overloads.map do |overload|
691
+ overload.update(
692
+ method_type: resolve_method_type(resolver, map, overload.method_type, context: context)
693
+ )
694
+ end,
695
+ comment: member.comment,
696
+ overloading: member.overloading?,
697
+ annotations: member.annotations,
698
+ location: member.location,
699
+ visibility: member.visibility
700
+ )
701
+ when AST::Members::AttrAccessor
702
+ AST::Members::AttrAccessor.new(
703
+ name: member.name,
704
+ type: absolute_type(resolver, map, member.type, context: context),
705
+ kind: member.kind,
706
+ annotations: member.annotations,
707
+ comment: member.comment,
708
+ location: member.location,
709
+ ivar_name: member.ivar_name,
710
+ visibility: member.visibility
711
+ )
712
+ when AST::Members::AttrReader
713
+ AST::Members::AttrReader.new(
714
+ name: member.name,
715
+ type: absolute_type(resolver, map, member.type, context: context),
716
+ kind: member.kind,
717
+ annotations: member.annotations,
718
+ comment: member.comment,
719
+ location: member.location,
720
+ ivar_name: member.ivar_name,
721
+ visibility: member.visibility
722
+ )
723
+ when AST::Members::AttrWriter
724
+ AST::Members::AttrWriter.new(
725
+ name: member.name,
726
+ type: absolute_type(resolver, map, member.type, context: context),
727
+ kind: member.kind,
728
+ annotations: member.annotations,
729
+ comment: member.comment,
730
+ location: member.location,
731
+ ivar_name: member.ivar_name,
732
+ visibility: member.visibility
733
+ )
734
+ when AST::Members::InstanceVariable
735
+ AST::Members::InstanceVariable.new(
736
+ name: member.name,
737
+ type: absolute_type(resolver, map, member.type, context: context),
738
+ comment: member.comment,
739
+ location: member.location
740
+ )
741
+ when AST::Members::ClassInstanceVariable
742
+ AST::Members::ClassInstanceVariable.new(
743
+ name: member.name,
744
+ type: absolute_type(resolver, map, member.type, context: context),
745
+ comment: member.comment,
746
+ location: member.location
747
+ )
748
+ when AST::Members::ClassVariable
749
+ AST::Members::ClassVariable.new(
750
+ name: member.name,
751
+ type: absolute_type(resolver, map, member.type, context: context),
752
+ comment: member.comment,
753
+ location: member.location
754
+ )
755
+ when AST::Members::Include
756
+ AST::Members::Include.new(
757
+ name: absolute_type_name(resolver, map, member.name, context: context),
758
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
759
+ comment: member.comment,
760
+ location: member.location,
761
+ annotations: member.annotations
762
+ )
763
+ when AST::Members::Extend
764
+ AST::Members::Extend.new(
765
+ name: absolute_type_name(resolver, map, member.name, context: context),
766
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
767
+ comment: member.comment,
768
+ location: member.location,
769
+ annotations: member.annotations
770
+ )
771
+ when AST::Members::Prepend
772
+ AST::Members::Prepend.new(
773
+ name: absolute_type_name(resolver, map, member.name, context: context),
774
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
775
+ comment: member.comment,
776
+ location: member.location,
777
+ annotations: member.annotations
778
+ )
779
+ else
780
+ member
781
+ end
782
+ end
783
+
784
+ def resolve_method_type(resolver, map, type, context:)
785
+ type.map_type do |ty|
786
+ absolute_type(resolver, map, ty, context: context)
787
+ end.map_type_bound do |bound|
788
+ _ = absolute_type(resolver, map, bound, context: context)
789
+ end
790
+ end
791
+
792
+ def resolve_type_params(resolver, map, params, context:)
793
+ params.map do |param|
794
+ param.map_type {|type| _ = absolute_type(resolver, map, type, context: context) }
795
+ end
796
+ end
797
+
798
+ def absolute_type_name(resolver, map, type_name, context:)
799
+ type_name = map.resolve(type_name)
800
+ resolver.resolve(type_name, context: context) || type_name
801
+ end
802
+
803
+ def absolute_type(resolver, map, type, context:)
804
+ type.map_type_name do |name, _, _|
805
+ absolute_type_name(resolver, map, name, context: context)
806
+ end
807
+ end
808
+
809
+ def inspect
810
+ ivars = %i[@declarations @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
811
+ "\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
812
+ end
813
+
814
+ def buffers
815
+ signatures.keys
816
+ end
817
+
818
+ def unload(buffers)
819
+ env = Environment.new
820
+
821
+ signatures.each do |buf, (dirs, decls)|
822
+ next if buffers.include?(buf)
823
+ env.add_signature(buffer: buf, directives: dirs, decls: decls)
824
+ end
825
+
826
+ env
827
+ end
828
+ end
829
+ end