rbs 4.0.0.dev.4 → 4.1.0.pre.2

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
@@ -1,6 +1,7 @@
1
1
  # <!-- rdoc-file=ext/strscan/strscan.c -->
2
2
  # Class `StringScanner` supports processing a stored string as a stream;
3
- # this code creates a new `StringScanner` object with string `'foobarbaz'`:
3
+ # this code creates a new `StringScanner` object with string
4
+ # <code>'foobarbaz'</code>:
4
5
  # require 'strscan'
5
6
  # scanner = StringScanner.new('foobarbaz')
6
7
  #
@@ -19,16 +20,16 @@
19
20
  # ENGLISH_TEXT = 'Hello'
20
21
  #
21
22
  # Some examples here assume that certain helper methods are defined:
22
- # * `put_situation(scanner)`:
23
+ # * <code>put_situation(scanner)</code>:
23
24
  # Displays the values of the scanner's
24
25
  # methods #pos, #charpos, #rest, and #rest_size.
25
- # * `put_match_values(scanner)`:
26
+ # * <code>put_match_values(scanner)</code>:
26
27
  # Displays the scanner's [match
27
28
  # values](rdoc-ref:StringScanner@Match+Values).
28
- # * `match_values_cleared?(scanner)`:
29
+ # * <code>match_values_cleared?(scanner)</code>:
29
30
  # Returns whether the scanner's [match
30
31
  # values](rdoc-ref:StringScanner@Match+Values) are cleared.
31
- # See examples [[here]](ext/strscan/helper_methods_md.html).
32
+ # See examples at [helper methods](helper_methods.md).
32
33
  # ## The `StringScanner` Object
33
34
  # This code creates a `StringScanner` object
34
35
  # (we'll call it simply a *scanner*),
@@ -45,7 +46,7 @@
45
46
  # The scanner has:
46
47
  # * A *stored string*, which is:
47
48
  # * Initially set by StringScanner.new(string) to the given `string`
48
- # (`'foobarbaz'` in the example above).
49
+ # (<code>'foobarbaz'</code> in the example above).
49
50
  # * Modifiable by methods #string=(new_string) and #concat(more_string).
50
51
  # * Returned by method #string.
51
52
  # More at [Stored String](rdoc-ref:StringScanner@Stored+String) below.
@@ -63,7 +64,7 @@
63
64
  # which is a trailing substring of the stored string;
64
65
  # it extends from the current position to the end of the stored string:
65
66
  # * Initially set by StringScanner.new(string) to the given `string`
66
- # (`'foobarbaz'` in the example above).
67
+ # (<code>'foobarbaz'</code> in the example above).
67
68
  # * Returned by method #rest.
68
69
  # * Modified by any modification to either the stored string or the
69
70
  # position.
@@ -85,10 +86,10 @@
85
86
  # and a zero-based *character position*.
86
87
  # Each of these methods explicitly sets positions:
87
88
  # Method | Effect
88
- # ------------------------|--------------------------------------------------------
89
- # #reset |Sets both positions to zero (begining of stored string).
89
+ # ------------------------|---------------------------------------------------------
90
+ # #reset |Sets both positions to zero (beginning of stored string).
90
91
  # #terminate | Sets both positions to the end of the stored string.
91
- # #pos=(new_byte_position)| Sets byte position; adjusts character position.
92
+ # #pos=(new_byte_position)| Sets byte position; adjusts character position.
92
93
  # ### Byte Position (Position)
93
94
  # The byte position (or simply *position*)
94
95
  # is a zero-based index into the bytes in the scanner's stored string;
@@ -96,7 +97,7 @@
96
97
  # When the byte position is:
97
98
  # * Zero (at the beginning), the target substring is the entire stored string.
98
99
  # * Equal to the size of the stored string (at the end),
99
- # the target substring is the empty string `''`.
100
+ # the target substring is the empty string <code>''</code>.
100
101
  # To get or set the byte position:
101
102
  # * #pos: returns the byte position.
102
103
  # * #pos=(new_pos): sets the byte position.
