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.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. 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
- # `&`-deconstruction to a block of code:
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 `&` operator, and therefore can be consumed by iterators.
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, Method, and
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
- # # ^~ `it` is not allowed when an ordinary parameter is defined
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, nil]]
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: `it` is not allowed when a numbered parameter is already used
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 values in *params*
384
- # using something close to method calling semantics. Returns the value of the
385
- # last expression evaluated in the block.
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 `prc.()` invokes `prc.call()` with the parameters given. It's
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 `->()` an error is generated if the wrong
397
- # number of parameters are passed to the proc. For procs created using Proc.new
398
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
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 values in *params*
413
- # using something close to method calling semantics. Returns the value of the
414
- # last expression evaluated in the block.
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 `prc.()` invokes `prc.call()` with the parameters given. It's
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 `->()` an error is generated if the wrong
426
- # number of parameters are passed to the proc. For procs created using Proc.new
427
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
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 `||` as
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
- # - prc.call(params,...) -> obj
596
- # - prc[params,...] -> obj
597
- # - prc.(params,...) -> obj
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 values in *params*
601
- # using something close to method calling semantics. Returns the value of the
602
- # last expression evaluated in the block.
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 `prc.()` invokes `prc.call()` with the parameters given. It's
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 `->()` an error is generated if the wrong
614
- # number of parameters are passed to the proc. For procs created using Proc.new
615
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
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 values in *params*
630
- # using something close to method calling semantics. Returns the value of the
631
- # last expression evaluated in the block.
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 `prc.()` invokes `prc.call()` with the parameters given. It's
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 `->()` an error is generated if the wrong
643
- # number of parameters are passed to the proc. For procs created using Proc.new
644
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
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
- # `&` argument.
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 `&` argument has the tricks
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 `&` argument preserves the tricks if a Proc object is given by `&`
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
- # - prc.source_location -> [String, Integer]
836
+ # - proc.ruby2_keywords -> proc
839
837
  # -->
840
- # Returns the Ruby source filename and line number containing this proc or `nil`
841
- # if this proc was not defined in Ruby (i.e. native).
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