rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
@@ -1,93 +1,68 @@
1
1
  # <!-- rdoc-file=object.c -->
2
- # BasicObject is the parent class of all classes in Ruby. It's an explicit
3
- # blank class.
2
+ # `BasicObject` is the parent class of all classes in Ruby. In particular,
3
+ # `BasicObject` is the parent class of class Object, which is itself the default
4
+ # parent class of every Ruby class:
4
5
  #
5
- # BasicObject can be used for creating object hierarchies independent of Ruby's
6
- # object hierarchy, proxy objects like the Delegator class, or other uses where
7
- # namespace pollution from Ruby's methods and classes must be avoided.
6
+ # class Foo; end
7
+ # Foo.superclass # => Object
8
+ # Object.superclass # => BasicObject
8
9
  #
9
- # To avoid polluting BasicObject for other users an appropriately named subclass
10
- # of BasicObject should be created instead of directly modifying BasicObject:
10
+ # `BasicObject` is the only class that has no parent:
11
11
  #
12
- # class MyObjectSystem < BasicObject
13
- # end
12
+ # BasicObject.superclass # => nil
14
13
  #
15
- # BasicObject does not include Kernel (for methods like `puts`) and BasicObject
16
- # is outside of the namespace of the standard library so common classes will not
17
- # be found without using a full class path.
14
+ # Class `BasicObject` can be used to create an object hierarchy (e.g., class
15
+ # Delegator) that is independent of Ruby's object hierarchy. Such objects:
18
16
  #
19
- # A variety of strategies can be used to provide useful portions of the standard
20
- # library to subclasses of BasicObject. A subclass could `include Kernel` to
21
- # obtain `puts`, `exit`, etc. A custom Kernel-like module could be created and
22
- # included or delegation can be used via #method_missing:
17
+ # * Do not have namespace "pollution" from the many methods provided in class
18
+ # Object and its included module Kernel.
19
+ # * Do not have definitions of common classes, and so references to such
20
+ # common classes must be fully qualified (`::String`, not `String`).
23
21
  #
24
- # class MyObjectSystem < BasicObject
25
- # DELEGATE = [:puts, :p]
22
+ # A variety of strategies can be used to provide useful portions of the Standard
23
+ # Library in subclasses of `BasicObject`:
26
24
  #
27
- # def method_missing(name, *args, &block)
28
- # return super unless DELEGATE.include? name
29
- # ::Kernel.send(name, *args, &block)
30
- # end
25
+ # * The immediate subclass could `include Kernel`, which would define methods
26
+ # such as `puts`, `exit`, etc.
27
+ # * A custom Kernel-like module could be created and included.
28
+ # * Delegation can be used via #method_missing:
31
29
  #
32
- # def respond_to_missing?(name, include_private = false)
33
- # DELEGATE.include?(name) or super
34
- # end
35
- # end
30
+ # class MyObjectSystem < BasicObject
31
+ # DELEGATE = [:puts, :p]
36
32
  #
37
- # Access to classes and modules from the Ruby standard library can be obtained
38
- # in a BasicObject subclass by referencing the desired constant from the root
39
- # like `::File` or `::Enumerator`. Like #method_missing, #const_missing can be
40
- # used to delegate constant lookup to `Object`:
33
+ # def method_missing(name, *args, &block)
34
+ # return super unless DELEGATE.include? name
35
+ # ::Kernel.send(name, *args, &block)
36
+ # end
41
37
  #
42
- # class MyObjectSystem < BasicObject
43
- # def self.const_missing(name)
44
- # ::Object.const_get(name)
45
- # end
46
- # end
38
+ # def respond_to_missing?(name, include_private = false)
39
+ # DELEGATE.include?(name)
40
+ # end
41
+ # end
47
42
  #
48
43
  # ### What's Here
49
44
  #
50
45
  # These are the methods defined for BasicObject:
51
46
  #
