rbs 3.9.5 → 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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +74 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +14 -14
  5. data/.github/workflows/bundle-update.yml +60 -0
  6. data/.github/workflows/c-check.yml +58 -0
  7. data/.github/workflows/comments.yml +5 -3
  8. data/.github/workflows/dependabot.yml +2 -2
  9. data/.github/workflows/ruby.yml +40 -32
  10. data/.github/workflows/rust.yml +95 -0
  11. data/.github/workflows/typecheck.yml +2 -2
  12. data/.github/workflows/windows.yml +3 -3
  13. data/.gitignore +4 -0
  14. data/.rubocop.yml +2 -2
  15. data/.vscode/extensions.json +5 -0
  16. data/.vscode/settings.json +19 -0
  17. data/CHANGELOG.md +284 -0
  18. data/README.md +38 -1
  19. data/Rakefile +144 -29
  20. data/Steepfile +2 -0
  21. data/config.yml +634 -62
  22. data/core/array.rbs +307 -227
  23. data/core/basic_object.rbs +9 -8
  24. data/core/binding.rbs +0 -2
  25. data/core/builtin.rbs +2 -2
  26. data/core/class.rbs +6 -5
  27. data/core/comparable.rbs +55 -34
  28. data/core/complex.rbs +104 -78
  29. data/core/dir.rbs +61 -49
  30. data/core/encoding.rbs +12 -15
  31. data/core/enumerable.rbs +188 -87
  32. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  33. data/core/enumerator.rbs +65 -2
  34. data/core/errno.rbs +11 -2
  35. data/core/errors.rbs +58 -29
  36. data/core/exception.rbs +13 -13
  37. data/core/fiber.rbs +74 -54
  38. data/core/file.rbs +280 -177
  39. data/core/file_test.rbs +3 -3
  40. data/core/float.rbs +257 -92
  41. data/core/gc.rbs +425 -281
  42. data/core/hash.rbs +1045 -739
  43. data/core/integer.rbs +135 -137
  44. data/core/io/buffer.rbs +53 -42
  45. data/core/io/wait.rbs +13 -35
  46. data/core/io.rbs +196 -148
  47. data/core/kernel.rbs +216 -155
  48. data/core/marshal.rbs +4 -4
  49. data/core/match_data.rbs +15 -13
  50. data/core/math.rbs +107 -66
  51. data/core/method.rbs +69 -33
  52. data/core/module.rbs +244 -106
  53. data/core/nil_class.rbs +7 -6
  54. data/core/numeric.rbs +74 -63
  55. data/core/object.rbs +9 -11
  56. data/core/object_space.rbs +30 -23
  57. data/core/pathname.rbs +1322 -0
  58. data/core/proc.rbs +95 -58
  59. data/core/process.rbs +222 -202
  60. data/core/ractor.rbs +371 -515
  61. data/core/random.rbs +21 -3
  62. data/core/range.rbs +159 -57
  63. data/core/rational.rbs +60 -89
  64. data/core/rbs/unnamed/argf.rbs +60 -53
  65. data/core/rbs/unnamed/env_class.rbs +19 -14
  66. data/core/rbs/unnamed/main_class.rbs +123 -0
  67. data/core/rbs/unnamed/random.rbs +11 -118
  68. data/core/regexp.rbs +258 -214
  69. data/core/ruby.rbs +53 -0
  70. data/core/ruby_vm.rbs +38 -34
  71. data/core/rubygems/config_file.rbs +5 -5
  72. data/core/rubygems/errors.rbs +4 -71
  73. data/core/rubygems/requirement.rbs +5 -5
  74. data/core/rubygems/rubygems.rbs +16 -82
  75. data/core/rubygems/version.rbs +2 -3
  76. data/core/set.rbs +490 -360
  77. data/core/signal.rbs +26 -16
  78. data/core/string.rbs +3303 -1365
  79. data/core/struct.rbs +27 -26
  80. data/core/symbol.rbs +41 -34
  81. data/core/thread.rbs +135 -74
  82. data/core/time.rbs +81 -50
  83. data/core/trace_point.rbs +41 -35
  84. data/core/true_class.rbs +2 -2
  85. data/core/unbound_method.rbs +24 -16
  86. data/core/warning.rbs +7 -7
  87. data/docs/aliases.md +79 -0
  88. data/docs/collection.md +3 -3
  89. data/docs/config.md +171 -0
  90. data/docs/encoding.md +56 -0
  91. data/docs/gem.md +0 -1
  92. data/docs/inline.md +576 -0
  93. data/docs/sigs.md +3 -3
  94. data/docs/syntax.md +46 -16
  95. data/docs/type_fingerprint.md +21 -0
  96. data/exe/rbs +1 -1
  97. data/ext/rbs_extension/ast_translation.c +1513 -0
  98. data/ext/rbs_extension/ast_translation.h +37 -0
  99. data/ext/rbs_extension/class_constants.c +185 -0
  100. data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
  101. data/ext/rbs_extension/compat.h +10 -0
  102. data/ext/rbs_extension/extconf.rb +25 -1
  103. data/ext/rbs_extension/legacy_location.c +294 -0
  104. data/ext/rbs_extension/legacy_location.h +82 -0
  105. data/ext/rbs_extension/main.c +468 -24
  106. data/ext/rbs_extension/rbs_extension.h +6 -21
  107. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  108. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  109. data/include/rbs/ast.h +1022 -0
  110. data/include/rbs/defines.h +86 -0
  111. data/include/rbs/lexer.h +206 -0
  112. data/include/rbs/location.h +40 -0
  113. data/include/rbs/parser.h +153 -0
  114. data/include/rbs/string.h +47 -0
  115. data/include/rbs/util/rbs_allocator.h +59 -0
  116. data/include/rbs/util/rbs_assert.h +20 -0
  117. data/include/rbs/util/rbs_buffer.h +83 -0
  118. data/include/rbs/util/rbs_constant_pool.h +6 -70
  119. data/include/rbs/util/rbs_encoding.h +282 -0
  120. data/include/rbs/util/rbs_unescape.h +24 -0
  121. data/include/rbs.h +9 -2
  122. data/lib/rbs/annotate/formatter.rb +3 -13
  123. data/lib/rbs/annotate/rdoc_annotator.rb +3 -1
  124. data/lib/rbs/annotate/rdoc_source.rb +1 -1
  125. data/lib/rbs/ast/annotation.rb +1 -1
  126. data/lib/rbs/ast/comment.rb +1 -1
  127. data/lib/rbs/ast/declarations.rb +10 -10
  128. data/lib/rbs/ast/members.rb +14 -14
  129. data/lib/rbs/ast/ruby/annotations.rb +409 -0
  130. data/lib/rbs/ast/ruby/comment_block.rb +245 -0
  131. data/lib/rbs/ast/ruby/declarations.rb +281 -0
  132. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  133. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  134. data/lib/rbs/ast/ruby/members.rb +723 -0
  135. data/lib/rbs/ast/type_param.rb +24 -4
  136. data/lib/rbs/buffer.rb +105 -20
  137. data/lib/rbs/cli/diff.rb +16 -15
  138. data/lib/rbs/cli/validate.rb +63 -126
  139. data/lib/rbs/cli.rb +56 -24
  140. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  141. data/lib/rbs/collection/sources/git.rb +1 -0
  142. data/lib/rbs/collection.rb +0 -1
  143. data/lib/rbs/definition.rb +6 -1
  144. data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
  145. data/lib/rbs/definition_builder/method_builder.rb +65 -30
  146. data/lib/rbs/definition_builder.rb +177 -20
  147. data/lib/rbs/diff.rb +7 -1
  148. data/lib/rbs/environment/class_entry.rb +69 -0
  149. data/lib/rbs/environment/module_entry.rb +66 -0
  150. data/lib/rbs/environment.rb +402 -214
  151. data/lib/rbs/environment_loader.rb +2 -8
  152. data/lib/rbs/errors.rb +31 -21
  153. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  154. data/lib/rbs/inline_parser.rb +542 -0
  155. data/lib/rbs/location_aux.rb +36 -4
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +0 -7
  159. data/lib/rbs/parser_aux.rb +35 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -2
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  166. data/lib/rbs/source.rb +99 -0
  167. data/lib/rbs/subtractor.rb +7 -4
  168. data/lib/rbs/test/type_check.rb +19 -2
  169. data/lib/rbs/type_name.rb +1 -8
  170. data/lib/rbs/types.rb +91 -79
  171. data/lib/rbs/unit_test/convertibles.rb +1 -0
  172. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  173. data/lib/rbs/validator.rb +2 -2
  174. data/lib/rbs/version.rb +1 -1
  175. data/lib/rbs.rb +13 -2
  176. data/lib/rdoc/discover.rb +1 -1
  177. data/lib/rdoc_plugin/parser.rb +3 -3
  178. data/rbs.gemspec +4 -2
  179. data/rust/.gitignore +1 -0
  180. data/rust/Cargo.lock +378 -0
  181. data/rust/Cargo.toml +7 -0
  182. data/rust/ruby-rbs/Cargo.toml +22 -0
  183. data/rust/ruby-rbs/build.rs +764 -0
  184. data/rust/ruby-rbs/examples/locations.rs +60 -0
  185. data/rust/ruby-rbs/src/lib.rs +1 -0
  186. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  187. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  188. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  189. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  190. data/rust/ruby-rbs-sys/build.rs +204 -0
  191. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  192. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  193. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  194. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  195. data/schema/typeParam.json +17 -1
  196. data/sig/ancestor_builder.rbs +1 -1
  197. data/sig/annotate/formatter.rbs +2 -2
  198. data/sig/annotate/rdoc_annotater.rbs +1 -1
  199. data/sig/ast/ruby/annotations.rbs +421 -0
  200. data/sig/ast/ruby/comment_block.rbs +127 -0
  201. data/sig/ast/ruby/declarations.rbs +158 -0
  202. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  203. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  204. data/sig/ast/ruby/members.rbs +178 -0
  205. data/sig/buffer.rbs +63 -5
  206. data/sig/cli/diff.rbs +5 -11
  207. data/sig/cli/validate.rbs +12 -8
  208. data/sig/cli.rbs +18 -18
  209. data/sig/definition.rbs +6 -0
  210. data/sig/definition_builder.rbs +3 -1
  211. data/sig/environment/class_entry.rbs +50 -0
  212. data/sig/environment/module_entry.rbs +50 -0
  213. data/sig/environment.rbs +94 -87
  214. data/sig/errors.rbs +26 -20
  215. data/sig/inline_parser/comment_association.rbs +71 -0
  216. data/sig/inline_parser.rbs +124 -0
  217. data/sig/location.rbs +32 -7
  218. data/sig/locator.rbs +0 -2
  219. data/sig/manifest.yaml +0 -1
  220. data/sig/method_builder.rbs +9 -4
  221. data/sig/namespace.rbs +0 -5
  222. data/sig/parser.rbs +67 -13
  223. data/sig/prototype/helpers.rbs +2 -0
  224. data/sig/resolver/type_name_resolver.rbs +35 -7
  225. data/sig/source.rbs +48 -0
  226. data/sig/type_param.rbs +13 -8
  227. data/sig/typename.rbs +0 -5
  228. data/sig/types.rbs +10 -8
  229. data/sig/unit_test/spy.rbs +0 -8
  230. data/sig/unit_test/type_assertions.rbs +11 -0
  231. data/src/ast.c +1604 -0
  232. data/src/lexer.c +3194 -0
  233. data/src/lexer.re +154 -0
  234. data/src/lexstate.c +212 -0
  235. data/src/location.c +31 -0
  236. data/src/parser.c +4205 -0
  237. data/src/string.c +41 -0
  238. data/src/util/rbs_allocator.c +165 -0
  239. data/src/util/rbs_assert.c +19 -0
  240. data/src/util/rbs_buffer.c +54 -0
  241. data/src/util/rbs_constant_pool.c +18 -92
  242. data/src/util/rbs_encoding.c +21308 -0
  243. data/src/util/rbs_unescape.c +167 -0
  244. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  245. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  246. data/stdlib/cgi/0/core.rbs +9 -393
  247. data/stdlib/cgi/0/manifest.yaml +1 -0
  248. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  249. data/stdlib/coverage/0/coverage.rbs +7 -4
  250. data/stdlib/date/0/date.rbs +92 -79
  251. data/stdlib/date/0/date_time.rbs +25 -24
  252. data/stdlib/delegate/0/delegator.rbs +10 -7
  253. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  254. data/stdlib/digest/0/digest.rbs +110 -0
  255. data/stdlib/erb/0/erb.rbs +748 -347
  256. data/stdlib/etc/0/etc.rbs +55 -50
  257. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  258. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  259. data/stdlib/io-console/0/io-console.rbs +2 -2
  260. data/stdlib/json/0/json.rbs +226 -179
  261. data/stdlib/monitor/0/monitor.rbs +3 -3
  262. data/stdlib/net-http/0/net-http.rbs +162 -134
  263. data/stdlib/objspace/0/objspace.rbs +17 -34
  264. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  265. data/stdlib/open3/0/open3.rbs +469 -10
  266. data/stdlib/openssl/0/openssl.rbs +475 -357
  267. data/stdlib/optparse/0/optparse.rbs +26 -17
  268. data/stdlib/pathname/0/pathname.rbs +11 -1381
  269. data/stdlib/pp/0/pp.rbs +9 -8
  270. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  271. data/stdlib/pstore/0/pstore.rbs +35 -30
  272. data/stdlib/psych/0/psych.rbs +65 -12
  273. data/stdlib/psych/0/store.rbs +2 -4
  274. data/stdlib/pty/0/pty.rbs +9 -6
  275. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  276. data/stdlib/rdoc/0/code_object.rbs +4 -3
  277. data/stdlib/rdoc/0/comment.rbs +2 -0
  278. data/stdlib/rdoc/0/options.rbs +76 -0
  279. data/stdlib/rdoc/0/parser.rbs +1 -1
  280. data/stdlib/rdoc/0/rdoc.rbs +7 -5
  281. data/stdlib/rdoc/0/store.rbs +2 -2
  282. data/stdlib/resolv/0/resolv.rbs +25 -68
  283. data/stdlib/ripper/0/ripper.rbs +25 -19
  284. data/stdlib/securerandom/0/manifest.yaml +2 -0
  285. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  286. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  287. data/stdlib/singleton/0/singleton.rbs +3 -0
  288. data/stdlib/socket/0/addrinfo.rbs +9 -9
  289. data/stdlib/socket/0/basic_socket.rbs +3 -3
  290. data/stdlib/socket/0/ip_socket.rbs +10 -8
  291. data/stdlib/socket/0/socket.rbs +23 -10
  292. data/stdlib/socket/0/tcp_server.rbs +1 -1
  293. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  294. data/stdlib/socket/0/udp_socket.rbs +1 -1
  295. data/stdlib/socket/0/unix_server.rbs +1 -1
  296. data/stdlib/stringio/0/stringio.rbs +1177 -85
  297. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  298. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  299. data/stdlib/time/0/time.rbs +8 -6
  300. data/stdlib/timeout/0/timeout.rbs +63 -7
  301. data/stdlib/tsort/0/cyclic.rbs +3 -0
  302. data/stdlib/tsort/0/tsort.rbs +7 -6
  303. data/stdlib/uri/0/common.rbs +42 -20
  304. data/stdlib/uri/0/file.rbs +3 -3
  305. data/stdlib/uri/0/generic.rbs +26 -18
  306. data/stdlib/uri/0/http.rbs +2 -2
  307. data/stdlib/uri/0/ldap.rbs +2 -2
  308. data/stdlib/uri/0/mailto.rbs +3 -3
  309. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  310. data/stdlib/zlib/0/deflate.rbs +4 -3
  311. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  312. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  313. data/stdlib/zlib/0/inflate.rbs +1 -1
  314. data/stdlib/zlib/0/need_dict.rbs +1 -1
  315. data/stdlib/zlib/0/zstream.rbs +1 -0
  316. metadata +121 -18
  317. data/ext/rbs_extension/lexer.c +0 -2728
  318. data/ext/rbs_extension/lexer.h +0 -179
  319. data/ext/rbs_extension/lexer.re +0 -147
  320. data/ext/rbs_extension/lexstate.c +0 -175
  321. data/ext/rbs_extension/location.c +0 -325
  322. data/ext/rbs_extension/location.h +0 -85
  323. data/ext/rbs_extension/parser.c +0 -2982
  324. data/ext/rbs_extension/parser.h +0 -18
  325. data/ext/rbs_extension/parserstate.c +0 -411
  326. data/ext/rbs_extension/parserstate.h +0 -163
  327. data/ext/rbs_extension/unescape.c +0 -32
  328. data/include/rbs/ruby_objs.h +0 -72
  329. data/src/constants.c +0 -153
  330. data/src/ruby_objs.c +0 -799
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
 
