rbs-relaxed 3.9.0.1

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 (484) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +22 -0
  3. data/.github/workflows/comments.yml +35 -0
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +82 -0
  6. data/.github/workflows/typecheck.yml +38 -0
  7. data/.github/workflows/windows.yml +43 -0
  8. data/.gitignore +23 -0
  9. data/.rubocop.yml +68 -0
  10. data/BSDL +22 -0
  11. data/CHANGELOG.md +1868 -0
  12. data/COPYING +56 -0
  13. data/README.md +203 -0
  14. data/Rakefile +417 -0
  15. data/Steepfile +44 -0
  16. data/config.yml +313 -0
  17. data/core/array.rbs +4062 -0
  18. data/core/basic_object.rbs +375 -0
  19. data/core/binding.rbs +150 -0
  20. data/core/builtin.rbs +277 -0
  21. data/core/class.rbs +220 -0
  22. data/core/comparable.rbs +171 -0
  23. data/core/complex.rbs +786 -0
  24. data/core/constants.rbs +96 -0
  25. data/core/data.rbs +415 -0
  26. data/core/dir.rbs +981 -0
  27. data/core/encoding.rbs +1371 -0
  28. data/core/enumerable.rbs +2405 -0
  29. data/core/enumerator/product.rbs +92 -0
  30. data/core/enumerator.rbs +630 -0
  31. data/core/env.rbs +6 -0
  32. data/core/errno.rbs +673 -0
  33. data/core/errors.rbs +760 -0
  34. data/core/exception.rbs +485 -0
  35. data/core/false_class.rbs +82 -0
  36. data/core/fiber.rbs +550 -0
  37. data/core/fiber_error.rbs +11 -0
  38. data/core/file.rbs +2936 -0
  39. data/core/file_test.rbs +331 -0
  40. data/core/float.rbs +1151 -0
  41. data/core/gc.rbs +644 -0
  42. data/core/global_variables.rbs +184 -0
  43. data/core/hash.rbs +1861 -0
  44. data/core/integer.rbs +1413 -0
  45. data/core/io/buffer.rbs +984 -0
  46. data/core/io/wait.rbs +70 -0
  47. data/core/io.rbs +3406 -0
  48. data/core/kernel.rbs +3096 -0
  49. data/core/marshal.rbs +207 -0
  50. data/core/match_data.rbs +635 -0
  51. data/core/math.rbs +729 -0
  52. data/core/method.rbs +386 -0
  53. data/core/module.rbs +1704 -0
  54. data/core/nil_class.rbs +209 -0
  55. data/core/numeric.rbs +818 -0
  56. data/core/object.rbs +110 -0
  57. data/core/object_space/weak_key_map.rbs +166 -0
  58. data/core/object_space.rbs +190 -0
  59. data/core/proc.rbs +868 -0
  60. data/core/process.rbs +2296 -0
  61. data/core/ractor.rbs +1068 -0
  62. data/core/random.rbs +237 -0
  63. data/core/range.rbs +1107 -0
  64. data/core/rational.rbs +531 -0
  65. data/core/rb_config.rbs +88 -0
  66. data/core/rbs/unnamed/argf.rbs +1229 -0
  67. data/core/rbs/unnamed/env_class.rbs +1209 -0
  68. data/core/rbs/unnamed/random.rbs +293 -0
  69. data/core/refinement.rbs +59 -0
  70. data/core/regexp.rbs +1930 -0
  71. data/core/ruby_vm.rbs +765 -0
  72. data/core/rubygems/basic_specification.rbs +6 -0
  73. data/core/rubygems/config_file.rbs +38 -0
  74. data/core/rubygems/dependency_installer.rbs +6 -0
  75. data/core/rubygems/errors.rbs +176 -0
  76. data/core/rubygems/installer.rbs +15 -0
  77. data/core/rubygems/path_support.rbs +6 -0
  78. data/core/rubygems/platform.rbs +7 -0
  79. data/core/rubygems/request_set.rbs +49 -0
  80. data/core/rubygems/requirement.rbs +148 -0
  81. data/core/rubygems/rubygems.rbs +1171 -0
  82. data/core/rubygems/source_list.rbs +15 -0
  83. data/core/rubygems/specification.rbs +23 -0
  84. data/core/rubygems/stream_ui.rbs +5 -0
  85. data/core/rubygems/uninstaller.rbs +10 -0
  86. data/core/rubygems/version.rbs +294 -0
  87. data/core/set.rbs +621 -0
  88. data/core/signal.rbs +100 -0
  89. data/core/string.rbs +3583 -0
  90. data/core/struct.rbs +667 -0
  91. data/core/symbol.rbs +475 -0
  92. data/core/thread.rbs +1765 -0
  93. data/core/thread_group.rbs +79 -0
  94. data/core/time.rbs +1762 -0
  95. data/core/trace_point.rbs +477 -0
  96. data/core/true_class.rbs +98 -0
  97. data/core/unbound_method.rbs +329 -0
  98. data/core/warning.rbs +87 -0
  99. data/docs/CONTRIBUTING.md +106 -0
  100. data/docs/architecture.md +110 -0
  101. data/docs/collection.md +192 -0
  102. data/docs/data_and_struct.md +86 -0
  103. data/docs/gem.md +57 -0
  104. data/docs/rbs_by_example.md +309 -0
  105. data/docs/repo.md +125 -0
  106. data/docs/sigs.md +167 -0
  107. data/docs/stdlib.md +147 -0
  108. data/docs/syntax.md +910 -0
  109. data/docs/tools.md +17 -0
  110. data/exe/rbs +7 -0
  111. data/ext/rbs_extension/extconf.rb +15 -0
  112. data/ext/rbs_extension/lexer.c +2728 -0
  113. data/ext/rbs_extension/lexer.h +179 -0
  114. data/ext/rbs_extension/lexer.re +147 -0
  115. data/ext/rbs_extension/lexstate.c +175 -0
  116. data/ext/rbs_extension/location.c +325 -0
  117. data/ext/rbs_extension/location.h +85 -0
  118. data/ext/rbs_extension/main.c +33 -0
  119. data/ext/rbs_extension/parser.c +2973 -0
  120. data/ext/rbs_extension/parser.h +18 -0
  121. data/ext/rbs_extension/parserstate.c +397 -0
  122. data/ext/rbs_extension/parserstate.h +163 -0
  123. data/ext/rbs_extension/rbs_extension.h +31 -0
  124. data/ext/rbs_extension/unescape.c +32 -0
  125. data/goodcheck.yml +91 -0
  126. data/include/rbs/constants.h +82 -0
  127. data/include/rbs/ruby_objs.h +72 -0
  128. data/include/rbs/util/rbs_constant_pool.h +219 -0
  129. data/include/rbs.h +7 -0
  130. data/lib/rbs/ancestor_graph.rb +92 -0
  131. data/lib/rbs/annotate/annotations.rb +199 -0
  132. data/lib/rbs/annotate/formatter.rb +92 -0
  133. data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
  134. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  135. data/lib/rbs/annotate.rb +8 -0
  136. data/lib/rbs/ast/annotation.rb +29 -0
  137. data/lib/rbs/ast/comment.rb +29 -0
  138. data/lib/rbs/ast/declarations.rb +467 -0
  139. data/lib/rbs/ast/directives.rb +49 -0
  140. data/lib/rbs/ast/members.rb +451 -0
  141. data/lib/rbs/ast/type_param.rb +225 -0
  142. data/lib/rbs/ast/visitor.rb +137 -0
  143. data/lib/rbs/buffer.rb +67 -0
  144. data/lib/rbs/builtin_names.rb +58 -0
  145. data/lib/rbs/cli/colored_io.rb +48 -0
  146. data/lib/rbs/cli/diff.rb +83 -0
  147. data/lib/rbs/cli/validate.rb +357 -0
  148. data/lib/rbs/cli.rb +1223 -0
  149. data/lib/rbs/collection/cleaner.rb +38 -0
  150. data/lib/rbs/collection/config/lockfile.rb +92 -0
  151. data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
  152. data/lib/rbs/collection/config.rb +81 -0
  153. data/lib/rbs/collection/installer.rb +32 -0
  154. data/lib/rbs/collection/sources/base.rb +14 -0
  155. data/lib/rbs/collection/sources/git.rb +258 -0
  156. data/lib/rbs/collection/sources/local.rb +81 -0
  157. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  158. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  159. data/lib/rbs/collection/sources.rb +38 -0
  160. data/lib/rbs/collection.rb +16 -0
  161. data/lib/rbs/constant.rb +28 -0
  162. data/lib/rbs/definition.rb +401 -0
  163. data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
  164. data/lib/rbs/definition_builder/method_builder.rb +254 -0
  165. data/lib/rbs/definition_builder.rb +845 -0
  166. data/lib/rbs/diff.rb +125 -0
  167. data/lib/rbs/environment/use_map.rb +77 -0
  168. data/lib/rbs/environment.rb +829 -0
  169. data/lib/rbs/environment_loader.rb +173 -0
  170. data/lib/rbs/environment_walker.rb +155 -0
  171. data/lib/rbs/errors.rb +645 -0
  172. data/lib/rbs/factory.rb +18 -0
  173. data/lib/rbs/file_finder.rb +28 -0
  174. data/lib/rbs/location_aux.rb +138 -0
  175. data/lib/rbs/locator.rb +243 -0
  176. data/lib/rbs/method_type.rb +143 -0
  177. data/lib/rbs/namespace.rb +125 -0
  178. data/lib/rbs/parser/lex_result.rb +15 -0
  179. data/lib/rbs/parser/token.rb +23 -0
  180. data/lib/rbs/parser_aux.rb +114 -0
  181. data/lib/rbs/prototype/helpers.rb +140 -0
  182. data/lib/rbs/prototype/node_usage.rb +99 -0
  183. data/lib/rbs/prototype/rb.rb +840 -0
  184. data/lib/rbs/prototype/rbi.rb +641 -0
  185. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  186. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  187. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  188. data/lib/rbs/prototype/runtime.rb +667 -0
  189. data/lib/rbs/repository.rb +127 -0
  190. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  191. data/lib/rbs/resolver/type_name_resolver.rb +91 -0
  192. data/lib/rbs/sorter.rb +198 -0
  193. data/lib/rbs/substitution.rb +83 -0
  194. data/lib/rbs/subtractor.rb +201 -0
  195. data/lib/rbs/test/errors.rb +80 -0
  196. data/lib/rbs/test/guaranteed.rb +30 -0
  197. data/lib/rbs/test/hook.rb +212 -0
  198. data/lib/rbs/test/observer.rb +19 -0
  199. data/lib/rbs/test/setup.rb +84 -0
  200. data/lib/rbs/test/setup_helper.rb +50 -0
  201. data/lib/rbs/test/tester.rb +167 -0
  202. data/lib/rbs/test/type_check.rb +435 -0
  203. data/lib/rbs/test.rb +112 -0
  204. data/lib/rbs/type_alias_dependency.rb +100 -0
  205. data/lib/rbs/type_alias_regularity.rb +126 -0
  206. data/lib/rbs/type_name.rb +109 -0
  207. data/lib/rbs/types.rb +1596 -0
  208. data/lib/rbs/unit_test/convertibles.rb +176 -0
  209. data/lib/rbs/unit_test/spy.rb +138 -0
  210. data/lib/rbs/unit_test/type_assertions.rb +347 -0
  211. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  212. data/lib/rbs/unit_test.rb +6 -0
  213. data/lib/rbs/validator.rb +186 -0
  214. data/lib/rbs/variance_calculator.rb +189 -0
  215. data/lib/rbs/vendorer.rb +71 -0
  216. data/lib/rbs/version.rb +5 -0
  217. data/lib/rbs/writer.rb +424 -0
  218. data/lib/rbs.rb +94 -0
  219. data/lib/rdoc/discover.rb +20 -0
  220. data/lib/rdoc_plugin/parser.rb +163 -0
  221. data/rbs-relaxed.gemspec +48 -0
  222. data/schema/annotation.json +14 -0
  223. data/schema/comment.json +26 -0
  224. data/schema/decls.json +326 -0
  225. data/schema/function.json +87 -0
  226. data/schema/location.json +56 -0
  227. data/schema/members.json +266 -0
  228. data/schema/methodType.json +50 -0
  229. data/schema/typeParam.json +36 -0
  230. data/schema/types.json +317 -0
  231. data/sig/ancestor_builder.rbs +163 -0
  232. data/sig/ancestor_graph.rbs +60 -0
  233. data/sig/annotate/annotations.rbs +102 -0
  234. data/sig/annotate/formatter.rbs +24 -0
  235. data/sig/annotate/rdoc_annotater.rbs +82 -0
  236. data/sig/annotate/rdoc_source.rbs +30 -0
  237. data/sig/annotation.rbs +27 -0
  238. data/sig/buffer.rbs +32 -0
  239. data/sig/builtin_names.rbs +44 -0
  240. data/sig/cli/colored_io.rbs +15 -0
  241. data/sig/cli/diff.rbs +21 -0
  242. data/sig/cli/validate.rbs +43 -0
  243. data/sig/cli.rbs +87 -0
  244. data/sig/collection/cleaner.rbs +13 -0
  245. data/sig/collection/config/lockfile.rbs +74 -0
  246. data/sig/collection/config/lockfile_generator.rbs +66 -0
  247. data/sig/collection/config.rbs +46 -0
  248. data/sig/collection/installer.rbs +17 -0
  249. data/sig/collection/sources.rbs +214 -0
  250. data/sig/collection.rbs +4 -0
  251. data/sig/comment.rbs +26 -0
  252. data/sig/constant.rbs +21 -0
  253. data/sig/declarations.rbs +267 -0
  254. data/sig/definition.rbs +173 -0
  255. data/sig/definition_builder.rbs +165 -0
  256. data/sig/diff.rbs +28 -0
  257. data/sig/directives.rbs +77 -0
  258. data/sig/environment.rbs +279 -0
  259. data/sig/environment_loader.rbs +111 -0
  260. data/sig/environment_walker.rbs +65 -0
  261. data/sig/errors.rbs +405 -0
  262. data/sig/factory.rbs +5 -0
  263. data/sig/file_finder.rbs +28 -0
  264. data/sig/location.rbs +110 -0
  265. data/sig/locator.rbs +58 -0
  266. data/sig/manifest.yaml +7 -0
  267. data/sig/members.rbs +258 -0
  268. data/sig/method_builder.rbs +84 -0
  269. data/sig/method_types.rbs +58 -0
  270. data/sig/namespace.rbs +146 -0
  271. data/sig/parser.rbs +100 -0
  272. data/sig/prototype/helpers.rbs +27 -0
  273. data/sig/prototype/node_usage.rbs +20 -0
  274. data/sig/prototype/rb.rbs +96 -0
  275. data/sig/prototype/rbi.rbs +75 -0
  276. data/sig/prototype/runtime.rbs +182 -0
  277. data/sig/rbs.rbs +21 -0
  278. data/sig/rdoc/rbs.rbs +67 -0
  279. data/sig/repository.rbs +85 -0
  280. data/sig/resolver/constant_resolver.rbs +92 -0
  281. data/sig/resolver/context.rbs +34 -0
  282. data/sig/resolver/type_name_resolver.rbs +35 -0
  283. data/sig/shims/bundler.rbs +38 -0
  284. data/sig/shims/enumerable.rbs +5 -0
  285. data/sig/shims/rubygems.rbs +19 -0
  286. data/sig/sorter.rbs +41 -0
  287. data/sig/substitution.rbs +48 -0
  288. data/sig/subtractor.rbs +37 -0
  289. data/sig/test/errors.rbs +52 -0
  290. data/sig/test/guranteed.rbs +9 -0
  291. data/sig/test/type_check.rbs +19 -0
  292. data/sig/test.rbs +82 -0
  293. data/sig/type_alias_dependency.rbs +53 -0
  294. data/sig/type_alias_regularity.rbs +98 -0
  295. data/sig/type_param.rbs +110 -0
  296. data/sig/typename.rbs +79 -0
  297. data/sig/types.rbs +579 -0
  298. data/sig/unit_test/convertibles.rbs +154 -0
  299. data/sig/unit_test/spy.rbs +30 -0
  300. data/sig/unit_test/type_assertions.rbs +196 -0
  301. data/sig/unit_test/with_aliases.rbs +136 -0
  302. data/sig/use_map.rbs +35 -0
  303. data/sig/util.rbs +9 -0
  304. data/sig/validator.rbs +63 -0
  305. data/sig/variance_calculator.rbs +87 -0
  306. data/sig/vendorer.rbs +51 -0
  307. data/sig/version.rbs +3 -0
  308. data/sig/visitor.rbs +47 -0
  309. data/sig/writer.rbs +127 -0
  310. data/src/constants.c +153 -0
  311. data/src/ruby_objs.c +795 -0
  312. data/src/util/rbs_constant_pool.c +342 -0
  313. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  314. data/stdlib/abbrev/0/array.rbs +26 -0
  315. data/stdlib/base64/0/base64.rbs +355 -0
  316. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  317. data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
  318. data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
  319. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  320. data/stdlib/cgi/0/core.rbs +1285 -0
  321. data/stdlib/cgi/0/manifest.yaml +3 -0
  322. data/stdlib/coverage/0/coverage.rbs +263 -0
  323. data/stdlib/csv/0/csv.rbs +3776 -0
  324. data/stdlib/csv/0/manifest.yaml +3 -0
  325. data/stdlib/date/0/date.rbs +1585 -0
  326. data/stdlib/date/0/date_time.rbs +616 -0
  327. data/stdlib/date/0/time.rbs +26 -0
  328. data/stdlib/dbm/0/dbm.rbs +421 -0
  329. data/stdlib/delegate/0/delegator.rbs +184 -0
  330. data/stdlib/delegate/0/kernel.rbs +47 -0
  331. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  332. data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
  333. data/stdlib/digest/0/digest.rbs +577 -0
  334. data/stdlib/erb/0/erb.rbs +532 -0
  335. data/stdlib/etc/0/etc.rbs +865 -0
  336. data/stdlib/fileutils/0/fileutils.rbs +1734 -0
  337. data/stdlib/find/0/find.rbs +49 -0
  338. data/stdlib/forwardable/0/forwardable.rbs +268 -0
  339. data/stdlib/io-console/0/io-console.rbs +414 -0
  340. data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
  341. data/stdlib/json/0/json.rbs +1916 -0
  342. data/stdlib/kconv/0/kconv.rbs +166 -0
  343. data/stdlib/logger/0/formatter.rbs +45 -0
  344. data/stdlib/logger/0/log_device.rbs +100 -0
  345. data/stdlib/logger/0/logger.rbs +796 -0
  346. data/stdlib/logger/0/manifest.yaml +2 -0
  347. data/stdlib/logger/0/period.rbs +17 -0
  348. data/stdlib/logger/0/severity.rbs +34 -0
  349. data/stdlib/minitest/0/kernel.rbs +42 -0
  350. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  351. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  352. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  353. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  354. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  355. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  356. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  357. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  358. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  359. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  360. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  361. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  362. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  363. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  364. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  365. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  366. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  367. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  368. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  369. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  370. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  371. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  372. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  373. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  374. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  375. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  376. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  377. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  378. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  379. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  380. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  381. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  382. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  383. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  384. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  385. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  386. data/stdlib/minitest/0/minitest.rbs +115 -0
  387. data/stdlib/monitor/0/monitor.rbs +363 -0
  388. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  389. data/stdlib/net-http/0/manifest.yaml +3 -0
  390. data/stdlib/net-http/0/net-http.rbs +5552 -0
  391. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  392. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  393. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  394. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  395. data/stdlib/nkf/0/nkf.rbs +402 -0
  396. data/stdlib/objspace/0/objspace.rbs +487 -0
  397. data/stdlib/observable/0/observable.rbs +217 -0
  398. data/stdlib/open-uri/0/manifest.yaml +4 -0
  399. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  400. data/stdlib/open3/0/open3.rbs +147 -0
  401. data/stdlib/openssl/0/manifest.yaml +3 -0
  402. data/stdlib/openssl/0/openssl.rbs +12113 -0
  403. data/stdlib/optparse/0/optparse.rbs +1725 -0
  404. data/stdlib/pathname/0/pathname.rbs +1406 -0
  405. data/stdlib/pp/0/manifest.yaml +2 -0
  406. data/stdlib/pp/0/pp.rbs +300 -0
  407. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  408. data/stdlib/pstore/0/pstore.rbs +603 -0
  409. data/stdlib/psych/0/core_ext.rbs +12 -0
  410. data/stdlib/psych/0/dbm.rbs +237 -0
  411. data/stdlib/psych/0/manifest.yaml +3 -0
  412. data/stdlib/psych/0/psych.rbs +402 -0
  413. data/stdlib/psych/0/store.rbs +59 -0
  414. data/stdlib/pty/0/pty.rbs +237 -0
  415. data/stdlib/rdoc/0/code_object.rbs +51 -0
  416. data/stdlib/rdoc/0/comment.rbs +59 -0
  417. data/stdlib/rdoc/0/context.rbs +153 -0
  418. data/stdlib/rdoc/0/markup.rbs +117 -0
  419. data/stdlib/rdoc/0/parser.rbs +56 -0
  420. data/stdlib/rdoc/0/rdoc.rbs +391 -0
  421. data/stdlib/rdoc/0/ri.rbs +17 -0
  422. data/stdlib/rdoc/0/store.rbs +48 -0
  423. data/stdlib/rdoc/0/top_level.rbs +97 -0
  424. data/stdlib/resolv/0/manifest.yaml +3 -0
  425. data/stdlib/resolv/0/resolv.rbs +1830 -0
  426. data/stdlib/ripper/0/ripper.rbs +1648 -0
  427. data/stdlib/securerandom/0/securerandom.rbs +62 -0
  428. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  429. data/stdlib/singleton/0/singleton.rbs +131 -0
  430. data/stdlib/socket/0/addrinfo.rbs +666 -0
  431. data/stdlib/socket/0/basic_socket.rbs +590 -0
  432. data/stdlib/socket/0/constants.rbs +2295 -0
  433. data/stdlib/socket/0/ip_socket.rbs +92 -0
  434. data/stdlib/socket/0/socket.rbs +4157 -0
  435. data/stdlib/socket/0/socket_error.rbs +5 -0
  436. data/stdlib/socket/0/tcp_server.rbs +192 -0
  437. data/stdlib/socket/0/tcp_socket.rbs +79 -0
  438. data/stdlib/socket/0/udp_socket.rbs +133 -0
  439. data/stdlib/socket/0/unix_server.rbs +169 -0
  440. data/stdlib/socket/0/unix_socket.rbs +172 -0
  441. data/stdlib/stringio/0/stringio.rbs +567 -0
  442. data/stdlib/strscan/0/string_scanner.rbs +1627 -0
  443. data/stdlib/tempfile/0/tempfile.rbs +479 -0
  444. data/stdlib/time/0/time.rbs +432 -0
  445. data/stdlib/timeout/0/timeout.rbs +81 -0
  446. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  447. data/stdlib/tsort/0/cyclic.rbs +5 -0
  448. data/stdlib/tsort/0/interfaces.rbs +20 -0
  449. data/stdlib/tsort/0/tsort.rbs +409 -0
  450. data/stdlib/uri/0/common.rbs +582 -0
  451. data/stdlib/uri/0/file.rbs +118 -0
  452. data/stdlib/uri/0/ftp.rbs +13 -0
  453. data/stdlib/uri/0/generic.rbs +1108 -0
  454. data/stdlib/uri/0/http.rbs +104 -0
  455. data/stdlib/uri/0/https.rbs +14 -0
  456. data/stdlib/uri/0/ldap.rbs +230 -0
  457. data/stdlib/uri/0/ldaps.rbs +14 -0
  458. data/stdlib/uri/0/mailto.rbs +92 -0
  459. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  460. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  461. data/stdlib/uri/0/ws.rbs +13 -0
  462. data/stdlib/uri/0/wss.rbs +9 -0
  463. data/stdlib/yaml/0/manifest.yaml +2 -0
  464. data/stdlib/yaml/0/yaml.rbs +1 -0
  465. data/stdlib/zlib/0/buf_error.rbs +10 -0
  466. data/stdlib/zlib/0/data_error.rbs +10 -0
  467. data/stdlib/zlib/0/deflate.rbs +210 -0
  468. data/stdlib/zlib/0/error.rbs +20 -0
  469. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  470. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  471. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  472. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  473. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  474. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  475. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  476. data/stdlib/zlib/0/inflate.rbs +180 -0
  477. data/stdlib/zlib/0/mem_error.rbs +10 -0
  478. data/stdlib/zlib/0/need_dict.rbs +13 -0
  479. data/stdlib/zlib/0/stream_end.rbs +11 -0
  480. data/stdlib/zlib/0/stream_error.rbs +11 -0
  481. data/stdlib/zlib/0/version_error.rbs +11 -0
  482. data/stdlib/zlib/0/zlib.rbs +449 -0
  483. data/stdlib/zlib/0/zstream.rbs +200 -0
  484. metadata +532 -0