@@ -120,7 +121,7 @@
120
121
  # * #charpos: the [character
121
122
  # position](rdoc-ref:StringScanner@Character+Position).
122
123
  # * #rest: the [target substring](rdoc-ref:StringScanner@Target+Substring).
123
- # * #rest_size: `rest.size`.
124
+ # * #rest_size: <code>rest.size</code>.
124
125
  # ### Character Position
125
126
  # The character position is a zero-based index into the *characters*
126
127
  # in the stored string;
@@ -159,7 +160,7 @@
159
160
  # # rest_size: 12
160
161
  #
161
162
  # ## Target Substring
162
- # The target substring is the the part of the [stored
163
+ # The target substring is the part of the [stored
163
164
  # string](rdoc-ref:StringScanner@Stored+String)
164
165
  # that extends from the current [byte
165
166
  # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) to the end of
@@ -290,7 +291,7 @@
290
291
  # generally contain the results of the most recent attempted match.
291
292
  # Each match value may be thought of as:
292
293
  # * *Clear*: Initially, or after an unsuccessful match attempt:
293
- # usually, `false`, `nil`, or `{}`.
294
+ # usually, `false`, `nil`, or <code>{}</code>.
294
295
  # * *Set*: After a successful match attempt:
295
296
  # `true`, string, array, or hash.
296
297
  # Each of these methods clears match values:
@@ -327,10 +328,10 @@
327
328
  # Method | Return After Match |Return After No Match
328
329
  # ---------------|---------------------------------------|---------------------
329
330
  # #size | Count of captured substrings. | +nil+.
330
- # #[](n) | <tt>n</tt>th captured substring. | +nil+.
331
+ # #[](n) | `n`th captured substring. | +nil+.
331
332
  # #captures | Array of all captured substrings. | +nil+.
332
333
  # #values_at(*n) |Array of specified captured substrings.| +nil+.
333
- # #named_captures| Hash of named captures. | <tt>{}</tt>.
334
+ # #named_captures| Hash of named captures. | <code>{}</code>.
334
335
  #
335
336
  # See examples below.
336
337
  # #### Match Values Examples
@@ -401,7 +402,7 @@
401
402
  # ## Fixed-Anchor Property
402
403
  # Pattern matching in `StringScanner` is the same as in Ruby's,
403
404
  # except for its fixed-anchor property,
404
- # which determines the meaning of `'\A'`:
405
+ # which determines the meaning of <code>'\A'</code>:
405
406
  # * `false` (the default): matches the current byte position.
406
407
  # scanner = StringScanner.new('foobar')
407
408
  # scanner.scan(/\A./) # => "f"
@@ -486,18 +487,18 @@ class StringScanner
486
487
  # scanner[:day] # => "12"
487
488
  # scanner[:nope] # => nil
488
489
  #
489
- # When there are no captures, only `[0]` returns non-`nil`:
490
+ # When there are no captures, only <code>[0]</code> returns non-`nil`:
490
491
  # scanner = StringScanner.new('foobarbaz')
491
492
  # scanner.exist?(/bar/)
492
493
  # scanner[0] # => "bar"
493
494
  # scanner[1] # => nil
494
495
  #
495
- # For a failed match, even `[0]` returns `nil`:
496
+ # For a failed match, even <code>[0]</code> returns `nil`:
496
497
  # scanner.scan(/nope/) # => nil
497
498
  # scanner[0] # => nil
498
499
  # scanner[1] # => nil
499
500
  #
500
- def []: (Integer) -> String?
501
+ def []: (Integer | String | Symbol) -> String?
501
502
 
502
503
  # <!--
503
504
  # rdoc-file=ext/strscan/strscan.c
@@ -539,7 +540,8 @@ class StringScanner
539
540
  # - captures -> substring_array or nil
540
541
  # -->
541
542
  # Returns the array of [captured match
