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
@@ -0,0 +1,166 @@
1
+ %a{annotate:rdoc:skip}
2
+ module ObjectSpace
3
+ # <!-- rdoc-file=weakmap.c -->
4
+ # An ObjectSpace::WeakKeyMap is a key-value map that holds weak references to
5
+ # its keys, so they can be garbage collected when there is no more references.
6
+ #
7
+ # Unlike ObjectSpace::WeakMap:
8
+ #
9
+ # * references to values are *strong*, so they aren't garbage collected while
10
+ # they are in the map;
11
+ # * keys are compared by value (using Object#eql?), not by identity;
12
+ # * only garbage-collectable objects can be used as keys.
13
+ #
14
+ # map = ObjectSpace::WeakKeyMap.new
15
+ # val = Time.new(2023, 12, 7)
16
+ # key = "name"
17
+ # map[key] = val
18
+ #
19
+ # # Value is fetched by equality: the instance of string "name" is
20
+ # # different here, but it is equal to the key
21
+ # map["name"] #=> 2023-12-07 00:00:00 +0200
22
+ #
23
+ # val = nil
24
+ # GC.start
25
+ # # There are no more references to `val`, yet the pair isn't
26
+ # # garbage-collected.
27
+ # map["name"] #=> 2023-12-07 00:00:00 +0200
28
+ #
29
+ # key = nil
30
+ # GC.start
31
+ # # There are no more references to `key`, key and value are
32
+ # # garbage-collected.
33
+ # map["name"] #=> nil
34
+ #
35
+ # (Note that GC.start is used here only for demonstrational purposes and might
36
+ # not always lead to demonstrated results.)
37
+ #
38
+ # The collection is especially useful for implementing caches of lightweight
39
+ # value objects, so that only one copy of each value representation would be
40
+ # stored in memory, but the copies that aren't used would be garbage-collected.
41
+ #
42
+ # CACHE = ObjectSpace::WeakKeyMap
43
+ #
44
+ # def make_value(**)
45
+ # val = ValueObject.new(**)
46
+ # if (existing = @cache.getkey(val))
47
+ # # if the object with this value exists, we return it
48
+ # existing
49
+ # else
50
+ # # otherwise, put it in the cache
51
+ # @cache[val] = true
52
+ # val
53
+ # end
54
+ # end
55
+ #
56
+ # This will result in `make_value` returning the same object for same set of
57
+ # attributes always, but the values that aren't needed anymore wouldn't be
58
+ # sitting in the cache forever.
59
+ #
60
+ class WeakKeyMap[Key, Value]
61
+ # <!--
62
+ # rdoc-file=weakmap.c
63
+ # - map[key] -> value
64
+ # -->
65
+ # Returns the value associated with the given `key` if found.
66
+ #
67
+ # If `key` is not found, returns `nil`.
68
+ #
69
+ def []: (Key) -> Value?
70
+
71
+ # <!--
72
+ # rdoc-file=weakmap.c
73
+ # - map[key] = value -> value
74
+ # -->
75
+ # Associates the given `value` with the given `key`
76
+ #
77
+ # The reference to `key` is weak, so when there is no other reference to `key`
78
+ # it may be garbage collected.
79
+ #
80
+ # If the given `key` exists, replaces its value with the given `value`; the
81
+ # ordering is not affected
82
+ #
83
+ def []=: (Key, Value?) -> Value?
84
+
85
+ # <!--
86
+ # rdoc-file=weakmap.c
87
+ # - map.clear -> self
88
+ # -->
89
+ # Removes all map entries; returns `self`.
90
+ #
91
+ def clear: () -> self
92
+
93
+ # <!--
94
+ # rdoc-file=weakmap.c
95
+ # - map.delete(key) -> value or nil
96
+ # - map.delete(key) {|key| ... } -> object
97
+ # -->
98
+ # Deletes the entry for the given `key` and returns its associated value.
99
+ #
100
+ # If no block is given and `key` is found, deletes the entry and returns the
101
+ # associated value:
102
+ # m = ObjectSpace::WeakKeyMap.new
103
+ # key = "foo" # to hold reference to the key
104
+ # m[key] = 1
105
+ # m.delete("foo") # => 1
106
+ # m["foo"] # => nil
107
+ #
108
+ # If no block given and `key` is not found, returns `nil`.
109
+ #
110
+ # If a block is given and `key` is found, ignores the block, deletes the entry,
111
+ # and returns the associated value:
112
+ # m = ObjectSpace::WeakKeyMap.new
113
+ # key = "foo" # to hold reference to the key
114
+ # m[key] = 2
115
+ # m.delete("foo") { |key| raise 'Will never happen'} # => 2
116
+ #
117
+ # If a block is given and `key` is not found, yields the `key` to the block and
118
+ # returns the block's return value:
119
+ # m = ObjectSpace::WeakKeyMap.new
120
+ # m.delete("nosuch") { |key| "Key #{key} not found" } # => "Key nosuch not found"
121
+ #
122
+ def delete: (Key) -> Value?
123
+ | [T] (Key) { (Key) -> T } -> (Value | T)
124
+
125
+ # <!--
126
+ # rdoc-file=weakmap.c
127
+ # - map.getkey(key) -> existing_key or nil
128
+ # -->
129
+ # Returns the existing equal key if it exists, otherwise returns `nil`.
130
+ #
131
+ # This might be useful for implementing caches, so that only one copy of some
132
+ # object would be used everywhere in the program:
133
+ #
134
+ # value = {amount: 1, currency: 'USD'}
135
+ #
136
+ # # Now if we put this object in a cache:
137
+ # cache = ObjectSpace::WeakKeyMap.new
138
+ # cache[value] = true
139
+ #
140
+ # # ...we can always extract from there and use the same object:
141
+ # copy = cache.getkey({amount: 1, currency: 'USD'})
142
+ # copy.object_id == value.object_id #=> true
143
+ #
144
+ def getkey: (untyped) -> Key?
145
+
146
+ # <!--
147
+ # rdoc-file=weakmap.c
148
+ # - map.inspect -> new_string
149
+ # -->
150
+ # Returns a new String containing informations about the map:
151
+ #
152
+ # m = ObjectSpace::WeakKeyMap.new
153
+ # m[key] = value
154
+ # m.inspect # => "#<ObjectSpace::WeakKeyMap:0x00000001028dcba8 size=1>"
155
+ #
156
+ def inspect: () -> String
157
+
158
+ # <!--
159
+ # rdoc-file=weakmap.c
160
+ # - map.key?(key) -> true or false
161
+ # -->
162
+ # Returns `true` if `key` is a key in `self`, otherwise `false`.
163
+ #
164
+ def key?: (Key) -> bool
165
+ end
166
+ end
@@ -4,9 +4,9 @@
4
4
  # an iterator.
