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/sig/parser.rbs CHANGED
@@ -20,13 +20,13 @@ module RBS
20
20
 
21
21
  # Parse a method type and return it
22
22
  #
23
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
23
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
24
24
  #
25
25
  # ```ruby
26
- # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
- # RBS::Parser.parse_method_type("() -> void", range: 0...) # => `() -> void`
28
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 11...) # => `() -> String`
29
- # RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
26
+ # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
27
+ # RBS::Parser.parse_method_type("() -> void", byte_range: 0...) # => `() -> void`
28
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 11...) # => `() -> String`
29
+ # RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 23...) # => nil
30
30
  # ```
31
31
  #
32
32
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -39,17 +39,18 @@ module RBS
39
39
  # RBS::Parser.parse_method_type("", require_eof: true) # => nil
40
40
  # ```
41
41
  #
42
- def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
42
+ def self.parse_method_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
43
44
 
44
45
  # Parse a type and return it
45
46
  #
46
- # When `range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
+ # When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
47
48
  #
48
49
  # ```ruby
49
- # RBS::Parser.parse_type("String") # => `String`
50
- # RBS::Parser.parse_type("String", range: 0...) # => `String`
51
- # RBS::Parser.parse_type("String Integer", pos: 7...) # => `Integer`
52
- # RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
50
+ # RBS::Parser.parse_type("String") # => `String`
51
+ # RBS::Parser.parse_type("String", byte_range: 0...) # => `String`
52
+ # RBS::Parser.parse_type("String Integer", byte_range: 7...) # => `Integer`
53
+ # RBS::Parser.parse_type("String Integer", byte_range: 14...) # => nil
53
54
  # ```
54
55
  #
55
56
  # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
@@ -76,7 +77,8 @@ module RBS
76
77
  # RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
77
78
  # ```
78
79
  #
79
- def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool) -> Types::t?
80
+ def self.parse_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
81
+ | %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
80
82
 
81
83
  # Parse whole RBS file and return an array of declarations
82
84
  #
@@ -130,7 +132,9 @@ module RBS
130
132
 
131
133
  def self.buffer: (String | Buffer source) -> Buffer
132
134
 
133
- def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed) -> Types::t?
135
+ def self.byte_range: (Range[Integer?] char_range, String content) -> Range[Integer?]
136
+
137
+ def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed, bool classish_allowed) -> Types::t?
134
138
 
135
139
  def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
136
140
 
@@ -3,6 +3,8 @@ module RBS
3
3
  module Helpers
4
4
  type node = RubyVM::AbstractSyntaxTree::Node
5
5
 
6
+ def parse_comments: (String, include_trailing: bool) -> Hash[Integer, AST::Comment]
7
+
6
8
  def block_from_body: (node) -> Types::Block?
7
9
 
8
10
  def each_node: (Array[untyped] nodes) { (node) -> void } -> void
data/sig/types.rbs CHANGED
@@ -54,7 +54,7 @@ module RBS
54
54
  # * The function return type is a return position (`() -> void`)
55
55
  # * Generic parameter is a return position (`Enumerator[Integer, void]`)
56
56
  #
57
- %a{deprecated} def with_nonreturn_void?: () -> bool
57
+ def with_nonreturn_void?: () -> bool
58
58
  end
59
59
 
60
60
  # t represents union of all possible types.
@@ -172,24 +172,23 @@ module RBS
172
172
  class ClassSingleton
173
173
  # singleton(::Foo)
174
174
  # ^^^^^ => name
175
- type loc = Location[:name, bot]
176
-
177
- def initialize: (name: TypeName, location: loc?) -> void
175
+ type loc = Location[:name, :args]
178
176
 
179
- attr_reader name: TypeName
177
+ def initialize: (name: TypeName, location: loc?, ?args: Array[t]) -> void
180
178
 
181
179
  attr_reader location: loc?
182
180
 
183
181
  include _TypeBase
184
- include NoFreeVariables
185
- include NoSubst
186
- include EmptyEachType
182
+ include Application
187
183
 
188
184
  def ==: (untyped other) -> bool
189
185
 
190
186
  alias eql? ==
191
187
 
192
188
  def hash: () -> Integer
189
+
190
+ def map_type: () { (t) -> t } -> ClassSingleton
191
+ | () -> Enumerator[t, ClassSingleton]
193
192
  end
194
193
 
195
194
  module Application
@@ -213,7 +212,7 @@ module RBS
213
212
 
214
213
  def has_classish_type?: () -> bool
215
214
 
216
- %a{deprecated} def with_nonreturn_void?: () -> bool
215
+ def with_nonreturn_void?: () -> bool
217
216
  end
218
217
 
219
218
  class Interface
@@ -452,7 +451,7 @@ module RBS
452
451
 
453
452
  def has_classish_type?: () -> bool
454
453
 
455
- %a{deprecated} def with_nonreturn_void?: () -> bool
454
+ def with_nonreturn_void?: () -> bool
456
455
 
457
456
  def ==: (untyped) -> bool
458
457
 
@@ -495,7 +494,7 @@ module RBS
495
494
 
496
495
  def has_classish_type?: () -> bool
497
496
 
498
- %a{deprecated} def with_nonreturn_void?: () -> bool
497
+ def with_nonreturn_void?: () -> bool
499
498
 
500
499
  # Returns `?`
501
500
  def param_to_s: () -> String
@@ -20,11 +20,3 @@ module RBS
20
20
  end
21
21
  end
22
22
  end
23
-
24
- class Proc
25
- def ruby2_keywords: () -> self
26
- end
27
-
28
- class Module
29
- def ruby2_keywords: (*Symbol) -> void
30
- end
@@ -153,6 +153,17 @@ module RBS
153
153
  #
154
154
  def refute_send_type: (String | MethodType method_type, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
155
155
 
156
+ # Calls a method `method_name`, validates if it's compatible with RBS type definition, and ensures it raises the `exception` class.
157
+ #
158
+ # 1. It calls `method_name` with `receiver` passing `args` and given block,
159
+ # 2. Validates if it's compatible with given `method_type`, and
160
+ # 3. Validates if it's compatible with one of the overloads defined in RBS type definition
161
+ # 4. Ensures that `exception` is thrown
162
+ #
163
+ # See `assert_send_type` for the details.
164
+ #
165
+ def assert_send_type_error: (String | MethodType method_type, Class exception, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
166
+
156
167
  # Asserts if the constant `constant_name` has `constant_type`, and the RBS definition has compatible type
157
168
  #
158
169
  # ```ruby