rbs 4.0.0.dev.4 → 4.0.0.dev.5

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 (223) 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 +11 -8
  5. data/.github/workflows/comments.yml +3 -3
  6. data/.github/workflows/dependabot.yml +1 -1
  7. data/.github/workflows/ruby.yml +17 -34
  8. data/.github/workflows/typecheck.yml +2 -2
  9. data/.github/workflows/valgrind.yml +42 -0
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/README.md +1 -1
  13. data/Rakefile +32 -5
  14. data/config.yml +46 -0
  15. data/core/array.rbs +96 -46
  16. data/core/binding.rbs +0 -2
  17. data/core/builtin.rbs +2 -2
  18. data/core/comparable.rbs +13 -6
  19. data/core/complex.rbs +55 -41
  20. data/core/dir.rbs +4 -4
  21. data/core/encoding.rbs +7 -10
  22. data/core/enumerable.rbs +90 -3
  23. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  24. data/core/enumerator.rbs +63 -1
  25. data/core/errno.rbs +8 -0
  26. data/core/errors.rbs +28 -1
  27. data/core/exception.rbs +2 -2
  28. data/core/fiber.rbs +40 -20
  29. data/core/file.rbs +108 -78
  30. data/core/file_test.rbs +1 -1
  31. data/core/float.rbs +225 -69
  32. data/core/gc.rbs +417 -281
  33. data/core/hash.rbs +1023 -727
  34. data/core/integer.rbs +104 -110
  35. data/core/io/buffer.rbs +21 -10
  36. data/core/io/wait.rbs +11 -33
  37. data/core/io.rbs +82 -19
  38. data/core/kernel.rbs +70 -59
  39. data/core/marshal.rbs +1 -1
  40. data/core/match_data.rbs +1 -1
  41. data/core/math.rbs +42 -3
  42. data/core/method.rbs +63 -27
  43. data/core/module.rbs +103 -26
  44. data/core/nil_class.rbs +3 -3
  45. data/core/numeric.rbs +43 -35
  46. data/core/object.rbs +3 -3
  47. data/core/object_space.rbs +21 -15
  48. data/core/pathname.rbs +1272 -0
  49. data/core/proc.rbs +30 -25
  50. data/core/process.rbs +4 -2
  51. data/core/ractor.rbs +361 -509
  52. data/core/random.rbs +17 -0
  53. data/core/range.rbs +113 -16
  54. data/core/rational.rbs +56 -85
  55. data/core/rbs/unnamed/argf.rbs +2 -2
  56. data/core/rbs/unnamed/env_class.rbs +1 -1
  57. data/core/rbs/unnamed/random.rbs +4 -113
  58. data/core/regexp.rbs +25 -20
  59. data/core/ruby.rbs +53 -0
  60. data/core/ruby_vm.rbs +6 -4
  61. data/core/rubygems/errors.rbs +3 -70
  62. data/core/rubygems/rubygems.rbs +11 -79
  63. data/core/rubygems/version.rbs +2 -3
  64. data/core/set.rbs +488 -359
  65. data/core/signal.rbs +24 -14
  66. data/core/string.rbs +3171 -1241
  67. data/core/struct.rbs +1 -1
  68. data/core/symbol.rbs +17 -11
  69. data/core/thread.rbs +95 -33
  70. data/core/time.rbs +35 -9
  71. data/core/trace_point.rbs +7 -4
  72. data/core/unbound_method.rbs +14 -6
  73. data/docs/aliases.md +79 -0
  74. data/docs/collection.md +2 -2
  75. data/docs/encoding.md +56 -0
  76. data/docs/gem.md +0 -1
  77. data/docs/inline.md +470 -0
  78. data/docs/sigs.md +3 -3
  79. data/docs/syntax.md +33 -4
  80. data/docs/type_fingerprint.md +21 -0
  81. data/exe/rbs +1 -1
  82. data/ext/rbs_extension/ast_translation.c +77 -3
  83. data/ext/rbs_extension/ast_translation.h +3 -0
  84. data/ext/rbs_extension/class_constants.c +8 -2
  85. data/ext/rbs_extension/class_constants.h +4 -0
  86. data/ext/rbs_extension/extconf.rb +5 -1
  87. data/ext/rbs_extension/legacy_location.c +5 -5
  88. data/ext/rbs_extension/main.c +37 -20
  89. data/include/rbs/ast.h +85 -38
  90. data/include/rbs/defines.h +27 -0
  91. data/include/rbs/lexer.h +30 -11
  92. data/include/rbs/parser.h +6 -6
  93. data/include/rbs/string.h +0 -2
  94. data/include/rbs/util/rbs_allocator.h +34 -13
  95. data/include/rbs/util/rbs_assert.h +12 -1
  96. data/include/rbs/util/rbs_encoding.h +2 -0
  97. data/include/rbs/util/rbs_unescape.h +2 -1
  98. data/lib/rbs/ast/annotation.rb +1 -1
  99. data/lib/rbs/ast/comment.rb +1 -1
  100. data/lib/rbs/ast/declarations.rb +10 -10
  101. data/lib/rbs/ast/members.rb +14 -14
  102. data/lib/rbs/ast/ruby/annotations.rb +137 -0
  103. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  104. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  105. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  106. data/lib/rbs/ast/ruby/members.rb +159 -1
  107. data/lib/rbs/ast/type_param.rb +24 -4
  108. data/lib/rbs/buffer.rb +20 -15
  109. data/lib/rbs/cli/diff.rb +16 -15
  110. data/lib/rbs/cli/validate.rb +38 -51
  111. data/lib/rbs/cli.rb +52 -19
  112. data/lib/rbs/collection/config/lockfile_generator.rb +8 -0
  113. data/lib/rbs/collection/sources/git.rb +1 -0
  114. data/lib/rbs/definition.rb +1 -1
  115. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  116. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  117. data/lib/rbs/definition_builder.rb +91 -2
  118. data/lib/rbs/diff.rb +7 -1
  119. data/lib/rbs/environment.rb +227 -74
  120. data/lib/rbs/environment_loader.rb +0 -6
  121. data/lib/rbs/errors.rb +27 -7
  122. data/lib/rbs/inline_parser.rb +341 -5
  123. data/lib/rbs/location_aux.rb +1 -1
  124. data/lib/rbs/locator.rb +5 -1
  125. data/lib/rbs/method_type.rb +5 -3
  126. data/lib/rbs/parser_aux.rb +2 -2
  127. data/lib/rbs/prototype/rb.rb +2 -2
  128. data/lib/rbs/prototype/rbi.rb +2 -0
  129. data/lib/rbs/prototype/runtime.rb +8 -0
  130. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  131. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  132. data/lib/rbs/subtractor.rb +3 -1
  133. data/lib/rbs/test/type_check.rb +16 -2
  134. data/lib/rbs/type_name.rb +1 -1
  135. data/lib/rbs/types.rb +27 -27
  136. data/lib/rbs/validator.rb +2 -2
  137. data/lib/rbs/version.rb +1 -1
  138. data/lib/rbs.rb +1 -1
  139. data/lib/rdoc/discover.rb +1 -1
  140. data/lib/rdoc_plugin/parser.rb +1 -1
  141. data/rbs.gemspec +3 -2
  142. data/schema/typeParam.json +17 -1
  143. data/sig/ast/ruby/annotations.rbs +124 -0
  144. data/sig/ast/ruby/comment_block.rbs +8 -0
  145. data/sig/ast/ruby/declarations.rbs +102 -4
  146. data/sig/ast/ruby/members.rbs +87 -1
  147. data/sig/cli/diff.rbs +5 -11
  148. data/sig/cli/validate.rbs +13 -4
  149. data/sig/cli.rbs +18 -18
  150. data/sig/definition.rbs +6 -1
  151. data/sig/environment.rbs +70 -12
  152. data/sig/errors.rbs +13 -6
  153. data/sig/inline_parser.rbs +39 -2
  154. data/sig/locator.rbs +0 -2
  155. data/sig/manifest.yaml +0 -1
  156. data/sig/method_builder.rbs +3 -1
  157. data/sig/method_types.rbs +1 -1
  158. data/sig/parser.rbs +16 -2
  159. data/sig/resolver/type_name_resolver.rbs +35 -7
  160. data/sig/source.rbs +3 -3
  161. data/sig/type_param.rbs +13 -8
  162. data/sig/types.rbs +4 -4
  163. data/src/ast.c +80 -1
  164. data/src/lexer.c +1392 -1313
  165. data/src/lexer.re +3 -0
  166. data/src/lexstate.c +58 -37
  167. data/src/location.c +4 -4
  168. data/src/parser.c +412 -145
  169. data/src/string.c +0 -48
  170. data/src/util/rbs_allocator.c +89 -71
  171. data/src/util/rbs_assert.c +1 -1
  172. data/src/util/rbs_buffer.c +2 -2
  173. data/src/util/rbs_constant_pool.c +10 -10
  174. data/src/util/rbs_encoding.c +4 -8
  175. data/src/util/rbs_unescape.c +56 -20
  176. data/stdlib/bigdecimal/0/big_decimal.rbs +100 -82
  177. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  178. data/stdlib/cgi/0/core.rbs +9 -393
  179. data/stdlib/cgi/0/manifest.yaml +1 -0
  180. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  181. data/stdlib/coverage/0/coverage.rbs +3 -1
  182. data/stdlib/date/0/date.rbs +67 -59
  183. data/stdlib/date/0/date_time.rbs +1 -1
  184. data/stdlib/delegate/0/delegator.rbs +10 -7
  185. data/stdlib/digest/0/digest.rbs +110 -0
  186. data/stdlib/erb/0/erb.rbs +737 -347
  187. data/stdlib/fileutils/0/fileutils.rbs +20 -14
  188. data/stdlib/forwardable/0/forwardable.rbs +3 -0
  189. data/stdlib/json/0/json.rbs +82 -28
  190. data/stdlib/net-http/0/net-http.rbs +3 -0
  191. data/stdlib/objspace/0/objspace.rbs +9 -27
  192. data/stdlib/open-uri/0/open-uri.rbs +40 -0
  193. data/stdlib/open3/0/open3.rbs +459 -1
  194. data/stdlib/openssl/0/openssl.rbs +331 -228
  195. data/stdlib/optparse/0/optparse.rbs +8 -3
  196. data/stdlib/pathname/0/pathname.rbs +9 -1379
  197. data/stdlib/psych/0/psych.rbs +4 -4
  198. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  199. data/stdlib/rdoc/0/code_object.rbs +2 -1
  200. data/stdlib/rdoc/0/parser.rbs +1 -1
  201. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  202. data/stdlib/rdoc/0/store.rbs +1 -1
  203. data/stdlib/resolv/0/resolv.rbs +25 -68
  204. data/stdlib/ripper/0/ripper.rbs +2 -2
  205. data/stdlib/securerandom/0/manifest.yaml +2 -0
  206. data/stdlib/securerandom/0/securerandom.rbs +6 -19
  207. data/stdlib/singleton/0/singleton.rbs +3 -0
  208. data/stdlib/socket/0/socket.rbs +13 -1
  209. data/stdlib/socket/0/tcp_socket.rbs +10 -2
  210. data/stdlib/stringio/0/stringio.rbs +1176 -85
  211. data/stdlib/strscan/0/string_scanner.rbs +31 -31
  212. data/stdlib/tempfile/0/tempfile.rbs +3 -3
  213. data/stdlib/time/0/time.rbs +1 -1
  214. data/stdlib/timeout/0/timeout.rbs +63 -7
  215. data/stdlib/tsort/0/cyclic.rbs +3 -0
  216. data/stdlib/uri/0/common.rbs +16 -2
  217. data/stdlib/uri/0/file.rbs +1 -1
  218. data/stdlib/uri/0/generic.rbs +24 -16
  219. data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
  220. data/stdlib/zlib/0/gzip_reader.rbs +2 -2
  221. data/stdlib/zlib/0/gzip_writer.rbs +1 -1
  222. data/stdlib/zlib/0/zstream.rbs +1 -0
  223. metadata +30 -4
