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/lib/rbs/types.rb CHANGED
@@ -61,7 +61,7 @@ module RBS
61
61
  include EmptyEachType
62
62
  include NoTypeName
63
63
 
64
- def to_json(state = _ = nil)
64
+ def to_json(state = nil)
65
65
  klass = to_s.to_sym
66
66
  { class: klass, location: location }.to_json(state)
67
67
  end
@@ -157,7 +157,7 @@ module RBS
157
157
  end
158
158
  end
159
159
 
160
- def to_json(state = _ = nil)
160
+ def to_json(state = nil)
161
161
  { class: :variable, name: name, location: location }.to_json(state)
162
162
  end
163
163
 
@@ -199,58 +199,6 @@ module RBS
199
199
  end
200
200
  end
201
201
 
202
- class ClassSingleton
203
- attr_reader :name
204
- attr_reader :location
205
-
206
- def initialize(name:, location:)
207
- @name = name
208
- @location = location
209
- end
210
-
211
- def ==(other)
212
- other.is_a?(ClassSingleton) && other.name == name
213
- end
214
-
215
- alias eql? ==
216
-
217
- def hash
218
- self.class.hash ^ name.hash
219
- end
220
-
221
- include NoFreeVariables
222
- include NoSubst
223
-
224
- def to_json(state = _ = nil)
225
- { class: :class_singleton, name: name, location: location }.to_json(state)
226
- end
227
-
228
- def to_s(level = 0)
229
- "singleton(#{name})"
230
- end
231
-
232
- include EmptyEachType
233
-
234
- def map_type_name(&)
235
- ClassSingleton.new(
236
- name: yield(name, location, self),
237
- location: location
238
- )
239
- end
240
-
241
- def has_self_type?
242
- false
243
- end
244
-
245
- def has_classish_type?
246
- false
247
- end
248
-
249
- def with_nonreturn_void?
250
- false
251
- end
252
- end
253
-
254
202
  module Application
255
203
  attr_reader :name
256
204
  attr_reader :args
@@ -303,12 +251,74 @@ module RBS
303
251
  # `void` in immediate generics parameter is allowed
304
252
  false
305
253
  else
306
- type.with_nonreturn_void?
254
+ type.with_nonreturn_void? # steep:ignore DeprecatedReference
307
255
  end
308
256
  end
309
257
  end
310
258
  end
311
259
 
260
+ class ClassSingleton
261
+ attr_reader :location
262
+
263
+ include Application
264
+
265
+ def initialize(name:, location:, args: [])
266
+ @name = name
267
+ @location = location
268
+ @args = args
269
+ end
270
+
271
+ def ==(other)
272
+ other.is_a?(ClassSingleton) && other.name == name && other.args == args
273
+ end
274
+
275
+ alias eql? ==
276
+
277
+ def hash
278
+ self.class.hash ^ name.hash ^ args.hash
279
+ end
280
+
281
+ def sub(s)
282
+ return self if s.empty?
283
+
284
+ self.class.new(name: name,
285
+ args: args.map {|ty| ty.sub(s) },
286
+ location: location)
287
+ end
288
+
289
+ def to_json(state = _ = nil)
290
+ { class: :class_singleton, name: name, args: args, location: location }.to_json(state)
291
+ end
292
+
293
+ def to_s(level = 0)
294
+ if args.empty?
295
+ "singleton(#{name})"
296
+ else
297
+ "singleton(#{name})[#{args.join(", ")}]"
298
+ end
299
+ end
300
+
301
+ def map_type_name(&block)
302
+ ClassSingleton.new(
303
+ name: yield(name, location, self),
304
+ args: args.map {|type| type.map_type_name(&block) },
305
+ location: location
306
+ )
307
+ end
308
+
309
+ def map_type(&block)
310
+ if block
311
+ ClassSingleton.new(
312
+ name: name,
313
+ args: args.map {|type| yield type },
314
+ location: location
315
+ )
316
+ else
317
+ enum_for :map_type
318
+ end
319
+ end
320
+ end
321
+
312
322
  class Interface
313
323
  attr_reader :location
314
324
 
@@ -320,7 +330,7 @@ module RBS
320
330
  @location = location
321
331
  end
322
332
 
