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/basic_object.rbs
CHANGED
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
# * Do not have namespace "pollution" from the many methods provided in class
|
|
18
18
|
# Object and its included module Kernel.
|
|
19
19
|
# * Do not have definitions of common classes, and so references to such
|
|
20
|
-
# common classes must be fully qualified (
|
|
20
|
+
# common classes must be fully qualified (<code>::String</code>, not
|
|
21
|
+
# `String`).
|
|
21
22
|
#
|
|
22
23
|
# A variety of strategies can be used to provide useful portions of the Standard
|
|
23
24
|
# Library in subclasses of `BasicObject`:
|
|
@@ -92,8 +93,8 @@ class BasicObject
|
|
|
92
93
|
# classes to provide class-specific meaning.
|
|
93
94
|
#
|
|
94
95
|
# Unlike #==, the #equal? method should never be overridden by subclasses as it
|
|
95
|
-
# is used to determine object identity (that is,
|
|
96
|
-
# `a` is the same object as `b`):
|
|
96
|
+
# is used to determine object identity (that is, <code>a.equal?(b)</code> if and
|
|
97
|
+
# only if `a` is the same object as `b`):
|
|
97
98
|
#
|
|
98
99
|
# obj = "a"
|
|
99
100
|
# other = obj.dup
|
|
@@ -174,8 +175,8 @@ class BasicObject
|
|
|
174
175
|
# classes to provide class-specific meaning.
|
|
175
176
|
#
|
|
176
177
|
# Unlike #==, the #equal? method should never be overridden by subclasses as it
|
|
177
|
-
# is used to determine object identity (that is,
|
|
178
|
-
# `a` is the same object as `b`):
|
|
178
|
+
# is used to determine object identity (that is, <code>a.equal?(b)</code> if and
|
|
179
|
+
# only if `a` is the same object as `b`):
|
|
179
180
|
#
|
|
180
181
|
# obj = "a"
|
|
181
182
|
# other = obj.dup
|
|
@@ -315,7 +316,7 @@ class BasicObject
|
|
|
315
316
|
# def Chatty.three() end
|
|
316
317
|
# end
|
|
317
318
|
#
|
|
318
|
-
#
|
|
319
|
+
# <em>produces:</em>
|
|
319
320
|
#
|
|
320
321
|
# Adding singleton_method_added
|
|
321
322
|
# Adding one
|
|
@@ -343,7 +344,7 @@ class BasicObject
|
|
|
343
344
|
# end
|
|
344
345
|
# end
|
|
345
346
|
#
|
|
346
|
-
#
|
|
347
|
+
# <em>produces:</em>
|
|
347
348
|
#
|
|
348
349
|
# Removing three
|
|
349
350
|
# Removing one
|
|
@@ -367,7 +368,7 @@ class BasicObject
|
|
|
367
368
|
# end
|
|
368
369
|
# end
|
|
369
370
|
#
|
|
370
|
-
#
|
|
371
|
+
# <em>produces:</em>
|
|
371
372
|
#
|
|
372
373
|
# Undefining one
|
|
373
374
|
#
|
data/core/binding.rbs
CHANGED
data/core/builtin.rbs
CHANGED
|
@@ -9,7 +9,7 @@ end
|
|
|
9
9
|
# A type that's convertible to a `Rational`.
|
|
10
10
|
#
|
|
11
11
|
interface _ToR
|
|
12
|
-
# Convert `self` to a `
|
|
12
|
+
# Convert `self` to a `Rational`.
|
|
13
13
|
#
|
|
14
14
|
def to_r: () -> Rational
|
|
15
15
|
end
|
|
@@ -58,7 +58,7 @@ end
|
|
|
58
58
|
#
|
|
59
59
|
# Implicit `.to_str` conversions are usable all over Ruby's stdlib, such as `Kernel#abort`,
|
|
60
60
|
# `String#+`, and `Object#send`. Virtually anywhere that accepts a `String` will also accept
|
|
61
|
-
# something that defines `.
|
|
61
|
+
# something that defines `.to_str`.
|
|
62
62
|
#
|
|
63
63
|
# Types that define `.to_str` are also usable wherever paths are expected (See the `path` type
|
|
64
64
|
# alias).
|
data/core/class.rbs
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
# When a new class is created, an object of type Class is initialized and
|
|
11
11
|
# assigned to a global constant (Name in this case).
|
|
12
12
|
#
|
|
13
|
-
# When
|
|
14
|
-
# run by default. This can be demonstrated by overriding #new in
|
|
13
|
+
# When <code>Name.new</code> is called to create a new object, the #new method
|
|
14
|
+
# in Class is run by default. This can be demonstrated by overriding #new in
|
|
15
|
+
# Class:
|
|
15
16
|
#
|
|
16
17
|
# class Class
|
|
17
18
|
# alias old_new new
|
|
@@ -26,7 +27,7 @@
|
|
|
26
27
|
#
|
|
27
28
|
# n = Name.new
|
|
28
29
|
#
|
|
29
|
-
#
|
|
30
|
+
# <em>produces:</em>
|
|
30
31
|
#
|
|
31
32
|
# Creating a new Name
|
|
32
33
|
#
|
|
@@ -144,7 +145,7 @@ class Class < Module
|
|
|
144
145
|
# class Baz < Bar
|
|
145
146
|
# end
|
|
146
147
|
#
|
|
147
|
-
#
|
|
148
|
+
# <em>produces:</em>
|
|
148
149
|
#
|
|
149
150
|
# New subclass: Bar
|
|
150
151
|
# New subclass: Baz
|
|
@@ -157,7 +158,7 @@ class Class < Module
|
|
|
157
158
|
# -->
|
|
158
159
|
# Calls #allocate to create a new object of *class*'s class, then invokes that
|
|
159
160
|
# object's #initialize method, passing it *args*. This is the method that ends
|
|
160
|
-
# up getting called whenever an object is constructed using
|
|
161
|
+
# up getting called whenever an object is constructed using <code>.new</code>.
|
|
161
162
|
#
|
|
162
163
|
def new: () -> untyped
|
|
163
164
|
|
data/core/comparable.rbs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# <!-- rdoc-file=compar.c -->
|
|
2
2
|
# The Comparable mixin is used by classes whose objects may be ordered. The
|
|
3
|
-
# class must define the
|
|
4
|
-
# another object, returning a value less than 0, returning 0, or
|
|
5
|
-
# value greater than 0, depending on whether the receiver is less
|
|
6
|
-
# to, or greater than the other object. If the other object is not
|
|
7
|
-
# then the
|
|
8
|
-
# implement the conventional comparison operators
|
|
9
|
-
#
|
|
3
|
+
# class must define the <code><=></code> operator, which compares the receiver
|
|
4
|
+
# against another object, returning a value less than 0, returning 0, or
|
|
5
|
+
# returning a value greater than 0, depending on whether the receiver is less
|
|
6
|
+
# than, equal to, or greater than the other object. If the other object is not
|
|
7
|
+
# comparable then the <code><=></code> operator should return `nil`. Comparable
|
|
8
|
+
# uses <code><=></code> to implement the conventional comparison operators
|
|
9
|
+
# (<code><</code>, <code><=</code>, <code>==</code>, <code>>=</code>, and
|
|
10
|
+
# <code>></code>) and the method <code>between?</code>.
|
|
10
11
|
#
|
|
11
12
|
# class StringSorter
|
|
12
13
|
# include Comparable
|
|
@@ -38,7 +39,8 @@
|
|
|
38
39
|
#
|
|
39
40
|
# ## What's Here
|
|
40
41
|
#
|
|
41
|
-
# Module Comparable provides these methods, all of which use method
|
|
42
|
+
# Module Comparable provides these methods, all of which use method
|
|
43
|
+
# <code>#<=></code>:
|
|
42
44
|
#
|
|
43
45
|
# * #<: Returns whether `self` is less than the given object.
|
|
44
46
|
# * #<=: Returns whether `self` is less than or equal to the given object.
|
|
@@ -46,28 +48,36 @@
|
|
|
46
48
|
# * #>: Returns whether `self` is greater than the given object.
|
|
47
49
|
# * #>=: Returns whether `self` is greater than or equal to the given object.
|
|
48
50
|
# * #between?: Returns `true` if `self` is between two given objects.
|
|
49
|
-
# * #clamp: For given objects `min` and `max`, or range
|
|
51
|
+
# * #clamp: For given objects `min` and `max`, or range
|
|
52
|
+
# <code>(min..max)</code>, returns:
|
|
50
53
|
#
|
|
51
|
-
# * `min` if
|
|
52
|
-
# * `max` if
|
|
54
|
+
# * `min` if <code>(self <=> min) < 0</code>.
|
|
55
|
+
# * `max` if <code>(self <=> max) > 0</code>.
|
|
53
56
|
# * `self` otherwise.
|
|
54
57
|
#
|
|
55
58
|
module Comparable : _WithSpaceshipOperator
|
|
56
59
|
# <!--
|
|
57
60
|
# rdoc-file=compar.c
|
|
58
|
-
# -
|
|
61
|
+
# - self < other -> true or false
|
|
59
62
|
# -->
|
|
60
|
-
#
|
|
61
|
-
#
|
|
63
|
+
# Returns whether `self` is "less than" `other`; equivalent to <code>(self <=>
|
|
64
|
+
# other) < 0</code>:
|
|
65
|
+
#
|
|
66
|
+
# 'foo' < 'foo' # => false
|
|
67
|
+
# 'foo' < 'food' # => true
|
|
62
68
|
#
|
|
63
69
|
def <: (untyped other) -> bool
|
|
64
70
|
|
|
65
71
|
# <!--
|
|
66
72
|
# rdoc-file=compar.c
|
|
67
|
-
# -
|
|
73
|
+
# - self <= other -> true or false
|
|
68
74
|
# -->
|
|
69
|
-
#
|
|
70
|
-
#
|
|
75
|
+
# Returns whether `self` is "less than or equal to" `other`; equivalent to
|
|
76
|
+
# <code>(self <=> other) <= 0</code>:
|
|
77
|
+
#
|
|
78
|
+
# 'foo' <= 'foo' # => true
|
|
79
|
+
# 'foo' <= 'food' # => true
|
|
80
|
+
# 'food' <= 'foo' # => false
|
|
71
81
|
#
|
|
72
82
|
def <=: (untyped other) -> bool
|
|
73
83
|
|
|
@@ -75,8 +85,9 @@ module Comparable : _WithSpaceshipOperator
|
|
|
75
85
|
# rdoc-file=compar.c
|
|
76
86
|
# - obj == other -> true or false
|
|
77
87
|
# -->
|
|
78
|
-
# Compares two objects based on the receiver's
|
|
79
|
-
# it returns 0. Also returns true if *obj* and *other* are the
|
|
88
|
+
# Compares two objects based on the receiver's <code><=></code> method,
|
|
89
|
+
# returning true if it returns 0. Also returns true if *obj* and *other* are the
|
|
90
|
+
# same object.
|
|
80
91
|
#
|
|
81
92
|
def ==: (untyped other) -> bool
|
|
82
93
|
|
|
@@ -84,8 +95,8 @@ module Comparable : _WithSpaceshipOperator
|
|
|
84
95
|
# rdoc-file=compar.c
|
|
85
96
|
# - obj > other -> true or false
|
|
86
97
|
# -->
|
|
87
|
-
# Compares two objects based on the receiver's
|
|
88
|
-
# it returns a value greater than 0.
|
|
98
|
+
# Compares two objects based on the receiver's <code><=></code> method,
|
|
99
|
+
# returning true if it returns a value greater than 0.
|
|
89
100
|
#
|
|
90
101
|
def >: (untyped other) -> bool
|
|
91
102
|
|
|
@@ -93,8 +104,8 @@ module Comparable : _WithSpaceshipOperator
|
|
|
93
104
|
# rdoc-file=compar.c
|
|
94
105
|
# - obj >= other -> true or false
|
|
95
106
|
# -->
|
|
96
|
-
# Compares two objects based on the receiver's
|
|
97
|
-
# it returns a value greater than or equal to 0.
|
|
107
|
+
# Compares two objects based on the receiver's <code><=></code> method,
|
|
108
|
+
# returning true if it returns a value greater than or equal to 0.
|
|
98
109
|
#
|
|
99
110
|
def >=: (untyped other) -> bool
|
|
100
111
|
|
|
@@ -102,8 +113,8 @@ module Comparable : _WithSpaceshipOperator
|
|
|
102
113
|
# rdoc-file=compar.c
|
|
103
114
|
# - obj.between?(min, max) -> true or false
|
|
104
115
|
# -->
|
|
105
|
-
# Returns `false` if *obj*
|
|
106
|
-
# is greater than zero, `true` otherwise.
|
|
116
|
+
# Returns `false` if *obj* <code><=></code> *min* is less than zero or if *obj*
|
|
117
|
+
# <code><=></code> *max* is greater than zero, `true` otherwise.
|
|
107
118
|
#
|
|
108
119
|
# 3.between?(1, 5) #=> true
|
|
109
120
|
# 6.between?(1, 5) #=> false
|
|
@@ -117,8 +128,9 @@ module Comparable : _WithSpaceshipOperator
|
|
|
117
128
|
# - obj.clamp(min, max) -> obj
|
|
118
129
|
# - obj.clamp(range) -> obj
|
|
119
130
|
# -->
|
|
120
|
-
# In
|
|
121
|
-
# *max* if *obj*
|
|
131
|
+
# In <code>(min, max)</code> form, returns *min* if *obj* <code><=></code> *min*
|
|
132
|
+
# is less than zero, *max* if *obj* <code><=></code> *max* is greater than zero,
|
|
133
|
+
# and *obj* otherwise.
|
|
122
134
|
#
|
|
123
135
|
# 12.clamp(0, 100) #=> 12
|
|
124
136
|
# 523.clamp(0, 100) #=> 100
|
|
@@ -133,9 +145,10 @@ module Comparable : _WithSpaceshipOperator
|
|
|
133
145
|
# -20.clamp(0, nil) #=> 0
|
|
134
146
|
# 523.clamp(nil, 100) #=> 100
|
|
135
147
|
#
|
|
136
|
-
# In
|
|
137
|
-
#
|
|
138
|
-
# *obj*
|
|
148
|
+
# In <code>(range)</code> form, returns <em>range.begin</em> if *obj*
|
|
149
|
+
# <code><=></code> <em>range.begin</em> is less than zero, <em>range.end</em> if
|
|
150
|
+
# *obj* <code><=></code> <em>range.end</em> is greater than zero, and *obj*
|
|
151
|
+
# otherwise.
|
|
139
152
|
#
|
|
140
153
|
# 12.clamp(0..100) #=> 12
|
|
141
154
|
# 523.clamp(0..100) #=> 100
|
|
@@ -144,13 +157,13 @@ module Comparable : _WithSpaceshipOperator
|
|
|
144
157
|
# 'd'.clamp('a'..'f') #=> 'd'
|
|
145
158
|
# 'z'.clamp('a'..'f') #=> 'f'
|
|
146
159
|
#
|
|
147
|
-
# If
|
|
148
|
-
#
|
|
160
|
+
# If <em>range.begin</em> is `nil`, it is considered smaller than *obj*, and if
|
|
161
|
+
# <em>range.end</em> is `nil`, it is considered greater than *obj*.
|
|
149
162
|
#
|
|
150
163
|
# -20.clamp(0..) #=> 0
|
|
151
164
|
# 523.clamp(..100) #=> 100
|
|
152
165
|
#
|
|
153
|
-
# When
|
|
166
|
+
# When <em>range.end</em> is excluded and not `nil`, an exception is raised.
|
|
154
167
|
#
|
|
155
168
|
# 100.clamp(0...100) # ArgumentError
|
|
156
169
|
#
|
|
@@ -167,5 +180,13 @@ interface Comparable::_WithSpaceshipOperator
|
|
|
167
180
|
# If `other` is less than `self`, it returns a positive Integer.
|
|
168
181
|
# If no comparison is defined with `other` and `self`, it returns `nil`.
|
|
169
182
|
#
|
|
170
|
-
def <=>: (untyped other) ->
|
|
183
|
+
def <=>: (untyped other) -> Comparable::_CompareToZero?
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# This interface indicates a type is comparable against zero.
|
|
187
|
+
#
|
|
188
|
+
interface Comparable::_CompareToZero
|
|
189
|
+
def <: (0) -> boolish
|
|
190
|
+
|
|
191
|
+
def >: (0) -> boolish
|
|
171
192
|
end
|