rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
@@ -1,49 +1,253 @@
1
1
  module RBS
2
2
  module Unnamed
3
3
  # <!-- rdoc-file=io.c -->
4
- # `ARGF` is a stream designed for use in scripts that process files given as
5
- # command-line arguments or passed in via STDIN.
4
+ # ## ARGF and `ARGV`
6
5
  #
7
- # The arguments passed to your script are stored in the `ARGV` Array, one
8
- # argument per element. `ARGF` assumes that any arguments that aren't filenames
9
- # have been removed from `ARGV`. For example:
6
+ # The ARGF object works with the array at global variable `ARGV` to make
7
+ # `$stdin` and file streams available in the Ruby program:
10
8
  #
11
- # $ ruby argf.rb --verbose file1 file2
9
+ # * **ARGV** may be thought of as the **argument vector** array.
12
10
  #
13
- # ARGV #=> ["--verbose", "file1", "file2"]
14
- # option = ARGV.shift #=> "--verbose"
15
- # ARGV #=> ["file1", "file2"]
11
+ # Initially, it contains the command-line arguments and options that are
12
+ # passed to the Ruby program; the program can modify that array as it likes.
16
13
  #
17
- # You can now use `ARGF` to work with a concatenation of each of these named
18
- # files. For instance, `ARGF.read` will return the contents of *file1* followed
19
- # by the contents of *file2*.
14
+ # * **ARGF** may be thought of as the **argument files** object.
20
15
  #
21
- # After a file in `ARGV` has been read `ARGF` removes it from the Array. Thus,
22
- # after all files have been read `ARGV` will be empty.
16
+ # It can access file streams and/or the `$stdin` stream, based on what it
17
+ # finds in `ARGV`. This provides a convenient way for the command line to
18
+ # specify streams for a Ruby program to read.
23
19
  #
24
- # You can manipulate `ARGV` yourself to control what `ARGF` operates on. If you
25
- # remove a file from `ARGV`, it is ignored by `ARGF`; if you add files to
26
- # `ARGV`, they are treated as if they were named on the command line. For
27
- # example:
20
+ # ## Reading
28
21
  #
29
- # ARGV.replace ["file1"]
30
- # ARGF.readlines # Returns the contents of file1 as an Array
31
- # ARGV #=> []
32
- # ARGV.replace ["file2", "file3"]
33
- # ARGF.read # Returns the contents of file2 and file3
22
+ # ARGF may read from *source* streams, which at any particular time are
23
+ # determined by the content of `ARGV`.
34
24
  #
35
- # If `ARGV` is empty, `ARGF` acts as if it contained STDIN, i.e. the data piped
36
- # to your script. For example:
25
+ # ### Simplest Case
37
26
  #