data/docs/syntax.md ADDED
@@ -0,0 +1,910 @@
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_ `)` (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 cannot be parametrized.
89
+ ```
90
+
91
+ ### Literal type
92
+
93
+ Literal type denotes _a type with only one value of the literal_.
94
+
95
+ ```rbs
96
+ 123 # Integer
97
+ "hello world" # A string
98
+ :to_s # A symbol
99
+ true # true or false
100
+ ```
101
+
102
+ ### Union type
103
+
104
+ Union type denotes _a type of one of the given types_.
105
+
106
+ ```rbs
107
+ Integer | String # Integer or String
108
+ Array[Integer | String] # Array of Integer or String
109
+ ```
110
+
111
+ ### Intersection type
112
+
113
+ Intersection type denotes _a type of all of the given types_.
114
+
115
+ ```rbs
116
+ _Reader & _Writer # _Reader and _Writer
117
+ ```
118
+
119
+ Note that `&` has higher precedence than `|` that `A & B | C` is `(A & B) | C`.
120
+
121
+ ### Optional type
122
+
123
+ Optional type denotes _a type of value or nil_.
124
+
125
+ ```rbs
126
+ Integer?
127
+ Array[Integer?]
128
+ ```
129
+
130
+ ### Record type
131
+
132
+ Records are `Hash` objects, fixed set of keys, and heterogeneous.
133
+
134
+ ```rbs
135
+ { id: Integer, name: String } # Hash object like `{ id: 31, name: String }`
136
+ ```
137
+
138
+ ### Tuple type
139
+
140
+ Tuples are `Array` objects, fixed size and heterogeneous.
141
+
142
+ ```rbs
143
+ [ ] # Empty like `[]`
144
+ [String] # Single string like `["hi"]`
145
+ [Integer, Integer] # Pair of integers like `[1, 2]`
146
+ [Symbol, Integer, Integer] # Tuple of Symbol, Integer, and Integer like `[:pair, 30, 22]`
147
+ ```
148
+
149
+ *Empty tuple* or *1-tuple* sound strange, but RBS allows these types.
150
+
151
+ ### Type variable
152
+
153
+ ```rbs
154
+ U
155
+ T
156
+ S
157
+ Elem
158
+ ```
159
+
160
+ Type variables cannot be distinguished from _class instance types_.
161
+ They are scoped in _class/module/interface/alias declaration_ or _generic method types_.
162
+
163
+ ```rbs
164
+ class Ref[T] # Object is scoped in the class declaration.
165
+ @value: T # Type variable `T`
166
+ def map: [X] { (T) -> X } -> Ref[X] # X is a type variable scoped in the method type.
167
+ end
168
+ ```
169
+
170
+ ### Base types
171
+
172
+ `self` denotes the type of receiver. The type is used to model the open recursion via `self`.
173
+
174
+ `instance` denotes the type of instance of the class. `class` is the singleton of the class.
175
+
176
+ `bool` is an alias of `true | false`.
177
+
178
+ `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`.)
179
+
180
+ `nil` is for _nil_.
181
+
182
+ `top` is a supertype of all of the types. `bot` is a subtype of all of the types.
183
+
184
+ `void` is a supertype of all of the types.
185
+
186
+ #### `nil` or `NilClass`?
187
+
188
+ We recommend using `nil`.
189
+
190
+ #### `bool` or `boolish`
191
+
192
+ We have a builtin type alias called `boolish`.
193
+ It is an alias of `top` type, and you can use `boolish` if we want to allow any object of any type.
194
+
195
+ We can see an example at the definition of `Enumerable#find`:
196
+
197
+ ```rbs
198
+ module Enumerable[Elem, Return]
199
+ def find: () { (Elem) -> boolish } -> Elem?
200
+ end
201
+ ```
202
+
203
+ We want to write something like:
204
+
205
+ ```ruby
206
+ array.find {|x| x && x.some_test? } # The block will return (bool | nil)
207
+ ```
208
+
209
+ We recommend using `boolish` for method arguments and block return values, if you only use the values for conditions.
210
+ You can write `bool` if you strictly want `true | false`.
211
+
212
+ #### `void`, `boolish`, or `top`?
213
+
214
+ They are all equivalent for the type system; they are all _top type_.
215
+
216
+ `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.
217
+
218
+ ### Proc type
219
+
220
+ Proc type denotes type of procedures, `Proc` instances.
221
+
222
+ ```rbs
223
+ ^(Integer) -> String # A procedure with an `Integer` parameter and returns `String`
224
+ ^(?String, size: Integer) -> bool # A procedure with `String` optional parameter, `size` keyword of `Integer`, and returns `bool`
225
+ ```
226
+
227
+ See the next section for details.
228
+
229
+ ### Types and contexts
230
+
231
+ We have contextual limitations on some types:
232
+
233
+ * `void` is only allowed as a return type or a generic parameter
234
+ * `self` is only allowed in *self-context*
235
+ * `class` and `instance` is only allowed in *classish-context*
236
+
237
+ These contextual limitation is introduced at RBS 3.3.
238
+ The parser accepts those types even if it doesn't satisfy contextual limitation, but warning is reported with `rbs validate` command.
239
+ We plan to change the parser to reject those types if it breaks the contextual limitations in next release -- `3.4`.
240
+
241
+ #### Limitations on `void` types
242
+
243
+ The following `void` types are allowed.
244
+
245
+ ```rbs
246
+ type t1 = ^() -> void
247
+ type t2 = Enumerator[Integer, void]
248
+ ```
249
+
250
+ The following `void` types are prohibited.
251
+
252
+ ```rbs
253
+ type t1 = ^(void) -> untyped # void as a function parameter is prohibited
254
+ type t2 = ^() -> void? # void cannot be used inside an optional type
255
+ type t3 = Enumerator[Integer, void | String] # void cannot be used inside a union type
256
+ ```
257
+
258
+ #### Examples of *self-context*
259
+
260
+ The following `self` types are allowed.
261
+
262
+ ```rbs
263
+ class Foo
264
+ attr_reader parent: self
265
+
266
+ def foo: () -> self
267
+ end
268
+ ```
269
+
270
+ The following `self` types are prohibited.
271
+
272
+ ```rbs
273
+ class Foo
274
+ include Enumerable[self] # Mixin argument is not self-context
275
+
276
+ VERSION: self # Constant type is not self-context
277
+
278
+ @@foos: Array[self] # Class variable type is not self-context
279
+
280
+ type list = nil | [self, list] # Type alias is not self-context
281
+ end
282
+ ```
283
+
284
+ #### Examples of *classish-context*
285
+
286
+ The following `class`/`instance` types are allowed.
287
+
288
+ ```rbs
289
+ class Foo
290
+ attr_reader parent: class
291
+
292
+ def foo: () -> instance # behaves like `self` in this context
293
+
294
+ def self?.bar: () -> instance # behaves like `class` for `def self.bar()` and `self` for `def bar()`
295
+
296
+ @@foos: Array[instance]
297
+
298
+ include Enumerable[class]
299
+ end
300
+ ```
301
+
302
+ The following `class`/`instance` types are prohibited.
303
+
304
+ ```rbs
305
+ class Foo
306
+ VERSION: class # Constant type is not classish-context
307
+
308
+ type list = nil | [instance, list] # Type alias is not classish-context
309
+ end
310
+ ```
311
+
312
+ ## Method Types and Proc Types
313
+
314
+ ```markdown
315
+ _method-type_ ::= _parameters?_ _block?_ `->` _type_ # Method type
316
+ | `(` `?` `)` `->` _type_ # Method type with untyped parameters
317
+
318
+ _parameters?_ ::= (Empty)
319
+ | _parameters_ (Parameters)
320
+
321
+ _parameters_ ::= `(` _required-positionals_ _optional-positionals_ _rest-positional_ _trailing-positionals_ _keywords_ `)`
322
+
323
+ _parameter_ ::= _type_ _var-name_ # Parameter with var name
324
+ | _type_ # Parameter without var name
325
+ _required-positionals_ ::= _parameter_ `,` etc.
326
+ _optional-positionals_ ::= `?` _parameter_ `,` etc.
327
+ _rest-positional_ ::= # Empty
328
+ | `*` _parameter_
329
+ _trailing-positionals_ ::= _parameter_ `,` etc.
330
+ _keywords_ ::= # Empty
331
+ | `**` _parameter_ # Rest keyword
332
+ | _keyword_ `:` _parameter_ `,` _keywords_ # Required keyword
333
+ | `?` _keyword_ `:` _parameter_ `,` _keywords_ # Optional keyword
334
+
335
+ _var-name_ ::= /[a-z]\w*/
336
+
337
+ _self-type-binding?_ = (Empty)
338
+ | `[` `self` `:` _type_ `]` (Self type binding)
339
+
340
+ _block?_ = (No block)
341
+ | `{` _parameters_ _self-type-binding?_ `->` _type_ `}` (Block)
342
+ | `{` `(` `?` `)` `->` _type_ `}` (Block with untyped parameters)
343
+ | `?` `{` _parameters_ _self-type-binding?_ `->` _type_ `}` (Optional block)
344
+ | `?` `{` `(` `?` `)` `->` _type_ `}` (Optional block with untyped parameters)
345
+ ```
346
+
347
+ ### Parameters
348
+
349
+ A parameter can be a type or a pair of type and variable name.
350
+ Variable name can be used for documentation.
351
+
352
+ #### Examples
353
+
354
+ ```rbs
355
+ # Two required positional `Integer` parameters, and returns `String`
356
+ (Integer, Integer) -> String
357
+
358
+ # Two optional parameters `size` and `name`.
359
+ # `name` is a optional parameter with optional type so that developer can omit, pass a string, or pass `nil`.
360
+ (?Integer size, ?String? name) -> String
361
+
362
+ # Method type with a rest parameter
363
+ (*Integer, Integer) -> void
364
+
365
+ # `size` is a required keyword, with variable name of `sz`.
366
+ # `name` is a optional keyword.
367
+ # `created_at` is a optional keyword, and the value can be `nil`.
368
+ (size: Integer sz, ?name: String, ?created_at: Time?) -> void
369
+ ```
370
+
371
+ ### Self type binding
372
+
373
+ Self type binding represents the type of methods that uses `#instance_eval`, which replaces the value of `self` inside blocks.
374
+
375
+ ```ruby
376
+ 123.instance_eval do
377
+ self + 1 # self is `123` here
378
+ end
379
+ ```
380
+
381
+ Proc types and blocks can have self type bindings.
382
+
383
+ ```rbs
384
+ ^(Integer) [self: String] -> void # Proc type with self type binding
385
+ ^(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`
386
+ ```
387
+
388
+ Method type can have blocks with self type bindings.
389
+
390
+ ```rbs
391
+ () { (Integer) [self: String] -> void } -> void # A method type with block with self type binding
392
+ ```
393
+
394
+ ## Members
395
+
396
+ ```markdown
397
+ _member_ ::= _ivar-member_ # Ivar definition
398
+ | _method-member_ # Method definition
399
+ | _attribute-member_ # Attribute definition
400
+ | _include-member_ # Mixin (include)
401
+ | _extend-member_ # Mixin (extend)
402
+ | _prepend-member_ # Mixin (prepend)
403
+ | _alias-member_ # Alias
404
+ | _visibility-member_ # Visibility member
405
+
406
+ _ivar-member_ ::= _ivar-name_ `:` _type_
407
+ | `self` `.` _ivar-name_ `:` _type_
408
+ | _cvar-name_ `:` _type_
409
+
410
+ _method-member_ ::= _method-class-member_
411
+ | _method-interface-member_
412
+ _method-class-member_ ::= _visibility_ `def` _method-name_ `:` _method-types_ # Instance method
413
+ | _visibility_ `def self.` _method-name_ `:` _method-types_ # Singleton method
414
+ | `def self?.` _method-name_ `:` _method-types_ # Singleton and instance method
415
+ _method-interface-member_ ::= `def` _method-name_ `:` _method-types_ # Instance method
416
+
417
+ _method-types_ ::= _method-type-parameters_ _method-type_ # Single method type
418
+ | _method-type-parameters_ _method-type_ `|` _method-types_ # Overloading types
419
+ | `...` # Overloading for duplicate definitions
420
+
421
+ _method-type-parameters_ ::= # Empty
422
+ | `[` _type-variable_ `,` ... `]`
423
+
424
+ _attribute-member_ ::= _visibility_ _attribute-type_ _method-name_ `:` _type_ # Attribute
425
+ | _visibility_ _attribute-type_ _method-name_ `(` _ivar-name_ `) :` _type_ # Attribute with variable name specification
426
+ | _visibility_ _attribute-type_ _method-name_ `() :` _type_ # Attribute without variable
427
+ | _visibility_ _attribute-type_ `self.` _method-name_ `:` _type_ # Singleton attribute
428
+ | _visibility_ _attribute-type_ `self.` _method-name_ `(` _ivar-name_ `) :` _type_ # Singleton attribute with variable name specification
429
+ | _visibility_ _attribute-type_ `self.` _method-name_ `() :` _type_ # Singleton attribute without variable
430
+ _visibility_ ::= `public` | `private`
431
+
432
+ _attribute-type_ ::= `attr_reader` | `attr_writer` | `attr_accessor`
433
+
434
+ _include-member_ ::= _include-class-member_
435
+ | _include-interface-member_
436
+ _include-class-member_ ::= `include` _class-name_ _type-arguments_
437
+ _include-interface-member_ :== `include` _interface-name_ _type-arguments_
438
+ _extend-member_ ::= `extend` _class-name_ _type-arguments_
439
+ | `extend` _interface-name_ _type-arguments_
440
+ _prepend-member_ ::= `prepend` _class-name_ _type-arguments_
441
+
442
+ _alias-member_ ::= `alias` _method-name_ _method-name_
443
+ | `alias self.` _method-name_ `self.` _method-name_
444
+
445
+ _visibility-member_ ::= _visibility_
446
+
447
+ _ivar-name_ ::= /@\w+/
448
+ _cvar-name_ ::= /@@\w+/
449
+ _method-name_ ::= _most of the possible ruby method names_
450
+ | /`[^`]+`/ # Quoted method names
451
+ ```
452
+
453
+ ### Ivar definition
454
+
455
+ An instance variable definition consists of the name of an instance variable and its type.
456
+
457
+ ```rbs
458
+ @name: String
459
+ self.@value: Hash[Symbol, Key]
460
+ @@instances: Array[instance]
461
+ ```
462
+
463
+ * Instance variables definition is *self-context* and *classish-context*
464
+ * Class instance variables definition is *self-context* and *classish-context*
465
+ * Class variables definition is *classish-context*, but NOT *self-context*
466
+
467
+ ### Method definition
468
+
469
+ Method definition has several syntax variations.
470
+
471
+ You can write `self.` or `self?.` before the name of the method to specify the kind of method: instance, singleton, or module function.
472
+
473
+ ```rbs
474
+ def to_s: () -> String # Defines a instance method
475
+ def self.new: () -> AnObject # Defines singleton method
476
+ def self?.sqrt: (Numeric) -> Numeric # self? is for `module_function`s
477
+ ```
478
+
479
+ `self?` method definition adds two methods: a public singleton method and a private instance method, which is equivalent to `module_function` in Ruby.
480
+
481
+ The method type can be connected with `|`s to define an overloaded method.
482
+
483
+ ```rbs
484
+ def +: (Float) -> Float
485
+ | (Integer) -> Integer
486
+ | (Numeric) -> Numeric
487
+ ```
488
+
489
+ Overloaded method can have `...` to overload an existing method. It is useful for monkey-patching.
490
+
491
+ ```rbs
492
+ def +: (Float) -> Float
493
+ def +: (BigDecimal) -> BigDecimal
494
+ | ...
495
+ ```
496
+
497
+ You need extra parentheses on return type to avoid ambiguity.
498
+
499
+ ```rbs
500
+ def +: (Float | Integer) -> (Float | Integer)
501
+ | (Numeric) -> Numeric
502
+ ```
503
+
504
+ Adding `public` and `private` modifier changes the visibility of the method.
505
+
506
+ ```rbs
507
+ private def puts: (*untyped) -> void # Defines private instance method
508
+
509
+ public def self.puts: (*untyped) -> void # Defines public singleton method
510
+
511
+ public def self?.puts: (*untyped) -> void # 🚨🚨🚨 Error: `?.` has own visibility semantics (== `module_function`) 🚨🚨🚨
512
+ ```
513
+
514
+ * Method types are *self-context* and *classish-context*
515
+
516
+ ### Attribute definition
517
+
518
+ Attribute definitions help to define methods and instance variables based on the convention of `attr_reader`, `attr_writer` and `attr_accessor` methods in Ruby.
519
+
520
+ You can specify the name of instance variable using `(@some_name)` syntax and also omit the instance variable definition by specifying `()`.
521
+
522
+ ```rbs
523
+ # Defines `id` method and `@id` instance variable.
524
+ attr_reader id: Integer
525
+ # @id: Integer
526
+ # def id: () -> Integer
527
+
528
+ # Defines `name=` method and `@raw_name` instance variable.
529
+ attr_writer name (@raw_name) : String
530
+ # @raw_name: String
531
+ # def name=: (String) -> String
532
+
533
+ # Defines `people` and `people=` methods, but no instance variable.
534
+ attr_accessor people (): Array[Person]
535
+ # def people: () -> Array[Person]
536
+ # def people=: (Array[Person]) -> Array[Person]
537
+ ```
538
+
539
+ Attribute definitions can have the `public` and `private` modifiers like method definitions:
540
+
541
+ ```rbs
542
+ private attr_accessor id: Integer
543
+
544
+ private attr_reader self.name: String
545
+ ```
546
+
547
+ * Attribute types are *self-context* and *classish-context*
548
+
549
+ ### Mixin (include), Mixin (extend), Mixin (prepend)
550
+
551
+ You can define mixins between class and modules.
552
+
553
+ ```rbs
554
+ include Kernel
555
+ include Enumerable[String, void]
556
+ extend ActiveSupport::Concern
557
+ ```
558
+
559
+ You can also `include` or `extend` an interface.
560
+
561
+ ```rbs
562
+ include _Hashing
563
+ extend _LikeString
564
+ ```
565
+
566
+ This allows importing `def`s from the interface to help developer implementing a set of methods.
567
+
568
+ * Mixin arguments are *classish-context*, but not *self-context*
569
+
570
+ ### Alias
571
+
572
+ You can define an alias between methods.
573
+
574
+ ```rbs
575
+ def map: [X] () { (String) -> X } -> Array[X]
576
+ alias collect map # `#collect` has the same type with `map`
577
+ ```
578
+
579
+ ### Visibility member
580
+
581
+ Visibility member allows specifying the default visibility of instance methods and instance attributes.
582
+
583
+ ```rbs
584
+ public
585
+
586
+ def foo: () -> void # public instance method
587
+
588
+ attr_reader name: String # public instance attribute
589
+
590
+ private
591
+
592
+ def bar: () -> void # private instance method
593
+
594
+ attr_reader email: String # private instance attribute
595
+ ```
596
+
597
+ The visibility _modifiers_ overwrite the default visibility per member bases.
598
+
599
+ The visibility member requires a new line `\n` after the token.
600
+
601
+ ```rbs
602
+ private alias foo bar # Syntax error
603
+ ```
604
+
605
+ ## Declarations
606
+
607
+ ```markdown
608
+ _decl_ ::= _class-decl_ # Class declaration
609
+ | _module-decl_ # Module declaration
610
+ | _class-alias-decl_ # Class alias declaration
611
+ | _module-alias-decl_ # Module alias declaration
612
+ | _interface-decl_ # Interface declaration
613
+ | _type-alias-decl_ # Type alias declaration
614
+ | _const-decl_ # Constant declaration
615
+ | _global-decl_ # Global declaration
616
+
617
+ _class-decl_ ::= `class` _class-name_ _module-type-parameters_ _members_ `end`
618
+ | `class` _class-name_ _module-type-parameters_ `<` _class-name_ _type-arguments_ _members_ `end`
619
+
620
+ _module-decl_ ::= `module` _module-name_ _module-type-parameters_ _members_ `end`
621
+ | `module` _module-name_ _module-type-parameters_ `:` _module-self-types_ _members_ `end`
622
+
623
+ _class-alias-decl_ ::= `class` _class-name_ `=` _class-name_
624
+
625
+ _module-alias-decl_ ::= `module` _module-name_ `=` _module-name_
626
+
627
+ _module-self-types_ ::= _class-name_ _type-arguments_ `,` _module-self-types_ (Class instance)
628
+ | _interface-name_ _type-arguments_ `,` _module-self-types_ (Interface)
629
+
630
+ _interface-decl_ ::= `interface` _interface-name_ _module-type-parameters_ _interface-members_ `end`
631
+
632
+ _interface-members_ ::= _method-interface-member_ # Method
633
+ | _include-interface-member_ # Mixin (include)
634
+ | _alias-member_ # Alias
635
+
636
+ _type-alias-decl_ ::= `type` _alias-name_ _module-type-parameters_ `=` _type_
637
+
638
+ _const-decl_ ::= _const-name_ `:` _type_
639
+
640
+ _global-decl_ ::= _global-name_ `:` _type_
641
+
642
+ _const-name_ ::= _namespace_ /[A-Z]\w*/
643
+ _global-name_ ::= /$[a-zA-Z]\w+/ | ...
644
+
645
+ _module-type-parameters_ ::= # Empty
646
+ | `[` _module-type-parameter_ `,` ... `]`
647
+ ```
648
+
649
+ ### Class declaration
650
+
651
+ Class declaration can have type parameters and superclass. When you omit superclass, `::Object` is assumed.
652
+
653
+ * Super class arguments and generic class upperbounds are not *classish-context* nor *self-context*
654
+
655
+ ### Module declaration
656
+
657
+ Module declaration takes optional _self type_ parameter, which defines a constraint about a class when the module is mixed.
658
+
659
+ ```rbs
660
+ interface _Each[A, B]
661
+ def each: { (A) -> void } -> B
662
+ end
663
+
664
+ module Enumerable[A, B] : _Each[A, B]
665
+ def count: () -> Integer
666
+ end
667
+ ```
668
+
669
+ The `Enumerable` module above requires `each` method for enumerating objects.
670
+
671
+ * Self type arguments and generic class upperbounds are not *classish-context* nor *self-context*
672
+
673
+ ### Class/module alias declaration
674
+
675
+ An alias of a class or module can be defined in RBS.
676
+
677
+ ```rbs
678
+ module Foo = Kernel
679
+
680
+ class Bar = Array
681
+ ```
682
+
683
+ The syntax defines a class and the definition is equivalent to the right-hand-side.
684
+
685
+ ```rbs
686
+ class Baz < Bar[String] # Class alias can be inherited
687
+ include Foo # Module alias can be included
688
+ end
689
+ ```
690
+
691
+ This is a definition corresponding to the following Ruby code.
692
+
693
+ ```ruby
694
+ Foo = Kernel
695
+
696
+ Bar = Array
697
+ ```
698
+
699
+ ### Interface declaration
700
+
701
+ Interface declaration can have parameters but allows only a few of the members.
702
+
703
+ ```rbs
704
+ interface _Hashing
705
+ def hash: () -> Integer
706
+ def eql?: (untyped) -> bool
707
+ end
708
+ ```
709
+
710
+ There are several limitations which are not described in the grammar.
711
+
712
+ 1. Interface cannot `include` modules
713
+ 2. Interface cannot have singleton method definitions
714
+
715
+ ```rbs
716
+ interface _Foo
717
+ include Bar # Error: cannot include modules
718
+ def self.new: () -> Foo # Error: cannot include singleton method definitions
719
+ end
720
+ ```
721
+
722
+ ### Type alias declaration
723
+
724
+ You can declare an alias of types.
725
+
726
+ ```rbs
727
+ type subject = Attendee | Speaker
728
+ type JSON::t = Integer | TrueClass | FalseClass | String | Hash[Symbol, t] | Array[t]
729
+ ```
730
+
731
+ Type alias can be generic like class, module, and interface.
732
+
733
+ ```rbs
734
+ type list[out T] = [T, list[T]] | nil
735
+ ```
736
+
737
+ * Alias types are not *classish-context* nor *self-context*
738
+
739
+ ### Constant type declaration
740
+
741
+ You can declare a constant.
742
+
743
+ ```rbs
744
+ Person::DefaultEmailAddress: String
745
+ ```
746
+
747
+ * Constant types are not *classish-context* nor *self-context*
748
+
749
+ ### Global type declaration
750
+
751
+ You can declare a global variable.
752
+
753
+ ```rbs
754
+ $LOAD_PATH: Array[String]
755
+ ```
756
+
757
+ * Constant types are not *classish-context* nor *self-context*
758
+
759
+ ### Generics
760
+
761
+ ```markdown
762
+ _module-type-parameter_ ::= _generics-unchecked_ _generics-variance_ _type-variable_ _generics-bound_ _default-type_
763
+
764
+ _method-type-param_ ::= _type-variable_ _generics-bound_
765
+
766
+ _generics-bound_ ::= (No type bound)
767
+ | `<` _type_ (The generics parameter is bounded)
768
+
769
+ _default-type_ ::= (No default type)
770
+ | `=` _type_ (The generics parameter has default type)
771
+
772
+ _generics-variance_ ::= (Invariant)
773
+ | `out` (Covariant)
774
+ | `in` (Contravariant)
775
+
776
+ _generics-unchecked_ ::= (Empty)
777
+ | `unchecked` (Skips variance annotation validation)
778
+ ```
779
+
780
+ RBS allows class/module/interface/type alias definitions and methods to be generic.
781
+
782
+ ```rbs
783
+ # Simple generic class definition
784
+ class Stack[T]
785
+ def push: (T) -> void
786
+
787
+ def pop: () -> T
788
+ end
789
+ ```
790
+
791
+ 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)).
792
+
793
+ 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:
794
+
795
+ ```rbs
796
+ # The `T` type parameter is covariant.
797
+ class Array[out T]
798
+ # etc.
799
+ end
800
+ ```
801
+
802
+ There's a limitation with this for mutable objects (like arrays): a mutation could invalidate this.
803
+ 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.
804
+
805
+ In those cases, one must use the `unchecked` keyword:
806
+
807
+ ```rbs
808
+ # Skips the validation of variance of the type parameter `T`.
809
+ # The type safety prohibits `out` type parameters to appear at _negative_ position (== method parameter), but we want `Array` to have it.
810
+ class Array[unchecked out T]
811
+ def include?: (T) -> bool
812
+ end
813
+ ```
814
+
815
+ This is how `Array` is actually defined in RBS.
816
+
817
+ Note that RBS doesn't allow specifying variance related annotations to generic method types.
818
+
819
+ ```rbs
820
+ class Foo
821
+ def bar: [out T] () -> T # Syntax error
822
+ end
823
+ ```
824
+
825
+ You can also specify the _upper bound_ of the type parameter.
826
+
827
+ ```rbs
828
+ class PrettyPrint[T < _Output]
829
+ interface _Output
830
+ def <<: (String) -> void
831
+ end
832
+
833
+ attr_reader output: T
834
+ end
835
+ ```
836
+
837
+ If a type parameter has an upper bound, the type parameter must be instantiated with types that is a subtype of the upper bound.
838
+
839
+ ```rbs
840
+ type str_printer = PrettyPrint[String] # OK
841
+ type int_printer = PrettyPrint[Integer] # Type error
842
+ ```
843
+
844
+ The generics type parameter of modules, classes, interfaces, or type aliases can have a default type.
845
+
846
+ ```rbs
847
+ interface _Foo[T = untyped]
848
+ end
849
+
850
+ interface _Bar[T, S = untyped]
851
+ end
852
+
853
+ type foo = _Foo # equivalent to _Foo[untyped]
854
+ type bar = _Bar[String] # equivalent to _Bar[String, untyped]
855
+ ```
856
+
857
+ Type parameters with default types cannot appear before type parameters without default types. The generic method type parameters cannot have the default types.
858
+
859
+ ### Directives
860
+
861
+ Directives are placed at the top of a file and provides per-file-basis features.
862
+
863
+ ```markdown
864
+ _use-directive_ ::= `use` _use-clauses_
865
+
866
+ _use-clauses_ ::= _use-clause_ `,` ... `,` _use-clause_
867
+
868
+ _use-clause_ ::= _type-name_ # Single use clause
869
+ | _type-name_ `as` _simple-type-name_ # Single use clause with alias
870
+ | _namespace_ # Wildcard use clause
871
+ ```
872
+
873
+ The *use directive* defines relative type names that is an alias of other type names.
874
+ We can use the simple type names if it is declared with *use*.
875
+
876
+ ```rbs
877
+ use RBS::Namespace # => Defines `Namespace`
878
+ use RBS::TypeName as TN # => Defines `TN`
879
+ use RBS::AST::* # => Defines modules under `::RBS::AST::` namespace
880
+ ```
881
+
882
+ ### Comments
883
+
884
+ You can write single line comments. Comments must be on their own line. Comments can lead with whitespace.
885
+
886
+ ```rbs
887
+ # This if interface Foo
888
+ # Usage of Foo is bar
889
+ interface _Foo
890
+ # New foo is a method
891
+ # it will return foo.
892
+ def new: () -> Foo
893
+ end
894
+ ```
895
+
896
+ ### Annotations
897
+
898
+ Annotations are placed before declarations, members, and method types to mark up a metadata for the declaration, the member, or method types.
899
+ The meaning of annotations are defined by the toolchain (ex. steep).
900
+
901
+ ```markdown
902
+ _annotations_ ::= _annotation_ ...
903
+ _annotation_ ::= `%a{` _annotation-text_ `}` # Annotation using {}
904
+ | `%a(` _annotation-text_ `)` # Annotation using ()
905
+ | `%a[` _annotation-text_ `]` # Annotation using []
906
+ | `%a|` _annotation-text_ `|` # Annotation using ||
907
+ | `%a<` _annotation-text_ `>` # Annotation using <>
908
+
909
+ _annotation-text_ ::= /[^\x00]*/ # Any characters except NUL (and parenthesis)
910
+ ```