rbs 3.6.1 → 3.9.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 (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -2
  3. data/.github/workflows/dependabot.yml +1 -1
  4. data/.github/workflows/ruby.yml +34 -10
  5. data/.github/workflows/windows.yml +20 -3
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +26 -1
  8. data/CHANGELOG.md +241 -0
  9. data/Rakefile +54 -4
  10. data/config.yml +317 -0
  11. data/core/array.rbs +1756 -1591
  12. data/core/basic_object.rbs +38 -35
  13. data/core/comparable.rbs +1 -1
  14. data/core/complex.rbs +166 -94
  15. data/core/data.rbs +2 -2
  16. data/core/dir.rbs +2 -18
  17. data/core/encoding.rbs +12 -32
  18. data/core/enumerable.rbs +270 -266
  19. data/core/enumerator.rbs +14 -4
  20. data/core/env.rbs +1 -1
  21. data/core/errno.rbs +33 -16
  22. data/core/errors.rbs +6 -2
  23. data/core/exception.rbs +342 -167
  24. data/core/fiber.rbs +3 -2
  25. data/core/file.rbs +26 -75
  26. data/core/float.rbs +125 -72
  27. data/core/gc.rbs +158 -42
  28. data/core/hash.rbs +122 -143
  29. data/core/integer.rbs +79 -50
  30. data/core/io/buffer.rbs +49 -43
  31. data/core/io.rbs +108 -151
  32. data/core/kernel.rbs +341 -209
  33. data/core/match_data.rbs +76 -2
  34. data/core/math.rbs +0 -36
  35. data/core/method.rbs +2 -2
  36. data/core/module.rbs +32 -27
  37. data/core/nil_class.rbs +2 -2
  38. data/core/numeric.rbs +101 -104
  39. data/core/object.rbs +1 -5
  40. data/core/object_space/weak_key_map.rbs +3 -4
  41. data/core/object_space.rbs +3 -3
  42. data/core/proc.rbs +82 -14
  43. data/core/process.rbs +110 -58
  44. data/core/ractor.rbs +57 -4
  45. data/core/range.rbs +114 -87
  46. data/core/rational.rbs +0 -2
  47. data/core/rbs/unnamed/argf.rbs +237 -36
  48. data/core/rbs/unnamed/env_class.rbs +35 -53
  49. data/core/rbs/unnamed/random.rbs +1 -2
  50. data/core/regexp.rbs +10 -56
  51. data/core/ruby_vm.rbs +88 -9
  52. data/core/rubygems/config_file.rbs +3 -0
  53. data/core/rubygems/errors.rbs +3 -6
  54. data/core/rubygems/platform.rbs +0 -9
  55. data/core/rubygems/rubygems.rbs +3 -6
  56. data/core/rubygems/version.rbs +8 -8
  57. data/core/set.rbs +4 -16
  58. data/core/string.rbs +271 -264
  59. data/core/struct.rbs +6 -18
  60. data/core/symbol.rbs +14 -21
  61. data/core/thread.rbs +32 -35
  62. data/core/time.rbs +131 -50
  63. data/core/trace_point.rbs +124 -113
  64. data/core/true_class.rbs +0 -1
  65. data/core/unbound_method.rbs +1 -1
  66. data/core/warning.rbs +9 -2
  67. data/docs/architecture.md +1 -1
  68. data/docs/syntax.md +17 -10
  69. data/ext/rbs_extension/extconf.rb +11 -0
  70. data/ext/rbs_extension/location.c +61 -29
  71. data/ext/rbs_extension/location.h +4 -3
  72. data/ext/rbs_extension/main.c +23 -1
  73. data/ext/rbs_extension/parser.c +506 -517
  74. data/ext/rbs_extension/parserstate.c +109 -30
  75. data/ext/rbs_extension/parserstate.h +6 -4
  76. data/ext/rbs_extension/rbs_extension.h +1 -10
  77. data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
  78. data/include/rbs/ruby_objs.h +72 -0
  79. data/include/rbs/util/rbs_constant_pool.h +219 -0
  80. data/include/rbs.h +7 -0
  81. data/lib/rbs/annotate/annotations.rb +3 -3
  82. data/lib/rbs/annotate/rdoc_source.rb +2 -2
  83. data/lib/rbs/ast/declarations.rb +9 -4
  84. data/lib/rbs/ast/directives.rb +10 -0
  85. data/lib/rbs/ast/members.rb +2 -0
  86. data/lib/rbs/ast/type_param.rb +2 -12
  87. data/lib/rbs/cli/diff.rb +3 -3
  88. data/lib/rbs/cli/validate.rb +2 -1
  89. data/lib/rbs/cli.rb +16 -16
  90. data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
  91. data/lib/rbs/collection/config.rb +5 -3
  92. data/lib/rbs/collection/sources/rubygems.rb +1 -1
  93. data/lib/rbs/collection.rb +1 -0
  94. data/lib/rbs/definition.rb +51 -34
  95. data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
  96. data/lib/rbs/definition_builder.rb +83 -24
  97. data/lib/rbs/environment.rb +33 -18
  98. data/lib/rbs/environment_loader.rb +6 -1
  99. data/lib/rbs/errors.rb +24 -0
  100. data/lib/rbs/locator.rb +2 -0
  101. data/lib/rbs/method_type.rb +2 -0
  102. data/lib/rbs/namespace.rb +1 -0
  103. data/lib/rbs/parser_aux.rb +40 -3
  104. data/lib/rbs/prototype/rb.rb +20 -12
  105. data/lib/rbs/prototype/rbi.rb +11 -6
  106. data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
  107. data/lib/rbs/prototype/runtime.rb +7 -5
  108. data/lib/rbs/subtractor.rb +3 -3
  109. data/lib/rbs/test/hook.rb +47 -42
  110. data/lib/rbs/test/type_check.rb +7 -5
  111. data/lib/rbs/type_name.rb +14 -9
  112. data/lib/rbs/types.rb +63 -14
  113. data/lib/rbs/unit_test/spy.rb +4 -2
  114. data/lib/rbs/unit_test/type_assertions.rb +19 -13
  115. data/lib/rbs/unit_test/with_aliases.rb +3 -1
  116. data/lib/rbs/validator.rb +7 -1
  117. data/lib/rbs/version.rb +1 -1
  118. data/lib/rbs/writer.rb +10 -5
  119. data/lib/rbs.rb +1 -0
  120. data/lib/rdoc_plugin/parser.rb +2 -2
  121. data/rbs.gemspec +6 -2
  122. data/sig/ancestor_graph.rbs +5 -5
  123. data/sig/annotate/rdoc_source.rbs +2 -0
  124. data/sig/cli.rbs +2 -0
  125. data/sig/collection/config/lockfile_generator.rbs +9 -1
  126. data/sig/declarations.rbs +10 -3
  127. data/sig/definition.rbs +80 -12
  128. data/sig/definition_builder.rbs +18 -4
  129. data/sig/directives.rbs +17 -1
  130. data/sig/environment.rbs +3 -1
  131. data/sig/errors.rbs +19 -0
  132. data/sig/namespace.rbs +2 -3
  133. data/sig/parser.rbs +5 -1
  134. data/sig/prototype/rb.rbs +1 -1
  135. data/sig/resolver/constant_resolver.rbs +2 -2
  136. data/sig/resolver/context.rbs +1 -1
  137. data/sig/subtractor.rbs +1 -1
  138. data/sig/test/type_check.rbs +2 -2
  139. data/sig/type_alias_dependency.rbs +2 -2
  140. data/sig/type_alias_regularity.rbs +6 -6
  141. data/sig/type_param.rbs +4 -4
  142. data/sig/typename.rbs +8 -5
  143. data/sig/types.rbs +1 -1
  144. data/sig/unit_test/spy.rbs +2 -0
  145. data/sig/unit_test/type_assertions.rbs +2 -0
  146. data/sig/use_map.rbs +1 -1
  147. data/sig/validator.rbs +6 -2
  148. data/sig/vendorer.rbs +1 -1
  149. data/sig/writer.rbs +1 -1
  150. data/{ext/rbs_extension → src}/constants.c +35 -36
  151. data/src/ruby_objs.c +799 -0
  152. data/src/util/rbs_constant_pool.c +342 -0
  153. data/stdlib/base64/0/base64.rbs +0 -9
  154. data/stdlib/benchmark/0/benchmark.rbs +11 -2
  155. data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
  156. data/stdlib/cgi/0/core.rbs +60 -3
  157. data/stdlib/cgi/0/manifest.yaml +1 -0
  158. data/stdlib/coverage/0/coverage.rbs +0 -3
  159. data/stdlib/csv/0/csv.rbs +18 -58
  160. data/stdlib/csv/0/manifest.yaml +1 -0
  161. data/stdlib/date/0/date.rbs +27 -42
  162. data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
  163. data/stdlib/digest/0/digest.rbs +25 -2
  164. data/stdlib/erb/0/erb.rbs +0 -1
  165. data/stdlib/etc/0/etc.rbs +51 -34
  166. data/stdlib/fileutils/0/fileutils.rbs +3 -44
  167. data/stdlib/io-console/0/io-console.rbs +69 -15
  168. data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
  169. data/stdlib/json/0/json.rbs +107 -120
  170. data/stdlib/logger/0/log_device.rbs +1 -1
  171. data/stdlib/logger/0/logger.rbs +3 -18
  172. data/stdlib/minitest/0/kernel.rbs +2 -2
  173. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  174. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  175. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  176. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  177. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  178. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  179. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  180. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  181. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  182. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  183. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  184. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  185. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  186. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  187. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  188. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  189. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  190. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  191. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  192. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  193. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  194. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
  195. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  196. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  197. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  198. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  199. data/stdlib/minitest/0/minitest.rbs +41 -892
  200. data/stdlib/monitor/0/monitor.rbs +13 -4
  201. data/stdlib/net-http/0/net-http.rbs +42 -109
  202. data/stdlib/nkf/0/nkf.rbs +30 -0
  203. data/stdlib/objspace/0/objspace.rbs +1 -2
  204. data/stdlib/observable/0/observable.rbs +1 -1
  205. data/stdlib/open-uri/0/manifest.yaml +1 -0
  206. data/stdlib/open-uri/0/open-uri.rbs +52 -0
  207. data/stdlib/open3/0/open3.rbs +0 -8
  208. data/stdlib/openssl/0/manifest.yaml +1 -0
  209. data/stdlib/openssl/0/openssl.rbs +235 -143
  210. data/stdlib/optparse/0/optparse.rbs +58 -18
  211. data/stdlib/pathname/0/pathname.rbs +2 -8
  212. data/stdlib/pp/0/pp.rbs +3 -1
  213. data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
  214. data/stdlib/pstore/0/pstore.rbs +0 -6
  215. data/stdlib/psych/0/core_ext.rbs +12 -0
  216. data/stdlib/psych/0/psych.rbs +15 -4
  217. data/stdlib/pty/0/pty.rbs +46 -4
  218. data/stdlib/rdoc/0/code_object.rbs +0 -4
  219. data/stdlib/rdoc/0/markup.rbs +10 -12
  220. data/stdlib/rdoc/0/rdoc.rbs +13 -8
  221. data/stdlib/resolv/0/resolv.rbs +21 -12
  222. data/stdlib/ripper/0/ripper.rbs +0 -2
  223. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  224. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  225. data/stdlib/singleton/0/singleton.rbs +0 -1
  226. data/stdlib/socket/0/addrinfo.rbs +1 -2
  227. data/stdlib/socket/0/basic_socket.rbs +0 -5
  228. data/stdlib/socket/0/socket.rbs +32 -27
  229. data/stdlib/socket/0/tcp_server.rbs +0 -3
  230. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  231. data/stdlib/socket/0/udp_socket.rbs +0 -1
  232. data/stdlib/socket/0/unix_server.rbs +0 -3
  233. data/stdlib/socket/0/unix_socket.rbs +4 -2
  234. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
  235. data/stdlib/strscan/0/string_scanner.rbs +1265 -422
  236. data/stdlib/tempfile/0/tempfile.rbs +135 -28
  237. data/stdlib/time/0/time.rbs +48 -35
  238. data/stdlib/timeout/0/timeout.rbs +11 -8
  239. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  240. data/stdlib/tsort/0/tsort.rbs +0 -4
  241. data/stdlib/uri/0/common.rbs +28 -30
  242. data/stdlib/uri/0/ftp.rbs +1 -1
  243. data/stdlib/uri/0/generic.rbs +22 -18
  244. data/stdlib/uri/0/http.rbs +2 -2
  245. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  246. data/stdlib/zlib/0/buf_error.rbs +1 -70
  247. data/stdlib/zlib/0/data_error.rbs +1 -70
  248. data/stdlib/zlib/0/deflate.rbs +8 -72
  249. data/stdlib/zlib/0/error.rbs +1 -70
  250. data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
  251. data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
  252. data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
  253. data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
  254. data/stdlib/zlib/0/gzip_file.rbs +1 -71
  255. data/stdlib/zlib/0/gzip_reader.rbs +3 -74
  256. data/stdlib/zlib/0/gzip_writer.rbs +1 -70
  257. data/stdlib/zlib/0/inflate.rbs +4 -71
  258. data/stdlib/zlib/0/mem_error.rbs +1 -70
  259. data/stdlib/zlib/0/need_dict.rbs +1 -70
  260. data/stdlib/zlib/0/stream_end.rbs +1 -70
  261. data/stdlib/zlib/0/stream_error.rbs +1 -70
  262. data/stdlib/zlib/0/version_error.rbs +1 -70
  263. data/stdlib/zlib/0/zlib.rbs +0 -2
  264. data/stdlib/zlib/0/zstream.rbs +4 -72
  265. metadata +17 -13
  266. data/ext/rbs_extension/ruby_objs.c +0 -602
  267. data/ext/rbs_extension/ruby_objs.h +0 -51
  268. data/stdlib/minitest/0/manifest.yaml +0 -2
data/core/numeric.rbs CHANGED
@@ -77,7 +77,6 @@
77
77
  # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
78
78
  # * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
79
79
  #
80
- #
81
80
  # Here, class Numeric provides methods for:
82
81
  #
83
82
  # * [Querying](rdoc-ref:Numeric@Querying)
@@ -85,7 +84,6 @@
85
84
  # * [Converting](rdoc-ref:Numeric@Converting)
86
85
  # * [Other](rdoc-ref:Numeric@Other)
87
86
  #
88
- #
89
87
  # ### Querying
90
88
  #
91
89
  # * #finite?: Returns true unless `self` is infinite or not a number.
@@ -98,7 +96,6 @@
98
96
  # * #real?: Returns whether `self` is a real value.
99
97
  # * #zero?: Returns whether `self` is zero.
100
98
  #
101
- #
102
99
  # ### Comparing
103
100
  #
104
101
  # * #<=>: Returns:
@@ -108,11 +105,9 @@
108
105
  # * 1 if `self` is greater than the given value.
109
106
  # * `nil` if `self` and the given value are not comparable.
110
107
  #
111
- #
112
108
  # * #eql?: Returns whether `self` and the given value have the same value and
113
109
  # type.
114
110
  #
115
- #
116
111
  # ### Converting
117
112
  #
118
113
  # * #% (aliased as #modulo): Returns the remainder of `self` divided by the
@@ -152,7 +147,6 @@
152
147
  # necessary.
153
148
  # * #truncate: Returns `self` truncated (toward zero) to a given precision.
154
149
  #
155
- #
156
150
  # ### Other
157
151
  #
158
152
  # * #clone: Returns `self`; does not allow freezing.
@@ -202,7 +196,7 @@ class Numeric
202
196
  def +: (Numeric) -> Numeric
203
197
 
204
198
  # <!--
205
- # rdoc-file=numeric.c
199
+ # rdoc-file=numeric.rb
206
200
  # - +self -> self
207
201
  # -->
208
202
  # Returns `self`.
@@ -267,13 +261,15 @@ class Numeric
267
261
 
268
262
  # <!--
269
263
  # rdoc-file=numeric.c
270
- # - ceil(digits = 0) -> integer or float
264
+ # - ceil(ndigits = 0) -> float or integer
271
265
  # -->
272
- # Returns the smallest number that is greater than or equal to `self` with a
273
- # precision of `digits` decimal digits.
266
+ # Returns the smallest float or integer that is greater than or equal to `self`,
267
+ # as specified by the given `ndigits`, which must be an [integer-convertible
268
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
274
269
  #
275
- # Numeric implements this by converting `self` to a Float and invoking
276
- # Float#ceil.
270
+ # Equivalent to `self.to_f.ceil(ndigits)`.
271
+ #
272
+ # Related: #floor, Float#ceil.
277
273
  #
278
274
  def ceil: () -> Integer
279
275
  | (Integer digits) -> (Integer | Numeric)
@@ -393,8 +389,8 @@ class Numeric
393
389
  # 1.eql?(Rational(1, 1)) # => false
394
390
  # 1.eql?(Complex(1, 0)) # => false
395
391
  #
396
- # Method `eql?` is different from +==+ in that `eql?` requires matching types,
397
- # while +==+ does not.
392
+ # Method `eql?` is different from `==` in that `eql?` requires matching types,
393
+ # while `==` does not.
398
394
  #
399
395
  def eql?: (untyped) -> bool
400
396
 
@@ -420,13 +416,15 @@ class Numeric
420
416
 
421
417
  # <!--
422
418
  # rdoc-file=numeric.c
423
- # - floor(digits = 0) -> integer or float
419
+ # - floor(ndigits = 0) -> float or integer
424
420
  # -->
425
- # Returns the largest number that is less than or equal to `self` with a
426
- # precision of `digits` decimal digits.
421
+ # Returns the largest float or integer that is less than or equal to `self`, as
422
+ # specified by the given `ndigits`, which must be an [integer-convertible
423
+ # object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects).
427
424
  #
428
- # Numeric implements this by converting `self` to a Float and invoking
429
- # Float#floor.
425
+ # Equivalent to `self.to_f.floor(ndigits)`.
426
+ #
427
+ # Related: #ceil, Float#floor.
430
428
  #
431
429
  def floor: () -> Integer
432
430
  | (Integer digits) -> Numeric
@@ -532,17 +530,19 @@ class Numeric
532
530
  # rdoc-file=numeric.c
533
531
  # - nonzero? -> self or nil
534
532
  # -->
535
- # Returns `self` if `self` is not a zero value, `nil` otherwise; uses method
536
- # `zero?` for the evaluation.
533
+ # Returns +self+ if +self+ is not a zero value, +nil+ otherwise;
534
+ # uses method <tt>zero?</tt> for the evaluation.
535
+ #
536
+ # The returned +self+ allows the method to be chained:
537
537
  #
538
- # The returned `self` allows the method to be chained:
538
+ # a = %w[z Bb bB bb BB a aA Aa AA A]
539
+ # a.sort {|a, b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
540
+ # # => ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
539
541
  #
540
- # a = %w[z Bb bB bb BB a aA Aa AA A]
541
- # a.sort {|a, b| (a.downcase <=> b.downcase).nonzero? || a <=> b }
542
- # # => ["A", "a", "AA", "Aa", "aA", "BB", "Bb", "bB", "bb", "z"]
542
+ # Of the Core and Standard Library classes,
543
+ # Integer, Float, Rational, and Complex use this implementation.
543
544
  #
544
- # Of the Core and Standard Library classes, Integer, Float, Rational, and
545
- # Complex use this implementation.
545
+ # Related: #zero?
546
546
  #
547
547
  def nonzero?: () -> self?
548
548
 
@@ -670,86 +670,83 @@ class Numeric
670
670
  # -->
671
671
  # Generates a sequence of numbers; with a block given, traverses the sequence.
672
672
  #
673
- # Of the Core and Standard Library classes,
674
- # Integer, Float, and Rational use this implementation.
675
- #
676
- # A quick example:
677
- #
678
- # squares = []
679
- # 1.step(by: 2, to: 10) {|i| squares.push(i*i) }
680
- # squares # => [1, 9, 25, 49, 81]
681
- #
682
- # The generated sequence:
683
- #
684
- # - Begins with +self+.
685
- # - Continues at intervals of +by+ (which may not be zero).
686
- # - Ends with the last number that is within or equal to +to+;
687
- # that is, less than or equal to +to+ if +by+ is positive,
688
- # greater than or equal to +to+ if +by+ is negative.
689
- # If +to+ is +nil+, the sequence is of infinite length.
690
- #
691
- # If a block is given, calls the block with each number in the sequence;
692
- # returns +self+. If no block is given, returns an Enumerator::ArithmeticSequence.
693
- #
694
- # <b>Keyword Arguments</b>
695
- #
696
- # With keyword arguments +by+ and +to+,
697
- # their values (or defaults) determine the step and limit:
698
- #
699
- # # Both keywords given.
700
- # squares = []
701
- # 4.step(by: 2, to: 10) {|i| squares.push(i*i) } # => 4
702
- # squares # => [16, 36, 64, 100]
703
- # cubes = []
704
- # 3.step(by: -1.5, to: -3) {|i| cubes.push(i*i*i) } # => 3
705
- # cubes # => [27.0, 3.375, 0.0, -3.375, -27.0]
706
- # squares = []
707
- # 1.2.step(by: 0.2, to: 2.0) {|f| squares.push(f*f) }
708
- # squares # => [1.44, 1.9599999999999997, 2.5600000000000005, 3.24, 4.0]
709
- #
710
- # squares = []
711
- # Rational(6/5).step(by: 0.2, to: 2.0) {|r| squares.push(r*r) }
712
- # squares # => [1.0, 1.44, 1.9599999999999997, 2.5600000000000005, 3.24, 4.0]
713
- #
714
- # # Only keyword to given.
715
- # squares = []
716
- # 4.step(to: 10) {|i| squares.push(i*i) } # => 4
717
- # squares # => [16, 25, 36, 49, 64, 81, 100]
718
- # # Only by given.
719
- #
720
- # # Only keyword by given
721
- # squares = []
722
- # 4.step(by:2) {|i| squares.push(i*i); break if i > 10 }
723
- # squares # => [16, 36, 64, 100, 144]
724
- #
725
- # # No block given.
726
- # e = 3.step(by: -1.5, to: -3) # => (3.step(by: -1.5, to: -3))
727
- # e.class # => Enumerator::ArithmeticSequence
728
- #
729
- # <b>Positional Arguments</b>
730
- #
731
- # With optional positional arguments +to+ and +by+,
732
- # their values (or defaults) determine the step and limit:
733
- #
734
- # squares = []
735
- # 4.step(10, 2) {|i| squares.push(i*i) } # => 4
736
- # squares # => [16, 36, 64, 100]
737
- # squares = []
738
- # 4.step(10) {|i| squares.push(i*i) }
739
- # squares # => [16, 25, 36, 49, 64, 81, 100]
740
- # squares = []
741
- # 4.step {|i| squares.push(i*i); break if i > 10 } # => nil
742
- # squares # => [16, 25, 36, 49, 64, 81, 100, 121]
673
+ # Of the Core and Standard Library classes, Integer, Float, and Rational use
674
+ # this implementation.
675
+ #
676
+ # A quick example:
677
+ #
678
+ # squares = []
679
+ # 1.step(by: 2, to: 10) {|i| squares.push(i*i) }
680
+ # squares # => [1, 9, 25, 49, 81]
681
+ #
682
+ # The generated sequence:
683
+ #
684
+ # * Begins with `self`.
685
+ # * Continues at intervals of `by` (which may not be zero).
686
+ # * Ends with the last number that is within or equal to `to`; that is, less
687
+ # than or equal to `to` if `by` is positive, greater than or equal to `to`
688
+ # if `by` is negative. If `to` is `nil`, the sequence is of infinite length.
689
+ #
690
+ # If a block is given, calls the block with each number in the sequence; returns
691
+ # `self`. If no block is given, returns an Enumerator::ArithmeticSequence.
692
+ #
693
+ # **Keyword Arguments**
694
+ #
695
+ # With keyword arguments `by` and `to`, their values (or defaults) determine the
696
+ # step and limit:
697
+ #
698
+ # # Both keywords given.
699
+ # squares = []
700
+ # 4.step(by: 2, to: 10) {|i| squares.push(i*i) } # => 4
701
+ # squares # => [16, 36, 64, 100]
702
+ # cubes = []
703
+ # 3.step(by: -1.5, to: -3) {|i| cubes.push(i*i*i) } # => 3
704
+ # cubes # => [27.0, 3.375, 0.0, -3.375, -27.0]
705
+ # squares = []
706
+ # 1.2.step(by: 0.2, to: 2.0) {|f| squares.push(f*f) }
707
+ # squares # => [1.44, 1.9599999999999997, 2.5600000000000005, 3.24, 4.0]
708
+ #
709
+ # squares = []
710
+ # Rational(6/5).step(by: 0.2, to: 2.0) {|r| squares.push(r*r) }
711
+ # squares # => [1.0, 1.44, 1.9599999999999997, 2.5600000000000005, 3.24, 4.0]
712
+ #
713
+ # # Only keyword to given.
714
+ # squares = []
715
+ # 4.step(to: 10) {|i| squares.push(i*i) } # => 4
716
+ # squares # => [16, 25, 36, 49, 64, 81, 100]
717
+ # # Only by given.
718
+ #
719
+ # # Only keyword by given
720
+ # squares = []
721
+ # 4.step(by:2) {|i| squares.push(i*i); break if i > 10 }
722
+ # squares # => [16, 36, 64, 100, 144]
723
+ #
724
+ # # No block given.
725
+ # e = 3.step(by: -1.5, to: -3) # => (3.step(by: -1.5, to: -3))
726
+ # e.class # => Enumerator::ArithmeticSequence
727
+ #
728
+ # **Positional Arguments**
729
+ #
730
+ # With optional positional arguments `to` and `by`, their values (or defaults)
731
+ # determine the step and limit:
732
+ #
733
+ # squares = []
734
+ # 4.step(10, 2) {|i| squares.push(i*i) } # => 4
735
+ # squares # => [16, 36, 64, 100]
736
+ # squares = []
737
+ # 4.step(10) {|i| squares.push(i*i) }
738
+ # squares # => [16, 25, 36, 49, 64, 81, 100]
739
+ # squares = []
740
+ # 4.step {|i| squares.push(i*i); break if i > 10 } # => nil
741
+ # squares # => [16, 25, 36, 49, 64, 81, 100, 121]
743
742
  #
744
743
  # **Implementation Notes**
745
744
  #
746
- # If all the arguments are integers, the loop operates using an integer
747
- # counter.
745
+ # If all the arguments are integers, the loop operates using an integer counter.
748
746
  #
749
- # If any of the arguments are floating point numbers, all are converted
750
- # to floats, and the loop is executed
751
- # <i>floor(n + n*Float::EPSILON) + 1</i> times,
752
- # where <i>n = (limit - self)/step</i>.
747
+ # If any of the arguments are floating point numbers, all are converted to
748
+ # floats, and the loop is executed *floor(n + n*Float::EPSILON) + 1* times,
749
+ # where *n = (limit - self)/step*.
753
750
  #
754
751
  def step: (?Numeric limit, ?Numeric step) { (Numeric) -> void } -> self
755
752
  | (?Numeric limit, ?Numeric step) -> Enumerator[Numeric, self]
@@ -779,7 +776,7 @@ class Numeric
779
776
  # Rational(1, 2).to_int # => 0
780
777
  # Rational(2, 1).to_int # => 2
781
778
  # Complex(2, 0).to_int # => 2
782
- # Complex(2, 1) # Raises RangeError (non-zero imaginary part)
779
+ # Complex(2, 1).to_int # Raises RangeError (non-zero imaginary part)
783
780
  #
784
781
  def to_int: () -> Integer
785
782
 
data/core/object.rbs CHANGED
@@ -21,14 +21,12 @@
21
21
  # * Inherits from [class BasicObject](rdoc-ref:BasicObject@What-27s+Here).
22
22
  # * Includes [module Kernel](rdoc-ref:Kernel@What-27s+Here).
23
23
  #
24
- #
25
24
  # Here, class Object provides methods for:
26
25
  #
27
26
  # * [Querying](rdoc-ref:Object@Querying)
28
27
  # * [Instance Variables](rdoc-ref:Object@Instance+Variables)
29
28
  # * [Other](rdoc-ref:Object@Other)
30
29
  #
31
- #
32
30
  # ### Querying
33
31
  #
34
32
  # * #!~: Returns `true` if `self` does not match the given object, otherwise
@@ -70,7 +68,6 @@
70
68
  # argument.
71
69
  # * #send: Calls the given method in `self` with the given argument.
72
70
  #
73
- #
74
71
  # ### Instance Variables
75
72
  #
76
73
  # * #instance_variable_get: Returns the value of the given instance variable
@@ -82,7 +79,6 @@
82
79
  # * #remove_instance_variable: Removes the named instance variable from
83
80
  # `self`.
84
81
  #
85
- #
86
82
  # ### Other
87
83
  #
88
84
  # * #clone: Returns a shallow copy of `self`, including singleton class and
@@ -110,5 +106,5 @@ class Object < BasicObject
110
106
  end
111
107
 
112
108
  # A previous incarnation of `interned` for backward-compatibility (see #1499)
113
- %a{steep:deprecated}
109
+ %a{deprecated: Use `interned` instead}
114
110
  type Object::name = interned
@@ -22,17 +22,16 @@ module ObjectSpace
22
22
  #
23
23
  # val = nil
24
24
  # GC.start
25
- # # There is no more references to `val`, yet the pair isn't
25
+ # # There are no more references to `val`, yet the pair isn't
26
26
  # # garbage-collected.
27
27
  # map["name"] #=> 2023-12-07 00:00:00 +0200
28
28
  #
29
29
  # key = nil
30
30
  # GC.start
31
- # # There is no more references to `key`, key and value are
31
+ # # There are no more references to `key`, key and value are
32
32
  # # garbage-collected.
33
33
  # map["name"] #=> nil
34
34
  #
35
- #
36
35
  # (Note that GC.start is used here only for demonstrational purposes and might
37
36
  # not always lead to demonstrated results.)
38
37
  #
@@ -55,7 +54,7 @@ module ObjectSpace
55
54
  # end
56
55
  #
57
56
  # This will result in `make_value` returning the same object for same set of
58
- # attributes always, but the values that aren't needed anymore woudn't be
57
+ # attributes always, but the values that aren't needed anymore wouldn't be
59
58
  # sitting in the cache forever.
60
59
  #
61
60
  class WeakKeyMap[Key, Value]
@@ -4,9 +4,9 @@
4
4
  # an iterator.
5
5
  #
6
6
  # ObjectSpace also provides support for object finalizers, procs that will be
7
- # called when a specific object is about to be destroyed by garbage collection.
8
- # See the documentation for `ObjectSpace.define_finalizer` for important
9
- # information on how to use this method correctly.
7
+ # called after a specific object was destroyed by garbage collection. See the
8
+ # documentation for `ObjectSpace.define_finalizer` for important information on
9
+ # how to use this method correctly.
10
10
  #
11
11
  # a = "A"
12
12
  # b = "B"
data/core/proc.rbs CHANGED
@@ -56,7 +56,6 @@
56
56
  #
57
57
  # lambda2 = ->(x) { x**2 }
58
58
  #
59
- #
60
59
  # ## Lambda and non-lambda semantics
61
60
  #
62
61
  # Procs are coming in two flavors: lambda and non-lambda (regular procs).
@@ -75,7 +74,6 @@
75
74
  # filled with `nil`, single Array arguments are deconstructed if the proc
76
75
  # has multiple arguments, and there is no error raised on extra arguments.
77
76
  #
78
- #
79
77
  # Examples:
80
78
  #
81
79
  # # +return+ in non-lambda proc, +b+, exits +m2+.
@@ -238,19 +236,86 @@
238
236
  # Since `return` and `break` exits the block itself in lambdas, lambdas cannot
239
237
  # be orphaned.
240
238
  #
241
- # ## Numbered parameters
239
+ # ## Anonymous block parameters
242
240
  #
243
- # Numbered parameters are implicitly defined block parameters intended to
244
- # simplify writing short blocks:
241
+ # To simplify writing short blocks, Ruby provides two different types of
242
+ # anonymous parameters: `it` (single parameter) and numbered ones: `_1`, `_2`
243
+ # and so on.
245
244
  #
246
245
  # # Explicit parameter:
247
246
  # %w[test me please].each { |str| puts str.upcase } # prints TEST, ME, PLEASE
248
247
  # (1..5).map { |i| i**2 } # => [1, 4, 9, 16, 25]
249
248
  #
250
- # # Implicit parameter:
249
+ # # it:
250
+ # %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
251
+ # (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
252
+ #
253
+ # # Numbered parameter:
251
254
  # %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
252
255
  # (1..5).map { _1**2 } # => [1, 4, 9, 16, 25]
253
256
  #
257
+ # ### `it`
258
+ #
259
+ # `it` is a name that is available inside a block when no explicit parameters
260
+ # defined, as shown above.
261
+ #
262
+ # %w[test me please].each { puts it.upcase } # prints TEST, ME, PLEASE
263
+ # (1..5).map { it**2 } # => [1, 4, 9, 16, 25]
264
+ #
265
+ # `it` is a "soft keyword": it is not a reserved name, and can be used as a name
266
+ # for methods and local variables:
267
+ #
268
+ # it = 5 # no warnings
269
+ # def it(&block) # RSpec-like API, no warnings
270
+ # # ...
271
+ # end
272
+ #
273
+ # `it` can be used as a local variable even in blocks that use it as an implicit
274
+ # parameter (though this style is obviously confusing):
275
+ #
276
+ # [1, 2, 3].each {
277
+ # # takes a value of implicit parameter "it" and uses it to
278
+ # # define a local variable with the same name
279
+ # it = it**2
280
+ # p it
281
+ # }
282
+ #
283
+ # In a block with explicit parameters defined `it` usage raises an exception:
284
+ #
285
+ # [1, 2, 3].each { |x| p it }
286
+ # # syntax error found (SyntaxError)
287
+ # # [1, 2, 3].each { |x| p it }
288
+ # # ^~ `it` is not allowed when an ordinary parameter is defined
289
+ #
290
+ # But if a local name (variable or method) is available, it would be used:
291
+ #
292
+ # it = 5
293
+ # [1, 2, 3].each { |x| p it }
294
+ # # Prints 5, 5, 5
295
+ #
296
+ # Blocks using `it` can be nested:
297
+ #
298
+ # %w[test me].each { it.each_char { p it } }
299
+ # # Prints "t", "e", "s", "t", "m", "e"
300
+ #
301
+ # Blocks using `it` are considered to have one parameter:
302
+ #
303
+ # p = proc { it**2 }
304
+ # l = lambda { it**2 }
305
+ # p.parameters # => [[:opt, nil]]
306
+ # p.arity # => 1
307
+ # l.parameters # => [[:req]]
308
+ # l.arity # => 1
309
+ #
310
+ # ### Numbered parameters
311
+ #
312
+ # Numbered parameters are another way to name block parameters implicitly.
313
+ # Unlike `it`, numbered parameters allow to refer to several parameters in one
314
+ # block.
315
+ #
316
+ # %w[test me please].each { puts _1.upcase } # prints TEST, ME, PLEASE
317
+ # {a: 100, b: 200}.map { "#{_1} = #{_2}" } # => "a = 100", "b = 200"
318
+ #
254
319
  # Parameter names from `_1` to `_9` are supported:
255
320
  #
256
321
  # [10, 20, 30].zip([40, 50, 60], [70, 80, 90]).map { _1 + _2 + _3 }
@@ -264,11 +329,16 @@
264
329
  # [10, 20, 30].map { |x| _1**2 }
265
330
  # # SyntaxError (ordinary parameter is defined)
266
331
  #
332
+ # Numbered parameters can't be mixed with `it` either:
333
+ #
334
+ # [10, 20, 30].map { _1 + it }
335
+ # # SyntaxError: `it` is not allowed when a numbered parameter is already used
336
+ #
267
337
  # To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
268
- # so on, causes a warning.
338
+ # so on, causes an error.
269
339
  #
270
- # _1 = 'test'
271
- # # warning: `_1' is reserved as numbered parameter
340
+ # _1 = 'test'
341
+ # # ^~ _1 is reserved for numbered parameters (SyntaxError)
272
342
  #
273
343
  # Using implicit numbered parameters affects block's arity:
274
344
  #
@@ -282,12 +352,10 @@
282
352
  # Blocks with numbered parameters can't be nested:
283
353
  #
284
354
  # %w[test me].each { _1.each_char { p _1 } }
285
- # # SyntaxError (numbered parameter is already used in outer block here)
355
+ # # numbered parameter is already used in outer block (SyntaxError)
286
356
  # # %w[test me].each { _1.each_char { p _1 } }
287
357
  # # ^~
288
358
  #
289
- # Numbered parameters were introduced in Ruby 2.7.
290
- #
291
359
  class Proc
292
360
  interface _Callable
293
361
  def call: (?) -> untyped
@@ -308,8 +376,8 @@ class Proc
308
376
  #
309
377
  def self.new: () { (?) -> untyped } -> instance
310
378
 
311
- def clone: () -> instance
312
- def dup: () -> instance
379
+ def clone: () -> self
380
+ def dup: () -> self
313
381
 
314
382
  # <!-- rdoc-file=proc.c -->
315
383
  # Invokes the block, setting the block's parameters to the values in *params*