rbs 3.7.0 → 3.8.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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));