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/proc.rbs
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
#
|
|
38
38
|
# proc2 = proc {|x| x**2 }
|
|
39
39
|
#
|
|
40
|
-
# * Receiving a block of code into proc argument (note the
|
|
40
|
+
# * Receiving a block of code into proc argument (note the <code>&</code>):
|
|
41
41
|
#
|
|
42
42
|
# def make_proc(&block)
|
|
43
43
|
# block
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
# method.
|
|
150
150
|
#
|
|
151
151
|
# Lambda semantics is typically preserved during the proc lifetime, including
|
|
152
|
-
#
|
|
152
|
+
# <code>&</code>-deconstruction to a block of code:
|
|
153
153
|
#
|
|
154
154
|
# p = proc {|x, y| x }
|
|
155
155
|
# l = lambda {|x, y| x }
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
# ## Conversion of other objects to procs
|
|
185
185
|
#
|
|
186
186
|
# Any object that implements the `to_proc` method can be converted into a proc
|
|
187
|
-
# by the
|
|
187
|
+
# by the <code>&</code> operator, and therefore can be consumed by iterators.
|
|
188
188
|
#
|
|
189
189
|
# class Greeter
|
|
190
190
|
# def initialize(greeting)
|
|
@@ -201,8 +201,8 @@
|
|
|
201
201
|
# ["Bob", "Jane"].map(&hi) #=> ["Hi, Bob!", "Hi, Jane!"]
|
|
202
202
|
# ["Bob", "Jane"].map(&hey) #=> ["Hey, Bob!", "Hey, Jane!"]
|
|
203
203
|
#
|
|
204
|
-
# Of the Ruby core classes, this method is implemented by Symbol
|
|
205
|
-
# Hash
|
|
204
|
+
# Of the Ruby core classes, this method is implemented by `Symbol`, `Method`,
|
|
205
|
+
# and `Hash`.
|
|
206
206
|
#
|
|
207
207
|
# :to_s.to_proc.call(1) #=> "1"
|
|
208
208
|
# [1, 2].map(&:to_s) #=> ["1", "2"]
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
# [1, 2, 3].each { |x| p it }
|
|
286
286
|
# # syntax error found (SyntaxError)
|
|
287
287
|
# # [1, 2, 3].each { |x| p it }
|
|
288
|
-
# # ^~
|
|
288
|
+
# # ^~ 'it' is not allowed when an ordinary parameter is defined
|
|
289
289
|
#
|
|
290
290
|
# But if a local name (variable or method) is available, it would be used:
|
|
291
291
|
#
|
|
@@ -302,7 +302,7 @@
|
|
|
302
302
|
#
|
|
303
303
|
# p = proc { it**2 }
|
|
304
304
|
# l = lambda { it**2 }
|
|
305
|
-
# p.parameters # => [[:opt
|
|
305
|
+
# p.parameters # => [[:opt]]
|
|
306
306
|
# p.arity # => 1
|
|
307
307
|
# l.parameters # => [[:req]]
|
|
308
308
|
# l.arity # => 1
|
|
@@ -332,7 +332,7 @@
|
|
|
332
332
|
# Numbered parameters can't be mixed with `it` either:
|
|
333
333
|
#
|
|
334
334
|
# [10, 20, 30].map { _1 + it }
|
|
335
|
-
# # SyntaxError:
|
|
335
|
+
# # SyntaxError: 'it' is not allowed when a numbered parameter is already used
|
|
336
336
|
#
|
|
337
337
|
# To avoid conflicts, naming local variables or method arguments `_1`, `_2` and
|
|
338
338
|
# so on, causes an error.
|
|
@@ -377,12 +377,11 @@ class Proc
|
|
|
377
377
|
def self.new: () { (?) -> untyped } -> instance
|
|
378
378
|
|
|
379
379
|
def clone: () -> self
|
|
380
|
-
def dup: () -> self
|
|
381
380
|
|
|
382
381
|
# <!-- rdoc-file=proc.c -->
|
|
383
|
-
# Invokes the block, setting the block's parameters to the
|
|
384
|
-
#
|
|
385
|
-
#
|
|
382
|
+
# Invokes the block, setting the block's parameters to the arguments using
|
|
383
|
+
# something close to method calling semantics. Returns the value of the last
|
|
384
|
+
# expression evaluated in the block.
|
|
386
385
|
#
|
|
387
386
|
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
|
388
387
|
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
|
@@ -390,13 +389,13 @@ class Proc
|
|
|
390
389
|
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
|
391
390
|
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
|
392
391
|
#
|
|
393
|
-
# Note that
|
|
394
|
-
# syntactic sugar to hide "call".
|
|
392
|
+
# Note that <code>prc.()</code> invokes <code>prc.call()</code> with the
|
|
393
|
+
# parameters given. It's syntactic sugar to hide "call".
|
|
395
394
|
#
|
|
396
|
-
# For procs created using #lambda or
|
|
397
|
-
# number of parameters are passed to the proc. For procs created
|
|
398
|
-
# or Kernel.proc, extra parameters are silently discarded and
|
|
399
|
-
# are set to `nil`.
|
|
395
|
+
# For procs created using #lambda or <code>->()</code> an error is generated if
|
|
396
|
+
# the wrong number of parameters are passed to the proc. For procs created
|
|
397
|
+
# using Proc.new or Kernel.proc, extra parameters are silently discarded and
|
|
398
|
+
# missing parameters are set to `nil`.
|
|
400
399
|
#
|
|
401
400
|
# a_proc = proc {|a,b| [a,b] }
|
|
402
401
|
# a_proc.call(1) #=> [1, nil]
|
|
@@ -409,9 +408,9 @@ class Proc
|
|
|
409
408
|
alias === call
|
|
410
409
|
|
|
411
410
|
# <!-- rdoc-file=proc.c -->
|
|
412
|
-
# Invokes the block, setting the block's parameters to the
|
|
413
|
-
#
|
|
414
|
-
#
|
|
411
|
+
# Invokes the block, setting the block's parameters to the arguments using
|
|
412
|
+
# something close to method calling semantics. Returns the value of the last
|
|
413
|
+
# expression evaluated in the block.
|
|
415
414
|
#
|
|
416
415
|
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
|
417
416
|
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
|
@@ -419,13 +418,13 @@ class Proc
|
|
|
419
418
|
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
|
420
419
|
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
|
421
420
|
#
|
|
422
|
-
# Note that
|
|
423
|
-
# syntactic sugar to hide "call".
|
|
421
|
+
# Note that <code>prc.()</code> invokes <code>prc.call()</code> with the
|
|
422
|
+
# parameters given. It's syntactic sugar to hide "call".
|
|
424
423
|
#
|
|
425
|
-
# For procs created using #lambda or
|
|
426
|
-
# number of parameters are passed to the proc. For procs created
|
|
427
|
-
# or Kernel.proc, extra parameters are silently discarded and
|
|
428
|
-
# are set to `nil`.
|
|
424
|
+
# For procs created using #lambda or <code>->()</code> an error is generated if
|
|
425
|
+
# the wrong number of parameters are passed to the proc. For procs created
|
|
426
|
+
# using Proc.new or Kernel.proc, extra parameters are silently discarded and
|
|
427
|
+
# missing parameters are set to `nil`.
|
|
429
428
|
#
|
|
430
429
|
# a_proc = proc {|a,b| [a,b] }
|
|
431
430
|
# a_proc.call(1) #=> [1, nil]
|
|
@@ -546,8 +545,8 @@ class Proc
|
|
|
546
545
|
# lambdas and have only a finite number of optional arguments; in this latter
|
|
547
546
|
# case, returns n. Keyword arguments will be considered as a single additional
|
|
548
547
|
# argument, that argument being mandatory if any keyword argument is mandatory.
|
|
549
|
-
# A #proc with no argument declarations is the same as a block declaring
|
|
550
|
-
# its arguments.
|
|
548
|
+
# A #proc with no argument declarations is the same as a block declaring
|
|
549
|
+
# <code>||</code> as its arguments.
|
|
551
550
|
#
|
|
552
551
|
# proc {}.arity #=> 0
|
|
553
552
|
# proc { || }.arity #=> 0
|
|
@@ -592,14 +591,13 @@ class Proc
|
|
|
592
591
|
|
|
593
592
|
# <!--
|
|
594
593
|
# rdoc-file=proc.c
|
|
595
|
-
# -
|
|
596
|
-
# -
|
|
597
|
-
# -
|
|
598
|
-
# - prc.yield(params,...) -> obj
|
|
594
|
+
# - call(...) -> obj
|
|
595
|
+
# - self[...] -> obj
|
|
596
|
+
# - yield(...) -> obj
|
|
599
597
|
# -->
|
|
600
|
-
# Invokes the block, setting the block's parameters to the
|
|
601
|
-
#
|
|
602
|
-
#
|
|
598
|
+
# Invokes the block, setting the block's parameters to the arguments using
|
|
599
|
+
# something close to method calling semantics. Returns the value of the last
|
|
600
|
+
# expression evaluated in the block.
|
|
603
601
|
#
|
|
604
602
|
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
|
605
603
|
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
|
@@ -607,13 +605,13 @@ class Proc
|
|
|
607
605
|
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
|
608
606
|
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
|
609
607
|
#
|
|
610
|
-
# Note that
|
|
611
|
-
# syntactic sugar to hide "call".
|
|
608
|
+
# Note that <code>prc.()</code> invokes <code>prc.call()</code> with the
|
|
609
|
+
# parameters given. It's syntactic sugar to hide "call".
|
|
612
610
|
#
|
|
613
|
-
# For procs created using #lambda or
|
|
614
|
-
# number of parameters are passed to the proc. For procs created
|
|
615
|
-
# or Kernel.proc, extra parameters are silently discarded and
|
|
616
|
-
# are set to `nil`.
|
|
611
|
+
# For procs created using #lambda or <code>->()</code> an error is generated if
|
|
612
|
+
# the wrong number of parameters are passed to the proc. For procs created
|
|
613
|
+
# using Proc.new or Kernel.proc, extra parameters are silently discarded and
|
|
614
|
+
# missing parameters are set to `nil`.
|
|
617
615
|
#
|
|
618
616
|
# a_proc = proc {|a,b| [a,b] }
|
|
619
617
|
# a_proc.call(1) #=> [1, nil]
|
|
@@ -626,9 +624,9 @@ class Proc
|
|
|
626
624
|
def call: (?) -> untyped
|
|
627
625
|
|
|
628
626
|
# <!-- rdoc-file=proc.c -->
|
|
629
|
-
# Invokes the block, setting the block's parameters to the
|
|
630
|
-
#
|
|
631
|
-
#
|
|
627
|
+
# Invokes the block, setting the block's parameters to the arguments using
|
|
628
|
+
# something close to method calling semantics. Returns the value of the last
|
|
629
|
+
# expression evaluated in the block.
|
|
632
630
|
#
|
|
633
631
|
# a_proc = Proc.new {|scalar, *values| values.map {|value| value*scalar } }
|
|
634
632
|
# a_proc.call(9, 1, 2, 3) #=> [9, 18, 27]
|
|
@@ -636,13 +634,13 @@ class Proc
|
|
|
636
634
|
# a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
|
|
637
635
|
# a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
|
|
638
636
|
#
|
|
639
|
-
# Note that
|
|
640
|
-
# syntactic sugar to hide "call".
|
|
637
|
+
# Note that <code>prc.()</code> invokes <code>prc.call()</code> with the
|
|
638
|
+
# parameters given. It's syntactic sugar to hide "call".
|
|
641
639
|
#
|
|
642
|
-
# For procs created using #lambda or
|
|
643
|
-
# number of parameters are passed to the proc. For procs created
|
|
644
|
-
# or Kernel.proc, extra parameters are silently discarded and
|
|
645
|
-
# are set to `nil`.
|
|
640
|
+
# For procs created using #lambda or <code>->()</code> an error is generated if
|
|
641
|
+
# the wrong number of parameters are passed to the proc. For procs created
|
|
642
|
+
# using Proc.new or Kernel.proc, extra parameters are silently discarded and
|
|
643
|
+
# missing parameters are set to `nil`.
|
|
646
644
|
#
|
|
647
645
|
# a_proc = proc {|a,b| [a,b] }
|
|
648
646
|
# a_proc.call(1) #=> [1, nil]
|
|
@@ -749,7 +747,7 @@ class Proc
|
|
|
749
747
|
# Proc.new {}.lambda? #=> false
|
|
750
748
|
#
|
|
751
749
|
# `lambda`, `proc` and Proc.new preserve the tricks of a Proc object given by
|
|
752
|
-
#
|
|
750
|
+
# <code>&</code> argument.
|
|
753
751
|
#
|
|
754
752
|
# lambda(&lambda {}).lambda? #=> true
|
|
755
753
|
# proc(&lambda {}).lambda? #=> true
|
|
@@ -759,13 +757,13 @@ class Proc
|
|
|
759
757
|
# proc(&proc {}).lambda? #=> false
|
|
760
758
|
# Proc.new(&proc {}).lambda? #=> false
|
|
761
759
|
#
|
|
762
|
-
# A Proc object generated by
|
|
760
|
+
# A Proc object generated by <code>&</code> argument has the tricks
|
|
763
761
|
#
|
|
764
762
|
# def n(&b) b.lambda? end
|
|
765
763
|
# n {} #=> false
|
|
766
764
|
#
|
|
767
|
-
# The
|
|
768
|
-
# argument.
|
|
765
|
+
# The <code>&</code> argument preserves the tricks if a Proc object is given by
|
|
766
|
+
# <code>&</code> argument.
|
|
769
767
|
#
|
|
770
768
|
# n(&lambda {}) #=> true
|
|
771
769
|
# n(&proc {}) #=> false
|
|
@@ -835,10 +833,49 @@ class Proc
|
|
|
835
833
|
|
|
836
834
|
# <!--
|
|
837
835
|
# rdoc-file=proc.c
|
|
838
|
-
# -
|
|
836
|
+
# - proc.ruby2_keywords -> proc
|
|
839
837
|
# -->
|
|
840
|
-
#
|
|
841
|
-
#
|
|
838
|
+
# Marks the proc as passing keywords through a normal argument splat. This
|
|
839
|
+
# should only be called on procs that accept an argument splat
|
|
840
|
+
# (<code>*args</code>) but not explicit keywords or a keyword splat. It marks
|
|
841
|
+
# the proc such that if the proc is called with keyword arguments, the final
|
|
842
|
+
# hash argument is marked with a special flag such that if it is the final
|
|
843
|
+
# element of a normal argument splat to another method call, and that method
|
|
844
|
+
# call does not include explicit keywords or a keyword splat, the final element
|
|
845
|
+
# is interpreted as keywords. In other words, keywords will be passed through
|
|
846
|
+
# the proc to other methods.
|
|
847
|
+
#
|
|
848
|
+
# This should only be used for procs that delegate keywords to another method,
|
|
849
|
+
# and only for backwards compatibility with Ruby versions before 2.7.
|
|
850
|
+
#
|
|
851
|
+
# This method will probably be removed at some point, as it exists only for
|
|
852
|
+
# backwards compatibility. As it does not exist in Ruby versions before 2.7,
|
|
853
|
+
# check that the proc responds to this method before calling it. Also, be aware
|
|
854
|
+
# that if this method is removed, the behavior of the proc will change so that
|
|
855
|
+
# it does not pass through keywords.
|
|
856
|
+
#
|
|
857
|
+
# module Mod
|
|
858
|
+
# foo = ->(meth, *args, &block) do
|
|
859
|
+
# send(:"do_#{meth}", *args, &block)
|
|
860
|
+
# end
|
|
861
|
+
# foo.ruby2_keywords if foo.respond_to?(:ruby2_keywords)
|
|
862
|
+
# end
|
|
863
|
+
#
|
|
864
|
+
def ruby2_keywords: () -> self
|
|
865
|
+
|
|
866
|
+
# <!--
|
|
867
|
+
# rdoc-file=proc.c
|
|
868
|
+
# - prc.source_location -> [String, Integer, Integer, Integer, Integer]
|
|
869
|
+
# -->
|
|
870
|
+
# Returns the location where the Proc was defined. The returned Array contains:
|
|
871
|
+
# (1) the Ruby source filename
|
|
872
|
+
# (2) the line number where the definition starts
|
|
873
|
+
# (3) the column number where the definition starts
|
|
874
|
+
# (4) the line number where the definition ends
|
|
875
|
+
# (5) the column number where the definitions ends
|
|
876
|
+
#
|
|
877
|
+
# This method will return `nil` if the Proc was not defined in Ruby (i.e.
|
|
878
|
+
# native).
|
|
842
879
|
#
|
|
843
880
|
def source_location: () -> [String, Integer]?
|
|
844
881
|
|