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/lib/rbs/cli.rb CHANGED
@@ -136,10 +136,12 @@ module RBS
136
136
  case command
137
137
  when :version
138
138
  stdout.puts opts.ver
139
+ 0
139
140
  when *COMMANDS
140
141
  __send__ :"run_#{command}", args, options
141
142
  else
142
143
  stdout.puts opts.help
144
+ 0
143
145
  end
144
146
  end
145
147
 
@@ -191,6 +193,8 @@ EOB
191
193
 
192
194
  stdout.print JSON.generate(decls)
193
195
  stdout.flush
196
+
197
+ 0
194
198
  end
195
199
 
196
200
  def run_list(args, options)
@@ -254,6 +258,8 @@ EOB
254
258
  stdout.puts "#{name} (interface)"
255
259
  end
256
260
  end
261
+
262
+ 0
257
263
  end
258
264
 
259
265
  def run_ancestors(args, options)
@@ -279,7 +285,7 @@ EOU
279
285
 
280
286
  unless args.size == 1
281
287
  stdout.puts "Expected one argument."
282
- return
288
+ return 1
283
289
  end
284
290
 
285
291
  loader = options.loader()
@@ -317,6 +323,8 @@ EOU
317
323
  else
318
324
  stdout.puts "Cannot find class: #{type_name}"
319
325
  end
326
+
327
+ 0
320
328
  end
321
329
 
322
330
  def run_methods(args, options)
@@ -344,7 +352,7 @@ EOU
344
352
 
345
353
  unless args.size == 1
346
354
  stdout.puts "Expected one argument."
347
- return
355
+ return 1
348
356
  end
349
357
 
350
358
  loader = options.loader()
@@ -373,6 +381,8 @@ EOU
373
381
  else
374
382
  stdout.puts "Cannot find class: #{type_name}"
375
383
  end
384
+
385
+ 0
376
386
  end
377
387
 
378
388
  def run_method(args, options)
@@ -398,7 +408,7 @@ EOU
398
408
 
399
409
  unless args.size == 2
400
410
  stdout.puts "Expected two arguments, but given #{args.size}."
401
- return
411
+ return 1
402
412
  end
403
413
 
404
414
  loader = options.loader()
@@ -410,7 +420,7 @@ EOU
410
420
 
411
421
  unless env.module_name?(type_name)
412
422
  stdout.puts "Cannot find class: #{type_name}"
413
- return
423
+ return 1
414
424
  end
415
425
 
416
426
  definition = case kind
@@ -426,7 +436,7 @@ EOU
426
436
 
427
437
  unless method
428
438
  stdout.puts "Cannot find method: #{method_name}"
429
- return
439
+ return 1
430
440
  end
431
441
 
432
442
  stdout.puts "#{type_name}#{kind == :instance ? "#" : "."}#{method_name}"
@@ -440,6 +450,8 @@ EOU
440
450
  stdout.puts format(" %s %-#{length_max}s at %s", separator, type, type.location)
441
451
  separator = "|"
442
452
  end
453
+
454
+ 0
443
455
  end
444
456
 
445
457
  def run_validate(args, options)
@@ -469,7 +481,7 @@ EOU
469
481
 
470
482
  unless args.size == 1
471
483
  stdout.puts "Expected one argument."
472
- return
484
+ return 1
473
485
  end
474
486
 
475
487
  loader = options.loader()
@@ -502,6 +514,8 @@ EOU
502
514
  else
503
515
  stdout.puts " => [no constant]"
504
516
  end
517
+
518
+ 0
505
519
  end
506
520
 
507
521
  def run_paths(args, options)
@@ -544,6 +558,8 @@ EOU
544
558
  stdout.puts "#{dir} (#{kind_of[dir]}, library, name=#{source.name})"
545
559
  end
546
560
  end
561
+
562
+ 0
547
563
  end
548
564
 
549
565
  def run_prototype(args, options)