@@ -175,10 +177,9 @@ EOB
175
177
 
176
178
  env = Environment.from_loader(loader).resolve_type_names
177
179
 
178
- decls = env.declarations.select do |decl|
179
- loc = decl.location or raise
180
+ decls = env.sources.select do |source|
180
181
  # @type var name: String
181
- name = loc.buffer.name
182
+ name = source.buffer.name.to_s
182
183
 
183
184
  patterns.empty? || patterns.any? do |pat|
184
185
  case pat
@@ -188,10 +189,12 @@ EOB
188
189
  name.end_with?(pat) || File.fnmatch(pat, name, File::FNM_EXTGLOB)
189
190
  end
190
191
  end
191
- end
192
+ end.flat_map { _1.declarations }
192
193
 
193
194
  stdout.print JSON.generate(decls)
194
195
  stdout.flush
196
+
197
+ 0
195
198
  end
196
199
 
197
200
  def run_list(args, options)
@@ -255,6 +258,8 @@ EOB
255
258
  stdout.puts "#{name} (interface)"
256
259
  end
257
260
  end
261
+
262
+ 0
258
263
  end
259
264
 
260
265
  def run_ancestors(args, options)
@@ -280,7 +285,7 @@ EOU
280
285
 
281
286
  unless args.size == 1
