rbs 4.1.0.pre.2-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
@@ -0,0 +1,1028 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Environment
5
+ attr_reader :class_decls
6
+ attr_reader :interface_decls
7
+ attr_reader :type_alias_decls
8
+ attr_reader :constant_decls
9
+ attr_reader :global_decls
10
+ attr_reader :class_alias_decls
11
+
12
+ attr_reader :sources
13
+
14
+ def declarations
15
+ sources.flat_map(&:declarations)
16
+ end
17
+
18
+ class SingleEntry
19
+ attr_reader :name
20
+ attr_reader :context
21
+ attr_reader :decl
22
+
23
+ def initialize(name:, decl:, context:)
24
+ @name = name
25
+ @decl = decl
26
+ @context = context
27
+ end
28
+ end
29
+
30
+ class ModuleAliasEntry < SingleEntry
31
+ end
32
+
33
+ class ClassAliasEntry < SingleEntry
34
+ end
35
+
36
+ class InterfaceEntry < SingleEntry
37
+ end
38
+
39
+ class TypeAliasEntry < SingleEntry
40
+ end
41
+
42
+ class ConstantEntry < SingleEntry
43
+ end
44
+
45
+ class GlobalEntry < SingleEntry
46
+ end
47
+
48
+ def initialize
49
+ @sources = []
50
+ @class_decls = {}
51
+ @interface_decls = {}
52
+ @type_alias_decls = {}
53
+ @constant_decls = {}
54
+ @global_decls = {}
55
+ @class_alias_decls = {}
56
+ @normalize_module_name_cache = {}
57
+ end
58
+
59
+ def initialize_copy(other)
60
+ @sources = other.sources.dup
61
+ @class_decls = other.class_decls.dup
62
+ @interface_decls = other.interface_decls.dup
63
+ @type_alias_decls = other.type_alias_decls.dup
64
+ @constant_decls = other.constant_decls.dup
65
+ @global_decls = other.global_decls.dup
66
+ @class_alias_decls = other.class_alias_decls.dup
67
+ end
68
+
69
+ def self.from_loader(loader)
70
+ self.new.tap do |env|
71
+ loader.load(env: env)
72
+ end
73
+ end
74
+
75
+ def interface_name?(name)
76
+ interface_decls.key?(name)
77
+ end
78
+
79
+ def type_alias_name?(name)
80
+ type_alias_decls.key?(name)
81
+ end
82
+
83
+ def module_name?(name)
84
+ class_decls.key?(name) || class_alias_decls.key?(name)
85
+ end
86
+
87
+ def type_name?(name)
88
+ interface_name?(name) ||
89
+ type_alias_name?(name) ||
90
+ module_name?(name)
91
+ end
92
+
93
+ def constant_name?(name)
94
+ constant_decl?(name) || module_name?(name)
95
+ end
96
+
97
+ def constant_decl?(name)
98
+ constant_decls.key?(name)
99
+ end
100
+
101
+ def class_decl?(name)
102
+ class_decls[name].is_a?(ClassEntry)
103
+ end
104
+
105
+ def module_decl?(name)
106
+ class_decls[name].is_a?(ModuleEntry)
107
+ end
108
+
109
+ def module_alias?(name)
110
+ if decl = class_alias_decls[name]
111
+ decl.decl.is_a?(AST::Declarations::ModuleAlias)
112
+ else
113
+ false
114
+ end
115
+ end
116
+
117
+ def class_alias?(name)
118
+ if decl = class_alias_decls[name]
119
+ decl.decl.is_a?(AST::Declarations::ClassAlias)
120
+ else
121
+ false
122
+ end
123
+ end
124
+
125
+ def class_entry(type_name, normalized: false)
126
+ case entry = constant_entry(type_name, normalized: normalized || false)
127
+ when ClassEntry, ClassAliasEntry
128
+ entry
129
+ end
130
+ end
131
+
132
+ def module_entry(type_name, normalized: false)
133
+ case entry = constant_entry(type_name, normalized: normalized || false)
134
+ when ModuleEntry, ModuleAliasEntry
135
+ entry
136
+ end
137
+ end
138
+
139
+ def normalized_class_entry(type_name)
140
+ if name = normalize_module_name?(type_name)
141
+ case entry = class_entry(name)
142
+ when ClassEntry, nil
143
+ entry
144
+ when ClassAliasEntry
145
+ raise
146
+ end
147
+ end
148
+ end
149
+
150
+ def normalized_module_entry(type_name)
151
+ module_entry(type_name, normalized: true)
152
+ end
153
+
154
+ def module_class_entry(type_name, normalized: false)
155
+ entry = constant_entry(type_name, normalized: normalized || false)
156
+ if entry.is_a?(ConstantEntry)
157
+ nil
158
+ else
159
+ entry
160
+ end
161
+ end
162
+
163
+ def normalized_module_class_entry(type_name)
164
+ module_class_entry(type_name, normalized: true)
165
+ end
166
+
167
+ def constant_entry(type_name, normalized: false)
168
+ if normalized
169
+ if normalized_name = normalize_module_name?(type_name)
170
+ class_decls.fetch(normalized_name, nil)
171
+ else
172
+ # The type_name may be declared with constant declaration
173
+ unless type_name.namespace.empty?
174
+ parent = type_name.namespace.to_type_name
175
+ normalized_parent = normalize_module_name?(parent) or return
176
+ constant_name = TypeName[normalized_parent.to_namespace, type_name.name]
177
+ constant_decls.fetch(constant_name, nil)
178
+ end
179
+ end
180
+ else
181
+ class_decls.fetch(type_name, nil) ||
182
+ class_alias_decls.fetch(type_name, nil) ||
183
+ constant_decls.fetch(type_name, nil)
184
+ end
185
+ end
186
+
187
+ def normalize_type_name?(name)
188
+ return normalize_module_name?(name) if name.class?
189
+
190
+ type_name =
191
+ unless name.namespace.empty?
192
+ parent = name.namespace.to_type_name
193
+ parent = normalize_module_name?(parent)
194
+ return parent unless parent
195
+
196
+ TypeName[parent.to_namespace, name.name]
197
+ else
198
+ name
199
+ end
200
+
201
+ if type_name?(type_name)
202
+ type_name
203
+ end
204
+ end
205
+
206
+ def normalize_type_name!(name)
207
+ result = normalize_type_name?(name)
208
+
209
+ case result
210
+ when TypeName
211
+ result
212
+ when false
213
+ raise "Type name `#{name}` cannot be normalized because it's a cyclic definition"
214
+ when nil
215
+ raise "Type name `#{name}` cannot be normalized because of unknown type name in the path"
216
+ end
217
+ end
218
+
219
+ def normalize_type_name(name)
220
+ normalize_type_name?(name) || name
221
+ end
222
+
223
+ def normalized_type_name?(type_name)
224
+ case
225
+ when type_name.interface?
226
+ interface_decls.key?(type_name)
227
+ when type_name.class?
228
+ class_decls.key?(type_name)
229
+ when type_name.alias?
230
+ type_alias_decls.key?(type_name)
231
+ else
232
+ false
233
+ end
234
+ end
235
+
236
+ def normalized_type_name!(name)
237
+ normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}`"
238
+ name
239
+ end
240
+
241
+ def normalize_module_name?(name)
242
+ raise "Class/module name is expected: #{name}" unless name.class?
243
+ name = name.absolute! unless name.absolute?
244
+
245
+ original_name = name
246
+
247
+ if @normalize_module_name_cache.key?(original_name)
248
+ return @normalize_module_name_cache[original_name]
249
+ end
250
+
251
+ if alias_entry = class_alias_decls.fetch(name, nil)
252
+ unless alias_entry.decl.old_name.absolute?
253
+ # Having relative old_name means the type name resolution was failed.
254
+ # Run TypeNameResolver for failure reason
255
+ resolver = Resolver::TypeNameResolver.build(self)
256
+ name = resolver.resolve_namespace(name, context: nil)
257
+ @normalize_module_name_cache[original_name] = name
258
+ return name
259
+ end
260
+
261
+ name = alias_entry.decl.old_name
262
+ end
263
+
264
+ if class_decls.key?(name)
265
+ @normalize_module_name_cache[original_name] = name
266
+ end
267
+ end
268
+
269
+ def normalize_module_name(name)
270
+ normalize_module_name?(name) || name
271
+ end
272
+
273
+ def normalize_module_name!(name)
274
+ normalize_module_name?(name) or raise "Module name `#{name}` cannot be normalized"
275
+ end
276
+
277
+ def insert_rbs_decl(decl, context:, namespace:)
278
+ case decl
279
+ when AST::Declarations::Class, AST::Declarations::Module
280
+ name = decl.name.with_prefix(namespace)
281
+
282
+ if cdecl = constant_entry(name)
283
+ if cdecl.is_a?(ConstantEntry) || cdecl.is_a?(ModuleAliasEntry) || cdecl.is_a?(ClassAliasEntry)
284
+ raise DuplicatedDeclarationError.new(name, decl, cdecl.decl)
285
+ end
286
+ end
287
+
288
+ unless class_decls.key?(name)
289
+ case decl
290
+ when AST::Declarations::Class
291
+ class_decls[name] ||= ClassEntry.new(name)
292
+ when AST::Declarations::Module
293
+ class_decls[name] ||= ModuleEntry.new(name)
294
+ end
295
+ end
296
+
297
+ existing_entry = class_decls[name]
298
+
299
+ case
300
+ when decl.is_a?(AST::Declarations::Module) && existing_entry.is_a?(ModuleEntry)
301
+ existing_entry << [context, decl]
302
+ when decl.is_a?(AST::Declarations::Class) && existing_entry.is_a?(ClassEntry)
303
+ existing_entry << [context, decl]
304
+ else
305
+ raise DuplicatedDeclarationError.new(name, decl, existing_entry.primary_decl)
306
+ end
307
+
308
+ inner_context = [context, name] #: Resolver::context
309
+ inner_namespace = name.to_namespace
310
+ decl.each_decl do |d|
311
+ insert_rbs_decl(d, context: inner_context, namespace: inner_namespace)
312
+ end
313
+
314
+ when AST::Declarations::Interface
315
+ name = decl.name.with_prefix(namespace)
316
+
317
+ if interface_entry = interface_decls[name]
318
+ raise DuplicatedDeclarationError.new(name, decl, interface_entry.decl)
319
+ end
320
+
321
+ interface_decls[name] = InterfaceEntry.new(name: name, decl: decl, context: context)
322
+
323
+ when AST::Declarations::TypeAlias
324
+ name = decl.name.with_prefix(namespace)
325
+
326
+ if entry = type_alias_decls[name]
327
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
328
+ end
329
+
330
+ type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl, context: context)
331
+
332
+ when AST::Declarations::Constant
333
+ name = decl.name.with_prefix(namespace)
334
+
335
+ if entry = constant_entry(name)
336
+ case entry
337
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
338
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
339
+ when ClassEntry, ModuleEntry
340
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
341
+ end
342
+ end
343
+
344
+ constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
345
+
346
+ when AST::Declarations::Global
347
+ if entry = global_decls[decl.name]
348
+ raise DuplicatedDeclarationError.new(decl.name, decl, entry.decl)
349
+ end
350
+
351
+ global_decls[decl.name] = GlobalEntry.new(name: decl.name, decl: decl, context: context)
352
+
353
+ when AST::Declarations::ClassAlias, AST::Declarations::ModuleAlias
354
+ name = decl.new_name.with_prefix(namespace)
355
+
356
+ if entry = constant_entry(name)
357
+ case entry
358
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
359
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
360
+ when ClassEntry, ModuleEntry
361
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
362
+ end
363
+ end
364
+
365
+ case decl
366
+ when AST::Declarations::ClassAlias
367
+ class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
368
+ when AST::Declarations::ModuleAlias
369
+ class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, context: context)
370
+ end
371
+ end
372
+ end
373
+
374
+ def insert_ruby_decl(decl, context:, namespace:)
375
+ case decl
376
+ when AST::Ruby::Declarations::ClassDecl
377
+ name = decl.class_name.with_prefix(namespace)
378
+
379
+ if entry = constant_entry(name)
380
+ if entry.is_a?(ConstantEntry) || entry.is_a?(ModuleAliasEntry) || entry.is_a?(ClassAliasEntry)
381
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
382
+ end
383
+ if entry.is_a?(ModuleEntry)
384
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
385
+ end
386
+ else
387
+ entry = class_decls[name] = ClassEntry.new(name)
388
+ end
389
+
390
+ entry << [context, decl]
391
+
392
+ inner_context = [context, name] #: Resolver::context
393
+ decl.each_decl do |member|
394
+ insert_ruby_decl(member, context: inner_context, namespace: name.to_namespace)
395
+ end
396
+
397
+ when AST::Ruby::Declarations::ModuleDecl
398
+ name = decl.module_name.with_prefix(namespace)
399
+
400
+ if entry = constant_entry(name)
401
+ if entry.is_a?(ConstantEntry) || entry.is_a?(ModuleAliasEntry) || entry.is_a?(ClassAliasEntry)
402
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
403
+ end
404
+ if entry.is_a?(ClassEntry)
405
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
406
+ end
407
+ else
408
+ entry = class_decls[name] = ModuleEntry.new(name)
409
+ end
410
+
411
+ entry << [context, decl]
412
+
413
+ inner_context = [context, name] #: Resolver::context
414
+ decl.each_decl do |member|
415
+ insert_ruby_decl(member, context: inner_context, namespace: name.to_namespace)
416
+ end
417
+
418
+ when AST::Ruby::Declarations::ConstantDecl
419
+ name = decl.constant_name.with_prefix(namespace)
420
+
421
+ if entry = constant_entry(name)
422
+ case entry
423
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
424
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
425
+ when ClassEntry, ModuleEntry
426
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
427
+ end
428
+ end
429
+
430
+ constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
431
+
432
+ when AST::Ruby::Declarations::ClassModuleAliasDecl
433
+ name = decl.new_name.with_prefix(namespace)
434
+
435
+ if entry = constant_entry(name)
436
+ case entry
437
+ when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
438
+ raise DuplicatedDeclarationError.new(name, decl, entry.decl)
439
+ when ClassEntry, ModuleEntry
440
+ raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
441
+ end
442
+ end
443
+
444
+ case decl.annotation
445
+ when AST::Ruby::Annotations::ClassAliasAnnotation
446
+ class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
447
+ when AST::Ruby::Annotations::ModuleAliasAnnotation
448
+ class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, context: context)
449
+ end
450
+ else
451
+ raise "Unknown Ruby declaration type: #{decl.class}"
452
+ end
453
+ end
454
+
455
+ def add_source(source)
456
+ sources << source
457
+
458
+ case source
459
+ when Source::RBS
460
+ source.declarations.each do |decl|
461
+ insert_rbs_decl(decl, context: nil, namespace: Namespace.root)
462
+ end
463
+ when Source::Ruby
464
+ source.declarations.each do |dir|
465
+ insert_ruby_decl(dir, context: nil, namespace: Namespace.root)
466
+ end
467
+ end
468
+ end
469
+
470
+ def each_rbs_source(&block)
471
+ if block
472
+ sources.each do |source|
473
+ if source.is_a?(Source::RBS)
474
+ yield source
475
+ end
476
+ end
477
+ else
478
+ enum_for(:each_rbs_source)
479
+ end
480
+ end
481
+
482
+ def each_ruby_source(&block)
483
+ if block
484
+ sources.each do |source|
485
+ if source.is_a?(Source::Ruby)
486
+ yield source
487
+ end
488
+ end
489
+ else
490
+ enum_for(:each_ruby_source)
491
+ end
492
+ end
493
+
494
+ def validate_type_params
495
+ class_decls.each_value do |decl|
496
+ decl.validate_type_params
497
+ end
498
+ end
499
+
500
+ def resolve_signature(resolver, table, dirs, decls, only: nil)
501
+ map = UseMap.new(table: table)
502
+ dirs.each do |dir|
503
+ case dir
504
+ when AST::Directives::Use
505
+ dir.clauses.each do |clause|
506
+ map.build_map(clause)
507
+ end
508
+ end
509
+ end
510
+
511
+ decls = decls.map do |decl|
512
+ if only && !only.member?(decl)
513
+ decl
514
+ else
515
+ resolve_declaration(resolver, map, decl, context: nil, prefix: Namespace.root)
516
+ end
517
+ end
518
+
519
+ [dirs, decls]
520
+ end
521
+
522
+ def resolve_type_names(only: nil)
523
+ resolver = Resolver::TypeNameResolver.build(self)
524
+ env = Environment.new
525
+
526
+ table = UseMap::Table.new()
527
+ table.known_types.merge(class_decls.keys)
528
+ table.known_types.merge(class_alias_decls.keys)
529
+ table.known_types.merge(type_alias_decls.keys)
530
+ table.known_types.merge(interface_decls.keys)
531
+ table.compute_children
532
+
533
+ each_rbs_source do |source|
534
+ resolve = source.directives.find { _1.is_a?(AST::Directives::ResolveTypeNames) } #: AST::Directives::ResolveTypeNames?
535
+ if !resolve || resolve.value
536
+ _, decls = resolve_signature(resolver, table, source.directives, source.declarations, only: only)
537
+ else
538
+ decls = source.declarations
539
+ end
540
+ env.add_source(Source::RBS.new(source.buffer, source.directives, decls))
541
+ end
542
+
543
+ each_ruby_source do |source|
544
+ decls = source.declarations.map do |decl|
545
+ if only
546
+ if only.include?(decl)
547
+ resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
548
+ else
549
+ decl
550
+ end
551
+ else
552
+ resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
553
+ end
554
+ end
555
+
556
+ env.add_source(Source::Ruby.new(source.buffer, source.prism_result, decls, source.diagnostics))
557
+ end
558
+
559
+ env
560
+ end
561
+
562
+ def resolver_context(*nesting)
563
+ nesting.inject(nil) {|context, decl| #$ Resolver::context
564
+ append_context(context, decl)
565
+ }
566
+ end
567
+
568
+ def append_context(context, decl)
569
+ if (_, last = context)
570
+ last or raise
571
+ [context, last + decl.name]
572
+ else
573
+ [nil, decl.name.absolute!]
574
+ end
575
+ end
576
+
577
+ def resolve_declaration(resolver, map, decl, context:, prefix:)
578
+ if decl.is_a?(AST::Declarations::Global)
579
+ # @type var decl: AST::Declarations::Global
580
+ return AST::Declarations::Global.new(
581
+ name: decl.name,
582
+ type: absolute_type(resolver, map, decl.type, context: nil),
583
+ location: decl.location,
584
+ comment: decl.comment,
585
+ annotations: decl.annotations
586
+ )
587
+ end
588
+
589
+ case decl
590
+ when AST::Declarations::Class
591
+ outer_context = context
592
+ inner_context = append_context(outer_context, decl)
593
+
594
+ prefix_ = prefix + decl.name.to_namespace
595
+ AST::Declarations::Class.new(
596
+ name: decl.name.with_prefix(prefix),
597
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: inner_context),
598
+ super_class: decl.super_class&.yield_self do |super_class|
599
+ AST::Declarations::Class::Super.new(
600
+ name: absolute_type_name(resolver, map, super_class.name, context: outer_context),
601
+ args: super_class.args.map {|type| absolute_type(resolver, map, type, context: outer_context) },
602
+ location: super_class.location
603
+ )
604
+ end,
605
+ members: decl.members.map do |member|
606
+ case member
607
+ when AST::Members::Base
608
+ resolve_member(resolver, map, member, context: inner_context)
609
+ when AST::Declarations::Base
610
+ resolve_declaration(
611
+ resolver,
612
+ map,
613
+ member,
614
+ context: inner_context,
615
+ prefix: prefix_
616
+ )
617
+ else
618
+ raise
619
+ end
620
+ end,
621
+ location: decl.location,
622
+ annotations: decl.annotations,
623
+ comment: decl.comment
624
+ )
625
+
626
+ when AST::Declarations::Module
627
+ outer_context = context
628
+ inner_context = append_context(outer_context, decl)
629
+
630
+ prefix_ = prefix + decl.name.to_namespace
631
+ AST::Declarations::Module.new(
632
+ name: decl.name.with_prefix(prefix),
633
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: inner_context),
634
+ self_types: decl.self_types.map do |module_self|
635
+ AST::Declarations::Module::Self.new(
636
+ name: absolute_type_name(resolver, map, module_self.name, context: inner_context),
637
+ args: module_self.args.map {|type| absolute_type(resolver, map, type, context: inner_context) },
638
+ location: module_self.location
639
+ )
640
+ end,
641
+ members: decl.members.map do |member|
642
+ case member
643
+ when AST::Members::Base
644
+ resolve_member(resolver, map, member, context: inner_context)
645
+ when AST::Declarations::Base
646
+ resolve_declaration(
647
+ resolver,
648
+ map,
649
+ member,
650
+ context: inner_context,
651
+ prefix: prefix_
652
+ )
653
+ else
654
+ raise
655
+ end
656
+ end,
657
+ location: decl.location,
658
+ annotations: decl.annotations,
659
+ comment: decl.comment
660
+ )
661
+
662
+ when AST::Declarations::Interface
663
+ AST::Declarations::Interface.new(
664
+ name: decl.name.with_prefix(prefix),
665
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: context),
666
+ members: decl.members.map do |member|
667
+ resolve_member(resolver, map, member, context: context)
668
+ end,
669
+ comment: decl.comment,
670
+ location: decl.location,
671
+ annotations: decl.annotations
672
+ )
673
+
674
+ when AST::Declarations::TypeAlias
675
+ AST::Declarations::TypeAlias.new(
676
+ name: decl.name.with_prefix(prefix),
677
+ type_params: resolve_type_params(resolver, map, decl.type_params, context: context),
678
+ type: absolute_type(resolver, map, decl.type, context: context),
679
+ location: decl.location,
680
+ annotations: decl.annotations,
681
+ comment: decl.comment
682
+ )
683
+
684
+ when AST::Declarations::Constant
685
+ AST::Declarations::Constant.new(
686
+ name: decl.name.with_prefix(prefix),
687
+ type: absolute_type(resolver, map, decl.type, context: context),
688
+ location: decl.location,
689
+ comment: decl.comment,
690
+ annotations: decl.annotations
691
+ )
692
+
693
+ when AST::Declarations::ClassAlias
694
+ AST::Declarations::ClassAlias.new(
695
+ new_name: decl.new_name.with_prefix(prefix),
696
+ old_name: absolute_type_name(resolver, map, decl.old_name, context: context),
697
+ location: decl.location,
698
+ comment: decl.comment,
699
+ annotations: decl.annotations
700
+ )
701
+
702
+ when AST::Declarations::ModuleAlias
703
+ AST::Declarations::ModuleAlias.new(
704
+ new_name: decl.new_name.with_prefix(prefix),
705
+ old_name: absolute_type_name(resolver, map, decl.old_name, context: context),
706
+ location: decl.location,
707
+ comment: decl.comment,
708
+ annotations: decl.annotations
709
+ )
710
+ end
711
+ end
712
+
713
+ def resolve_ruby_decl(resolver, decl, context:, prefix:)
714
+ case decl
715
+ when AST::Ruby::Declarations::ClassDecl
716
+ full_name = decl.class_name.with_prefix(prefix)
717
+ inner_context = [context, full_name] #: Resolver::context
718
+ inner_prefix = full_name.to_namespace
719
+
720
+ super_class = decl.super_class&.yield_self do |super_class|
721
+ AST::Ruby::Declarations::ClassDecl::SuperClass.new(
722
+ super_class.type_name_location,
723
+ super_class.operator_location,
724
+ absolute_type_name(resolver, nil, super_class.name, context: context),
725
+ super_class.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
726
+ )
727
+ end
728
+
729
+ AST::Ruby::Declarations::ClassDecl.new(decl.buffer, full_name, decl.node, super_class).tap do |resolved|
730
+ decl.members.each do |member|
731
+ case member
732
+ when AST::Ruby::Declarations::Base
733
+ resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
734
+ when AST::Ruby::Members::Base
735
+ resolved.members << resolve_ruby_member(resolver, member, context: inner_context)
736
+ else
737
+ raise "Unknown member type: #{member.class}"
738
+ end
739
+ end
740
+ end
741
+
742
+ when AST::Ruby::Declarations::ModuleDecl
743
+ full_name = decl.module_name.with_prefix(prefix)
744
+ inner_context = [context, full_name] #: Resolver::context
745
+ inner_prefix = full_name.to_namespace
746
+
747
+ AST::Ruby::Declarations::ModuleDecl.new(decl.buffer, full_name, decl.node).tap do |resolved|
748
+ decl.members.each do |member|
749
+ case member
750
+ when AST::Ruby::Declarations::Base
751
+ resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
752
+ when AST::Ruby::Members::Base
753
+ resolved.members << resolve_ruby_member(resolver, member, context: inner_context)
754
+ else
755
+ raise "Unknown member type: #{member.class}"
756
+ end
757
+ end
758
+ end
759
+
760
+ when AST::Ruby::Declarations::ConstantDecl
761
+ full_name = decl.constant_name.with_prefix(prefix)
762
+
763
+ AST::Ruby::Declarations::ConstantDecl.new(
764
+ decl.buffer,
765
+ full_name,
766
+ decl.node,
767
+ decl.leading_comment,
768
+ decl.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
769
+ )
770
+
771
+ when AST::Ruby::Declarations::ClassModuleAliasDecl
772
+ full_name = decl.new_name.with_prefix(prefix)
773
+ resolved_annotation = decl.annotation.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
774
+ resolved_infered_name = decl.infered_old_name&.yield_self {|name| absolute_type_name(resolver, nil, name, context: context) }
775
+
776
+ AST::Ruby::Declarations::ClassModuleAliasDecl.new(
777
+ decl.buffer,
778
+ decl.node,
779
+ full_name,
780
+ resolved_infered_name,
781
+ decl.leading_comment,
782
+ resolved_annotation
783
+ )
784
+
785
+ else
786
+ raise "Unknown declaration type: #{decl.class}"
787
+ end
788
+ end
789
+
790
+ def resolve_ruby_member(resolver, member, context:)
791
+ case member
792
+ when AST::Ruby::Members::DefMember
793
+ AST::Ruby::Members::DefMember.new(
794
+ member.buffer,
795
+ member.name,
796
+ member.node,
797
+ member.method_type.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) },
798
+ member.leading_comment,
799
+ kind: member.kind
800
+ )
801
+ when AST::Ruby::Members::IncludeMember
802
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
803
+ AST::Ruby::Members::IncludeMember.new(
804
+ member.buffer,
805
+ member.node,
806
+ absolute_type_name(resolver, nil, member.module_name, context: context),
807
+ resolved_annotation
808
+ )
809
+ when AST::Ruby::Members::ExtendMember
810
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
811
+ AST::Ruby::Members::ExtendMember.new(
812
+ member.buffer,
813
+ member.node,
814
+ absolute_type_name(resolver, nil, member.module_name, context: context),
815
+ resolved_annotation
816
+ )
817
+ when AST::Ruby::Members::PrependMember
818
+ resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
819
+ AST::Ruby::Members::PrependMember.new(
820
+ member.buffer,
821
+ member.node,
822
+ absolute_type_name(resolver, nil, member.module_name, context: context),
823
+ resolved_annotation
824
+ )
825
+ when AST::Ruby::Members::AttrReaderMember
826
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
827
+ AST::Ruby::Members::AttrReaderMember.new(
828
+ member.buffer,
829
+ member.node,
830
+ member.name_nodes,
831
+ member.leading_comment,
832
+ resolved_type_annotation
833
+ )
834
+ when AST::Ruby::Members::AttrWriterMember
835
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
836
+ AST::Ruby::Members::AttrWriterMember.new(
837
+ member.buffer,
838
+ member.node,
839
+ member.name_nodes,
840
+ member.leading_comment,
841
+ resolved_type_annotation
842
+ )
843
+ when AST::Ruby::Members::AttrAccessorMember
844
+ resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
845
+ AST::Ruby::Members::AttrAccessorMember.new(
846
+ member.buffer,
847
+ member.node,
848
+ member.name_nodes,
849
+ member.leading_comment,
850
+ resolved_type_annotation
851
+ )
852
+ when AST::Ruby::Members::InstanceVariableMember
853
+ resolved_annotation = member.annotation.map_type_name {|name| absolute_type_name(resolver, nil, name, context: context) }
854
+ AST::Ruby::Members::InstanceVariableMember.new(
855
+ member.buffer,
856
+ resolved_annotation
857
+ )
858
+ when AST::Ruby::Members::ModuleSelfMember
859
+ resolved_annotation = member.annotation.map_type_name {|name| absolute_type_name(resolver, nil, name, context: context) }
860
+ AST::Ruby::Members::ModuleSelfMember.new(
861
+ member.buffer,
862
+ resolved_annotation
863
+ )
864
+ else
865
+ raise "Unknown member type: #{member.class}"
866
+ end
867
+ end
868
+
869
+ def resolve_member(resolver, map, member, context:)
870
+ case member
871
+ when AST::Members::MethodDefinition
872
+ AST::Members::MethodDefinition.new(
873
+ name: member.name,
874
+ kind: member.kind,
875
+ overloads: member.overloads.map do |overload|
876
+ overload.update(
877
+ method_type: resolve_method_type(resolver, map, overload.method_type, context: context)
878
+ )
879
+ end,
880
+ comment: member.comment,
881
+ overloading: member.overloading?,
882
+ annotations: member.annotations,
883
+ location: member.location,
884
+ visibility: member.visibility
885
+ )
886
+ when AST::Members::AttrAccessor
887
+ AST::Members::AttrAccessor.new(
888
+ name: member.name,
889
+ type: absolute_type(resolver, map, member.type, context: context),
890
+ kind: member.kind,
891
+ annotations: member.annotations,
892
+ comment: member.comment,
893
+ location: member.location,
894
+ ivar_name: member.ivar_name,
895
+ visibility: member.visibility
896
+ )
897
+ when AST::Members::AttrReader
898
+ AST::Members::AttrReader.new(
899
+ name: member.name,
900
+ type: absolute_type(resolver, map, member.type, context: context),
901
+ kind: member.kind,
902
+ annotations: member.annotations,
903
+ comment: member.comment,
904
+ location: member.location,
905
+ ivar_name: member.ivar_name,
906
+ visibility: member.visibility
907
+ )
908
+ when AST::Members::AttrWriter
909
+ AST::Members::AttrWriter.new(
910
+ name: member.name,
911
+ type: absolute_type(resolver, map, member.type, context: context),
912
+ kind: member.kind,
913
+ annotations: member.annotations,
914
+ comment: member.comment,
915
+ location: member.location,
916
+ ivar_name: member.ivar_name,
917
+ visibility: member.visibility
918
+ )
919
+ when AST::Members::InstanceVariable
920
+ AST::Members::InstanceVariable.new(
921
+ name: member.name,
922
+ type: absolute_type(resolver, map, member.type, context: context),
923
+ comment: member.comment,
924
+ location: member.location
925
+ )
926
+ when AST::Members::ClassInstanceVariable
927
+ AST::Members::ClassInstanceVariable.new(
928
+ name: member.name,
929
+ type: absolute_type(resolver, map, member.type, context: context),
930
+ comment: member.comment,
931
+ location: member.location
932
+ )
933
+ when AST::Members::ClassVariable
934
+ AST::Members::ClassVariable.new(
935
+ name: member.name,
936
+ type: absolute_type(resolver, map, member.type, context: context),
937
+ comment: member.comment,
938
+ location: member.location
939
+ )
940
+ when AST::Members::Include
941
+ AST::Members::Include.new(
942
+ name: absolute_type_name(resolver, map, member.name, context: context),
943
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
944
+ comment: member.comment,
945
+ location: member.location,
946
+ annotations: member.annotations
947
+ )
948
+ when AST::Members::Extend
949
+ AST::Members::Extend.new(
950
+ name: absolute_type_name(resolver, map, member.name, context: context),
951
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
952
+ comment: member.comment,
953
+ location: member.location,
954
+ annotations: member.annotations
955
+ )
956
+ when AST::Members::Prepend
957
+ AST::Members::Prepend.new(
958
+ name: absolute_type_name(resolver, map, member.name, context: context),
959
+ args: member.args.map {|type| absolute_type(resolver, map, type, context: context) },
960
+ comment: member.comment,
961
+ location: member.location,
962
+ annotations: member.annotations
963
+ )
964
+ else
965
+ member
966
+ end
967
+ end
968
+
969
+ def resolve_method_type(resolver, map, type, context:)
970
+ type.map_type do |ty|
971
+ absolute_type(resolver, map, ty, context: context)
972
+ end.map_type_bound do |bound|
973
+ _ = absolute_type(resolver, map, bound, context: context)
974
+ end
975
+ end
976
+
977
+ def resolve_type_params(resolver, map, params, context:)
978
+ params.map do |param|
979
+ param.map_type {|type| _ = absolute_type(resolver, map, type, context: context) }
980
+ end
981
+ end
982
+
983
+ def absolute_type_name(resolver, map, type_name, context:)
984
+ type_name = map.resolve(type_name) if map
985
+ resolver.resolve(type_name, context: context) || type_name
986
+ end
987
+
988
+ def absolute_type(resolver, map, type, context:)
989
+ type.map_type_name do |name, _, _|
990
+ absolute_type_name(resolver, map, name, context: context)
991
+ end
992
+ end
993
+
994
+ def inspect
995
+ ivars = %i[@sources @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
996
+ "\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
997
+ end
998
+
999
+ def buffers
1000
+ sources.map(&:buffer)
1001
+ end
1002
+
1003
+ def unload(paths)
1004
+ ps = Set[]
1005
+ paths.each do |path|
1006
+ if path.is_a?(Buffer)
1007
+ ps << path.name
1008
+ else
1009
+ ps << path
1010
+ end
1011
+ end
1012
+
1013
+ env = Environment.new()
1014
+
1015
+ each_rbs_source do |source|
1016
+ next if ps.include?(source.buffer.name)
1017
+ env.add_source(source)
1018
+ end
1019
+
1020
+ each_ruby_source do |source|
1021
+ next if ps.include?(source.buffer.name)
1022
+ env.add_source(source)
1023
+ end
1024
+
1025
+ env
1026
+ end
1027
+ end
1028
+ end