@@ -647,6 +663,8 @@ EOU
647
663
 
648
664
  writer = Writer.new(out: stdout)
649
665
  writer.write decls
666
+
667
+ 0
650
668
  else
651
669
  stdout.puts <<EOU
652
670
  Usage: rbs prototype [generator...] [args...]
@@ -660,7 +678,7 @@ Examples:
660
678
  $ rbs prototype rbi foo.rbi
661
679
  $ rbs prototype runtime String
662
680
  EOU
663
- exit 1
681
+ 1
664
682
  end
665
683
  end
666
684
 
@@ -712,12 +730,12 @@ EOU
712
730
 
713
731
  unless has_parser?
714
732
  stdout.puts "Not supported on this interpreter (#{RUBY_ENGINE})."
715
- exit 1
733
+ return 1
716
734
  end
717
735
 
718
736
  if args.empty?
719
737
  stdout.puts opts
720
- return nil
738
+ return 1
721
739
  end
722
740
 
723
741
  new_parser = -> do
@@ -827,6 +845,8 @@ EOU
827
845
  writer = Writer.new(out: stdout)
828
846
  writer.write parser.decls
829
847
  end
848
+
849
+ 0
830
850
  end
831
851
 
832
852
  def run_vendor(args, options)
@@ -880,6 +900,8 @@ Options:
880
900
 
881
901
  stdout.puts " Copying RBS files..."
882
902
  vendorer.copy!
903
+
904
+ 0
883
905
  end
884
906
 
885
907
  def run_parse(args, options)
@@ -927,7 +949,11 @@ Options:
927
949
  syntax_error = true
928
950
  end
929
951
 
930
- exit 1 if syntax_error
952
+ if syntax_error
953
+ 1
954
+ else
955
+ 0
956
+ end
931
957
  end
932
958
 
933
959
  def run_annotate(args, options)
@@ -946,7 +972,7 @@ Import documents from RDoc and update RBS files.
946
972
 
947
973
  Examples:
948
974
 
949
- $ rbs annotate stdlib/pathname/**/*.rbs
975
+ $ rbs annotate stdlib/logger/**/*.rbs
950
976
 
951
977
  Options:
952
978
  EOB
@@ -975,6 +1001,8 @@ Options:
975
1001
  annotator.annotate_file(path, preserve: preserve)
976
1002
  end
977
1003
  end
1004
+
1005
+ 0
978
1006
  end
979
1007
 
980
1008
  def test_opt options
@@ -1028,7 +1056,7 @@ EOB
1028
1056
 
1029
1057
  if args.length.zero?
1030
1058
  stdout.puts opts.help
1031
- exit 1
1059
+ return 1
1032
1060
  end
1033
1061
 
1034
1062
  # @type var env_hash: Hash[String, String?]
@@ -1044,11 +1072,12 @@ EOB
1044
1072
 
1045
1073
  # @type var out: String
1046
1074
  # @type var err: String
1075
+ # @type var status: Process::Status
1047
1076
  out, err, status = __skip__ = Open3.capture3(env_hash, *args)
1048
1077
  stdout.print(out)
1049
1078
  stderr.print(err)
1050
1079
 
1051
- status
1080
+ status.to_i
1052
1081
  end
1053
1082
 
1054
1083
  def run_collection(args, options)
@@ -1073,7 +1102,7 @@ EOB
1073
1102
  when 'init'
1074
1103
  if config_path.exist?
1075
1104
  puts "#{config_path} already exists"
1076
- exit 1
1105
+ return 1
1077
1106
  end
1078
1107
 
1079
1108
  config_path.write(<<~'YAML')
@@ -1101,15 +1130,17 @@ EOB
1101
1130
  when 'clean'
1102
1131
  unless lock_path.exist?
1103
1132
  puts "#{lock_path} should exist to clean"
1104
- exit 1
1133
+ return 1
1105
1134
  end
1106
1135
  Collection::Cleaner.new(lockfile_path: lock_path)
