rbs 3.7.0 → 3.8.0.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +3 -3
  3. data/.github/workflows/ruby.yml +7 -7
  4. data/CHANGELOG.md +52 -0
  5. data/core/array.rbs +1743 -1580
  6. data/core/basic_object.rbs +38 -35
  7. data/core/comparable.rbs +1 -1
  8. data/core/complex.rbs +165 -93
  9. data/core/data.rbs +1 -1
  10. data/core/dir.rbs +1 -17
  11. data/core/encoding.rbs +12 -6
  12. data/core/enumerable.rbs +270 -266
  13. data/core/enumerator.rbs +0 -2
  14. data/core/env.rbs +1 -1
  15. data/core/errno.rbs +33 -16
  16. data/core/errors.rbs +2 -2
  17. data/core/exception.rbs +236 -170
  18. data/core/fiber.rbs +3 -2
  19. data/core/file.rbs +32 -74
  20. data/core/float.rbs +125 -72
  21. data/core/gc.rbs +138 -40
  22. data/core/hash.rbs +120 -141
  23. data/core/integer.rbs +79 -50
  24. data/core/io/buffer.rbs +49 -43
  25. data/core/io.rbs +97 -144
  26. data/core/kernel.rbs +290 -200
  27. data/core/match_data.rbs +76 -2
  28. data/core/math.rbs +0 -36
  29. data/core/module.rbs +28 -23
  30. data/core/nil_class.rbs +0 -3
  31. data/core/numeric.rbs +100 -103
  32. data/core/object.rbs +0 -4
  33. data/core/object_space/weak_key_map.rbs +3 -4
  34. data/core/object_space.rbs +3 -3
  35. data/core/proc.rbs +0 -2
  36. data/core/process.rbs +109 -57
  37. data/core/ractor.rbs +37 -4
  38. data/core/range.rbs +114 -87
  39. data/core/rational.rbs +0 -2
  40. data/core/rbs/unnamed/argf.rbs +234 -33
  41. data/core/rbs/unnamed/env_class.rbs +35 -53
  42. data/core/rbs/unnamed/random.rbs +1 -2
  43. data/core/regexp.rbs +4 -52
  44. data/core/ruby_vm.rbs +88 -9
  45. data/core/rubygems/config_file.rbs +3 -0
  46. data/core/rubygems/errors.rbs +0 -5
  47. data/core/rubygems/platform.rbs +0 -9
  48. data/core/rubygems/rubygems.rbs +0 -5
  49. data/core/rubygems/version.rbs +6 -6
  50. data/core/set.rbs +3 -15
  51. data/core/string.rbs +130 -136
  52. data/core/struct.rbs +6 -18
  53. data/core/symbol.rbs +14 -21
  54. data/core/thread.rbs +32 -35
  55. data/core/time.rbs +127 -50
  56. data/core/trace_point.rbs +16 -0
  57. data/core/true_class.rbs +0 -1
  58. data/core/warning.rbs +9 -2
  59. data/docs/architecture.md +1 -1
  60. data/docs/syntax.md +1 -1
  61. data/ext/rbs_extension/location.c +29 -19
  62. data/ext/rbs_extension/parser.c +267 -292
  63. data/ext/rbs_extension/parserstate.c +56 -22
  64. data/lib/rbs/annotate/annotations.rb +3 -3
  65. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  66. data/lib/rbs/cli/diff.rb +3 -3
  67. data/lib/rbs/cli/validate.rb +1 -1
  68. data/lib/rbs/cli.rb +13 -13
  69. data/lib/rbs/collection/config.rb +3 -1
  70. data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
  71. data/lib/rbs/environment_loader.rb +1 -1
  72. data/lib/rbs/namespace.rb +1 -0
  73. data/lib/rbs/parser_aux.rb +2 -2
  74. data/lib/rbs/prototype/rb.rb +11 -8
  75. data/lib/rbs/prototype/rbi.rb +9 -5
  76. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  77. data/lib/rbs/prototype/runtime.rb +4 -5
  78. data/lib/rbs/type_name.rb +14 -9
  79. data/lib/rbs/unit_test/type_assertions.rb +2 -2
  80. data/lib/rbs/validator.rb +3 -1
  81. data/lib/rbs/version.rb +1 -1
  82. data/lib/rdoc_plugin/parser.rb +2 -2
  83. data/rbs.gemspec +4 -0
  84. data/sig/ancestor_graph.rbs +4 -4
  85. data/sig/namespace.rbs +2 -3
  86. data/sig/resolver/constant_resolver.rbs +2 -2
  87. data/sig/resolver/context.rbs +1 -1
  88. data/sig/type_alias_regularity.rbs +5 -5
  89. data/sig/typename.rbs +8 -5
  90. data/sig/use_map.rbs +1 -1
  91. data/sig/validator.rbs +2 -2
  92. data/stdlib/base64/0/base64.rbs +0 -9
  93. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  94. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  95. data/stdlib/cgi/0/core.rbs +47 -0
  96. data/stdlib/coverage/0/coverage.rbs +0 -3
  97. data/stdlib/csv/0/csv.rbs +18 -58
  98. data/stdlib/date/0/date.rbs +4 -19
  99. data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
  100. data/stdlib/digest/0/digest.rbs +25 -2
  101. data/stdlib/erb/0/erb.rbs +0 -1
  102. data/stdlib/etc/0/etc.rbs +51 -34
  103. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  104. data/stdlib/io-console/0/io-console.rbs +69 -15
  105. data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
  106. data/stdlib/json/0/json.rbs +56 -71
  107. data/stdlib/logger/0/log_device.rbs +1 -1
  108. data/stdlib/logger/0/logger.rbs +3 -18
  109. data/stdlib/net-http/0/net-http.rbs +19 -77
  110. data/stdlib/nkf/0/nkf.rbs +30 -0
  111. data/stdlib/objspace/0/objspace.rbs +1 -2
  112. data/stdlib/observable/0/observable.rbs +1 -1
  113. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  114. data/stdlib/open3/0/open3.rbs +0 -8
  115. data/stdlib/openssl/0/openssl.rbs +136 -69
  116. data/stdlib/optparse/0/optparse.rbs +58 -18
  117. data/stdlib/pathname/0/pathname.rbs +2 -8
  118. data/stdlib/pp/0/pp.rbs +3 -1
  119. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  120. data/stdlib/pstore/0/pstore.rbs +0 -6
  121. data/stdlib/psych/0/psych.rbs +15 -4
  122. data/stdlib/pty/0/pty.rbs +46 -4
  123. data/stdlib/rdoc/0/code_object.rbs +0 -4
  124. data/stdlib/rdoc/0/markup.rbs +10 -12
  125. data/stdlib/rdoc/0/rdoc.rbs +1 -2
  126. data/stdlib/resolv/0/resolv.rbs +8 -3
  127. data/stdlib/ripper/0/ripper.rbs +0 -2
  128. data/stdlib/securerandom/0/securerandom.rbs +0 -2
  129. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  130. data/stdlib/singleton/0/singleton.rbs +0 -1
  131. data/stdlib/socket/0/addrinfo.rbs +0 -1
  132. data/stdlib/socket/0/basic_socket.rbs +0 -5
  133. data/stdlib/socket/0/socket.rbs +49 -25
  134. data/stdlib/socket/0/tcp_server.rbs +0 -3
  135. data/stdlib/socket/0/tcp_socket.rbs +58 -3
  136. data/stdlib/socket/0/udp_socket.rbs +0 -1
  137. data/stdlib/socket/0/unix_server.rbs +0 -3
  138. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  139. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  140. data/stdlib/time/0/time.rbs +48 -35
  141. data/stdlib/timeout/0/timeout.rbs +11 -8
  142. data/stdlib/tmpdir/0/tmpdir.rbs +8 -1
  143. data/stdlib/tsort/0/tsort.rbs +0 -4
  144. data/stdlib/uri/0/common.rbs +11 -30
  145. data/stdlib/uri/0/ftp.rbs +1 -1
  146. data/stdlib/uri/0/generic.rbs +22 -18
  147. data/stdlib/uri/0/http.rbs +2 -2
  148. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  149. data/stdlib/zlib/0/buf_error.rbs +1 -70
  150. data/stdlib/zlib/0/data_error.rbs +1 -70
  151. data/stdlib/zlib/0/deflate.rbs +8 -72
  152. data/stdlib/zlib/0/error.rbs +1 -70
  153. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  154. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  155. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  156. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  157. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  158. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  159. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  160. data/stdlib/zlib/0/inflate.rbs +4 -71
  161. data/stdlib/zlib/0/mem_error.rbs +1 -70
  162. data/stdlib/zlib/0/need_dict.rbs +1 -70
  163. data/stdlib/zlib/0/stream_end.rbs +1 -70
  164. data/stdlib/zlib/0/stream_error.rbs +1 -70
  165. data/stdlib/zlib/0/version_error.rbs +1 -70
  166. data/stdlib/zlib/0/zlib.rbs +0 -2
  167. data/stdlib/zlib/0/zstream.rbs +4 -72
  168. metadata +4 -6