5
5
  #
6
6
  # ObjectSpace also provides support for object finalizers, procs that will be
7
- # called when a specific object is about to be destroyed by garbage collection.
8
- # See the documentation for `ObjectSpace.define_finalizer` for important
9
- # information on how to use this method correctly.
7
+ # called after a specific object was destroyed by garbage collection. See the
8
+ # documentation for `ObjectSpace.define_finalizer` for important information on
9
+ # how to use this method correctly.
10
10
  #
11
11
  # a = "A"
12
12
  # b = "B"
@@ -166,6 +166,7 @@ module ObjectSpace
166
166
  # rdoc-file=gc.rb
167
167
  # - garbage_collect(full_mark: true, immediate_mark: true, immediate_sweep: true)
168
168
  # -->
169
+ # Alias of GC.start
169
170
  #
170
171
  def self.garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
171
172
 
@@ -183,6 +184,7 @@ module ObjectSpace
183
184
  # rdoc-file=gc.rb
184
185
  # - garbage_collect(full_mark: true, immediate_mark: true, immediate_sweep: true)
185
186
  # -->
187
+ # Alias of GC.start
186
188
  #
187
189
  def garbage_collect: (?full_mark: bool, ?immediate_mark: bool, ?immediate_sweep: bool) -> void
188
190
  end
data/core/proc.rbs CHANGED
@@ -51,12 +51,11 @@
51
51
  # lambda1 = lambda {|x| x**2 }
52
52
  #
53
53
  # * Use the [Lambda proc
