rbs 3.10.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 (267) 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 +7 -5
  5. data/.github/workflows/comments.yml +2 -2
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +16 -26
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +1 -1
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +2 -2
  12. data/.vscode/extensions.json +5 -0
  13. data/.vscode/settings.json +19 -0
  14. data/CHANGELOG.md +202 -2
  15. data/Rakefile +9 -23
  16. data/Steepfile +2 -0
  17. data/config.yml +457 -13
  18. data/core/array.rbs +218 -188
  19. data/core/basic_object.rbs +9 -8
  20. data/core/binding.rbs +0 -2
  21. data/core/builtin.rbs +2 -2
  22. data/core/class.rbs +6 -5
  23. data/core/comparable.rbs +45 -31
  24. data/core/complex.rbs +66 -55
  25. data/core/dir.rbs +57 -45
  26. data/core/encoding.rbs +6 -6
  27. data/core/enumerable.rbs +105 -91
  28. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  29. data/core/enumerator.rbs +24 -3
  30. data/core/errno.rbs +3 -2
  31. data/core/errors.rbs +31 -29
  32. data/core/exception.rbs +12 -12
  33. data/core/fiber.rbs +47 -36
  34. data/core/file.rbs +242 -169
  35. data/core/file_test.rbs +2 -2
  36. data/core/float.rbs +42 -68
  37. data/core/gc.rbs +78 -70
  38. data/core/hash.rbs +70 -60
  39. data/core/integer.rbs +32 -75
  40. data/core/io/buffer.rbs +36 -36
  41. data/core/io/wait.rbs +7 -7
  42. data/core/io.rbs +192 -146
  43. data/core/kernel.rbs +198 -147
  44. data/core/marshal.rbs +3 -3
  45. data/core/match_data.rbs +14 -12
  46. data/core/math.rbs +69 -67
  47. data/core/method.rbs +6 -8
  48. data/core/module.rbs +148 -88
  49. data/core/nil_class.rbs +4 -3
  50. data/core/numeric.rbs +53 -50
  51. data/core/object.rbs +6 -8
  52. data/core/object_space.rbs +11 -10
  53. data/core/pathname.rbs +131 -81
  54. data/core/proc.rbs +65 -34
  55. data/core/process.rbs +221 -201
  56. data/core/ractor.rbs +15 -11
  57. data/core/random.rbs +21 -3
  58. data/core/range.rbs +152 -49
  59. data/core/rational.rbs +5 -56
  60. data/core/rbs/unnamed/argf.rbs +58 -51
  61. data/core/rbs/unnamed/env_class.rbs +18 -13
  62. data/core/rbs/unnamed/main_class.rbs +123 -0
  63. data/core/rbs/unnamed/random.rbs +7 -116
  64. data/core/regexp.rbs +236 -197
  65. data/core/ruby.rbs +1 -1
  66. data/core/ruby_vm.rbs +32 -30
  67. data/core/rubygems/config_file.rbs +5 -5
  68. data/core/rubygems/errors.rbs +1 -1
  69. data/core/rubygems/requirement.rbs +5 -5
  70. data/core/rubygems/rubygems.rbs +5 -3
  71. data/core/set.rbs +17 -16
  72. data/core/signal.rbs +2 -2
  73. data/core/string.rbs +318 -298
  74. data/core/struct.rbs +26 -25
  75. data/core/symbol.rbs +25 -24
  76. data/core/thread.rbs +40 -41
  77. data/core/time.rbs +47 -42
  78. data/core/trace_point.rbs +34 -31
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +10 -10
  81. data/core/warning.rbs +7 -7
  82. data/docs/collection.md +1 -1
  83. data/docs/config.md +171 -0
  84. data/docs/inline.md +576 -0
  85. data/docs/syntax.md +46 -16
  86. data/docs/type_fingerprint.md +21 -0
  87. data/exe/rbs +1 -1
  88. data/ext/rbs_extension/ast_translation.c +595 -98
  89. data/ext/rbs_extension/class_constants.c +30 -0
  90. data/ext/rbs_extension/class_constants.h +15 -0
  91. data/ext/rbs_extension/legacy_location.c +30 -53
  92. data/ext/rbs_extension/legacy_location.h +37 -0
  93. data/ext/rbs_extension/main.c +125 -24
  94. data/include/rbs/ast.h +485 -150
  95. data/include/rbs/lexer.h +11 -4
  96. data/include/rbs/location.h +25 -44
  97. data/include/rbs/parser.h +20 -2
  98. data/include/rbs/util/rbs_constant_pool.h +0 -3
  99. data/include/rbs.h +8 -0
  100. data/lib/rbs/ast/annotation.rb +1 -1
  101. data/lib/rbs/ast/comment.rb +1 -1
  102. data/lib/rbs/ast/declarations.rb +10 -10
  103. data/lib/rbs/ast/members.rb +14 -14
  104. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  105. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  106. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  107. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  108. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  109. data/lib/rbs/ast/ruby/members.rb +723 -0
  110. data/lib/rbs/ast/type_param.rb +24 -4
  111. data/lib/rbs/buffer.rb +105 -20
  112. data/lib/rbs/cli/diff.rb +16 -15
  113. data/lib/rbs/cli/validate.rb +62 -125
  114. data/lib/rbs/cli.rb +55 -23
  115. data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
  116. data/lib/rbs/collection/sources/git.rb +1 -0
  117. data/lib/rbs/collection.rb +0 -1
  118. data/lib/rbs/definition.rb +6 -1
  119. data/lib/rbs/definition_builder/ancestor_builder.rb +119 -63
  120. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  121. data/lib/rbs/definition_builder.rb +177 -20
  122. data/lib/rbs/diff.rb +7 -1
  123. data/lib/rbs/environment/class_entry.rb +69 -0
  124. data/lib/rbs/environment/module_entry.rb +66 -0
  125. data/lib/rbs/environment.rb +338 -155
  126. data/lib/rbs/environment_loader.rb +2 -2
  127. data/lib/rbs/errors.rb +30 -20
  128. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  129. data/lib/rbs/inline_parser.rb +542 -0
  130. data/lib/rbs/location_aux.rb +36 -4
  131. data/lib/rbs/locator.rb +5 -1
  132. data/lib/rbs/method_type.rb +5 -3
  133. data/lib/rbs/namespace.rb +0 -7
  134. data/lib/rbs/parser_aux.rb +31 -8
  135. data/lib/rbs/prototype/helpers.rb +57 -0
  136. data/lib/rbs/prototype/rb.rb +3 -28
  137. data/lib/rbs/prototype/rbi.rb +3 -20
  138. data/lib/rbs/prototype/runtime.rb +10 -2
  139. data/lib/rbs/resolver/type_name_resolver.rb +0 -8
  140. data/lib/rbs/source.rb +99 -0
  141. data/lib/rbs/subtractor.rb +4 -3
  142. data/lib/rbs/test/type_check.rb +5 -2
  143. data/lib/rbs/type_name.rb +1 -8
  144. data/lib/rbs/types.rb +88 -78
  145. data/lib/rbs/unit_test/convertibles.rb +1 -0
  146. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  147. data/lib/rbs/validator.rb +2 -2
  148. data/lib/rbs/version.rb +1 -1
  149. data/lib/rbs.rb +12 -1
  150. data/rbs.gemspec +3 -2
  151. data/rust/.gitignore +1 -0
  152. data/rust/Cargo.lock +378 -0
  153. data/rust/Cargo.toml +7 -0
  154. data/rust/ruby-rbs/Cargo.toml +22 -0
  155. data/rust/ruby-rbs/build.rs +764 -0
  156. data/rust/ruby-rbs/examples/locations.rs +60 -0
  157. data/rust/ruby-rbs/src/lib.rs +1 -0
  158. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  159. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  160. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  161. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  162. data/rust/ruby-rbs-sys/build.rs +204 -0
  163. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  164. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  165. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  166. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  167. data/schema/typeParam.json +17 -1
  168. data/sig/ancestor_builder.rbs +1 -1
  169. data/sig/ast/ruby/annotations.rbs +421 -0
  170. data/sig/ast/ruby/comment_block.rbs +127 -0
  171. data/sig/ast/ruby/declarations.rbs +158 -0
  172. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  173. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  174. data/sig/ast/ruby/members.rbs +178 -0
  175. data/sig/buffer.rbs +63 -5
  176. data/sig/cli/diff.rbs +5 -11
  177. data/sig/cli/validate.rbs +12 -8
  178. data/sig/cli.rbs +18 -18
  179. data/sig/definition.rbs +6 -0
  180. data/sig/definition_builder.rbs +3 -1
  181. data/sig/environment/class_entry.rbs +50 -0
  182. data/sig/environment/module_entry.rbs +50 -0
  183. data/sig/environment.rbs +37 -81
  184. data/sig/errors.rbs +26 -20
  185. data/sig/inline_parser/comment_association.rbs +71 -0
  186. data/sig/inline_parser.rbs +124 -0
  187. data/sig/location.rbs +32 -7
  188. data/sig/locator.rbs +0 -2
  189. data/sig/method_builder.rbs +9 -4
  190. data/sig/namespace.rbs +0 -5
  191. data/sig/parser.rbs +47 -13
  192. data/sig/prototype/helpers.rbs +2 -0
  193. data/sig/resolver/type_name_resolver.rbs +0 -3
  194. data/sig/source.rbs +48 -0
  195. data/sig/type_param.rbs +13 -8
  196. data/sig/typename.rbs +0 -5
  197. data/sig/types.rbs +6 -7
  198. data/sig/unit_test/spy.rbs +0 -8
  199. data/sig/unit_test/type_assertions.rbs +11 -0
  200. data/src/ast.c +491 -143
  201. data/src/lexer.c +1552 -1314
  202. data/src/lexer.re +7 -0
  203. data/src/lexstate.c +8 -1
  204. data/src/location.c +8 -48
  205. data/src/parser.c +1107 -409
  206. data/src/util/rbs_constant_pool.c +0 -4
  207. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  208. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  209. data/stdlib/coverage/0/coverage.rbs +4 -3
  210. data/stdlib/date/0/date.rbs +33 -28
  211. data/stdlib/date/0/date_time.rbs +24 -23
  212. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  213. data/stdlib/digest/0/digest.rbs +110 -0
  214. data/stdlib/erb/0/erb.rbs +64 -53
  215. data/stdlib/etc/0/etc.rbs +55 -50
  216. data/stdlib/fileutils/0/fileutils.rbs +140 -126
  217. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  218. data/stdlib/io-console/0/io-console.rbs +2 -2
  219. data/stdlib/json/0/json.rbs +158 -131
  220. data/stdlib/monitor/0/monitor.rbs +3 -3
  221. data/stdlib/net-http/0/net-http.rbs +159 -134
  222. data/stdlib/objspace/0/objspace.rbs +8 -30
  223. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  224. data/stdlib/open3/0/open3.rbs +469 -10
  225. data/stdlib/openssl/0/openssl.rbs +144 -129
  226. data/stdlib/optparse/0/optparse.rbs +23 -14
  227. data/stdlib/pathname/0/pathname.rbs +2 -2
  228. data/stdlib/pp/0/pp.rbs +9 -8
  229. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  230. data/stdlib/pstore/0/pstore.rbs +35 -30
  231. data/stdlib/psych/0/psych.rbs +62 -9
  232. data/stdlib/psych/0/store.rbs +2 -4
  233. data/stdlib/pty/0/pty.rbs +9 -6
  234. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  235. data/stdlib/rdoc/0/code_object.rbs +2 -1
  236. data/stdlib/rdoc/0/parser.rbs +1 -1
  237. data/stdlib/rdoc/0/store.rbs +1 -1
  238. data/stdlib/ripper/0/ripper.rbs +20 -17
  239. data/stdlib/securerandom/0/manifest.yaml +2 -0
  240. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  241. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  242. data/stdlib/socket/0/addrinfo.rbs +9 -9
  243. data/stdlib/socket/0/basic_socket.rbs +3 -3
  244. data/stdlib/socket/0/ip_socket.rbs +10 -8
  245. data/stdlib/socket/0/socket.rbs +10 -9
  246. data/stdlib/socket/0/tcp_server.rbs +1 -1
  247. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  248. data/stdlib/socket/0/udp_socket.rbs +1 -1
  249. data/stdlib/socket/0/unix_server.rbs +1 -1
  250. data/stdlib/stringio/0/stringio.rbs +55 -54
  251. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  252. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  253. data/stdlib/time/0/time.rbs +7 -5
  254. data/stdlib/tsort/0/tsort.rbs +7 -6
  255. data/stdlib/uri/0/common.rbs +31 -18
  256. data/stdlib/uri/0/file.rbs +2 -2
  257. data/stdlib/uri/0/generic.rbs +9 -2
  258. data/stdlib/uri/0/http.rbs +2 -2
  259. data/stdlib/uri/0/ldap.rbs +2 -2
  260. data/stdlib/uri/0/mailto.rbs +3 -3
  261. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  262. data/stdlib/zlib/0/deflate.rbs +4 -3
  263. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  264. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  265. data/stdlib/zlib/0/inflate.rbs +1 -1
  266. data/stdlib/zlib/0/need_dict.rbs +1 -1
  267. metadata +66 -3
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)
@@ -377,7 +377,6 @@ 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
382
  # Invokes the block, setting the block's parameters to the arguments using