282
287
  stdout.puts "Expected one argument."
283
- return
288
+ return 1
284
289
  end
285
290
 
286
291
  loader = options.loader()
@@ -318,6 +323,8 @@ EOU
318
323
  else
319
324
  stdout.puts "Cannot find class: #{type_name}"
320
325
  end
326
+
327
+ 0
321
328
  end
322
329
 
323
330
  def run_methods(args, options)
@@ -345,7 +352,7 @@ EOU
345
352
 
346
353
  unless args.size == 1
347
354
  stdout.puts "Expected one argument."
348
- return
355
+ return 1
349
356
  end
350
357
 
351
358
  loader = options.loader()
@@ -374,6 +381,8 @@ EOU
374
381
  else
375
382
  stdout.puts "Cannot find class: #{type_name}"
376
383
  end
384
+
385
+ 0
377
386
  end
378
387
 
379
388
  def run_method(args, options)
@@ -399,7 +408,7 @@ EOU
399
408
 
400
409
  unless args.size == 2
401
410
  stdout.puts "Expected two arguments, but given #{args.size}."
402
- return
411
+ return 1
403
412
  end
404
413
 
405
414
  loader = options.loader()
@@ -411,7 +420,7 @@ EOU
411
420
 
412
421
  unless env.module_name?(type_name)