@@ -265,7 +265,7 @@ module Psych
265
265
 
266
266
  # <!--
267
267
  # rdoc-file=ext/psych/lib/psych.rb
268
- # - load(yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false)
268
+ # - load(yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false, parse_symbols: true)
269
269
  # -->
270
270
  # Load `yaml` in to a Ruby data structure. If multiple documents are provided,
271
271
  # the object contained in the first document will be returned. `filename` will
@@ -308,11 +308,11 @@ module Psych
308
308
  # `fallback` return value, which defaults to `nil`. See load for options.
309
309
  #
310
310
  %a{annotate:rdoc:copy:Psych.load_file}
311
- def self.load_file: (string | _ToPath, ?fallback: untyped, ?symbolize_names: bool, ?freeze: bool) -> untyped
311
+ def self.load_file: (path, ?fallback: untyped, ?symbolize_names: bool, ?freeze: bool) -> untyped
312
312
 
313
313
  # <!--
314
314
  # rdoc-file=ext/psych/lib/psych.rb
315
- # - safe_load(yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false)
315
+ # - safe_load(yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false, parse_symbols: true)
316
316
  # -->
317
317
  # Safely load the yaml string in `yaml`. By default, only the following classes
318
318
  # are allowed to be deserialized:
@@ -363,7 +363,7 @@ module Psych
363
363
 
