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,170 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Location
5
+ def inspect
6
+ rks = each_required_key.to_a
7
+ ops = each_optional_key.to_a.map {|x| "?#{x}" }
8
+ src = if source.length <= 1
9
+ source.inspect
10
+ else
11
+ source.each_line.first&.chomp&.inspect
12
+ end
13
+ "#<#{self.class}:#{self.__id__} buffer=#{buffer.name}, start=#{start_line}:#{start_column}, pos=#{start_pos}...#{end_pos}, children=#{(rks + ops).join(",")} source=#{src}>"
14
+ end
15
+
16
+ def self.new(buffer_ = nil, start_pos_ = nil, end_pos_ = nil, buffer: nil, start_pos: nil, end_pos: nil)
17
+ __skip__ =
18
+ begin
19
+ if buffer && start_pos && end_pos
20
+ super(buffer, start_pos, end_pos)
21
+ else
22
+ super(buffer_, start_pos_, end_pos_)
23
+ end
24
+ end
25
+ end
26
+
27
+ alias aref []
28
+
29
+ WithChildren = self
30
+
31
+ def start_pos
32
+ buffer.absolute_position(_start_pos) || raise
33
+ end
34
+
35
+ def end_pos
36
+ buffer.absolute_position(_end_pos) || raise
37
+ end
38
+
39
+ def name
40
+ buffer.name
41
+ end
42
+
43
+ def start_line
44
+ start_loc[0]
45
+ end
46
+
47
+ def start_column
48
+ start_loc[1]
49
+ end
50
+
51
+ def end_line
52
+ end_loc[0]
53
+ end
54
+
55
+ def end_column
56
+ end_loc[1]
57
+ end
58
+
59
+ def start_loc
60
+ @start_loc ||= buffer.top_buffer.pos_to_loc(start_pos)
61
+ end
62
+
63
+ def end_loc
64
+ @end_loc ||= buffer.top_buffer.pos_to_loc(end_pos)
65
+ end
66
+
67
+ def range
68
+ @range ||= start_pos...end_pos
69
+ end
70
+
71
+ def source
72
+ @source ||= (buffer.top_buffer.content[range] || raise)
73
+ end
74
+
75
+ def to_s
76
+ "#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}"
77
+ end
78
+
79
+ def ==(other)
80
+ other.is_a?(Location) &&
81
+ other.buffer == buffer &&
82
+ other.start_pos == start_pos &&
83
+ other.end_pos == end_pos
84
+ end
85
+
86
+ def to_json(state = nil)
87
+ {
88
+ start: {
89
+ line: start_line,
90
+ column: start_column
91
+ },
92
+ end: {
93
+ line: end_line,
94
+ column: end_column
95
+ },
96
+ buffer: {
97
+ name: name&.to_s
98
+ }
99
+ }.to_json(state)
100
+ end
101
+
102
+ def self.to_string(location, default: "*:*:*...*:*")
103
+ location&.to_s || default
104
+ end
105
+
106
+ def add_required_child(name, range)
107
+ _add_required_child(name, range.begin, range.end)
108
+ end
109
+
110
+ def add_optional_child(name, range)
111
+ if range
112
+ _add_optional_child(name, range.begin, range.end)
113
+ else
114
+ _add_optional_no_child(name);
115
+ end
116
+ end
117
+
118
+ def each_optional_key(&block)
119
+ if block
120
+ _optional_keys.uniq.each(&block)
121
+ else
122
+ enum_for(:each_optional_key)
123
+ end
124
+ end
125
+
126
+ def each_required_key(&block)
127
+ if block
128
+ _required_keys.uniq.each(&block)
129
+ else
130
+ enum_for(:each_required_key)
131
+ end
132
+ end
133
+
134
+ def key?(name)
135
+ optional_key?(name) || required_key?(name)
136
+ end
137
+
138
+ def optional_key?(name)
139
+ _optional_keys.include?(name)
140
+ end
141
+
142
+ def required_key?(name)
143
+ _required_keys.include?(name)
144
+ end
145
+
146
+ def local_location
147
+ loc = Location.new(buffer.detach, _start_pos, _end_pos)
148
+
149
+ each_optional_key do |key|
150
+ value = self[key]
151
+ if value
152
+ loc.add_optional_child(key, value._start_pos...value._end_pos)
153
+ else
154
+ loc.add_optional_child(key, nil)
155
+ end
156
+ end
157
+
158
+ each_required_key do |key|
159
+ value = self[key] or raise
160
+ loc.add_required_child(key, value._start_pos...value._end_pos)
161
+ end
162
+
163
+ loc #: self
164
+ end
165
+
166
+ def local_source
167
+ local_location.source
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,247 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Locator
5
+ attr_reader :decls, :dirs, :buffer
6
+
7
+ def initialize(buffer:, dirs:, decls:)
8
+ @buffer = buffer
9
+ @dirs = dirs
10
+ @decls = decls
11
+ end
12
+
13
+ def find(line:, column:)
14
+ pos = buffer.loc_to_pos([line, column])
15
+
16
+ dirs.each do |dir|
17
+ array = [] #: Array[component]
18
+ find_in_directive(pos, dir, array) and return array
19
+ end
20
+
21
+ decls.each do |decl|
22
+ array = [] #: Array[component]
23
+ find_in_decl(pos, decl: decl, array: array) and return array
24
+ end
25
+
26
+ []
27
+ end
28
+
29
+ def find2(line:, column:)
30
+ path = find(line: line, column: column)
31
+
32
+ return if path.empty?
33
+
34
+ hd, *tl = path
35
+ if hd.is_a?(Symbol)
36
+ [hd, tl]
37
+ else
38
+ [nil, path]
39
+ end
40
+ end
41
+
42
+ def find_in_directive(pos, dir, array)
43
+ return false unless dir.is_a?(AST::Directives::Use)
44
+
45
+ if test_loc(pos, location: dir.location)
46
+ array.unshift(dir)
47
+
48
+ dir.clauses.each do |clause|
49
+ if test_loc(pos, location: clause.location)
50
+ array.unshift(clause)
51
+ find_in_loc(pos, location: clause.location, array: array)
52
+ return true
53
+ end
54
+ end
55
+ end
56
+
57
+ false
58
+ end
59
+
60
+ def find_in_decl(pos, decl:, array:)
61
+ if test_loc(pos, location: decl.location)
62
+ array.unshift(decl)
63
+
64
+ case decl
65
+ when AST::Declarations::Class
66
+ decl.type_params.each do |param|
67
+ find_in_type_param(pos, type_param: param, array: array) and return true
68
+ end
69
+
70
+ if super_class = decl.super_class
71
+ if test_loc(pos, location: super_class.location)
72
+ array.unshift(super_class)
73
+ find_in_loc(pos, array: array, location: super_class.location)
74
+ return true
75
+ end
76
+ end
77
+
78
+ decl.each_decl do |decl_|
79
+ find_in_decl(pos, decl: decl_, array: array) and return true
80
+ end
81
+
82
+ decl.each_member do |member|
83
+ find_in_member(pos, array: array, member: member) and return true
84
+ end
85
+
86
+ when AST::Declarations::Module
87
+ decl.type_params.each do |param|
88
+ find_in_type_param(pos, type_param: param, array: array) and return true
89
+ end
90
+
91
+ decl.self_types.each do |self_type|
92
+ if test_loc(pos, location: self_type.location)
93
+ array.unshift(self_type)
94
+ find_in_loc(pos, array: array, location: self_type.location)
95
+ return true
96
+ end
97
+ end
98
+
99
+ decl.each_decl do |decl_|
100
+ find_in_decl(pos, decl: decl_, array: array) and return true
101
+ end
102
+
103
+ decl.each_member do |member|
104
+ find_in_member(pos, array: array, member: member) and return true
105
+ end
106
+
107
+ when AST::Declarations::Interface
108
+ decl.type_params.each do |param|
109
+ find_in_type_param(pos, type_param: param, array: array) and return true
110
+ end
111
+
112
+ decl.members.each do |member|
113
+ find_in_member(pos, array: array, member: member) and return true
114
+ end
115
+
116
+ when AST::Declarations::Constant, AST::Declarations::Global
117
+ find_in_type(pos, array: array, type: decl.type) and return true
118
+
119
+ when AST::Declarations::TypeAlias
120
+ find_in_type(pos, array: array, type: decl.type) and return true
121
+ end
122
+
123
+ find_in_loc(pos, location: decl.location, array: array)
124
+
125
+ true
126
+ else
127
+ false
128
+ end
129
+ end
130
+
131
+ def find_in_member(pos, member:, array:)
132
+ if test_loc(pos, location: member.location)
133
+ array.unshift(member)
134
+
135
+ case member
136
+ when AST::Members::MethodDefinition
137
+ member.overloads.each do |overload|
138
+ find_in_method_type(pos, array: array, method_type: overload.method_type) and return true
139
+ end
140
+ when AST::Members::InstanceVariable, AST::Members::ClassInstanceVariable, AST::Members::ClassVariable
141
+ find_in_type(pos, array: array, type: member.type) and return true
142
+ when AST::Members::AttrReader, AST::Members::AttrWriter, AST::Members::AttrAccessor
143
+ find_in_type(pos, array: array, type: member.type) and return true
144
+ end
145
+
146
+ find_in_loc(pos, location: member.location, array: array)
147
+
148
+ true
149
+ else
150
+ false
151
+ end
152
+ end
153
+
154
+ def find_in_method_type(pos, method_type:, array:)
155
+ if test_loc(pos, location: method_type.location)
156
+ array.unshift(method_type)
157
+
158
+ method_type.type_params.each do |param|
159
+ find_in_type_param(pos, type_param: param, array: array) and return true
160
+ end
161
+
162
+ method_type.each_type do |type|
163
+ find_in_type(pos, array: array, type: type) and break
164
+ end
165
+
166
+ true
167
+ else
168
+ false
169
+ end
170
+ end
171
+
172
+ def find_in_type_param(pos, type_param:, array:)
173
+ if test_loc(pos, location: type_param.location)
174
+ array.unshift(type_param)
175
+
176
+ if upper_bound = type_param.upper_bound_type
177
+ find_in_type(pos, type: upper_bound, array: array) and return true
178
+ end
179
+
180
+ if lower_bound = type_param.lower_bound_type
181
+ find_in_type(pos, type: lower_bound, array: array) and return true
182
+ end
183
+
184
+ if default_type = type_param.default_type
185
+ find_in_type(pos, type: default_type, array: array) and return true
186
+ end
187
+
188
+ find_in_loc(pos, location: type_param.location, array: array)
189
+
190
+ true
191
+ else
192
+ false
193
+ end
194
+ end
195
+
196
+ def find_in_type(pos, type:, array:)
197
+ if test_loc(pos, location: type.location)
198
+ array.unshift(type)
199
+
200
+ type.each_type do |type_|
201
+ find_in_type(pos, array: array, type: type_) and return true
202
+ end
203
+
204
+ find_in_loc(pos, array: array, location: type.location)
205
+
206
+ true
207
+ else
208
+ false
209
+ end
210
+ end
211
+
212
+ def find_in_loc(pos, location:, array:)
213
+ if test_loc(pos, location: location)
214
+ if location.is_a?(Location)
215
+ location.each_optional_key do |key|
216
+ if loc = location[key]
217
+ if loc.range === pos
218
+ array.unshift(key)
219
+ return true
220
+ end
221
+ end
222
+ end
223
+
224
+ location.each_required_key do |key|
225
+ loc = location[key] or raise
226
+ if loc.range === pos
227
+ array.unshift(key)
228
+ return true
229
+ end
230
+ end
231
+ end
232
+
233
+ true
234
+ else
235
+ false
236
+ end
237
+ end
238
+
239
+ def test_loc(pos, location:)
240
+ if location
241
+ location.start_pos <= pos && pos <= location.end_pos
242
+ else
243
+ false
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,145 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class MethodType
5
+ attr_reader :type_params
6
+ attr_reader :type
7
+ attr_reader :block
8
+ attr_reader :location
9
+
10
+ def initialize(type_params:, type:, block:, location:)
11
+ @type_params = type_params
12
+ @type = type
13
+ @block = block
14
+ @location = location
15
+ end
16
+
17
+ def ==(other)
18
+ other.is_a?(MethodType) &&
19
+ other.type_params == type_params &&
20
+ other.type == type &&
21
+ other.block == block
22
+ end
23
+
24
+ def to_json(state = nil)
25
+ {
26
+ type_params: type_params,
27
+ type: type,
28
+ block: block,
29
+ location: location
30
+ }.to_json(state)
31
+ end
32
+
33
+ def sub(s)
34
+ sub = s.without(*type_param_names)
35
+
36
+ return self if sub.empty?
37
+
38
+ self.class.new(
39
+ type_params: type_params.map do |param|
40
+ param.map_type do |bound|
41
+ bound.map_type {|ty| ty.sub(sub) }
42
+ end
43
+ end,
44
+ type: type.sub(sub),
45
+ block: block&.sub(sub),
46
+ location: location
47
+ )
48
+ end
49
+
50
+ def update(type_params: self.type_params, type: self.type, block: self.block, location: self.location)
51
+ self.class.new(
52
+ type_params: type_params,
53
+ type: type,
54
+ block: block,
55
+ location: location
56
+ )
57
+ end
58
+
59
+ def free_variables(set = Set.new)
60
+ type.free_variables(set)
61
+ block&.type&.free_variables(set)
62
+ set.subtract(type_param_names)
63
+ end
64
+
65
+ def map_type(&block)
66
+ self.class.new(
67
+ type_params: type_params,
68
+ type: type.map_type(&block),
69
+ block: self.block&.map_type(&block),
70
+ location: location
71
+ )
72
+ end
73
+
74
+ def map_type_bound(&block)
75
+ if type_params.empty?
76
+ self
77
+ else
78
+ self.update(
79
+ type_params: type_params.map {|param|
80
+ param.map_type(&block)
81
+ }
82
+ )
83
+ end
84
+ end
85
+
86
+ def each_type(&block)
87
+ if block
88
+ type.each_type(&block)
89
+ self.block&.yield_self do |b|
90
+ b.type.each_type(&block)
91
+ if b.self_type
92
+ yield b.self_type
93
+ end
94
+ end
95
+ else
96
+ enum_for :each_type
97
+ end
98
+ end
99
+
100
+ def to_s
101
+ block_self_binding = Types::SelfTypeBindingHelper.self_type_binding_to_s(block&.self_type)
102
+
103
+ s = case
104
+ when (b = block) && b.required
105
+ "(#{type.param_to_s}) { (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
106
+ when b = block
107
+ "(#{type.param_to_s}) ?{ (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
108
+ else
109
+ "(#{type.param_to_s}) -> #{type.return_to_s}"
110
+ end
111
+
112
+ if type_params.empty?
113
+ s
114
+ else
115
+ "[#{type_params.join(", ")}] #{s}"
116
+ end
117
+ end
118
+
119
+ def type_param_names
120
+ type_params.map(&:name)
121
+ end
122
+
123
+ def has_self_type?
124
+ each_type.any? {|type| type.has_self_type? }
125
+ end
126
+
127
+ def has_classish_type?
128
+ each_type.any? {|type| type.has_classish_type? }
129
+ end
130
+
131
+ def with_nonreturn_void?
132
+ if type.with_nonreturn_void? # steep:ignore DeprecatedReference
133
+ true
134
+ else
135
+ if block = block()
136
+ block.type.with_nonreturn_void? || # steep:ignore DeprecatedReference
137
+ block.self_type&.with_nonreturn_void? || # steep:ignore DeprecatedReference
138
+ false
139
+ else
140
+ false
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,154 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Namespace
5
+ attr_reader :path
6
+
7
+ def initialize(path:, absolute:)
8
+ @path = path
9
+ @absolute = absolute ? true : false
10
+ end
11
+
12
+ # Process-wide flyweight cache. Two tries (one per `absolute` flag)
13
+ # keyed on path Symbols, with the cached Namespace stored under the
14
+ # `INTERN_LEAF` sentinel at each path's terminal node.
15
+ @intern_mutex = Mutex.new
16
+ @intern_trie_absolute = {}
17
+ @intern_trie_relative = {}
18
+ INTERN_LEAF = Module.new
19
+
20
+ # Returns a canonical `Namespace` instance for the given `path` /
21
+ # `absolute` pair. Repeated calls with structurally equal arguments
22
+ # return the same object, so callers can rely on `equal?` for fast
23
+ # equality. The path Array is duplicated and frozen on insert.
24
+ def self.[](path, absolute)
25
+ absolute = absolute ? true : false
26
+
27
+ # Lock-free fast path.
28
+ node = absolute ? @intern_trie_absolute : @intern_trie_relative
29
+ path.each do |sym|
30
+ node = node[sym]
31
+ break unless node
32
+ end
33
+ if node && (cached = node[INTERN_LEAF])
34
+ return cached
35
+ end
36
+
37
+ @intern_mutex.synchronize do
38
+ node = absolute ? @intern_trie_absolute : @intern_trie_relative
39
+ path.each { |sym| node = (node[sym] ||= {}) }
40
+ node[INTERN_LEAF] ||= begin
41
+ frozen_path = path.frozen? ? path : path.dup.freeze
42
+ new(path: frozen_path, absolute: absolute)
43
+ end
44
+ end
45
+ end
46
+
47
+ def self.empty
48
+ @empty ||= self[[], false]
49
+ end
50
+
51
+ def self.root
52
+ @root ||= self[[], true]
53
+ end
54
+
55
+ def +(other)
56
+ if other.absolute?
57
+ other
58
+ else
59
+ Namespace[path + other.path, absolute?]
60
+ end
61
+ end
62
+
63
+ def append(component)
64
+ Namespace[path + [component], absolute?]
65
+ end
66
+
67
+ def parent
68
+ @parent ||= begin
69
+ raise "Parent with empty namespace" if empty?
70
+ Namespace[path.take(path.size - 1), absolute?]
71
+ end
72
+ end
73
+
74
+ def absolute?
75
+ @absolute
76
+ end
77
+
78
+ def relative?
79
+ !absolute?
80
+ end
81
+
82
+ def absolute!
83
+ Namespace[path, true]
84
+ end
85
+
86
+ def relative!
87
+ Namespace[path, false]
88
+ end
89
+
90
+ def empty?
91
+ path.empty?
92
+ end
93
+
94
+ def ==(other)
95
+ return true if equal?(other)
96
+ other.is_a?(Namespace) && other.path == path && other.absolute? == absolute?
97
+ end
98
+
99
+ alias eql? ==
100
+
101
+ def hash
102
+ @hash ||= path.hash ^ absolute?.hash
103
+ end
104
+
105
+ def split
106
+ last = path.last or return
107
+ parent = self.parent
108
+ [parent, last]
109
+ end
110
+
111
+ def to_s
112
+ if empty?
113
+ absolute? ? "::" : ""
114
+ else
115
+ s = path.join("::")
116
+ absolute? ? "::#{s}::" : "#{s}::"
117
+ end
118
+ end
119
+
120
+ def to_type_name
121
+ parent, name = split
122
+
123
+ raise unless name
124
+ raise unless parent
125
+
126
+ TypeName[parent, name]
127
+ end
128
+
129
+ def self.parse(string)
130
+ if string.start_with?("::")
131
+ self[string.split("::").drop(1).map(&:to_sym), true]
132
+ else
133
+ self[string.split("::").map(&:to_sym), false]
134
+ end
135
+ end
136
+
137
+ def ascend
138
+ if block_given?
139
+ current = self
140
+
141
+ until current.empty?
142
+ yield current
143
+ current = _ = current.parent
144
+ end
145
+
146
+ yield current
147
+
148
+ self
149
+ else
150
+ enum_for(:ascend)
151
+ end
152
+ end
153
+ end
154
+ end