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
data/lib/rbs/errors.rb ADDED
@@ -0,0 +1,634 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module MethodNameHelper
5
+ def method_name_string()
6
+ separator = case kind
7
+ when :instance
8
+ "#"
9
+ when :singleton
10
+ "."
11
+ else
12
+ raise
13
+ end
14
+
15
+ "#{type_name}#{separator}#{method_name}"
16
+ end
17
+ end
18
+
19
+ class BaseError < StandardError; end
20
+ class LoadingError < BaseError; end
21
+ class DefinitionError < BaseError; end
22
+
23
+ module DetailedMessageable
24
+ def detailed_message(highlight: false, **)
25
+ msg = if Exception.method_defined?(:detailed_message)
26
+ super
27
+ else
28
+ # Failback to `#message` in Ruby 3.1 or earlier
29
+ "#{message} (#{self.class.name})"
30
+ end
31
+
32
+ return msg unless location
33
+
34
+ # Support only one line
35
+ return msg unless location.start_line == location.end_line
36
+
37
+ indent = " " * location.start_column
38
+ marker = "^" * ([location.end_column - location.start_column, 1].max or raise)
39
+
40
+ io = StringIO.new
41
+ io.puts msg
42
+ io.puts
43
+ io.print "\e[1m" if highlight
44
+ io.puts " #{location.buffer.lines[location.end_line - 1]}"
45
+ io.puts " #{indent}#{marker}"
46
+ io.print "\e[m" if highlight
47
+ io.string
48
+ end
49
+ end
50
+
51
+ class ParsingError < BaseError
52
+ include DetailedMessageable
53
+
54
+ attr_reader :location
55
+ attr_reader :error_message
56
+ attr_reader :token_type
57
+
58
+ def initialize(location, error_message, token_type)
59
+ @location = location
60
+ @error_message = error_message
61
+ @token_type = token_type
62
+
63
+ super "#{Location.to_string location}: Syntax error: #{error_message}, token=`#{location.source}` (#{token_type})"
64
+ end
65
+ end
66
+
67
+ class InvalidTypeApplicationError < DefinitionError
68
+ attr_reader :type_name
69
+ attr_reader :args
70
+ attr_reader :params
71
+ attr_reader :type_params
72
+ attr_reader :location
73
+
74
+ def initialize(type_name:, args:, params:, location:)
75
+ @type_name = type_name
76
+ @args = args
77
+ @type_params = params
78
+ @params = params.map(&:name)
79
+ @location = location
80
+ super "#{Location.to_string location}: #{type_name} expects parameters [#{params.join(", ")}], but given args [#{args.join(", ")}]"
81
+ end
82
+
83
+ def self.check!(type_name:, args:, params:, location:)
84
+ min_arity = params.count { _1.default_type.nil? }
85
+ max_arity = params.size
86
+
87
+ unless min_arity <= args.size && args.size <= max_arity
88
+ raise new(type_name: type_name, args: args, params: params, location: location)
89
+ end
90
+ end
91
+
92
+ def self.check2!(env:, type_name:, args:, location:)
93
+ params =
94
+ case
95
+ when type_name.class?
96
+ decl = env.module_class_entry(type_name, normalized: true) or raise
97
+ decl.type_params
98
+ when type_name.interface?
99
+ env.interface_decls.fetch(type_name).decl.type_params
100
+ when type_name.alias?
101
+ env.type_alias_decls.fetch(type_name).decl.type_params
102
+ else
103
+ raise
104
+ end
105
+
106
+ check!(type_name: type_name, args: args, params: params, location: location)
107
+ end
108
+ end
109
+
110
+ class RecursiveAncestorError < DefinitionError
111
+ attr_reader :ancestors
112
+ attr_reader :location
113
+
114
+ def initialize(ancestors:, location:)
115
+ @ancestors = ancestors
116
+ @location = location
117
+
118
+ names = ancestors.map do |ancestor|
119
+ case ancestor
120
+ when Definition::Ancestor::Singleton
121
+ "singleton(#{ancestor.name})"
122
+ when Definition::Ancestor::Instance
123
+ if ancestor.args.empty?
124
+ ancestor.name.to_s
125
+ else
126
+ "#{ancestor.name}[#{ancestor.args.join(", ")}]"
127
+ end
128
+ end
129
+ end
130
+
131
+ super "#{Location.to_string location}: Detected recursive ancestors: #{names.join(" < ")}"
132
+ end
133
+
134
+ def self.check!(self_ancestor, ancestors:, location:)
135
+ case self_ancestor
136
+ when Definition::Ancestor::Instance
137
+ if ancestors.any? {|a| a.is_a?(Definition::Ancestor::Instance) && a.name == self_ancestor.name }
138
+ raise new(ancestors: ancestors + [self_ancestor], location: location)
139
+ end
140
+ when Definition::Ancestor::Singleton
141
+ if ancestors.include?(self_ancestor)
142
+ raise new(ancestors: ancestors + [self_ancestor], location: location)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ class NoTypeFoundError < DefinitionError
149
+ include DetailedMessageable
150
+
151
+ attr_reader :type_name
152
+ attr_reader :location
153
+
154
+ def initialize(type_name:, location:)
155
+ @type_name = type_name
156
+ @location = location
157
+
158
+ super "#{Location.to_string location}: Could not find #{type_name}"
159
+ end
160
+
161
+ def self.check!(type_name, env:, location:)
162
+ env.type_name?(type_name) or raise new(type_name: type_name, location: location)
163
+ type_name
164
+ end
165
+ end
166
+
167
+ class NoSuperclassFoundError < DefinitionError
168
+ attr_reader :type_name
169
+ attr_reader :location
170
+
171
+ def initialize(type_name:, location:)
172
+ @type_name = type_name
173
+ @location = location
174
+
175
+ super "#{Location.to_string location}: Could not find super class: #{type_name}"
176
+ end
177
+
178
+ def self.check!(type_name, env:, location:)
179
+ if env.module_name?(type_name)
180
+ return
181
+ end
182
+
183
+ raise new(type_name: type_name, location: location)
184
+ end
185
+ end
186
+
187
+ class InheritModuleError < DefinitionError
188
+ include DetailedMessageable
189
+
190
+ attr_reader :super_decl
191
+
192
+ def initialize(super_decl)
193
+ @super_decl = super_decl
194
+
195
+ super "#{Location.to_string(super_decl.location)}: Cannot inherit a module: #{super_decl.name}"
196
+ end
197
+
198
+ def location
199
+ @super_decl.location
200
+ end
201
+
202
+ def self.check!(super_decl, env:)
203
+ super_name = env.normalize_type_name(super_decl.name)
204
+ return if env.class_decl?(super_name) || env.class_alias?(super_name)
205
+
206
+ raise new(super_decl)
207
+ end
208
+ end
209
+
210
+ class NoSelfTypeFoundError < DefinitionError
211
+ include DetailedMessageable
212
+
213
+ attr_reader :type_name
214
+ attr_reader :location
215
+
216
+ def initialize(type_name:, location:)
217
+ @type_name = type_name
218
+ @location = location
219
+
220
+ super "#{Location.to_string location}: Could not find self type: #{type_name}"
221
+ end
222
+
223
+ def self.check!(self_type, env:)
224
+ self_name = env.normalize_type_name(self_type.name)
225
+ (env.module_name?(self_name) || env.interface_name?(self_name)) or raise new(type_name: self_type.name, location: self_type.location)
226
+ end
227
+ end
228
+
229
+ class NoMixinFoundError < DefinitionError
230
+ include DetailedMessageable
231
+
232
+ attr_reader :type_name
233
+ attr_reader :member
234
+
235
+ def initialize(type_name:, member:)
236
+ @type_name = type_name
237
+ @member = member
238
+
239
+ super "#{Location.to_string location}: Could not find mixin: #{type_name}"
240
+ end
241
+
242
+ def location
243
+ member.location
244
+ end
245
+
246
+ def self.check!(type_name, env:, member:)
247
+ (env.module_name?(type_name) || env.interface_name?(type_name)) or raise new(type_name: type_name, member: member)
248
+ end
249
+ end
250
+
251
+ class DuplicatedMethodDefinitionError < DefinitionError
252
+ include DetailedMessageable
253
+
254
+ attr_reader :type
255
+ attr_reader :method_name
256
+ attr_reader :members
257
+
258
+ def initialize(type:, method_name:, members:)
259
+ @type = type
260
+ @method_name = method_name
261
+ @members = members
262
+
263
+ message = +"#{Location.to_string location}: #{qualified_method_name} has duplicated definitions"
264
+ if members.size > 1
265
+ message << " in #{other_locations.map { |loc| Location.to_string loc }.join(', ')}"
266
+ end
267
+ super message
268
+ end
269
+
270
+ def qualified_method_name
271
+ case type
272
+ when Types::ClassSingleton
273
+ "#{type.name}.#{method_name}"
274
+ else
275
+ "#{type.name}##{method_name}"
276
+ end
277
+ end
278
+
279
+ def type_name
280
+ type.name
281
+ end
282
+
283
+ def location
284
+ members[0].location
285
+ end
286
+
287
+ def other_locations
288
+ members.drop(1).map(&:location)
289
+ end
290
+ end
291
+
292
+ class DuplicatedInterfaceMethodDefinitionError < DefinitionError
293
+ include DetailedMessageable
294
+
295
+ attr_reader :type
296
+ attr_reader :method_name
297
+ attr_reader :member
298
+
299
+ def initialize(type:, method_name:, member:)
300
+ @type = type
301
+ @method_name = method_name
302
+ @member = member
303
+
304
+ super "#{member.location}: Duplicated method definition: #{qualified_method_name}"
305
+ end
306
+
307
+ def location
308
+ member.location
309
+ end
310
+
311
+ def qualified_method_name
312
+ case type
313
+ when Types::ClassSingleton
314
+ "#{type.name}.#{method_name}"
315
+ else
316
+ "#{type.name}##{method_name}"
317
+ end
318
+ end
319
+
320
+ def type_name
321
+ type.name
322
+ end
323
+ end
324
+
325
+ class VariableDuplicationError < DefinitionError
326
+ include DetailedMessageable
327
+
328
+ attr_reader :type_name
329
+ attr_reader :variable_name
330
+ attr_reader :location
331
+
332
+ def initialize(type_name:, variable_name:, location:)
333
+ @type_name = type_name
334
+ @variable_name = variable_name
335
+ @location = location
336
+
337
+ super "#{Location.to_string location}: Duplicated #{kind} variable name `#{variable_name}` in `#{type_name}`"
338
+ end
339
+ end
340
+
341
+ class InstanceVariableDuplicationError < VariableDuplicationError
342
+ def kind = 'instance'
343
+ end
344
+
345
+ class ClassInstanceVariableDuplicationError < VariableDuplicationError
346
+ def kind = 'class instance'
347
+ end
348
+
349
+ class UnknownMethodAliasError < DefinitionError
350
+ include DetailedMessageable
351
+
352
+ attr_reader :type_name
353
+ attr_reader :original_name
354
+ attr_reader :aliased_name
355
+ attr_reader :location
356
+
357
+ def initialize(type_name:, original_name:, aliased_name:, location:)
358
+ @type_name = type_name
359
+ @original_name = original_name
360
+ @aliased_name = aliased_name
361
+ @location = location
362
+
363
+ super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name} (#{type_name})"
364
+ end
365
+ end
366
+
367
+ class SuperclassMismatchError < DefinitionError
368
+ attr_reader :name
369
+ attr_reader :entry
370
+
371
+ def initialize(name:, entry:)
372
+ @name = name
373
+ @entry = entry
374
+ super "#{Location.to_string entry.primary_decl.location}: Superclass mismatch: #{name}"
375
+ end
376
+ end
377
+
378
+ class InvalidOverloadMethodError < DefinitionError
379
+ include DetailedMessageable
380
+
381
+ attr_reader :type_name
382
+ attr_reader :method_name
383
+ attr_reader :kind
384
+ attr_reader :members
385
+
386
+ def initialize(type_name:, method_name:, kind:, members:)
387
+ @type_name = type_name
388
+ @method_name = method_name
389
+ @kind = kind
390
+ @members = members
391
+
392
+ delimiter = case kind
393
+ when :instance
394
+ "#"
395
+ when :singleton
396
+ "."
397
+ end
398
+
399
+ super "#{Location.to_string members[0].location}: Invalid method overloading: #{type_name}#{delimiter}#{method_name}"
400
+ end
401
+
402
+ def location
403
+ members[0].location
404
+ end
405
+ end
406
+
407
+ class GenericParameterMismatchError < LoadingError
408
+ attr_reader :name
409
+ attr_reader :decl
410
+
411
+ def initialize(name:, decl:, location: nil)
412
+ @name = name
413
+ @decl = decl
414
+ location ||= decl.location
415
+ super "#{Location.to_string location}: Generic parameters mismatch: #{name}"
416
+ end
417
+ end
418
+
419
+ class DuplicatedDeclarationError < LoadingError
420
+ attr_reader :name
421
+ attr_reader :decls
422
+
423
+ def initialize(name, *decls)
424
+ @name = name
425
+ @decls = decls
426
+
427
+ last_decl = decls.last or raise
428
+ super "#{Location.to_string last_decl.location}: Duplicated declaration: #{name}"
429
+ end
430
+ end
431
+
432
+ class InvalidVarianceAnnotationError < DefinitionError
433
+ include DetailedMessageable
434
+
435
+ attr_reader :type_name
436
+ attr_reader :param
437
+ attr_reader :location
438
+
439
+ def initialize(type_name:, param:, location:)
440
+ @type_name = type_name
441
+ @param = param
442
+ @location = location
443
+
444
+ super "#{Location.to_string location}: Type parameter variance error: #{param.name} is #{param.variance} but used as incompatible variance"
445
+ end
446
+ end
447
+
448
+ class RecursiveAliasDefinitionError < DefinitionError
449
+ include DetailedMessageable
450
+
451
+ attr_reader :type
452
+ attr_reader :defs
453
+
454
+ def initialize(type:, defs:)
455
+ @type = type
456
+ @defs = defs
457
+
458
+ super "#{Location.to_string location}: Recursive aliases in #{type}: #{defs.map(&:name).join(", ")}"
459
+ end
460
+
461
+ def location
462
+ first_def = defs.first or raise
463
+ original = first_def.original or raise
464
+ original.location
465
+ end
466
+ end
467
+
468
+ class MixinClassError < DefinitionError
469
+ include DetailedMessageable
470
+
471
+ attr_reader :type_name
472
+ attr_reader :member
473
+
474
+ def initialize(type_name:, member:)
475
+ @type_name = type_name
476
+ @member = member
477
+
478
+ super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member_name(member)}` in the definition of `#{type_name}`"
479
+ end
480
+
481
+ def location
482
+ member.location
483
+ end
484
+
485
+ def self.check!(type_name:, env:, member:)
486
+ name = case member
487
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
488
+ member.name
489
+ when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
490
+ member.module_name
491
+ else
492
+ raise "Unknown member type: #{member.class}"
493
+ end
494
+
495
+ if env.class_decl?(name)
496
+ raise new(type_name: type_name, member: member)
497
+ end
498
+ end
499
+
500
+ private
501
+
502
+ def member_name(member)
503
+ case member
504
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
505
+ member.name
506
+ when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
507
+ member.module_name
508
+ else
509
+ raise "Unknown member type: #{member.class}"
510
+ end
511
+ end
512
+
513
+ def mixin_name
514
+ case member
515
+ when AST::Members::Prepend, AST::Ruby::Members::PrependMember
516
+ "prepend"
517
+ when AST::Members::Include, AST::Ruby::Members::IncludeMember
518
+ "include"
519
+ when AST::Members::Extend, AST::Ruby::Members::ExtendMember
520
+ "extend"
521
+ else
522
+ raise "Unknown member type: #{member.class}"
523
+ end
524
+ end
525
+ end
526
+
527
+ class RecursiveTypeAliasError < BaseError
528
+ include DetailedMessageable
529
+
530
+ attr_reader :alias_names
531
+ attr_reader :location
532
+
533
+ def initialize(alias_names:, location:)
534
+ @alias_names = alias_names
535
+ @location = location
536
+
537
+ super "#{Location.to_string location}: Recursive type alias definition found for: #{name}"
538
+ end
539
+
540
+ def name
541
+ @alias_names.map(&:name).join(', ')
542
+ end
543
+ end
544
+
545
+ class NonregularTypeAliasError < BaseError
546
+ include DetailedMessageable
547
+
548
+ attr_reader :diagnostic
549
+ attr_reader :location
550
+
551
+ def initialize(diagnostic:, location:)
552
+ @diagnostic = diagnostic
553
+ @location = location
554
+
555
+ super "#{Location.to_string location}: Nonregular generic type alias is prohibited: #{diagnostic.type_name}, #{diagnostic.nonregular_type}"
556
+ end
557
+ end
558
+
559
+ class CyclicTypeParameterBound < BaseError
560
+ include DetailedMessageable
561
+
562
+ attr_reader :params, :type_name, :method_name, :location
563
+
564
+ def initialize(type_name:, method_name:, params:, location:)
565
+ @type_name = type_name
566
+ @method_name = method_name
567
+ @params = params
568
+ @location = location
569
+
570
+ super "#{Location.to_string(location)}: Cyclic type parameter bound is prohibited"
571
+ end
572
+ end
573
+
574
+ class InconsistentClassModuleAliasError < BaseError
575
+ include DetailedMessageable
576
+
577
+ attr_reader :alias_entry
578
+
579
+ def initialize(entry)
580
+ @alias_entry = entry
581
+
582
+ expected_kind, actual_kind =
583
+ case entry
584
+ when Environment::ModuleAliasEntry
585
+ ["module", "class"]
586
+ when Environment::ClassAliasEntry
587
+ ["class", "module"]
588
+ end
589
+
590
+ super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{expected_kind} `#{entry.decl.new_name}` cannot be an alias of a #{actual_kind} `#{entry.decl.old_name}`"
591
+ end
592
+
593
+ def location
594
+ @alias_entry.decl.location
595
+ end
596
+ end
597
+
598
+ class CyclicClassAliasDefinitionError < BaseError
599
+ include DetailedMessageable
600
+
601
+ attr_reader :alias_entry
602
+
603
+ def initialize(entry)
604
+ @alias_entry = entry
605
+
606
+ super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{alias_entry.decl.new_name} is a cyclic definition"
607
+ end
608
+
609
+ def location
610
+ @alias_entry.decl.location
611
+ end
612
+ end
613
+
614
+ class TypeParamDefaultReferenceError < DefinitionError
615
+ include DetailedMessageable
616
+
617
+ attr_reader :type_param
618
+ attr_reader :location
619
+
620
+ def initialize(type_param, location:)
621
+ super "#{Location.to_string(location)}: the default of #{type_param.name} cannot include optional type parameter"
622
+ @location = location
623
+ @type_param = type_param
624
+ end
625
+
626
+ def self.check!(type_params)
627
+ if errors = AST::TypeParam.validate(type_params)
628
+ error = errors[0] or raise
629
+ error.default_type or raise
630
+ raise new(error, location: error.default_type.location)
631
+ end
632
+ end
633
+ end
634
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Factory
5
+ def type_name(string)
6
+ absolute = string.start_with?("::")
7
+
8
+ *path, name = string.delete_prefix("::").split("::").map(&:to_sym)
9
+
10
+ name or raise
11
+
12
+ TypeName.new(
13
+ name: name,
14
+ namespace: Namespace.new(path: path, absolute: absolute)
15
+ )
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module FileFinder
5
+ module_function
6
+
7
+ def self.each_file(path, immediate: nil, skip_hidden:, &block)
8
+ return enum_for((__method__ or raise), path, immediate: immediate, skip_hidden: skip_hidden) unless block
9
+
10
+ case
11
+ when path.file?
12
+ yield path
13
+
14
+ when path.directory?
15
+ paths = Pathname.glob("#{path}/**/*.rbs")
16
+
17
+ if skip_hidden
18
+ paths.select! do |child|
19
+ child.relative_path_from(path).ascend.drop(1).none? { _1.basename.to_s.start_with?("_") }
20
+ end
21
+ end
22
+ paths.sort_by!(&:to_s)
23
+
24
+ paths.each(&block)
25
+ end
26
+ end
27
+ end
28
+ end