38
- # $ echo "glark" | ruby -e 'p ARGF.read'
39
- # "glark\n"
27
+ # When the *very first* ARGF read occurs with an empty `ARGV` (`[]`), the source
28
+ # is `$stdin`:
29
+ #
30
+ # * File `t.rb`:
31
+ #
32
+ # p ['ARGV', ARGV]
33
+ # p ['ARGF.read', ARGF.read]
34
+ #
35
+ # * Commands and outputs (see below for the content of files `foo.txt` and
36
+ # `bar.txt`):
37
+ #
38
+ # $ echo "Open the pod bay doors, Hal." | ruby t.rb
39
+ # ["ARGV", []]
40
+ # ["ARGF.read", "Open the pod bay doors, Hal.\n"]
41
+ #
42
+ # $ cat foo.txt bar.txt | ruby t.rb
43
+ # ["ARGV", []]
44
+ # ["ARGF.read", "Foo 0\nFoo 1\nBar 0\nBar 1\nBar 2\nBar 3\n"]
45
+ #
46
+ # ### About the Examples
47
+ #
48
+ # Many examples here assume the existence of files `foo.txt` and `bar.txt`:
49
+ #
50
+ # $ cat foo.txt
51
+ # Foo 0
52
+ # Foo 1
53
+ # $ cat bar.txt
54
+ # Bar 0
55
+ # Bar 1
56
+ # Bar 2
57
+ # Bar 3
58
+ #
59
+ # ### Sources in `ARGV`
60
+ #
61
+ # For any ARGF read *except* the [simplest case](rdoc-ref:ARGF@Simplest+Case)
62
+ # (that is, *except* for the *very first* ARGF read with an empty `ARGV`), the
63
+ # sources are found in `ARGV`.
64
+ #
65
+ # ARGF assumes that each element in array `ARGV` is a potential source, and is
66
+ # one of:
67
+ #
68
+ # * The string path to a file that may be opened as a stream.
69
+ # * The character `'-'`, meaning stream `$stdin`.
70
+ #
71
+ # Each element that is *not* one of these should be removed from `ARGV` before
72
+ # ARGF accesses that source.
73
+ #
74
+ # In the following example:
75
+ #
76
+ # * Filepaths `foo.txt` and `bar.txt` may be retained as potential sources.
77
+ # * Options `--xyzzy` and `--mojo` should be removed.
78
+ #
79
+ # Example:
80
+ #
81
+ # * File `t.rb`:
82
+ #
83
+ # # Print arguments (and options, if any) found on command line.
84
+ # p ['ARGV', ARGV]
85
+ #
86
+ # * Command and output:
87
+ #
88
+ # $ ruby t.rb --xyzzy --mojo foo.txt bar.txt
89
+ # ["ARGV", ["--xyzzy", "--mojo", "foo.txt", "bar.txt"]]
90
+ #
91
+ # ARGF's stream access considers the elements of `ARGV`, left to right:
92
+ #
93
+ # * File `t.rb`:
94
+ #
95
+ # p "ARGV: #{ARGV}"
96
+ # p "Line: #{ARGF.read}" # Read everything from all specified streams.
97
+ #
98
+ # * Command and output:
99
+ #
100
+ # $ ruby t.rb foo.txt bar.txt
101
+ # "ARGV: [\"foo.txt\", \"bar.txt\"]"
102
+ # "Read: Foo 0\nFoo 1\nBar 0\nBar 1\nBar 2\nBar 3\n"
103
+ #
104
+ # Because the value at `ARGV` is an ordinary array, you can manipulate it to
105
+ # control which sources ARGF considers:
106
+ #
107
+ # * If you remove an element from `ARGV`, ARGF will not consider the
108
+ # corresponding source.
109
+ # * If you add an element to `ARGV`, ARGF will consider the corresponding
110
+ # source.
111
+ #
112
+ # Each element in `ARGV` is removed when its corresponding source is accessed;
113
+ # when all sources have been accessed, the array is empty:
114
+ #
115
+ # * File `t.rb`:
116
+ #
117
+ # until ARGV.empty? && ARGF.eof?
118
+ # p "ARGV: #{ARGV}"
119
+ # p "Line: #{ARGF.readline}" # Read each line from each specified stream.
120
+ # end
121
+ #
122
+ # * Command and output:
123
+ #
124
+ # $ ruby t.rb foo.txt bar.txt
125
+ # "ARGV: [\"foo.txt\", \"bar.txt\"]"
126
+ # "Line: Foo 0\n"
127
+ # "ARGV: [\"bar.txt\"]"
128
+ # "Line: Foo 1\n"
129
+ # "ARGV: [\"bar.txt\"]"
130
+ # "Line: Bar 0\n"
131
+ # "ARGV: []"
132
+ # "Line: Bar 1\n"
133
+ # "ARGV: []"
134
+ # "Line: Bar 2\n"
135
+ # "ARGV: []"
136
+ # "Line: Bar 3\n"
137
+ #
138
+ # #### Filepaths in `ARGV`
139
+ #
140
+ # The `ARGV` array may contain filepaths the specify sources for ARGF reading.
141
+ #
142
+ # This program prints what it reads from files at the paths specified on the
143
+ # command line:
144
+ #
145
+ # * File `t.rb`:
146
+ #
147
+ # p ['ARGV', ARGV]
148
+ # # Read and print all content from the specified sources.
149
+ # p ['ARGF.read', ARGF.read]
150
+ #
151
+ # * Command and output:
152
+ #
153
+ # $ ruby t.rb foo.txt bar.txt
154
+ # ["ARGV", [foo.txt, bar.txt]
155
+ # ["ARGF.read", "Foo 0\nFoo 1\nBar 0\nBar 1\nBar 2\nBar 3\n"]
156
+ #
157
+ # #### Specifying `$stdin` in `ARGV`
158
+ #
159
+ # To specify stream `$stdin` in `ARGV`, us the character `'-'`:
160
+ #
161
+ # * File `t.rb`:
162
+ #
163
+ # p ['ARGV', ARGV]
164
+ # p ['ARGF.read', ARGF.read]
165
+ #
166
+ # * Command and output:
167
+ #
168
+ # $ echo "Open the pod bay doors, Hal." | ruby t.rb -
169
+ # ["ARGV", ["-"]]
170
+ # ["ARGF.read", "Open the pod bay doors, Hal.\n"]
171
+ #
172
+ # When no character `'-'` is given, stream `$stdin` is ignored (exception: see
173
+ # [Specifying $stdin in ARGV](rdoc-ref:ARGF@Specifying+-24stdin+in+ARGV)):
174
+ #
175
+ # * Command and output:
176
+ #
177
+ # $ echo "Open the pod bay doors, Hal." | ruby t.rb foo.txt bar.txt
178
+ # "ARGV: [\"foo.txt\", \"bar.txt\"]"
179
+ # "Read: Foo 0\nFoo 1\nBar 0\nBar 1\nBar 2\nBar 3\n"
180
+ #
181
+ # #### Mixtures and Repetitions in `ARGV`
182
+ #
183
+ # For an ARGF reader, `ARGV` may contain any mixture of filepaths and character
184
+ # `'-'`, including repetitions.
185
+ #
186
+ # #### Modifications to `ARGV`
187
+ #
188
+ # The running Ruby program may make any modifications to the `ARGV` array; the
189
+ # current value of `ARGV` affects ARGF reading.
190
+ #
191
+ # #### Empty `ARGV`
192
+ #
193
+ # For an empty `ARGV`, an ARGF read method either returns `nil` or raises an
194
+ # exception, depending on the specific method.
195
+ #
196
+ # ### More Read Methods
197
+ #
198
+ # As seen above, method ARGF#read reads the content of all sources into a single
199
+ # string. Other ARGF methods provide other ways to access that content; these
200
+ # include:
201
+ #
202
+ # * Byte access: #each_byte, #getbyte, #readbyte.
203
+ # * Character access: #each_char, #getc, #readchar.
204
+ # * Codepoint access: #each_codepoint.
205
+ # * Line access: #each_line, #gets, #readline, #readlines.
206
+ # * Source access: #read, #read_nonblock, #readpartial.
207
+ #
208
+ # ### About Enumerable
209
+ #
210
+ # ARGF includes module Enumerable. Virtually all methods in Enumerable call
211
+ # method `#each` in the including class.
212
+ #
213
+ # **Note well**: In ARGF, method #each returns data from the *sources*, *not*
214
+ # from `ARGV`; therefore, for example, `ARGF#entries` returns an array of lines
215
+ # from the sources, not an array of the strings from `ARGV`:
216
+ #
217
+ # * File `t.rb`:
218
+ #
219
+ # p ['ARGV', ARGV]
220
+ # p ['ARGF.entries', ARGF.entries]
221
+ #
222
+ # * Command and output:
223
+ #
224
+ # $ ruby t.rb foo.txt bar.txt
225
+ # ["ARGV", ["foo.txt", "bar.txt"]]
226
+ # ["ARGF.entries", ["Foo 0\n", "Foo 1\n", "Bar 0\n", "Bar 1\n", "Bar 2\n", "Bar 3\n"]]
227
+ #
228
+ # ## Writing
229
+ #
230
+ # If *inplace mode* is in effect, ARGF may write to target streams, which at any
231
+ # particular time are determined by the content of ARGV.
232
+ #
233
+ # Methods about inplace mode:
234
+ #
235
+ # * #inplace_mode
236
+ # * #inplace_mode=
237
+ # * #to_write_io
238
+ #
239
+ # Methods for writing:
240
+ #
241
+ # * #print
242
+ # * #printf
243
+ # * #putc
244
+ # * #puts
245
+ # * #write
40
246
  #
