rbs 3.10.0 → 4.0.0.dev.1
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 +3 -3
- data/.github/workflows/ruby.yml +24 -35
- data/.github/workflows/typecheck.yml +3 -1
- data/.github/workflows/windows.yml +2 -2
- data/.gitignore +0 -4
- data/CHANGELOG.md +0 -88
- data/README.md +1 -38
- data/Rakefile +20 -142
- data/Steepfile +1 -0
- data/config.yml +43 -1
- data/core/array.rbs +46 -100
- data/core/complex.rbs +21 -32
- data/core/dir.rbs +2 -2
- data/core/encoding.rbs +9 -6
- data/core/enumerable.rbs +3 -90
- data/core/enumerator.rbs +1 -18
- data/core/errno.rbs +0 -8
- data/core/errors.rbs +1 -28
- data/core/exception.rbs +2 -2
- data/core/fiber.rbs +4 -5
- data/core/file.rbs +12 -27
- data/core/file_test.rbs +1 -1
- data/core/float.rbs +22 -209
- data/core/gc.rbs +281 -417
- data/core/hash.rbs +727 -1024
- data/core/integer.rbs +38 -78
- data/core/io/buffer.rbs +7 -18
- data/core/io/wait.rbs +33 -11
- data/core/io.rbs +12 -14
- data/core/kernel.rbs +51 -57
- data/core/marshal.rbs +1 -1
- data/core/match_data.rbs +1 -1
- data/core/math.rbs +3 -42
- data/core/method.rbs +6 -14
- data/core/module.rbs +17 -88
- data/core/nil_class.rbs +3 -3
- data/core/numeric.rbs +16 -16
- data/core/object.rbs +3 -3
- data/core/object_space.rbs +15 -21
- data/core/proc.rbs +8 -15
- data/core/process.rbs +2 -2
- data/core/ractor.rbs +437 -278
- data/core/range.rbs +8 -7
- data/core/rational.rbs +24 -37
- data/core/rbs/unnamed/argf.rbs +2 -2
- data/core/rbs/unnamed/env_class.rbs +1 -1
- data/core/rbs/unnamed/random.rbs +2 -4
- data/core/regexp.rbs +20 -25
- data/core/ruby_vm.rbs +4 -6
- data/core/rubygems/errors.rbs +70 -3
- data/core/rubygems/rubygems.rbs +79 -11
- data/core/rubygems/version.rbs +3 -2
- data/core/set.rbs +359 -488
- data/core/string.rbs +1228 -3153
- data/core/struct.rbs +1 -1
- data/core/symbol.rbs +4 -4
- data/core/thread.rbs +29 -92
- data/core/time.rbs +9 -35
- data/core/trace_point.rbs +4 -7
- data/core/unbound_method.rbs +6 -14
- data/docs/collection.md +2 -2
- data/docs/gem.md +1 -0
- data/docs/sigs.md +3 -3
- data/ext/rbs_extension/ast_translation.c +1077 -944
- data/ext/rbs_extension/ast_translation.h +0 -7
- data/ext/rbs_extension/class_constants.c +83 -71
- data/ext/rbs_extension/class_constants.h +7 -4
- data/ext/rbs_extension/extconf.rb +2 -24
- data/ext/rbs_extension/legacy_location.c +172 -173
- data/ext/rbs_extension/legacy_location.h +3 -8
- data/ext/rbs_extension/main.c +289 -239
- data/ext/rbs_extension/rbs_extension.h +0 -3
- data/ext/rbs_extension/rbs_string_bridging.h +0 -4
- data/include/rbs/ast.h +98 -37
- data/include/rbs/defines.h +12 -38
- data/include/rbs/lexer.h +114 -126
- data/include/rbs/location.h +14 -14
- data/include/rbs/parser.h +37 -21
- data/include/rbs/string.h +5 -3
- data/include/rbs/util/rbs_allocator.h +19 -40
- data/include/rbs/util/rbs_assert.h +1 -12
- data/include/rbs/util/rbs_constant_pool.h +3 -3
- data/include/rbs/util/rbs_encoding.h +1 -3
- data/include/rbs/util/rbs_unescape.h +1 -2
- data/lib/rbs/ast/ruby/annotations.rb +119 -0
- data/lib/rbs/ast/ruby/comment_block.rb +221 -0
- data/lib/rbs/ast/ruby/declarations.rb +86 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +24 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +213 -0
- data/lib/rbs/buffer.rb +104 -24
- data/lib/rbs/cli/validate.rb +40 -35
- data/lib/rbs/cli.rb +5 -6
- data/lib/rbs/collection/config/lockfile_generator.rb +0 -1
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +65 -62
- data/lib/rbs/definition_builder/method_builder.rb +45 -30
- data/lib/rbs/definition_builder.rb +44 -9
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +244 -218
- data/lib/rbs/environment_loader.rb +3 -3
- data/lib/rbs/errors.rb +5 -4
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +206 -0
- data/lib/rbs/location_aux.rb +35 -3
- data/lib/rbs/parser_aux.rb +11 -6
- data/lib/rbs/prototype/runtime.rb +2 -2
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +38 -124
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +4 -3
- data/lib/rbs/test/type_check.rb +0 -14
- data/lib/rbs/types.rb +1 -3
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +13 -1
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +1 -0
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/ast/ruby/annotations.rbs +110 -0
- data/sig/ast/ruby/comment_block.rbs +119 -0
- data/sig/ast/ruby/declarations.rbs +60 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +72 -0
- data/sig/buffer.rbs +63 -5
- data/sig/definition.rbs +1 -0
- data/sig/definition_builder.rbs +1 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -0
- data/sig/environment.rbs +28 -133
- data/sig/errors.rbs +13 -6
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +87 -0
- data/sig/location.rbs +32 -7
- data/sig/manifest.yaml +1 -0
- data/sig/method_builder.rbs +7 -4
- data/sig/parser.rbs +16 -20
- data/sig/resolver/type_name_resolver.rbs +7 -38
- data/sig/source.rbs +48 -0
- data/sig/types.rbs +1 -4
- data/src/ast.c +290 -201
- data/src/lexer.c +2813 -2902
- data/src/lexer.re +4 -0
- data/src/lexstate.c +155 -169
- data/src/location.c +40 -40
- data/src/parser.c +2665 -2433
- data/src/string.c +48 -0
- data/src/util/rbs_allocator.c +77 -80
- data/src/util/rbs_assert.c +10 -10
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +15 -13
- data/src/util/rbs_encoding.c +4062 -20097
- data/src/util/rbs_unescape.c +48 -85
- data/stdlib/bigdecimal/0/big_decimal.rbs +82 -100
- data/stdlib/bigdecimal-math/0/big_math.rbs +8 -169
- data/stdlib/cgi/0/core.rbs +396 -2
- data/stdlib/cgi/0/manifest.yaml +0 -1
- data/stdlib/coverage/0/coverage.rbs +1 -3
- data/stdlib/date/0/date.rbs +59 -67
- data/stdlib/date/0/date_time.rbs +1 -1
- data/stdlib/delegate/0/delegator.rbs +7 -10
- data/stdlib/erb/0/erb.rbs +347 -737
- data/stdlib/fileutils/0/fileutils.rbs +13 -18
- data/stdlib/forwardable/0/forwardable.rbs +0 -3
- data/stdlib/json/0/json.rbs +48 -68
- data/stdlib/net-http/0/net-http.rbs +0 -3
- data/stdlib/objspace/0/objspace.rbs +4 -9
- data/stdlib/open-uri/0/open-uri.rbs +0 -40
- data/stdlib/openssl/0/openssl.rbs +228 -331
- data/stdlib/optparse/0/optparse.rbs +3 -3
- data/{core → stdlib/pathname/0}/pathname.rbs +355 -255
- data/stdlib/psych/0/psych.rbs +3 -3
- data/stdlib/rdoc/0/rdoc.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +68 -25
- data/stdlib/ripper/0/ripper.rbs +2 -5
- data/stdlib/singleton/0/singleton.rbs +0 -3
- data/stdlib/socket/0/socket.rbs +1 -13
- data/stdlib/socket/0/tcp_socket.rbs +2 -10
- data/stdlib/stringio/0/stringio.rbs +85 -1176
- data/stdlib/strscan/0/string_scanner.rbs +31 -31
- data/stdlib/tempfile/0/tempfile.rbs +3 -3
- data/stdlib/time/0/time.rbs +1 -1
- data/stdlib/timeout/0/timeout.rbs +7 -63
- data/stdlib/tsort/0/cyclic.rbs +0 -3
- data/stdlib/uri/0/common.rbs +2 -11
- data/stdlib/uri/0/file.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +16 -17
- data/stdlib/uri/0/rfc2396_parser.rbs +7 -6
- data/stdlib/zlib/0/zstream.rbs +0 -1
- metadata +40 -12
- data/.clang-format +0 -74
- data/.clangd +0 -2
- data/.github/workflows/c-check.yml +0 -54
- data/core/ruby.rbs +0 -53
- data/docs/aliases.md +0 -79
- data/docs/encoding.md +0 -56
- data/ext/rbs_extension/compat.h +0 -10
- data/stdlib/cgi-escape/0/escape.rbs +0 -153
data/core/enumerator.rbs
CHANGED
|
@@ -137,7 +137,7 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
137
137
|
|
|
138
138
|
# <!--
|
|
139
139
|
# rdoc-file=enumerator.c
|
|
140
|
-
# - Enumerator.produce(initial = nil
|
|
140
|
+
# - Enumerator.produce(initial = nil) { |prev| block } -> enumerator
|
|
141
141
|
# -->
|
|
142
142
|
# Creates an infinite enumerator from any block, just called over and over. The
|
|
143
143
|
# result of the previous iteration is passed to the next one. If `initial` is
|
|
@@ -169,23 +169,6 @@ class Enumerator[unchecked out Elem, out Return = void] < Object
|
|
|
169
169
|
# Enumerator.produce { scanner.scan(PATTERN) }.slice_after { scanner.eos? }.first
|
|
170
170
|
# # => ["7", "+", "38", "/", "6"]
|
|
171
171
|
#
|
|
172
|
-
# The optional `size` keyword argument specifies the size of the enumerator,
|
|
173
|
-
# which can be retrieved by Enumerator#size. It can be an integer,
|
|
174
|
-
# `Float::INFINITY`, a callable object (such as a lambda), or `nil` to indicate
|
|
175
|
-
# unknown size. When not specified, the size defaults to `Float::INFINITY`.
|
|
176
|
-
#
|
|
177
|
-
# # Infinite enumerator
|
|
178
|
-
# enum = Enumerator.produce(1, size: Float::INFINITY, &:succ)
|
|
179
|
-
# enum.size # => Float::INFINITY
|
|
180
|
-
#
|
|
181
|
-
# # Finite enumerator with known/computable size
|
|
182
|
-
# abs_dir = File.expand_path("./baz") # => "/foo/bar/baz"
|
|
183
|
-
# traverser = Enumerator.produce(abs_dir, size: -> { abs_dir.count("/") + 1 }) {
|
|
184
|
-
# raise StopIteration if it == "/"
|
|
185
|
-
# File.dirname(it)
|
|
186
|
-
# }
|
|
187
|
-
# traverser.size # => 4
|
|
188
|
-
#
|
|
189
172
|
def self.produce: [T] () { (T? prev) -> T } -> Enumerator[T, bot]
|
|
190
173
|
| [T] (T initial) { (T prev) -> T } -> Enumerator[T, bot]
|
|
191
174
|
|
data/core/errno.rbs
CHANGED
|
@@ -38,14 +38,6 @@
|
|
|
38
38
|
# Errno::ENOENT::Errno # => 2
|
|
39
39
|
# Errno::ENOTCAPABLE::Errno # => 0
|
|
40
40
|
#
|
|
41
|
-
# Each class in Errno can be created with optional messages:
|
|
42
|
-
#
|
|
43
|
-
# Errno::EPIPE.new # => #<Errno::EPIPE: Broken pipe>
|
|
44
|
-
# Errno::EPIPE.new("foo") # => #<Errno::EPIPE: Broken pipe - foo>
|
|
45
|
-
# Errno::EPIPE.new("foo", "here") # => #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
46
|
-
#
|
|
47
|
-
# See SystemCallError.new.
|
|
48
|
-
#
|
|
49
41
|
module Errno
|
|
50
42
|
class NOERROR < SystemCallError
|
|
51
43
|
Errno: 0
|
data/core/errors.rbs
CHANGED
|
@@ -302,15 +302,9 @@ class NameError[T] < StandardError
|
|
|
302
302
|
def receiver: () -> T?
|
|
303
303
|
end
|
|
304
304
|
|
|
305
|
-
# <!-- rdoc-file=error.c -->
|
|
306
|
-
# Raised when matching pattern not found.
|
|
307
|
-
#
|
|
308
305
|
class NoMatchingPatternError < StandardError
|
|
309
306
|
end
|
|
310
307
|
|
|
311
|
-
# <!-- rdoc-file=error.c -->
|
|
312
|
-
# Raised when matching key not found.
|
|
313
|
-
#
|
|
314
308
|
class NoMatchingPatternKeyError[M, K] < NoMatchingPatternError
|
|
315
309
|
# <!--
|
|
316
310
|
# rdoc-file=error.c
|
|
@@ -594,34 +588,13 @@ end
|
|
|
594
588
|
class SystemCallError < StandardError
|
|
595
589
|
# <!--
|
|
596
590
|
# rdoc-file=error.c
|
|
597
|
-
# - SystemCallError.new(msg, errno
|
|
591
|
+
# - SystemCallError.new(msg, errno) -> system_call_error_subclass
|
|
598
592
|
# -->
|
|
599
593
|
# If *errno* corresponds to a known system error code, constructs the
|
|
600
594
|
# appropriate Errno class for that error, otherwise constructs a generic
|
|
601
595
|
# SystemCallError object. The error number is subsequently available via the
|
|
602
596
|
# #errno method.
|
|
603
597
|
#
|
|
604
|
-
# If only numeric object is given, it is treated as an Integer *errno*, and
|
|
605
|
-
# *msg* is omitted, otherwise the first argument *msg* is used as the additional
|
|
606
|
-
# error message.
|
|
607
|
-
#
|
|
608
|
-
# SystemCallError.new(Errno::EPIPE::Errno)
|
|
609
|
-
# #=> #<Errno::EPIPE: Broken pipe>
|
|
610
|
-
#
|
|
611
|
-
# SystemCallError.new("foo")
|
|
612
|
-
# #=> #<SystemCallError: unknown error - foo>
|
|
613
|
-
#
|
|
614
|
-
# SystemCallError.new("foo", Errno::EPIPE::Errno)
|
|
615
|
-
# #=> #<Errno::EPIPE: Broken pipe - foo>
|
|
616
|
-
#
|
|
617
|
-
# If *func* is not `nil`, it is appended to the message with "` @ `".
|
|
618
|
-
#
|
|
619
|
-
# SystemCallError.new("foo", Errno::EPIPE::Errno, "here")
|
|
620
|
-
# #=> #<Errno::EPIPE: Broken pipe @ here - foo>
|
|
621
|
-
#
|
|
622
|
-
# A subclass of SystemCallError can also be instantiated via the `new` method of
|
|
623
|
-
# the subclass. See Errno.
|
|
624
|
-
#
|
|
625
598
|
def initialize: (string msg, Integer errno) -> void
|
|
626
599
|
|
|
627
600
|
# <!--
|
data/core/exception.rbs
CHANGED
|
@@ -118,7 +118,7 @@ class Exception
|
|
|
118
118
|
# # String
|
|
119
119
|
# end
|
|
120
120
|
#
|
|
121
|
-
# The value returned by this method
|
|
121
|
+
# The value returned by this method migth be adjusted when raising (see
|
|
122
122
|
# Kernel#raise), or during intermediate handling by #set_backtrace.
|
|
123
123
|
#
|
|
124
124
|
# See also #backtrace_locations that provide the same value, as structured
|
|
@@ -447,7 +447,7 @@ class Exception
|
|
|
447
447
|
# * If the value of keyword `order` is `:top` (the default), lists the
|
|
448
448
|
# error message and the innermost backtrace entry first.
|
|
449
449
|
# * If the value of keyword `order` is `:bottom`, lists the error message
|
|
450
|
-
# the innermost entry last.
|
|
450
|
+
# the the innermost entry last.
|
|
451
451
|
#
|
|
452
452
|
# Example:
|
|
453
453
|
#
|
data/core/fiber.rbs
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
# ## Non-blocking Fibers
|
|
59
59
|
#
|
|
60
60
|
# The concept of *non-blocking fiber* was introduced in Ruby 3.0. A non-blocking
|
|
61
|
-
# fiber, when reaching
|
|
61
|
+
# fiber, when reaching a operation that would normally block the fiber (like
|
|
62
62
|
# `sleep`, or wait for another process or I/O) will yield control to other
|
|
63
63
|
# fibers and allow the *scheduler* to handle blocking and waking up (resuming)
|
|
64
64
|
# this fiber when it can proceed.
|
|
@@ -82,8 +82,7 @@ class Fiber < Object
|
|
|
82
82
|
# -->
|
|
83
83
|
# Returns the value of the fiber storage variable identified by `key`.
|
|
84
84
|
#
|
|
85
|
-
# The `key` must be a symbol, and the value is set by Fiber#[]= or
|
|
86
|
-
# Fiber#storage.
|
|
85
|
+
# The `key` must be a symbol, and the value is set by Fiber#[]= or Fiber#store.
|
|
87
86
|
#
|
|
88
87
|
# See also Fiber::[]=.
|
|
89
88
|
#
|
|
@@ -415,8 +414,8 @@ class Fiber < Object
|
|
|
415
414
|
#
|
|
416
415
|
# See Kernel#raise for more information.
|
|
417
416
|
#
|
|
418
|
-
def raise: (?string msg
|
|
419
|
-
| (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace
|
|
417
|
+
def raise: (?string msg) -> untyped
|
|
418
|
+
| (_Exception, ?string msg, ?Array[string] | Array[Thread::Backtrace::Location] | nil backtrace) -> untyped
|
|
420
419
|
|
|
421
420
|
# <!--
|
|
422
421
|
# rdoc-file=cont.c
|
data/core/file.rbs
CHANGED
|
@@ -1414,7 +1414,7 @@ class File < IO
|
|
|
1414
1414
|
# rdoc-file=file.c
|
|
1415
1415
|
# - File.owned?(file_name) -> true or false
|
|
1416
1416
|
# -->
|
|
1417
|
-
# Returns `true` if the named file exists and the effective
|
|
1417
|
+
# Returns `true` if the named file exists and the effective used id of the
|
|
1418
1418
|
# calling process is the owner of the file.
|
|
1419
1419
|
#
|
|
1420
1420
|
# *file_name* can be an IO object.
|
|
@@ -1427,25 +1427,8 @@ class File < IO
|
|
|
1427
1427
|
# -->
|
|
1428
1428
|
# Returns the string representation of the path
|
|
1429
1429
|
#
|
|
1430
|
-
#
|
|
1431
|
-
#
|
|
1432
|
-
#
|
|
1433
|
-
# If `path` is not a String:
|
|
1434
|
-
#
|
|
1435
|
-
# 1. If it has the `to_path` method, that method will be called to coerce to a
|
|
1436
|
-
# String.
|
|
1437
|
-
#
|
|
1438
|
-
# 2. Otherwise, or if the coerced result is not a String too, the standard
|
|
1439
|
-
# coersion using `to_str` method will take place on that object. (See also
|
|
1440
|
-
# String.try_convert)
|
|
1441
|
-
#
|
|
1442
|
-
# The coerced string must satisfy the following conditions:
|
|
1443
|
-
#
|
|
1444
|
-
# 1. It must be in an ASCII-compatible encoding; otherwise, an
|
|
1445
|
-
# Encoding::CompatibilityError is raised.
|
|
1446
|
-
#
|
|
1447
|
-
# 2. It must not contain the NUL character (`\0`); otherwise, an ArgumentError
|
|
1448
|
-
# is raised.
|
|
1430
|
+
# File.path(File::NULL) #=> "/dev/null"
|
|
1431
|
+
# File.path(Pathname.new("/tmp")) #=> "/tmp"
|
|
1449
1432
|
#
|
|
1450
1433
|
def self.path: (string | _ToPath path) -> String
|
|
1451
1434
|
|
|
@@ -1839,12 +1822,12 @@ class File < IO
|
|
|
1839
1822
|
# Returns `false` if `File::LOCK_NB` is specified and the operation would have
|
|
1840
1823
|
# blocked;
|
|
1841
1824
|
# otherwise returns `0`.
|
|
1842
|
-
# Constant | Lock |
|
|
1843
|
-
#
|
|
1844
|
-
#
|
|
1845
|
-
#
|
|
1846
|
-
#
|
|
1847
|
-
#
|
|
1825
|
+
# Constant | Lock | Effect
|
|
1826
|
+
# ---------------|------------|--------------------------------------------------------------------------------------------------------------
|
|
1827
|
+
# +File::LOCK_EX+| Exclusive | Only one process may hold an exclusive lock for +self+ at a time.
|
|
1828
|
+
# +File::LOCK_NB+|Non-blocking|No blocking; may be combined with +File::LOCK_SH+ or +File::LOCK_EX+ using the bitwise OR operator <tt>|</tt>.
|
|
1829
|
+
# +File::LOCK_SH+| Shared | Multiple processes may each hold a shared lock for +self+ at the same time.
|
|
1830
|
+
# +File::LOCK_UN+| Unlock | Remove an existing lock held by this process.
|
|
1848
1831
|
# Example:
|
|
1849
1832
|
# # Update a counter using an exclusive lock.
|
|
1850
1833
|
# # Don't use File::WRONLY because it truncates the file.
|
|
@@ -2446,8 +2429,10 @@ class File::Stat < Object
|
|
|
2446
2429
|
|
|
2447
2430
|
# <!--
|
|
2448
2431
|
# rdoc-file=file.c
|
|
2449
|
-
# -
|
|
2432
|
+
# - new(p1)
|
|
2450
2433
|
# -->
|
|
2434
|
+
# File::Stat.new(file_name) -> stat
|
|
2435
|
+
#
|
|
2451
2436
|
# Create a File::Stat object for the given file name (raising an exception if
|
|
2452
2437
|
# the file doesn't exist).
|
|
2453
2438
|
#
|
data/core/file_test.rbs
CHANGED
|
@@ -145,7 +145,7 @@ module FileTest
|
|
|
145
145
|
# rdoc-file=file.c
|
|
146
146
|
# - File.owned?(file_name) -> true or false
|
|
147
147
|
# -->
|
|
148
|
-
# Returns `true` if the named file exists and the effective
|
|
148
|
+
# Returns `true` if the named file exists and the effective used id of the
|
|
149
149
|
# calling process is the owner of the file.
|
|
150
150
|
#
|
|
151
151
|
# *file_name* can be an IO object.
|
data/core/float.rbs
CHANGED
|
@@ -1,193 +1,15 @@
|
|
|
1
|
-
# <!-- rdoc-file=
|
|
2
|
-
# A Float object
|
|
3
|
-
# double-precision floating
|
|
4
|
-
#
|
|
5
|
-
# ## Float Imprecisions
|
|
6
|
-
#
|
|
7
|
-
# Some real numbers can be represented precisely as Float objects:
|
|
8
|
-
#
|
|
9
|
-
# 37.5 # => 37.5
|
|
10
|
-
# 98.75 # => 98.75
|
|
11
|
-
# 12.3125 # => 12.3125
|
|
12
|
-
#
|
|
13
|
-
# Others cannot; among these are the transcendental numbers, including:
|
|
14
|
-
#
|
|
15
|
-
# * Pi, *π*: in mathematics, a number of infinite precision:
|
|
16
|
-
# 3.1415926535897932384626433... (to 25 places); in Ruby, it is of limited
|
|
17
|
-
# precision (in this case, to 16 decimal places):
|
|
18
|
-
#
|
|
19
|
-
# Math::PI # => 3.141592653589793
|
|
20
|
-
#
|
|
21
|
-
# * Euler's number, *e*: in mathematics, a number of infinite precision:
|
|
22
|
-
# 2.7182818284590452353602874... (to 25 places); in Ruby, it is of limited
|
|
23
|
-
# precision (in this case, to 15 decimal places):
|
|
24
|
-
#
|
|
25
|
-
# Math::E # => 2.718281828459045
|
|
26
|
-
#
|
|
27
|
-
# Some floating-point computations in Ruby give precise results:
|
|
28
|
-
#
|
|
29
|
-
# 1.0/2 # => 0.5
|
|
30
|
-
# 100.0/8 # => 12.5
|
|
31
|
-
#
|
|
32
|
-
# Others do not:
|
|
33
|
-
#
|
|
34
|
-
# * In mathematics, 2/3 as a decimal number is an infinitely-repeating
|
|
35
|
-
# decimal: 0.666... (forever); in Ruby, `2.0/3` is of limited precision (in
|
|
36
|
-
# this case, to 16 decimal places):
|
|
37
|
-
#
|
|
38
|
-
# 2.0/3 # => 0.6666666666666666
|
|
39
|
-
#
|
|
40
|
-
# * In mathematics, the square root of 2 is an irrational number of infinite
|
|
41
|
-
# precision: 1.4142135623730950488016887... (to 25 decimal places); in Ruby,
|
|
42
|
-
# it is of limited precision (in this case, to 16 decimal places):
|
|
43
|
-
#
|
|
44
|
-
# Math.sqrt(2.0) # => 1.4142135623730951
|
|
45
|
-
#
|
|
46
|
-
# * Even a simple computation can introduce imprecision:
|
|
47
|
-
#
|
|
48
|
-
# x = 0.1 + 0.2 # => 0.30000000000000004
|
|
49
|
-
# y = 0.3 # => 0.3
|
|
50
|
-
# x == y # => false
|
|
51
|
-
#
|
|
52
|
-
# See:
|
|
53
|
-
#
|
|
54
|
-
# * https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
|
|
55
|
-
# * https://github.com/rdp/ruby_tutorials_core/wiki/Ruby-Talk-FAQ#-why-are-rub
|
|
56
|
-
# ys-floats-imprecise
|
|
57
|
-
# * https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
|
|
58
|
-
#
|
|
59
|
-
# Note that precise storage and computation of rational numbers is possible
|
|
60
|
-
# using Rational objects.
|
|
61
|
-
#
|
|
62
|
-
# ## Creating a Float
|
|
63
|
-
#
|
|
64
|
-
# You can create a Float object explicitly with:
|
|
65
|
-
#
|
|
66
|
-
# * A [floating-point literal](rdoc-ref:syntax/literals.rdoc@Float+Literals).
|
|
67
|
-
#
|
|
68
|
-
# You can convert certain objects to Floats with:
|
|
69
|
-
#
|
|
70
|
-
# * Method #Float.
|
|
71
|
-
#
|
|
72
|
-
# ## What's Here
|
|
73
|
-
#
|
|
74
|
-
# First, what's elsewhere. Class Float:
|
|
75
|
-
#
|
|
76
|
-
# * Inherits from [class Numeric](rdoc-ref:Numeric@What-27s+Here) and [class
|
|
77
|
-
# Object](rdoc-ref:Object@What-27s+Here).
|
|
78
|
-
# * Includes [module Comparable](rdoc-ref:Comparable@What-27s+Here).
|
|
79
|
-
#
|
|
80
|
-
# Here, class Float provides methods for:
|
|
81
|
-
#
|
|
82
|
-
# * [Querying](rdoc-ref:Float@Querying)
|
|
83
|
-
# * [Comparing](rdoc-ref:Float@Comparing)
|
|
84
|
-
# * [Converting](rdoc-ref:Float@Converting)
|
|
85
|
-
#
|
|
86
|
-
# ### Querying
|
|
87
|
-
#
|
|
88
|
-
# * #finite?: Returns whether `self` is finite.
|
|
89
|
-
# * #hash: Returns the integer hash code for `self`.
|
|
90
|
-
# * #infinite?: Returns whether `self` is infinite.
|
|
91
|
-
# * #nan?: Returns whether `self` is a NaN (not-a-number).
|
|
92
|
-
#
|
|
93
|
-
# ### Comparing
|
|
94
|
-
#
|
|
95
|
-
# * #<: Returns whether `self` is less than the given value.
|
|
96
|
-
# * #<=: Returns whether `self` is less than or equal to the given value.
|
|
97
|
-
# * #<=>: Returns a number indicating whether `self` is less than, equal to,
|
|
98
|
-
# or greater than the given value.
|
|
99
|
-
# * #== (aliased as #=== and #eql?): Returns whether `self` is equal to the
|
|
100
|
-
# given value.
|
|
101
|
-
# * #>: Returns whether `self` is greater than the given value.
|
|
102
|
-
# * #>=: Returns whether `self` is greater than or equal to the given value.
|
|
103
|
-
#
|
|
104
|
-
# ### Converting
|
|
105
|
-
#
|
|
106
|
-
# * #% (aliased as #modulo): Returns `self` modulo the given value.
|
|
107
|
-
# * #*: Returns the product of `self` and the given value.
|
|
108
|
-
# * #**: Returns the value of `self` raised to the power of the given value.
|
|
109
|
-
# * #+: Returns the sum of `self` and the given value.
|
|
110
|
-
# * #-: Returns the difference of `self` and the given value.
|
|
111
|
-
# * #/: Returns the quotient of `self` and the given value.
|
|
112
|
-
# * #ceil: Returns the smallest number greater than or equal to `self`.
|
|
113
|
-
# * #coerce: Returns a 2-element array containing the given value converted to
|
|
114
|
-
# a Float and `self`
|
|
115
|
-
# * #divmod: Returns a 2-element array containing the quotient and remainder
|
|
116
|
-
# results of dividing `self` by the given value.
|
|
117
|
-
# * #fdiv: Returns the Float result of dividing `self` by the given value.
|
|
118
|
-
# * #floor: Returns the greatest number smaller than or equal to `self`.
|
|
119
|
-
# * #next_float: Returns the next-larger representable Float.
|
|
120
|
-
# * #prev_float: Returns the next-smaller representable Float.
|
|
121
|
-
# * #quo: Returns the quotient from dividing `self` by the given value.
|
|
122
|
-
# * #round: Returns `self` rounded to the nearest value, to a given precision.
|
|
123
|
-
# * #to_i (aliased as #to_int): Returns `self` truncated to an Integer.
|
|
124
|
-
# * #to_s (aliased as #inspect): Returns a string containing the place-value
|
|
125
|
-
# representation of `self` in the given radix.
|
|
126
|
-
# * #truncate: Returns `self` truncated to a given precision.
|
|
127
|
-
#
|
|
128
|
-
# <!-- rdoc-file=float.rb -->
|
|
129
|
-
# A Float object stores a real number using the native architecture's
|
|
130
|
-
# double-precision floating-point representation.
|
|
131
|
-
#
|
|
132
|
-
# ## Float Imprecisions
|
|
133
|
-
#
|
|
134
|
-
# Some real numbers can be represented precisely as Float objects:
|
|
135
|
-
#
|
|
136
|
-
# 37.5 # => 37.5
|
|
137
|
-
# 98.75 # => 98.75
|
|
138
|
-
# 12.3125 # => 12.3125
|
|
139
|
-
#
|
|
140
|
-
# Others cannot; among these are the transcendental numbers, including:
|
|
141
|
-
#
|
|
142
|
-
# * Pi, *π*: in mathematics, a number of infinite precision:
|
|
143
|
-
# 3.1415926535897932384626433... (to 25 places); in Ruby, it is of limited
|
|
144
|
-
# precision (in this case, to 16 decimal places):
|
|
145
|
-
#
|
|
146
|
-
# Math::PI # => 3.141592653589793
|
|
147
|
-
#
|
|
148
|
-
# * Euler's number, *e*: in mathematics, a number of infinite precision:
|
|
149
|
-
# 2.7182818284590452353602874... (to 25 places); in Ruby, it is of limited
|
|
150
|
-
# precision (in this case, to 15 decimal places):
|
|
151
|
-
#
|
|
152
|
-
# Math::E # => 2.718281828459045
|
|
153
|
-
#
|
|
154
|
-
# Some floating-point computations in Ruby give precise results:
|
|
155
|
-
#
|
|
156
|
-
# 1.0/2 # => 0.5
|
|
157
|
-
# 100.0/8 # => 12.5
|
|
158
|
-
#
|
|
159
|
-
# Others do not:
|
|
160
|
-
#
|
|
161
|
-
# * In mathematics, 2/3 as a decimal number is an infinitely-repeating
|
|
162
|
-
# decimal: 0.666... (forever); in Ruby, `2.0/3` is of limited precision (in
|
|
163
|
-
# this case, to 16 decimal places):
|
|
164
|
-
#
|
|
165
|
-
# 2.0/3 # => 0.6666666666666666
|
|
166
|
-
#
|
|
167
|
-
# * In mathematics, the square root of 2 is an irrational number of infinite
|
|
168
|
-
# precision: 1.4142135623730950488016887... (to 25 decimal places); in Ruby,
|
|
169
|
-
# it is of limited precision (in this case, to 16 decimal places):
|
|
170
|
-
#
|
|
171
|
-
# Math.sqrt(2.0) # => 1.4142135623730951
|
|
172
|
-
#
|
|
173
|
-
# * Even a simple computation can introduce imprecision:
|
|
174
|
-
#
|
|
175
|
-
# x = 0.1 + 0.2 # => 0.30000000000000004
|
|
176
|
-
# y = 0.3 # => 0.3
|
|
177
|
-
# x == y # => false
|
|
1
|
+
# <!-- rdoc-file=numeric.c -->
|
|
2
|
+
# A Float object represents a sometimes-inexact real number using the native
|
|
3
|
+
# architecture's double-precision floating point representation.
|
|
178
4
|
#
|
|
179
|
-
#
|
|
5
|
+
# Floating point has a different arithmetic and is an inexact number. So you
|
|
6
|
+
# should know its esoteric system. See following:
|
|
180
7
|
#
|
|
181
8
|
# * https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
|
|
182
9
|
# * https://github.com/rdp/ruby_tutorials_core/wiki/Ruby-Talk-FAQ#-why-are-rub
|
|
183
10
|
# ys-floats-imprecise
|
|
184
11
|
# * https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
|
|
185
12
|
#
|
|
186
|
-
# Note that precise storage and computation of rational numbers is possible
|
|
187
|
-
# using Rational objects.
|
|
188
|
-
#
|
|
189
|
-
# ## Creating a Float
|
|
190
|
-
#
|
|
191
13
|
# You can create a Float object explicitly with:
|
|
192
14
|
#
|
|
193
15
|
# * A [floating-point literal](rdoc-ref:syntax/literals.rdoc@Float+Literals).
|
|
@@ -257,7 +79,7 @@ class Float < Numeric
|
|
|
257
79
|
# rdoc-file=numeric.c
|
|
258
80
|
# - self % other -> float
|
|
259
81
|
# -->
|
|
260
|
-
# Returns `self` modulo `other` as a
|
|
82
|
+
# Returns `self` modulo `other` as a float.
|
|
261
83
|
#
|
|
262
84
|
# For float `f` and real number `r`, these expressions are equivalent:
|
|
263
85
|
#
|
|
@@ -289,7 +111,7 @@ class Float < Numeric
|
|
|
289
111
|
# rdoc-file=numeric.c
|
|
290
112
|
# - self * other -> numeric
|
|
291
113
|
# -->
|
|
292
|
-
# Returns the
|
|
114
|
+
# Returns a new Float which is the product of `self` and `other`:
|
|
293
115
|
#
|
|
294
116
|
# f = 3.14
|
|
295
117
|
# f * 2 # => 6.28
|
|
@@ -302,9 +124,9 @@ class Float < Numeric
|
|
|
302
124
|
|
|
303
125
|
# <!--
|
|
304
126
|
# rdoc-file=numeric.c
|
|
305
|
-
# - self **
|
|
127
|
+
# - self ** other -> numeric
|
|
306
128
|
# -->
|
|
307
|
-
#
|
|
129
|
+
# Raises `self` to the power of `other`:
|
|
308
130
|
#
|
|
309
131
|
# f = 3.14
|
|
310
132
|
# f ** 2 # => 9.8596
|
|
@@ -318,20 +140,15 @@ class Float < Numeric
|
|
|
318
140
|
|
|
319
141
|
# <!--
|
|
320
142
|
# rdoc-file=numeric.c
|
|
321
|
-
# - self + other ->
|
|
143
|
+
# - self + other -> numeric
|
|
322
144
|
# -->
|
|
323
|
-
# Returns the sum of `self` and `other
|
|
324
|
-
#
|
|
325
|
-
# 3.14 + 0 # => 3.14
|
|
326
|
-
# 3.14 + 1 # => 4.140000000000001
|
|
327
|
-
# -3.14 + 0 # => -3.14
|
|
328
|
-
# -3.14 + 1 # => -2.14
|
|
145
|
+
# Returns a new Float which is the sum of `self` and `other`:
|
|
329
146
|
#
|
|
330
|
-
#
|
|
331
|
-
#
|
|
332
|
-
#
|
|
333
|
-
#
|
|
334
|
-
#
|
|
147
|
+
# f = 3.14
|
|
148
|
+
# f + 1 # => 4.140000000000001
|
|
149
|
+
# f + 1.0 # => 4.140000000000001
|
|
150
|
+
# f + Rational(1, 1) # => 4.140000000000001
|
|
151
|
+
# f + Complex(1, 0) # => (4.140000000000001+0i)
|
|
335
152
|
#
|
|
336
153
|
def +: (Complex) -> Complex
|
|
337
154
|
| (Numeric) -> Float
|
|
@@ -342,7 +159,7 @@ class Float < Numeric
|
|
|
342
159
|
# rdoc-file=numeric.c
|
|
343
160
|
# - self - other -> numeric
|
|
344
161
|
# -->
|
|
345
|
-
# Returns the difference of `self` and `other`:
|
|
162
|
+
# Returns a new Float which is the difference of `self` and `other`:
|
|
346
163
|
#
|
|
347
164
|
# f = 3.14
|
|
348
165
|
# f - 1 # => 2.14
|
|
@@ -355,13 +172,9 @@ class Float < Numeric
|
|
|
355
172
|
|
|
356
173
|
# <!--
|
|
357
174
|
# rdoc-file=numeric.rb
|
|
358
|
-
# - -
|
|
175
|
+
# - -float -> float
|
|
359
176
|
# -->
|
|
360
|
-
# Returns `self`, negated
|
|
361
|
-
#
|
|
362
|
-
# -3.14 # => -3.14
|
|
363
|
-
# -(-3.14) # => 3.14
|
|
364
|
-
# -0.0 # => -0.0
|
|
177
|
+
# Returns `self`, negated.
|
|
365
178
|
#
|
|
366
179
|
def -@: () -> Float
|
|
367
180
|
|
|
@@ -369,7 +182,7 @@ class Float < Numeric
|
|
|
369
182
|
# rdoc-file=numeric.c
|
|
370
183
|
# - self / other -> numeric
|
|
371
184
|
# -->
|
|
372
|
-
# Returns the
|
|
185
|
+
# Returns a new Float which is the result of dividing `self` by `other`:
|
|
373
186
|
#
|
|
374
187
|
# f = 3.14
|
|
375
188
|
# f / 2 # => 1.57
|
|
@@ -833,7 +646,7 @@ class Float < Numeric
|
|
|
833
646
|
alias magnitude abs
|
|
834
647
|
|
|
835
648
|
# <!-- rdoc-file=numeric.c -->
|
|
836
|
-
# Returns `self` modulo `other` as a
|
|
649
|
+
# Returns `self` modulo `other` as a float.
|
|
837
650
|
#
|
|
838
651
|
# For float `f` and real number `r`, these expressions are equivalent:
|
|
839
652
|
#
|
|
@@ -1281,7 +1094,7 @@ Float::MAX_EXP: Integer
|
|
|
1281
1094
|
# Usually defaults to 2.2250738585072014e-308.
|
|
1282
1095
|
#
|
|
1283
1096
|
# If the platform supports denormalized numbers, there are numbers between zero
|
|
1284
|
-
# and Float::MIN.
|
|
1097
|
+
# and Float::MIN. 0.0.next_float returns the smallest positive floating point
|
|
1285
1098
|
# number including denormalized numbers.
|
|
1286
1099
|
#
|
|
1287
1100
|
Float::MIN: Float
|