52
- # ::new
53
- # : Returns a new BasicObject instance.
54
- #
55
- # [!](#method-i-21)
56
- # : Returns the boolean negation of `self`: `true` or `false`.
57
- #
58
- # [!=](#method-i-21-3D)
59
- # : Returns whether `self` and the given object are *not* equal.
60
- #
61
- # [==](#method-i-3D-3D)
62
- # : Returns whether `self` and the given object are equivalent.
63
- #
64
- # [__id__](#method-i-__id__)
65
- # : Returns the integer object identifier for `self`.
66
- #
67
- # [__send__](#method-i-__send__)
68
- # : Calls the method identified by the given symbol.
69
- #
70
- # #equal?
71
- # : Returns whether `self` and the given object are the same object.
72
- #
73
- # #instance_eval
74
- # : Evaluates the given string or block in the context of `self`.
75
- #
76
- # #instance_exec
77
- # : Executes the given block in the context of `self`, passing the given
78
- # arguments.
79
- #
80
- # #method_missing
81
- # : Method called when an undefined method is called on `self`.
82
- #
83
- # #singleton_method_added
84
- # : Method called when a singleton method is added to `self`.
85
- #
86
- # #singleton_method_removed
87
- # : Method called when a singleton method is added removed from `self`.
88
- #
89
- # #singleton_method_undefined
90
- # : Method called when a singleton method is undefined in `self`.
47
+ # * ::new: Returns a new BasicObject instance.
48
+ # * #!: Returns the boolean negation of `self`: `true` or `false`.
49
+ # * #!=: Returns whether `self` and the given object are *not* equal.
50
+ # * #==: Returns whether `self` and the given object are equivalent.
51
+ # * #__id__: Returns the integer object identifier for `self`.
52
+ # * #__send__: Calls the method identified by the given symbol.
53
+ # * #equal?: Returns whether `self` and the given object are the same object.
54
+ # * #instance_eval: Evaluates the given string or block in the context of
55
+ # `self`.
56
+ # * #instance_exec: Executes the given block in the context of `self`, passing
57
+ # the given arguments.
58
+ # * #method_missing: Called when `self` is called with a method it does not
59
+ # define.
60
+ # * #singleton_method_added: Called when a singleton method is added to
61
+ # `self`.
62
+ # * #singleton_method_removed: Called when a singleton method is removed from
63
+ # `self`.
64
+ # * #singleton_method_undefined: Called when a singleton method is undefined
65
+ # in `self`.
91
66
  #
92
67
  class BasicObject
93
68
  # <!--
@@ -156,7 +131,7 @@ class BasicObject
156
131
  # Note: that some objects of builtin classes are reused for optimization. This
157
132
  # is the case for immediate values and frozen string literals.
158
133
  #
159
- # BasicObject implements +__id__+, Kernel implements `object_id`.
134
+ # BasicObject implements `__id__`, Kernel implements `object_id`.
160
135
  #
161
136
  # Immediate values are not passed by reference but are passed by value: `nil`,
162
137
  # `true`, `false`, Fixnums, Symbols, and some Floats.
@@ -179,7 +154,7 @@ class BasicObject
179
154
  # When the method is identified by a string, the string is converted to a
180
155
  # symbol.
181
156
  #
182
- # BasicObject implements +__send__+, Kernel implements `send`. `__send__` is
157
+ # BasicObject implements `__send__`, Kernel implements `send`. `__send__` is
183
158
  # safer than `send` when *obj* has the same method name like `Socket`. See also
184
159
  # `public_send`.
185
160
  #
@@ -191,7 +166,7 @@ class BasicObject
191
166
  # k = Klass.new
192
167
  # k.send :hello, "gentle", "readers" #=> "Hello gentle readers"
193
168
  #
194
- def __send__: (String | Symbol arg0, *untyped args) -> untyped
169
+ def __send__: (interned name, *untyped, **untyped) ?{ (?) -> untyped } -> untyped
195
170
 
196
171
  # <!-- rdoc-file=object.c -->
197
172
  # Equality --- At the Object level, #== returns `true` only if `obj` and `other`
@@ -223,7 +198,7 @@ class BasicObject
223
198
  # 1 == 1.0 #=> true
224
199
  # 1.eql? 1.0 #=> false
225
200
  #