542
- # values](rdoc-ref:StringScanner@Captured+Match+Values) at indexes `(1..)`
543
+ # values](rdoc-ref:StringScanner@Captured+Match+Values) at indexes
544
+ # <code>(1..)</code>
543
545
  # if the most recent match attempt succeeded, or `nil` otherwise:
544
546
  # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
545
547
  # scanner.captures # => nil
@@ -623,7 +625,7 @@ class StringScanner
623
625
  # scanner.check(/nope/) # => nil
624
626
  # match_values_cleared?(scanner) # => true
625
627
  #
626
- def check: (Regexp) -> String?
628
+ def check: (Regexp | String) -> String?
627
629
 
628
630
  # <!--
629
631
  # rdoc-file=ext/strscan/strscan.c
@@ -671,15 +673,7 @@ class StringScanner
671
673
  # scanner.check_until(/nope/) # => nil
672
674
  # match_values_cleared?(scanner) # => true
673
675
  #
674
- def check_until: (Regexp) -> String
675
-
676
- # <!--
677
- # rdoc-file=ext/strscan/strscan.c
678
- # - clear()
679
- # -->
680
- # Equivalent to #terminate. This method is obsolete; use #terminate instead.
681
- #
682
- def clear: () -> void
676
+ def check_until: (Regexp | String) -> String?
683
677
 
684
678
  # <!--
685
679
  # rdoc-file=ext/strscan/strscan.c
@@ -704,14 +698,6 @@ class StringScanner
704
698
  #
705
699
  alias concat <<
706
700
 
707
- # <!--
708
- # rdoc-file=ext/strscan/strscan.c
709
- # - empty?()
710
- # -->
711
- # Equivalent to #eos?. This method is obsolete, use #eos? instead.
712
- #
713
- def empty?: () -> bool
714
-
715
701
  # <!--
716
702
  # rdoc-file=ext/strscan/strscan.c
717
703
  # - eos? -> true or false
@@ -774,7 +760,7 @@ class StringScanner
774
760
  # scanner.exist?(/nope/) # => nil
775
761
  # match_values_cleared?(scanner) # => true
776
762
  #
777
- def exist?: (Regexp) -> Integer?
763
+ def exist?: (Regexp | String) -> Integer?
778
764
 
779
765
  # <!--
780
766
  # rdoc-file=ext/strscan/strscan.c
@@ -816,14 +802,6 @@ class StringScanner
816
802
  #
817
803
  def get_byte: () -> String?
818
804
 
819
- # <!--
820
- # rdoc-file=ext/strscan/strscan.c
821
- # - getbyte()
822
- # -->
823
- # Equivalent to #get_byte. This method is obsolete; use #get_byte instead.
824
- #
825
- def getbyte: () -> String?
826
-
827
805
  # <!--
828
806
  # rdoc-file=ext/strscan/strscan.c
829
807
  # - getch()
@@ -935,7 +913,7 @@ class StringScanner
935
913
  # scanner.match?(/nope/) # => nil
936
914
  # match_values_cleared?(scanner) # => true
937
915
  #
938
- def match?: (Regexp) -> Integer?
916
+ def match?: (Regexp | String) -> Integer?
939
917
 
940
918
  # <!--
941
919
  # rdoc-file=ext/strscan/strscan.c
@@ -995,11 +973,34 @@ class StringScanner
995
973
  #
996
974
  def matched_size: () -> Integer?
997
975
 
976
+ # <!--
977
+ # rdoc-file=ext/strscan/strscan.c
978
+ # - named_captures -> hash
979
+ # -->
980
+ # Returns the array of captured match values at indexes (1..)
981
+ # if the most recent match attempt succeeded, or nil otherwise;
982
+ # see [Captured Match Values](rdoc-ref:StringScanner@Captured+Match+Values):
983
+ # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
984
+ # scanner.named_captures # => {}
985
+ #
986
+ # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
987
+ # scanner.match?(pattern)
988
+ # scanner.named_captures # => {"wday"=>"Fri", "month"=>"Dec", "day"=>"12"}
989
+ #
990
+ # scanner.string = 'nope'
991
+ # scanner.match?(pattern)
992
+ # scanner.named_captures # => {"wday"=>nil, "month"=>nil, "day"=>nil}
993
+ #
994
+ # scanner.match?(/nosuch/)
995
+ # scanner.named_captures # => {}
996
+ #
997
+ def named_captures: () -> Hash[String, String?]
998
+
998
999
  # <!--
