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.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +34 -10
- data/.github/workflows/windows.yml +20 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +26 -1
- data/CHANGELOG.md +241 -0
- data/Rakefile +54 -4
- data/config.yml +317 -0
- data/core/array.rbs +1756 -1591
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +166 -94
- data/core/data.rbs +2 -2
- data/core/dir.rbs +2 -18
- data/core/encoding.rbs +12 -32
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +14 -4
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +6 -2
- data/core/exception.rbs +342 -167
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +26 -75
- data/core/float.rbs +125 -72
- data/core/gc.rbs +158 -42
- data/core/hash.rbs +122 -143
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +108 -151
- data/core/kernel.rbs +341 -209
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/method.rbs +2 -2
- data/core/module.rbs +32 -27
- data/core/nil_class.rbs +2 -2
- data/core/numeric.rbs +101 -104
- data/core/object.rbs +1 -5
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +82 -14
- data/core/process.rbs +110 -58
- data/core/ractor.rbs +57 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +237 -36
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +10 -56
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +3 -6
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +3 -6
- data/core/rubygems/version.rbs +8 -8
- data/core/set.rbs +4 -16
- data/core/string.rbs +271 -264
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +131 -50
- data/core/trace_point.rbs +124 -113
- data/core/true_class.rbs +0 -1
- data/core/unbound_method.rbs +1 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +17 -10
- data/ext/rbs_extension/extconf.rb +11 -0
- data/ext/rbs_extension/location.c +61 -29
- data/ext/rbs_extension/location.h +4 -3
- data/ext/rbs_extension/main.c +23 -1
- data/ext/rbs_extension/parser.c +506 -517
- data/ext/rbs_extension/parserstate.c +109 -30
- data/ext/rbs_extension/parserstate.h +6 -4
- data/ext/rbs_extension/rbs_extension.h +1 -10
- data/{ext/rbs_extension → include/rbs}/constants.h +21 -19
- data/include/rbs/ruby_objs.h +72 -0
- data/include/rbs/util/rbs_constant_pool.h +219 -0
- data/include/rbs.h +7 -0
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/ast/declarations.rb +9 -4
- data/lib/rbs/ast/directives.rb +10 -0
- data/lib/rbs/ast/members.rb +2 -0
- data/lib/rbs/ast/type_param.rb +2 -12
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +2 -1
- data/lib/rbs/cli.rb +16 -16
- data/lib/rbs/collection/config/lockfile_generator.rb +58 -8
- data/lib/rbs/collection/config.rb +5 -3
- data/lib/rbs/collection/sources/rubygems.rb +1 -1
- data/lib/rbs/collection.rb +1 -0
- data/lib/rbs/definition.rb +51 -34
- data/lib/rbs/definition_builder/ancestor_builder.rb +5 -3
- data/lib/rbs/definition_builder.rb +83 -24
- data/lib/rbs/environment.rb +33 -18
- data/lib/rbs/environment_loader.rb +6 -1
- data/lib/rbs/errors.rb +24 -0
- data/lib/rbs/locator.rb +2 -0
- data/lib/rbs/method_type.rb +2 -0
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +40 -3
- data/lib/rbs/prototype/rb.rb +20 -12
- data/lib/rbs/prototype/rbi.rb +11 -6
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +7 -5
- data/lib/rbs/subtractor.rb +3 -3
- data/lib/rbs/test/hook.rb +47 -42
- data/lib/rbs/test/type_check.rb +7 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/types.rb +63 -14
- data/lib/rbs/unit_test/spy.rb +4 -2
- data/lib/rbs/unit_test/type_assertions.rb +19 -13
- data/lib/rbs/unit_test/with_aliases.rb +3 -1
- data/lib/rbs/validator.rb +7 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/writer.rb +10 -5
- data/lib/rbs.rb +1 -0
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +6 -2
- data/sig/ancestor_graph.rbs +5 -5
- data/sig/annotate/rdoc_source.rbs +2 -0
- data/sig/cli.rbs +2 -0
- data/sig/collection/config/lockfile_generator.rbs +9 -1
- data/sig/declarations.rbs +10 -3
- data/sig/definition.rbs +80 -12
- data/sig/definition_builder.rbs +18 -4
- data/sig/directives.rbs +17 -1
- data/sig/environment.rbs +3 -1
- data/sig/errors.rbs +19 -0
- data/sig/namespace.rbs +2 -3
- data/sig/parser.rbs +5 -1
- data/sig/prototype/rb.rbs +1 -1
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/subtractor.rbs +1 -1
- data/sig/test/type_check.rbs +2 -2
- data/sig/type_alias_dependency.rbs +2 -2
- data/sig/type_alias_regularity.rbs +6 -6
- data/sig/type_param.rbs +4 -4
- data/sig/typename.rbs +8 -5
- data/sig/types.rbs +1 -1
- data/sig/unit_test/spy.rbs +2 -0
- data/sig/unit_test/type_assertions.rbs +2 -0
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +6 -2
- data/sig/vendorer.rbs +1 -1
- data/sig/writer.rbs +1 -1
- data/{ext/rbs_extension → src}/constants.c +35 -36
- data/src/ruby_objs.c +799 -0
- data/src/util/rbs_constant_pool.c +342 -0
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +60 -3
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/csv/0/manifest.yaml +1 -0
- data/stdlib/date/0/date.rbs +27 -42
- data/stdlib/did_you_mean/0/did_you_mean.rbs +1 -6
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +16 -4
- data/stdlib/json/0/json.rbs +107 -120
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/minitest/0/kernel.rbs +2 -2
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
- data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
- data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
- data/stdlib/minitest/0/minitest/compress.rbs +13 -0
- data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
- data/stdlib/minitest/0/minitest/mock.rbs +9 -5
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
- data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
- data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
- data/stdlib/minitest/0/minitest/spec.rbs +1 -1
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +1 -1
- data/stdlib/minitest/0/minitest/test.rbs +7 -14
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
- data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
- data/stdlib/minitest/0/minitest/unit.rbs +1 -2
- data/stdlib/minitest/0/minitest.rbs +41 -892
- data/stdlib/monitor/0/monitor.rbs +13 -4
- data/stdlib/net-http/0/net-http.rbs +42 -109
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/manifest.yaml +1 -0
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/manifest.yaml +1 -0
- data/stdlib/openssl/0/openssl.rbs +235 -143
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/core_ext.rbs +12 -0
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +13 -8
- data/stdlib/resolv/0/resolv.rbs +21 -12
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +7 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +1 -2
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +32 -27
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +36 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/socket/0/unix_socket.rbs +4 -2
- data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +1 -1
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +28 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +17 -13
- data/ext/rbs_extension/ruby_objs.c +0 -602
- data/ext/rbs_extension/ruby_objs.h +0 -51
- 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.
|
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(
|
264
|
+
# - ceil(ndigits = 0) -> float or integer
|
271
265
|
# -->
|
272
|
-
# Returns the smallest
|
273
|
-
#
|
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
|
-
#
|
276
|
-
#
|
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
|
397
|
-
# while
|
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(
|
419
|
+
# - floor(ndigits = 0) -> float or integer
|
424
420
|
# -->
|
425
|
-
# Returns the largest
|
426
|
-
#
|
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
|
-
#
|
429
|
-
#
|
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
|
536
|
-
#
|
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
|
-
#
|
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
|
-
#
|
541
|
-
#
|
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
|
-
#
|
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
|
-
#
|
674
|
-
#
|
675
|
-
#
|
676
|
-
#
|
677
|
-
#
|
678
|
-
#
|
679
|
-
#
|
680
|
-
#
|
681
|
-
#
|
682
|
-
#
|
683
|
-
#
|
684
|
-
#
|
685
|
-
#
|
686
|
-
#
|
687
|
-
#
|
688
|
-
#
|
689
|
-
#
|
690
|
-
#
|
691
|
-
#
|
692
|
-
#
|
693
|
-
#
|
694
|
-
#
|
695
|
-
#
|
696
|
-
#
|
697
|
-
#
|
698
|
-
#
|
699
|
-
#
|
700
|
-
#
|
701
|
-
#
|
702
|
-
#
|
703
|
-
#
|
704
|
-
#
|
705
|
-
#
|
706
|
-
#
|
707
|
-
#
|
708
|
-
#
|
709
|
-
#
|
710
|
-
#
|
711
|
-
#
|
712
|
-
#
|
713
|
-
#
|
714
|
-
#
|
715
|
-
#
|
716
|
-
#
|
717
|
-
#
|
718
|
-
#
|
719
|
-
#
|
720
|
-
#
|
721
|
-
#
|
722
|
-
#
|
723
|
-
#
|
724
|
-
#
|
725
|
-
#
|
726
|
-
#
|
727
|
-
#
|
728
|
-
#
|
729
|
-
#
|
730
|
-
#
|
731
|
-
#
|
732
|
-
#
|
733
|
-
#
|
734
|
-
#
|
735
|
-
#
|
736
|
-
#
|
737
|
-
#
|
738
|
-
#
|
739
|
-
#
|
740
|
-
#
|
741
|
-
#
|
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
|
-
#
|
747
|
-
# counter.
|
745
|
+
# If all the arguments are integers, the loop operates using an integer counter.
|
748
746
|
#
|
749
|
-
#
|
750
|
-
#
|
751
|
-
#
|
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)
|
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{
|
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
|
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
|
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
|
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]
|
data/core/object_space.rbs
CHANGED
@@ -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
|
8
|
-
#
|
9
|
-
#
|
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
|
-
# ##
|
239
|
+
# ## Anonymous block parameters
|
242
240
|
#
|
243
|
-
#
|
244
|
-
#
|
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
|
-
# #
|
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
|
338
|
+
# so on, causes an error.
|
269
339
|
#
|
270
|
-
#
|
271
|
-
# #
|
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
|
-
# #
|
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: () ->
|
312
|
-
def dup: () ->
|
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*
|