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/sorter.rb ADDED
@@ -0,0 +1,198 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Sorter
5
+ include RBS::AST
6
+
7
+ attr_reader :path, :stdout
8
+
9
+ def initialize(path, stdout: $stdout)
10
+ @path = path
11
+ @stdout = stdout
12
+ end
13
+
14
+ def run
15
+ stdout.puts "Opening #{path}..."
16
+
17
+ buffer = Buffer.new(name: path, content: path.read)
18
+ _, _, sigs = Parser.parse_signature(buffer)
19
+
20
+ sigs = sigs.map do |m|
21
+ sort_decl m
22
+ end
23
+
24
+ stdout.puts "Writing #{path}..."
25
+ path.open('w') do |out|
26
+ writer = RBS::Writer.new(out: out)
27
+ writer.write _ = sigs
28
+ end
29
+ end
30
+
31
+ def sort_decl(decl)
32
+ case decl
33
+ when Declarations::Class, Declarations::Module, Declarations::Interface
34
+ partitioned = {
35
+ type_alias_decls: [],
36
+ constant_decls: [],
37
+ class_decls: [],
38
+ mixin_includes: [],
39
+ mixin_prepends: [],
40
+ mixin_extends: [],
41
+ class_variables: [],
42
+ class_instance_variables: [],
43
+ instance_variables: [],
44
+ singleton_attributes: [],
45
+ instance_attributes: [],
46
+ module_functions: [],
47
+ singleton_new_methods: [],
48
+ public_singleton_methods: [],
49
+ private_singleton_methods: [],
50
+ instance_initialize_methods: [],
51
+ public_instance_methods: [],
52
+ private_instance_methods: [],
53
+ } #: partitioned
54
+
55
+ members = decl.members.map { |m| sort_decl m }
56
+ decl = decl.update(members: _ = members)
57
+
58
+ visibility_annotated_members = [] #: Array[member]
59
+
60
+ decl.members.inject(:public) do |current_visibility, member| #$ AST::Members::visibility
61
+ case member
62
+ when Members::Public
63
+ :public
64
+ when Members::Private
65
+ :private
66
+ when Members::MethodDefinition, Members::AttrReader, Members::AttrWriter, Members::AttrAccessor
67
+ visibility_annotated_members << member.update(visibility: member.visibility || current_visibility)
68
+ current_visibility
69
+ else
70
+ visibility_annotated_members << member
71
+ current_visibility
72
+ end
73
+ end
74
+
75
+ visibility_annotated_members.each do |member|
76
+ case member
77
+ when Declarations::TypeAlias
78
+ partitioned[:type_alias_decls] << member
79
+ when Declarations::Constant
80
+ partitioned[:constant_decls] << member
81
+ when Declarations::Class, Declarations::Module, Declarations::Interface
82
+ partitioned[:class_decls] << member
83
+ when Members::Include
84
+ partitioned[:mixin_includes] << member
85
+ when Members::Prepend
86
+ partitioned[:mixin_prepends] << member
87
+ when Members::Extend
88
+ partitioned[:mixin_extends] << member
89
+ when Members::ClassVariable
90
+ partitioned[:class_variables] << member
91
+ when Members::ClassInstanceVariable
92
+ partitioned[:class_instance_variables] << member
93
+ when Members::InstanceVariable
94
+ partitioned[:instance_variables] << member
95
+ when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
96
+ if member.kind == :singleton
97
+ partitioned[:singleton_attributes] << member.update(visibility: nil)
98
+ else
99
+ partitioned[:instance_attributes] << member.update(visibility: nil)
100
+ end
101
+ when Members::MethodDefinition
102
+ case member.kind
103
+ when :singleton_instance
104
+ partitioned[:module_functions] << member.update(visibility: nil)
105
+ when :singleton
106
+ if member.name == :new
107
+ partitioned[:singleton_new_methods] << member.update(visibility: nil)
108
+ elsif member.visibility == :public
109
+ partitioned[:public_singleton_methods] << member.update(visibility: nil)
110
+ else
111
+ partitioned[:private_singleton_methods] << member.update(visibility: nil)
112
+ end
113
+ else
114
+ if member.name == :initialize
115
+ partitioned[:instance_initialize_methods] << member.update(visibility: nil)
116
+ elsif member.visibility == :public
117
+ partitioned[:public_instance_methods] << member.update(visibility: nil)
118
+ else
119
+ partitioned[:private_instance_methods] << member.update(visibility: nil)
120
+ end
121
+ end
122
+ when Members::Alias
123
+ if member.singleton?
124
+ partitioned[:public_singleton_methods] << member
125
+ else
126
+ partitioned[:public_instance_methods] << member
127
+ end
128
+ when Members::Public, Members::Private
129
+ raise
130
+ else
131
+ partitioned[:other_decls] << member
132
+ end
133
+ end
134
+
135
+ partitioned[:type_alias_decls].sort_by! {|decl| decl.name.to_s }
136
+ partitioned[:constant_decls].sort_by! {|decl| decl.name.to_s }
137
+ partitioned[:class_decls].sort_by! {|decl| decl.name.to_s }
138
+ partitioned[:mixin_includes].sort_by! {|decl| decl.name.to_s }
139
+ partitioned[:mixin_prepends].sort_by! {|decl| decl.name.to_s }
140
+ partitioned[:mixin_extends].sort_by! {|decl| decl.name.to_s }
141
+ partitioned[:class_variables].sort_by! {|decl| decl.name.to_s }
142
+ partitioned[:class_instance_variables].sort_by! {|decl| decl.name.to_s }
143
+ partitioned[:instance_variables].sort_by! {|decl| decl.name.to_s }
144
+ partitioned[:singleton_attributes].sort_by! {|decl| decl.name.to_s }
145
+ partitioned[:instance_attributes].sort_by! {|decl| decl.name.to_s }
146
+ partitioned[:module_functions].sort_by! {|decl| decl.name.to_s }
147
+ partitioned[:public_singleton_methods].sort_by! {|decl| decl.is_a?(Members::MethodDefinition) ? decl.name.to_s : decl.new_name.to_s }
148
+ partitioned[:private_singleton_methods].sort_by! {|decl| decl.name.to_s }
149
+ partitioned[:public_instance_methods].sort_by! {|decl| decl.is_a?(Members::MethodDefinition) ? decl.name.to_s : decl.new_name.to_s }
150
+ partitioned[:private_instance_methods].sort_by! {|decl| decl.name.to_s }
151
+
152
+ members = [] #: Array[member]
153
+ members.push(*partitioned[:type_alias_decls])
154
+ members.push(*partitioned[:constant_decls])
155
+ members.push(*partitioned[:class_decls])
156
+ members.push(*partitioned[:mixin_includes])
157
+ members.push(*partitioned[:mixin_prepends])
158
+ members.push(*partitioned[:mixin_extends])
159
+ members.push(*partitioned[:class_variables])
160
+ members.push(*partitioned[:class_instance_variables])
161
+ members.push(*partitioned[:instance_variables])
162
+ members.push(*partitioned[:module_functions])
163
+ members.push(*partitioned[:singleton_attributes])
164
+
165
+ current_visibility = :public #: AST::Members::visibility
166
+
167
+ members.push(*partitioned[:singleton_new_methods])
168
+ members.push(*partitioned[:public_singleton_methods])
169
+
170
+ if !partitioned[:private_singleton_methods].empty?
171
+ current_visibility = :private
172
+ members.push Members::Private.new(location: nil)
173
+ end
174
+ members.push(*partitioned[:private_singleton_methods])
175
+
176
+ if current_visibility == :private && !partitioned[:public_instance_methods].empty?
177
+ current_visibility = :public
178
+ members.push Members::Public.new(location: nil)
179
+ end
180
+ members.push(*partitioned[:instance_attributes])
181
+ members.push(*partitioned[:instance_initialize_methods])
182
+ members.push(*partitioned[:public_instance_methods])
183
+
184
+ if current_visibility == :public && !partitioned[:private_instance_methods].empty?
185
+ current_visibility = :private
186
+ members.push Members::Private.new(location: nil)
187
+ end
188
+ members.push(*partitioned[:private_instance_methods])
189
+
190
+ members.push(*partitioned[:other_decls])
191
+
192
+ decl.update(members: _ = members)
193
+ else
194
+ decl
195
+ end
196
+ end
197
+ end
198
+ end
data/lib/rbs/source.rb ADDED
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Source
5
+ class RBS
6
+ attr_reader :buffer, :directives, :declarations
7
+
8
+ def initialize(buffer, directives, decls)
9
+ @buffer = buffer
10
+ @directives = directives
11
+ @declarations = decls
12
+ end
13
+
14
+ def each_type_name(&block)
15
+ if block
16
+ set = Set[] #: Set[TypeName]
17
+ declarations.each do |decl|
18
+ each_declaration_type_name(set, decl, &block)
19
+ end
20
+ else
21
+ enum_for :each_type_name
22
+ end
23
+ end
24
+
25
+ def each_declaration_type_name(names, decl, &block)
26
+ case decl
27
+ when AST::Declarations::Class
28
+ decl.each_decl { each_declaration_type_name(names, _1, &block) }
29
+ type_name = decl.name
30
+ when AST::Declarations::Module
31
+ decl.each_decl { each_declaration_type_name(names, _1, &block) }
32
+ type_name = decl.name
33
+ when AST::Declarations::Interface
34
+ type_name = decl.name
35
+ when AST::Declarations::TypeAlias
36
+ type_name = decl.name
37
+ when AST::Declarations::ModuleAlias
38
+ type_name = decl.new_name
39
+ when AST::Declarations::ClassAlias
40
+ type_name = decl.new_name
41
+ end
42
+
43
+ if type_name
44
+ unless names.include?(type_name)
45
+ yield type_name
46
+ names << type_name
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ class Ruby
53
+ attr_reader :buffer
54
+ attr_reader :prism_result
55
+ attr_reader :declarations
56
+ attr_reader :diagnostics
57
+
58
+ def initialize(buffer, prism, declarations, diagnostics)
59
+ @buffer = buffer
60
+ @prism_result = prism
61
+ @declarations = declarations
62
+ @diagnostics = diagnostics
63
+ end
64
+
65
+ def each_type_name(&block)
66
+ if block
67
+ names = Set[] #: Set[TypeName]
68
+ declarations.each do |decl|
69
+ each_declaration_type_name(names, decl, &block)
70
+ end
71
+ else
72
+ enum_for :each_type_name
73
+ end
74
+ end
75
+
76
+ def each_declaration_type_name(names, decl, &block)
77
+ case decl
78
+ when AST::Ruby::Declarations::ClassDecl
79
+ decl.each_decl do |d|
80
+ each_declaration_type_name(names, d, &block)
81
+ end
82
+ type_name = decl.class_name
83
+ when AST::Ruby::Declarations::ModuleDecl
84
+ decl.each_decl do |d|
85
+ each_declaration_type_name(names, d, &block)
86
+ end
87
+ type_name = decl.module_name
88
+ end
89
+
90
+ if type_name
91
+ unless names.include?(type_name)
92
+ yield type_name
93
+ names << type_name
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Substitution
5
+ attr_reader :mapping
6
+ attr_accessor :instance_type
7
+
8
+ def empty?
9
+ mapping.empty? && instance_type.nil?
10
+ end
11
+
12
+ def initialize()
13
+ @mapping = {}
14
+ end
15
+
16
+ def add(from:, to:)
17
+ mapping[from] = to
18
+ end
19
+
20
+ def self.build(variables, types, instance_type: nil, &block)
21
+ unless variables.size == types.size
22
+ raise "Broken substitution: variables=#{variables}, types=#{types}"
23
+ end
24
+
25
+ mapping = variables.zip(types).to_h
26
+
27
+ self.new.tap do |subst|
28
+ mapping.each do |v, t|
29
+ type = block_given? ? yield(t) : t
30
+ subst.add(from: v, to: type)
31
+ end
32
+
33
+ subst.instance_type = instance_type
34
+ end
35
+ end
36
+
37
+ def apply(ty)
38
+ case ty
39
+ when Types::Variable
40
+ # @type var ty: Types::Variable
41
+ mapping[ty.name] || ty
42
+ when Types::Bases::Instance
43
+ if t = instance_type
44
+ t
45
+ else
46
+ ty
47
+ end
48
+ else
49
+ ty
50
+ end
51
+ end
52
+
53
+ alias [] apply
54
+
55
+ def without(*vars)
56
+ Substitution.new.tap do |subst|
57
+ subst.mapping.merge!(mapping)
58
+ vars.each do |var|
59
+ subst.mapping.delete(var)
60
+ end
61
+
62
+ subst.instance_type = self.instance_type
63
+ end
64
+ end
65
+
66
+ def +(other)
67
+ return self if other.empty?
68
+ return other if self.empty?
69
+
70
+ Substitution.new.tap do |subst|
71
+ subst.mapping.merge!(mapping)
72
+
73
+ other.mapping.each do |var, type|
74
+ if mapping.key?(var)
75
+ subst.add(from: var, to: self[type])
76
+ else
77
+ subst.add(from: var, to: type)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,204 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Subtractor
5
+ def initialize(minuend, subtrahend)
6
+ @minuend = minuend
7
+ @subtrahend = subtrahend
8
+ end
9
+
10
+ def call(minuend = @minuend, context: nil)
11
+ minuend.map do |decl|
12
+ case decl
13
+ when AST::Declarations::Constant
14
+ name = absolute_typename(decl.name, context: context)
15
+ decl unless @subtrahend.constant_name?(name)
16
+ when AST::Declarations::Interface
17
+ name = absolute_typename(decl.name, context: context)
18
+ decl unless @subtrahend.interface_name?(name)
19
+ when AST::Declarations::Class, AST::Declarations::Module
20
+ name = absolute_typename(decl.name, context: context)
21
+ case
22
+ when @subtrahend.class_decl?(name) && decl.is_a?(AST::Declarations::Class)
23
+ filter_members(decl, context: context)
24
+ when @subtrahend.module_decl?(name) && decl.is_a?(AST::Declarations::Module)
25
+ filter_members(decl, context: context)
26
+ when @subtrahend.constant_name?(name)
27
+ nil
28
+ else
29
+ decl
30
+ end
31
+ when AST::Declarations::Global
32
+ decl unless @subtrahend.global_decls[decl.name]
33
+ when AST::Declarations::TypeAlias
34
+ name = absolute_typename(decl.name, context: context)
35
+ decl unless @subtrahend.type_alias_decls[name]
36
+ when AST::Declarations::ClassAlias
37
+ name = absolute_typename(decl.new_name, context: context)
38
+ decl unless @subtrahend.class_alias?(name) || @subtrahend.class_decl?(name)
39
+ when AST::Declarations::ModuleAlias
40
+ name = absolute_typename(decl.new_name, context: context)
41
+ decl unless @subtrahend.module_alias?(name) || @subtrahend.module_decl?(name)
42
+ else
43
+ raise "unknown decl: #{(_ = decl).class}"
44
+ end
45
+ end.compact
46
+ end
47
+
48
+ private def filter_members(decl, context:)
49
+ owner = absolute_typename(decl.name, context: context)
50
+
51
+ context = _ = [context, decl.name]
52
+ children = call(decl.each_decl.to_a, context: context) +
53
+ decl.each_member.reject { |m| member_exist?(owner, m, context: context) }
54
+ children = filter_redundant_access_modifiers(children)
55
+ return nil if children.empty?
56
+
57
+ update_decl(decl, members: children)
58
+ end
59
+
60
+ private def member_exist?(owner, member, context:)
61
+ case member
62
+ when AST::Members::MethodDefinition
63
+ method_exist?(owner, member.name, member.kind)
64
+ when AST::Members::Alias
65
+ method_exist?(owner, member.new_name, member.kind)
66
+ when AST::Members::AttrReader
67
+ method_exist?(owner, member.name, member.kind)
68
+ when AST::Members::AttrWriter
69
+ method_exist?(owner, :"#{member.name}=", member.kind)
70
+ when AST::Members::AttrAccessor
71
+ # TODO: It unexpectedly removes attr_accessor even if either reader or writer does not exist in the subtrahend.
72
+ method_exist?(owner, member.name, member.kind) || method_exist?(owner, :"#{member.name}=", member.kind)
73
+ when AST::Members::InstanceVariable
74
+ ivar_exist?(owner, member.name, :instance)
75
+ when AST::Members::ClassInstanceVariable
76
+ ivar_exist?(owner, member.name, :singleton)
77
+ when AST::Members::ClassVariable
78
+ cvar_exist?(owner, member.name)
79
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
80
+ mixin_exist?(owner, member, context: context)
81
+ when AST::Members::Public, AST::Members::Private
82
+ # They should not be removed even if the subtrahend has them.
83
+ false
84
+ else
85
+ raise "unknown member: #{(_ = member).class}"
86
+ end
87
+ end
88
+
89
+ private def method_exist?(owner, method_name, kind)
90
+ each_member(owner).any? do |m|
91
+ case m
92
+ when AST::Members::MethodDefinition
93
+ m.name == method_name && m.kind == kind
94
+ when AST::Members::Alias
95
+ m.new_name == method_name && m.kind == kind
96
+ when AST::Members::AttrReader
97
+ m.name == method_name && m.kind == kind
98
+ when AST::Members::AttrWriter
99
+ :"#{m.name}=" == method_name && m.kind == kind
100
+ when AST::Members::AttrAccessor
101
+ (m.name == method_name || :"#{m.name}=" == method_name) && m.kind == kind
102
+ end
103
+ end
104
+ end
105
+
106
+ private def ivar_exist?(owner, name, kind)
107
+ each_member(owner).any? do |m|
108
+ case m
109
+ when AST::Members::InstanceVariable
110
+ m.name == name && kind == :instance
111
+ when AST::Members::ClassInstanceVariable
112
+ m.name == name && kind == :singleton
113
+ when AST::Members::Attribute
114
+ ivar_name = m.ivar_name == false ? nil : m.ivar_name || :"@#{m.name}"
115
+ ivar_name == name && m.kind == kind
116
+ end
117
+ end
118
+ end
119
+
120
+ private def cvar_exist?(owner, name)
121
+ each_member(owner).any? do |m|
122
+ case m
123
+ when AST::Members::ClassVariable
124
+ m.name == name
125
+ end
126
+ end
127
+ end
128
+
129
+ private def each_member(owner, &block)
130
+ return enum_for((__method__ or raise), owner) unless block
131
+
132
+ entry = @subtrahend.class_decls[owner]
133
+ return unless entry
134
+ entry.each_decl do |d|
135
+ next unless d.is_a?(AST::Declarations::Base)
136
+ d.members.each { |m| block.call(m) }
137
+ end
138
+ end
139
+
140
+ private def mixin_exist?(owner, mixin, context:)
141
+ candidates = typename_candidates(mixin.name, context: context)
142
+ each_member(owner).any? do |m|
143
+ case m
144
+ when mixin.class
145
+ # @type var m: AST::Members::Include | AST::Members::Extend | AST::Members::Prepend
146
+ candidates.include?(m.name)
147
+ end
148
+ end
149
+ end
150
+
151
+ private def filter_redundant_access_modifiers(decls)
152
+ decls = decls.dup
153
+ decls.pop while access_modifier?(decls.last)
154
+ decls = decls.map.with_index do |decl, i|
155
+ if access_modifier?(decl) && access_modifier?(decls[i + 1])
156
+ nil
157
+ else
158
+ decl
159
+ end
160
+ end.compact
161
+ end
162
+
163
+ private def access_modifier?(decl)
164
+ decl.is_a?(AST::Members::Public) || decl.is_a?(AST::Members::Private)
165
+ end
166
+
167
+ private def update_decl(decl, members:)
168
+ case decl
169
+ when AST::Declarations::Class
170
+ decl.class.new(name: decl.name, type_params: decl.type_params, super_class: decl.super_class,
171
+ annotations: decl.annotations, location: decl.location, comment: decl.comment,
172
+ members: members)
173
+ when AST::Declarations::Module
174
+ decl.class.new(name: decl.name, type_params: decl.type_params, self_types: decl.self_types,
175
+ annotations: decl.annotations, location: decl.location, comment: decl.comment,
176
+ members: members)
177
+ end
178
+ end
179
+
180
+ private def absolute_typename(name, context:)
181
+ while context
182
+ ns = context[1] or raise
183
+ name = name.with_prefix(ns.to_namespace)
184
+ context = _ = context[0]
185
+ end
186
+ name.absolute!
187
+ end
188
+
189
+ private def typename_candidates(name, context:)
190
+ ret = [name.absolute!, name.relative!]
191
+ return ret if name.absolute?
192
+
193
+ while context
194
+ ns = context[1] or raise
195
+ name = name.with_prefix(ns.to_namespace)
196
+ ret.concat [name.absolute!, name.relative!]
197
+
198
+ context = _ = context[0]
199
+ end
200
+
201
+ ret
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Test
5
+ module Errors
6
+ ArgumentTypeError =
7
+ Struct.new(:klass, :method_name, :method_type, :param, :value, keyword_init: true)
8
+ BlockArgumentTypeError =
9
+ Struct.new(:klass, :method_name, :method_type, :param, :value, keyword_init: true)
10
+ ArgumentError =
11
+ Struct.new(:klass, :method_name, :method_type, keyword_init: true)
12
+ BlockArgumentError =
13
+ Struct.new(:klass, :method_name, :method_type, keyword_init: true)
14
+ ReturnTypeError =
15
+ Struct.new(:klass, :method_name, :method_type, :type, :value, keyword_init: true)
16
+ BlockReturnTypeError =
17
+ Struct.new(:klass, :method_name, :method_type, :type, :value, keyword_init: true)
18
+
19
+ UnexpectedBlockError = Struct.new(:klass, :method_name, :method_type, keyword_init: true)
20
+ MissingBlockError = Struct.new(:klass, :method_name, :method_type, keyword_init: true)
21
+
22
+ UnresolvedOverloadingError = Struct.new(:klass, :method_name, :method_types, keyword_init: true)
23
+
24
+ def self.format_param(param)
25
+ if param.name
26
+ "`#{param.type}` (#{param.name})"
27
+ else
28
+ "`#{param.type}`"
29
+ end
30
+ end
31
+
32
+ RESPOND_TO = ::Kernel.instance_method :respond_to?
33
+ private_constant :RESPOND_TO
34
+
35
+ def self.inspect_(obj)
36
+ if RESPOND_TO.bind_call(obj, :inspect)
37
+ obj.inspect
38
+ else
39
+ Test::INSPECT.bind(obj).call # For the case inspect is not defined (like BasicObject)
40
+ end
41
+ end
42
+
43
+ def self.method_tag(error)
44
+ if error.klass.singleton_class?
45
+ name = inspect_(error.klass).sub(/\A#<Class:(.*)>\z/, '\1')
46
+ method_name = ".#{error.method_name}"
47
+ else
48
+ name = error.klass.name
49
+ method_name = "##{error.method_name}"
50
+ end
51
+ "[#{name}#{method_name}]"
52
+ end
53
+
54
+ def self.to_string(error)
55
+ case error
56
+ when ArgumentTypeError
57
+ "#{method_tag(error)} ArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`"
58
+ when BlockArgumentTypeError
59
+ "#{method_tag(error)} BlockArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`"
60
+ when ArgumentError
61
+ "#{method_tag(error)} ArgumentError: expected method type #{error.method_type}"
62
+ when BlockArgumentError
63
+ "#{method_tag(error)} BlockArgumentError: expected method type #{error.method_type}"
64
+ when ReturnTypeError
65
+ "#{method_tag(error)} ReturnTypeError: expected `#{error.type}` but returns `#{inspect_(error.value)}`"
66
+ when BlockReturnTypeError
67
+ "#{method_tag(error)} BlockReturnTypeError: expected `#{error.type}` but returns `#{inspect_(error.value)}`"
68
+ when UnexpectedBlockError
69
+ "#{method_tag(error)} UnexpectedBlockError: unexpected block is given for `#{error.method_type}`"
70
+ when MissingBlockError
71
+ "#{method_tag(error)} MissingBlockError: required block is missing for `#{error.method_type}`"
72
+ when UnresolvedOverloadingError
73
+ "#{method_tag(error)} UnresolvedOverloadingError: couldn't find a suitable overloading"
74
+ else
75
+ raise "Unexpected error: #{inspect_(error)}"
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Test
5
+ module Guaranteed
6
+ module Inspect
7
+ EQUAL = ::BasicObject.instance_method(:equal?)
8
+ INSPECT = ::Kernel.instance_method(:inspect)
9
+ private_constant :EQUAL, :INSPECT
10
+
11
+ module_function def guaranteed_inspect(obj)
12
+ obj.inspect
13
+ rescue NoMethodError
14
+ INSPECT.bind_call(obj)
15
+ end
16
+
17
+ def inspect
18
+ string = "<#{self.class.name}:"
19
+
20
+ instance_variables.each_with_index do |variable, index|
21
+ string.concat ', ' unless index.zero?
22
+ string.concat "#{variable}: #{guaranteed_inspect(instance_variable_get(variable))}"
23
+ end
24
+
25
+ string.concat '>'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end