rbs 4.0.0.dev.5 → 4.0.1.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.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/workflows/c-check.yml +8 -4
  4. data/.github/workflows/comments.yml +3 -1
  5. data/.github/workflows/dependabot.yml +1 -1
  6. data/.github/workflows/ruby.yml +10 -0
  7. data/.github/workflows/rust.yml +95 -0
  8. data/CHANGELOG.md +323 -0
  9. data/Rakefile +12 -29
  10. data/Steepfile +1 -0
  11. data/config.yml +393 -37
  12. data/core/array.rbs +218 -188
  13. data/core/basic_object.rbs +9 -8
  14. data/core/class.rbs +6 -5
  15. data/core/comparable.rbs +45 -31
  16. data/core/complex.rbs +52 -40
  17. data/core/dir.rbs +57 -45
  18. data/core/encoding.rbs +5 -5
  19. data/core/enumerable.rbs +96 -91
  20. data/core/enumerator.rbs +4 -3
  21. data/core/errno.rbs +3 -2
  22. data/core/errors.rbs +31 -29
  23. data/core/exception.rbs +12 -12
  24. data/core/fiber.rbs +36 -36
  25. data/core/file.rbs +186 -113
  26. data/core/file_test.rbs +2 -2
  27. data/core/float.rbs +41 -32
  28. data/core/gc.rbs +78 -70
  29. data/core/hash.rbs +70 -60
  30. data/core/integer.rbs +32 -28
  31. data/core/io/buffer.rbs +36 -36
  32. data/core/io/wait.rbs +7 -7
  33. data/core/io.rbs +120 -135
  34. data/core/kernel.rbs +189 -139
  35. data/core/marshal.rbs +3 -3
  36. data/core/match_data.rbs +14 -12
  37. data/core/math.rbs +69 -67
  38. data/core/method.rbs +6 -6
  39. data/core/module.rbs +146 -85
  40. data/core/nil_class.rbs +4 -3
  41. data/core/numeric.rbs +35 -32
  42. data/core/object.rbs +6 -8
  43. data/core/object_space.rbs +11 -10
  44. data/core/pathname.rbs +131 -81
  45. data/core/proc.rbs +65 -33
  46. data/core/process.rbs +219 -201
  47. data/core/ractor.rbs +15 -11
  48. data/core/random.rbs +4 -3
  49. data/core/range.rbs +52 -47
  50. data/core/rational.rbs +5 -5
  51. data/core/rbs/unnamed/argf.rbs +58 -51
  52. data/core/rbs/unnamed/env_class.rbs +18 -13
  53. data/core/rbs/unnamed/main_class.rbs +123 -0
  54. data/core/rbs/unnamed/random.rbs +7 -5
  55. data/core/regexp.rbs +236 -197
  56. data/core/ruby.rbs +1 -1
  57. data/core/ruby_vm.rbs +32 -30
  58. data/core/rubygems/config_file.rbs +5 -5
  59. data/core/rubygems/errors.rbs +1 -1
  60. data/core/rubygems/requirement.rbs +5 -5
  61. data/core/rubygems/rubygems.rbs +5 -3
  62. data/core/set.rbs +17 -16
  63. data/core/signal.rbs +2 -2
  64. data/core/string.rbs +311 -292
  65. data/core/struct.rbs +26 -25
  66. data/core/symbol.rbs +25 -24
  67. data/core/thread.rbs +40 -34
  68. data/core/time.rbs +47 -42
  69. data/core/trace_point.rbs +34 -31
  70. data/core/true_class.rbs +2 -2
  71. data/core/unbound_method.rbs +10 -10
  72. data/core/warning.rbs +7 -7
  73. data/docs/collection.md +1 -1
  74. data/docs/config.md +171 -0
  75. data/docs/inline.md +110 -4
  76. data/docs/syntax.md +13 -12
  77. data/ext/rbs_extension/ast_translation.c +489 -135
  78. data/ext/rbs_extension/class_constants.c +8 -0
  79. data/ext/rbs_extension/class_constants.h +4 -0
  80. data/ext/rbs_extension/legacy_location.c +28 -51
  81. data/ext/rbs_extension/legacy_location.h +37 -0
  82. data/ext/rbs_extension/main.c +12 -20
  83. data/include/rbs/ast.h +423 -195
  84. data/include/rbs/lexer.h +2 -2
  85. data/include/rbs/location.h +25 -44
  86. data/include/rbs/parser.h +2 -2
  87. data/include/rbs/util/rbs_constant_pool.h +0 -3
  88. data/include/rbs.h +8 -0
  89. data/lib/rbs/ast/ruby/annotations.rb +157 -4
  90. data/lib/rbs/ast/ruby/members.rb +374 -22
  91. data/lib/rbs/cli/validate.rb +5 -60
  92. data/lib/rbs/collection/config/lockfile_generator.rb +6 -2
  93. data/lib/rbs/definition_builder.rb +60 -27
  94. data/lib/rbs/errors.rb +0 -11
  95. data/lib/rbs/inline_parser.rb +1 -1
  96. data/lib/rbs/parser_aux.rb +20 -7
  97. data/lib/rbs/prototype/helpers.rb +57 -0
  98. data/lib/rbs/prototype/rb.rb +1 -26
  99. data/lib/rbs/prototype/rbi.rb +1 -20
  100. data/lib/rbs/test/type_check.rb +3 -0
  101. data/lib/rbs/types.rb +62 -52
  102. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  103. data/lib/rbs/version.rb +1 -1
  104. data/lib/rbs.rb +0 -1
  105. data/rbs.gemspec +1 -1
  106. data/rust/.gitignore +1 -0
  107. data/rust/Cargo.lock +378 -0
  108. data/rust/Cargo.toml +7 -0
  109. data/rust/ruby-rbs/Cargo.toml +22 -0
  110. data/rust/ruby-rbs/build.rs +764 -0
  111. data/rust/ruby-rbs/examples/locations.rs +60 -0
  112. data/rust/ruby-rbs/src/lib.rs +1 -0
  113. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  114. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  115. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  116. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  117. data/rust/ruby-rbs-sys/build.rs +204 -0
  118. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  119. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  120. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  121. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  122. data/sig/ast/ruby/annotations.rbs +191 -4
  123. data/sig/ast/ruby/members.rbs +21 -1
  124. data/sig/cli/validate.rbs +1 -6
  125. data/sig/definition_builder.rbs +2 -0
  126. data/sig/errors.rbs +0 -8
  127. data/sig/method_types.rbs +1 -1
  128. data/sig/parser.rbs +17 -13
  129. data/sig/prototype/helpers.rbs +2 -0
  130. data/sig/types.rbs +10 -11
  131. data/sig/unit_test/spy.rbs +0 -8
  132. data/sig/unit_test/type_assertions.rbs +11 -0
  133. data/src/ast.c +339 -161
  134. data/src/lexstate.c +1 -1
  135. data/src/location.c +7 -47
  136. data/src/parser.c +674 -480
  137. data/src/util/rbs_constant_pool.c +0 -4
  138. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
  139. data/stdlib/cgi-escape/0/escape.rbs +4 -4
  140. data/stdlib/coverage/0/coverage.rbs +4 -3
  141. data/stdlib/date/0/date.rbs +33 -28
  142. data/stdlib/date/0/date_time.rbs +24 -23
  143. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  144. data/stdlib/erb/0/erb.rbs +64 -53
  145. data/stdlib/etc/0/etc.rbs +55 -50
  146. data/stdlib/fileutils/0/fileutils.rbs +138 -125
  147. data/stdlib/forwardable/0/forwardable.rbs +10 -10
  148. data/stdlib/io-console/0/io-console.rbs +2 -2
  149. data/stdlib/json/0/json.rbs +135 -108
  150. data/stdlib/monitor/0/monitor.rbs +3 -3
  151. data/stdlib/net-http/0/net-http.rbs +159 -134
  152. data/stdlib/objspace/0/objspace.rbs +8 -7
  153. data/stdlib/open-uri/0/open-uri.rbs +8 -8
  154. data/stdlib/open3/0/open3.rbs +36 -35
  155. data/stdlib/openssl/0/openssl.rbs +144 -129
  156. data/stdlib/optparse/0/optparse.rbs +18 -14
  157. data/stdlib/pathname/0/pathname.rbs +2 -2
  158. data/stdlib/pp/0/pp.rbs +9 -8
  159. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  160. data/stdlib/pstore/0/pstore.rbs +35 -30
  161. data/stdlib/psych/0/psych.rbs +61 -8
  162. data/stdlib/psych/0/store.rbs +2 -4
  163. data/stdlib/pty/0/pty.rbs +9 -6
  164. data/stdlib/random-formatter/0/random-formatter.rbs +2 -2
  165. data/stdlib/ripper/0/ripper.rbs +20 -17
  166. data/stdlib/securerandom/0/securerandom.rbs +1 -1
  167. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  168. data/stdlib/socket/0/addrinfo.rbs +7 -7
  169. data/stdlib/socket/0/basic_socket.rbs +3 -3
  170. data/stdlib/socket/0/ip_socket.rbs +10 -8
  171. data/stdlib/socket/0/socket.rbs +10 -9
  172. data/stdlib/socket/0/tcp_server.rbs +1 -1
  173. data/stdlib/socket/0/tcp_socket.rbs +1 -1
  174. data/stdlib/socket/0/udp_socket.rbs +1 -1
  175. data/stdlib/socket/0/unix_server.rbs +1 -1
  176. data/stdlib/stringio/0/stringio.rbs +55 -54
  177. data/stdlib/strscan/0/string_scanner.rbs +46 -44
  178. data/stdlib/tempfile/0/tempfile.rbs +24 -20
  179. data/stdlib/time/0/time.rbs +7 -5
  180. data/stdlib/tsort/0/tsort.rbs +7 -6
  181. data/stdlib/uri/0/common.rbs +26 -18
  182. data/stdlib/uri/0/file.rbs +2 -2
  183. data/stdlib/uri/0/generic.rbs +2 -2
  184. data/stdlib/uri/0/http.rbs +2 -2
  185. data/stdlib/uri/0/ldap.rbs +2 -2
  186. data/stdlib/uri/0/mailto.rbs +3 -3
  187. data/stdlib/uri/0/rfc2396_parser.rbs +6 -5
  188. data/stdlib/zlib/0/deflate.rbs +4 -3
  189. data/stdlib/zlib/0/gzip_reader.rbs +4 -4
  190. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  191. data/stdlib/zlib/0/inflate.rbs +1 -1
  192. data/stdlib/zlib/0/need_dict.rbs +1 -1
  193. metadata +23 -5
  194. data/.github/workflows/valgrind.yml +0 -42
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)
@@ -389,13 +389,13 @@ class Proc
389
389
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
390
390
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
391
391
  #