413
422
  stdout.puts "Cannot find class: #{type_name}"
414
- return
423
+ return 1
415
424
  end
416
425
 
417
426
  definition = case kind
@@ -427,7 +436,7 @@ EOU
427
436
 
428
437
  unless method
429
438
  stdout.puts "Cannot find method: #{method_name}"
430
- return
439
+ return 1
431
440
  end
432
441
 
433
442
  stdout.puts "#{type_name}#{kind == :instance ? "#" : "."}#{method_name}"
@@ -441,6 +450,8 @@ EOU
441
450
  stdout.puts format(" %s %-#{length_max}s at %s", separator, type, type.location)
442
451
  separator = "|"
443
452
  end
453
+
454
+ 0
444
455
  end
445
456
 
446
457
  def run_validate(args, options)
@@ -470,7 +481,7 @@ EOU
470
481
 
471
482
  unless args.size == 1
472
483
  stdout.puts "Expected one argument."
473
- return
484
+ return 1
474
485
  end
475
486
 
476
487
  loader = options.loader()
@@ -503,6 +514,8 @@ EOU
503
514
  else
504
515
  stdout.puts " => [no constant]"
505
516
  end
517
+
518
+ 0
506
519
  end
507
520
 
508
521
  def run_paths(args, options)
@@ -545,6 +558,8 @@ EOU
545
558
  stdout.puts "#{dir} (#{kind_of[dir]}, library, name=#{source.name})"