41
247
  %a{annotate:rdoc:copy:ARGF}
42
248
  class ARGFClass
43
249
  include Enumerable[String]
44
250
 
45
- public
46
-
47
251
  # <!--
48
252
  # rdoc-file=io.c
49
253
  # - ARGF.argv -> ARGV
@@ -64,7 +268,7 @@ module RBS
64
268
  # rdoc-file=io.c
65
269
  # - ARGF.binmode -> ARGF
66
270
  # -->
67
- # Puts `ARGF` into binary mode. Once a stream is in binary mode, it cannot be
271
+ # Puts ARGF into binary mode. Once a stream is in binary mode, it cannot be
68
272
  # reset to non-binary mode. This option has the following effects:
69
273
  #
70
274
  # * Newline conversion is disabled.
@@ -78,8 +282,8 @@ module RBS
78
282
  # rdoc-file=io.c
79
283
  # - ARGF.binmode? -> true or false
80
284
  # -->
81
- # Returns true if `ARGF` is being read in binary mode; false otherwise. To
82
- # enable binary mode use `ARGF.binmode`.
285
+ # Returns true if ARGF is being read in binary mode; false otherwise. To enable
286
+ # binary mode use ARGF.binmode.
83
287
  #
84
288
  # For example:
85
289
  #
@@ -95,7 +299,7 @@ module RBS
95
299
  # - ARGF.close -> ARGF
96
300
  # -->
97
301
  # Closes the current file and skips to the next file in ARGV. If there are no
98
- # more files to open, just closes the current file. `STDIN` will not be closed.
302
+ # more files to open, just closes the current file. STDIN will not be closed.
99
303
  #
100
304
  # For example:
101
305
  #
@@ -114,7 +318,7 @@ module RBS
114
318
  # - ARGF.closed? -> true or false
115
319
  # -->
116
320
  # Returns *true* if the current file has been closed; *false* otherwise. Use
117
- # `ARGF.close` to actually close the current file.
321
+ # ARGF.close to actually close the current file.
118
322
  #