@@ -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]
@@ -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
@@ -606,13 +605,13 @@ class Proc
606
605
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
607
606
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
608
607
  #
609
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
610
- # 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".
611
610
  #
612
- # For procs created using #lambda or `->()` an error is generated if the wrong
613
- # number of parameters are passed to the proc. For procs created using Proc.new
614
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
615
- # 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`.
616
615
  #
617
616
  # a_proc = proc {|a,b| [a,b] }
618
617
  # a_proc.call(1) #=> [1, nil]
@@ -635,13 +634,13 @@ class Proc
635
634
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
636
635
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
637
636
  #
638
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
639
- # 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".
640
639
  #
641
- # For procs created using #lambda or `->()` an error is generated if the wrong
642
- # number of parameters are passed to the proc. For procs created using Proc.new
643
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
644
- # 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`.
645
644
  #
646
645
  # a_proc = proc {|a,b| [a,b] }
647
646
  # a_proc.call(1) #=> [1, nil]
@@ -748,7 +747,7 @@ class Proc
748
747
  # Proc.new {}.lambda? #=> false
749
748
  #
750
749
  # `lambda`, `proc` and Proc.new preserve the tricks of a Proc object given by
751
- # `&` argument.
750
+ # <code>&</code> argument.
752
751
  #
753
752
  # lambda(&lambda {}).lambda? #=> true