364
364
  # <!--
365
365
  # rdoc-file=ext/psych/lib/psych.rb
366
- # - unsafe_load(yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false, strict_integer: false)
366
+ # - unsafe_load(yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false, strict_integer: false, parse_symbols: true)
367
367
  # -->
368
368
  # Load `yaml` in to a Ruby data structure. If multiple documents are provided,
369
369
  # the object contained in the first document will be returned. `filename` will
@@ -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
+ # `extra_timestamp_bits: 12` provides ~244ns of precision, but only 62 random
184
+ # 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
@@ -84,7 +84,7 @@ module RDoc
84
84
  # -->
85
85
  # Starts collecting tokens
86
86
  #
87
- def collect_tokens: () -> void
87
+ def collect_tokens: (Symbol) -> void
88
88
 
89
89
  # <!--
90
90
  # rdoc-file=lib/rdoc/token_stream.rb
@@ -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
  #
@@ -427,15 +427,9 @@ end
427
427
  class Resolv::DNS::Config::OtherResolvError < Resolv::ResolvError
428
428
  end
429
429
 
430
- # <!-- rdoc-file=lib/resolv.rb -->
431
- # Indicates that the DNS response was unable to be decoded.
432
- #
433
430
  class Resolv::DNS::DecodeError < StandardError