data/core/time.rbs CHANGED
@@ -45,6 +45,42 @@
45
45
  # A `Time` object derived from the system clock (for example, by method
46
46
  # Time.now) has the resolution supported by the system.
47
47
  #
48
+ # ## Time Internal Representation
49
+ #
50
+ # Time implementation uses a signed 63 bit integer, Integer, or Rational. It is
51
+ # a number of nanoseconds since the *Epoch*. The signed 63 bit integer can
52
+ # represent 1823-11-12 to 2116-02-20. When Integer or Rational is used (before
53
+ # 1823, after 2116, under nanosecond), Time works slower than when the signed 63
54
+ # bit integer is used.
55
+ #
56
+ # Ruby uses the C function `localtime` and `gmtime` to map between the number
57
+ # and 6-tuple (year,month,day,hour,minute,second). `localtime` is used for local
58
+ # time and "gmtime" is used for UTC.
59
+ #
60
+ # Integer and Rational has no range limit, but the localtime and gmtime has
61
+ # range limits due to the C types `time_t` and `struct tm`. If that limit is
62
+ # exceeded, Ruby extrapolates the localtime function.
63
+ #
64
+ # The Time class always uses the Gregorian calendar. I.e. the proleptic
65
+ # Gregorian calendar is used. Other calendars, such as Julian calendar, are not
66
+ # supported.
67
+ #
68
+ # `time_t` can represent 1901-12-14 to 2038-01-19 if it is 32 bit signed
69
+ # integer, -292277022657-01-27 to 292277026596-12-05 if it is 64 bit signed
70
+ # integer. However `localtime` on some platforms doesn't supports negative
71
+ # `time_t` (before 1970).
72
+ #
73
+ # `struct tm` has *tm_year* member to represent years. (`tm_year = 0` means the
74
+ # year 1900.) It is defined as `int` in the C standard. *tm_year* can represent
75
+ # between -2147481748 to 2147485547 if `int` is 32 bit.
76
+ #
77
+ # Ruby supports leap seconds as far as if the C function `localtime` and
78
+ # `gmtime` supports it. They use the tz database in most Unix systems. The tz
79
+ # database has timezones which supports leap seconds. For example, "Asia/Tokyo"
80
+ # doesn't support leap seconds but "right/Asia/Tokyo" supports leap seconds. So,
81
+ # Ruby supports leap seconds if the TZ environment variable is set to
82
+ # "right/Asia/Tokyo" in most Unix systems.
83
+ #
48
84
  # ## Examples
