rbs 3.10.4 → 4.0.0

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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
@@ -0,0 +1,277 @@
1
+ module RBS
2
+ module Unnamed
3
+ module Random_Formatter
4
+ # <!--
5
+ # rdoc-file=lib/random/formatter.rb
6
+ # - base64(n=nil)
7
+ # -->
8
+ # Generate a random base64 string.
9
+ #
10
+ # The argument *n* specifies the length, in bytes, of the random number to be
11
+ # generated. The length of the result string is about 4/3 of *n*.
12
+ #
13
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
14
+ # future.
15
+ #
16
+ # The result may contain A-Z, a-z, 0-9, "+", "/" and "=".
17
+ #
18
+ # require 'random/formatter'
19
+ #
20
+ # Random.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
21
+ # # or
22
+ # prng = Random.new
23
+ # prng.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="
24
+ #
25
+ # See RFC 3548 for the definition of base64.
26
+ #
27
+ %a{annotate:rdoc:copy:Random::Formatter#base64}
28
+ def base64: (?Integer? n) -> String
29
+
30
+ # <!--
31
+ # rdoc-file=lib/random/formatter.rb
32
+ # - hex(n=nil)
33
+ # -->
34
+ # Generate a random hexadecimal string.
35
+ #
36
+ # The argument *n* specifies the length, in bytes, of the random number to be
37
+ # generated. The length of the resulting hexadecimal string is twice of *n*.
38
+ #
39
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
40
+ # future.
41
+ #
42
+ # The result may contain 0-9 and a-f.
43
+ #
44
+ # require 'random/formatter'
45
+ #
46
+ # Random.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
47
+ # # or
48
+ # prng = Random.new
49
+ # prng.hex #=> "91dc3bfb4de5b11d029d376634589b61"
50
+ #
51
+ %a{annotate:rdoc:copy:Random::Formatter#hex}
52
+ def hex: (?Integer? n) -> String
53
+
54
+ # <!--
55
+ # rdoc-file=lib/random/formatter.rb
56
+ # - random_bytes(n=nil)
57
+ # -->
58
+ # Generate a random binary string.
59
+ #
60
+ # The argument *n* specifies the length of the result string.
61
+ #
62
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in future.
63
+ #
64
+ # The result may contain any byte: "x00" - "xff".
65
+ #
66
+ # require 'random/formatter'
67
+ #
68
+ # Random.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
69
+ # # or
70
+ # prng = Random.new
71
+ # prng.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
72
+ #
73
+ %a{annotate:rdoc:copy:Random::Formatter#random_bytes}
74
+ def random_bytes: (?Integer? n) -> String
75
+
76
+ # <!--
77
+ # rdoc-file=lib/random/formatter.rb
78
+ # - urlsafe_base64(n=nil, padding=false)
79
+ # -->
80
+ # Generate a random URL-safe base64 string.
81
+ #
82
+ # The argument *n* specifies the length, in bytes, of the random number to be
83
+ # generated. The length of the result string is about 4/3 of *n*.
84
+ #
85
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
86
+ # future.
87
+ #
88
+ # The boolean argument *padding* specifies the padding. If it is false or nil,
89
+ # padding is not generated. Otherwise padding is generated. By default, padding
90
+ # is not generated because "=" may be used as a URL delimiter.
91
+ #
92
+ # The result may contain A-Z, a-z, 0-9, "-" and "_". "=" is also used if
93
+ # *padding* is true.
94
+ #
95
+ # require 'random/formatter'
96
+ #
97
+ # Random.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
98
+ # # or
99
+ # prng = Random.new
100
+ # prng.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg"
101
+ #
102
+ # prng.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
103
+ # prng.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg=="
104
+ #
105
+ # See RFC 3548 for the definition of URL-safe base64.
106
+ #
107
+ %a{annotate:rdoc:copy:Random::Formatter#urlsafe_base64}
108
+ def urlsafe_base64: (?Integer? n, ?boolish padding) -> String
109
+
110
+ # <!--
111
+ # rdoc-file=lib/random/formatter.rb
112
+ # - uuid()
113
+ # -->
114
+ # Generate a random v4 UUID (Universally Unique IDentifier).
115
+ #
116
+ # require 'random/formatter'
117
+ #
118
+ # Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
119
+ # Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
120
+ # # or
121
+ # prng = Random.new
122
+ # prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
123
+ #
124
+ # The version 4 UUID is purely random (except the version). It doesn't contain
125
+ # meaningful information such as MAC addresses, timestamps, etc.
126
+ #
127
+ # The result contains 122 random bits (15.25 random bytes).
128
+ #
129
+ # See [RFC9562](https://www.rfc-editor.org/rfc/rfc9562) for details of UUIDv4.
130
+ #
131
+ %a{annotate:rdoc:copy:Random::Formatter#uuid}
132
+ def uuid: () -> String
133
+
134
+ # <!--
135
+ # rdoc-file=lib/random/formatter.rb
136
+ # - uuid_v4()
137
+ # -->
138
+ #
139
+ %a{annotate:rdoc:copy:Random::Formatter#uuid_v4}
140
+ alias uuid_v4 uuid
141
+
142
+ # <!--
143
+ # rdoc-file=lib/random/formatter.rb
144
+ # - uuid_v7(extra_timestamp_bits: 0)
145
+ # -->
146
+ # Generate a random v7 UUID (Universally Unique IDentifier).
147
+ #
148
+ # require 'random/formatter'
149
+ #
150
+ # Random.uuid_v7 # => "0188d4c3-1311-7f96-85c7-242a7aa58f1e"
151
+ # Random.uuid_v7 # => "0188d4c3-16fe-744f-86af-38fa04c62bb5"
152
+ # Random.uuid_v7 # => "0188d4c3-1af8-764f-b049-c204ce0afa23"
153
+ # Random.uuid_v7 # => "0188d4c3-1e74-7085-b14f-ef6415dc6f31"
154
+ # # |<--sorted-->| |<----- random ---->|
155
+ #
156
+ # # or
157
+ # prng = Random.new
158
+ # prng.uuid_v7 # => "0188ca51-5e72-7950-a11d-def7ff977c98"
159
+ #
160
+ # The version 7 UUID starts with the least significant 48 bits of a 64 bit Unix
161
+ # timestamp (milliseconds since the epoch) and fills the remaining bits with
162
+ # random data, excluding the version and variant bits.
163
+ #
164
+ # This allows version 7 UUIDs to be sorted by creation time. Time ordered UUIDs
165
+ # can be used for better database index locality of newly inserted records,
166
+ # which may have a significant performance benefit compared to random data
167
+ # inserts.
168
+ #
169
+ # The result contains 74 random bits (9.25 random bytes).
170
+ #
171
+ # Note that this method cannot be made reproducible because its output includes
172
+ # not only random bits but also timestamp.
173
+ #
174
+ # See [RFC9562](https://www.rfc-editor.org/rfc/rfc9562) for details of UUIDv7.
175
+ #
176
+ # #### Monotonicity
177
+ #
178
+ # UUIDv7 has millisecond precision by default, so multiple UUIDs created within
179
+ # the same millisecond are not issued in monotonically increasing order. To
180
+ # create UUIDs that are time-ordered with sub-millisecond precision, up to 12
181
+ # bits of additional timestamp may added with `extra_timestamp_bits`. The extra
182
+ # timestamp precision comes at the expense of random bits. Setting
183
+ # <code>extra_timestamp_bits: 12</code> provides ~244ns of precision, but only
184
+ # 62 random bits (7.75 random bytes).
185
+ #
186
+ # prng = Random.new
187
+ # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 12) }
188
+ # # =>
189
+ # ["0188d4c7-13da-74f9-8b53-22a786ffdd5a",
190
+ # "0188d4c7-13da-753b-83a5-7fb9b2afaeea",
191
+ # "0188d4c7-13da-754a-88ea-ac0baeedd8db",
192
+ # "0188d4c7-13da-7557-83e1-7cad9cda0d8d"]
193
+ # # |<--- sorted --->| |<-- random --->|
194
+ #
195
+ # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 8) }
196
+ # # =>
197
+ # ["0188d4c7-3333-7a95-850a-de6edb858f7e",
198
+ # "0188d4c7-3333-7ae8-842e-bc3a8b7d0cf9", # <- out of order
199
+ # "0188d4c7-3333-7ae2-995a-9f135dc44ead", # <- out of order
200
+ # "0188d4c7-3333-7af9-87c3-8f612edac82e"]
201
+ # # |<--- sorted -->||<---- random --->|
202
+ #
203
+ # Any rollbacks of the system clock will break monotonicity. UUIDv7 is based on
204
+ # UTC, which excludes leap seconds and can rollback the clock. To avoid this,
205
+ # the system clock can synchronize with an NTP server configured to use a "leap
206
+ # smear" approach. NTP or PTP will also be needed to synchronize across
207
+ # distributed nodes.
208
+ #
209
+ # Counters and other mechanisms for stronger guarantees of monotonicity are not
210
+ # implemented. Applications with stricter requirements should follow [Section
211
+ # 6.2](https://www.rfc-editor.org/rfc/rfc9562.html#name-monotonicity-and-counter
212
+ # s) of the specification.
213
+ #
214
+ %a{annotate:rdoc:copy:Random::Formatter#uuid_v7}
215
+ def uuid_v7: (?extra_timestamp_bits: Integer) -> String
216
+
217
+ # <!--
218
+ # rdoc-file=lib/random/formatter.rb
219
+ # - alphanumeric(n = nil, chars: ALPHANUMERIC)
220
+ # -->
221
+ # Generate a random alphanumeric string.
222
+ #
223
+ # The argument *n* specifies the length, in characters, of the alphanumeric
224
+ # string to be generated. The argument *chars* specifies the character list
225
+ # which the result is consist of.
226
+ #
227
+ # If *n* is not specified or is nil, 16 is assumed. It may be larger in the
228
+ # future.
229
+ #
230
+ # The result may contain A-Z, a-z and 0-9, unless *chars* is specified.
231
+ #
232
+ # require 'random/formatter'
233
+ #
234
+ # Random.alphanumeric #=> "2BuBuLf3WfSKyQbR"
235
+ # # or
236
+ # prng = Random.new
237
+ # prng.alphanumeric(10) #=> "i6K93NdqiH"
238
+ #
239
+ # Random.alphanumeric(4, chars: [*"0".."9"]) #=> "2952"
240
+ # # or
241
+ # prng = Random.new
242
+ # prng.alphanumeric(10, chars: [*"!".."/"]) #=> ",.,++%/''."
243
+ #
244
+ %a{annotate:rdoc:copy:Random::Formatter#alphanumeric}
245
+ def alphanumeric: (?Numeric?, ?chars: Array[String]) -> String
246
+
247
+ # <!--
248
+ # rdoc-file=lib/random/formatter.rb
249
+ # - gen_random(n)
250
+ # -->
251
+ # Internal interface to Random; Generate random data *n* bytes.
252
+ #
253
+ %a{annotate:rdoc:copy:Random::Formatter#gen_random}
254
+ private def gen_random: (Integer n) -> String
255
+
256
+ # <!--
257
+ # rdoc-file=lib/random/formatter.rb
258
+ # - choose(source, n)
259
+ # -->
260
+ # Generate a string that randomly draws from a source array of characters.
261
+ #
262
+ # The argument *source* specifies the array of characters from which to generate
263
+ # the string. The argument *n* specifies the length, in characters, of the
264
+ # string to be generated.
265
+ #
266
+ # The result may contain whatever characters are in the source array.
267
+ #
268
+ # require 'random/formatter'
269
+ #
270
+ # prng.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron"
271
+ # prng.choose([*'0'..'9'], 5) #=> "27309"
272
+ #
273
+ %a{annotate:rdoc:copy:Random::Formatter#choose}
274
+ private def choose: (Array[String] source, Integer n) -> String
275
+ end
276
+ end
277
+ end
@@ -22,9 +22,10 @@ module RDoc
22
22
  # * RDoc::MetaMethod
23
23
  # * RDoc::Alias
24
24
  # * RDoc::Constant
25
+ # * RDoc::Require
25
26
  # * RDoc::Mixin
26
- # * RDoc::Require
27
27
  # * RDoc::Include
28
+ # * RDoc::Extend
28
29
  #
29
30
  class CodeObject
30
31
  # <!-- rdoc-file=lib/rdoc/code_object.rb -->
@@ -42,7 +42,7 @@ module RDoc
42
42
 
43
43
  # <!--
44
44
  # rdoc-file=lib/rdoc/parser.rb
45
- # - new(top_level, file_name, content, options, stats)
45
+ # - new(top_level, content, options, stats)
46
46
  # -->
47
47
  # Creates a new Parser storing `top_level`, `file_name`, `content`, `options`
48
48
  # and `stats` in instance variables. In +@preprocess+ an
@@ -22,7 +22,7 @@ module RDoc
22
22
  class Store
23
23
  # <!--
24
24
  # rdoc-file=lib/rdoc/store.rb
25
- # - new(path = nil, type = nil)
25
+ # - new(options, path: nil, type: nil)
26
26
  # -->
27
27
  # Creates a new Store of `type` that will load or save to `path`
28
28
  #
@@ -31,23 +31,26 @@
31
31
  # nil,
32
32
  # nil]]]]
33
33
  #
34
- # You can see in the example above, the expression starts with `:program`.
34
+ # You can see in the example above, the expression starts with
35
+ # <code>:program</code>.
35
36
  #
36
- # From here, a method definition at `:def`, followed by the method's identifier
37
- # `:@ident`. After the method's identifier comes the parentheses `:paren` and
38
- # the method parameters under `:params`.
37
+ # From here, a method definition at <code>:def</code>, followed by the method's
38
+ # identifier <code>:@ident</code>. After the method's identifier comes the
39
+ # parentheses <code>:paren</code> and the method parameters under
40
+ # <code>:params</code>.
39
41
  #
40
- # Next is the method body, starting at `:bodystmt` (`stmt` meaning statement),
41
- # which contains the full definition of the method.
42
+ # Next is the method body, starting at <code>:bodystmt</code> (`stmt` meaning
43
+ # statement), which contains the full definition of the method.
42
44
  #
43
45
  # In our case, we're simply returning a String, so next we have the
44
- # `:string_literal` expression.
46
+ # <code>:string_literal</code> expression.
45
47
  #
46
- # Within our `:string_literal` you'll notice two `@tstring_content`, this is the
47
- # literal part for `Hello, ` and `!`. Between the two `@tstring_content`
48
- # statements is a `:string_embexpr`, where *embexpr* is an embedded expression.
49
- # Our expression consists of a local variable, or `var_ref`, with the identifier
50
- # (`@ident`) of `world`.
48
+ # Within our <code>:string_literal</code> you'll notice two
49
+ # <code>@tstring_content</code>, this is the literal part for <code>Hello,
50
+ # </code> and <code>!</code>. Between the two <code>@tstring_content</code>
51
+ # statements is a <code>:string_embexpr</code>, where *embexpr* is an embedded
52
+ # expression. Our expression consists of a local variable, or `var_ref`, with
53
+ # the identifier (<code>@ident</code>) of `world`.
51
54
  #
52
55
  # ## Resources
53
56
  #
@@ -189,7 +192,7 @@ class Ripper
189
192
  # - state()
190
193
  # -->
191
194
  # The scanner's state of the current token. This value is the bitwise OR of zero
192
- # or more of the `Ripper::EXPR_*` constants.
195
+ # or more of the <code>Ripper::EXPR_*</code> constants.
193
196
  #
194
197
  def state: () -> Ripper::Lexer::State
195
198
 
@@ -972,10 +975,10 @@ class Ripper
972
975
  # - lex(src, filename = '-', lineno = 1, **kw)
973
976
  # -->
974
977
  # Tokenizes the Ruby program and returns an array of an array, which is
975
- # formatted like `[[lineno, column], type, token, state]`. The `filename`
976
- # argument is mostly ignored. By default, this method does not handle syntax
977
- # errors in `src`, use the `raise_errors` keyword to raise a SyntaxError for an
978
- # error in `src`.
978
+ # formatted like <code>[[lineno, column], type, token, state]</code>. The
979
+ # `filename` argument is mostly ignored. By default, this method does not handle
980
+ # syntax errors in `src`, use the `raise_errors` keyword to raise a SyntaxError
981
+ # for an error in `src`.
979
982
  #
980
983
  # require 'ripper'
981
984
  # require 'pp'
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: random-formatter
@@ -29,34 +29,21 @@
29
29
  # * uuid
30
30
  #
31
31
  # These methods are usable as class methods of SecureRandom such as
32
- # `SecureRandom.hex`.
32
+ # <code>SecureRandom.hex</code>.
33
33
  #
34
34
  # If a secure random number generator is not available, `NotImplementedError` is
35
35
  # raised.
36
36
  #
37
37
  module SecureRandom
38
- extend Random::Formatter
39
-
40
38
  # <!--
41
39
  # rdoc-file=lib/securerandom.rb
42
- # - alphanumeric(n = nil, chars: ALPHANUMERIC)
40
+ # - bytes(n)
43
41
  # -->
44
- # Compatibility methods for Ruby 3.2, we can remove this after dropping to
45
- # support Ruby 3.2
42
+ # Returns a random binary string containing `size` bytes.
46
43
  #
47
- def self.alphanumeric: (?Integer?) -> String
48
-
49
- def self.base64: (?Integer?) -> String
50
-
51
- def self.hex: (?Integer?) -> String
52
-
53
- def self.random_bytes: (?Integer?) -> String
54
-
55
- def self.random_number: () -> Float
56
- | (Integer) -> Integer
57
- | (Numeric) -> Numeric
58
-
59
- def self.urlsafe_base64: (?Integer?, ?bool?) -> String
44
+ # See Random.bytes
45
+ #
46
+ def self.bytes: (Integer) -> String
60
47
 
61
- def self.uuid: () -> String
48
+ extend Random::Formatter
62
49
  end
@@ -4,8 +4,8 @@
4
4
  # This module manipulates strings according to the word parsing rules of the
5
5
  # UNIX Bourne shell.
6
6
  #
7
- # The `shellwords()` function was originally a port of shellwords.pl, but
8
- # modified to conform to [the Shell & Utilities volume of the IEEE Std
7
+ # The <code>shellwords()</code> function was originally a port of shellwords.pl,
8
+ # but modified to conform to [the Shell & Utilities volume of the IEEE Std
9
9
  # 1003.1-2008, 2016
10
10
  # Edition](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.ht
11
11
  # ml)
@@ -61,8 +61,8 @@ class Addrinfo
61
61
  # #=> [#<Addrinfo: 203.178.141.194:80 TCP (www.kame.net)>,
62
62
  # # #<Addrinfo: [2001:200:dff:fff1:216:3eff:feb1:44d7]:80 TCP (www.kame.net)>]
63
63
  #
64
- def self.getaddrinfo: (String nodename, ?String | Integer | nil service, ?Symbol? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
65
- | (String? nodename, ?String | Integer service, ?Symbol? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
64
+ def self.getaddrinfo: (String nodename, ?(String | Integer)? service, ?(Symbol | Integer)? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
65
+ | (String? nodename, ?(String | Integer) service, ?(Symbol | Integer)? family, ?Symbol | Integer protocol) -> Array[Addrinfo]
66
66
 
67
67
  # <!--
68
68
  # rdoc-file=ext/socket/raddrinfo.c
@@ -634,13 +634,13 @@ class Addrinfo
634
634
  # sockaddr as generated by Socket.sockaddr_in or Socket.unpack_sockaddr_un.
635
635
  #
636
636
  # sockaddr examples:
637
- # * `["AF_INET", 46102, "localhost.localdomain", "127.0.0.1"]`
638
- # * `["AF_INET6", 42304, "ip6-localhost", "::1"]`
639
- # * `["AF_UNIX", "/tmp/sock"]`
640
- # * `Socket.sockaddr_in("smtp", "2001:DB8::1")`
641
- # * `Socket.sockaddr_in(80, "172.18.22.42")`
642
- # * `Socket.sockaddr_in(80, "www.ruby-lang.org")`
643
- # * `Socket.sockaddr_un("/tmp/sock")`
637
+ # * <code>["AF_INET", 46102, "localhost.localdomain", "127.0.0.1"]</code>
638
+ # * <code>["AF_INET6", 42304, "ip6-localhost", "::1"]</code>
639
+ # * <code>["AF_UNIX", "/tmp/sock"]</code>
640
+ # * <code>Socket.sockaddr_in("smtp", "2001:DB8::1")</code>
641
+ # * <code>Socket.sockaddr_in(80, "172.18.22.42")</code>
642
+ # * <code>Socket.sockaddr_in(80, "www.ruby-lang.org")</code>
643
+ # * <code>Socket.sockaddr_un("/tmp/sock")</code>
644
644
  #
645
645
  # In an AF_INET/AF_INET6 sockaddr array, the 4th element, numeric IP address, is
646
646
  # used to construct socket address in the Addrinfo instance. If the 3rd element,
@@ -325,7 +325,7 @@ class BasicSocket < IO
325
325
  #
326
326
  # By specifying a keyword argument *exception* to `false`, you can indicate that
327
327
  # recv_nonblock should not raise an IO::WaitReadable exception, but return the
328
- # symbol `:wait_readable` instead.
328
+ # symbol <code>:wait_readable</code> instead.
329
329
  #
330
330
  # ### See
331
331
  # * Socket#recvfrom
@@ -399,7 +399,7 @@ class BasicSocket < IO
399
399
  #
400
400
  # By specifying a keyword argument *exception* to `false`, you can indicate that
401
401
  # recvmsg_nonblock should not raise an IO::WaitReadable exception, but return
402
- # the symbol `:wait_readable` instead.
402
+ # the symbol <code>:wait_readable</code> instead.
403
403
  #
404
404
  def recvmsg_nonblock: (?Integer dlen, ?Integer flags, ?Integer clen, ?exception: boolish, ?scm_rights: boolish) -> ([ String, Addrinfo, Integer?, Array[Socket::AncillaryData] ] | :wait_readable)
405
405
 
@@ -487,7 +487,7 @@ class BasicSocket < IO
487
487
  #
488
488
  # By specifying a keyword argument *exception* to `false`, you can indicate that
489
489
  # sendmsg_nonblock should not raise an IO::WaitWritable exception, but return
490
- # the symbol `:wait_writable` instead.
490
+ # the symbol <code>:wait_writable</code> instead.
491
491
  #
492
492
  def sendmsg_nonblock: (String mesg, ?Integer flags, ?Addrinfo | String dest_sockaddr, *Socket::AncillaryData controls, ?exception: boolish) -> (Integer | :wait_writable)
493
493
 
@@ -22,10 +22,11 @@ class IPSocket < BasicSocket
22
22
  # Returns the local address as an array which contains address_family, port,
23
23
  # hostname and numeric_address.
24
24
  #
25
- # If `reverse_lookup` is `true` or `:hostname`, hostname is obtained from
26
- # numeric_address using reverse lookup. Or if it is `false`, or `:numeric`,
27
- # hostname is the same as numeric_address. Or if it is `nil` or omitted, obeys
28
- # to `ipsocket.do_not_reverse_lookup`. See `Socket.getaddrinfo` also.
25
+ # If `reverse_lookup` is `true` or <code>:hostname</code>, hostname is obtained
26
+ # from numeric_address using reverse lookup. Or if it is `false`, or
27
+ # <code>:numeric</code>, hostname is the same as numeric_address. Or if it is
28
+ # `nil` or omitted, obeys to <code>ipsocket.do_not_reverse_lookup</code>. See
29
+ # <code>Socket.getaddrinfo</code> also.
29
30
  #
30
31
  # TCPSocket.open("www.ruby-lang.org", 80) {|sock|
31
32
  # p sock.addr #=> ["AF_INET", 49429, "hal", "192.168.0.128"]
@@ -53,10 +54,11 @@ class IPSocket < BasicSocket
53
54
  # hostname and numeric_address. It is defined for connection oriented socket
54
55
  # such as TCPSocket.
55
56
  #
56
- # If `reverse_lookup` is `true` or `:hostname`, hostname is obtained from
57
- # numeric_address using reverse lookup. Or if it is `false`, or `:numeric`,
58
- # hostname is the same as numeric_address. Or if it is `nil` or omitted, obeys
59
- # to `ipsocket.do_not_reverse_lookup`. See `Socket.getaddrinfo` also.
57
+ # If `reverse_lookup` is `true` or <code>:hostname</code>, hostname is obtained
58
+ # from numeric_address using reverse lookup. Or if it is `false`, or
59
+ # <code>:numeric</code>, hostname is the same as numeric_address. Or if it is
60
+ # `nil` or omitted, obeys to <code>ipsocket.do_not_reverse_lookup</code>. See
61
+ # <code>Socket.getaddrinfo</code> also.
60
62
  #
61
63
  # TCPSocket.open("www.ruby-lang.org", 80) {|sock|
62
64
  # p sock.peeraddr #=> ["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68"]
@@ -16,20 +16,21 @@
16
16
  #
17
17
  # Sockets have their own vocabulary:
18
18
  #
19
- # **domain:** The family of protocols:
19
+ # <strong>domain:</strong> The family of protocols:
20
20
  # * Socket::PF_INET
21
21
  # * Socket::PF_INET6
22
22
  # * Socket::PF_UNIX
23
23
  # * etc.
24
24
  #
25
- # **type:** The type of communications between the two endpoints, typically
25
+ # <strong>type:</strong> The type of communications between the two endpoints,
26
+ # typically
26
27
  # * Socket::SOCK_STREAM
27
28
  # * Socket::SOCK_DGRAM.
28
29
  #
29
- # **protocol:** Typically *zero*. This may be used to identify a variant of a
30
- # protocol.
30
+ # <strong>protocol:</strong> Typically *zero*. This may be used to identify a
31
+ # variant of a protocol.
31
32
  #
32
- # **hostname:** The identifier of a network interface:
33
+ # <strong>hostname:</strong> The identifier of a network interface:
33
34
  # * a string (hostname, IPv4 or IPv6 address or `broadcast` which specifies a
34
35
  # broadcast address)
35
36
  # * a zero-length string which specifies INADDR_ANY
@@ -484,7 +485,7 @@ class Socket < BasicSocket
484
485
  # The `connect_timeout` specifies the timeout in seconds from the start of
485
486
  # the connection attempt to the last candidate.
486
487
  # By default, all connection attempts continue until the timeout occurs.
487
- # When `fast_fallback:false` is explicitly specified,
488
+ # When <code>fast_fallback:false</code> is explicitly specified,
488
489
  # a timeout is set for each connection attempt and any connection attempt
489
490
  # that exceeds its timeout will be canceled.
490
491
  #
@@ -845,7 +846,7 @@ class Socket < BasicSocket
845
846
  #
846
847
  # By specifying a keyword argument *exception* to `false`, you can indicate that
847
848
  # accept_nonblock should not raise an IO::WaitReadable exception, but return the
848
- # symbol `:wait_readable` instead.
849
+ # symbol <code>:wait_readable</code> instead.
849
850
  #
850
851
  # ### See
851
852
  # * Socket#accept
@@ -1099,7 +1100,7 @@ class Socket < BasicSocket
1099
1100
  #
1100
1101
  # By specifying a keyword argument *exception* to `false`, you can indicate that
1101
1102
  # connect_nonblock should not raise an IO::WaitWritable exception, but return
1102
- # the symbol `:wait_writable` instead.
1103
+ # the symbol <code>:wait_writable</code> instead.
1103
1104
  #
1104
1105
  # ### See
1105
1106
  # * Socket#connect
@@ -1357,7 +1358,7 @@ class Socket < BasicSocket
1357
1358
  #
1358
1359
  # By specifying a keyword argument *exception* to `false`, you can indicate that
1359
1360
  # recvfrom_nonblock should not raise an IO::WaitReadable exception, but return
1360
- # the symbol `:wait_readable` instead.
1361
+ # the symbol <code>:wait_readable</code> instead.
1361
1362
  #
1362
1363
  # ### See
1363
1364
  # * Socket#recvfrom
@@ -72,7 +72,7 @@ class TCPServer < TCPSocket
72
72
  #
73
73
  # By specifying a keyword argument *exception* to `false`, you can indicate that
74
74
  # accept_nonblock should not raise an IO::WaitReadable exception, but return the
75
- # symbol `:wait_readable` instead.
75
+ # symbol <code>:wait_readable</code> instead.
76
76
  #
77
77
  # ### See
78
78
  # * TCPServer#accept
@@ -68,7 +68,7 @@ class TCPSocket < IPSocket
68
68
  # The `connect_timeout` specifies the timeout in seconds from the start of
69
69
  # the connection attempt to the last candidate.
70
70
  # By default, all connection attempts continue until the timeout occurs.
71
- # When `fast_fallback:false` is explicitly specified,
71
+ # When <code>fast_fallback:false</code> is explicitly specified,
72
72
  # a timeout is set for each connection attempt and any connection attempt
73
73
  # that exceeds its timeout will be canceled.
74
74
  #
@@ -81,7 +81,7 @@ class UDPSocket < IPSocket
81
81
  #
82
82
  # By specifying a keyword argument *exception* to `false`, you can indicate that
83
83
  # recvfrom_nonblock should not raise an IO::WaitReadable exception, but return
84
- # the symbol `:wait_readable` instead.
84
+ # the symbol <code>:wait_readable</code> instead.
85
85
  #
86
86
  # ### See
87
87
  # * Socket#recvfrom
@@ -50,7 +50,7 @@ class UNIXServer < UNIXSocket
50
50
  #
51
51
  # By specifying a keyword argument *exception* to `false`, you can indicate that
52
52
  # accept_nonblock should not raise an IO::WaitReadable exception, but return the
53
- # symbol `:wait_readable` instead.
53
+ # symbol <code>:wait_readable</code> instead.
54
54
  #
55
55
  # ### See
56
56
  # * UNIXServer#accept