546
559
  end
547
560
  end
561
+
562
+ 0
548
563
  end
549
564
 
550
565
  def run_prototype(args, options)
@@ -648,6 +663,8 @@ EOU
648
663
 
649
664
  writer = Writer.new(out: stdout)
650
665
  writer.write decls
666
+
667
+ 0
651
668
  else
652
669
  stdout.puts <<EOU
653
670
  Usage: rbs prototype [generator...] [args...]
@@ -661,7 +678,7 @@ Examples:
661
678
  $ rbs prototype rbi foo.rbi
662
679
  $ rbs prototype runtime String
663
680
  EOU
664
- exit 1
681
+ 1
665
682
  end
666
683
  end
667
684
 
@@ -713,12 +730,12 @@ EOU
713
730
 
714
731
  unless has_parser?
715
732
  stdout.puts "Not supported on this interpreter (#{RUBY_ENGINE})."
716
- exit 1
733
+ return 1
717
734
  end
718
735
 
719
736
  if args.empty?
720
737
  stdout.puts opts
721
- return nil
738
+ return 1
722
739
  end
723
740
 
724
741
  new_parser = -> do
@@ -828,6 +845,8 @@ EOU
828
845
  writer = Writer.new(out: stdout)
829
846
  writer.write parser.decls
830
847
  end