49
85
  #
50
86
  # All of these examples were done using the EST timezone which is GMT-5.
@@ -127,16 +163,14 @@
127
163
  # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
128
164
  # * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
129
165
  #
130
- #
131
166
  # Here, class `Time` provides methods that are useful for:
132
167
  #
133
- # * {Creating `Time`[objects}](rdoc-ref:Time@Methods+for+Creating).
134
- # * {Fetching `Time`[values}](rdoc-ref:Time@Methods+for+Fetching).
135
- # * {Querying a `Time`[object}](rdoc-ref:Time@Methods+for+Querying).
136
- # * {Comparing `Time`[objects}](rdoc-ref:Time@Methods+for+Comparing).
137
- # * {Converting a `Time`[object}](rdoc-ref:Time@Methods+for+Converting).
138
- # * {Rounding a `Time`[}](rdoc-ref:Time@Methods+for+Rounding).
139
- #
168
+ # * [Creating Time objects](rdoc-ref:Time@Methods+for+Creating).
169
+ # * [Fetching Time values](rdoc-ref:Time@Methods+for+Fetching).
170
+ # * [Querying a Time object](rdoc-ref:Time@Methods+for+Querying).
171
+ # * [Comparing Time objects](rdoc-ref:Time@Methods+for+Comparing).
172
+ # * [Converting a Time object](rdoc-ref:Time@Methods+for+Converting).
173
+ # * [Rounding a Time](rdoc-ref:Time@Methods+for+Rounding).
140
174
  #
