rbs 4.0.0.dev.4 → 4.0.0
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/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +18 -11
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +27 -34
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +323 -0
- data/README.md +1 -1
- data/Rakefile +43 -33
- data/Steepfile +1 -0
- data/config.yml +426 -24
- data/core/array.rbs +307 -227
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +179 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +192 -144
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -67
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +576 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +544 -116
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +16 -2
- data/ext/rbs_extension/class_constants.h +8 -0
- data/ext/rbs_extension/extconf.rb +5 -1
- data/ext/rbs_extension/legacy_location.c +33 -56
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +44 -35
- data/include/rbs/ast.h +448 -173
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +6 -6
- data/include/rbs/string.h +0 -2
- data/include/rbs/util/rbs_allocator.h +34 -13
- data/include/rbs/util/rbs_assert.h +12 -1
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs/util/rbs_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -1
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +293 -3
- data/lib/rbs/ast/ruby/comment_block.rb +24 -0
- data/lib/rbs/ast/ruby/declarations.rb +198 -3
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/members.rb +532 -22
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +20 -15
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -106
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
- data/lib/rbs/definition_builder/method_builder.rb +20 -0
- data/lib/rbs/definition_builder.rb +147 -25
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +227 -74
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -18
- data/lib/rbs/inline_parser.rb +342 -6
- data/lib/rbs/location_aux.rb +1 -1
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/parser_aux.rb +20 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +8 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +88 -78
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +4 -3
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/schema/typeParam.json +17 -1
- data/sig/ast/ruby/annotations.rbs +315 -4
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +108 -2
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -1
- data/sig/definition_builder.rbs +2 -0
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -14
- data/sig/inline_parser.rbs +39 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +3 -1
- data/sig/parser.rbs +31 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +410 -153
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +8 -48
- data/src/parser.c +977 -516
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -71
- data/src/util/rbs_assert.c +1 -1
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +10 -14
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +217 -136
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +475 -357
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +22 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/addrinfo.rbs +7 -7
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +6 -6
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +50 -6
data/core/random.rbs
CHANGED
|
@@ -96,6 +96,23 @@ class Random < RBS::Unnamed::Random_Base
|
|
|
96
96
|
| (Float | ::Range[Float] max) -> Float
|
|
97
97
|
| [T < Numeric] (::Range[T]) -> T
|
|
98
98
|
|
|
99
|
+
# <!--
|
|
100
|
+
# rdoc-file=random.c
|
|
101
|
+
# - Random.seed -> integer
|
|
102
|
+
# -->
|
|
103
|
+
# Returns the seed value used to initialize the Ruby system PRNG. This may be
|
|
104
|
+
# used to initialize another generator with the same state at a later time,
|
|
105
|
+
# causing it to produce the same sequence of numbers.
|
|
106
|
+
#
|
|
107
|
+
# Random.seed #=> 1234
|
|
108
|
+
# prng1 = Random.new(Random.seed)
|
|
109
|
+
# prng1.seed #=> 1234
|
|
110
|
+
# prng1.rand(100) #=> 47
|
|
111
|
+
# Random.seed #=> 1234
|
|
112
|
+
# Random.rand(100) #=> 47
|
|
113
|
+
#
|
|
114
|
+
def self.seed: () -> ::Integer
|
|
115
|
+
|
|
99
116
|
# <!--
|
|
100
117
|
# rdoc-file=random.c
|
|
101
118
|
# - srand(number = Random.new_seed) -> old_seed
|
|
@@ -173,9 +190,10 @@ end
|
|
|
173
190
|
# <!-- rdoc-file=lib/random/formatter.rb -->
|
|
174
191
|
# ## Random number formatter.
|
|
175
192
|
#
|
|
176
|
-
# Formats generated random numbers in many manners. When
|
|
177
|
-
# required, several methods are added to
|
|
178
|
-
#
|
|
193
|
+
# Formats generated random numbers in many manners. When
|
|
194
|
+
# <code>'random/formatter'</code> is required, several methods are added to
|
|
195
|
+
# empty core module <code>Random::Formatter</code>, making them available as
|
|
196
|
+
# Random's instance and module methods.
|
|
179
197
|
#
|
|
180
198
|
# Standard library SecureRandom is also extended with the module, and the
|
|
181
199
|
# methods described below are available as a module methods in it.
|
data/core/range.rbs
CHANGED
|
@@ -86,20 +86,21 @@
|
|
|
86
86
|
# end
|
|
87
87
|
# a # => [2, 4, 6, 8, 10]
|
|
88
88
|
#
|
|
89
|
-
# A range can be both beginless and endless.
|
|
89
|
+
# A range can be both beginless and endless. For literal beginless, endless
|
|
90
90
|
# ranges, at least the beginning or end of the range must be given as an
|
|
91
91
|
# explicit nil value. It is recommended to use an explicit nil beginning and
|
|
92
|
-
#
|
|
92
|
+
# end, since that is what Ruby uses for Range#inspect:
|
|
93
93
|
#
|
|
94
|
-
# (nil..) # => (nil..)
|
|
95
|
-
# (..nil) # => (nil..)
|
|
96
|
-
# (nil..nil) # => (nil..)
|
|
94
|
+
# (nil..) # => (nil..nil)
|
|
95
|
+
# (..nil) # => (nil..nil)
|
|
96
|
+
# (nil..nil) # => (nil..nil)
|
|
97
97
|
#
|
|
98
98
|
# ## Ranges and Other Classes
|
|
99
99
|
#
|
|
100
100
|
# An object may be put into a range if its class implements instance method
|
|
101
|
-
#
|
|
102
|
-
# Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol,
|
|
101
|
+
# <code>#<=></code>. Ruby core classes that do so include Array, Complex,
|
|
102
|
+
# File::Stat, Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol,
|
|
103
|
+
# and Time.
|
|
103
104
|
#
|
|
104
105
|
# Example:
|
|
105
106
|
#
|
|
@@ -128,12 +129,13 @@
|
|
|
128
129
|
# ## Ranges and User-Defined Classes
|
|
129
130
|
#
|
|
130
131
|
# A user-defined class that is to be used in a range must implement instance
|
|
131
|
-
# method
|
|
132
|
-
# implement instance method `succ`; see Integer#succ.
|
|
132
|
+
# method <code>#<=></code>; see Integer#<=>. To make iteration available, it
|
|
133
|
+
# must also implement instance method `succ`; see Integer#succ.
|
|
133
134
|
#
|
|
134
|
-
# The class below implements both
|
|
135
|
-
# construct ranges and to iterate over them. Note that the
|
|
136
|
-
# included so the
|
|
135
|
+
# The class below implements both <code>#<=></code> and `succ`, and so can be
|
|
136
|
+
# used both to construct ranges and to iterate over them. Note that the
|
|
137
|
+
# Comparable module is included so the <code>==</code> method is defined in
|
|
138
|
+
# terms of <code>#<=></code>.
|
|
137
139
|
#
|
|
138
140
|
# # Represent a string of 'X' characters.
|
|
139
141
|
# class Xs
|
|
@@ -268,9 +270,9 @@ class Range[out Elem] < Object
|
|
|
268
270
|
# Returns `true` if and only if:
|
|
269
271
|
#
|
|
270
272
|
# * `other` is a range.
|
|
271
|
-
# *
|
|
272
|
-
# *
|
|
273
|
-
# *
|
|
273
|
+
# * <code>other.begin == self.begin</code>.
|
|
274
|
+
# * <code>other.end == self.end</code>.
|
|
275
|
+
# * <code>other.exclude_end? == self.exclude_end?</code>.
|
|
274
276
|
#
|
|
275
277
|
# Otherwise returns `false`.
|
|
276
278
|
#
|
|
@@ -297,8 +299,8 @@ class Range[out Elem] < Object
|
|
|
297
299
|
# rdoc-file=range.c
|
|
298
300
|
# - self === object -> true or false
|
|
299
301
|
# -->
|
|
300
|
-
# Returns `true` if `object` is between
|
|
301
|
-
# otherwise:
|
|
302
|
+
# Returns `true` if `object` is between <code>self.begin</code> and
|
|
303
|
+
# <code>self.end</code>. `false` otherwise:
|
|
302
304
|
#
|
|
303
305
|
# (1..4) === 2 # => true
|
|
304
306
|
# (1..4) === 5 # => false
|
|
@@ -308,7 +310,7 @@ class Range[out Elem] < Object
|
|
|
308
310
|
# ('a'..'d') === 'c' # => true
|
|
309
311
|
# ('a'..'d') === 'e' # => false
|
|
310
312
|
#
|
|
311
|
-
# A case statement uses method
|
|
313
|
+
# A case statement uses method <code>===</code>, and so:
|
|
312
314
|
#
|
|
313
315
|
# case 79
|
|
314
316
|
# when (1..50)
|
|
@@ -351,7 +353,7 @@ class Range[out Elem] < Object
|
|
|
351
353
|
# -->
|
|
352
354
|
# Returns an element from `self` selected by a binary search.
|
|
353
355
|
#
|
|
354
|
-
# See [Binary Searching](rdoc-ref:bsearch.rdoc).
|
|
356
|
+
# See [Binary Searching](rdoc-ref:language/bsearch.rdoc).
|
|
355
357
|
#
|
|
356
358
|
def bsearch: () -> ::Enumerator[Elem, Elem?]
|
|
357
359
|
| () { (Elem) -> (true | false) } -> Elem?
|
|
@@ -364,10 +366,11 @@ class Range[out Elem] < Object
|
|
|
364
366
|
# -->
|
|
365
367
|
# Returns `true` if the given argument is within `self`, `false` otherwise.
|
|
366
368
|
#
|
|
367
|
-
# With non-range argument `object`, evaluates with
|
|
369
|
+
# With non-range argument `object`, evaluates with <code><=</code> and
|
|
370
|
+
# <code><</code>.
|
|
368
371
|
#
|
|
369
|
-
# For range `self` with included end value (
|
|
370
|
-
# thus:
|
|
372
|
+
# For range `self` with included end value (<code>#exclude_end? ==
|
|
373
|
+
# false</code>), evaluates thus:
|
|
371
374
|
#
|
|
372
375
|
# self.begin <= object <= self.end
|
|
373
376
|
#
|
|
@@ -387,8 +390,8 @@ class Range[out Elem] < Object
|
|
|
387
390
|
# r.cover?('e') # => false
|
|
388
391
|
# r.cover?(0) # => false
|
|
389
392
|
#
|
|
390
|
-
# For range `r` with excluded end value (
|
|
391
|
-
# thus:
|
|
393
|
+
# For range `r` with excluded end value (<code>#exclude_end? == true</code>),
|
|
394
|
+
# evaluates thus:
|
|
392
395
|
#
|
|
393
396
|
# r.begin <= object < r.end
|
|
394
397
|
#
|
|
@@ -434,8 +437,8 @@ class Range[out Elem] < Object
|
|
|
434
437
|
# Returns `false` if either:
|
|
435
438
|
#
|
|
436
439
|
# * The begin value of `self` is larger than its end value.
|
|
437
|
-
# * An internal call to
|
|
438
|
-
# comparable.
|
|
440
|
+
# * An internal call to <code>#<=></code> returns `nil`; that is, the operands
|
|
441
|
+
# are not comparable.
|
|
439
442
|
#
|
|
440
443
|
# Beginless ranges cover all values of the same type before the end, excluding
|
|
441
444
|
# the end for exclusive ranges. Beginless ranges cover ranges that end before
|
|
@@ -493,7 +496,7 @@ class Range[out Elem] < Object
|
|
|
493
496
|
# (1..4).each {|element| a.push(element) } # => 1..4
|
|
494
497
|
# a # => [1, 2, 3, 4]
|
|
495
498
|
#
|
|
496
|
-
# Raises an exception unless
|
|
499
|
+
# Raises an exception unless <code>self.first.respond_to?(:succ)</code>.
|
|
497
500
|
#
|
|
498
501
|
# With no block given, returns an enumerator.
|
|
499
502
|
#
|
|
@@ -556,7 +559,7 @@ class Range[out Elem] < Object
|
|
|
556
559
|
# - hash -> integer
|
|
557
560
|
# -->
|
|
558
561
|
# Returns the integer hash value for `self`. Two range objects `r0` and `r1`
|
|
559
|
-
# have the same hash value if and only if
|
|
562
|
+
# have the same hash value if and only if <code>r0.eql?(r1)</code>.
|
|
560
563
|
#
|
|
561
564
|
# Related: Range#eql?, Object#hash.
|
|
562
565
|
#
|
|
@@ -608,8 +611,8 @@ class Range[out Elem] < Object
|
|
|
608
611
|
# rdoc-file=range.c
|
|
609
612
|
# - inspect -> string
|
|
610
613
|
# -->
|
|
611
|
-
# Returns a string representation of `self`, including
|
|
612
|
-
#
|
|
614
|
+
# Returns a string representation of `self`, including
|
|
615
|
+
# <code>begin.inspect</code> and <code>end.inspect</code>:
|
|
613
616
|
#
|
|
614
617
|
# (1..4).inspect # => "1..4"
|
|
615
618
|
# (1...4).inspect # => "1...4"
|
|
@@ -668,8 +671,8 @@ class Range[out Elem] < Object
|
|
|
668
671
|
# - max {|a, b| ... } -> object
|
|
669
672
|
# - max(n) {|a, b| ... } -> array
|
|
670
673
|
# -->
|
|
671
|
-
# Returns the maximum value in `self`, using method
|
|
672
|
-
# comparison.
|
|
674
|
+
# Returns the maximum value in `self`, using method <code>#<=></code> or a given
|
|
675
|
+
# block for comparison.
|
|
673
676
|
#
|
|
674
677
|
# With no argument and no block given, returns the maximum-valued element of
|
|
675
678
|
# `self`.
|
|
@@ -736,15 +739,12 @@ class Range[out Elem] < Object
|
|
|
736
739
|
#
|
|
737
740
|
# Raises an exception if either:
|
|
738
741
|
#
|
|
739
|
-
# * `self` is a endless range:
|
|
742
|
+
# * `self` is a endless range: <code>(1..)</code>.
|
|
740
743
|
# * A block is given and `self` is a beginless range.
|
|
741
744
|
#
|
|
742
745
|
# Related: Range#min, Range#minmax.
|
|
743
746
|
#
|
|
744
|
-
def max:
|
|
745
|
-
| () { (Elem a, Elem b) -> Integer } -> Elem
|
|
746
|
-
| (Integer n) -> ::Array[Elem]
|
|
747
|
-
| (Integer n) { (Elem a, Elem b) -> Integer } -> ::Array[Elem]
|
|
747
|
+
def max: ...
|
|
748
748
|
|
|
749
749
|
# <!--
|
|
750
750
|
# rdoc-file=range.c
|
|
@@ -753,8 +753,8 @@ class Range[out Elem] < Object
|
|
|
753
753
|
# - min {|a, b| ... } -> object
|
|
754
754
|
# - min(n) {|a, b| ... } -> array
|
|
755
755
|
# -->
|
|
756
|
-
# Returns the minimum value in `self`, using method
|
|
757
|
-
# comparison.
|
|
756
|
+
# Returns the minimum value in `self`, using method <code>#<=></code> or a given
|
|
757
|
+
# block for comparison.
|
|
758
758
|
#
|
|
759
759
|
# With no argument and no block given, returns the minimum-valued element of
|
|
760
760
|
# `self`.
|
|
@@ -821,15 +821,58 @@ class Range[out Elem] < Object
|
|
|
821
821
|
#
|
|
822
822
|
# Raises an exception if either:
|
|
823
823
|
#
|
|
824
|
-
# * `self` is a beginless range:
|
|
824
|
+
# * `self` is a beginless range: <code>(..4)</code>.
|
|
825
825
|
# * A block is given and `self` is an endless range.
|
|
826
826
|
#
|
|
827
827
|
# Related: Range#max, Range#minmax.
|
|
828
828
|
#
|
|
829
|
-
def min:
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
829
|
+
def min: ...
|
|
830
|
+
|
|
831
|
+
# <!--
|
|
832
|
+
# rdoc-file=range.c
|
|
833
|
+
# - minmax -> [object, object]
|
|
834
|
+
# - minmax {|a, b| ... } -> [object, object]
|
|
835
|
+
# -->
|
|
836
|
+
# Returns a 2-element array containing the minimum and maximum value in `self`,
|
|
837
|
+
# either according to comparison method <code>#<=></code> or a given block.
|
|
838
|
+
#
|
|
839
|
+
# With no block given, returns the minimum and maximum values, using
|
|
840
|
+
# <code>#<=></code> for comparison:
|
|
841
|
+
#
|
|
842
|
+
# (1..4).minmax # => [1, 4]
|
|
843
|
+
# (1...4).minmax # => [1, 3]
|
|
844
|
+
# ('a'..'d').minmax # => ["a", "d"]
|
|
845
|
+
# (-4..-1).minmax # => [-4, -1]
|
|
846
|
+
#
|
|
847
|
+
# With a block given, the block must return an integer:
|
|
848
|
+
#
|
|
849
|
+
# * Negative if `a` is smaller than `b`.
|
|
850
|
+
# * Zero if `a` and `b` are equal.
|
|
851
|
+
# * Positive if `a` is larger than `b`.
|
|
852
|
+
#
|
|
853
|
+
# The block is called <code>self.size</code> times to compare elements; returns
|
|
854
|
+
# a 2-element Array containing the minimum and maximum values from `self`, per
|
|
855
|
+
# the block:
|
|
856
|
+
#
|
|
857
|
+
# (1..4).minmax {|a, b| -(a <=> b) } # => [4, 1]
|
|
858
|
+
#
|
|
859
|
+
# Returns <code>[nil, nil]</code> if:
|
|
860
|
+
#
|
|
861
|
+
# * The begin value of the range is larger than the end value:
|
|
862
|
+
#
|
|
863
|
+
# (4..1).minmax # => [nil, nil]
|
|
864
|
+
# (4..1).minmax {|a, b| -(a <=> b) } # => [nil, nil]
|
|
865
|
+
#
|
|
866
|
+
# * The begin value of an exclusive range is equal to the end value:
|
|
867
|
+
#
|
|
868
|
+
# (1...1).minmax # => [nil, nil]
|
|
869
|
+
# (1...1).minmax {|a, b| -(a <=> b) } # => [nil, nil]
|
|
870
|
+
#
|
|
871
|
+
# Raises an exception if `self` is a beginless or an endless range.
|
|
872
|
+
#
|
|
873
|
+
# Related: Range#min, Range#max.
|
|
874
|
+
#
|
|
875
|
+
def minmax: ...
|
|
833
876
|
|
|
834
877
|
# <!--
|
|
835
878
|
# rdoc-file=range.c
|
|
@@ -845,8 +888,8 @@ class Range[out Elem] < Object
|
|
|
845
888
|
#
|
|
846
889
|
# (1..3).overlap?(1) # TypeError
|
|
847
890
|
#
|
|
848
|
-
# Returns `false` if an internal call to
|
|
849
|
-
# operands are not comparable.
|
|
891
|
+
# Returns `false` if an internal call to <code>#<=></code> returns `nil`; that
|
|
892
|
+
# is, the operands are not comparable.
|
|
850
893
|
#
|
|
851
894
|
# (1..3).overlap?('a'..'d') # => false
|
|
852
895
|
#
|
|
@@ -890,7 +933,8 @@ class Range[out Elem] < Object
|
|
|
890
933
|
# (...[]).overlap?(...[]) # => true
|
|
891
934
|
#
|
|
892
935
|
# Even if those ranges are effectively empty (no number can be smaller than
|
|
893
|
-
#
|
|
936
|
+
# <code>-Float::INFINITY</code>), they are still considered overlapping with
|
|
937
|
+
# themselves.
|
|
894
938
|
#
|
|
895
939
|
# Related: Range#cover?.
|
|
896
940
|
#
|
|
@@ -936,8 +980,43 @@ class Range[out Elem] < Object
|
|
|
936
980
|
#
|
|
937
981
|
# Related: Range#count.
|
|
938
982
|
#
|
|
939
|
-
def size: () -> Integer
|
|
940
|
-
|
|
983
|
+
def size: () -> (Integer | Float | nil)
|
|
984
|
+
|
|
985
|
+
# <!--
|
|
986
|
+
# rdoc-file=range.c
|
|
987
|
+
# - count -> integer
|
|
988
|
+
# - count(object) -> integer
|
|
989
|
+
# - count {|element| ... } -> integer
|
|
990
|
+
# -->
|
|
991
|
+
# Returns the count of elements, based on an argument or block criterion, if
|
|
992
|
+
# given.
|
|
993
|
+
#
|
|
994
|
+
# With no argument and no block given, returns the number of elements:
|
|
995
|
+
#
|
|
996
|
+
# (1..4).count # => 4
|
|
997
|
+
# (1...4).count # => 3
|
|
998
|
+
# ('a'..'d').count # => 4
|
|
999
|
+
# ('a'...'d').count # => 3
|
|
1000
|
+
# (1..).count # => Infinity
|
|
1001
|
+
# (..4).count # => Infinity
|
|
1002
|
+
#
|
|
1003
|
+
# With argument `object`, returns the number of `object` found in `self`, which
|
|
1004
|
+
# will usually be zero or one:
|
|
1005
|
+
#
|
|
1006
|
+
# (1..4).count(2) # => 1
|
|
1007
|
+
# (1..4).count(5) # => 0
|
|
1008
|
+
# (1..4).count('a') # => 0
|
|
1009
|
+
#
|
|
1010
|
+
# With a block given, calls the block with each element; returns the number of
|
|
1011
|
+
# elements for which the block returns a truthy value:
|
|
1012
|
+
#
|
|
1013
|
+
# (1..4).count {|element| element < 3 } # => 2
|
|
1014
|
+
#
|
|
1015
|
+
# Related: Range#size.
|
|
1016
|
+
#
|
|
1017
|
+
def count: () -> (Integer | Float)
|
|
1018
|
+
| (untyped) -> Integer
|
|
1019
|
+
| () { (Elem) -> boolish } -> Integer
|
|
941
1020
|
|
|
942
1021
|
# <!--
|
|
943
1022
|
# rdoc-file=range.c
|
|
@@ -945,7 +1024,7 @@ class Range[out Elem] < Object
|
|
|
945
1024
|
# - step(s = 1) -> enumerator/arithmetic_sequence
|
|
946
1025
|
# -->
|
|
947
1026
|
# Iterates over the elements of range in steps of `s`. The iteration is
|
|
948
|
-
# performed by
|
|
1027
|
+
# performed by <code>+</code> operator:
|
|
949
1028
|
#
|
|
950
1029
|
# (0..6).step(2) { puts _1 } #=> 1..5
|
|
951
1030
|
# # Prints: 0, 2, 4, 6
|
|
@@ -960,8 +1039,8 @@ class Range[out Elem] < Object
|
|
|
960
1039
|
# # 2022-02-28 00:00:00 UTC
|
|
961
1040
|
# # 2022-03-01 00:00:00 UTC
|
|
962
1041
|
#
|
|
963
|
-
# If
|
|
964
|
-
# `begin` is higher than the `end`:
|
|
1042
|
+
# If <code> + step</code> decreases the value, iteration is still performed when
|
|
1043
|
+
# step `begin` is higher than the `end`:
|
|
965
1044
|
#
|
|
966
1045
|
# (0..6).step(-2) { puts _1 }
|
|
967
1046
|
# # Prints nothing
|
|
@@ -1026,8 +1105,8 @@ class Range[out Elem] < Object
|
|
|
1026
1105
|
# rdoc-file=range.c
|
|
1027
1106
|
# - to_s -> string
|
|
1028
1107
|
# -->
|
|
1029
|
-
# Returns a string representation of `self`, including
|
|
1030
|
-
#
|
|
1108
|
+
# Returns a string representation of `self`, including <code>begin.to_s</code>
|
|
1109
|
+
# and <code>end.to_s</code>:
|
|
1031
1110
|
#
|
|
1032
1111
|
# (1..4).to_s # => "1..4"
|
|
1033
1112
|
# (1...4).to_s # => "1...4"
|
|
@@ -1050,9 +1129,9 @@ class Range[out Elem] < Object
|
|
|
1050
1129
|
# Returns `true` if and only if:
|
|
1051
1130
|
#
|
|
1052
1131
|
# * `other` is a range.
|
|
1053
|
-
# *
|
|
1054
|
-
# *
|
|
1055
|
-
# *
|
|
1132
|
+
# * <code>other.begin.eql?(self.begin)</code>.
|
|
1133
|
+
# * <code>other.end.eql?(self.end)</code>.
|
|
1134
|
+
# * <code>other.exclude_end? == self.exclude_end?</code>.
|
|
1056
1135
|
#
|
|
1057
1136
|
# Otherwise returns `false`.
|
|
1058
1137
|
#
|
|
@@ -1104,4 +1183,27 @@ class Range[out Elem] < Object
|
|
|
1104
1183
|
# Related: Range#cover?.
|
|
1105
1184
|
#
|
|
1106
1185
|
def member?: (untyped obj) -> bool
|
|
1186
|
+
|
|
1187
|
+
# <!--
|
|
1188
|
+
# rdoc-file=range.c
|
|
1189
|
+
# - to_a -> array
|
|
1190
|
+
# -->
|
|
1191
|
+
# Returns an array containing the elements in `self`, if a finite collection;
|
|
1192
|
+
# raises an exception otherwise.
|
|
1193
|
+
#
|
|
1194
|
+
# (1..4).to_a # => [1, 2, 3, 4]
|
|
1195
|
+
# (1...4).to_a # => [1, 2, 3]
|
|
1196
|
+
# ('a'..'d').to_a # => ["a", "b", "c", "d"]
|
|
1197
|
+
#
|
|
1198
|
+
def to_a: ...
|
|
1199
|
+
|
|
1200
|
+
# <!-- rdoc-file=range.c -->
|
|
1201
|
+
# Returns an array containing the elements in `self`, if a finite collection;
|
|
1202
|
+
# raises an exception otherwise.
|
|
1203
|
+
#
|
|
1204
|
+
# (1..4).to_a # => [1, 2, 3, 4]
|
|
1205
|
+
# (1...4).to_a # => [1, 2, 3]
|
|
1206
|
+
# ('a'..'d').to_a # => ["a", "b", "c", "d"]
|
|
1207
|
+
#
|
|
1208
|
+
alias entries to_a
|
|
1107
1209
|
end
|