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/docs/syntax.md ADDED
@@ -0,0 +1,940 @@
1
+ # Syntax
2
+
3
+ ## Types
4
+
5
+ ```markdown
6
+ _type_ ::= _class-name_ _type-arguments_ (Class instance type)
7
+ | _interface-name_ _type-arguments_ (Interface type)
8
+ | _alias-name_ _type-arguments_ (Alias type)
9
+ | `singleton(` _class-name_ `)` _type-arguments_ (Class singleton type)
10
+ | _literal_ (Literal type)
11
+ | _type_ `|` _type_ (Union type)
12
+ | _type_ `&` _type_ (Intersection type)
13
+ | _type_ `?` (Optional type)
14
+ | `{` _record-name_ `:` _type_ `,` etc. `}` (Record type)
15
+ | `[]` | `[` _type_ `,` etc. `]` (Tuples)
16
+ | _type-variable_ (Type variables)
17
+ | `self`
18
+ | `instance`
19
+ | `class`
20
+ | `bool`
21
+ | `untyped`
22
+ | `nil`
23
+ | `top`
24
+ | `bot`
25
+ | `void`
26
+ | _proc_ (Proc type)
27
+
28
+ _class-name_ ::= _namespace_ /[A-Z]\w*/
29
+ _interface-name_ ::= _namespace_ /_[A-Z]\w*/
30
+ _alias-name_ ::= _namespace_ /[a-z]\w*/
31
+
32
+ _type-variable_ ::= /[A-Z]\w*/
33
+
34
+ _namespace_ ::= (Empty namespace)
35
+ | `::` (Root)
36
+ | _namespace_ /[A-Z]\w*/ `::` (Namespace)
37
+
38
+ _type-arguments_ ::= (No type arguments)
39
+ | `[` _type_ `,` etc. `]` (Type arguments)
40
+
41
+ _literal_ ::= _string-literal_
42
+ | _symbol-literal_
43
+ | _integer-literal_
44
+ | `true`
45
+ | `false`
46
+
47
+ _proc_ ::= `^` _parameters?_ _self-type-binding?_ _block?_ `->` _type_
48
+ | `^` `(` `?` `)` `->` _type_ # Proc type with untyped parameter
49
+ ```
50
+
51
+ ### Class instance type
52
+
53
+ Class instance type denotes _an instance of a class_.
54
+
55
+ ```rbs
56
+ Integer # Instance of Integer class
57
+ ::Integer # Instance of ::Integer class
58
+ Hash[Symbol, String] # Instance of Hash class with type application of Symbol and String
59
+ ```
60
+
61
+ ### Interface type
62
+
63
+ Interface type denotes _type of a value which can be a subtype of the interface_.
64
+
65
+ ```rbs
66
+ _ToS # _ToS interface
67
+ ::Enumerator::_Each[String] # Interface name with namespace and type application
68
+ ```
69
+
70
+ ### Alias type
71
+
72
+ Alias type denotes an alias declared with _alias declaration_.
73
+
74
+ The name of type aliases starts with lowercase `[a-z]`.
75
+
76
+ ```rbs
77
+ name
78
+ ::JSON::t # Alias name with namespace
79
+ list[Integer] # Type alias can be generic
80
+ ```
81
+
82
+ ### Class singleton type
83
+
84
+ Class singleton type denotes _the type of a singleton object of a class_.
85
+
86
+ ```rbs
87
+ singleton(String)
88
+ singleton(::Hash) # Class singleton type
89
+ singleton(Array)[String] # Class singleton type with type application
90
+ ```
91
+
92
+ ### Literal type
93
+
94
+ Literal type denotes _a type with only one value of the literal_.
95
+
96
+ ```rbs
97
+ 123 # Integer
98
+ "hello world" # A string
99
+ :to_s # A symbol
100
+ true # true or false
101
+ ```
102
+
103
+ ### Union type
104
+
105
+ Union type denotes _a type of one of the given types_.
106
+
107
+ ```rbs
108
+ Integer | String # Integer or String
109
+ Array[Integer | String] # Array of Integer or String
110
+ ```
111
+
112
+ ### Intersection type
113
+
114
+ Intersection type denotes _a type of all of the given types_.
115
+
116
+ ```rbs
117
+ _Reader & _Writer # _Reader and _Writer
118
+ ```
119
+
120
+ Note that `&` has higher precedence than `|` that `A & B | C` is `(A & B) | C`.
121
+
122
+ ### Optional type
123
+
124
+ Optional type denotes _a type of value or nil_.
125
+
126
+ ```rbs
127
+ Integer?
128
+ Array[Integer?]
129
+ ```
130
+
131
+ ### Record type
132
+
133
+ Records are `Hash` objects, fixed set of keys, and heterogeneous.
134
+
135
+ ```rbs
136
+ { id: Integer, name: String } # Hash object like `{ id: 31, name: String }`
137
+ ```
138
+
139
+ ### Tuple type
140
+
141
+ Tuples are `Array` objects, fixed size and heterogeneous.
142
+
143
+ ```rbs
144
+ [ ] # Empty like `[]`
145
+ [String] # Single string like `["hi"]`
146
+ [Integer, Integer] # Pair of integers like `[1, 2]`
147
+ [Symbol, Integer, Integer] # Tuple of Symbol, Integer, and Integer like `[:pair, 30, 22]`
148
+ ```
149
+
150
+ *Empty tuple* or *1-tuple* sound strange, but RBS allows these types.
151
+
152
+ ### Type variable
153
+
154
+ ```rbs
155
+ U
156
+ T
157
+ S
158
+ Elem
159
+ ```
160
+
161
+ Type variables cannot be distinguished from _class instance types_.
162
+ They are scoped in _class/module/interface/alias declaration_ or _generic method types_.
163
+
164
+ ```rbs
165
+ class Ref[T] # Object is scoped in the class declaration.
166
+ @value: T # Type variable `T`
167
+ def map: [X] { (T) -> X } -> Ref[X] # X is a type variable scoped in the method type.
168
+ end
169
+ ```
170
+
171
+ ### Base types
172
+
173
+ `self` denotes the type of receiver. The type is used to model the open recursion via `self`.
174
+
175
+ `instance` denotes the type of instance of the class. `class` is the singleton of the class.
176
+
177
+ `bool` is an alias of `true | false`.
178
+
179
+ `untyped` is for _a type without type checking_. It is `?` in gradual typing, _dynamic_ in some languages like C#, and _any_ in TypeScript. It is both subtype _and_ supertype of all of the types. (The type was `any` but renamed to `untyped`.)
180
+
181
+ `nil` is for _nil_.
182
+
183
+ `top` is a supertype of all of the types. `bot` is a subtype of all of the types.
184
+
185
+ `void` is a supertype of all of the types.
186
+
187
+ #### `nil` or `NilClass`?
188
+
189
+ We recommend using `nil`.
190
+
191
+ #### `bool` or `boolish`
192
+
193
+ We have a builtin type alias called `boolish`.
194
+ It is an alias of `top` type, and you can use `boolish` if we want to allow any object of any type.
195
+
196
+ We can see an example at the definition of `Enumerable#find`:
197
+
198
+ ```rbs
199
+ module Enumerable[E, R]
200
+ def find: () { (E) -> boolish } -> E?
201
+ end
202
+ ```
203
+
204
+ We want to write something like:
205
+
206
+ ```ruby
207
+ array.find {|x| x && x.some_test? } # The block will return (bool | nil)
208
+ ```
209
+
210
+ We recommend using `boolish` for method arguments and block return values, if you only use the values for conditions.
211
+ You can write `bool` if you strictly want `true | false`.
212
+
213
+ #### `void`, `boolish`, or `top`?
214
+
215
+ They are all equivalent for the type system; they are all _top type_.
216
+
217
+ `void` tells developers a hint that _the value should not be used_. `boolish` implies the value is used as a truth value. `top` is anything else.
218
+
219
+ ### Proc type
220
+
221
+ Proc type denotes type of procedures, `Proc` instances.
222
+
223
+ ```rbs
224
+ ^(Integer) -> String # A procedure with an `Integer` parameter and returns `String`
225
+ ^(?String, size: Integer) -> bool # A procedure with `String` optional parameter, `size` keyword of `Integer`, and returns `bool`
226
+ ```
227
+
228
+ See the next section for details.
229
+
230
+ ### Types and contexts
231
+
232
+ We have contextual limitations on some types:
233
+
234
+ * `void` is only allowed as a return type or a generic parameter
235
+ * `self` is only allowed in *self-context*
236
+ * `class` and `instance` is only allowed in *classish-context*
237
+
238
+ These contextual limitation is introduced at RBS 3.3.
239
+ The parser accepts those types even if it doesn't satisfy contextual limitation, but warning is reported with `rbs validate` command.
240
+ We plan to change the parser to reject those types if it breaks the contextual limitations in next release -- `3.4`.
241
+
242
+ #### Limitations on `void` types
243
+
244
+ The following `void` types are allowed.
245
+
246
+ ```rbs
247
+ type t1 = ^() -> void
248
+ type t2 = Enumerator[Integer, void]
249
+ ```
250
+
251
+ The following `void` types are prohibited.
252
+
253
+ ```rbs
254
+ type t1 = ^(void) -> untyped # void as a function parameter is prohibited
255
+ type t2 = ^() -> void? # void cannot be used inside an optional type
256
+ type t3 = Enumerator[Integer, void | String] # void cannot be used inside a union type
257
+ ```
258
+
259
+ #### Examples of *self-context*
260
+
261
+ The following `self` types are allowed.
262
+
263
+ ```rbs
264
+ class Foo
265
+ attr_reader parent: self
266
+
267
+ def foo: () -> self
268
+ end
269
+ ```
270
+
271
+ The following `self` types are prohibited.
272
+
273
+ ```rbs
274
+ class Foo
275
+ include Enumerable[self] # Mixin argument is not self-context
276
+
277
+ VERSION: self # Constant type is not self-context
278
+
279
+ @@foos: Array[self] # Class variable type is not self-context
280
+
281
+ type list = nil | [self, list] # Type alias is not self-context
282
+ end
283
+ ```
284
+
285
+ #### Examples of *classish-context*
286
+
287
+ The following `class`/`instance` types are allowed.
288
+
289
+ ```rbs
290
+ class Foo
291
+ attr_reader parent: class
292
+
293
+ def foo: () -> instance # behaves like `self` in this context
294
+
295
+ def self?.bar: () -> instance # behaves like `class` for `def self.bar()` and `self` for `def bar()`
296
+
297
+ @@foos: Array[instance]
298
+
299
+ include Enumerable[class]
300
+ end
301
+ ```
302
+
303
+ The following `class`/`instance` types are prohibited.
304
+
305
+ ```rbs
306
+ class Foo
307
+ VERSION: class # Constant type is not classish-context
308
+
309
+ type list = nil | [instance, list] # Type alias is not classish-context
310
+ end
311
+ ```
312
+
313
+ ## Method Types and Proc Types
314
+
315
+ ```markdown
316
+ _method-type_ ::= _parameters?_ _block?_ `->` _type_ # Method type
317
+ | `(` `?` `)` `->` _type_ # Method type with untyped parameters
318
+
319
+ _parameters?_ ::= (Empty)
320
+ | _parameters_ (Parameters)
321
+
322
+ _parameters_ ::= `(` _required-positionals_ _optional-positionals_ _rest-positional_ _trailing-positionals_ _keywords_ `)`
323
+
324
+ _parameter_ ::= _type_ _var-name_ # Parameter with var name
325
+ | _type_ # Parameter without var name
326
+ _required-positionals_ ::= _parameter_ `,` etc.
327
+ _optional-positionals_ ::= `?` _parameter_ `,` etc.
328
+ _rest-positional_ ::= # Empty
329
+ | `*` _parameter_
330
+ _trailing-positionals_ ::= _parameter_ `,` etc.
331
+ _keywords_ ::= # Empty
332
+ | `**` _parameter_ # Rest keyword
333
+ | _keyword_ `:` _parameter_ `,` _keywords_ # Required keyword
334
+ | `?` _keyword_ `:` _parameter_ `,` _keywords_ # Optional keyword
335
+
336
+ _var-name_ ::= /[a-z]\w*/
337
+
338
+ _self-type-binding?_ = (Empty)
339
+ | `[` `self` `:` _type_ `]` (Self type binding)
340
+
341
+ _block?_ = (No block)
342
+ | `{` _parameters_ _self-type-binding?_ `->` _type_ `}` (Block)
343
+ | `{` `(` `?` `)` `->` _type_ `}` (Block with untyped parameters)
344
+ | `?` `{` _parameters_ _self-type-binding?_ `->` _type_ `}` (Optional block)
345
+ | `?` `{` `(` `?` `)` `->` _type_ `}` (Optional block with untyped parameters)
346
+ ```
347
+
348
+ ### Parameters
349
+
350
+ A parameter can be a type or a pair of type and variable name.
351
+ Variable name can be used for documentation.
352
+
353
+ #### Examples
354
+
355
+ ```rbs
356
+ # Two required positional `Integer` parameters, and returns `String`
357
+ (Integer, Integer) -> String
358
+
359
+ # Two optional parameters `size` and `name`.
360
+ # `name` is a optional parameter with optional type so that developer can omit, pass a string, or pass `nil`.
361
+ (?Integer size, ?String? name) -> String
362
+
363
+ # Method type with a rest parameter
364
+ (*Integer, Integer) -> void
365
+
366
+ # `size` is a required keyword, with variable name of `sz`.
367
+ # `name` is a optional keyword.
368
+ # `created_at` is a optional keyword, and the value can be `nil`.
369
+ (size: Integer sz, ?name: String, ?created_at: Time?) -> void
370
+ ```
371
+
372
+ ### Self type binding
373
+
374
+ Self type binding represents the type of methods that uses `#instance_eval`, which replaces the value of `self` inside blocks.
375
+
376
+ ```ruby
377
+ 123.instance_eval do
378
+ self + 1 # self is `123` here
379
+ end
380
+ ```
381
+
382
+ Proc types and blocks can have self type bindings.
383
+
384
+ ```rbs
385
+ ^(Integer) [self: String] -> void # Proc type with self type binding
386
+ ^(Integer) [self: String] { (Symbol) [self: bool] -> void } -> void # Proc type with self type binding of `String` and a block with self type binding of `bool`
387
+ ```
388
+
389
+ Method type can have blocks with self type bindings.
390
+
391
+ ```rbs
392
+ () { (Integer) [self: String] -> void } -> void # A method type with block with self type binding
393
+ ```
394
+
395
+ ## Members
396
+
397
+ ```markdown
398
+ _member_ ::= _ivar-member_ # Ivar definition
399
+ | _method-member_ # Method definition
400
+ | _attribute-member_ # Attribute definition
401
+ | _include-member_ # Mixin (include)
402
+ | _extend-member_ # Mixin (extend)
403
+ | _prepend-member_ # Mixin (prepend)
404
+ | _alias-member_ # Alias
405
+ | _visibility-member_ # Visibility member
406
+
407
+ _ivar-member_ ::= _ivar-name_ `:` _type_
408
+ | `self` `.` _ivar-name_ `:` _type_
409
+ | _cvar-name_ `:` _type_
410
+
411
+ _method-member_ ::= _method-class-member_
412
+ | _method-interface-member_
413
+ _method-class-member_ ::= _visibility_ `def` _method-name_ `:` _method-types_ # Instance method
414
+ | _visibility_ `def self.` _method-name_ `:` _method-types_ # Singleton method
415
+ | `def self?.` _method-name_ `:` _method-types_ # Singleton and instance method
416
+ _method-interface-member_ ::= `def` _method-name_ `:` _method-types_ # Instance method
417
+
418
+ _method-types_ ::= _method-type-parameters_ _method-type_ # Single method type
419
+ | _method-type-parameters_ _method-type_ `|` _method-types_ # Overloading types
420
+ | `...` # Overloading for duplicate definitions
421
+
422
+ _method-type-parameters_ ::= # Empty
423
+ | `[` _type-variable_ `,` ... `]`
424
+
425
+ _attribute-member_ ::= _visibility_ _attribute-type_ _method-name_ `:` _type_ # Attribute
426
+ | _visibility_ _attribute-type_ _method-name_ `(` _ivar-name_ `) :` _type_ # Attribute with variable name specification
427
+ | _visibility_ _attribute-type_ _method-name_ `() :` _type_ # Attribute without variable
428
+ | _visibility_ _attribute-type_ `self.` _method-name_ `:` _type_ # Singleton attribute
429
+ | _visibility_ _attribute-type_ `self.` _method-name_ `(` _ivar-name_ `) :` _type_ # Singleton attribute with variable name specification
430
+ | _visibility_ _attribute-type_ `self.` _method-name_ `() :` _type_ # Singleton attribute without variable
431
+ _visibility_ ::= `public` | `private`
432
+
433
+ _attribute-type_ ::= `attr_reader` | `attr_writer` | `attr_accessor`
434
+
435
+ _include-member_ ::= _include-class-member_
436
+ | _include-interface-member_
437
+ _include-class-member_ ::= `include` _class-name_ _type-arguments_
438
+ _include-interface-member_ :== `include` _interface-name_ _type-arguments_
439
+ _extend-member_ ::= `extend` _class-name_ _type-arguments_
440
+ | `extend` _interface-name_ _type-arguments_
441
+ _prepend-member_ ::= `prepend` _class-name_ _type-arguments_
442
+
443
+ _alias-member_ ::= `alias` _method-name_ _method-name_
444
+ | `alias self.` _method-name_ `self.` _method-name_
445
+
446
+ _visibility-member_ ::= _visibility_
447
+
448
+ _ivar-name_ ::= /@\w+/
449
+ _cvar-name_ ::= /@@\w+/
450
+ _method-name_ ::= _most of the possible ruby method names_
451
+ | /`[^`]+`/ # Quoted method names
452
+ ```
453
+
454
+ ### Ivar definition
455
+
456
+ An instance variable definition consists of the name of an instance variable and its type.
457
+
458
+ ```rbs
459
+ @name: String
460
+ self.@value: Hash[Symbol, Key]
461
+ @@instances: Array[instance]
462
+ ```
463
+
464
+ * Instance variables definition is *self-context* and *classish-context*
465
+ * Class instance variables definition is *self-context* and *classish-context*
466
+ * Class variables definition is *classish-context*, but NOT *self-context*
467
+
468
+ ### Method definition
469
+
470
+ Method definition has several syntax variations.
471
+
472
+ You can write `self.` or `self?.` before the name of the method to specify the kind of method: instance, singleton, or module function.
473
+
474
+ ```rbs
475
+ def to_s: () -> String # Defines a instance method
476
+ def self.new: () -> AnObject # Defines singleton method
477
+ def self?.sqrt: (Numeric) -> Numeric # self? is for `module_function`s
478
+ ```
479
+
480
+ `self?` method definition adds two methods: a public singleton method and a private instance method, which is equivalent to `module_function` in Ruby.
481
+
482
+ The method type can be connected with `|`s to define an overloaded method.
483
+
484
+ ```rbs
485
+ def +: (Float) -> Float
486
+ | (Integer) -> Integer
487
+ | (Numeric) -> Numeric
488
+ ```
489
+
490
+ Overloaded method can have `...` to overload an existing method. It is useful for monkey-patching.
491
+
492
+ ```rbs
493
+ def +: (Float) -> Float
494
+ def +: (BigDecimal) -> BigDecimal
495
+ | ...
496
+ ```
497
+
498
+ You need extra parentheses on return type to avoid ambiguity.
499
+
500
+ ```rbs
501
+ def +: (Float | Integer) -> (Float | Integer)
502
+ | (Numeric) -> Numeric
503
+ ```
504
+
505
+ Adding `public` and `private` modifier changes the visibility of the method.
506
+
507
+ ```rbs
508
+ private def puts: (*untyped) -> void # Defines private instance method
509
+
510
+ public def self.puts: (*untyped) -> void # Defines public singleton method
511
+
512
+ public def self?.puts: (*untyped) -> void # 🚨🚨🚨 Error: `?.` has own visibility semantics (== `module_function`) 🚨🚨🚨
513
+ ```
514
+
515
+ * Method types are *self-context* and *classish-context*
516
+
517
+ ### Attribute definition
518
+
519
+ Attribute definitions help to define methods and instance variables based on the convention of `attr_reader`, `attr_writer` and `attr_accessor` methods in Ruby.
520
+
521
+ You can specify the name of instance variable using `(@some_name)` syntax and also omit the instance variable definition by specifying `()`.
522
+
523
+ ```rbs
524
+ # Defines `id` method and `@id` instance variable.
525
+ attr_reader id: Integer
526
+ # @id: Integer
527
+ # def id: () -> Integer
528
+
529
+ # Defines `name=` method and `@raw_name` instance variable.
530
+ attr_writer name (@raw_name) : String
531
+ # @raw_name: String
532
+ # def name=: (String) -> String
533
+
534
+ # Defines `people` and `people=` methods, but no instance variable.
535
+ attr_accessor people (): Array[Person]
536
+ # def people: () -> Array[Person]
537
+ # def people=: (Array[Person]) -> Array[Person]
538
+ ```
539
+
540
+ Attribute definitions can have the `public` and `private` modifiers like method definitions:
541
+
542
+ ```rbs
543
+ private attr_accessor id: Integer
544
+
545
+ private attr_reader self.name: String
546
+ ```
547
+
548
+ * Attribute types are *self-context* and *classish-context*
549
+
550
+ ### Mixin (include), Mixin (extend), Mixin (prepend)
551
+
552
+ You can define mixins between class and modules.
553
+
554
+ ```rbs
555
+ include Kernel
556
+ include Enumerable[String, void]
557
+ extend ActiveSupport::Concern
558
+ ```
559
+
560
+ You can also `include` or `extend` an interface.
561
+
562
+ ```rbs
563
+ include _Hashing
564
+ extend _LikeString
565
+ ```
566
+
567
+ This allows importing `def`s from the interface to help developer implementing a set of methods.
568
+
569
+ * Mixin arguments are *classish-context*, but not *self-context*
570
+
571
+ ### Alias
572
+
573
+ You can define an alias between methods.
574
+
575
+ ```rbs
576
+ def map: [X] () { (String) -> X } -> Array[X]
577
+ alias collect map # `#collect` has the same type with `map`
578
+ ```
579
+
580
+ ### Visibility member
581
+
582
+ Visibility member allows specifying the default visibility of instance methods and instance attributes.
583
+
584
+ ```rbs
585
+ public
586
+
587
+ def foo: () -> void # public instance method
588
+
589
+ attr_reader name: String # public instance attribute
590
+
591
+ private
592
+
593
+ def bar: () -> void # private instance method
594
+
595
+ attr_reader email: String # private instance attribute
596
+ ```
597
+
598
+ The visibility _modifiers_ overwrite the default visibility per member bases.
599
+
600
+ The visibility member requires a new line `\n` after the token.
601
+
602
+ ```rbs
603
+ private alias foo bar # Syntax error
604
+ ```
605
+
606
+ ## Declarations
607
+
608
+ ```markdown
609
+ _decl_ ::= _class-decl_ # Class declaration
610
+ | _module-decl_ # Module declaration
611
+ | _class-alias-decl_ # Class alias declaration
612
+ | _module-alias-decl_ # Module alias declaration
613
+ | _interface-decl_ # Interface declaration
614
+ | _type-alias-decl_ # Type alias declaration
615
+ | _const-decl_ # Constant declaration
616
+ | _global-decl_ # Global declaration
617
+
618
+ _class-decl_ ::= `class` _class-name_ _module-type-parameters_ _members_ `end`
619
+ | `class` _class-name_ _module-type-parameters_ `<` _class-name_ _type-arguments_ _members_ `end`
620
+
621
+ _module-decl_ ::= `module` _module-name_ _module-type-parameters_ _members_ `end`
622
+ | `module` _module-name_ _module-type-parameters_ `:` _module-self-types_ _members_ `end`
623
+
624
+ _class-alias-decl_ ::= `class` _class-name_ `=` _class-name_
625
+
626
+ _module-alias-decl_ ::= `module` _module-name_ `=` _module-name_
627
+
628
+ _module-self-types_ ::= _class-name_ _type-arguments_ `,` _module-self-types_ (Class instance)
629
+ | _interface-name_ _type-arguments_ `,` _module-self-types_ (Interface)
630
+
631
+ _interface-decl_ ::= `interface` _interface-name_ _module-type-parameters_ _interface-members_ `end`
632
+
633
+ _interface-members_ ::= _method-interface-member_ # Method
634
+ | _include-interface-member_ # Mixin (include)
635
+ | _alias-member_ # Alias
636
+
637
+ _type-alias-decl_ ::= `type` _alias-name_ _module-type-parameters_ `=` _type_
638
+
639
+ _const-decl_ ::= _const-name_ `:` _type_
640
+
641
+ _global-decl_ ::= _global-name_ `:` _type_
642
+
643
+ _const-name_ ::= _namespace_ /[A-Z]\w*/
644
+ _global-name_ ::= /$[a-zA-Z]\w+/ | ...
645
+
646
+ _module-type-parameters_ ::= # Empty
647
+ | `[` _module-type-parameter_ `,` ... `]`
648
+ ```
649
+
650
+ ### Class declaration
651
+
652
+ Class declaration can have type parameters and superclass. When you omit superclass, `::Object` is assumed.
653
+
654
+ * Super class arguments and generic class bounds are not *classish-context* nor *self-context*
655
+
656
+ ### Module declaration
657
+
658
+ Module declaration takes optional _self type_ parameter, which defines a constraint about a class when the module is mixed.
659
+
660
+ ```rbs
661
+ interface _Each[A, B]
662
+ def each: { (A) -> void } -> B
663
+ end
664
+
665
+ module Enumerable[A, B] : _Each[A, B]
666
+ def count: () -> Integer
667
+ end
668
+ ```
669
+
670
+ The `Enumerable` module above requires `each` method for enumerating objects.
671
+
672
+ * Self type arguments and generic class bounds are not *classish-context* nor *self-context*
673
+
674
+ ### Class/module alias declaration
675
+
676
+ An alias of a class or module can be defined in RBS.
677
+
678
+ ```rbs
679
+ module Foo = Kernel
680
+
681
+ class Bar = Array
682
+ ```
683
+
684
+ The syntax defines a class and the definition is equivalent to the right-hand-side.
685
+
686
+ ```rbs
687
+ class Baz < Bar[String] # Class alias can be inherited
688
+ include Foo # Module alias can be included
689
+ end
690
+ ```
691
+
692
+ This is a definition corresponding to the following Ruby code.
693
+
694
+ ```ruby
695
+ Foo = Kernel
696
+
697
+ Bar = Array
698
+ ```
699
+
700
+ ### Interface declaration
701
+
702
+ Interface declaration can have parameters but allows only a few of the members.
703
+
704
+ ```rbs
705
+ interface _Hashing
706
+ def hash: () -> Integer
707
+ def eql?: (untyped) -> bool
708
+ end
709
+ ```
710
+
711
+ There are several limitations which are not described in the grammar.
712
+
713
+ 1. Interface cannot `include` modules
714
+ 2. Interface cannot have singleton method definitions
715
+
716
+ ```rbs
717
+ interface _Foo
718
+ include Bar # Error: cannot include modules
719
+ def self.new: () -> Foo # Error: cannot include singleton method definitions
720
+ end
721
+ ```
722
+
723
+ ### Type alias declaration
724
+
725
+ You can declare an alias of types.
726
+
727
+ ```rbs
728
+ type subject = Attendee | Speaker
729
+ type JSON::t = Integer | TrueClass | FalseClass | String | Hash[Symbol, t] | Array[t]
730
+ ```
731
+
732
+ Type alias can be generic like class, module, and interface.
733
+
734
+ ```rbs
735
+ type list[out T] = [T, list[T]] | nil
736
+ ```
737
+
738
+ * Alias types are not *classish-context* nor *self-context*
739
+
740
+ ### Constant type declaration
741
+
742
+ You can declare a constant.
743
+
744
+ ```rbs
745
+ Person::DefaultEmailAddress: String
746
+ ```
747
+
748
+ * Constant types are not *classish-context* nor *self-context*
749
+
750
+ ### Global type declaration
751
+
752
+ You can declare a global variable.
753
+
754
+ ```rbs
755
+ $LOAD_PATH: Array[String]
756
+ ```
757
+
758
+ * Constant types are not *classish-context* nor *self-context*
759
+
760
+ ### Generics
761
+
762
+ ```markdown
763
+ _module-type-parameter_ ::= _generics-unchecked_ _generics-variance_ _type-variable_ _generics-bound_ _default-type_
764
+
765
+ _method-type-param_ ::= _type-variable_ _generics-bound_
766
+
767
+ _generics-bound_ ::= (No type bound)
768
+ | `<` _type_ (The generics parameter has an upper bound)
769
+ | '>' _type_ (The generics parameter has a lower bound)
770
+
771
+ _default-type_ ::= (No default type)
772
+ | `=` _type_ (The generics parameter has default type)
773
+
774
+ _generics-variance_ ::= (Invariant)
775
+ | `out` (Covariant)
776
+ | `in` (Contravariant)
777
+
778
+ _generics-unchecked_ ::= (Empty)
779
+ | `unchecked` (Skips variance annotation validation)
780
+ ```
781
+
782
+ A type parameter can have both upper and lower bounds, which can be specified in either order:
783
+ `[T < UpperBound > LowerBound]` or `[T > LowerBound < UpperBound]`.
784
+
785
+ RBS allows class/module/interface/type alias definitions and methods to be generic.
786
+
787
+ ```rbs
788
+ # Simple generic class definition
789
+ class Stack[T]
790
+ def push: (T) -> void
791
+
792
+ def pop: () -> T
793
+ end
794
+ ```
795
+
796
+ For classes with type parameters, you may specify if they are "invariant" (default), "covariant" (`out`) or "contravariant" (`in`). See [this definition of covariance and contravariance](https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)).
797
+
798
+ For example, an `Array` of `String` can almost be considered to be an `Array` of `Object`, but not the reverse, so we can think of:
799
+
800
+ ```rbs
801
+ # The `T` type parameter is covariant.
802
+ class Array[out T]
803
+ # etc.
804
+ end
805
+ ```
806
+
807
+ There's a limitation with this for mutable objects (like arrays): a mutation could invalidate this.
808
+ If an `Array` of `String` is passed to a method as an `Array` of `Object`, and that method adds an `Integer` to the `Array`, the promise is broken.
809
+
810
+ In those cases, one must use the `unchecked` keyword:
811
+
812
+ ```rbs
813
+ # Skips the validation of variance of the type parameter `T`.
814
+ # The type safety prohibits `out` type parameters to appear at _negative_ position (== method parameter), but we want `Array` to have it.
815
+ class Array[unchecked out T]
816
+ def include?: (T) -> bool
817
+ end
818
+ ```
819
+
820
+ This is how `Array` is actually defined in RBS.
821
+
822
+ Note that RBS doesn't allow specifying variance related annotations to generic method types.
823
+
824
+ ```rbs
825
+ class Foo
826
+ def bar: [out T] () -> T # Syntax error
827
+ end
828
+ ```
829
+
830
+ You can also specify the _upper bound_ of the type parameter.
831
+
832
+ ```rbs
833
+ class PrettyPrint[T < _Output]
834
+ interface _Output
835
+ def <<: (String) -> void
836
+ end
837
+
838
+ attr_reader output: T
839
+ end
840
+ ```
841
+
842
+ If a type parameter has an upper bound, the type parameter must be instantiated with types that are a subtype of the upper bound.
843
+
844
+ ```rbs
845
+ type str_printer = PrettyPrint[String] # OK
846
+ type int_printer = PrettyPrint[Integer] # Type error
847
+ ```
848
+
849
+ If a type parameter has a lower bound, the type parameter must be instantiated with types that are a supertype of the lower bound.
850
+
851
+ ```rbs
852
+ class PrettyPrint[T > Numeric]
853
+ end
854
+
855
+ type obj_printer = PrettyPrint[Object] # OK
856
+ type int_printer = PrettyPrint[Integer] # Type error
857
+ ```
858
+
859
+ A type parameter can have both an upper and a lower bound, and these bounds can be specified in any order.
860
+
861
+ ```rbs
862
+ class FlexibleProcessor[T > Integer < Numeric]
863
+ # This class processes types T that are supertypes of Integer but also subtypes of Numeric.
864
+ # This includes Integer, Rational, Complex, Float, and Numeric itself.
865
+ def calculate: (T) -> T
866
+ end
867
+
868
+ type int_processor = FlexibleProcessor[Integer] # OK (Integer > Integer and Integer < Numeric)
869
+ type num_processor = FlexibleProcessor[Numeric] # OK (Numeric > Integer and Numeric < Numeric)
870
+ type obj_processor = FlexibleProcessor[Object] # Type error (Object is not < Numeric)
871
+ type str_processor = FlexibleProcessor[String] # Type error (String is not > Integer)
872
+ ```
873
+
874
+ The generics type parameter of modules, classes, interfaces, or type aliases can have a default type.
875
+
876
+ ```rbs
877
+ interface _Foo[T = untyped]
878
+ end
879
+
880
+ interface _Bar[T, S = untyped]
881
+ end
882
+
883
+ type foo = _Foo # equivalent to _Foo[untyped]
884
+ type bar = _Bar[String] # equivalent to _Bar[String, untyped]
885
+ ```
886
+
887
+ Type parameters with default types cannot appear before type parameters without default types. The generic method type parameters cannot have the default types.
888
+
889
+ ### Directives
890
+
891
+ Directives are placed at the top of a file and provides per-file-basis features.
892
+
893
+ ```markdown
894
+ _use-directive_ ::= `use` _use-clauses_
895
+
896
+ _use-clauses_ ::= _use-clause_ `,` ... `,` _use-clause_
897
+
898
+ _use-clause_ ::= _type-name_ # Single use clause
899
+ | _type-name_ `as` _simple-type-name_ # Single use clause with alias
900
+ | _namespace_ # Wildcard use clause
901
+ ```
902
+
903
+ The *use directive* defines relative type names that is an alias of other type names.
904
+ We can use the simple type names if it is declared with *use*.
905
+
906
+ ```rbs
907
+ use RBS::Namespace # => Defines `Namespace`
908
+ use RBS::TypeName as TN # => Defines `TN`
909
+ use RBS::AST::* # => Defines modules under `::RBS::AST::` namespace
910
+ ```
911
+
912
+ ### Comments
913
+
914
+ You can write single line comments. Comments must be on their own line. Comments can lead with whitespace.
915
+
916
+ ```rbs
917
+ # This if interface Foo
918
+ # Usage of Foo is bar
919
+ interface _Foo
920
+ # New foo is a method
921
+ # it will return foo.
922
+ def new: () -> Foo
923
+ end
924
+ ```
925
+
926
+ ### Annotations
927
+
928
+ Annotations are placed before declarations, members, and method types to mark up a metadata for the declaration, the member, or method types.
929
+ The meaning of annotations are defined by the toolchain (ex. steep).
930
+
931
+ ```markdown
932
+ _annotations_ ::= _annotation_ ...
933
+ _annotation_ ::= `%a{` _annotation-text_ `}` # Annotation using {}
934
+ | `%a(` _annotation-text_ `)` # Annotation using ()
935
+ | `%a[` _annotation-text_ `]` # Annotation using []
936
+ | `%a|` _annotation-text_ `|` # Annotation using ||
937
+ | `%a<` _annotation-text_ `>` # Annotation using <>
938
+
939
+ _annotation-text_ ::= /[^\x00]*/ # Any characters except NUL (and parenthesis)
940
+ ```