141
175
  # ### Methods for Creating
142
176
  #
@@ -150,7 +184,6 @@
150
184
  # * #+ (plus): Returns a new time increased by the given number of seconds.
151
185
  # * #- (minus): Returns a new time decreased by the given number of seconds.
152
186
  #
153
- #
154
187
  # ### Methods for Fetching
155
188
  #
156
189
  # * #year: Returns the year of the time.
@@ -175,7 +208,6 @@
175
208
  # * #to_r: Returns the Rational number of seconds since epoch for the time.
176
209
  # * #zone: Returns a string representation of the timezone of the time.
177
210
  #
178
- #
179
211
  # ### Methods for Querying
180
212
  #
181
213
  # * #utc? (aliased as #gmt?): Returns whether the time is UTC.
@@ -189,13 +221,11 @@
189
221
  # * #friday?: Returns whether time is a Friday.
190
222
  # * #saturday?: Returns whether the time is a Saturday.
191
223
  #
192
- #
193
224
  # ### Methods for Comparing
194
225
  #
195
226
  # * #<=>: Compares `self` to another time.
196
227
  # * #eql?: Returns whether the time is equal to another time.
197
228
  #
198
- #
199
229
  # ### Methods for Converting
200
230
  #
201
231
  # * #asctime (aliased as #ctime): Returns the time as a string.
@@ -210,14 +240,12 @@
210
240
  # * #deconstruct_keys: Returns a hash of time components used in
211
241
  # pattern-matching.
212
242
  #
213
- #
214
243
  # ### Methods for Rounding
215
244
  #
216
245
  # * #round:Returns a new time with subseconds rounded.
217
246
  # * #ceil: Returns a new time with subseconds raised to a ceiling.
218
247
  # * #floor: Returns a new time with subseconds lowered to a floor.
219
248
  #
220
- #
221
249
  # For the forms of argument `zone`, see [Timezone
222
250
  # Specifiers](rdoc-ref:Time@Timezone+Specifiers).
223
251
  #
@@ -231,7 +259,6 @@
231
259
  # * Time#getlocal: positional argument `zone`.
232
260
  # * Time#localtime: positional argument `zone`.
233
261
  #
234
- #
235
262
  # The value given with any of these must be one of the following (each detailed
236
263
  # below):
237
264
  #
@@ -241,7 +268,6 @@
241
268
  # * [Timezone object](rdoc-ref:Time@Timezone+Objects).
242
269
  # * [Timezone name](rdoc-ref:Time@Timezone+Names).
243
270
  #
244
- #
245
271
  # ### Hours/Minutes Offsets
246
272
  #
247
273
  # The zone value may be a string offset from UTC in the form `'+HH:MM'` or
@@ -250,7 +276,6 @@
250
276
  # * `HH` is the 2-digit hour in the range `0..23`.
251
277
  # * `MM` is the 2-digit minute in the range `0..59`.
252
278
  #
253
- #
254
279
  # Examples:
255
280
  #
256
281
  # t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC
@@ -289,22 +314,29 @@
289
314
  #
290
315
  # * `local_to_utc`:
291
316
  #
292
- # * Called when Time.new is invoked with `tz` as the value of positional
293
- # argument `zone` or keyword argument `in:`.
294
- # * Argument: a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
295
- # * Returns: a [Time-like object](rdoc-ref:Time@Time-Like+Objects) in the
296
- # UTC timezone.
317
+ # Called when Time.new is invoked with `tz` as the value of positional
318
+ # argument `zone` or keyword argument `in:`.
319
+ #
320
+ # Argument
321
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
322
+ #
323
+ # Returns
324
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects) in the UTC
325
+ # timezone.
297
326
  #
298
327
  #
299
328
  # * `utc_to_local`:
300
329
  #