1107
1136
  when 'help', 'hel', 'he', 'h'
1108
1137
  puts opts.help
1109
1138
  else
1110
1139
  puts opts.help
1111
- exit 1
1140
+ return 1
1112
1141
  end
1142
+
1143
+ 0
1113
1144
  end
1114
1145
 
1115
1146
  def collection_options(args)
@@ -1171,7 +1202,7 @@ EOB
1171
1202
  *minuend_paths, subtrahend_path = args
1172
1203
  unless subtrahend_path
1173
1204
  stdout.puts opts.help
1174
- exit 1
1205
+ return 1
1175
1206
  end
1176
1207
  subtrahend_paths << subtrahend_path
1177
1208
  else
@@ -1180,7 +1211,7 @@ EOB
1180
1211
 
1181
1212
  if minuend_paths.empty?
1182
1213
  stdout.puts opts.help
1183
- exit 1
1214
+ return 1
1184
1215
  end
1185
1216
 
1186
1217
  subtrahend = Environment.new.tap do |env|
@@ -1213,10 +1244,12 @@ EOB
1213
1244
  end
1214
1245
  end
1215
1246
  end
1247
+
1248
+ 0
1216
1249
  end
1217
1250
 
1218
1251
  def run_diff(argv, library_options)
1219
- Diff.new(argv: argv, library_options: library_options, stdout: stdout, stderr: stderr).run
1252
+ Diff.new(stdout: stdout, stderr: stderr).run(argv: argv, library_options: library_options)
1220
1253
  end
1221
1254
  end
1222
1255
  end
@@ -8,12 +8,17 @@ module RBS
8
8
  "mutex_m" => ">= 0.3.0",
9
9
  "abbrev" => nil,
10
10
  "base64" => nil,
11
+ "benchmark" => nil,
11
12
  "bigdecimal" => nil,
12
13
  "csv" => nil,
14
+ "kconv" => nil,
15
+ "logger" => nil,
13
16
  "minitest" => nil,
14
17
  "net-smtp" => nil,
15
18
  "nkf" => nil,
16
19
  "observer" => nil,
20
+ "cgi" => nil,
21
+ "pstore" => nil,
17
22
  }
18
23
 
19
24
  class GemfileLockMismatchError < StandardError
@@ -171,8 +176,8 @@ module RBS
171
176
  return if lockfile.gems.key?(name)
172
177
 
173
178
  case name
174
- when 'bigdecimal-math'
175
- # The `bigdecimal-math` is never released as a gem.
179
+ when 'bigdecimal-math', 'kconv'
180
+ # These gems are never released as a gem.
176
181
  # Therefore, `assign_gem` should not be called.