54
- # literal](doc/syntax/literals_rdoc.html#label-Lambda+Proc+Literals) syntax
55
- # (also constructs a proc with lambda semantics):
54
+ # literal](rdoc-ref:syntax/literals.rdoc@Lambda+Proc+Literals) syntax (also
55
+ # constructs a proc with lambda semantics):
56
56
  #
57
57
  # lambda2 = ->(x) { x**2 }
58
58
  #
59
- #
60
59
  # ## Lambda and non-lambda semantics
61
60
  #
62
61
  # Procs are coming in two flavors: lambda and non-lambda (regular procs).
@@ -75,7 +74,6 @@
75
74
  # filled with `nil`, single Array arguments are deconstructed if the proc
76
75
  # has multiple arguments, and there is no error raised on extra arguments.
77
76
  #
78
- #
79
77
  # Examples:
80
78
  #
81
79
  # # +return+ in non-lambda proc, +b+, exits +m2+.
@@ -238,19 +236,86 @@
238
236
  # Since `return` and `break` exits the block itself in lambdas, lambdas cannot
239
237
  # be orphaned.
240
238
  #
241
- # ## Numbered parameters
239
+ # ## Anonymous block parameters
242
240
  #
243
- # Numbered parameters are implicitly defined block parameters intended to
244
- # simplify writing short blocks:
241
+ # To simplify writing short blocks, Ruby provides two different types of
242
+ # anonymous parameters: `it` (single parameter) and numbered ones: `_1`, `_2`
243
+ # and so on.
245
244
  #
246
245
  # # Explicit parameter:
247
246
  # %w[test me please].each { |str| puts str.upcase } # prints TEST, ME, PLEASE
248
247
  # (1..5).map { |i| i**2 } # => [1, 4, 9, 16, 25]
249
248
  #
250
- # # Implicit parameter:
249
+ # # it:
250
+ # %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
251
+ # (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
252
+ #
253
+ # # Numbered parameter:
251
254
  # %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
252
255
  # (1..5).map { _1**2 } # => [1, 4, 9, 16, 25]
253
256
  #
257
+ # ### `it`
258
+ #
259
+ # `it` is a name that is available inside a block when no explicit parameters
260
+ # defined, as shown above.
261
+ #
262
+ # %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
263
+ # (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
264
+ #
265
+ # `it` is a "soft keyword": it is not a reserved name, and can be used as a name
266
+ # for methods and local variables:
267
+ #
268
+ # it = 5 # no warnings
269
+ # def it(&block) # RSpec-like API, no warnings
270
+ # # ...
271
+ # end
272
+ #
273
+ # `it` can be used as a local variable even in blocks that use it as an implicit
274
+ # parameter (though this style is obviously confusing):
275
+ #
276
+ # [1, 2, 3].each {
277
+ # # takes a value of implicit parameter "it" and uses it to
278
+ # # define a local variable with the same name
279
+ # it = it**2
280
+ # p it
281
+ # }
282
+ #
283
+ # In a block with explicit parameters defined `it` usage raises an exception:
284
+ #
285
+ # [1, 2, 3].each { |x| p it }
286
+ # # syntax error found (SyntaxError)
287
+ # # [1, 2, 3].each { |x| p it }
288
+ # # ^~ `it` is not allowed when an ordinary parameter is defined
289
+ #
290
+ # But if a local name (variable or method) is available, it would be used:
291
+ #
292
+ # it = 5
293
+ # [1, 2, 3].each { |x| p it }
294
+ # # Prints 5, 5, 5
295
+ #
296
+ # Blocks using `it` can be nested:
297
+ #
298
+ # %w[test me].each { it.each_char { p it } }
299
+ # # Prints "t", "e", "s", "t", "m", "e"
300
+ #
301
+ # Blocks using `it` are considered to have one parameter:
302
+ #
303
+ # p = proc { it**2 }
304
+ # l = lambda { it**2 }
305
+ # p.parameters # => [[:opt, nil]]
306
+ # p.arity # => 1
307
+ # l.parameters # => [[:req]]
308
+ # l.arity # => 1
309
+ #
310
+ # ### Numbered parameters
311
+ #
312
+ # Numbered parameters are another way to name block parameters implicitly.
313
+ # Unlike `it`, numbered parameters allow to refer to several parameters in one
314
+ # block.
315
+ #
316
+ # %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
317
+ # {a: 100, b: 200}.map { "#{_1} = #{_2}" } # => "a = 100", "b = 200"
318
+ #
254
319
  # Parameter names from `_1` to `_9` are supported:
255
320
  #
256
321
  # [10, 20, 30].zip([40, 50, 60], [70, 80, 90]).map { _1 + _2 + _3 }
@@ -264,11 +329,16 @@
264
329
  # [10, 20, 30].map { |x| _1**2 }
265
330
  # # SyntaxError (ordinary parameter is defined)
266
331
  #
332
+ # Numbered parameters can't be mixed with `it` either:
333
+ #
334
+ # [10, 20, 30].map { _1 + it }
335
+ # # SyntaxError: `it` is not allowed when a numbered parameter is already used
336
+ #
267
337
  # To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
268
- # so on, causes a warning.
338
+ # so on, causes an error.
269
339
  #
270
- # _1 = 'test'
271
- # # warning: `_1' is reserved as numbered parameter
340
+ # _1 = 'test'
341
+ # # ^~ _1 is reserved for numbered parameters (SyntaxError)
272
342
  #
273
343
  # Using implicit numbered parameters affects block's arity:
274
344
  #
@@ -282,14 +352,188 @@
282
352
  # Blocks with numbered parameters can't be nested:
283
353
  #
284
354
  # %w[test me].each { _1.each_char { p _1 } }
285
- # # SyntaxError (numbered parameter is already used in outer block here)
355
+ # # numbered parameter is already used in outer block (SyntaxError)
286
356
  # # %w[test me].each { _1.each_char { p _1 } }
287
357
  # # ^~
288
358
  #