999
1000
  # rdoc-file=ext/strscan/strscan.c
1000
1001
  # - peek(length) -> substring
1001
1002
  # -->
1002
- # Returns the substring `string[pos, length]`;
1003
+ # Returns the substring <code>string[pos, length]</code>;
1003
1004
  # does not update [match values](rdoc-ref:StringScanner@Match+Values) or
1004
1005
  # [positions](rdoc-ref:StringScanner@Positions):
1005
1006
  # scanner = StringScanner.new('foobarbaz')
@@ -1012,11 +1013,14 @@ class StringScanner
1012
1013
 
1013
1014
  # <!--
1014
1015
  # rdoc-file=ext/strscan/strscan.c
1015
- # - peep(p1)
1016
+ # - peek_byte()
1016
1017
  # -->
1017
- # Equivalent to #peek. This method is obsolete; use #peek instead.
1018
+ # Peeks at the current byte and returns it as an integer.
1019
+ #
1020
+ # s = StringScanner.new('ab')
1021
+ # s.peek_byte # => 97
1018
1022
  #
1019
- def peep: (Integer) -> String
1023
+ def peek_byte: () -> Integer?
1020
1024
 
1021
1025
  # <!-- rdoc-file=ext/strscan/strscan.c -->
1022
1026
  # call-seq:
@@ -1122,7 +1126,7 @@ class StringScanner
1122
1126
  # scanner.match?(/nope/) # => nil
1123
1127
  # scanner.post_match # => nil
1124
1128
  #
1125
- def post_match: () -> String
1129
+ def post_match: () -> String?
1126
1130
 
1127
1131
  # <!--
1128
1132
  # rdoc-file=ext/strscan/strscan.c
@@ -1142,7 +1146,7 @@ class StringScanner
1142
1146
  # scanner.exist?(/nope/) # => nil
1143
1147
  # scanner.pre_match # => nil
1144
1148
  #
1145
- def pre_match: () -> String
1149
+ def pre_match: () -> String?
1146
1150
 
1147
1151
  # <!--
1148
1152
  # rdoc-file=ext/strscan/strscan.c
@@ -1151,7 +1155,7 @@ class StringScanner
1151
1155
  # Sets both [byte position](rdoc-ref:StringScanner@Byte+Position+-28Position-29)
1152
1156
  # and [character position](rdoc-ref:StringScanner@Character+Position) to zero,
1153
1157
  # and clears [match values](rdoc-ref:StringScanner@Match+Values);
1154
- # returns `self`:
1158
+ # returns +self+:
1155
1159
  # scanner = StringScanner.new('foobarbaz')
1156
1160
  # scanner.exist?(/bar/) # => 6
1157
1161
  # scanner.reset # => #<StringScanner 0/9 @ "fooba...">
@@ -1164,7 +1168,7 @@ class StringScanner
1164
1168
  # # => nil
1165
1169
  # match_values_cleared?(scanner) # => true
1166
1170
  #
1167
- def reset: () -> void
1171
+ def reset: () -> self
1168
1172
 
1169
1173
  # <!--
1170
1174
  # rdoc-file=ext/strscan/strscan.c
@@ -1215,15 +1219,6 @@ class StringScanner
1215
1219
  #
1216
1220
  def rest_size: () -> Integer
1217
1221
 
1218
- # <!--
1219
- # rdoc-file=ext/strscan/strscan.c
1220
- # - restsize()
1221
- # -->
1222
- # `s.restsize` is equivalent to `s.rest_size`. This method is obsolete; use
1223
- # #rest_size instead.
1224
- #
1225
- def restsize: () -> Integer
1226
-
1227
1222
  # <!--
1228
1223
  # rdoc-file=ext/strscan/strscan.c
