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/core/proc.rbs ADDED
@@ -0,0 +1,868 @@
1
+ # <!-- rdoc-file=proc.c -->
2
+ # A `Proc` object is an encapsulation of a block of code, which can be stored in
3
+ # a local variable, passed to a method or another Proc, and can be called. Proc
4
+ # is an essential concept in Ruby and a core of its functional programming
5
+ # features.
6
+ #
7
+ # square = Proc.new {|x| x**2 }
8
+ #
9
+ # square.call(3) #=> 9
10
+ # # shorthands:
11
+ # square.(3) #=> 9
12
+ # square[3] #=> 9
13
+ #
14
+ # Proc objects are *closures*, meaning they remember and can use the entire
15
+ # context in which they were created.
16
+ #
17
+ # def gen_times(factor)
18
+ # Proc.new {|n| n*factor } # remembers the value of factor at the moment of creation
19
+ # end
20
+ #
21
+ # times3 = gen_times(3)
22
+ # times5 = gen_times(5)
23
+ #
24
+ # times3.call(12) #=> 36
25
+ # times5.call(5) #=> 25
26
+ # times3.call(times5.call(4)) #=> 60
27
+ #
28
+ # ## Creation
29
+ #
30
+ # There are several methods to create a Proc
31
+ #
32
+ # * Use the Proc class constructor:
33
+ #
34
+ # proc1 = Proc.new {|x| x**2 }
35
+ #
36
+ # * Use the Kernel#proc method as a shorthand of Proc.new:
37
+ #
38
+ # proc2 = proc {|x| x**2 }
39
+ #
40
+ # * Receiving a block of code into proc argument (note the `&`):
41
+ #
42
+ # def make_proc(&block)
43
+ # block
44
+ # end
45
+ #
46
+ # proc3 = make_proc {|x| x**2 }
47
+ #
48
+ # * Construct a proc with lambda semantics using the Kernel#lambda method (see
49
+ # below for explanations about lambdas):
50
+ #
51
+ # lambda1 = lambda {|x| x**2 }
52
+ #
53
+ # * Use the [Lambda proc
54
+ # literal](rdoc-ref:syntax/literals.rdoc@Lambda+Proc+Literals) syntax (also
55
+ # constructs a proc with lambda semantics):
56
+ #
57
+ # lambda2 = ->(x) { x**2 }
58
+ #
59
+ # ## Lambda and non-lambda semantics
60
+ #
61
+ # Procs are coming in two flavors: lambda and non-lambda (regular procs).
62
+ # Differences are:
63
+ #
64
+ # * In lambdas, `return` and `break` means exit from this lambda;
65
+ # * In non-lambda procs, `return` means exit from embracing method (and will
66
+ # throw `LocalJumpError` if invoked outside the method);
67
+ # * In non-lambda procs, `break` means exit from the method which the block
68
+ # given for. (and will throw `LocalJumpError` if invoked after the method
69
+ # returns);
70
+ # * In lambdas, arguments are treated in the same way as in methods: strict,
71
+ # with `ArgumentError` for mismatching argument number, and no additional
72
+ # argument processing;
73
+ # * Regular procs accept arguments more generously: missing arguments are
74
+ # filled with `nil`, single Array arguments are deconstructed if the proc
75
+ # has multiple arguments, and there is no error raised on extra arguments.
76
+ #
77
+ # Examples:
78
+ #
79
+ # # +return+ in non-lambda proc, +b+, exits +m2+.
80
+ # # (The block +{ return }+ is given for +m1+ and embraced by +m2+.)
81
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { return }; $a << :m2 end; m2; p $a
82
+ # #=> []
83
+ #
84
+ # # +break+ in non-lambda proc, +b+, exits +m1+.
85
+ # # (The block +{ break }+ is given for +m1+ and embraced by +m2+.)
86
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { break }; $a << :m2 end; m2; p $a
87
+ # #=> [:m2]
88
+ #
89
+ # # +next+ in non-lambda proc, +b+, exits the block.
90
+ # # (The block +{ next }+ is given for +m1+ and embraced by +m2+.)
91
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1 { next }; $a << :m2 end; m2; p $a
92
+ # #=> [:m1, :m2]
93
+ #
94
+ # # Using +proc+ method changes the behavior as follows because
95
+ # # The block is given for +proc+ method and embraced by +m2+.
96
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { return }); $a << :m2 end; m2; p $a
97
+ # #=> []
98
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { break }); $a << :m2 end; m2; p $a
99
+ # # break from proc-closure (LocalJumpError)
100
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&proc { next }); $a << :m2 end; m2; p $a
101
+ # #=> [:m1, :m2]
102
+ #
103
+ # # +return+, +break+ and +next+ in the stubby lambda exits the block.
104
+ # # (+lambda+ method behaves same.)
105
+ # # (The block is given for stubby lambda syntax and embraced by +m2+.)
106
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { return }); $a << :m2 end; m2; p $a
107
+ # #=> [:m1, :m2]
108
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { break }); $a << :m2 end; m2; p $a
109
+ # #=> [:m1, :m2]
110
+ # $a = []; def m1(&b) b.call; $a << :m1 end; def m2() m1(&-> { next }); $a << :m2 end; m2; p $a
111
+ # #=> [:m1, :m2]
112
+ #
113
+ # p = proc {|x, y| "x=#{x}, y=#{y}" }
114
+ # p.call(1, 2) #=> "x=1, y=2"
115
+ # p.call([1, 2]) #=> "x=1, y=2", array deconstructed
116
+ # p.call(1, 2, 8) #=> "x=1, y=2", extra argument discarded
117
+ # p.call(1) #=> "x=1, y=", nil substituted instead of error
118
+ #
119
+ # l = lambda {|x, y| "x=#{x}, y=#{y}" }
120
+ # l.call(1, 2) #=> "x=1, y=2"
121
+ # l.call([1, 2]) # ArgumentError: wrong number of arguments (given 1, expected 2)
122
+ # l.call(1, 2, 8) # ArgumentError: wrong number of arguments (given 3, expected 2)
123
+ # l.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
124
+ #
125
+ # def test_return
126
+ # -> { return 3 }.call # just returns from lambda into method body
127
+ # proc { return 4 }.call # returns from method
128
+ # return 5
129
+ # end
130
+ #
131
+ # test_return # => 4, return from proc
132
+ #
133
+ # Lambdas are useful as self-sufficient functions, in particular useful as
134
+ # arguments to higher-order functions, behaving exactly like Ruby methods.
135
+ #
136
+ # Procs are useful for implementing iterators:
137
+ #
138
+ # def test
139
+ # [[1, 2], [3, 4], [5, 6]].map {|a, b| return a if a + b > 10 }
140
+ # # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
141
+ # end
142
+ #
143
+ # Inside `map`, the block of code is treated as a regular (non-lambda) proc,
144
+ # which means that the internal arrays will be deconstructed to pairs of
145
+ # arguments, and `return` will exit from the method `test`. That would not be
146
+ # possible with a stricter lambda.
147
+ #
148
+ # You can tell a lambda from a regular proc by using the #lambda? instance
149
+ # method.
150
+ #
151
+ # Lambda semantics is typically preserved during the proc lifetime, including
152
+ # `&`-deconstruction to a block of code:
153
+ #
154
+ # p = proc {|x, y| x }
155
+ # l = lambda {|x, y| x }
156
+ # [[1, 2], [3, 4]].map(&p) #=> [1, 3]
157
+ # [[1, 2], [3, 4]].map(&l) # ArgumentError: wrong number of arguments (given 1, expected 2)
158
+ #
159
+ # The only exception is dynamic method definition: even if defined by passing a
160
+ # non-lambda proc, methods still have normal semantics of argument checking.
161
+ #
162
+ # class C
163
+ # define_method(:e, &proc {})
164
+ # end
165
+ # C.new.e(1,2) #=> ArgumentError
166
+ # C.new.method(:e).to_proc.lambda? #=> true
167
+ #
168
+ # This exception ensures that methods never have unusual argument passing
169
+ # conventions, and makes it easy to have wrappers defining methods that behave
170
+ # as usual.
171
+ #
172
+ # class C
173
+ # def self.def2(name, &body)
174
+ # define_method(name, &body)
175
+ # end
176
+ #
177
+ # def2(:f) {}
178
+ # end
179
+ # C.new.f(1,2) #=> ArgumentError
180
+ #
181
+ # The wrapper `def2` receives *body* as a non-lambda proc, yet defines a method
182
+ # which has normal semantics.
183
+ #
184
+ # ## Conversion of other objects to procs
185
+ #
186
+ # Any object that implements the `to_proc` method can be converted into a proc
187
+ # by the `&` operator, and therefore can be consumed by iterators.
188
+ #
189
+ # class Greeter
190
+ # def initialize(greeting)
191
+ # @greeting = greeting
192
+ # end
193
+ #
194
+ # def to_proc
195
+ # proc {|name| "#{@greeting}, #{name}!" }
196
+ # end
197
+ # end
198
+ #
199
+ # hi = Greeter.new("Hi")
200
+ # hey = Greeter.new("Hey")
201
+ # ["Bob", "Jane"].map(&hi) #=> ["Hi, Bob!", "Hi, Jane!"]
202
+ # ["Bob", "Jane"].map(&hey) #=> ["Hey, Bob!", "Hey, Jane!"]
203
+ #
204
+ # Of the Ruby core classes, this method is implemented by Symbol, Method, and
205
+ # Hash.
206
+ #
207
+ # :to_s.to_proc.call(1) #=> "1"
208
+ # [1, 2].map(&:to_s) #=> ["1", "2"]
209
+ #
210
+ # method(:puts).to_proc.call(1) # prints 1
211
+ # [1, 2].each(&method(:puts)) # prints 1, 2
212
+ #
213
+ # {test: 1}.to_proc.call(:test) #=> 1
214
+ # %i[test many keys].map(&{test: 1}) #=> [1, nil, nil]
215
+ #
216
+ # ## Orphaned Proc
217
+ #
218
+ # `return` and `break` in a block exit a method. If a Proc object is generated
219
+ # from the block and the Proc object survives until the method is returned,
220
+ # `return` and `break` cannot work. In such case, `return` and `break` raises
221
+ # LocalJumpError. A Proc object in such situation is called as orphaned Proc
222
+ # object.
223
+ #
224
+ # Note that the method to exit is different for `return` and `break`. There is a
225
+ # situation that orphaned for `break` but not orphaned for `return`.
226
+ #
227
+ # def m1(&b) b.call end; def m2(); m1 { return } end; m2 # ok
228
+ # def m1(&b) b.call end; def m2(); m1 { break } end; m2 # ok
229
+ #
230
+ # def m1(&b) b end; def m2(); m1 { return }.call end; m2 # ok
231
+ # def m1(&b) b end; def m2(); m1 { break }.call end; m2 # LocalJumpError
232
+ #
233
+ # def m1(&b) b end; def m2(); m1 { return } end; m2.call # LocalJumpError
234
+ # def m1(&b) b end; def m2(); m1 { break } end; m2.call # LocalJumpError
235
+ #
236
+ # Since `return` and `break` exits the block itself in lambdas, lambdas cannot
237
+ # be orphaned.
238
+ #
239
+ # ## Anonymous block parameters
240
+ #
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.
244
+ #
245
+ # # Explicit parameter:
246
+ # %w[test me please].each { |str| puts str.upcase } # prints TEST, ME, PLEASE
247
+ # (1..5).map { |i| i**2 } # => [1, 4, 9, 16, 25]
248
+ #
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:
254
+ # %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
255
+ # (1..5).map { _1**2 } # => [1, 4, 9, 16, 25]
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
+ #
319
+ # Parameter names from `_1` to `_9` are supported:
320
+ #
321
+ # [10, 20, 30].zip([40, 50, 60], [70, 80, 90]).map { _1 + _2 + _3 }
322
+ # # => [120, 150, 180]
323
+ #
324
+ # Though, it is advised to resort to them wisely, probably limiting yourself to
325
+ # `_1` and `_2`, and to one-line blocks.
326
+ #
327
+ # Numbered parameters can't be used together with explicitly named ones:
328
+ #
329
+ # [10, 20, 30].map { |x| _1**2 }
330
+ # # SyntaxError (ordinary parameter is defined)
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
+ #
337
+ # To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
338
+ # so on, causes an error.
339
+ #
340
+ # _1 = 'test'
341
+ # # ^~ _1 is reserved for numbered parameters (SyntaxError)
342
+ #
343
+ # Using implicit numbered parameters affects block's arity:
344
+ #
345
+ # p = proc { _1 + _2 }
346
+ # l = lambda { _1 + _2 }
347
+ # p.parameters # => [[:opt, :_1], [:opt, :_2]]
348
+ # p.arity # => 2
349
+ # l.parameters # => [[:req, :_1], [:req, :_2]]
350
+ # l.arity # => 2
351
+ #
352
+ # Blocks with numbered parameters can't be nested:
353
+ #
354
+ # %w[test me].each { _1.each_char { p _1 } }
355
+ # # numbered parameter is already used in outer block (SyntaxError)
356
+ # # %w[test me].each { _1.each_char { p _1 } }
357
+ # # ^~
358
+ #
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? ==
537
+
538
+ # <!--
539
+ # rdoc-file=proc.c
540
+ # - prc.arity -> integer
541
+ # -->
542
+ # Returns the number of mandatory arguments. If the block is declared to take no
543
+ # arguments, returns 0. If the block is known to take exactly n arguments,
544
+ # returns n. If the block has optional arguments, returns -n-1, where n is the
545
+ # number of mandatory arguments, with the exception for blocks that are not
546
+ # lambdas and have only a finite number of optional arguments; in this latter
547
+ # case, returns n. Keyword arguments will be considered as a single additional
548
+ # argument, that argument being mandatory if any keyword argument is mandatory.
549
+ # A #proc with no argument declarations is the same as a block declaring `||` as
550
+ # its arguments.
551
+ #
552
+ # proc {}.arity #=> 0
553
+ # proc { || }.arity #=> 0
554
+ # proc { |a| }.arity #=> 1
555
+ # proc { |a, b| }.arity #=> 2
556
+ # proc { |a, b, c| }.arity #=> 3
557
+ # proc { |*a| }.arity #=> -1
558
+ # proc { |a, *b| }.arity #=> -2
559
+ # proc { |a, *b, c| }.arity #=> -3
560
+ # proc { |x:, y:, z:0| }.arity #=> 1
561
+ # proc { |*a, x:, y:0| }.arity #=> -2
562
+ #
563
+ # proc { |a=0| }.arity #=> 0
564
+ # lambda { |a=0| }.arity #=> -1
565
+ # proc { |a=0, b| }.arity #=> 1
566
+ # lambda { |a=0, b| }.arity #=> -2
567
+ # proc { |a=0, b=0| }.arity #=> 0
568
+ # lambda { |a=0, b=0| }.arity #=> -1
569
+ # proc { |a, b=0| }.arity #=> 1
570
+ # lambda { |a, b=0| }.arity #=> -2
571
+ # proc { |(a, b), c=0| }.arity #=> 1
572
+ # lambda { |(a, b), c=0| }.arity #=> -2
573
+ # proc { |a, x:0, y:0| }.arity #=> 1
574
+ # lambda { |a, x:0, y:0| }.arity #=> -2
575
+ #
576
+ def arity: () -> Integer
577
+
578
+ # <!--
579
+ # rdoc-file=proc.c
580
+ # - prc.binding -> binding
581
+ # -->
582
+ # Returns the binding associated with *prc*.
583
+ #
584
+ # def fred(param)
585
+ # proc {}
586
+ # end
587
+ #
588
+ # b = fred(99)
589
+ # eval("param", b.binding) #=> 99
590
+ #
591
+ def binding: () -> Binding
592
+
593
+ # <!--
594
+ # rdoc-file=proc.c
595
+ # - prc.call(params,...) -> obj
596
+ # - prc[params,...] -> obj
597
+ # - prc.(params,...) -> obj
598
+ # - prc.yield(params,...) -> obj
599
+ # -->
600
+ # Invokes the block, setting the block's parameters to the values in *params*
601
+ # using something close to method calling semantics. Returns the value of the
602
+ # last expression evaluated in the block.
603
+ #
604
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
605
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
606
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
607
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
608
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
609
+ #
610
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
611
+ # syntactic sugar to hide "call".
612
+ #
613
+ # For procs created using #lambda or `->()` an error is generated if the wrong
614
+ # number of parameters are passed to the proc. For procs created using Proc.new
615
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
616
+ # are set to `nil`.
617
+ #
618
+ # a_proc = proc {|a,b| [a,b] }
619
+ # a_proc.call(1) #=> [1, nil]
620
+ #
621
+ # a_proc = lambda {|a,b| [a,b] }
622
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
623
+ #
624
+ # See also Proc#lambda?.
625
+ #
626
+ def call: (?) -> untyped
627
+
628
+ # <!-- rdoc-file=proc.c -->
629
+ # Invokes the block, setting the block's parameters to the values in *params*
630
+ # using something close to method calling semantics. Returns the value of the
631
+ # last expression evaluated in the block.
632
+ #
633
+ # a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
634
+ # a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
635
+ # a_proc[9, 1, 2, 3] #=> [9, 18, 27]
636
+ # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
637
+ # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
638
+ #
639
+ # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
640
+ # syntactic sugar to hide "call".
641
+ #
642
+ # For procs created using #lambda or `->()` an error is generated if the wrong
643
+ # number of parameters are passed to the proc. For procs created using Proc.new
644
+ # or Kernel.proc, extra parameters are silently discarded and missing parameters
645
+ # are set to `nil`.
646
+ #
647
+ # a_proc = proc {|a,b| [a,b] }
648
+ # a_proc.call(1) #=> [1, nil]
649
+ #
650
+ # a_proc = lambda {|a,b| [a,b] }
651
+ # a_proc.call(1) # ArgumentError: wrong number of arguments (given 1, expected 2)
652
+ #
653
+ # See also Proc#lambda?.
654
+ #
655
+ alias [] call
656
+
657
+ # <!--
658
+ # rdoc-file=proc.c
659
+ # - prc.curry -> a_proc
660
+ # - prc.curry(arity) -> a_proc
661
+ # -->
662
+ # Returns a curried proc. If the optional *arity* argument is given, it
663
+ # determines the number of arguments. A curried proc receives some arguments. If
664
+ # a sufficient number of arguments are supplied, it passes the supplied
665
+ # arguments to the original proc and returns the result. Otherwise, returns
666
+ # another curried proc that takes the rest of arguments.
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
+ #
672
+ # b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
673
+ # p b.curry[1][2][3] #=> 6
674
+ # p b.curry[1, 2][3, 4] #=> 6
675
+ # p b.curry(5)[1][2][3][4][5] #=> 6
676
+ # p b.curry(5)[1, 2][3, 4][5] #=> 6
677
+ # p b.curry(1)[1] #=> 1
678
+ #
679
+ # b = proc {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
680
+ # p b.curry[1][2][3] #=> 6
681
+ # p b.curry[1, 2][3, 4] #=> 10
682
+ # p b.curry(5)[1][2][3][4][5] #=> 15
683
+ # p b.curry(5)[1, 2][3, 4][5] #=> 15
684
+ # p b.curry(1)[1] #=> 1
685
+ #
686
+ # b = lambda {|x, y, z| (x||0) + (y||0) + (z||0) }
687
+ # p b.curry[1][2][3] #=> 6
688
+ # p b.curry[1, 2][3, 4] #=> wrong number of arguments (given 4, expected 3)
689
+ # p b.curry(5) #=> wrong number of arguments (given 5, expected 3)
690
+ # p b.curry(1) #=> wrong number of arguments (given 1, expected 3)
691
+ #
692
+ # b = lambda {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
693
+ # p b.curry[1][2][3] #=> 6
694
+ # p b.curry[1, 2][3, 4] #=> 10
695
+ # p b.curry(5)[1][2][3][4][5] #=> 15
696
+ # p b.curry(5)[1, 2][3, 4][5] #=> 15
697
+ # p b.curry(1) #=> wrong number of arguments (given 1, expected 3)
698
+ #
699
+ # b = proc { :foo }
700
+ # p b.curry[] #=> :foo
701
+ #
702
+ def curry: (?int? arity) -> Proc
703
+
704
+ # <!--
705
+ # rdoc-file=proc.c
706
+ # - prc.hash -> integer
707
+ # -->
708
+ # Returns a hash value corresponding to proc body.
709
+ #
710
+ # See also Object#hash.
711
+ #
712
+ def hash: () -> Integer
713
+
714
+ # <!--
715
+ # rdoc-file=proc.c
716
+ # - prc.lambda? -> true or false
717
+ # -->
718
+ # Returns `true` if a Proc object is lambda. `false` if non-lambda.
719
+ #
720
+ # The lambda-ness affects argument handling and the behavior of `return` and
721
+ # `break`.
722
+ #
723
+ # A Proc object generated by `proc` ignores extra arguments.
724
+ #
725
+ # proc {|a,b| [a,b] }.call(1,2,3) #=> [1,2]
726
+ #
727
+ # It provides `nil` for missing arguments.
728
+ #
729
+ # proc {|a,b| [a,b] }.call(1) #=> [1,nil]
730
+ #
731
+ # It expands a single array argument.
732
+ #
733
+ # proc {|a,b| [a,b] }.call([1,2]) #=> [1,2]
734
+ #
735
+ # A Proc object generated by `lambda` doesn't have such tricks.
736
+ #
737
+ # lambda {|a,b| [a,b] }.call(1,2,3) #=> ArgumentError
738
+ # lambda {|a,b| [a,b] }.call(1) #=> ArgumentError
739
+ # lambda {|a,b| [a,b] }.call([1,2]) #=> ArgumentError
740
+ #
741
+ # Proc#lambda? is a predicate for the tricks. It returns `true` if no tricks
742
+ # apply.
743
+ #
744
+ # lambda {}.lambda? #=> true
745
+ # proc {}.lambda? #=> false
746
+ #
747
+ # Proc.new is the same as `proc`.
748
+ #
749
+ # Proc.new {}.lambda? #=> false
750
+ #
751
+ # `lambda`, `proc` and Proc.new preserve the tricks of a Proc object given by
752
+ # `&` argument.
753
+ #
754
+ # lambda(&lambda {}).lambda? #=> true
755
+ # proc(&lambda {}).lambda? #=> true
756
+ # Proc.new(&lambda {}).lambda? #=> true
757
+ #
758
+ # lambda(&proc {}).lambda? #=> false
759
+ # proc(&proc {}).lambda? #=> false
760
+ # Proc.new(&proc {}).lambda? #=> false
761
+ #
762
+ # A Proc object generated by `&` argument has the tricks
763
+ #
764
+ # def n(&b) b.lambda? end
765
+ # n {} #=> false
766
+ #
767
+ # The `&` argument preserves the tricks if a Proc object is given by `&`
768
+ # argument.
769
+ #
770
+ # n(&lambda {}) #=> true
771
+ # n(&proc {}) #=> false
772
+ # n(&Proc.new {}) #=> false
773
+ #
774
+ # A Proc object converted from a method has no tricks.
775
+ #
776
+ # def m() end
777
+ # method(:m).to_proc.lambda? #=> true
778
+ #
779
+ # n(&method(:m)) #=> true
780
+ # n(&method(:m).to_proc) #=> true
781
+ #
782
+ # `define_method` is treated the same as method definition. The defined method
783
+ # has no tricks.
784
+ #
785
+ # class C
786
+ # define_method(:d) {}
787
+ # end
788
+ # C.new.d(1,2) #=> ArgumentError
789
+ # C.new.method(:d).to_proc.lambda? #=> true
790
+ #
791
+ # `define_method` always defines a method without the tricks, even if a
792
+ # non-lambda Proc object is given. This is the only exception for which the
793
+ # tricks are not preserved.
794
+ #
795
+ # class C
796
+ # define_method(:e, &proc {})
797
+ # end
798
+ # C.new.e(1,2) #=> ArgumentError
799
+ # C.new.method(:e).to_proc.lambda? #=> true
800
+ #
801
+ # This exception ensures that methods never have tricks and makes it easy to
802
+ # have wrappers to define methods that behave as usual.
803
+ #
804
+ # class C
805
+ # def self.def2(name, &body)
806
+ # define_method(name, &body)
807
+ # end
808
+ #
809
+ # def2(:f) {}
810
+ # end
811
+ # C.new.f(1,2) #=> ArgumentError
812
+ #
813
+ # The wrapper *def2* defines a method which has no tricks.
814
+ #
815
+ def lambda?: () -> bool
816
+
817
+ # <!--
818
+ # rdoc-file=proc.c
819
+ # - prc.parameters(lambda: nil) -> array
820
+ # -->
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.
824
+ #
825
+ # prc = proc{|x, y=42, *other|}
826
+ # prc.parameters #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
827
+ # prc = lambda{|x, y=42, *other|}
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]]
833
+ #
834
+ def parameters: (?lambda: boolish) -> Method::param_types
835
+
836
+ # <!--
837
+ # rdoc-file=proc.c
838
+ # - prc.source_location -> [String, Integer]
839
+ # -->
840
+ # Returns the Ruby source filename and line number containing this proc or `nil`
841
+ # if this proc was not defined in Ruby (i.e. native).
842
+ #
843
+ def source_location: () -> [String, Integer]?
844
+
845
+ # <!--
846
+ # rdoc-file=proc.c
847
+ # - prc.to_proc -> proc
848
+ # -->
849
+ # Part of the protocol for converting objects to Proc objects. Instances of
850
+ # class Proc simply return themselves.
851
+ #
852
+ def to_proc: () -> self
853
+
854
+ # <!--
855
+ # rdoc-file=proc.c
856
+ # - prc.to_s -> string
857
+ # -->
858
+ # Returns the unique identifier for this proc, along with an indication of where
859
+ # the proc was defined.
860
+ #
861
+ def to_s: () -> String
862
+
863
+ # <!-- rdoc-file=proc.c -->
864
+ # Returns the unique identifier for this proc, along with an indication of where
865
+ # the proc was defined.
866
+ #
867
+ alias inspect to_s
868
+ end