289
- # Numbered parameters were introduced in Ruby 2.7.
290
- #
291
- class Proc < Object
292
- def clone: () -> self
359
+ class Proc
360
+ interface _Callable
361
+ def call: (?) -> untyped
362
+ end
363
+
364
+ # <!--
365
+ # rdoc-file=proc.c
366
+ # - Proc.new {|...| block } -> a_proc
367
+ # -->
368
+ # Creates a new Proc object, bound to the current context.
369
+ #
370
+ # proc = Proc.new { "hello" }
371
+ # proc.call #=> "hello"
372
+ #
373
+ # Raises ArgumentError if called without a block.
374
+ #
375
+ # Proc.new #=> ArgumentError
376
+ #
377
+ def self.new: () { (?) -> untyped } -> instance
378
+
379
+ def clone: () -> instance
380
+ def dup: () -> instance
381
+
382
+ # <!-- rdoc-file=proc.c -->
383
+ # Invokes the block, setting the block's parameters to the values in *params*
384
+ # using something close to method calling semantics. Returns the value of the
385
+ # last expression evaluated in the block.
386
+ #
387
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
388
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
389
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
390
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
391
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
392
+ #
393
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
394
+ # syntactic sugar to hide "call".
395
+ #
396
+ # For procs created using #lambda or `->()` an error is generated if the wrong
397
+ # number of parameters are passed to the proc. For procs created using Proc.new
398
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
399
+ # are set to `nil`.
400
+ #
401
+ # a_proc = proc {|a,b| [a,b] }
402
+ # a_proc.call(1) #=> [1, nil]
403
+ #
404
+ # a_proc = lambda {|a,b| [a,b] }
405
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
406
+ #
407
+ # See also Proc#lambda?.
408
+ #
409
+ alias === call
410
+
411
+ # <!-- rdoc-file=proc.c -->
412
+ # Invokes the block, setting the block's parameters to the values in *params*
413
+ # using something close to method calling semantics. Returns the value of the
414
+ # last expression evaluated in the block.
415
+ #
416
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
417
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
418
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
419
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
420
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
421
+ #
422
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
423
+ # syntactic sugar to hide "call".
424
+ #
425
+ # For procs created using #lambda or `->()` an error is generated if the wrong
426
+ # number of parameters are passed to the proc. For procs created using Proc.new
427
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
428
+ # are set to `nil`.
429
+ #
430
+ # a_proc = proc {|a,b| [a,b] }
431
+ # a_proc.call(1) #=> [1, nil]
432
+ #
433
+ # a_proc = lambda {|a,b| [a,b] }
434
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
435
+ #
436
+ # See also Proc#lambda?.
437
+ #
438
+ alias yield call
439
+
440
+ # <!--
441
+ # rdoc-file=proc.c
442
+ # - prc << g -> a_proc
443
+ # -->
444
+ # Returns a proc that is the composition of this proc and the given *g*. The
445
+ # returned proc takes a variable number of arguments, calls *g* with them then
446
+ # calls this proc with the result.
447
+ #
448
+ # f = proc {|x| x * x }
449
+ # g = proc {|x| x + x }
450
+ # p (f << g).call(2) #=> 16
451
+ #
452
+ # See Proc#>> for detailed explanations.
453
+ #
454
+ def <<: (_Callable callable) -> Proc
455
+
456
+ # <!--
457
+ # rdoc-file=proc.c
458
+ # - prc >> g -> a_proc
459
+ # -->
460
+ # Returns a proc that is the composition of this proc and the given *g*. The
461
+ # returned proc takes a variable number of arguments, calls this proc with them
462
+ # then calls *g* with the result.
463
+ #
464
+ # f = proc {|x| x * x }
465
+ # g = proc {|x| x + x }
466
+ # p (f >> g).call(2) #=> 8
467
+ #
468
+ # *g* could be other Proc, or Method, or any other object responding to `call`
469
+ # method:
470
+ #
471
+ # class Parser
472
+ # def self.call(text)
473
+ # # ...some complicated parsing logic...
474
+ # end
475
+ # end
476
+ #
477
+ # pipeline = File.method(:read) >> Parser >> proc { |data| puts "data size: #{data.count}" }
478
+ # pipeline.call('data.json')
479
+ #
480
+ # See also Method#>> and Method#<<.
481
+ #
482
+ def >>: (_Callable callable) -> Proc
483
+
484
+ # <!--
485
+ # rdoc-file=proc.c
486
+ # - prc == other -> true or false
487
+ # - prc.eql?(other) -> true or false
488
+ # -->
489
+ # Two procs are the same if, and only if, they were created from the same code
490
+ # block.
491
+ #
492
+ # def return_block(&block)
493
+ # block
494
+ # end
495
+ #
496
+ # def pass_block_twice(&block)
497
+ # [return_block(&block), return_block(&block)]
498
+ # end
499
+ #
500
+ # block1, block2 = pass_block_twice { puts 'test' }
501
+ # # Blocks might be instantiated into Proc's lazily, so they may, or may not,
502
+ # # be the same object.
503
+ # # But they are produced from the same code block, so they are equal
504
+ # block1 == block2
505
+ # #=> true
506
+ #
507
+ # # Another Proc will never be equal, even if the code is the "same"
508
+ # block1 == proc { puts 'test' }
509
+ # #=> false
510
+ #
511
+ def ==: (untyped other) -> bool
512
+
513
+ # <!-- rdoc-file=proc.c -->
514
+ # Two procs are the same if, and only if, they were created from the same code
515
+ # block.
516
+ #
517
+ # def return_block(&block)
518
+ # block
519
+ # end
520
+ #
521
+ # def pass_block_twice(&block)
522
+ # [return_block(&block), return_block(&block)]
523
+ # end
524
+ #
525
+ # block1, block2 = pass_block_twice { puts 'test' }
526
+ # # Blocks might be instantiated into Proc's lazily, so they may, or may not,
527
+ # # be the same object.
528
+ # # But they are produced from the same code block, so they are equal
529
+ # block1 == block2
530
+ # #=> true
531
+ #
532
+ # # Another Proc will never be equal, even if the code is the "same"
533
+ # block1 == proc { puts 'test' }
534
+ # #=> false
535
+ #
536
+ alias eql? ==
293
537
 
294
538
  # <!--
295
539
  # rdoc-file=proc.c
@@ -379,7 +623,7 @@ class Proc < Object
379
623
  #
380
624
  # See also Proc#lambda?.
381
625
  #