226
- def equal?: (untyped other) -> bool
201
+ alias equal? ==
227
202
 
228
203
  # <!--
229
204
  # rdoc-file=vm_eval.c
@@ -256,7 +231,7 @@ class BasicObject
256
231
  # k.instance_eval { the_secret } #=> "Ssssh! The secret is 99."
257
232
  # k.instance_eval {|obj| obj == self } #=> true
258
233
  #
259
- def instance_eval: (String, ?String filename, ?Integer lineno) -> untyped
234
+ def instance_eval: (string code, ?string filename, ?int lineno) -> untyped
260
235
  | [U] () { (self) [self: self] -> U } -> U
261
236
 
262
237
  # <!--
@@ -276,7 +251,7 @@ class BasicObject
276
251
  # k = KlassWithSecret.new
277
252
  # k.instance_exec(5) {|x| @secret+x } #=> 104
278
253
  #
279
- def instance_exec: [U, V] (*V args) { (*V args) [self: self] -> U } -> U
254
+ def instance_exec: [U] (*untyped, **untyped) { (?) [self: self] -> U } -> U
280
255
 
281
256
  # <!--
282
257
  # rdoc-file=object.c
@@ -323,7 +298,7 @@ class BasicObject
323
298
  # r.mm #=> 2000
324
299
  # r.foo #=> NoMethodError
325
300
  #
326
- def method_missing: (Symbol, *untyped, **untyped) ?{ (*untyped, **untyped) -> untyped } -> untyped
301
+ def method_missing: (Symbol, *untyped, **untyped) ?{ (?) -> untyped } -> untyped
327
302
 
328
303
  # <!--
329
304
  # rdoc-file=object.c
@@ -346,7 +321,7 @@ class BasicObject
346
321
  # Adding one
347
322
  # Adding three
348
323
  #
349
- def singleton_method_added: (Symbol) -> void
324
+ def singleton_method_added: (Symbol name) -> nil
350
325
 
351
326
  # <!--
352
327
  # rdoc-file=object.c
@@ -373,7 +348,7 @@ class BasicObject
373
348
  # Removing three
374
349
  # Removing one
375
350
  #
376
- def singleton_method_removed: (Symbol) -> void
351
+ def singleton_method_removed: (Symbol name) -> nil
377
352
 
378
353
  # <!--
379
354
  # rdoc-file=object.c
@@ -396,5 +371,5 @@ class BasicObject
396
371
  #
397
372
  # Undefining one
398
373
  #
399
- def singleton_method_undefined: (Symbol) -> void
374
+ def singleton_method_undefined: (Symbol name) -> nil
400
375
  end
data/core/binding.rbs CHANGED
@@ -30,10 +30,10 @@
30
30
  # Binding objects have no class-specific methods.
31
31
  #
32
32
  class Binding
33
- public
34
-
35
33
  def clone: () -> self
36
34
 
35
+ def dup: () -> self
36
+
37
37
  # <!--
38
38
  # rdoc-file=proc.c
39
39
  # - binding.eval(string [, filename [,lineno]]) -> obj
@@ -48,69 +48,7 @@ class Binding
48
48
  # b = get_binding("hello")
49
49
  # b.eval("param") #=> "hello"
50
50
  #