323
- def to_json(state = _ = nil)
333
+ def to_json(state = nil)
324
334
  { class: :interface, name: name, args: args, location: location }.to_json(state)
325
335
  end
326
336
 
@@ -364,7 +374,7 @@ module RBS
364
374
  @location = location
365
375
  end
366
376
 
367
- def to_json(state = _ = nil)
377
+ def to_json(state = nil)
368
378
  { class: :class_instance, name: name, args: args, location: location }.to_json(state)
369
379
  end
370
380
 
@@ -408,7 +418,7 @@ module RBS
408
418
  @location = location
409
419
  end
410
420
 
411
- def to_json(state = _ = nil)
421
+ def to_json(state = nil)
412
422
  { class: :alias, name: name, args: args, location: location }.to_json(state)
413
423
  end
414
424
 
@@ -466,7 +476,7 @@ module RBS
466
476
  end
467
477
  end
468
478
 
469
- def to_json(state = _ = nil)
479
+ def to_json(state = nil)
470
480
  { class: :tuple, types: types, location: location }.to_json(state)
471
481
  end
472
482
 
@@ -520,7 +530,7 @@ module RBS
520
530
  end
521
531
 
522
532
  def with_nonreturn_void?
523
- each_type.any? {|type| type.with_nonreturn_void? }
533
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
524
534
  end
525
535
  end
526
536
 
@@ -573,7 +583,7 @@ module RBS
573
583
  end
574
584
  end
575
585
 
576
- def to_json(state = _ = nil)
586
+ def to_json(state = nil)
577
587
  { class: :record, fields: fields, optional_fields: optional_fields, location: location }.to_json(state)
578
588
  end
579
589
 
@@ -638,7 +648,7 @@ module RBS
638
648
  end
639
649
 
640
650
  def with_nonreturn_void?
641
- each_type.any? {|type| type.with_nonreturn_void? }
651
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
642
652
  end
643
653
  end
644
654
 
@@ -665,7 +675,7 @@ module RBS
665
675
  type.free_variables(set)
666
676
  end
667
677
 
668
- def to_json(state = _ = nil)
678
+ def to_json(state = nil)
669
679
  { class: :optional, type: type, location: location }.to_json(state)
670
680
  end
671
681
 
@@ -724,7 +734,7 @@ module RBS
724
734
  end
725
735
 
726
736
  def with_nonreturn_void?
727
- each_type.any? {|type| type.with_nonreturn_void? }
737
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
728
738
  end
729
739
  end
730
740
 
@@ -755,7 +765,7 @@ module RBS
755
765
  end
756
766
  end
757
767
 
758
- def to_json(state = _ = nil)
768
+ def to_json(state = nil)
759
769
  { class: :union, types: types, location: location }.to_json(state)
760
770
  end
761
771
 
@@ -815,7 +825,7 @@ module RBS
815
825
  end
816
826
 
817
827
  def with_nonreturn_void?
818
- each_type.any? {|type| type.with_nonreturn_void? }
828
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
819
829
  end
820
830
  end
821
831
 
@@ -846,7 +856,7 @@ module RBS
846
856
  end
847
857
  end
848
858
 
849
- def to_json(state = _ = nil)
859
+ def to_json(state = nil)
850
860
  { class: :intersection, types: types, location: location }.to_json(state)
851
861
  end
852
862
 
@@ -898,7 +908,7 @@ module RBS
898
908
  end
899
909
 
900
910
  def with_nonreturn_void?
901
- each_type.any? {|type| type.with_nonreturn_void? }
911
+ each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
902
912
  end
903
913
  end
904
914
 
@@ -932,7 +942,7 @@ module RBS
932
942
  end
933
943
  end
934
944
 
935
- def to_json(state = _ = nil)
945
+ def to_json(state = nil)
936
946
  { type: type, name: name }.to_json(state)
937
947
  end
938
948
 
@@ -1091,7 +1101,7 @@ module RBS
1091
1101
  end
1092
1102
  end
1093
1103
 
