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/range.rbs
CHANGED
@@ -13,15 +13,13 @@
|
|
13
13
|
# (1...4).to_a # => [1, 2, 3]
|
14
14
|
# ('a'...'d').to_a # => ["a", "b", "c"]
|
15
15
|
#
|
16
|
+
# * Method Range.new:
|
16
17
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# Range.new(1, 4).to_a # => [1, 2, 3,
|
21
|
-
#
|
22
|
-
# # Ranges that use third argument +exclude_end+ to exclude the given end value.
|
23
|
-
# Range.new(1, 4, true).to_a # => [1, 2, 3]
|
24
|
-
# Range.new('a', 'd', true).to_a # => ["a", "b", "c"]
|
18
|
+
# # Ranges that by default include the given end value. Range.new(1, 4).to_a
|
19
|
+
# # => [1, 2, 3, 4] Range.new('a', 'd').to_a # => ["a", "b", "c", "d"] #
|
20
|
+
# Ranges that use third argument `exclude_end` to exclude the given end
|
21
|
+
# value. Range.new(1, 4, true).to_a # => [1, 2, 3] Range.new('a', 'd',
|
22
|
+
# true).to_a # => ["a", "b", "c"]
|
25
23
|
#
|
26
24
|
# ## Beginless Ranges
|
27
25
|
#
|
@@ -42,8 +40,12 @@
|
|
42
40
|
# A beginless range may be used to slice an array:
|
43
41
|
#
|
44
42
|
# a = [1, 2, 3, 4]
|
45
|
-
#
|
46
|
-
#
|
43
|
+
# # Include the third array element in the slice
|
44
|
+
# r = (..2) # => nil..2
|
45
|
+
# a[r] # => [1, 2, 3]
|
46
|
+
# # Exclude the third array element from the slice
|
47
|
+
# r = (...2) # => nil...2
|
48
|
+
# a[r] # => [1, 2]
|
47
49
|
#
|
48
50
|
# Method `each` for a beginless range raises an exception.
|
49
51
|
#
|
@@ -96,8 +98,8 @@
|
|
96
98
|
# ## Ranges and Other Classes
|
97
99
|
#
|
98
100
|
# An object may be put into a range if its class implements instance method
|
99
|
-
#
|
100
|
-
# Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time.
|
101
|
+
# `#<=>`. Ruby core classes that do so include Array, Complex, File::Stat,
|
102
|
+
# Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time.
|
101
103
|
#
|
102
104
|
# Example:
|
103
105
|
#
|
@@ -117,7 +119,6 @@
|
|
117
119
|
# * Included from module Enumerable: #each_entry, #each_with_index,
|
118
120
|
# #each_with_object, #each_slice, #each_cons, and #reverse_each.
|
119
121
|
#
|
120
|
-
#
|
121
122
|
# Example:
|
122
123
|
#
|
123
124
|
# a = []
|
@@ -127,12 +128,12 @@
|
|
127
128
|
# ## Ranges and User-Defined Classes
|
128
129
|
#
|
129
130
|
# A user-defined class that is to be used in a range must implement instance
|
130
|
-
#
|
131
|
-
# instance method `succ`; see Integer#succ.
|
131
|
+
# method `#<=>`; see Integer#<=>. To make iteration available, it must also
|
132
|
+
# implement instance method `succ`; see Integer#succ.
|
132
133
|
#
|
133
|
-
# The class below implements both
|
134
|
+
# The class below implements both `#<=>` and `succ`, and so can be used both to
|
134
135
|
# construct ranges and to iterate over them. Note that the Comparable module is
|
135
|
-
# included so the `==` method is defined in terms of
|
136
|
+
# included so the `==` method is defined in terms of `#<=>`.
|
136
137
|
#
|
137
138
|
# # Represent a string of 'X' characters.
|
138
139
|
# class Xs
|
@@ -168,7 +169,6 @@
|
|
168
169
|
# * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
|
169
170
|
# provides dozens of additional methods.
|
170
171
|
#
|
171
|
-
#
|
172
172
|
# Here, class Range provides methods that are useful for:
|
173
173
|
#
|
174
174
|
# * [Creating a Range](rdoc-ref:Range@Methods+for+Creating+a+Range)
|
@@ -179,12 +179,10 @@
|
|
179
179
|
# * [Methods for Working with
|
180
180
|
# JSON](rdoc-ref:Range@Methods+for+Working+with+JSON)
|
181
181
|
#
|
182
|
-
#
|
183
182
|
# ### Methods for Creating a Range
|
184
183
|
#
|
185
184
|
# * ::new: Returns a new range.
|
186
185
|
#
|
187
|
-
#
|
188
186
|
# ### Methods for Querying
|
189
187
|
#
|
190
188
|
# * #begin: Returns the begin value given for `self`.
|
@@ -200,7 +198,6 @@
|
|
200
198
|
# * #minmax: Returns the minimum and maximum values in `self`.
|
201
199
|
# * #size: Returns the count of elements in `self`.
|
202
200
|
#
|
203
|
-
#
|
204
201
|
# ### Methods for Comparing
|
205
202
|
#
|
206
203
|
# * #==: Returns whether a given object is equal to `self` (uses #==).
|
@@ -211,7 +208,6 @@
|
|
211
208
|
# * #include? (aliased as #member?): Returns whether a given object is an
|
212
209
|
# element of `self`.
|
213
210
|
#
|
214
|
-
#
|
215
211
|
# ### Methods for Iterating
|
216
212
|
#
|
217
213
|
# * #%: Requires argument `n`; calls the block with each `n`-th element of
|
@@ -220,14 +216,12 @@
|
|
220
216
|
# * #step: Takes optional argument `n` (defaults to 1); calls the block with
|
221
217
|
# each `n`-th element of `self`.
|
222
218
|
#
|
223
|
-
#
|
224
219
|
# ### Methods for Converting
|
225
220
|
#
|
226
221
|
# * #inspect: Returns a string representation of `self` (uses #inspect).
|
227
222
|
# * #to_a (aliased as #entries): Returns elements of `self` in an array.
|
228
223
|
# * #to_s: Returns a string representation of `self` (uses #to_s).
|
229
224
|
#
|
230
|
-
#
|
231
225
|
# ### Methods for Working with JSON
|
232
226
|
#
|
233
227
|
# * ::json_create: Returns a new Range object constructed from the given
|
@@ -235,7 +229,6 @@
|
|
235
229
|
# * #as_json: Returns a 2-element hash representing `self`.
|
236
230
|
# * #to_json: Returns a JSON string representing `self`.
|
237
231
|
#
|
238
|
-
#
|
239
232
|
# To make these methods available:
|
240
233
|
#
|
241
234
|
# require 'json/add/range'
|
@@ -246,29 +239,24 @@ class Range[out Elem] < Object
|
|
246
239
|
# <!--
|
247
240
|
# rdoc-file=range.c
|
248
241
|
# - %(n) {|element| ... } -> self
|
249
|
-
# - %(n) -> enumerator
|
242
|
+
# - %(n) -> enumerator or arithmetic_sequence
|
250
243
|
# -->
|
251
|
-
#
|
244
|
+
# Same as #step (but doesn't provide default value for `n`). The method is
|
245
|
+
# convenient for experssive producing of Enumerator::ArithmeticSequence.
|
252
246
|
#
|
253
|
-
#
|
254
|
-
# returns `self`:
|
247
|
+
# array = [0, 1, 2, 3, 4, 5, 6]
|
255
248
|
#
|
256
|
-
#
|
257
|
-
#
|
258
|
-
#
|
259
|
-
#
|
260
|
-
# (
|
261
|
-
# a # => ["a", "c", "e"]
|
262
|
-
#
|
263
|
-
# With no block given, returns an enumerator, which will be of class
|
264
|
-
# Enumerator::ArithmeticSequence if `self` is numeric; otherwise of class
|
265
|
-
# Enumerator:
|
249
|
+
# # slice each second element:
|
250
|
+
# seq = (0..) % 2 #=> ((0..).%(2))
|
251
|
+
# array[seq] #=> [0, 2, 4, 6]
|
252
|
+
# # or just
|
253
|
+
# array[(0..) % 2] #=> [0, 2, 4, 6]
|
266
254
|
#
|
267
|
-
#
|
268
|
-
#
|
269
|
-
# ('a'..'e') % 2 # => #<Enumerator: ...>
|
255
|
+
# Note that due to operator precedence in Ruby, parentheses are mandatory around
|
256
|
+
# range in this case:
|
270
257
|
#
|
271
|
-
#
|
258
|
+
# (0..7) % 2 #=> ((0..7).%(2)) -- as expected
|
259
|
+
# 0..7 % 2 #=> 0..1 -- parsed as 0..(7 % 2)
|
272
260
|
#
|
273
261
|
def %: (Numeric | int n) -> Enumerator[Elem, self]
|
274
262
|
| (Numeric | int n) { (Elem element) -> void } -> self
|
@@ -284,7 +272,6 @@ class Range[out Elem] < Object
|
|
284
272
|
# * `other.end == self.end`.
|
285
273
|
# * `other.exclude_end? == self.exclude_end?`.
|
286
274
|
#
|
287
|
-
#
|
288
275
|
# Otherwise returns `false`.
|
289
276
|
#
|
290
277
|
# r = (1..5)
|
@@ -447,10 +434,9 @@ class Range[out Elem] < Object
|
|
447
434
|
# Returns `false` if either:
|
448
435
|
#
|
449
436
|
# * The begin value of `self` is larger than its end value.
|
450
|
-
# * An internal call to
|
437
|
+
# * An internal call to `#<=>` returns `nil`; that is, the operands are not
|
451
438
|
# comparable.
|
452
439
|
#
|
453
|
-
#
|
454
440
|
# Beginless ranges cover all values of the same type before the end, excluding
|
455
441
|
# the end for exclusive ranges. Beginless ranges cover ranges that end before
|
456
442
|
# the end of the beginless range, or at the end of the beginless range for
|
@@ -682,7 +668,7 @@ class Range[out Elem] < Object
|
|
682
668
|
# - max {|a, b| ... } -> object
|
683
669
|
# - max(n) {|a, b| ... } -> array
|
684
670
|
# -->
|
685
|
-
# Returns the maximum value in `self`, using method
|
671
|
+
# Returns the maximum value in `self`, using method `#<=>` or a given block for
|
686
672
|
# comparison.
|
687
673
|
#
|
688
674
|
# With no argument and no block given, returns the maximum-valued element of
|
@@ -706,7 +692,6 @@ class Range[out Elem] < Object
|
|
706
692
|
# * Then, sequentially, with the so-far maximum value and the next element of
|
707
693
|
# `self`.
|
708
694
|
#
|
709
|
-
#
|
710
695
|
# To illustrate:
|
711
696
|
#
|
712
697
|
# (1..4).max {|a, b| p [a, b]; a <=> b } # => 4
|
@@ -749,13 +734,11 @@ class Range[out Elem] < Object
|
|
749
734
|
# (1...1).max {|a, b| -(a <=> b) } # => nil
|
750
735
|
# (1...1).max(2) {|a, b| -(a <=> b) } # => []
|
751
736
|
#
|
752
|
-
#
|
753
737
|
# Raises an exception if either:
|
754
738
|
#
|
755
739
|
# * `self` is a endless range: `(1..)`.
|
756
740
|
# * A block is given and `self` is a beginless range.
|
757
741
|
#
|
758
|
-
#
|
759
742
|
# Related: Range#min, Range#minmax.
|
760
743
|
#
|
761
744
|
def max: () -> Elem
|
@@ -770,7 +753,7 @@ class Range[out Elem] < Object
|
|
770
753
|
# - min {|a, b| ... } -> object
|
771
754
|
# - min(n) {|a, b| ... } -> array
|
772
755
|
# -->
|
773
|
-
# Returns the minimum value in `self`, using method
|
756
|
+
# Returns the minimum value in `self`, using method `#<=>` or a given block for
|
774
757
|
# comparison.
|
775
758
|
#
|
776
759
|
# With no argument and no block given, returns the minimum-valued element of
|
@@ -794,7 +777,6 @@ class Range[out Elem] < Object
|
|
794
777
|
# * Then, sequentially, with the so-far minimum value and the next element of
|
795
778
|
# `self`.
|
796
779
|
#
|
797
|
-
#
|
798
780
|
# To illustrate:
|
799
781
|
#
|
800
782
|
# (1..4).min {|a, b| p [a, b]; a <=> b } # => 1
|
@@ -837,13 +819,11 @@ class Range[out Elem] < Object
|
|
837
819
|
# (1...1).min {|a, b| -(a <=> b) } # => nil
|
838
820
|
# (1...1).min(2) {|a, b| -(a <=> b) } # => []
|
839
821
|
#
|
840
|
-
#
|
841
822
|
# Raises an exception if either:
|
842
823
|
#
|
843
824
|
# * `self` is a beginless range: `(..4)`.
|
844
825
|
# * A block is given and `self` is an endless range.
|
845
826
|
#
|
846
|
-
#
|
847
827
|
# Related: Range#max, Range#minmax.
|
848
828
|
#
|
849
829
|
def min: () -> Elem
|
@@ -865,7 +845,7 @@ class Range[out Elem] < Object
|
|
865
845
|
#
|
866
846
|
# (1..3).overlap?(1) # TypeError
|
867
847
|
#
|
868
|
-
# Returns `false` if an internal call to
|
848
|
+
# Returns `false` if an internal call to `#<=>` returns `nil`; that is, the
|
869
849
|
# operands are not comparable.
|
870
850
|
#
|
871
851
|
# (1..3).overlap?('a'..'d') # => false
|
@@ -947,7 +927,12 @@ class Range[out Elem] < Object
|
|
947
927
|
# (1..4).size # => 4
|
948
928
|
# (1...4).size # => 3
|
949
929
|
# (1..).size # => Infinity
|
950
|
-
# ('a'..'z').size
|
930
|
+
# ('a'..'z').size # => nil
|
931
|
+
#
|
932
|
+
# If `self` is not iterable, raises an exception:
|
933
|
+
#
|
934
|
+
# (0.5..2.5).size # TypeError
|
935
|
+
# (..1).size # TypeError
|
951
936
|
#
|
952
937
|
# Related: Range#count.
|
953
938
|
#
|
@@ -956,43 +941,86 @@ class Range[out Elem] < Object
|
|
956
941
|
|
957
942
|
# <!--
|
958
943
|
# rdoc-file=range.c
|
959
|
-
# - step(
|
960
|
-
# - step(
|
944
|
+
# - step(s = 1) {|element| ... } -> self
|
945
|
+
# - step(s = 1) -> enumerator/arithmetic_sequence
|
961
946
|
# -->
|
962
|
-
# Iterates over the elements of `
|
947
|
+
# Iterates over the elements of range in steps of `s`. The iteration is
|
948
|
+
# performed by `+` operator:
|
963
949
|
#
|
964
|
-
#
|
965
|
-
#
|
950
|
+
# (0..6).step(2) { puts _1 } #=> 1..5
|
951
|
+
# # Prints: 0, 2, 4, 6
|
966
952
|
#
|
967
|
-
#
|
968
|
-
# (
|
969
|
-
#
|
970
|
-
#
|
971
|
-
#
|
972
|
-
#
|
953
|
+
# # Iterate between two dates in step of 1 day (24 hours)
|
954
|
+
# (Time.utc(2022, 2, 24)..Time.utc(2022, 3, 1)).step(24*60*60) { puts _1 }
|
955
|
+
# # Prints:
|
956
|
+
# # 2022-02-24 00:00:00 UTC
|
957
|
+
# # 2022-02-25 00:00:00 UTC
|
958
|
+
# # 2022-02-26 00:00:00 UTC
|
959
|
+
# # 2022-02-27 00:00:00 UTC
|
960
|
+
# # 2022-02-28 00:00:00 UTC
|
961
|
+
# # 2022-03-01 00:00:00 UTC
|
973
962
|
#
|
974
|
-
#
|
975
|
-
#
|
963
|
+
# If ` + step` decreases the value, iteration is still performed when step
|
964
|
+
# `begin` is higher than the `end`:
|
976
965
|
#
|
977
|
-
#
|
978
|
-
#
|
979
|
-
#
|
980
|
-
#
|
981
|
-
#
|
982
|
-
#
|
966
|
+
# (0..6).step(-2) { puts _1 }
|
967
|
+
# # Prints nothing
|
968
|
+
#
|
969
|
+
# (6..0).step(-2) { puts _1 }
|
970
|
+
# # Prints: 6, 4, 2, 0
|
971
|
+
#
|
972
|
+
# (Time.utc(2022, 3, 1)..Time.utc(2022, 2, 24)).step(-24*60*60) { puts _1 }
|
973
|
+
# # Prints:
|
974
|
+
# # 2022-03-01 00:00:00 UTC
|
975
|
+
# # 2022-02-28 00:00:00 UTC
|
976
|
+
# # 2022-02-27 00:00:00 UTC
|
977
|
+
# # 2022-02-26 00:00:00 UTC
|
978
|
+
# # 2022-02-25 00:00:00 UTC
|
979
|
+
# # 2022-02-24 00:00:00 UTC
|
980
|
+
#
|
981
|
+
# When the block is not provided, and range boundaries and step are Numeric, the
|
982
|
+
# method returns Enumerator::ArithmeticSequence.
|
983
983
|
#
|
984
|
-
#
|
985
|
-
#
|
986
|
-
#
|
984
|
+
# (1..5).step(2) # => ((1..5).step(2))
|
985
|
+
# (1.0..).step(1.5) #=> ((1.0..).step(1.5))
|
986
|
+
# (..3r).step(1/3r) #=> ((..3/1).step((1/3)))
|
987
987
|
#
|
988
|
-
#
|
989
|
-
#
|
990
|
-
#
|
988
|
+
# Enumerator::ArithmeticSequence can be further used as a value object for
|
989
|
+
# iteration or slicing of collections (see Array#[]). There is a convenience
|
990
|
+
# method #% with behavior similar to `step` to produce arithmetic sequences more
|
991
|
+
# expressively:
|
991
992
|
#
|
992
|
-
#
|
993
|
+
# # Same as (1..5).step(2)
|
994
|
+
# (1..5) % 2 # => ((1..5).%(2))
|
993
995
|
#
|
994
|
-
|
995
|
-
|
996
|
+
# In a generic case, when the block is not provided, Enumerator is returned:
|
997
|
+
#
|
998
|
+
# ('a'..).step('b') #=> #<Enumerator: "a"..:step("b")>
|
999
|
+
# ('a'..).step('b').take(3) #=> ["a", "ab", "abb"]
|
1000
|
+
#
|
1001
|
+
# If `s` is not provided, it is considered `1` for ranges with numeric `begin`:
|
1002
|
+
#
|
1003
|
+
# (1..5).step { p _1 }
|
1004
|
+
# # Prints: 1, 2, 3, 4, 5
|
1005
|
+
#
|
1006
|
+
# For non-Numeric ranges, step absence is an error:
|
1007
|
+
#
|
1008
|
+
# (Time.utc(2022, 3, 1)..Time.utc(2022, 2, 24)).step { p _1 }
|
1009
|
+
# # raises: step is required for non-numeric ranges (ArgumentError)
|
1010
|
+
#
|
1011
|
+
# For backward compatibility reasons, String ranges support the iteration both
|
1012
|
+
# with string step and with integer step. In the latter case, the iteration is
|
1013
|
+
# performed by calculating the next values with String#succ:
|
1014
|
+
#
|
1015
|
+
# ('a'..'e').step(2) { p _1 }
|
1016
|
+
# # Prints: a, c, e
|
1017
|
+
# ('a'..'e').step { p _1 }
|
1018
|
+
# # Default step 1; prints: a, b, c, d, e
|
1019
|
+
#
|
1020
|
+
def step: (?Numeric | int) -> Enumerator[Elem, self]
|
1021
|
+
| (?Numeric | int) { (Elem element) -> void } -> self
|
1022
|
+
| (untyped) -> Enumerator[Elem, self]
|
1023
|
+
| (untyped) { (Elem element) -> void } -> self
|
996
1024
|
|
997
1025
|
# <!--
|
998
1026
|
# rdoc-file=range.c
|
@@ -1022,11 +1050,10 @@ class Range[out Elem] < Object
|
|
1022
1050
|
# Returns `true` if and only if:
|
1023
1051
|
#
|
1024
1052
|
# * `other` is a range.
|
1025
|
-
# * `other.begin
|
1026
|
-
# * `other.end
|
1053
|
+
# * `other.begin.eql?(self.begin)`.
|
1054
|
+
# * `other.end.eql?(self.end)`.
|
1027
1055
|
# * `other.exclude_end? == self.exclude_end?`.
|
1028
1056
|
#
|
1029
|
-
#
|
1030
1057
|
# Otherwise returns `false`.
|
1031
1058
|
#
|
1032
1059
|
# r = (1..5)
|
data/core/rational.rbs
CHANGED