51
- def eval: (String arg0, ?String filename, ?Integer lineno) -> untyped
52
-
53
- # <!--
54
- # rdoc-file=lib/irb.rb
55
- # - irb()
56
- # -->
57
- # Opens an IRB session where `binding.irb` is called which allows for
58
- # interactive debugging. You can call any methods or variables available in the
59
- # current scope, and mutate state if you need to.
60
- #
61
- # Given a Ruby file called `potato.rb` containing the following code:
62
- #
63
- # class Potato
64
- # def initialize
65
- # @cooked = false
66
- # binding.irb
67
- # puts "Cooked potato: #{@cooked}"
68
- # end
69
- # end
70
- #
71
- # Potato.new
72
- #
73
- # Running `ruby potato.rb` will open an IRB session where `binding.irb` is
74
- # called, and you will see the following:
75
- #
76
- # $ ruby potato.rb
77
- #
78
- # From: potato.rb @ line 4 :
79
- #
80
- # 1: class Potato
81
- # 2: def initialize
82
- # 3: @cooked = false
83
- # => 4: binding.irb
84
- # 5: puts "Cooked potato: #{@cooked}"
85
- # 6: end
86
- # 7: end
87
- # 8:
88
- # 9: Potato.new
89
- #
90
- # irb(#<Potato:0x00007feea1916670>):001:0>
91
- #
92
- # You can type any valid Ruby code and it will be evaluated in the current
93
- # context. This allows you to debug without having to run your code repeatedly:
94
- #
95
- # irb(#<Potato:0x00007feea1916670>):001:0> @cooked
96
- # => false
97
- # irb(#<Potato:0x00007feea1916670>):002:0> self.class
98
- # => Potato
99
- # irb(#<Potato:0x00007feea1916670>):003:0> caller.first
100
- # => ".../2.5.1/lib/ruby/2.5.0/irb/workspace.rb:85:in `eval'"
101
- # irb(#<Potato:0x00007feea1916670>):004:0> @cooked = true
102
- # => true
103
- #
104
- # You can exit the IRB session with the `exit` command. Note that exiting will
105
- # resume execution where `binding.irb` had paused it, as you can see from the
106
- # output printed to standard output in this example:
107
- #
108
- # irb(#<Potato:0x00007feea1916670>):005:0> exit
109
- # Cooked potato: true
110
- #
111
- # See IRB@IRB+Usage for more information.
112
- #
113
- def irb: () -> void
51
+ def eval: (string src, ?string filename, ?int lineno) -> untyped
114
52
 
115
53
  # <!--
116
54
  # rdoc-file=proc.c
@@ -128,7 +66,7 @@ class Binding
128
66
  #
129
67
  # binding.eval("defined?(#{symbol}) == 'local-variable'")
130
68
  #
131
- def local_variable_defined?: (String | Symbol symbol) -> bool
69
+ def local_variable_defined?: (interned varname) -> bool
132
70
 
133
71
  # <!--
134
72
  # rdoc-file=proc.c
@@ -146,7 +84,7 @@ class Binding
146
84
  #
147
85
  # binding.eval("#{symbol}")
148
86
  #
149
- def local_variable_get: (String | Symbol symbol) -> untyped
87
+ def local_variable_get: (interned varname) -> untyped
150
88
 
151
89
  # <!--
152
90
  # rdoc-file=proc.c
@@ -173,7 +111,7 @@ class Binding
173
111
  #
174
112
  # if `obj` can be dumped in Ruby code.
175
113
  #
176
- def local_variable_set: [U] (String | Symbol symbol, U obj) -> U
114
+ def local_variable_set: [U] (interned varname, U obj) -> U
177
115
 
178
116
  # <!--
179
117
  # rdoc-file=proc.c
@@ -208,5 +146,5 @@ class Binding
208
146
  # -->
209
147
  # Returns the Ruby source filename and line number of the binding object.
210
148
  #
211
- def source_location: () -> [ String, Integer ]
149
+ def source_location: () -> [String, Integer]
212
150
  end
data/core/builtin.rbs CHANGED
@@ -1,37 +1,181 @@
1
+ # A type that's convertible to a `Complex`.
2
+ #
3
+ interface _ToC
4
+ # Convert `self` to a `Complex`.
5
+ #
6
+ def to_c: () -> Complex
7
+ end
8
+
9
+ # A type that's convertible to a `Rational`.
10
+ #
11
+ interface _ToR
12
+ # Convert `self` to a `Complex`.
13
+ #
14
+ def to_r: () -> Rational
15
+ end
16
+
17
+ # A type that's convertible to a `Float`.
18
+ #
19
+ interface _ToF
20
+ # Convert `self` to a `Float`.
21
+ #
22
+ def to_f: () -> Float
23
+ end
24
+
25
+ # A type that's convertible to an `Integer`.
26
+ #
1
27
  interface _ToI
28
+ # Convert `self` to an `Integer`.
29
+ #
2
30
  def to_i: () -> Integer