1094
- def to_json(state = _ = nil)
1104
+ def to_json(state = nil)
1095
1105
  {
1096
1106
  required_positionals: required_positionals,
1097
1107
  optional_positionals: optional_positionals,
@@ -1226,13 +1236,13 @@ module RBS
1226
1236
  end
1227
1237
 
1228
1238
  def with_nonreturn_void?
1229
- if each_param.any? {|param| param.type.with_nonreturn_void? }
1239
+ if each_param.any? {|param| param.type.with_nonreturn_void? } # steep:ignore DeprecatedReference
1230
1240
  true
1231
1241
  else
1232
1242
  if return_type.is_a?(Bases::Void)
1233
1243
  false
1234
1244
  else
1235
- return_type.with_nonreturn_void?
1245
+ return_type.with_nonreturn_void? # steep:ignore DeprecatedReference
1236
1246
  end
1237
1247
  end
1238
1248
  end
@@ -1279,7 +1289,7 @@ module RBS
1279
1289
  end
1280
1290
  end
1281
1291
 
1282
- def to_json(state = _ = nil)
1292
+ def to_json(state = nil)
1283
1293
  {
1284
1294
  return_type: return_type
1285
1295
  }.to_json(state)
@@ -1355,7 +1365,7 @@ module RBS
1355
1365
  other.self_type == self_type
1356
1366
  end
1357
1367
 
1358
- def to_json(state = _ = nil)
1368
+ def to_json(state = nil)
1359
1369
  {
1360
1370
  type: type,
1361
1371
  required: required,
@@ -1424,7 +1434,7 @@ module RBS
1424
1434
  set
1425
1435
  end
1426
1436
 
1427
- def to_json(state = _ = nil)
1437
+ def to_json(state = nil)
1428
1438
  {
1429
1439
  class: :proc,
1430
1440
  type: type,
@@ -1505,11 +1515,11 @@ module RBS
1505
1515
  end
1506
1516
 
1507
1517
  def with_nonreturn_void?
1508
- if type.with_nonreturn_void? || self_type&.with_nonreturn_void?
1518
+ if type.with_nonreturn_void? || self_type&.with_nonreturn_void? # steep:ignore DeprecatedReference
1509
1519
  true
1510
1520
  else
1511
1521
  if block = block()
1512
- block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false
1522
+ block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false # steep:ignore DeprecatedReference
1513
1523
  else
1514
1524
  false
1515
1525
  end
@@ -1541,7 +1551,7 @@ module RBS
1541
1551
  include EmptyEachType
1542
1552
  include NoTypeName
1543
1553
 
1544
- def to_json(state = _ = nil)
1554
+ def to_json(state = nil)
1545
1555
  { class: :literal, literal: literal.inspect, location: location }.to_json(state)
1546
1556
  end
1547
1557
 
@@ -5,6 +5,7 @@ module RBS
5
5
  module Convertibles
6
6
  class BlankSlate < BasicObject
7
7
  instance_methods.each do |im|
8
+ next if im == :__id__
8
9
  next if im == :__send__
9
10
  undef_method im
10
11
  end
@@ -192,6 +192,31 @@ module RBS
192
192
  end
193
193
  end
194
194
 
195
+ ruby2_keywords def assert_send_type_error(method_type, error_type, receiver, method, *args, &block)
196
+ send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
197
+ typecheck = RBS::Test::TypeCheck.new(
198
+ self_class: receiver.class,
199
+ builder: builder,
200
+ sample_size: 100,
201
+ unchecked_classes: [],
202
+ instance_class: instance_class,
203
+ class_class: class_class
204
+ )
205
+ errors = typecheck.method_call(method, method_type, trace, errors: [])
206
+
207
+ assert_empty errors.map {|x| RBS::Test::Errors.to_string(x) }, "Call trace does not match with given method type: #{trace.inspect}"
208
+
209
+ method_defs = method_defs(method)
210
+ all_errors = method_defs.map {|t| typecheck.method_call(method, t.type, trace, errors: [], annotations: t.each_annotation.to_a) }
211
+ assert all_errors.any? {|es| es.empty? }, "Call trace does not match one of method definitions:\n #{trace.inspect}\n #{method_defs.map(&:type).join(" | ")}"
212
+
213
+ # Use `instnace_of?` instead of `is_a?` as we want to check for _the exact exception class_.
214
+ assert exception.instance_of? error_type
215
+
216
+ result
217
+ end
218
+ end
219
+
195
220
  ruby2_keywords def refute_send_type(method_type, receiver, method, *args, &block)
196
221
  send_setup(method_type, receiver, method, args, block) do |method_type, trace, result, exception|
197
222
  method_type = method_type.update(
@@ -231,15 +256,17 @@ module RBS
231
256
  type, definition = target
232
257
 
233
258
  case type
234
- when Types::ClassInstance
235
- subst = RBS::Substitution.build(definition.type_params, type.args)
236
- definition.methods[method].defs.map do |type_def|
237
- type_def.update(
238
- type: type_def.type.sub(subst)
239
- )
259
+ when Types::ClassInstance, Types::ClassSingleton
260
+ if type.is_a?(Types::ClassSingleton) && type.args.empty?
261
+ definition.methods[method].defs
262
+ else
263
+ subst = RBS::Substitution.build(definition.type_params, type.args)
264
+ definition.methods[method].defs.map do |type_def|
265
+ type_def.update(
266
+ type: type_def.type.sub(subst)
267
+ )
268
+ end
240
269
  end
241
- when Types::ClassSingleton
242
- definition.methods[method].defs
243
270
  else
244
271
  raise
245
272
  end
data/lib/rbs/validator.rb CHANGED
@@ -127,8 +127,8 @@ module RBS
127
127
  # @type var each_child: ^(Symbol) { (Symbol) -> void } -> void
128
128
  each_child = -> (name, &block) do
129
129
  if param = params.find {|p| p.name == name }
130
- if b = param.upper_bound_type
131
- b.free_variables.each do |tv|
130
+ [param.upper_bound_type, param.lower_bound_type].compact.each do |bound|
131
+ bound.free_variables.each do |tv|
132
132
  block[tv]
133
133
  end
134
134
  end
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.10.4"
4
+ VERSION = "4.0.0"
5
5
  end
data/lib/rbs.rb CHANGED
@@ -6,10 +6,10 @@ require "set"
6
6
  require "json"
7
7
  require "pathname" unless defined?(Pathname)
8
8
  require "pp"
9
- require "ripper"
10
9
  require "logger"
11
10
  require "tsort"
12
11
  require "strscan"
12
+ require "prism"
13
13
 
14
14
  require "rbs/errors"
15
15
  require "rbs/buffer"
@@ -24,8 +24,19 @@ require "rbs/ast/declarations"
24
24
  require "rbs/ast/members"
25
25
  require "rbs/ast/annotation"
26
26
  require "rbs/ast/visitor"
27
+ require "rbs/ast/ruby/comment_block"
28
+ require "rbs/ast/ruby/helpers/constant_helper"
29
+ require "rbs/ast/ruby/helpers/location_helper"
30
+ require "rbs/ast/ruby/annotations"
31
+ require "rbs/ast/ruby/declarations"
32
+ require "rbs/ast/ruby/members"
33
+ require "rbs/source"
34
+ require "rbs/inline_parser"
35
+ require "rbs/inline_parser/comment_association"
27
36
  require "rbs/environment"
28
37
  require "rbs/environment/use_map"
38
+ require "rbs/environment/class_entry"
39
+ require "rbs/environment/module_entry"
29
40
  require "rbs/environment_loader"
30
41
  require "rbs/builtin_names"
31
42
  require "rbs/definition"
data/rbs.gemspec CHANGED
@@ -38,13 +38,14 @@ Gem::Specification.new do |spec|
38
38
  spec.extensions = %w{ext/rbs_extension/extconf.rb}
39
39
 
40
40
  if false
41
- spec.required_ruby_version = ">= 3.3"
41
+ spec.required_ruby_version = ">= 3.4"
42
42
  end
43
43
 
44
44
  spec.bindir = "exe"
45
45
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
46
46
  spec.require_paths = ["lib"]
47
- spec.required_ruby_version = ">= 3.1"
47
+ spec.required_ruby_version = ">= 3.2"
48
48
  spec.add_dependency "logger"
49
+ spec.add_dependency "prism", ">= 1.6.0"
49
50
  spec.add_dependency "tsort"
50
51
  end
data/rust/.gitignore ADDED
@@ -0,0 +1 @@
1
+ /target/