301
- # * Called when Time.at or Time.now is invoked with `tz` as the value for
302
- # keyword argument `in:`, and when Time#getlocal or Time#localtime is
303
- # called with `tz` as the value for positional argument `zone`.
304
- # * Argument: a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
305
- # * Returns: a [Time-like object](rdoc-ref:Time@Time-Like+Objects) in the
306
- # local timezone.
330
+ # Called when Time.at or Time.now is invoked with `tz` as the value for
331
+ # keyword argument `in:`, and when Time#getlocal or Time#localtime is called
332
+ # with `tz` as the value for positional argument `zone`.
333
+ #
334
+ # Argument
335
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
307
336
  #
337
+ # Returns
338
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects) in the local
339
+ # timezone.
308
340
  #
309
341
  #
310
342
  # A custom timezone class may have these instance methods, which will be called
@@ -312,26 +344,37 @@
312
344
  #
313
345
  # * `abbr`:
314
346
  #
315
- # * Called when Time#strftime is invoked with a format involving `%Z`.
316
- # * Argument: a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
317
- # * Returns: a string abbreviation for the timezone name.
347
+ # Called when Time#strftime is invoked with a format involving `%Z`.
348
+ #
349
+ # Argument
350
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
351
+ #
352
+ # Returns
353
+ # : a string abbreviation for the timezone name.
318
354
  #
319
355
  #
320
356
  # * `dst?`:
321
357
  #
322
- # * Called when Time.at or Time.now is invoked with `tz` as the value for
323
- # keyword argument `in:`, and when Time#getlocal or Time#localtime is
324
- # called with `tz` as the value for positional argument `zone`.
325
- # * Argument: a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
326
- # * Returns: whether the time is daylight saving time.
358
+ # Called when Time.at or Time.now is invoked with `tz` as the value for
359
+ # keyword argument `in:`, and when Time#getlocal or Time#localtime is called
360
+ # with `tz` as the value for positional argument `zone`.
361
+ #
362
+ # Argument
363
+ # : a [Time-like object](rdoc-ref:Time@Time-Like+Objects).
364
+ #
365
+ # Returns
366
+ # : whether the time is daylight saving time.
327
367
  #
328
368
  #
329
369
  # * `name`:
330
370
  #
331
- # * Called when `Marshal.dump(t)` is invoked
332
- # * Argument: none.
333
- # * Returns: the string name of the timezone.
371
+ # Called when `Marshal.dump(t)` is invoked
334
372
  #
373
+ # Argument
374
+ # : none.
375
+ #
376
+ # Returns
377
+ # : the string name of the timezone.
335
378
  #
336
379
  #
337
380
  # #### `Time`-Like Objects
@@ -358,7 +401,6 @@
358
401
  # * `isdst`
359
402
  # * `to_i`
360
403
  #
361
- #
362
404
  # For a returned `Integer`, its components, decomposed in UTC, are interpreted
363
405
  # as times in the specified timezone.
364
406
  #
@@ -424,7 +466,6 @@ class Time < Object
424
466
  # * A numeric number of [Epoch seconds](rdoc-ref:Time@Epoch+Seconds) for the
425
467
  # returned time.
426
468
  #
427
- #
428
469
  # Examples:
429
470
  #
430
471
  # t = Time.new(2000, 12, 31, 23, 59, 59) # => 2000-12-31 23:59:59 -0600
@@ -460,7 +501,6 @@ class Time < Object
460
501
  # Time.at(secs, 1000000000, :nanosecond) # => 2001-01-01 00:00:00 -0600
461
502
  # Time.at(secs, -1000000000, :nanosecond) # => 2000-12-31 23:59:58 -0600
462
503
  #
463
- #
464
504
  # Optional keyword argument `in: zone` specifies the timezone for the returned
465
505
  # time:
466
506
  #
@@ -527,7 +567,6 @@ class Time < Object
527
567
  # Time.utc(2000, 1, 1, 0, 0, 0, 0) # => 2000-01-01 00:00:00 UTC
528
568
  # Time.utc(2000, 1, 1, 0, 0, 0, 999999) # => 2000-01-01 00:00:00.999999 UTC
529
569
  #
530
- #
531
570
  # The values may be:
532
571
  #
533
572
  # * Integers, as above.
@@ -542,7 +581,6 @@ class Time < Object
542
581
  # # => ["0", "1", "1", "0", "0", "0", "0", "0"]
543
582
  # Time.utc(*a) # => 0000-01-01 00:00:00 UTC
544
583
  #
545
- #
546
584
  # When exactly ten arguments are given, the arguments are interpreted as in the
547
585
  # second calling sequence above:
548
586
  #
@@ -659,7 +697,6 @@ class Time < Object
659
697
  # Time.utc(2000, 1, 1, 0, 0, 0, 0) # => 2000-01-01 00:00:00 UTC
660
698
  # Time.utc(2000, 1, 1, 0, 0, 0, 999999) # => 2000-01-01 00:00:00.999999 UTC
661
699
  #
662
- #
663
700
  # The values may be:
664
701
  #
665
702
  # * Integers, as above.
@@ -674,7 +711,6 @@ class Time < Object
674
711
  # # => ["0", "1", "1", "0", "0", "0", "0", "0"]
675
712
  # Time.utc(*a) # => 0000-01-01 00:00:00 UTC
676
713
  #
677
- #
678
714
  # When exactly ten arguments are given, the arguments are interpreted as in the
679
715
  # second calling sequence above:
680
716
  #
@@ -756,7 +792,6 @@ class Time < Object
756
792
  # * `1`, if `self` is greater then `other_time`.
757
793
  # * `nil`, if `self` and `other_time` are incomparable.
758
794
  #
759
- #
760
795
  # Examples:
761
796
  #
762
797
  # t = Time.now # => 2007-11-19 08:12:12 -0600
@@ -1066,7 +1101,6 @@ class Time < Object
1066
1101
  # Time.new(2000, 1, 1, 0, 0, 59.5) # => 2000-12-31 23:59:59.5 +0900
1067
1102
  # Time.new(2000, 1, 1, 0, 0, 59.7r) # => 2000-12-31 23:59:59.7 +0900
1068
1103
  #
1069
- #
1070
1104
  # These values may be:
1071
1105
  #
1072
1106
  # * Integers, as above.
@@ -1081,7 +1115,6 @@ class Time < Object
1081
1115
  # # => ["0", "1", "1", "0", "0", "0"]
1082
1116
  # Time.new(*a) # => 0000-01-01 00:00:00 -0600
1083
1117
  #
1084
- #
1085
1118
  # When positional argument `zone` or keyword argument `in:` is given, the new
1086
1119
  # `Time` object is in the specified timezone. For the forms of argument `zone`,
1087
1120
  # see [Timezone Specifiers](rdoc-ref:Time@Timezone+Specifiers):
@@ -1138,6 +1171,25 @@ class Time < Object
1138
1171
  #
1139
1172
  def isdst: () -> bool
1140
1173
 
1174
+ # <!-- rdoc-file=lib/time.rb -->
1175
+ # Parses `time` as a dateTime defined by the XML Schema and converts it to a
1176
+ # Time object. The format is a restricted version of the format defined by ISO
1177
+ # 8601.
1178
+ #
1179
+ # ArgumentError is raised if `time` is not compliant with the format or if the
1180
+ # Time class cannot represent the specified time.
1181
+ #
1182
+ # See #xmlschema for more information on this format.
1183
+ #
1184
+ # require 'time'
1185
+ #
1186
+ # Time.xmlschema("2011-10-05T22:26:12-04:00")
1187
+ # #=> 2011-10-05 22:26:12-04:00
1188
+ #
1189
+ # You must require 'time' to use this method.
1190
+ #
1191
+ alias iso8601 xmlschema
1192
+
1141
1193
  # <!--
1142
1194
  # rdoc-file=time.c
1143
1195
  # - localtime -> self or new_time
@@ -1151,7 +1203,6 @@ class Time < Object
1151
1203
  # t = Time.utc(2000, 1, 1, 20, 15, 1) # => 2000-01-01 20:15:01 UTC
1152
1204
  # t.localtime # => 2000-01-01 14:15:01 -0600
1153
1205
  #
1154
- #
1155
1206
  # With argument `zone` given, returns the new `Time` object created by
1156
1207
  # converting `self` to the given time zone:
1157
1208
  #
@@ -1550,6 +1601,32 @@ class Time < Object
1550
1601
  #
1551
1602
  def wednesday?: () -> bool
1552
1603
 