434
431
  end
435
432
 
436
- # <!-- rdoc-file=lib/resolv.rb -->
437
- # Indicates that the DNS request was unable to be encoded.
438
- #
439
433
  class Resolv::DNS::EncodeError < StandardError
440
434
  end
441
435
 
@@ -585,9 +579,6 @@ class Resolv::DNS::Message::MessageEncoder
585
579
  def initialize: () -> untyped
586
580
  end
587
581
 
588
- # <!-- rdoc-file=lib/resolv.rb -->
589
- # A representation of a DNS name.
590
- #
591
582
  class Resolv::DNS::Name
592
583
  # <!--
593
584
  # rdoc-file=lib/resolv.rb
@@ -677,9 +668,6 @@ Resolv::DNS::OpCode::Status: Integer
677
668
 
678
669
  Resolv::DNS::OpCode::Update: Integer
679
670
 
680
- # <!-- rdoc-file=lib/resolv.rb -->
681
- # A DNS query abstract class.
682
- #
683
671
  class Resolv::DNS::Query
684
672
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
685
673
 
@@ -817,9 +805,6 @@ class Resolv::DNS::Requester::UnconnectedUDP::Sender < Resolv::DNS::Requester::S
817
805
  def initialize: (Resolv::DNS::Message msg, String data, UDPSocket sock, String host, Integer port) -> untyped
818
806
  end
819
807
 
820
- # <!-- rdoc-file=lib/resolv.rb -->
821
- # A DNS resource abstract class.
822
- #
823
808
  class Resolv::DNS::Resource < Resolv::DNS::Query