848
+
849
+ 0
831
850
  end
832
851
 
833
852
  def run_vendor(args, options)
@@ -881,6 +900,8 @@ Options:
881
900
 
882
901
  stdout.puts " Copying RBS files..."
883
902
  vendorer.copy!
903
+
904
+ 0
884
905
  end
885
906
 
886
907
  def run_parse(args, options)
@@ -913,7 +934,7 @@ Options:
913
934
  Buffer.new(content: file_path.read, name: file_path)
914
935
  end
915
936
  end
916
- bufs << Buffer.new(content: e_code, name: '-e') if e_code
937
+ bufs << Buffer.new(content: e_code, name: Pathname('-e')) if e_code
917
938
 
918
939
  bufs.each do |buf|
919
940
  RBS.logger.info "Parsing #{buf.name}..."
@@ -928,7 +949,11 @@ Options:
928
949
  syntax_error = true
929
950
  end
930
951
 
931
- exit 1 if syntax_error
952
+ if syntax_error
953
+ 1
954
+ else
955
+ 0
956
+ end
932
957
  end
933
958
 
934
959
  def run_annotate(args, options)
@@ -947,7 +972,7 @@ Import documents from RDoc and update RBS files.
947
972
 
948
973
  Examples:
949
974
 
950
- $ rbs annotate stdlib/pathname/**/*.rbs
975
+ $ rbs annotate stdlib/logger/**/*.rbs
951
976
 