392
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
393
- # 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".
394
394
  #
395
- # For procs created using #lambda or `->()` an error is generated if the wrong
396
- # number of parameters are passed to the proc. For procs created using Proc.new
397
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
398
- # 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`.
399
399
  #
400
400
  # a_proc = proc {|a,b| [a,b] }
401
401
  # a_proc.call(1) #=> [1, nil]
@@ -418,13 +418,13 @@ class Proc
418
418
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
419
419
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
420
420
  #
421
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
422
- # 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".
423
423
  #
424
- # For procs created using #lambda or `->()` an error is generated if the wrong
425
- # number of parameters are passed to the proc. For procs created using Proc.new
426
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
427
- # 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`.
428
428
  #
429
429
  # a_proc = proc {|a,b| [a,b] }
430
430
  # a_proc.call(1) #=> [1, nil]
@@ -545,8 +545,8 @@ class Proc
545
545
  # lambdas and have only a finite number of optional arguments; in this latter
546
546
  # case, returns n. Keyword arguments will be considered as a single additional
547
547
  # argument, that argument being mandatory if any keyword argument is mandatory.
548
- # A #proc with no argument declarations is the same as a block declaring `||` as
549
- # its arguments.
548
+ # A #proc with no argument declarations is the same as a block declaring
549
+ # <code>||</code> as its arguments.
550
550
  #