3
31
  end
4
32
 
33
+ # A type that's implicitly convertible to an `Integer`.
34
+ #
35
+ # Implicit `.to_int` conversions are usable all over Ruby's stdlib, such as `Kernel#exit`,
36
+ # `File#chmod`, and `Array#take`. Virtually anywhere that accepts an `Integer` will also accept
37
+ # something that defines `.to_int`.
38
+ #
39
+ # Interestingly, types that define `.to_int` aren't immediately converted in math operations on
40
+ # `Integers` (eg `1 + defines_to_int`): Instead, `.coerce` must be defined on the right-hand-side
41
+ # value.
42
+ #
5
43
  interface _ToInt
44
+ # Converts `self` to an `Integer`.
45
+ #
6
46
  def to_int: () -> Integer
7
47
  end
8
48
 
9
- interface _ToR
10
- def to_r: () -> Rational
11
- end
12
-
49
+ # A type that's convertible to a `String`.
50
+ #
13
51
  interface _ToS
52
+ # Converts `self` to a `String`.
53
+ #
14
54
  def to_s: () -> String
15
55
  end
16
56
 
57
+ # A type that's implicitly convertible to a `String`.
58
+ #
59
+ # Implicit `.to_str` conversions are usable all over Ruby's stdlib, such as `Kernel#abort`,
60
+ # `String#+`, and `Object#send`. Virtually anywhere that accepts a `String` will also accept
61
+ # something that defines `.to_Str`.
62
+ #
63
+ # Types that define `.to_str` are also usable wherever paths are expected (See the `path` type
64
+ # alias).
65
+ #
17
66
  interface _ToStr
67
+ # Converts `self` to a `String`.
68
+ #
18
69
  def to_str: () -> String
19
70
  end
20
71
 
72
+ # A type that's explicitly convertible to a `String`.
73
+ #
74
+ # Interestingly enough, most methods that accept `Symbol` in the standard library _do not_ accept
75
+ # an object that defines `.to_sym` (unlike `String` and `.to_str`).
76
+ #
77
+ # There are only two places that `Symbol | _ToSym`, and they're quite obscure:
78
+ # - `Kernel#warn`'s `category:` optional parameter. (Oddly enough, not for `Warning.warn`, though.)
79
+ # - `TracePoint#trace`'s `event`s parameter.
80
+ # Additionally, the `rb_iseq_load` C function, only accessible through `Fiddle`, uses `.to_sym`
81
+ # internally.
82
+ #
83
+ interface _ToSym
84
+ # Converts `self` to a `Symbol`.
85
+ #
86
+ def to_sym: () -> Symbol
87
+ end
88
+
89
+ # A type that's convertible to a `Hash`.
90
+ #
91
+ interface _ToH[K, V]
92
+ # Converts `self` to a `Hash`.
93
+ #
94
+ def to_h: () -> Hash[K, V]
95
+ end
96
+
97
+ # A type that's implicitly convertible to a `Hash`.
98
+ #
99
+ # Implicit `.to_hash` conversions are usable infrequently in Ruby's stdlib, such as `Io#popen`,
100
+ # `Kernel#sprintf`, and `Enumerable#tally`. It's also used with the `**` "splatsplat" operator.
101
+ #
21
102
  interface _ToHash[K, V]
103
+ # Converts `self` to a `Hash`.
104
+ #
22
105
  def to_hash: () -> Hash[K, V]
23
106
  end
24
107
 
108
+ # A type that's convertible to an `Array`.
109
+ #
110
+ interface _ToA[T]
111
+ # Converts `self` to an `Array`.
112
+ #
113
+ def to_a: () -> Array[T]
114
+ end
115
+
116
+ # A type that's implicitly convertible to an `Array`.
117
+ #
118
+ # Implicit `.to_ary` conversions are usable semi-frequently in Ruby's stdlib, such as `Dir#glob`,
119
+ # `Regex#union`, and `Class#private`. It's also used with the `*` "splat" operator.
120
+ #
121
+ interface _ToAry[T]
122
+ # Converts `self` to an `Array`.
123
+ #
124
+ def to_ary: () -> Array[T]
125
+ end
126
+
127
+ # A type that's convertible to a `Proc`.
128
+ #
129
+ # This is implicitly called when the `&` "block-passing" operator is used, in addition to a handful
130
+ # of other places, such as `Hash#default_proc=`.
131
+ #
25
132
  interface _ToProc