382
- def call: (*untyped arg0) -> untyped
626
+ def call: (?) -> untyped
383
627
 
384
628
  # <!-- rdoc-file=proc.c -->
385
629
  # Invokes the block, setting the block's parameters to the values in *params*
@@ -408,7 +652,7 @@ class Proc < Object
408
652
  #
409
653
  # See also Proc#lambda?.
410
654
  #
411
- def []: (*untyped arg0) -> untyped
655
+ alias [] call
412
656
 
413
657
  # <!--
414
658
  # rdoc-file=proc.c
@@ -421,6 +665,10 @@ class Proc < Object
421
665
  # arguments to the original proc and returns the result. Otherwise, returns
422
666
  # another curried proc that takes the rest of arguments.
423
667
  #
668
+ # The optional *arity* argument should be supplied when currying procs with
669
+ # variable arguments to determine how many arguments are needed before the proc
670
+ # is called.
671
+ #
424
672
  # b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
425
673
  # p b.curry[1][2][3] #=> 6
426
674
  # p b.curry[1, 2][3, 4] #=> 6
@@ -451,7 +699,7 @@ class Proc < Object
451
699
  # b = proc { :foo }
452
700
  # p b.curry[] #=> :foo
453
701
  #
454
- def curry: (?_ToInt arity) -> Proc
702
+ def curry: (?int? arity) -> Proc
455
703
 
456
704
  # <!--
457
705
  # rdoc-file=proc.c
@@ -463,21 +711,6 @@ class Proc < Object
463
711
  #
464
712
  def hash: () -> Integer
465
713
 
466
- # <!--
467
- # rdoc-file=proc.c
468
- # - Proc.new {|...| block } -> a_proc
469
- # -->
470
- # Creates a new Proc object, bound to the current context.
471
- #
472
- # proc = Proc.new { "hello" }
473
- # proc.call #=> "hello"
474
- #
475
- # Raises ArgumentError if called without a block.
476
- #
477
- # Proc.new #=> ArgumentError
478
- #
479
- def initialize: () { (*untyped) -> untyped } -> void
480
-
481
714
  # <!--
482
715
  # rdoc-file=proc.c
483
716
  # - prc.lambda? -> true or false
@@ -583,14 +816,22 @@ class Proc < Object
583
816
 
584
817
  # <!--
585
818
  # rdoc-file=proc.c
586
- # - prc.parameters -> array
819
+ # - prc.parameters(lambda: nil) -> array
587
820
  # -->
588
- # Returns the parameter information of this proc.
821
+ # Returns the parameter information of this proc. If the lambda keyword is
822
+ # provided and not nil, treats the proc as a lambda if true and as a non-lambda
823
+ # if false.
589
824
  #
825
+ # prc = proc{|x, y=42, *other|}
826
+ # prc.parameters #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
590
827
  # prc = lambda{|x, y=42, *other|}
591
828
  # prc.parameters #=> [[:req, :x], [:opt, :y], [:rest, :other]]
829
+ # prc = proc{|x, y=42, *other|}
830
+ # prc.parameters(lambda: true) #=> [[:req, :x], [:opt, :y], [:rest, :other]]
831
+ # prc = lambda{|x, y=42, *other|}
832
+ # prc.parameters(lambda: false) #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
592
833
  #
593
- def parameters: () -> ::Array[[ Symbol, Symbol ]]
834
+ def parameters: (?lambda: boolish) -> Method::param_types
594
835
 
595
836
  # <!--
596
837
  # rdoc-file=proc.c
@@ -599,7 +840,7 @@ class Proc < Object
599
840
  # Returns the Ruby source filename and line number containing this proc or `nil`
600
841
  # if this proc was not defined in Ruby (i.e. native).
601
842
  #
602
- def source_location: () -> [ String, Integer ]
843
+ def source_location: () -> [String, Integer]?
603
844
 
604
845
  # <!--
605
846
  # rdoc-file=proc.c
@@ -623,5 +864,5 @@ class Proc < Object
623
864
  # Returns the unique identifier for this proc, along with an indication of where
624
865
  # the proc was defined.
625
866
  #
626
- def inspect: () -> String
867
+ alias inspect to_s
627
868
  end