824
809
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
825
810
 
@@ -845,25 +830,16 @@ Resolv::DNS::Resource::ClassInsensitiveTypes: Array[singleton(Resolv::DNS::Resou
845
830
 
846
831
  Resolv::DNS::Resource::ClassValue: Integer?
847
832
 
848
- # <!-- rdoc-file=lib/resolv.rb -->
849
- # A Query type requesting any RR.
850
- #
851
833
  class Resolv::DNS::Resource::ANY < Resolv::DNS::Query
852
834
  end
853
835
 
854
836
  Resolv::DNS::Resource::ANY::TypeValue: Integer
855
837
 
856
- # <!-- rdoc-file=lib/resolv.rb -->
857
- # The canonical name for an alias.
858
- #
859
838
  class Resolv::DNS::Resource::CNAME < Resolv::DNS::Resource::DomainName
860
839
  end
861
840
 
862
841
  Resolv::DNS::Resource::CNAME::TypeValue: Integer
863
842
 
864
- # <!-- rdoc-file=lib/resolv.rb -->
865
- # Domain Name resource abstract class.
866
- #
867
843
  class Resolv::DNS::Resource::DomainName < Resolv::DNS::Resource
868
844
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
869
845
 
@@ -885,9 +861,6 @@ class Resolv::DNS::Resource::DomainName < Resolv::DNS::Resource
885
861
  def initialize: (String name) -> untyped
886
862
  end
887
863
 
888
- # <!-- rdoc-file=lib/resolv.rb -->
889
- # A generic resource abstract class.
890
- #
891
864
  class Resolv::DNS::Resource::Generic < Resolv::DNS::Resource
892
865
  def self.create: (Integer type_value, Integer class_value) -> Class
893
866
 
@@ -911,9 +884,6 @@ class Resolv::DNS::Resource::Generic < Resolv::DNS::Resource
911
884
  def initialize: (String data) -> untyped
912
885
  end
913
886
 
914
- # <!-- rdoc-file=lib/resolv.rb -->
915
- # Host Information resource.
916
- #
917
887
  class Resolv::DNS::Resource::HINFO < Resolv::DNS::Resource
918
888
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
919
889
 
@@ -942,17 +912,11 @@ end
942
912
 
943
913
  Resolv::DNS::Resource::HINFO::TypeValue: Integer
944
914
 
945
- # <!-- rdoc-file=lib/resolv.rb -->
946
- # module IN contains ARPA Internet specific RRs.
947
- #
948
915
  module Resolv::DNS::Resource::IN
949
916
  end
950
917
 
951
918
  Resolv::DNS::Resource::IN::ClassValue: Integer
952
919
 
953
- # <!-- rdoc-file=lib/resolv.rb -->
954
- # IPv4 Address resource
955
- #
956
920
  class Resolv::DNS::Resource::IN::A < Resolv::DNS::Resource
957
921
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
958
922
 
@@ -978,9 +942,6 @@ Resolv::DNS::Resource::IN::A::ClassValue: Integer
978
942
 
979
943
  Resolv::DNS::Resource::IN::A::TypeValue: Integer
980
944
 
981
- # <!-- rdoc-file=lib/resolv.rb -->
982
- # An IPv6 address record.
983
- #
984
945
  class Resolv::DNS::Resource::IN::AAAA < Resolv::DNS::Resource
985
946
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
986
947
 
@@ -1069,11 +1030,6 @@ Resolv::DNS::Resource::IN::SOA::ClassValue: Integer
1069
1030
 
1070
1031
  Resolv::DNS::Resource::IN::SOA::TypeValue: Integer
1071
1032
 
1072
- # <!-- rdoc-file=lib/resolv.rb -->
1073
- # SRV resource record defined in RFC 2782
1074
- #
1075
- # These records identify the hostname and port that a service is available at.
1076
- #
1077
1033
  class Resolv::DNS::Resource::IN::SRV < Resolv::DNS::Resource
1078
1034
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1079
1035
 
@@ -1141,9 +1097,6 @@ Resolv::DNS::Resource::IN::TXT::ClassValue: Integer
1141
1097
 
1142
1098
  Resolv::DNS::Resource::IN::TXT::TypeValue: Integer
1143
1099
 
1144
- # <!-- rdoc-file=lib/resolv.rb -->
1145
- # Well Known Service resource.
1146
- #
1147
1100
  class Resolv::DNS::Resource::IN::WKS < Resolv::DNS::Resource
1148
1101
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1149
1102
 
@@ -1182,9 +1135,6 @@ Resolv::DNS::Resource::IN::WKS::ClassValue: Integer
1182
1135
 
1183
1136
  Resolv::DNS::Resource::IN::WKS::TypeValue: Integer
1184
1137
 
1185
- # <!-- rdoc-file=lib/resolv.rb -->
1186
- # Location resource
1187
- #
1188
1138
  class Resolv::DNS::Resource::LOC < Resolv::DNS::Resource
1189
1139
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1190
1140
 
@@ -1243,9 +1193,6 @@ end
1243
1193
 
1244
1194
  Resolv::DNS::Resource::LOC::TypeValue: Integer
1245
1195
 
1246
- # <!-- rdoc-file=lib/resolv.rb -->
1247
- # Mailing list or mailbox information.
1248
- #
1249
1196
  class Resolv::DNS::Resource::MINFO < Resolv::DNS::Resource
1250
1197
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1251
1198
 
@@ -1273,9 +1220,6 @@ end
1273
1220
 
1274
1221
  Resolv::DNS::Resource::MINFO::TypeValue: Integer
1275
1222
 
1276
- # <!-- rdoc-file=lib/resolv.rb -->
1277
- # Mail Exchanger resource.
1278
- #
1279
1223
  class Resolv::DNS::Resource::MX < Resolv::DNS::Resource
1280
1224
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1281
1225
 
@@ -1304,25 +1248,16 @@ end
1304
1248
 
1305
1249
  Resolv::DNS::Resource::MX::TypeValue: Integer
1306
1250
 
1307
- # <!-- rdoc-file=lib/resolv.rb -->
1308
- # An authoritative name server.
1309
- #
1310
1251
  class Resolv::DNS::Resource::NS < Resolv::DNS::Resource::DomainName
1311
1252
  end
1312
1253
 
1313
1254
  Resolv::DNS::Resource::NS::TypeValue: Integer
1314
1255
 
1315
- # <!-- rdoc-file=lib/resolv.rb -->
1316
- # A Pointer to another DNS name.
1317
- #
1318
1256
  class Resolv::DNS::Resource::PTR < Resolv::DNS::Resource::DomainName
1319
1257
  end
1320
1258
 
1321
1259
  Resolv::DNS::Resource::PTR::TypeValue: Integer
1322
1260
 
1323
- # <!-- rdoc-file=lib/resolv.rb -->
1324
- # Start Of Authority resource.
1325
- #
1326
1261
  class Resolv::DNS::Resource::SOA < Resolv::DNS::Resource
1327
1262
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1328
1263
 
@@ -1380,9 +1315,6 @@ end
1380
1315
 
1381
1316
  Resolv::DNS::Resource::SOA::TypeValue: Integer
1382
1317
 
1383
- # <!-- rdoc-file=lib/resolv.rb -->
1384
- # Unstructured text resource.
1385
- #
1386
1318
  class Resolv::DNS::Resource::TXT < Resolv::DNS::Resource
1387
1319
  def self.decode_rdata: (Resolv::DNS::Message::MessageDecoder msg) -> instance
1388
1320
 
@@ -1478,6 +1410,9 @@ class Resolv::Hosts
1478
1410
  def initialize: (?String filename) -> untyped
1479
1411
  end
1480
1412
 
1413
+ # <!-- rdoc-file=lib/resolv.rb -->
1414
+ # The default file name for host names
1415
+ #
1481
1416
  Resolv::Hosts::DefaultFileName: String
1482
1417
 
1483
1418
  # <!-- rdoc-file=lib/resolv.rb -->
@@ -1488,6 +1423,13 @@ class Resolv::IPv4
1488
1423
  # rdoc-file=lib/resolv.rb
1489
1424
  # - create(arg)
1490
1425
  # -->
1426
+ # Creates a new IPv4 address from `arg` which may be:
1427
+ #
1428
+ # IPv4
1429
+ # : returns `arg`.
1430
+ #
1431
+ # String
1432
+ # : `arg` must match the IPv4::Regex constant
1491
1433
  #
1492
1434
  def self.create: (String | instance arg) -> instance
1493
1435
 
@@ -1519,6 +1461,9 @@ class Resolv::IPv4
1519
1461
  def initialize: (String address) -> untyped
1520
1462
  end
1521
1463
 
1464
+ # <!-- rdoc-file=lib/resolv.rb -->
1465
+ # Regular expression IPv4 addresses must match.
1466
+ #
1522
1467
  Resolv::IPv4::Regex: Regexp
1523
1468
 
1524
1469
  # <!-- rdoc-file=lib/resolv.rb -->
@@ -1649,10 +1594,14 @@ class Resolv::LOC::Alt
1649
1594
  # rdoc-file=lib/resolv.rb
1650
1595
  # - new(altitude)
1651
1596
  # -->
1597
+ # Internal use; use self.create.
1652
1598
  #
1653
1599
  def initialize: (Integer altitude) -> untyped
1654
1600
  end
1655
1601
 
1602
+ # <!-- rdoc-file=lib/resolv.rb -->
1603
+ # Regular expression LOC Alt must match.
1604
+ #
1656
1605
  Resolv::LOC::Alt::Regex: Regexp
1657
1606
 
1658
1607
  # <!-- rdoc-file=lib/resolv.rb -->
@@ -1701,10 +1650,14 @@ class Resolv::LOC::Coord
1701
1650
  # rdoc-file=lib/resolv.rb
1702
1651
  # - new(coordinates,orientation)
1703
1652
  # -->
1653
+ # Internal use; use self.create.
1704
1654
  #
1705
1655
  def initialize: (String coordinates, orientation orientation) -> untyped
1706
1656
  end
1707
1657
 
1658
+ # <!-- rdoc-file=lib/resolv.rb -->
1659
+ # Regular expression LOC Coord must match.
1660
+ #
1708
1661
  Resolv::LOC::Coord::Regex: Regexp
1709
1662
 
1710
1663
  # <!-- rdoc-file=lib/resolv.rb -->
@@ -1746,10 +1699,14 @@ class Resolv::LOC::Size
1746
1699
  # rdoc-file=lib/resolv.rb
1747
1700
  # - new(scalar)
1748
1701
  # -->
1702
+ # Internal use; use self.create.
1749
1703
  #
1750
1704
  def initialize: (String scalar) -> untyped
1751
1705
  end
1752
1706
 
1707
+ # <!-- rdoc-file=lib/resolv.rb -->
1708
+ # Regular expression LOC size must match.
1709
+ #
1753
1710
  Resolv::LOC::Size::Regex: Regexp
1754
1711
 
1755
1712
  # <!-- rdoc-file=lib/resolv.rb -->
@@ -247,8 +247,8 @@ class Ripper
247
247
  # - to_a()
248
248
  # -->
249
249
  #
250
- def to_a: () -> [ [ Integer, Integer ], Symbol, String, Ripper::Lexer::State, String ]
251
- | () -> [ [ Integer, Integer ], Symbol, String, Ripper::Lexer::State ]
250
+ def to_a: () -> ( [ [ Integer, Integer ], Symbol, String, Ripper::Lexer::State, String ]
251
+ | [ [ Integer, Integer ], Symbol, String, Ripper::Lexer::State ] )
252
252
  end
253
253
 
254
254
  class State
@@ -0,0 +1,2 @@
1
+ dependencies:
2
+ - name: random-formatter
@@ -35,28 +35,15 @@
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
@@ -128,4 +128,7 @@ module Singleton
128
128
  end
129
129
  end
130
130
 
131
+ # <!-- rdoc-file=lib/singleton.rb -->
132
+ # The version string
133
+ #
131
134
  Singleton::VERSION: String