754
753
  # proc(&lambda {}).lambda? #=> true
@@ -758,13 +757,13 @@ class Proc
758
757
  # proc(&proc {}).lambda? #=> false
759
758
  # Proc.new(&proc {}).lambda? #=> false
760
759
  #
761
- # A Proc object generated by `&` argument has the tricks
760
+ # A Proc object generated by <code>&</code> argument has the tricks
762
761
  #
763
762
  # def n(&b) b.lambda? end
764
763
  # n {} #=> false
765
764
  #
766
- # The `&` argument preserves the tricks if a Proc object is given by `&`
767
- # argument.
765
+ # The <code>&</code> argument preserves the tricks if a Proc object is given by
766
+ # <code>&</code> argument.
768
767
  #
769
768
  # n(&lambda {}) #=> true
770
769
  # n(&proc {}) #=> false
@@ -832,6 +831,38 @@ class Proc
832
831
  #
833
832
  def parameters: (?lambda: boolish) -> Method::param_types
834
833
 
834
+ # <!--
835
+ # rdoc-file=proc.c
836
+ # - proc.ruby2_keywords -> proc
837
+ # -->
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
+
835
866
  # <!--
836
867
  # rdoc-file=proc.c
837
868
  # - prc.source_location -> [String, Integer, Integer, Integer, Integer]