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,177 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module UnitTest
5
+ module Convertibles
6
+ class BlankSlate < BasicObject
7
+ instance_methods.each do |im|
8
+ next if im == :__id__
9
+ next if im == :__send__
10
+ undef_method im
11
+ end
12
+
13
+ def __with_object_methods(*methods)
14
+ methods.each do |method|
15
+ singleton_class = ::Object.instance_method(:singleton_class).bind_call(self) #: Class
16
+ singleton_class.instance_eval do
17
+ define_method method, ::Object.instance_method(method)
18
+ end
19
+ end
20
+ self
21
+ end
22
+ end
23
+
24
+ class ToIO < BlankSlate
25
+ def initialize(io = $stdout)
26
+ @io = io
27
+ end
28
+
29
+ def to_io
30
+ @io
31
+ end
32
+ end
33
+
34
+ class ToI < BlankSlate
35
+ def initialize(value = 3)
36
+ @value = value
37
+ end
38
+
39
+ def to_i
40
+ @value
41
+ end
42
+ end
43
+
44
+ class ToInt < BlankSlate
45
+ def initialize(value = 3)
46
+ @value = value
47
+ end
48
+
49
+ def to_int
50
+ @value
51
+ end
52
+ end
53
+
54
+ class ToF < BlankSlate
55
+ def initialize(value = 0.1)
56
+ @value = value
57
+ end
58
+
59
+ def to_f
60
+ @value
61
+ end
62
+ end
63
+
64
+ class ToR < BlankSlate
65
+ def initialize(value = 1r)
66
+ @value = value
67
+ end
68
+
69
+ def to_r
70
+ @value
71
+ end
72
+ end
73
+
74
+ class ToC < BlankSlate
75
+ def initialize(value = 1i)
76
+ @value = value
77
+ end
78
+
79
+ def to_c
80
+ @value
81
+ end
82
+ end
83
+
84
+ class ToStr < BlankSlate
85
+ def initialize(value = "")
86
+ @value = value
87
+ end
88
+
89
+ def to_str
90
+ @value
91
+ end
92
+ end
93
+
94
+ class ToS < BlankSlate
95
+ def initialize(value = "")
96
+ @value = value
97
+ end
98
+
99
+ def to_s
100
+ @value
101
+ end
102
+ end
103
+
104
+ class ToSym < BlankSlate
105
+ def initialize(value = :&)
106
+ @value = value
107
+ end
108
+
109
+ def to_sym
110
+ @value
111
+ end
112
+ end
113
+
114
+ class ToA < BlankSlate
115
+ def initialize(*args)
116
+ @args = args
117
+ end
118
+
119
+ def to_a
120
+ @args
121
+ end
122
+ end
123
+
124
+ class ToArray < BlankSlate
125
+ def initialize(*args)
126
+ @args = args
127
+ end
128
+
129
+ def to_ary
130
+ @args
131
+ end
132
+ end
133
+
134
+ class ToHash < BlankSlate
135
+ def initialize(hash = { 'hello' => 'world' })
136
+ @hash = hash
137
+ end
138
+
139
+ def to_hash
140
+ @hash
141
+ end
142
+ end
143
+
144
+ class ToPath < BlankSlate
145
+ def initialize(value = "")
146
+ @value = value
147
+ end
148
+
149
+ def to_path
150
+ @value
151
+ end
152
+ end
153
+
154
+ class CustomRange < BlankSlate
155
+ attr_reader :begin, :end
156
+
157
+ def initialize(begin_, end_, exclude_end = false)
158
+ @begin = begin_
159
+ @end = end_
160
+ @exclude_end = exclude_end
161
+ end
162
+
163
+ def exclude_end? = @exclude_end
164
+ end
165
+
166
+ class Each < BlankSlate
167
+ def initialize(*args)
168
+ @args = args
169
+ end
170
+
171
+ def each(&block)
172
+ @args.each(&block)
173
+ end
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module UnitTest
5
+ module Spy
6
+ def self.wrap(object, method_name)
7
+ spy = WrapSpy.new(object: object, method_name: method_name)
8
+
9
+ if block_given?
10
+ begin
11
+ yield spy, spy.wrapped_object
12
+ end
13
+ else
14
+ spy
15
+ end
16
+ end
17
+
18
+ class WrapSpy
19
+ attr_accessor :callback
20
+ attr_reader :object
21
+ attr_reader :method_name
22
+
23
+ NO_RETURN = Object.new
24
+
25
+ def initialize(object:, method_name:)
26
+ @callback = -> (_) { }
27
+ @object = object
28
+ @method_name = method_name
29
+ end
30
+
31
+ def wrapped_object
32
+ spy = self #: WrapSpy[untyped]
33
+
34
+ Class.new(BasicObject) do
35
+ # @type self: Class
36
+
37
+ define_method(:method_missing) do |name, *args, &block|
38
+ spy.object.__send__(name, *args, &block)
39
+ end
40
+
41
+ define_method(
42
+ spy.method_name,
43
+ _ = -> (*args, &block) do
44
+ return_value = NO_RETURN
45
+ exception = nil
46
+ block_calls = [] #: Array[Test::ArgumentsReturn]
47
+
48
+ spy_block = if block
49
+ Object.new.instance_eval do |fresh|
50
+ proc = -> (*block_args) do
51
+ block_exn = nil
52
+ block_return = nil
53
+
54
+ begin
55
+ block_return = if self.equal?(fresh)
56
+ # no instance eval
57
+ block.call(*block_args)
58
+ else
59
+ self.instance_exec(*block_args, &block)
60
+ end
61
+ rescue Exception => exn
62
+ block_exn = exn
63
+ end
64
+
65
+ if block_exn
66
+ block_calls << Test::ArgumentsReturn.exception(
67
+ arguments: block_args,
68
+ exception: block_exn
69
+ )
70
+ else
71
+ block_calls << Test::ArgumentsReturn.return(
72
+ arguments: block_args,
73
+ value: block_return
74
+ )
75
+ end
76
+
77
+ if block_exn
78
+ raise block_exn
79
+ else
80
+ block_return
81
+ end
82
+ end #: Proc
83
+
84
+ proc.ruby2_keywords
85
+ end
86
+ end
87
+
88
+ begin
89
+ if spy_block
90
+ return_value = spy.object.__send__(spy.method_name, *args) do |*a, **k, &b|
91
+ spy_block.call(*a, **k, &b)
92
+ end
93
+ else
94
+ return_value = spy.object.__send__(spy.method_name, *args, &spy_block)
95
+ end
96
+ rescue ::Exception => exn
97
+ exception = exn
98
+ end
99
+
100
+ return_value
101
+
102
+ ensure
103
+ call =
104
+ case
105
+ when exception
106
+ Test::ArgumentsReturn.exception(
107
+ arguments: args,
108
+ exception: exception
109
+ )
110
+ when ::RBS::UnitTest::Spy::WrapSpy::NO_RETURN != return_value
111
+ Test::ArgumentsReturn.return(
112
+ arguments: args,
113
+ value: return_value
114
+ )
115
+ else
116
+ # break
117
+ Test::ArgumentsReturn.break(arguments: args)
118
+ end
119
+ trace = RBS::Test::CallTrace.new(
120
+ method_name: spy.method_name,
121
+ method_call: call,
122
+ block_calls: block_calls,
123
+ block_given: block != nil
124
+ )
125
+
126
+ spy.callback.call(trace)
127
+
128
+ if exception
129
+ spy.object.__send__(:raise, exception)
130
+ end
131
+ end.ruby2_keywords
132
+ )
133
+ end.allocate()
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,383 @@
1
+ # frozen_string_literal: true
2
+ module RBS
3
+ module UnitTest
4
+ module TypeAssertions
5
+ module ClassMethods
6
+ attr_reader :target
7
+
8
+ def library(*libs)
9
+ if @libs
10
+ raise "Multiple #library calls are not allowed"
11
+ end
12
+
13
+ @libs = libs
14
+ @env = nil
15
+ @target = nil
16
+ end
17
+
18
+ @@env_cache = {} #: Hash[Array[String], RBS::Environment]
19
+
20
+ def env
21
+ @env = @@env_cache[@libs] ||=
22
+ begin
23
+ loader = RBS::EnvironmentLoader.new
24
+ (@libs || []).each do |lib|
25
+ loader.add(library: lib, version: nil)
26
+ end
27
+
28
+ RBS::Environment.from_loader(loader).resolve_type_names
29
+ end
30
+ end
31
+
32
+ def builder
33
+ @builder ||= RBS::DefinitionBuilder.new(env: env)
34
+ end
35
+
36
+ def testing(type_or_string)
37
+ type = case type_or_string
38
+ when String
39
+ RBS::Parser.parse_type(type_or_string, variables: []) || raise
40
+ else
41
+ type_or_string
42
+ end
43
+
44
+ definition = case type
45
+ when RBS::Types::ClassInstance
46
+ builder.build_instance(type.name)
47
+ when RBS::Types::ClassSingleton
48
+ builder.build_singleton(type.name)
49
+ else
50
+ raise "Test target should be class instance or class singleton: #{type}"
51
+ end
52
+
53
+ @target = [type, definition] #: [target_type, Definition]
54
+ end
55
+ end
56
+
57
+ def self.included(base)
58
+ base.extend ClassMethods
59
+ end
60
+
61
+ def env
62
+ (_ = self.class).env
63
+ end
64
+
65
+ def builder
66
+ (_ = self.class).builder
67
+ end
68
+
69
+ def targets
70
+ @targets ||= []
71
+ end
72
+
73
+ def target
74
+ targets.last || (_ = self.class).target
75
+ end
76
+
77
+ def testing(type_or_string)
78
+ type = case type_or_string
79
+ when String
80
+ RBS::Parser.parse_type(type_or_string, variables: [])
81
+ else
82
+ type_or_string
83
+ end
84
+
85
+ definition = case type
86
+ when RBS::Types::ClassInstance
87
+ builder.build_instance(type.name)
88
+ when RBS::Types::ClassSingleton
89
+ builder.build_singleton(type.name)
90
+ else
91
+ raise "Test target should be class instance or class singleton: #{type}"
92
+ end
93
+
94
+ targets.push(
95
+ [
96
+ type, #: target_type
97
+ definition
98
+ ]
99
+ )
100
+
101
+ if block_given?
102
+ begin
103
+ yield
104
+ ensure
105
+ targets.pop
106
+ end
107
+ else
108
+ [type, definition]
109
+ end
110
+ end
111
+
112
+ def instance_class
113
+ type, _ = target
114
+
115
+ case type
116
+ when RBS::Types::ClassSingleton, RBS::Types::ClassInstance
117
+ Object.const_get(type.name.to_s)
118
+ end
119
+ end
120
+
121
+ def class_class
122
+ type, _ = target
123
+
124
+ case type
125
+ when RBS::Types::ClassSingleton, RBS::Types::ClassInstance
126
+ Object.const_get(type.name.to_s).singleton_class
127
+ end
128
+ end
129
+
130
+ def send_setup(method_type, receiver, method, args, proc)
131
+ mt =
132
+ case method_type
133
+ when String
134
+ RBS::Parser.parse_method_type(method_type, variables: []) || raise
135
+ when RBS::MethodType
136
+ method_type
137
+ end
138
+
139
+ validate_simple_method_type(mt)
140
+
141
+ trace = [] #: Array[Test::CallTrace]
142
+ spy = Spy.wrap(receiver, method)
143
+ spy.callback = -> (result) { trace << result }
144
+
145
+ result = nil #: untyped
146
+ exception = nil #: Exception?
147
+ non_jump_exit = true
148
+
149
+ begin
150
+ result = catch do |tag|
151
+ @break_tag = tag
152
+ spy.wrapped_object.__send__(method, *args, &proc)
153
+ ensure
154
+ @break_tag = nil
155
+ end
156
+
157
+ non_jump_exit = false
158
+ rescue Exception => exn
159
+ exception = exn
160
+ ensure
161
+ if non_jump_exit && !exception
162
+ raise "`break` nor `return` from blocks given to `assert_send_type` are prohibited. Use `#break_from_block` instead."
163
+ end
164
+ end
165
+
166
+ last_trace = trace.last or raise "empty trace"
167
+
168
+ yield(mt, last_trace, result, exception)
169
+ end
170
+
171
+ ruby2_keywords def assert_send_type(method_type, receiver, method, *args, &block)
172
+ send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
173
+ typecheck = RBS::Test::TypeCheck.new(
174
+ self_class: receiver.class,
175
+ builder: builder,
176
+ sample_size: 100,
177
+ unchecked_classes: [],
178
+ instance_class: instance_class,
179
+ class_class: class_class
180
+ )
181
+ errors = typecheck.method_call(method, method_type, trace, errors: [])
182
+
183
+ assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.inspect}"
184
+
185
+ method_defs = method_defs(method)
186
+ all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
187
+ assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
188
+
189
+ raise exception if exception
190
+
191
+ result
192
+ end
193
+ end
194
+
195
+ ruby2_keywords def assert_send_type_error(method_type, error_type, receiver, method, *args, &block)
196
+ send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
197
+ typecheck = RBS::Test::TypeCheck.new(
198
+ self_class: receiver.class,
199
+ builder: builder,
200
+ sample_size: 100,
201
+ unchecked_classes: [],
202
+ instance_class: instance_class,
203
+ class_class: class_class
204
+ )
205
+ errors = typecheck.method_call(method, method_type, trace, errors: [])
206
+
207
+ assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.inspect}"
208
+
209
+ method_defs = method_defs(method)
210
+ all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
211
+ assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
212
+
213
+ # Use `instnace_of?` instead of `is_a?` as we want to check for _the exact exception class_.
214
+ assert exception.instance_of? error_type
215
+
216
+ result
217
+ end
218
+ end
219
+
220
+ ruby2_keywords def refute_send_type(method_type, receiver, method, *args, &block)
221
+ send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
222
+ method_type = method_type.update(
223
+ block:
224
+ if method_type.block
225
+ RBS::Types::Block.new(
226
+ type: method_type.block.type.with_return_type(RBS::Types::Bases::Any.new(location: nil)),
227
+ required: method_type.block.required,
228
+ self_type: nil
229
+ )
230
+ end,
231
+ type: method_type.type.with_return_type(RBS::Types::Bases::Any.new(location: nil))
232
+ )
233
+
234
+ typecheck = RBS::Test::TypeCheck.new(
235
+ self_class: receiver.class,
236
+ instance_class: instance_class,
237
+ class_class: class_class,
238
+ builder: builder,
239
+ sample_size: 100,
240
+ unchecked_classes: []
241
+ )
242
+ errors = typecheck.method_call(method, method_type, trace, errors: [])
243
+
244
+ assert_operator exception, :is_a?, ::Exception
245
+ assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }
246
+
247
+ method_defs = method_defs(method)
248
+ all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
249
+ assert all_errors.all? {|es| es.size > 0 }, "Call trace unexpectedly matches one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
250
+
251
+ result
252
+ end
253
+ end
254
+
255
+ def method_defs(method)
256
+ type, definition = target
257
+
258
+ case type
259
+ when Types::ClassInstance, Types::ClassSingleton
260
+ if type.is_a?(Types::ClassSingleton) && type.args.empty?
261
+ definition.methods[method].defs
262
+ else
263
+ subst = RBS::Substitution.build(definition.type_params, type.args)
264
+ definition.methods[method].defs.map do |type_def|
265
+ type_def.update(
266
+ type: type_def.type.sub(subst)
267
+ )
268
+ end
269
+ end
270
+ else
271
+ raise
272
+ end
273
+ end
274
+
275
+ def method_types(method)
276
+ method_defs(method).map(&:type)
277
+ end
278
+
279
+ def allows_error(*errors)
280
+ yield
281
+ rescue *errors => exn
282
+ notify "Error allowed: #{exn.inspect}"
283
+ end
284
+
285
+ def assert_const_type(type, constant_name)
286
+ constant = Object.const_get(constant_name)
287
+
288
+ typecheck = RBS::Test::TypeCheck.new(
289
+ self_class: constant.class,
290
+ instance_class: instance_class,
291
+ class_class: class_class,
292
+ builder: builder,
293
+ sample_size: 100,
294
+ unchecked_classes: []
295
+ )
296
+
297
+ value_type =
298
+ case type
299
+ when String
300
+ RBS::Parser.parse_type(type, variables: []) || raise
301
+ else
302
+ type
303
+ end
304
+
305
+ assert typecheck.value(constant, value_type), "`#{constant_name}` (#{constant.inspect}) must be compatible with given type `#{value_type}`"
306
+
307
+ type_name = TypeName.parse(constant_name).absolute!
308
+ definition = env.constant_entry(type_name)
309
+ assert definition, "Cannot find RBS type definition of `#{constant_name}`"
310
+
311
+ case definition
312
+ when RBS::Environment::ClassEntry, RBS::Environment::ModuleEntry
313
+ definition_type = RBS::Types::ClassSingleton.new(name: type_name, location: nil)
314
+ when RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
315
+ type_name = env.normalize_type_name!(type_name)
316
+ definition_type = RBS::Types::ClassSingleton.new(name: type_name, location: nil)
317
+ when RBS::Environment::ConstantEntry
318
+ definition_type = definition.decl.type
319
+ end
320
+
321
+ assert definition_type, "Cannot find RBS entry for `#{constant_name}`"
322
+ definition_type or raise
323
+ assert typecheck.value(constant, definition_type), "`#{constant_name}` (#{constant.inspect}) must be compatible with RBS type definition `#{definition_type}`"
324
+ end
325
+
326
+ def assert_visibility(visibility, method)
327
+ _, definition = target
328
+ method_entry = definition.methods[method]
329
+
330
+ assert method_entry, "Method `#{method}` not found in RBS definition"
331
+ assert visibility == method_entry.accessibility,
332
+ "Expected `#{method}` to be #{visibility}, but was #{method_entry.accessibility}"
333
+ end
334
+
335
+ def assert_type(type, value)
336
+ typecheck = RBS::Test::TypeCheck.new(
337
+ self_class: value.class,
338
+ instance_class: _ = "No `instance` class allowed",
339
+ class_class: _ = "No `class` class allowed",
340
+ builder: builder,
341
+ sample_size: 100,
342
+ unchecked_classes: []
343
+ )
344
+
345
+ type =
346
+ case type
347
+ when String
348
+ RBS::Parser.parse_type(type, variables: []) or raise
349
+ else
350
+ type
351
+ end
352
+
353
+ assert typecheck.value(value, type), "`#{value.inspect}` must be compatible with given type `#{type}`"
354
+ end
355
+
356
+ def allow_non_simple_method_type()
357
+ begin
358
+ @allows_non_simple_method_type = true
359
+ yield
360
+ rescue
361
+ @allows_non_simple_method_type = false
362
+ end
363
+ end
364
+
365
+ def validate_simple_method_type(type)
366
+ return if @allows_non_simple_method_type
367
+
368
+ refute_predicate type, :has_self_type?, "`self` types is prohibited in method type: `#{type}`"
369
+ refute_predicate type, :has_classish_type?, "`instance` and `class` types is prohibited in method type: `#{type}`"
370
+ refute_predicate type, :with_nonreturn_void?, "`void` is only allowed at return type or generics parameters: `#{type}`"
371
+ end
372
+
373
+ def break_from_block(value = nil)
374
+ raise "Cannot break without `@break_tag`" unless @break_tag
375
+ throw @break_tag, value
376
+ end
377
+
378
+ def pass(message = nil)
379
+ assert true, message
380
+ end
381
+ end
382
+ end
383
+ end