rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
data/docs/gem.md ADDED
@@ -0,0 +1,57 @@
1
+ # Releasing a gem with RBS
2
+
3
+ You can release the RBS type definition of your gem included in the gem package. Just add your RBS files inside `/sig` directory, put them in your rubygem package, and release a new version. RBS gem will load the RBS files from your gem package automatically.
4
+
5
+ ## `/sig` directory
6
+
7
+ RBS gem tries to load a type definition of a gem from gem package first. It checks if there is `/sig` directory in the gem package and loads `*.rbs` files from the directory. So, everything you have to do to make your type definition available are:
8
+
9
+ 1. Add `/sig` directory in your gem package
10
+ 2. Put your RBS files inside the directory
11
+ 3. Make sure the RBS files are included in the gem package
12
+
13
+ ### Hidden RBS files
14
+
15
+ If you have RBS files you don't want to export to the gem users, you can put the files under a directory that starts with `_``.
16
+
17
+ Assume you have three RBS files in your gem package:
18
+
19
+ * `/sig/foo.rbs`
20
+ * `/sig/bar/baz.rbs`
21
+ * `/sig/_private/internal.rbs`
22
+
23
+ `foo.rbs` and `baz.rbs` will be loaded from the gem package, but the `internal.rbs` will be skipped. This is only when you load RBS files of a *library*, for example through `-r` option given to `rbs` command. If you load RBS files as *source code*, for example through `-I` option given to `rbs` command, the hidden RBS files will be loaded too.
24
+
25
+ * `rbs -r your-gem` => Loading a library
26
+ * `rbs -I sig` => Loading RBS files as source code
27
+
28
+ ### Adding `manifest.yaml`
29
+
30
+ `manifest.yaml` lets you declare dependencies to standard libraries. Here is an example, from [RBS gem](https://github.com/ruby/rbs/blob/6b3d0f976a50b3974d0bff26ea8fa9931053f38b/sig/manifest.yaml).
31
+
32
+ ```yaml
33
+ dependencies:
34
+ - name: json
35
+ - name: logger
36
+ - name: optparse
37
+ - name: pathname
38
+ - name: rdoc
39
+ - name: tsort
40
+ ```
41
+
42
+ Note that you don't have to write the dependencies that are included in your `.gemspec`. RBS will detect the dependencies between gems, declared in `.gemspec`. `manifest.yaml` is a material for undeclared dependencies, which usually is for standard libraries.
43
+
44
+ ## Testing your type definition
45
+
46
+ If you develop your gem using a static type checker, like [Steep](https://github.com/soutaro/steep), your type definition will be (mostly) correct and reliable. If not, we strongly recommend adding extra tests focusing on the RBS type definitions.
47
+
48
+ `RBS::UnitTest` is a library to do that. `assert_send_type` is the most important assertion.
49
+
50
+ ```rb
51
+ assert_send_type '(Regexp) { (String) -> String } -> String',
52
+ 'hello', :gsub, /hello/, &proc { "foo" }
53
+ ```
54
+
55
+ It calls `String#gsub` method and confirms if given arguments and the return value has correct types.
56
+
57
+ You can find examples under `test/stdlib` directory of [RBS repository](https://github.com/ruby/rbs/blob/6b3d0f976a50b3974d0bff26ea8fa9931053f38b/test/stdlib/String_test.rb).
@@ -6,20 +6,20 @@ The purpose of this doc is to teach you how to write RBS signatures by using the
6
6
 
7
7
  ## Examples
8
8
 
9
+ In each example, the first snippet is for *Ruby* and the second one is for *RBS*.
10
+
9
11
  ### Zero argument methods
10
12
 
11
13
  **Example:** `String#empty?`
12
14
 
13
15
  ```ruby
14
- # .rb
15
16
  "".empty?
16
17
  # => true
17
18
  "hello".empty?
18
19
  # => false
19
20
  ```
20
21
 
21
- ```ruby
22
- # .rbs
22
+ ```rbs
23
23
  class String
24
24
  def empty?: () -> bool
25
25
  end
@@ -32,14 +32,13 @@ end
32
32
  **Example:** `String#include?`
33
33
 
34
34
  ```ruby
35
- # .rb
36
35
  "homeowner".include?("house")
37
36
  # => false
38
37
  "homeowner".include?("meow")
39
38
  # => true
40
39
  ```
41
40
 
42
- ```ruby
41
+ ```rbs
43
42
  class String
44
43
  def include?: (String) -> bool
45
44
  end
@@ -53,7 +52,6 @@ boolean value
53
52
  **Example:** `String#end_with?`
54
53
 
55
54
  ```ruby
56
- # .rb
57
55
  "hello?".end_with?("!")
58
56
  # => false
59
57
  "hello?".end_with?("?")
@@ -64,8 +62,7 @@ boolean value
64
62
  # => false
65
63
  ```
66
64
 
67
- ```ruby
68
- # .rbs
65
+ ```rbs
69
66
  class String
70
67
  def end_with?: (*String) -> bool
71
68
  end
@@ -79,7 +76,6 @@ returns a boolean value.
79
76
  **Example:** `String#ljust`
80
77
 
81
78
  ```ruby
82
- # .rb
83
79
  "hello".ljust(4)
84
80
  #=> "hello"
85
81
  "hello".ljust(20)
@@ -88,8 +84,7 @@ returns a boolean value.
88
84
  #=> "hello123412341234123"
89
85
  ```
90
86
 
91
- ```ruby
92
- # .rbs
87
+ ```rbs
93
88
  class String
94
89
  def ljust: (Integer, ?String) -> String
95
90
  end
@@ -102,7 +97,6 @@ end
102
97
  **Example:** `Array#*`
103
98
 
104
99
  ```ruby
105
- # .rb
106
100
  [1, 2, 3] * ","
107
101
  # => "1,2,3"
108
102
  [1, 2, 3] * 2
@@ -112,8 +106,7 @@ end
112
106
  *Note:* Some of the signatures after this point include type variables (e.g. `Elem`, `T`).
113
107
  For now, it's safe to ignore them, but they're included for completeness.
114
108
 
115
- ```ruby
116
- # .rbs
109
+ ```rbs
117
110
  class Array[Elem]
118
111
  def *: (String) -> String
119
112
  | (Integer) -> Array[Elem]
@@ -128,7 +121,6 @@ end
128
121
  **Example:** `String#<<`
129
122
 
130
123
  ```ruby
131
- # .rb
132
124
  a = "hello "
133
125
  a << "world"
134
126
  #=> "hello world"
@@ -136,8 +128,7 @@ a << 33
136
128
  #=> "hello world!"
137
129
  ```
138
130
 
139
- ```ruby
140
- # .rbs
131
+ ```rbs
141
132
  class String
142
133
  def <<: (String | Integer) -> String
143
134
  end
@@ -148,7 +139,6 @@ end
148
139
  ### Nilable types
149
140
 
150
141
  ```ruby
151
- # .rb
152
142
  [1, 2, 3].first
153
143
  # => 1
154
144
  [].first
@@ -159,8 +149,7 @@ end
159
149
  # => []
160
150
  ```
161
151
 
162
- ```ruby
163
- # .rbs
152
+ ```rbs
164
153
  class Enumerable[Elem]
165
154
  def first: () -> Elem?
166
155
  | (Integer) -> Array[Elem]
@@ -183,7 +172,6 @@ The `?` syntax is a convenient shorthand for a union with nil. An equivalent uni
183
172
  **Example**: `String#lines`
184
173
 
185
174
  ```ruby
186
- # .rb
187
175
  "hello\nworld\n".lines
188
176
  # => ["hello\n", "world\n"]
189
177
  "hello world".lines(' ')
@@ -192,8 +180,7 @@ The `?` syntax is a convenient shorthand for a union with nil. An equivalent uni
192
180
  # => ["hello", "world"]
193
181
  ```
194
182
 
195
- ```ruby
196
- # .rbs
183
+ ```rbs
197
184
  class String
198
185
  def lines: (?String, ?chomp: bool) -> Array[String]
199
186
  end
@@ -209,12 +196,11 @@ Keyword arguments are declared similar to in ruby, with the keyword immediately
209
196
  **Example**: `Time.now`
210
197
 
211
198
  ```ruby
212
- # .rb
213
199
  Time.now
214
200
  # => 2009-06-24 12:39:54 +0900
215
201
  ```
216
202
 
217
- ```ruby
203
+ ```rbs
218
204
  class Time
219
205
  def self.now: () -> Time
220
206
  end
@@ -228,7 +214,6 @@ end
228
214
  **Example**: `Array#filter`
229
215
 
230
216
  ```ruby
231
- # .rb
232
217
  [1,2,3,4,5].filter {|num| num.even? }
233
218
  # => [2, 4]
234
219
  %w[ a b c d e f ].filter {|v| v =~ /[aeiou]/ }
@@ -236,8 +221,7 @@ end
236
221
  [1,2,3,4,5].filter
237
222
  ```
238
223
 
239
- ```ruby
240
- # .rbs
224
+ ```rbs
241
225
  class Array[Elem]
242
226
  def filter: () { (Elem) -> boolish } -> ::Array[Elem]
243
227
  | () -> ::Enumerator[Elem, ::Array[Elem]]
@@ -260,8 +244,7 @@ h.keys
260
244
  # => ["a", "b", "c", "d"]
261
245
  ```
262
246
 
263
- ```ruby
264
- # .rbs
247
+ ```rbs
265
248
  class Hash[K, V]
266
249
  def keys: () -> Array[K]
267
250
  end
@@ -273,7 +256,6 @@ Generic types in RBS are parameterized at declaration time. These type variables
273
256
 
274
257
 
275
258
  ```ruby
276
- # .rb
277
259
  a = [ "a", "b", "c", "d" ]
278
260
  a.collect {|x| x + "!"}
279
261
  # => ["a!", "b!", "c!", "d!"]
@@ -281,8 +263,7 @@ a.collect.with_index {|x, i| x * i}
281
263
  # => ["", "b", "cc", "ddd"]
282
264
  ```
283
265
 
284
- ```ruby
285
- # .rbs
266
+ ```rbs
286
267
  class Array[Elem]
287
268
  def collect: [U] () { (Elem) -> U } -> Array[U]
288
269
  | () -> Enumerator[Elem, Array[untyped]]
@@ -302,7 +283,7 @@ In this example, the method receives its signature from the inferred return type
302
283
  # => [[2, 4, 6], [1, 3, 5]]
303
284
  ```
304
285
 
305
- ```ruby
286
+ ```rbs
306
287
  class Enumerable[Elem]
307
288
  def partition: () { (Elem) -> boolish } -> [Array[Elem], Array[Elem]]
308
289
  | () -> ::Enumerator[Elem, [Array[Elem], Array[Elem] ]]
@@ -318,7 +299,7 @@ Tuples can be of any size, and they can have mixed types.
318
299
  # => {1=>1, 2=>4, 3=>9, 4=>16, 5=>25}
319
300
  ```
320
301
 
321
- ```ruby
302
+ ```rbs
322
303
  class Enumerable[Elem]
323
304
  def to_h: () -> ::Hash[untyped, untyped]
324
305
  | [T, U] () { (Elem) -> [T, U] } -> ::Hash[T, U]
data/docs/repo.md CHANGED
@@ -13,7 +13,7 @@ Assume there is a rubygem called `bug-free-doodle` and our application depends o
13
13
 
14
14
  One workaround is to add type definitions of the library in the application signatures.
15
15
 
16
- ```
16
+ ```rbs
17
17
  # sig/polyfill/bug-free-doodle.rbs
18
18
 
19
19
  module Bug
data/docs/sigs.md CHANGED
@@ -18,7 +18,7 @@ See [syntax guide](syntax.md).
18
18
  When you finish writing signature, you may want to test the signature.
19
19
  rbs provides a feature to test your signature.
20
20
 
21
- ```
21
+ ```console
22
22
  $ RBS_TEST_TARGET='Foo::*' bundle exec ruby -r rbs/test/setup test/foo_test.rb
23
23
  ```
24
24
 
@@ -74,7 +74,7 @@ The `rbs` test framework tries to the best error message for overloaded methods
74
74
 
75
75
  The error is reported when a method is defined multiple times, as RBS does not allow duplicate method definitions. When you need to overload a method, use the `...` syntax:
76
76
 
77
- ```ruby
77
+ ```rbs
78
78
  # First definition
79
79
  class C
80
80
  def foo: () -> untyped
@@ -99,14 +99,14 @@ The design of the signature testing aims to be non-intrusive. The setup is done
99
99
  You need to require `rbs/test/setup` for signature testing.
100
100
  You can do it using `-r` option through command line argument or the `RUBYOPT` environment variable.
101
101
 
102
- ```
102
+ ```console
103
103
  $ ruby -r rbs/test/setup run_tests.rb
104
104
  $ RUBYOPT='-rrbs/test/setup' rake test
105
105
  ```
106
106
 
107
107
  When you are using Bundler, you may need to require `bundler/setup` explicitly.
108
108
 
109
- ```
109
+ ```console
110
110
  $ RUBYOPT='-rbundler/setup -rrbs/test/setup' bundle exec rake test
111
111
  ```
112
112
 
@@ -130,7 +130,7 @@ You need to specify `RBS_TEST_TARGET` to run the test, and you can customize the
130
130
  You may need to specify `-r` or `-I` to load signatures.
131
131
  The default is `-I sig`.
132
132
 
133
- ```
133
+ ```shell
134
134
  RBS_TEST_OPT='-r pathname -I sig'
135
135
  ```
136
136
 
@@ -144,7 +144,7 @@ You can see the backtrace how the type error is caused and debug your program or
144
144
 
145
145
  So, a typical command line to start the test would look like the following:
146
146
 
147
- ```
147
+ ```console
148
148
  $ RBS_TEST_LOGLEVEL=error \
149
149
  RBS_TEST_TARGET='Kaigi::*' \
150
150
  RBS_TEST_SKIP='Kaigi::MonkeyPatch' \
@@ -160,7 +160,7 @@ $ RBS_TEST_LOGLEVEL=error \
160
160
 
161
161
  You can skip installing the instrumentation per-method basis using `rbs:test:skip` annotation.
162
162
 
163
- ```
163
+ ```rbs
164
164
  class String
165
165
  %a{rbs:test:skip} def =~: (Regexp) -> Integer?
166
166
  end
data/docs/stdlib.md CHANGED
@@ -10,7 +10,7 @@ We support writing tests for core/stdlib signatures.
10
10
 
11
11
  First, execute `generate:stdlib_test` rake task with a class name that you want to test.
12
12
 
13
- ```bash
13
+ ```console
14
14
  $ bundle exec rake 'generate:stdlib_test[String]'
15
15
  Created: test/stdlib/String_test.rb
16
16
  ```
@@ -47,7 +47,6 @@ end
47
47
  class StringTest < Test::Unit::TestCase
48
48
  include TypeAssertions
49
49
 
50
- # library "pathname", "set", "securerandom" # Declare library signatures to load
51
50
  testing "::String"
52
51
 
53
52
  def test_gsub
@@ -73,17 +72,76 @@ end
73
72
 
74
73
  You need include `TypeAssertions` which provide useful methods for you.
75
74
  `testing` method call tells which class is the subject of the class.
76
- `assert_send_type` method call asserts to be valid types and confirms to be able to execute without exceptions.
77
- And you write the sample programs which calls all of the patterns of overloads.
75
+ You may need `library` call to test a library if the type definition is provided as a library (under `stdlib` dir).
78
76
 
79
77
  Note that the instrumentation is based on refinements and you need to write all method calls in the unit class definitions.
80
78
  If the execution of the program escape from the class definition, the instrumentation is disabled and no check will be done.
81
79
 
80
+ #### 📣 Method type assertions
81
+
82
+ `assert_send_type` method call asserts to be valid types and confirms to be able to execute without exceptions.
83
+ And you write the sample programs which calls all of the patterns of overloads.
84
+
85
+ We recommend write method types as _simple_ as possible inside the assertion.
86
+ It's not very easy to define _simple_, but we try to explain it with a few examples.
87
+
88
+ * Instead of `(String | Integer) -> Symbol?`, use `(String) -> Symbol` or `(Integer) -> nil`, because we know the exact argument type we are passing in the test
89
+ * Instead of `self`, `instance`, or `class`, use concrete types like `String`, `singleton(IO)`, because we know the exact type of the receiver
90
+ * Sometimes, you need union types if the method is nondeterministic -- `() -> (Integer | String)` for `[1, ""].sample` (But you can rewrite the test code as `[1].sample` instead)
91
+ * Sometimes, you need union types for heterogeneous collections -- `() { (Integer | String) -> String } -> Array[String | Integer]` for `[1, "2"].each {|i| i.to_s }` (But you can rewrite the test code as `[1, 2].each {|i| i.to_s }`)
92
+ * Using `void` is allowed if the RBS definition is `void`
93
+
94
+ Generally _simple_ means:
95
+
96
+ * The type doesn't contain `self`, `instance`, `class`, `top`, `bot`, and `untyped`
97
+ * The type doesn't contain unions and optionals
98
+
99
+ Use them if you cannot write the test without them.
100
+
101
+ One clear exception to using _simple_ types is when you use `with_int` or family helpers, that yield values with each case of the given union:
102
+
103
+ ```ruby
104
+ def test_something
105
+ with_int(3) do |int|
106
+ # Yields twice with `Integer` and `ToInt`
107
+ assert_send_type(
108
+ "(int) -> Integer",
109
+ some, :test, int
110
+ )
111
+ end
112
+ end
113
+ ```
114
+
115
+ It's clear having type aliases makes sense.
116
+
117
+ #### 📣 Constant type assertions
118
+
119
+ We also have `assert_const_type` method, to test the type of constant is correct with respect to RBS type definition.
120
+
121
+ ```ruby
122
+ class FloatConstantTest < Test::Unit::TestCase
123
+ include TypeAssertions
124
+
125
+ def test_infinity
126
+ assert_const_type "Float", "Float::INFINITY"
127
+ end
128
+ end
129
+ ```
130
+
131
+ It confirms:
132
+
133
+ 1. The type of constant `Float::INFINITY` is `Float`
134
+ 2. The type of constant `Float::INFINITY` is correct with respect to RBS definition
135
+
136
+ We don't have any strong recommendation about where the constants test should be written in.
137
+ The `FloatConstantTest` example defines a test case only for the constant tests.
138
+ You may write the tests inside `FloatInstanceTest` or `FloatSingletonTest`.
139
+
82
140
  ### Running tests
83
141
 
84
142
  You can run the test with:
85
143
 
86
- ```
144
+ ```console
87
145
  $ bundle exec rake stdlib_test # Run all tests
88
146
  $ bundle exec ruby test/stdlib/String_test.rb # Run specific tests
89
147
  ```