1604
+ # <!--
1605
+ # rdoc-file=lib/time.rb
1606
+ # - xmlschema(fraction_digits=0)
1607
+ # -->
1608
+ # Returns a string which represents the time as a dateTime defined by XML
1609
+ # Schema:
1610
+ #
1611
+ # CCYY-MM-DDThh:mm:ssTZD
1612
+ # CCYY-MM-DDThh:mm:ss.sssTZD
1613
+ #
1614
+ # where TZD is Z or [+-]hh:mm.
1615
+ #
1616
+ # If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise.
1617
+ #
1618
+ # `fraction_digits` specifies a number of digits to use for fractional seconds.
1619
+ # Its default value is 0.
1620
+ #
1621
+ # require 'time'
1622
+ #
1623
+ # t = Time.now
1624
+ # t.iso8601 # => "2011-10-05T22:26:12-04:00"
1625
+ #
1626
+ # You must require 'time' to use this method.
1627
+ #
1628
+ def xmlschema: () -> String
1629
+
1553
1630
  # <!--
1554
1631
  # rdoc-file=time.c
1555
1632
  # - yday -> integer
data/core/trace_point.rbs CHANGED
@@ -30,36 +30,52 @@
30
30
  #
31
31
  # `:line`
32
32
  # : execute an expression or statement on a new line
33
+ #
33
34
  # `:class`
34
35
  # : start a class or module definition
36
+ #
35
37
  # `:end`
36
38
  # : finish a class or module definition
39
+ #
37
40
  # `:call`
38
41
  # : call a Ruby method
42
+ #
39
43
  # `:return`
40
44
  # : return from a Ruby method
45
+ #
41
46
  # `:c_call`
42
47
  # : call a C-language routine
48
+ #
43
49
  # `:c_return`
44
50
  # : return from a C-language routine
51
+ #
45
52
  # `:raise`
46
53
  # : raise an exception
54
+ #
47
55
  # `:rescue`
48
56
  # : rescue an exception
57
+ #
49
58
  # `:b_call`
50
59
  # : event hook at block entry
60
+ #
51
61
  # `:b_return`
52
62
  # : event hook at block ending
63
+ #
53
64
  # `:a_call`
54
65
  # : event hook at all calls (`call`, `b_call`, and `c_call`)
66
+ #
55
67
  # `:a_return`
56
68
  # : event hook at all returns (`return`, `b_return`, and `c_return`)
69
+ #
57
70
  # `:thread_begin`
58
71
  # : event hook at thread beginning
72
+ #
59
73
  # `:thread_end`
60
74
  # : event hook at thread ending
75
+ #
61
76
  # `:fiber_switch`
62
77
  # : event hook at fiber switch
78
+ #
63
79
  # `:script_compiled`
64
80
  # : new Ruby code compiled (with `eval`, `load` or `require`)
65
81
  #
data/core/true_class.rbs CHANGED
@@ -8,7 +8,6 @@
8
8
  # * #===
9
9
  # * #^
10
10
  #
11
- #
12
11
  # One other method:
13
12
  #
14
13
  # * #to_s and its alias #inspect.
data/core/warning.rbs CHANGED
@@ -45,12 +45,11 @@ module Warning
45
45
  # : deprecation warnings
46
46
  # * assignment of non-nil value to `$,` and `$;`
47
47
  # * keyword arguments
48
- #
49
48
  # etc.
50
49
  #
50
+ #
51
51
  # `:experimental`
52
52
  # : experimental features
53
- # * Pattern matching
54
53
  #
55
54
  #
56
55
  # `:performance`
@@ -67,6 +66,14 @@ module Warning
67
66
  #
68
67
  def self.[]=: [T] (category, T flag) -> T
69
68
 
69
+ # <!--
70
+ # rdoc-file=error.c
71
+ # - categories -> array
72
+ # -->
73
+ # Returns a list of the supported category symbols.
74
+ #
75
+ def self.categories: () -> Array[Symbol]
76
+
70
77
  # <!--
71
78
  # rdoc-file=error.c
72
79
  # - warn(msg, category: nil) -> nil
data/docs/architecture.md CHANGED
@@ -92,7 +92,7 @@ The `#build_singleton` calculates the type of `.new` methods based on the defini
92
92
  `DefinitionBuilder#expand_alias` and its variants provide one step *unfold* operation of type aliases.
93
93
 
94
94
  ```ruby
95
- builder.expand_alias2(TypeName("::int"), []) # => returns `::Integer | ::_ToInt`
95
+ builder.expand_alias2(RBS::TypeName.parse("::int"), []) # => returns `::Integer | ::_ToInt`
96
96
  ```