119
323
  %a{annotate:rdoc:copy:ARGF#closed?}
120
324
  def closed?: () -> bool
@@ -131,15 +335,15 @@ module RBS
131
335
  # Returns an enumerator which iterates over each line (separated by *sep*, which
132
336
  # defaults to your platform's newline character) of each file in `ARGV`. If a
133
337
  # block is supplied, each line in turn will be yielded to the block, otherwise
134
- # an enumerator is returned. The optional *limit* argument is an `Integer`
338
+ # an enumerator is returned. The optional *limit* argument is an Integer
135
339
  # specifying the maximum length of each line; longer lines will be split
136
340
  # according to this limit.
137
341
  #
138
342
  # This method allows you to treat the files supplied on the command line as a
139
343
  # single file consisting of the concatenation of each named file. After the last
140
344
  # line of the first file has been returned, the first line of the second file is
141
- # returned. The `ARGF.filename` and `ARGF.lineno` methods can be used to
142
- # determine the filename of the current line and line number of the whole input,
345
+ # returned. The ARGF.filename and ARGF.lineno methods can be used to determine
346
+ # the filename of the current line and line number of the whole input,
143
347
  # respectively.
144
348
  #
145
349
  # For example, the following code prints out each line of each named file
@@ -168,12 +372,12 @@ module RBS
168
372
  # - ARGF.each_byte -> an_enumerator
169
373
  # -->
170
374
  # Iterates over each byte of each file in `ARGV`. A byte is returned as an
171
- # `Integer` in the range 0..255.
375
+ # Integer in the range 0..255.
172
376
  #
173
377
  # This method allows you to treat the files supplied on the command line as a
174
378
  # single file consisting of the concatenation of each named file. After the last
175
379
  # byte of the first file has been returned, the first byte of the second file is
176
- # returned. The `ARGF.filename` method can be used to determine the filename of
380
+ # returned. The ARGF.filename method can be used to determine the filename of
177
381
  # the current byte.
178
382
  #
179
383
  # If no block is given, an enumerator is returned instead.
@@ -191,13 +395,13 @@ module RBS
191
395
  # - ARGF.each_char {|char| block } -> ARGF
192
396
  # - ARGF.each_char -> an_enumerator
193
397
  # -->
194
- # Iterates over each character of each file in `ARGF`.
398
+ # Iterates over each character of each file in ARGF.
195
399
  #
196
400
  # This method allows you to treat the files supplied on the command line as a
197
401
  # single file consisting of the concatenation of each named file. After the last
198
402
  # character of the first file has been returned, the first character of the
199
- # second file is returned. The `ARGF.filename` method can be used to determine
200
- # the name of the file in which the current character appears.
403
+ # second file is returned. The ARGF.filename method can be used to determine the
404
+ # name of the file in which the current character appears.
201
405
  #
202
406
  # If no block is given, an enumerator is returned instead.
203
407
  #
@@ -210,13 +414,13 @@ module RBS
210
414
  # - ARGF.each_codepoint {|codepoint| block } -> ARGF
211
415
  # - ARGF.each_codepoint -> an_enumerator
212
416
  # -->
213
- # Iterates over each codepoint of each file in `ARGF`.
417
+ # Iterates over each codepoint of each file in ARGF.
214
418
  #
215
419
  # This method allows you to treat the files supplied on the command line as a
216
420
  # single file consisting of the concatenation of each named file. After the last
217
421
  # codepoint of the first file has been returned, the first codepoint of the
218
- # second file is returned. The `ARGF.filename` method can be used to determine
219
- # the name of the file in which the current codepoint appears.
422
+ # second file is returned. The ARGF.filename method can be used to determine the
423
+ # name of the file in which the current codepoint appears.
220
424
  #
221
425
  # If no block is given, an enumerator is returned instead.
222
426
  #
@@ -228,15 +432,15 @@ module RBS
228
432
  # Returns an enumerator which iterates over each line (separated by *sep*, which
229
433
  # defaults to your platform's newline character) of each file in `ARGV`. If a
230
434
  # block is supplied, each line in turn will be yielded to the block, otherwise
231
- # an enumerator is returned. The optional *limit* argument is an `Integer`
435
+ # an enumerator is returned. The optional *limit* argument is an Integer
232
436
  # specifying the maximum length of each line; longer lines will be split
233
437
  # according to this limit.
234
438
  #
235
439
  # This method allows you to treat the files supplied on the command line as a
236
440
  # single file consisting of the concatenation of each named file. After the last
237
441
  # line of the first file has been returned, the first line of the second file is
238
- # returned. The `ARGF.filename` and `ARGF.lineno` methods can be used to
239
- # determine the filename of the current line and line number of the whole input,
442
+ # returned. The ARGF.filename and ARGF.lineno methods can be used to determine
443
+ # the filename of the current line and line number of the whole input,
240
444
  # respectively.
241
445
  #
242
446
  # For example, the following code prints out each line of each named file
@@ -264,8 +468,8 @@ module RBS
264
468
  # - ARGF.eof? -> true or false
265
469
  # - ARGF.eof -> true or false
266
470
  # -->
267
- # Returns true if the current file in `ARGF` is at end of file, i.e. it has no
268
- # data to read. The stream must be opened for reading or an `IOError` will be
471
+ # Returns true if the current file in ARGF is at end of file, i.e. it has no
472
+ # data to read. The stream must be opened for reading or an IOError will be
269
473
  # raised.
270
474
  #
271
475
  # $ echo "eof" | ruby argf.rb
@@ -280,8 +484,8 @@ module RBS
280
484
  def eof: () -> bool
281
485
 
282
486
  # <!-- rdoc-file=io.c -->
283
- # Returns true if the current file in `ARGF` is at end of file, i.e. it has no
284
- # data to read. The stream must be opened for reading or an `IOError` will be
487
+ # Returns true if the current file in ARGF is at end of file, i.e. it has no
488
+ # data to read. The stream must be opened for reading or an IOError will be
285
489
  # raised.
286
490
  #
287
491
  # $ echo "eof" | ruby argf.rb
@@ -299,12 +503,12 @@ module RBS
299
503
  # rdoc-file=io.c
300
504
  # - ARGF.external_encoding -> encoding
301
505
  # -->
302
- # Returns the external encoding for files read from `ARGF` as an `Encoding`
303
- # object. The external encoding is the encoding of the text as stored in a file.
304
- # Contrast with `ARGF.internal_encoding`, which is the encoding used to
305
- # represent this text within Ruby.
506
+ # Returns the external encoding for files read from ARGF as an Encoding object.
507
+ # The external encoding is the encoding of the text as stored in a file.
508
+ # Contrast with ARGF.internal_encoding, which is the encoding used to represent
509
+ # this text within Ruby.
306
510
  #
307
- # To set the external encoding use `ARGF.set_encoding`.
511
+ # To set the external encoding use ARGF.set_encoding.
308
512
  #
309
513
  # For example:
310
514
  #
@@ -317,8 +521,8 @@ module RBS
317
521
  # rdoc-file=io.c
318
522
  # - ARGF.file -> IO or File object
319
523
  # -->
320
- # Returns the current file as an `IO` or `File` object. `$stdin` is returned
321
- # when the current file is STDIN.
524
+ # Returns the current file as an IO or File object. `$stdin` is returned when
525
+ # the current file is STDIN.
322
526
  #
323
527
  # For example:
324
528
  #
@@ -364,7 +568,7 @@ module RBS
364
568
  # - ARGF.to_i -> integer
365
569
  # -->
366
570
  # Returns an integer representing the numeric file descriptor for the current
367
- # file. Raises an `ArgumentError` if there isn't a current file.
571
+ # file. Raises an ArgumentError if there isn't a current file.
368
572
  #
369
573
  # ARGF.fileno #=> 3
370
574
  #
@@ -375,7 +579,7 @@ module RBS
375
579
  # rdoc-file=io.c
376
580
  # - ARGF.getbyte -> Integer or nil
377
581
  # -->
378
- # Gets the next 8-bit byte (0..255) from `ARGF`. Returns `nil` if called at the
582
+ # Gets the next 8-bit byte (0..255) from ARGF. Returns `nil` if called at the
379
583
  # end of the stream.
380
584
  #
381
585
  # For example:
@@ -396,10 +600,10 @@ module RBS
396
600
  # rdoc-file=io.c
397
601
  # - ARGF.getc -> String or nil
398
602
  # -->
399
- # Reads the next character from `ARGF` and returns it as a `String`. Returns
400
- # `nil` at the end of the stream.
603
+ # Reads the next character from ARGF and returns it as a String. Returns `nil`
604
+ # at the end of the stream.
401
605
  #
402
- # `ARGF` treats the files named on the command line as a single file created by
606
+ # ARGF treats the files named on the command line as a single file created by
403
607
  # concatenating their contents. After returning the last character of the first
404
608
  # file, it returns the first character of the second file, and so on.
405
609
  #
@@ -424,10 +628,10 @@ module RBS
424
628
  # - ARGF.gets(limit [, getline_args]) -> string or nil
425
629
  # - ARGF.gets(sep, limit [, getline_args]) -> string or nil
426
630
  # -->
427
- # Returns the next line from the current file in `ARGF`.
631
+ # Returns the next line from the current file in ARGF.
428
632
  #
429
633
  # By default lines are assumed to be separated by `$/`; to use a different
430
- # character as a separator, supply it as a `String` for the *sep* argument.
634
+ # character as a separator, supply it as a String for the *sep* argument.
431
635
  #
432
636
  # The optional *limit* argument specifies how many characters of each line to
433
637
  # return. By default all characters are returned.
@@ -441,9 +645,9 @@ module RBS
441
645
  # rdoc-file=io.c
442
646
  # - ARGF.inplace_mode -> String
443
647
  # -->
444
- # Returns the file extension appended to the names of modified files under
445
- # in-place edit mode. This value can be set using `ARGF.inplace_mode=` or
446
- # passing the `-i` switch to the Ruby binary.
648
+ # Returns the file extension appended to the names of backup copies of modified
649
+ # files under in-place edit mode. This value can be set using ARGF.inplace_mode=
650
+ # or passing the `-i` switch to the Ruby binary.
447
651
  #
448
652
  %a{annotate:rdoc:copy:ARGF#inplace_mode}
449
653
  def inplace_mode: () -> String?
@@ -452,9 +656,8 @@ module RBS
452
656
  # rdoc-file=io.c
453
657
  # - ARGF.inplace_mode = ext -> ARGF
454
658
  # -->
455
- # Sets the filename extension for in-place editing mode to the given String.
456
- # Each file being edited has this value appended to its filename. The modified
457
- # file is saved under this new name.
659
+ # Sets the filename extension for in-place editing mode to the given String. The
660
+ # backup copy of each file being edited has this value appended to its filename.
458
661
  #
459
662
  # For example:
460
663
  #
@@ -465,8 +668,8 @@ module RBS
465
668
  # print line.sub("foo","bar")
466
669
  # end
467
670
  #
468
- # Each line of *file.txt* has the first occurrence of "foo" replaced with "bar",
469
- # then the new line is written out to *file.txt.bak*.
671
+ # First, *file.txt.bak* is created as a backup copy of *file.txt*. Then, each
672
+ # line of *file.txt* has the first occurrence of "foo" replaced with "bar".
470
673
  #
471
674
  %a{annotate:rdoc:copy:ARGF#inplace_mode=}
472
675
  def inplace_mode=: (String) -> self
@@ -477,10 +680,10 @@ module RBS
477
680
  # rdoc-file=io.c
478
681
  # - ARGF.internal_encoding -> encoding
479
682
  # -->
480
- # Returns the internal encoding for strings read from `ARGF` as an `Encoding`
683
+ # Returns the internal encoding for strings read from ARGF as an Encoding
481
684
  # object.
482
685
  #
483
- # If `ARGF.set_encoding` has been called with two encoding names, the second is
686
+ # If ARGF.set_encoding has been called with two encoding names, the second is
484
687
  # returned. Otherwise, if `Encoding.default_external` has been set, that value
485
688
  # is returned. Failing that, if a default external encoding was specified on the
486
689
  # command-line, that value is used. If the encoding is unknown, `nil` is
@@ -494,7 +697,7 @@ module RBS
494
697
  # - ARGF.lineno -> integer
495
698
  # -->
496
699
  # Returns the current line number of ARGF as a whole. This value can be set
497
- # manually with `ARGF.lineno=`.
700
+ # manually with ARGF.lineno=.
498
701
  #
499
702
  # For example:
500
703
  #
@@ -509,11 +712,11 @@ module RBS
509
712
  # rdoc-file=io.c
510
713
  # - ARGF.lineno = integer -> integer
511
714
  # -->
512
- # Sets the line number of `ARGF` as a whole to the given `Integer`.
715
+ # Sets the line number of ARGF as a whole to the given Integer.
513
716
  #
514
- # `ARGF` sets the line number automatically as you read data, so normally you
515
- # will not need to set it explicitly. To access the current line number use
516
- # `ARGF.lineno`.
717
+ # ARGF sets the line number automatically as you read data, so normally you will
718
+ # not need to set it explicitly. To access the current line number use
719
+ # ARGF.lineno.
517
720
  #
518
721
  # For example:
519
722
  #
@@ -547,7 +750,7 @@ module RBS
547
750
  def path: () -> String
548
751
 
549
752
  # <!-- rdoc-file=io.c -->
550
- # Returns the current offset (in bytes) of the current file in `ARGF`.
753
+ # Returns the current offset (in bytes) of the current file in ARGF.
551
754
  #
552
755
  # ARGF.pos #=> 0
553
756
  # ARGF.gets #=> "This is line one\n"
@@ -560,7 +763,7 @@ module RBS
560
763
  # rdoc-file=io.c
561
764
  # - ARGF.pos = position -> Integer
562
765
  # -->
563
- # Seeks to the position given by *position* (in bytes) in `ARGF`.
766
+ # Seeks to the position given by *position* (in bytes) in ARGF.
564
767
  #
565
768
  # For example:
566
769
  #
@@ -572,50 +775,87 @@ module RBS
572
775
 
573
776
  # <!--
574
777
  # rdoc-file=io.c
575
- # - ios.print -> nil
576
- # - ios.print(obj, ...) -> nil
778
+ # - print(*objects) -> nil
577
779
  # -->
578
- # Writes the given object(s) to *ios*. Returns `nil`.
780
+ # Writes the given objects to the stream; returns `nil`. Appends the output
781
+ # record separator `$OUTPUT_RECORD_SEPARATOR` (`$\`), if it is not `nil`. See
782
+ # [Line IO](rdoc-ref:IO@Line+IO).
783
+ #
784
+ # With argument `objects` given, for each object:
785
+ #
786
+ # * Converts via its method `to_s` if not a string.
787
+ # * Writes to the stream.
788
+ # * If not the last object, writes the output field separator
789
+ # `$OUTPUT_FIELD_SEPARATOR` (`$,`) if it is not `nil`.
790
+ #
791
+ # With default separators:
792
+ #
793
+ # f = File.open('t.tmp', 'w+')
794
+ # objects = [0, 0.0, Rational(0, 1), Complex(0, 0), :zero, 'zero']
795
+ # p $OUTPUT_RECORD_SEPARATOR
796
+ # p $OUTPUT_FIELD_SEPARATOR
797
+ # f.print(*objects)
798
+ # f.rewind
799
+ # p f.read
800
+ # f.close
579
801
  #
580
- # The stream must be opened for writing. Each given object that isn't a string
581
- # will be converted by calling its `to_s` method. When called without arguments,
582
- # prints the contents of `$_`.
802
+ # Output:
583
803
  #
584
- # If the output field separator (`$,`) is not `nil`, it is inserted between
585
- # objects. If the output record separator (`$\`) is not `nil`, it is appended to
586
- # the output.
804
+ # nil
805
+ # nil
806
+ # "00.00/10+0izerozero"
587
807
  #
588
- # $stdout.print("This is ", 100, " percent.\n")
808
+ # With specified separators:
589
809
  #
590
- # *produces:*
810
+ # $\ = "\n"
811
+ # $, = ','
812
+ # f.rewind
813
+ # f.print(*objects)
814
+ # f.rewind
815
+ # p f.read
591
816
  #
592
- # This is 100 percent.
817
+ # Output:
818
+ #
819
+ # "0,0.0,0/1,0+0i,zero,zero\n"
820
+ #
821
+ # With no argument given, writes the content of `$_` (which is usually the most
822
+ # recent user input):
823
+ #
824
+ # f = File.open('t.tmp', 'w+')
825
+ # gets # Sets $_ to the most recent user input.
826
+ # f.print
827
+ # f.close
593
828
  #
594
829
  %a{annotate:rdoc:copy:ARGF#print}
595
830
  def print: (*untyped args) -> nil
596
831
 
597
832
  # <!--
598
833
  # rdoc-file=io.c
599
- # - ios.printf(format_string [, obj, ...]) -> nil
834
+ # - printf(format_string, *objects) -> nil
600
835
  # -->
601
- # Formats and writes to *ios*, converting parameters under control of the format
602
- # string. See Kernel#sprintf for details.
836
+ # Formats and writes `objects` to the stream.
837
+ #
838
+ # For details on `format_string`, see [Format
839
+ # Specifications](rdoc-ref:format_specifications.rdoc).
603
840
  #
604
841
  %a{annotate:rdoc:copy:ARGF#printf}
605
842
  def printf: (String format_string, *untyped args) -> nil
606
843
 
607
844
  # <!--
608
845
  # rdoc-file=io.c
609
- # - ios.putc(obj) -> obj
846
+ # - putc(object) -> object
610
847
  # -->
611
- # If *obj* is Numeric, write the character whose code is the least-significant
612
- # byte of *obj*. If *obj* is String, write the first character of *obj* to
613
- # *ios*. Otherwise, raise TypeError.
848
+ # Writes a character to the stream. See [Character
849
+ # IO](rdoc-ref:IO@Character+IO).
850
+ #
851
+ # If `object` is numeric, converts to integer if necessary, then writes the
852
+ # character whose code is the least significant byte; if `object` is a string,
853
+ # writes the first character:
614
854
  #
615
855
  # $stdout.putc "A"
616
856
  # $stdout.putc 65
617
857
  #
618
- # *produces:*
858
+ # Output:
619
859
  #
620
860
  # AA
621
861
  #
@@ -624,27 +864,47 @@ module RBS
624
864
 
625
865
  # <!--
626
866
  # rdoc-file=io.c
627
- # - ios.puts(obj, ...) -> nil
867
+ # - puts(*objects) -> nil
628
868
  # -->
629
- # Writes the given object(s) to *ios*. Writes a newline after any that do not
630
- # already end with a newline sequence. Returns `nil`.
631
- #
632
- # The stream must be opened for writing. If called with an array argument,
633
- # writes each element on a new line. Each given object that isn't a string or
634
- # array will be converted by calling its `to_s` method. If called without
635
- # arguments, outputs a single newline.
636
- #
637
- # $stdout.puts("this", "is", ["a", "test"])
869
+ # Writes the given `objects` to the stream, which must be open for writing;
870
+ # returns `nil`.\ Writes a newline after each that does not already end with a
871
+ # newline sequence. If called without arguments, writes a newline. See [Line
872
+ # IO](rdoc-ref:IO@Line+IO).
873
+ #
874
+ # Note that each added newline is the character `"\n"<//tt>, not the output
875
+ # record separator (<tt>$\`).
876
+ #
877
+ # Treatment for each object:
878
+ #
879
+ # * String: writes the string.
880
+ # * Neither string nor array: writes `object.to_s`.
881
+ # * Array: writes each element of the array; arrays may be nested.
882
+ #
883
+ # To keep these examples brief, we define this helper method:
884
+ #
885
+ # def show(*objects)
886
+ # # Puts objects to file.
887
+ # f = File.new('t.tmp', 'w+')
888
+ # f.puts(objects)
889
+ # # Return file content.
890
+ # f.rewind
891
+ # p f.read
892
+ # f.close
893
+ # end
638
894
  #
639
- # *produces:*
895
+ # # Strings without newlines.
896
+ # show('foo', 'bar', 'baz') # => "foo\nbar\nbaz\n"
897
+ # # Strings, some with newlines.
898
+ # show("foo\n", 'bar', "baz\n") # => "foo\nbar\nbaz\n"
640
899
  #
641
- # this
642
- # is
643
- # a
644
- # test
900
+ # # Neither strings nor arrays:
901
+ # show(0, 0.0, Rational(0, 1), Complex(9, 0), :zero)
902
+ # # => "0\n0.0\n0/1\n9+0i\nzero\n"
645
903
  #
646
- # Note that `puts` always uses newlines and is not affected by the output record
647
- # separator (`$\`).
904
+ # # Array of strings.
905
+ # show(['foo', "bar\n", 'baz']) # => "foo\nbar\nbaz\n"
906
+ # # Nested arrays.
907
+ # show([[[0, 1], 2, 3], 4, 5]) # => "0\n1\n2\n3\n4\n5\n"
648
908
  #
649
909
  %a{annotate:rdoc:copy:ARGF#puts}
650
910
  def puts: (*untyped obj) -> nil
@@ -709,8 +969,8 @@ module RBS
709
969
  # rdoc-file=io.c
710
970
  # - ARGF.readbyte -> Integer
711
971
  # -->
712
- # Reads the next 8-bit byte from ARGF and returns it as an `Integer`. Raises an
713
- # `EOFError` after the last byte of the last file has been read.
972
+ # Reads the next 8-bit byte from ARGF and returns it as an Integer. Raises an
973
+ # EOFError after the last byte of the last file has been read.
714
974
  #
715
975
  # For example:
716
976
  #
@@ -730,8 +990,8 @@ module RBS
730
990
  # rdoc-file=io.c
731
991
  # - ARGF.readchar -> String or nil
732
992
  # -->
733
- # Reads the next character from `ARGF` and returns it as a `String`. Raises an
734
- # `EOFError` after the last character of the last file has been read.
993
+ # Reads the next character from ARGF and returns it as a String. Raises an
994
+ # EOFError after the last character of the last file has been read.
735
995
  #
736
996
  # For example:
737
997
  #
@@ -753,34 +1013,36 @@ module RBS
753
1013
  # - ARGF.readline(limit) -> string
754
1014
  # - ARGF.readline(sep, limit) -> string
755
1015
  # -->
756
- # Returns the next line from the current file in `ARGF`.
1016
+ # Returns the next line from the current file in ARGF.
757
1017
  #
758
1018
  # By default lines are assumed to be separated by `$/`; to use a different
759
- # character as a separator, supply it as a `String` for the *sep* argument.
1019
+ # character as a separator, supply it as a String for the *sep* argument.
760
1020
  #
761
1021
  # The optional *limit* argument specifies how many characters of each line to
762
1022
  # return. By default all characters are returned.
763
1023
  #
764
- # An `EOFError` is raised at the end of the file.
1024
+ # An EOFError is raised at the end of the file.
765
1025
  #
766
1026
  %a{annotate:rdoc:copy:ARGF#readline}
767
1027
  def readline: (?String sep, ?Integer limit) -> String
768
1028
 
769
1029
  # <!--
770
1030
  # rdoc-file=io.c
771
- # - ARGF.readlines(sep = $/) -> array
772
- # - ARGF.readlines(limit) -> array
773
- # - ARGF.readlines(sep, limit) -> array
774
- # - ARGF.to_a(sep = $/) -> array
775
- # - ARGF.to_a(limit) -> array
776
- # - ARGF.to_a(sep, limit) -> array
1031
+ # - ARGF.readlines(sep = $/, chomp: false) -> array
1032
+ # - ARGF.readlines(limit, chomp: false) -> array
1033
+ # - ARGF.readlines(sep, limit, chomp: false) -> array
1034
+ # - ARGF.to_a(sep = $/, chomp: false) -> array
1035
+ # - ARGF.to_a(limit, chomp: false) -> array
1036
+ # - ARGF.to_a(sep, limit, chomp: false) -> array
777
1037
  # -->
778
- # Reads each file in `ARGF` in its entirety, returning an `Array` containing
779
- # lines from the files. Lines are assumed to be separated by *sep*.
1038
+ # Reads each file in ARGF in its entirety, returning an Array containing lines
1039
+ # from the files. Lines are assumed to be separated by *sep*.
780
1040
  #
781
1041
  # lines = ARGF.readlines
782
1042
  # lines[0] #=> "This is line one\n"
783
1043
  #
1044
+ # See `IO.readlines` for a full description of all options.
1045
+ #
784
1046
  %a{annotate:rdoc:copy:ARGF#readlines}
785
1047
  def readlines: (?String sep, ?Integer limit) -> ::Array[String]
786
1048
 
@@ -807,8 +1069,8 @@ module RBS
807
1069
  # rdoc-file=io.c
808
1070
  # - ARGF.rewind -> 0
809
1071
  # -->
810
- # Positions the current file to the beginning of input, resetting `ARGF.lineno`
811
- # to zero.
1072
+ # Positions the current file to the beginning of input, resetting ARGF.lineno to
1073
+ # zero.
812
1074
  #
813
1075
  # ARGF.readline #=> "This is line one\n"
814
1076
  # ARGF.rewind #=> 0
@@ -822,7 +1084,7 @@ module RBS
822
1084
  # rdoc-file=io.c
823
1085
  # - ARGF.seek(amount, whence=IO::SEEK_SET) -> 0
824
1086
  # -->
825
- # Seeks to offset *amount* (an `Integer`) in the `ARGF` stream according to the
1087
+ # Seeks to offset *amount* (an Integer) in the ARGF stream according to the
826
1088
  # value of *whence*. See IO#seek for further details.
827
1089
  #
828
1090
  %a{annotate:rdoc:copy:ARGF#seek}
@@ -848,7 +1110,7 @@ module RBS
848
1110
  # the internal encoding.
849
1111
  #
850
1112
  # If the external encoding and the internal encoding are specified, the optional
851
- # `Hash` argument can be used to adjust the conversion process. The structure of
1113
+ # Hash argument can be used to adjust the conversion process. The structure of
852
1114
  # this hash is explained in the String#encode documentation.
853
1115
  #
854
1116
  # For example:
@@ -883,7 +1145,7 @@ module RBS
883
1145
  # - ARGF.tell -> Integer
884
1146
  # - ARGF.pos -> Integer
885
1147
  # -->
886
- # Returns the current offset (in bytes) of the current file in `ARGF`.
1148
+ # Returns the current offset (in bytes) of the current file in ARGF.
887
1149
  #
888
1150
  # ARGF.pos #=> 0
889
1151
  # ARGF.gets #=> "This is line one\n"
@@ -893,18 +1155,20 @@ module RBS
893
1155
  def tell: () -> Integer
894
1156
 
895
1157
  # <!-- rdoc-file=io.c -->
896
- # Reads each file in `ARGF` in its entirety, returning an `Array` containing
897
- # lines from the files. Lines are assumed to be separated by *sep*.
1158
+ # Reads each file in ARGF in its entirety, returning an Array containing lines
1159
+ # from the files. Lines are assumed to be separated by *sep*.
898
1160
  #
899
1161
  # lines = ARGF.readlines
900
1162
  # lines[0] #=> "This is line one\n"
901
1163
  #
1164
+ # See `IO.readlines` for a full description of all options.
1165
+ #
902
1166
  %a{annotate:rdoc:copy:ARGF#to_a}
903
1167
  def to_a: (?String sep, ?Integer limit) -> ::Array[String]
904
1168
 
905
1169
  # <!-- rdoc-file=io.c -->
906
1170
  # Returns an integer representing the numeric file descriptor for the current
907
- # file. Raises an `ArgumentError` if there isn't a current file.
1171
+ # file. Raises an ArgumentError if there isn't a current file.
908
1172
  #
909
1173
  # ARGF.fileno #=> 3
910
1174
  #
@@ -915,8 +1179,8 @@ module RBS
915
1179
  # rdoc-file=io.c
916
1180
  # - ARGF.to_io -> IO
917
1181
  # -->
918
- # Returns an `IO` object representing the current file. This will be a `File`
919
- # object unless the current file is a stream such as STDIN.
1182
+ # Returns an IO object representing the current file. This will be a File object
1183
+ # unless the current file is a stream such as STDIN.
920
1184
  #
921
1185
  # For example:
922
1186
  #
@@ -946,9 +1210,9 @@ module RBS
946
1210
 
947
1211
  # <!--
948
1212
  # rdoc-file=io.c
949
- # - ARGF.write(string) -> integer
1213
+ # - ARGF.write(*objects) -> integer
950
1214
  # -->
951
- # Writes *string* if inplace mode.
1215
+ # Writes each of the given `objects` if inplace mode.
952
1216
  #
953
1217
  %a{annotate:rdoc:copy:ARGF#write}
954
1218
  def write: (_ToS string) -> Integer