1229
1224
  # - scan(p1)
@@ -1237,7 +1232,7 @@ class StringScanner
1237
1232
  # * Returns the matched substring.
1238
1233
  # * Increments the [byte
1239
1234
  # position](rdoc-ref:StringScanner@Byte+Position+-28Position-29) by
1240
- # `substring.bytesize`,
1235
+ # <code>substring.bytesize</code>,
1241
1236
  # and may increment the [character
1242
1237
  # position](rdoc-ref:StringScanner@Character+Position).
1243
1238
  # * Sets [match values](rdoc-ref:StringScanner@Match+Values).
@@ -1274,7 +1269,16 @@ class StringScanner
1274
1269
  # scanner.scan(/nope/) # => nil
1275
1270
  # match_values_cleared?(scanner) # => true
1276
1271
  #
1277
- def scan: (Regexp) -> String?
1272
+ def scan: (Regexp | String) -> String?
1273
+
1274
+ # <!--
1275
+ # rdoc-file=ext/strscan/strscan.c
1276
+ # - scan_byte -> integer_byte
1277
+ # -->
1278
+ # Scans one byte and returns it as an integer. This method is not multibyte
1279
+ # character sensitive. See also: #getch.
1280
+ #
1281
+ def scan_byte: () -> Integer?
1278
1282
 
1279
1283
  # <!--
1280
1284
  # rdoc-file=ext/strscan/strscan.c
@@ -1286,7 +1290,23 @@ class StringScanner
1286
1290
  #
1287
1291
  # "full" means "#scan with full parameters".
1288
1292
  #