177
182
  RBS.logger.info {
178
183
  from = from_gem || "rbs_collection.yaml"
@@ -183,6 +188,13 @@ module RBS
183
188
  lockfile.gems[name] = { name: name, version: "0", source: source }
184
189
  end
185
190
  return
191
+ when 'set', 'pathname'
192
+ # set and pathname is migrated to core from stdlib.
193
+ RBS.logger.info {
194
+ from = from_gem || "rbs_collection.yaml"
195
+ "`#{name}` is a part of the Ruby core library. The dependency to the library can be safely deleted from #{from}."
196
+ }
197
+ return
186
198
  when *ALUMNI_STDLIBS.keys
187
199
  version = ALUMNI_STDLIBS.fetch(name)
188
200
  if from_gem
@@ -3,6 +3,7 @@
3
3
  require 'digest/sha2'
4
4
  require 'open3'
5
5
  require 'find'
6
+ require 'fileutils'
6
7
 
7
8
  module RBS
8
9
  module Collection
@@ -66,7 +66,7 @@ module RBS
66
66
  when AST::Members::Base
67
67
  member.comment
68
68
  when AST::Ruby::Members::Base
69
- nil
69
+ member.leading_comment&.as_comment
70
70
  end
71
71
  end
72
72
 
@@ -220,7 +220,7 @@ module RBS
220
220
  InvalidTypeApplicationError.check2!(type_name: super_class.name, args: super_class.args, env: env, location: super_class.location)
221
221
  end
222
222
 
223
- super_entry = env.normalized_class_entry(super_name) or raise
223
+ super_entry = env.class_entry(super_name, normalized: true) or raise
224
224
  super_args = AST::TypeParam.normalize_args(super_entry.type_params, super_args)
225
225
 
226
226
  ancestors = OneAncestors.class_instance(
@@ -248,7 +248,7 @@ module RBS
248
248
 
249
249
  module_name = module_self.name
250
250
  if module_name.class?
251
- module_entry = env.normalized_module_class_entry(module_name) or raise
251
+ module_entry = env.module_class_entry(module_name, normalized: true) or raise
252
252
  module_name = module_entry.name
253
253
  self_args = AST::TypeParam.normalize_args(module_entry.type_params, module_self.args)
254
254
  end
@@ -361,7 +361,7 @@ module RBS
361
361
  MixinClassError.check!(type_name: type_name, env: env, member: member)
362
362
  NoMixinFoundError.check!(member.name, env: env, member: member)
363
363
 
364
- module_decl = env.normalized_module_entry(module_name) or raise
364
+ module_decl = env.module_entry(module_name, normalized: true) or raise
365
365
  module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
366
366
 
367
367
  module_name = env.normalize_module_name(module_name)
@@ -380,7 +380,7 @@ module RBS
380
380
  MixinClassError.check!(type_name: type_name, env: env, member: member)
381
381
  NoMixinFoundError.check!(member.name, env: env, member: member)
382
382
 
383
- module_decl = env.normalized_module_entry(member.name) or raise
383
+ module_decl = env.module_entry(member.name, normalized: true) or raise
384
384
  module_name = module_decl.name
385
385
 
386
386
  module_args = member.args.map {|type| align_params ? type.sub(align_params) : type }
@@ -398,7 +398,7 @@ module RBS
398
398
  MixinClassError.check!(type_name: type_name, env: env, member: member)
399
399
  NoMixinFoundError.check!(member.name, env: env, member: member)
400
400
 
401
- module_decl = env.normalized_module_entry(module_name) or raise
401
+ module_decl = env.module_entry(module_name, normalized: true) or raise
402
402
  module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
403
403
 
404
404
  module_name = env.normalize_module_name(module_name)
@@ -414,7 +414,60 @@ module RBS
414
414
  end
415
415
  end
416
416
  when AST::Ruby::Declarations::Base
417
- # noop
417
+ decl.members.each do |member|
418
+ case member
419
+ when AST::Ruby::Members::IncludeMember
420
+ if included_modules
421
+ module_name = member.module_name
422
+ module_args = member.type_args
423
+
424
+ # Check if mixing in a class (not allowed)
425
+ if env.class_decl?(module_name)
426
+ raise MixinClassError.new(type_name: type_name, member: member)
427
+ end
428
+
429
+ # Check if module exists
430
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
431
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
432
+ module_name = env.normalize_module_name(module_name)
433
+ included_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
434
+ end
435
+
436
+ when AST::Ruby::Members::ExtendMember
437
+ if extended_modules
438
+ module_name = member.module_name
439
+ module_args = member.type_args
440
+
441
+ # Check if mixing in a class (not allowed)
442
+ if env.class_decl?(module_name)
443
+ raise MixinClassError.new(type_name: type_name, member: member)
444
+ end
445
+
446
+ # Check if module exists
447
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
448
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
449
+ module_name = env.normalize_module_name(module_name)
450
+ extended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
451
+ end
452
+
453
+ when AST::Ruby::Members::PrependMember
454
+ if prepended_modules
455
+ module_name = member.module_name
456
+ module_args = member.type_args
457
+
458
+ # Check if mixing in a class (not allowed)
459
+ if env.class_decl?(module_name)
460
+ raise MixinClassError.new(type_name: type_name, member: member)
461
+ end
462
+
463
+ # Check if module exists
464
+ module_decl = env.module_entry(module_name, normalized: true) or raise NoMixinFoundError.new(type_name: module_name, member: member)
465
+ module_args = AST::TypeParam.normalize_args(module_decl.type_params, module_args)
466
+ module_name = env.normalize_module_name(module_name)
467
+ prepended_modules << Definition::Ancestor::Instance.new(name: module_name, args: module_args, source: member)
468
+ end
469
+ end
470
+ end
418
471
  end
419
472
  end
420
473
 
@@ -484,7 +537,7 @@ module RBS
484
537
  included_modules.each do |mod|
485
538
  name = mod.name
486
539
  arg_types = mod.args
487
- mod.source.is_a?(AST::Members::Include) or raise
540
+ (mod.source.is_a?(AST::Members::Include) || mod.source.is_a?(AST::Ruby::Members::IncludeMember)) or raise
488
541
  mod_ancestors =
489
542
  instance_ancestors(name, building_ancestors: building_ancestors)
490
543
  .apply(arg_types, env: env, location: mod.source.location)
@@ -499,7 +552,7 @@ module RBS
499
552
  prepended_modules.each do |mod|
500
553
  name = mod.name
501
554
  arg_types = mod.args
502
- mod.source.is_a?(AST::Members::Prepend) or raise
555
+ (mod.source.is_a?(AST::Members::Prepend) || mod.source.is_a?(AST::Ruby::Members::PrependMember)) or raise
503
556
  mod_ancestors =
504
557
  instance_ancestors(name, building_ancestors: building_ancestors)
505
558
  .apply(arg_types, env: env, location: mod.source.location)
@@ -554,7 +607,7 @@ module RBS
554
607
  extended_modules.each do |mod|
555
608
  name = mod.name
556
609
  args = mod.args
557
- mod.source.is_a?(AST::Members::Extend) or raise
610
+ (mod.source.is_a?(AST::Members::Extend) || mod.source.is_a?(AST::Ruby::Members::ExtendMember)) or raise
558
611
  mod_ancestors =
559
612
  instance_ancestors(name, building_ancestors: building_ancestors)
560
613
  .apply(args, env: env, location: mod.source.location)
@@ -149,6 +149,8 @@ module RBS
149
149
  member: member,
150
150
  accessibility: :public
151
151
  )
152
+ when AST::Ruby::Members::AttrReaderMember, AST::Ruby::Members::AttrWriterMember, AST::Ruby::Members::AttrAccessorMember
153
+ build_ruby_attribute(methods, type, member: member, accessibility: :public)
152
154
  end
153
155
  end
154
156
  end
@@ -227,6 +229,24 @@ module RBS
227
229
  end
228
230
  end
229
231
 
232
+ def build_ruby_attribute(methods, type, member:, accessibility:)
233
+ member.names.each do |name|
234
+ if member.is_a?(AST::Ruby::Members::AttrReaderMember) || member.is_a?(AST::Ruby::Members::AttrAccessorMember)
235
+ defn = methods.methods[name] ||= Methods::Definition.empty(type: type, name: name)
236
+
237
+ defn.accessibilities << accessibility
238
+ defn.originals << member
239
+ end
240
+
241
+ if member.is_a?(AST::Ruby::Members::AttrWriterMember) || member.is_a?(AST::Ruby::Members::AttrAccessorMember)
242
+ defn = methods.methods[:"#{name}="] ||= Methods::Definition.empty(type: type, name: :"#{name}=")
243
+
244
+ defn.accessibilities << accessibility
245
+ defn.originals << member
246
+ end
247
+ end
248
+ end
249
+
230
250
  def build_method(methods, type, member:, accessibility:)
231
251
  defn = methods.methods[member.name] ||= Methods::Definition.empty(type: type, name: member.name)
232
252