551
551
  # proc {}.arity #=> 0
552
552
  # proc { || }.arity #=> 0
@@ -605,13 +605,13 @@ class Proc
605
605
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
606
606
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
607
607
  #
608
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
609
- # 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".
610
610
  #
611
- # For procs created using #lambda or `->()` an error is generated if the wrong
612
- # number of parameters are passed to the proc. For procs created using Proc.new
613
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
614
- # 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`.
615
615
  #
616
616
  # a_proc = proc {|a,b| [a,b] }
617
617
  # a_proc.call(1) #=> [1, nil]
@@ -634,13 +634,13 @@ class Proc
634
634
  # a_proc.(9, 1, 2, 3) #=> [9, 18, 27]
635
635
  # a_proc.yield(9, 1, 2, 3) #=> [9, 18, 27]
636
636
  #
637
- # Note that `prc.()` invokes `prc.call()` with the parameters given. It's
638
- # 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".
639
639
  #
640
- # For procs created using #lambda or `->()` an error is generated if the wrong
641
- # number of parameters are passed to the proc. For procs created using Proc.new
642
- # or Kernel.proc, extra parameters are silently discarded and missing parameters
643
- # 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`.
644
644
  #
645
645
  # a_proc = proc {|a,b| [a,b] }
646
646
  # a_proc.call(1) #=> [1, nil]
@@ -747,7 +747,7 @@ class Proc
747
747
  # Proc.new {}.lambda? #=> false
748
748
  #
749
749
  # `lambda`, `proc` and Proc.new preserve the tricks of a Proc object given by
750
- # `&` argument.
750
+ # <code>&</code> argument.
751
751
  #
752
752
  # lambda(&lambda {}).lambda? #=> true
753
753
  # proc(&lambda {}).lambda? #=> true
@@ -757,13 +757,13 @@ class Proc
757
757
  # proc(&proc {}).lambda? #=> false
758
758
  # Proc.new(&proc {}).lambda? #=> false
759
759
  #
760
- # A Proc object generated by `&` argument has the tricks
760
+ # A Proc object generated by <code>&</code> argument has the tricks
761
761
  #
762
762
  # def n(&b) b.lambda? end
763
763
  # n {} #=> false
764
764
  #
765
- # The `&` argument preserves the tricks if a Proc object is given by `&`
766
- # argument.
765
+ # The <code>&</code> argument preserves the tricks if a Proc object is given by
766
+ # <code>&</code> argument.
767
767
  #
768
768
  # n(&lambda {}) #=> true
769
769
  # n(&proc {}) #=> false
@@ -831,6 +831,38 @@ class Proc
831
831
  #
832
832
  def parameters: (?lambda: boolish) -> Method::param_types
833
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
+
834
866
  # <!--
835
867
  # rdoc-file=proc.c
836
868
  # - prc.source_location -> [String, Integer, Integer, Integer, Integer]