97
97
 
98
98
  We don't have *normalize* operation for type aliases, because RBS allows recursive type alias definition, which cannot be *fully* unfolded.
data/docs/syntax.md CHANGED
@@ -291,7 +291,7 @@ class Foo
291
291
 
292
292
  def foo: () -> instance
293
293
 
294
- @@foos: Array[instances]
294
+ @@foos: Array[instance]
295
295
 
296
296
  include Enumerable[class]
297
297
  end
@@ -36,9 +36,12 @@ void rbs_loc_alloc_children(rbs_loc *loc, unsigned short cap) {
36
36
  size_t s = RBS_LOC_CHILDREN_SIZE(cap);
37
37
  loc->children = malloc(s);
38
38
 
39
- loc->children->len = 0;
40
- loc->children->required_p = 0;
41
- loc->children->cap = cap;
39
+ *loc->children = (rbs_loc_children) {
40
+ .len = 0,
41
+ .required_p = 0,
42
+ .cap = cap,
43
+ .entries = {{ 0 }},
44
+ };
42
45
  }
43
46
 
44
47
  static void check_children_cap(rbs_loc *loc) {
@@ -54,27 +57,28 @@ static void check_children_cap(rbs_loc *loc) {
54
57
  }
55
58
 
56
59
  void rbs_loc_add_required_child(rbs_loc *loc, ID name, range r) {
57
- check_children_cap(loc);
58
-
59
- unsigned short i = loc->children->len++;
60
- loc->children->entries[i].name = name;
61
- loc->children->entries[i].rg = rbs_new_loc_range(r);
60
+ rbs_loc_add_optional_child(loc, name, r);
62
61
 
63
- loc->children->required_p |= 1 << i;
62
+ unsigned short last_index = loc->children->len - 1;
63
+ loc->children->required_p |= 1 << last_index;
64
64
  }
65
65
 
66
66
  void rbs_loc_add_optional_child(rbs_loc *loc, ID name, range r) {
67
67
  check_children_cap(loc);
68
68
 
69
69
  unsigned short i = loc->children->len++;
70
- loc->children->entries[i].name = name;
71
- loc->children->entries[i].rg = rbs_new_loc_range(r);
70
+ loc->children->entries[i] = (rbs_loc_entry) {
71
+ .name = name,
72
+ .rg = rbs_new_loc_range(r),
73
+ };
72
74
  }
73
75
 
74
76
  void rbs_loc_init(rbs_loc *loc, VALUE buffer, rbs_loc_range rg) {
75
- loc->buffer = buffer;
76
- loc->rg = rg;
77
- loc->children = NULL;
77
+ *loc = (rbs_loc) {
78
+ .buffer = buffer,
79
+ .rg = rg,
80
+ .children = NULL,
81
+ };
78
82
  }
79
83
 
80
84
  void rbs_loc_free(rbs_loc *loc) {
@@ -122,9 +126,11 @@ static VALUE location_initialize(VALUE self, VALUE buffer, VALUE start_pos, VALU
122
126
  int start = FIX2INT(start_pos);
123
127
  int end = FIX2INT(end_pos);
124
128
 
125
- loc->buffer = buffer;
126
- loc->rg.start = start;
127
- loc->rg.end = end;
129
+ *loc = (rbs_loc) {
130
+ .buffer = buffer,
131
+ .rg = (rbs_loc_range) { start, end },
132
+ .children = NULL,
133
+ };
128
134
 
129
135
  return Qnil;
130
136
  }
@@ -133,8 +139,12 @@ static VALUE location_initialize_copy(VALUE self, VALUE other) {
133
139
  rbs_loc *self_loc = rbs_check_location(self);
134
140
  rbs_loc *other_loc = rbs_check_location(other);
135
141
 
136
- self_loc->buffer = other_loc->buffer;
137
- self_loc->rg = other_loc->rg;
142
+ *self_loc = (rbs_loc) {
143
+ .buffer = other_loc->buffer,
144
+ .rg = other_loc->rg,
145
+ .children = NULL,
146
+ };
147
+
138
148
  if (other_loc->children != NULL) {
139
149
  rbs_loc_alloc_children(self_loc, other_loc->children->cap);
140
150
  memcpy(self_loc->children, other_loc->children, RBS_LOC_CHILDREN_SIZE(other_loc->children->cap));