952
977
  Options:
953
978
  EOB
@@ -976,6 +1001,8 @@ Options:
976
1001
  annotator.annotate_file(path, preserve: preserve)
977
1002
  end
978
1003
  end
1004
+
1005
+ 0
979
1006
  end
980
1007
 
981
1008
  def test_opt options
@@ -1029,7 +1056,7 @@ EOB
1029
1056
 
1030
1057
  if args.length.zero?
1031
1058
  stdout.puts opts.help
1032
- exit 1
1059
+ return 1
1033
1060
  end
1034
1061
 
1035
1062
  # @type var env_hash: Hash[String, String?]
@@ -1045,11 +1072,12 @@ EOB
1045
1072
 
1046
1073
  # @type var out: String
1047
1074
  # @type var err: String
1075
+ # @type var status: Process::Status
1048
1076
  out, err, status = __skip__ = Open3.capture3(env_hash, *args)
1049
1077
  stdout.print(out)
1050
1078
  stderr.print(err)
1051
1079
 
1052
- status
1080
+ status.to_i
1053
1081
  end
1054
1082
 
1055
1083
  def run_collection(args, options)
@@ -1074,7 +1102,7 @@ EOB
1074
1102
  when 'init'
1075
1103
  if config_path.exist?
1076
1104
  puts "#{config_path} already exists"
1077
- exit 1
1105
+ return 1
1078
1106
  end
1079
1107
 
1080
1108
  config_path.write(<<~'YAML')
@@ -1102,15 +1130,17 @@ EOB
1102
1130
  when 'clean'
1103
1131
  unless lock_path.exist?
1104
1132
  puts "#{lock_path} should exist to clean"
1105
- exit 1
1133
+ return 1
1106
1134
  end
1107
1135
  Collection::Cleaner.new(lockfile_path: lock_path)
1108
1136
  when 'help', 'hel', 'he', 'h'
1109
1137
  puts opts.help
1110
1138
  else
1111
1139
  puts opts.help
1112
- exit 1
1140
+ return 1
1113
1141
  end
1142
+
1143
+ 0
1114
1144
  end
1115
1145
 
1116
1146
  def collection_options(args)
@@ -1172,7 +1202,7 @@ EOB
1172
1202
  *minuend_paths, subtrahend_path = args
1173
1203
  unless subtrahend_path
1174
1204
  stdout.puts opts.help
1175
- exit 1
1205
+ return 1
1176
1206
  end
1177
1207
  subtrahend_paths << subtrahend_path
1178
1208
  else
@@ -1181,7 +1211,7 @@ EOB
1181
1211
 
1182
1212
  if minuend_paths.empty?
1183
1213
  stdout.puts opts.help
1184
- exit 1
1214
+ return 1
1185
1215
  end
1186
1216
 
1187
1217
  subtrahend = Environment.new.tap do |env|
@@ -1214,10 +1244,12 @@ EOB
1214
1244
  end
1215
1245
  end
1216
1246
  end
1247
+
1248
+ 0
1217
1249
  end
1218
1250
 
1219
1251
  def run_diff(argv, library_options)
1220
- 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)
1221
1253
  end
1222
1254
  end
1223
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
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
- require 'fileutils'
5
4
 
6
5
  require_relative './cli/colored_io'
7
6
  require_relative './collection/sources'
@@ -62,7 +62,12 @@ module RBS
62
62
  end
63
63
 
64
64
  def comment
65
- member.comment
65
+ case member
66
+ when AST::Members::Base
67
+ member.comment
68
+ when AST::Ruby::Members::Base
69
+ member.leading_comment&.as_comment
70
+ end
66
71
  end
67
72
 
68
73
  def update(type: self.type, member: self.member, defined_in: self.defined_in, implemented_in: self.implemented_in)