26
- def to_proc: () -> untyped
133
+ # Converts `self` to a `Proc.`
134
+ #
135
+ def to_proc: () -> Proc
27
136
  end
28
137
 
138
+ # A type that's convertible to a `String` that contains a filepath.
139
+ #
140
+ # Implicit `.to_path` conversions are usable throughout Ruby's stdlib, whenever a file path is
141
+ # expected, such as `Dir#mkdir`, `File#open`, and `UNIXSocket#read`. These functions, however, also
142
+ # accept types that define `.to_str`. See the `path` type alias.
143
+ #
29
144
  interface _ToPath
145
+ # Converts `self` to a `String` containing a filepath.
146
+ #
30
147
  def to_path: () -> String
31
148
  end
32
149
 
33
- interface _Each[out A]
34
- def each: () { (A) -> void } -> void
150
+ # A type that's convertible to an `IO`.
151
+ #
152
+ # Implicit `.to_io` conversions are usuable infrequently in Ruby's stdlib, such as `IO#reopen`,
153
+ # `File.exist?`, and `Kernel#select`.
154
+ #
155
+ interface _ToIO
156
+ # Converts `self` to an `IO` object.
157
+ #
158
+ def to_io: () -> IO
159
+ end
160
+
161
+ # A type that defines the `.inspect` method.
162
+ #
163
+ # Since `Object` defines `.inspect`, nearly every object in Ruby has it defined: Only those that
164
+ # derive from `BasicObject`, or `undef inspect` won't have it. It's used in a few locations,
165
+ # such as `Kernel#p` and `Array#join`.
166
+ #
167
+ interface _Inspect
168
+ # Returns a debugging representation of `self`.
169
+ #
170
+ def inspect: () -> String
171
+ end
172
+
173
+ interface _Each[out E, out R = void]
174
+ def each: () { (E) -> void } -> R
175
+ end
176
+
177
+ interface _EachEntry[out E]
178
+ def each_entry: () { (E) -> void } -> self
35
179
  end
36
180
 
37
181
  interface _Reader
@@ -44,6 +188,7 @@ end
44
188
 
45
189
  interface _Writer
46
190
  # Writes the +data+ string. Returns the number of bytes written
191
+ #
47
192
  def write: (*_ToS data) -> Integer
48
193
  end
49
194
 
@@ -53,8 +198,20 @@ interface _Rewindable
53
198
  def rewind: () -> Integer
54
199
  end
55
200
 
56
- interface _ToIO
57
- def to_io: () -> IO
201
+ # A type that's usable like a `Range[T]`.
202
+ #
203
+ # Implicit `_Range` usage is usable frequently in ruby's stdlib, such as `Comparable#clamp`,
204
+ # `String#[]`, and `Kernel#rand`.
205
+ #
206
+ interface _Range[T]
207
+ # The beginning value, `nil` if there is no beginning.
208
+ def begin: () -> T?
209
+
210
+ # The ending value, `nil` if there is no ending.
211
+ def end: () -> T?
212
+
213
+ # Whether or not to include the end in the range.
214
+ def exclude_end?: () -> bool
58
215
  end
59
216
 
60
217
  interface _Exception
@@ -62,14 +219,56 @@ interface _Exception
62
219
  | (String arg0) -> Exception
63
220
  end
64
221
 
222
+ # Represents an `Integer`, or a type convertible to it (via `.to_int`).
223
+ #
65
224
  type int = Integer | _ToInt
66
- type real = Integer | Float | Rational
67
225
 