1289
- def scan_full: (Regexp pattern, bool advance_pointer_p, bool return_string_p) -> untyped
1293
+ def scan_full: (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1294
+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
1295
+
1296
+ # <!--
1297
+ # rdoc-file=ext/strscan/lib/strscan/strscan.rb
1298
+ # - scan_integer(base: 10)
1299
+ # -->
1300
+ # If `base` isn't provided or is `10`, then it is equivalent to calling
1301
+ # <code>#scan</code> with a `[+-]?d+` pattern, and returns an Integer or nil.
1302
+ #
1303
+ # If `base` is `16`, then it is equivalent to calling <code>#scan</code> with a
1304
+ # `[+-]?(0x)?[0-9a-fA-F]+` pattern, and returns an Integer or nil.
1305
+ #
1306
+ # The scanned string must be encoded with an ASCII compatible encoding,
1307
+ # otherwise Encoding::CompatibilityError will be raised.
1308
+ #
1309
+ def scan_integer: (?base: Integer) -> Integer?
1290
1310
 
1291
1311
  # <!--
1292
1312
  # rdoc-file=ext/strscan/strscan.c
@@ -1339,7 +1359,7 @@ class StringScanner
1339
1359
  # scanner.scan_until(/nope/) # => nil
1340
1360
  # match_values_cleared?(scanner) # => true
1341
1361
  #
1342
- def scan_until: (Regexp) -> String?
1362
+ def scan_until: (Regexp | String) -> String?
1343
1363
 
1344
1364
  # <!--
1345
1365
  # rdoc-file=ext/strscan/strscan.c
@@ -1350,7 +1370,8 @@ class StringScanner
1350
1370
  # `return_string_p` is true, otherwise returns the number of bytes advanced.
1351
1371
  # This method does affect the match register.
1352
1372
  #
1353
- def search_full: (Regexp pattern, bool advance_pointer_p, bool return_string_p) -> untyped
1373
+ def search_full: (Regexp | String pattern, bool advance_pointer_p, true return_string_p) -> String?
1374
+ | (Regexp | String pattern, bool advance_pointer_p, false return_string_p) -> Integer?
1354
1375
 
1355
1376
  # <!--
1356
1377
  # rdoc-file=ext/strscan/strscan.c
@@ -1370,7 +1391,7 @@ class StringScanner
1370
1391
  # scanner.match?(/nope/) # => nil
1371
1392
  # scanner.size # => nil
1372
1393
  #
1373
- def size: () -> Integer
1394
+ def size: () -> Integer?
1374
1395
 
1375
1396
  # <!--
1376
1397
  # rdoc-file=ext/strscan/strscan.c
@@ -1418,7 +1439,7 @@ class StringScanner
1418
1439
  # scanner.skip(/nope/) # => nil
1419
1440
  # match_values_cleared?(scanner) # => true
1420
1441
  #
1421
- def skip: (Regexp) -> Integer?
1442
+ def skip: (Regexp | String) -> Integer?
1422
1443
 
1423
1444
  # <!--
1424
1445
  # rdoc-file=ext/strscan/strscan.c
@@ -1466,7 +1487,7 @@ class StringScanner
1466
1487
  # scanner.skip_until(/nope/) # => nil
1467
1488
  # match_values_cleared?(scanner) # => true
1468
1489
  #
1469
- def skip_until: (Regexp) -> Integer?
1490
+ def skip_until: (Regexp | String) -> Integer?
1470
1491
 
1471
1492
  # <!--
1472
1493
  # rdoc-file=ext/strscan/strscan.c
@@ -1517,7 +1538,7 @@ class StringScanner
1517
1538
  # call-seq:
1518
1539
  # terminate -> self
1519
1540
  # Sets the scanner to end-of-string;
1520
- # returns `self`:
1541
+ # returns +self+:
1521
1542
  # * Sets both [positions](rdoc-ref:StringScanner@Positions) to end-of-stream.
1522
1543
  # * Clears [match values](rdoc-ref:StringScanner@Match+Values).
1523
1544
  # scanner = StringScanner.new(HIRAGANA_TEXT)
@@ -1540,7 +1561,7 @@ class StringScanner
1540
1561
  # # rest_size: 0
1541
1562
  # match_values_cleared?(scanner) # => true
1542
1563
  #
1543
- def terminate: () -> void
1564
+ def terminate: () -> self
1544
1565
 
1545
1566
  # <!--
1546
1567
  # rdoc-file=ext/strscan/strscan.c
@@ -1571,14 +1592,14 @@ class StringScanner
1571
1592
  # match_values_cleared?(scanner) # => true
1572
1593
  # scanner.unscan # Raises StringScanner::Error.
1573
1594
  #
1574
- def unscan: () -> void
1595
+ def unscan: () -> self
1575
1596
 
1576
1597
  # <!--
1577
1598
  # rdoc-file=ext/strscan/strscan.c
1578
1599
  # - values_at(*specifiers) -> array_of_captures or nil
1579
1600
  # -->
1580
1601
  # Returns an array of captured substrings, or `nil` of none.
1581
- # For each `specifier`, the returned substring is `[specifier]`;
1602
+ # For each `specifier`, the returned substring is <code>[specifier]</code>;
1582
1603
  # see #[].
1583
1604
  # scanner = StringScanner.new('Fri Dec 12 1975 14:39')
1584
1605
  # pattern = /(?<wday>\w+) (?<month>\w+) (?<day>\d+) /
@@ -1586,7 +1607,7 @@ class StringScanner
1586
1607
  # scanner.values_at(*0..3) # => ["Fri Dec 12 ", "Fri", "Dec", "12"]
1587
1608
  # scanner.values_at(*%i[wday month day]) # => ["Fri", "Dec", "12"]
1588
1609
  #
1589
- def values_at: (*Integer) -> Array[String]?
1610
+ def values_at: (*Integer | String | Symbol) -> Array[String]?
1590
1611
 
1591
1612
  private
1592
1613
 
@@ -1609,7 +1630,7 @@ class StringScanner
1609
1630
  # # rest: "foobarbaz"
1610
1631
  # # rest_size: 9
1611
1632
  #
1612
- def initialize: (String, ?bool dup, ?fixed_anchor: bool) -> untyped
1633
+ def initialize: (String, ?fixed_anchor: bool) -> void
1613
1634
 
1614
1635
  # <!--
1615
1636
  # rdoc-file=ext/strscan/strscan.c
@@ -19,7 +19,7 @@
19
19
  # require 'tempfile'
20
20
  #
21
21
  # # Tempfile.create with a block
22
- # # The filename are choosen automatically.
22
+ # # The filename are chosen automatically.
23
23
  # # (You can specify the prefix and suffix of the filename by an optional argument.)
24
24
  # Tempfile.create {|f|
25
25
  # f.puts "foo"
@@ -159,7 +159,7 @@ class Tempfile < File
159
159
  # * Generated filename is unique in that directory.
160
160
  # * Permissions are `0600`; see [File
161
161
  # Permissions](rdoc-ref:File@File+Permissions).
162
- # * Mode is `'w+'` (read/write mode, positioned at the end).
162
+ # * Mode is <code>'w+'</code> (read/write mode, positioned at the end).
163
163
  #
164
164
  # The temporary file removal depends on the keyword argument `anonymous` and
165
165
  # whether a block is given or not. See the description about the `anonymous`
@@ -206,8 +206,8 @@ class Tempfile < File
206
206
  #
207
207
  # Tempfile.create('foo') # => #<File:/tmp/foo20220505-9795-1gok8l9>
208
208
  #
209
- # * An array of two strings `[prefix, suffix]`: the generated filename begins
210
- # with `prefix` and ends with `suffix`:
209
+ # * An array of two strings <code>[prefix, suffix]</code>: the generated
210
+ # filename begins with `prefix` and ends with `suffix`:
211
211
  #
212
212
  # Tempfile.create(%w/foo .jpg/) # => #<File:/tmp/foo20220505-17839-tnjchh.jpg>
213
213
  #
@@ -226,16 +226,19 @@ class Tempfile < File
226
226
  #
227
227
  # The keyword argument `anonymous` specifies when the file is removed.
228
228
  #
229
- # * `anonymous=false` (default) without a block: the file is not removed.
230
- # * `anonymous=false` (default) with a block: the file is removed after the
231
- # block exits.
232
- # * `anonymous=true` without a block: the file is removed before returning.
233
- # * `anonymous=true` with a block: the file is removed before the block is
234
- # called.
229
+ # * <code>anonymous=false</code> (default) without a block: the file is not
230
+ # removed.
231
+ # * <code>anonymous=false</code> (default) with a block: the file is removed
232
+ # after the block exits.
233
+ # * <code>anonymous=true</code> without a block: the file is removed before
234
+ # returning.
235
+ # * <code>anonymous=true</code> with a block: the file is removed before the
236
+ # block is called.
235
237
  #
236
- # In the first case (`anonymous=false` without a block), the file is not removed
237
- # automatically. It should be explicitly closed. It can be used to rename to the
238
- # desired filename. If the file is not needed, it should be explicitly removed.
238
+ # In the first case (<code>anonymous=false</code> without a block), the file is
239
+ # not removed automatically. It should be explicitly closed. It can be used to
240
+ # rename to the desired filename. If the file is not needed, it should be
241
+ # explicitly removed.
239
242
  #
240
243
  # The File#path method of the created file object returns the temporary
241
244
  # directory with a trailing slash when `anonymous` is true.
@@ -248,8 +251,8 @@ class Tempfile < File
248
251
  #
249
252
  # Implementation note:
250
253
  #
251
- # The keyword argument +anonymous=true+ is implemented using FILE_SHARE_DELETE
252
- # on Windows. O_TMPFILE is used on Linux.
254
+ # The keyword argument <code>anonymous=true</code> is implemented using
255
+ # `FILE_SHARE_DELETE` on Windows. `O_TMPFILE` is used on Linux.
253
256
  #
254
257
  # Related: Tempfile.new.
255
258
  #
@@ -283,7 +286,8 @@ class Tempfile < File
283
286
  #
284
287
  # The call returns the value of the block.
285
288
  #
286
- # In any case, all arguments (`*args`) will be passed to Tempfile.new.
289
+ # In any case, all arguments (<code>*args</code>) will be passed to
290
+ # Tempfile.new.
287
291
  #
288
292
  # Tempfile.open('foo', '/home/temp') do |f|
289
293
  # # ... do something with f ...
@@ -318,7 +322,7 @@ class Tempfile < File
318
322
  # - close!()
319
323
  # -->
320
324
  # Closes and unlinks (deletes) the file. Has the same effect as called
321
- # `close(true)`.
325
+ # <code>close(true)</code>.
322
326
  #
323
327
  def close!: () -> void
324
328
 
@@ -422,7 +426,7 @@ class Tempfile < File
422
426
  # If possible, consider instead using Tempfile.create, which:
423
427
  #
424
428
  # * Avoids the performance cost of delegation, incurred when Tempfile.new
425
- # calls its superclass `DelegateClass(File)`.
429
+ # calls its superclass <code>DelegateClass(File)</code>.
426
430
  # * Does not rely on a finalizer to close and unlink the file, which can be
427
431
  # unreliable.
428
432
  #
@@ -433,7 +437,7 @@ class Tempfile < File
433
437
  # * Generated filename is unique in that directory.
434
438
  # * Permissions are `0600`; see [File
435
439
  # Permissions](rdoc-ref:File@File+Permissions).
436
- # * Mode is `'w+'` (read/write mode, positioned at the end).
440
+ # * Mode is <code>'w+'</code> (read/write mode, positioned at the end).
437
441
  #
438
442
  # The underlying file is removed when the Tempfile object dies and is reclaimed
439
443
  # by the garbage collector.
@@ -454,8 +458,8 @@ class Tempfile < File
454
458
  #
455
459
  # Tempfile.new('foo') # => #<Tempfile:/tmp/foo20220505-17839-1whk2f>
456
460
  #
457
- # * An array of two strings `[prefix, suffix]`: the generated filename begins
458
- # with `prefix` and ends with `suffix`:
461
+ # * An array of two strings <code>[prefix, suffix]</code>: the generated
462
+ # filename begins with `prefix` and ends with `suffix`:
459
463
  #
460
464
  # Tempfile.new(%w/foo .jpg/) # => #<Tempfile:/tmp/foo20220505-17839-58xtfi.jpg>
461
465
  #
@@ -10,12 +10,13 @@ class Time
10
10
 
11
11
  # <!--
12
12
  # rdoc-file=lib/time.rb
13
- # - zone_offset(zone, year=self.now.year)
13
+ # - zone_offset(zone, year=nil)
14
14
  # -->
15
15
  # Return the number of seconds the specified time zone differs from UTC.
16
16
  #
17
- # Numeric time zones that include minutes, such as `-10:00` or `+1330` will
18
- # work, as will simpler hour-only time zones like `-10` or `+13`.
17
+ # Numeric time zones that include minutes, such as <code>-10:00</code> or
18
+ # <code>+1330</code> will work, as will simpler hour-only time zones like
19
+ # <code>-10</code> or <code>+13</code>.
19
20
  #
20
21
  # Textual time zones listed in ZoneOffset are also supported.
21
22
  #
@@ -120,9 +121,10 @@ class Time
120
121
  # Based on this fact, this method only understands the time zone abbreviations
121
122
  # described in RFC 822 and the system time zone, in the order named. (i.e. a
122
123
  # definition in RFC 822 overrides the system time zone definition.) The system
123
- # time zone is taken from `Time.local(year, 1, 1).zone` and `Time.local(year, 7,
124
- # 1).zone`. If the extracted time zone abbreviation does not match any of them,
125
- # it is ignored and the given time is regarded as a local time.
124
+ # time zone is taken from <code>Time.local(year, 1, 1).zone</code> and
125
+ # <code>Time.local(year, 7, 1).zone</code>. If the extracted time zone
126
+ # abbreviation does not match any of them, it is ignored and the given time is
127
+ # regarded as a local time.
126
128
  #
127
129
  # ArgumentError is raised if Date._parse cannot extract information from `date`
128
130
  # or if the Time class cannot represent specified date.