226
+ # Represents a `Float`, or a type convertible to it (via `.to_f`).
227
+ #
228
+ type float = Float | _ToF
229
+
230
+ # Represents a `Range[T]`, or a type that acts like it (via `.begin`, `.end`, and `.exclude_end?`).
231
+ #
232
+ type range[T] = Range[T] | _Range[T]
233
+
234
+ # Represents a `String`, or a type convertible to it (via `.to_str`).
235
+ #
68
236
  type string = String | _ToStr
69
- type encoding = Encoding | string
70
237
 
238
+ # Represents an `Array[T]`, or a type convertible to it (via `.to_ary`).
239
+ #
240
+ type array[T] = Array[T] | _ToAry[T]
241
+
242
+ # Represents a `Hash[K, V]`, or a type convertible to it (via `.to_hash`).
243
+ #
244
+ type hash[K, V] = Hash[K, V] | _ToHash[K, V]
245
+
246
+ # Represents an `IO`, or a type convertible to it (via `.to_io`).
247
+ #
71
248
  type io = IO | _ToIO
72
249
 
250
+ # A filesystem path: Either something that defines `.to_path`, or a `String` (or a type that is
251
+ # convertible to a string via `.to_str`).
252
+ #
253
+ # If a type defines both `.to_path` and `.to_str`, the `.to_path` function is called.
254
+ #
255
+ type path = string | _ToPath
256
+
257
+ # An `Encoding`, or a `String` (or type that defines `.to_str`) that represents it.
258
+ #
259
+ type encoding = Encoding | string
260
+
261
+ # A real number, ie not a `Complex`.
262
+ #
263
+ type real = Integer | Float | Rational
264
+
265
+ # Represents a `Symbol` or a `string`.
266
+ #
267
+ # A lot of builtin functions accept either a Symbol, a String, or something which has `.to_str`
268
+ # defined.
269
+ #
270
+ type interned = Symbol | string
271
+
73
272
  # `boolish` is a type for documentation.
74
273
  # It means the value of this type is only for testing a condition.
75
274
  # Unlike `bool` type, it doesn't require the value is one of `true` or `false`.
data/core/class.rbs CHANGED
@@ -106,6 +106,24 @@ class Class < Module
106
106
  #
107
107
  def allocate: () -> untyped
108
108
 
109
+ # <!--
110
+ # rdoc-file=object.c
111
+ # - attached_object -> object
112
+ # -->
113
+ # Returns the object for which the receiver is the singleton class.
114
+ #
115
+ # Raises an TypeError if the class is not a singleton class.
116
+ #
117
+ # class Foo; end
118
+ #
119
+ # Foo.singleton_class.attached_object #=> Foo
120
+ # Foo.attached_object #=> TypeError: `Foo' is not a singleton class
121
+ # Foo.new.singleton_class.attached_object #=> #<Foo:0x000000010491a370>
122
+ # TrueClass.attached_object #=> TypeError: `TrueClass' is not a singleton class
123
+ # NilClass.attached_object #=> TypeError: `NilClass' is not a singleton class
124
+ #
125
+ def attached_object: () -> untyped
126
+
109
127
  # <!--
110
128
  # rdoc-file=object.c
111
129
  # - inherited(subclass)
@@ -160,6 +178,25 @@ class Class < Module
160
178
  # B.subclasses #=> [C]
161
179
  # C.subclasses #=> []
162
180
  #
181
+ # Anonymous subclasses (not associated with a constant) are returned, too:
182
+ #
183
+ # c = Class.new(A)
184
+ # A.subclasses # => [#<Class:0x00007f003c77bd78>, D, B]
185
+ #
186
+ # Note that the parent does not hold references to subclasses and doesn't
187
+ # prevent them from being garbage collected. This means that the subclass might
188
+ # disappear when all references to it are dropped:
189
+ #
190
+ # # drop the reference to subclass, it can be garbage-collected now
191
+ # c = nil
192
+ #
193
+ # A.subclasses
194
+ # # It can be
195
+ # # => [#<Class:0x00007f003c77bd78>, D, B]
196
+ # # ...or just
197
+ # # => [D, B]
198
+ # # ...depending on whether garbage collector was run
199
+ #
163
200
  def subclasses: () -> Array[Class]
164
201
 
165
202
  # <!--