rbs-relaxed 3.9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +22 -0
  3. data/.github/workflows/comments.yml +35 -0
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +82 -0
  6. data/.github/workflows/typecheck.yml +38 -0
  7. data/.github/workflows/windows.yml +43 -0
  8. data/.gitignore +23 -0
  9. data/.rubocop.yml +68 -0
  10. data/BSDL +22 -0
  11. data/CHANGELOG.md +1868 -0
  12. data/COPYING +56 -0
  13. data/README.md +203 -0
  14. data/Rakefile +417 -0
  15. data/Steepfile +44 -0
  16. data/config.yml +313 -0
  17. data/core/array.rbs +4062 -0
  18. data/core/basic_object.rbs +375 -0
  19. data/core/binding.rbs +150 -0
  20. data/core/builtin.rbs +277 -0
  21. data/core/class.rbs +220 -0
  22. data/core/comparable.rbs +171 -0
  23. data/core/complex.rbs +786 -0
  24. data/core/constants.rbs +96 -0
  25. data/core/data.rbs +415 -0
  26. data/core/dir.rbs +981 -0
  27. data/core/encoding.rbs +1371 -0
  28. data/core/enumerable.rbs +2405 -0
  29. data/core/enumerator/product.rbs +92 -0
  30. data/core/enumerator.rbs +630 -0
  31. data/core/env.rbs +6 -0
  32. data/core/errno.rbs +673 -0
  33. data/core/errors.rbs +760 -0
  34. data/core/exception.rbs +485 -0
  35. data/core/false_class.rbs +82 -0
  36. data/core/fiber.rbs +550 -0
  37. data/core/fiber_error.rbs +11 -0
  38. data/core/file.rbs +2936 -0
  39. data/core/file_test.rbs +331 -0
  40. data/core/float.rbs +1151 -0
  41. data/core/gc.rbs +644 -0
  42. data/core/global_variables.rbs +184 -0
  43. data/core/hash.rbs +1861 -0
  44. data/core/integer.rbs +1413 -0
  45. data/core/io/buffer.rbs +984 -0
  46. data/core/io/wait.rbs +70 -0
  47. data/core/io.rbs +3406 -0
  48. data/core/kernel.rbs +3096 -0
  49. data/core/marshal.rbs +207 -0
  50. data/core/match_data.rbs +635 -0
  51. data/core/math.rbs +729 -0
  52. data/core/method.rbs +386 -0
  53. data/core/module.rbs +1704 -0
  54. data/core/nil_class.rbs +209 -0
  55. data/core/numeric.rbs +818 -0
  56. data/core/object.rbs +110 -0
  57. data/core/object_space/weak_key_map.rbs +166 -0
  58. data/core/object_space.rbs +190 -0
  59. data/core/proc.rbs +868 -0
  60. data/core/process.rbs +2296 -0
  61. data/core/ractor.rbs +1068 -0
  62. data/core/random.rbs +237 -0
  63. data/core/range.rbs +1107 -0
  64. data/core/rational.rbs +531 -0
  65. data/core/rb_config.rbs +88 -0
  66. data/core/rbs/unnamed/argf.rbs +1229 -0
  67. data/core/rbs/unnamed/env_class.rbs +1209 -0
  68. data/core/rbs/unnamed/random.rbs +293 -0
  69. data/core/refinement.rbs +59 -0
  70. data/core/regexp.rbs +1930 -0
  71. data/core/ruby_vm.rbs +765 -0
  72. data/core/rubygems/basic_specification.rbs +6 -0
  73. data/core/rubygems/config_file.rbs +38 -0
  74. data/core/rubygems/dependency_installer.rbs +6 -0
  75. data/core/rubygems/errors.rbs +176 -0
  76. data/core/rubygems/installer.rbs +15 -0
  77. data/core/rubygems/path_support.rbs +6 -0
  78. data/core/rubygems/platform.rbs +7 -0
  79. data/core/rubygems/request_set.rbs +49 -0
  80. data/core/rubygems/requirement.rbs +148 -0
  81. data/core/rubygems/rubygems.rbs +1171 -0
  82. data/core/rubygems/source_list.rbs +15 -0
  83. data/core/rubygems/specification.rbs +23 -0
  84. data/core/rubygems/stream_ui.rbs +5 -0
  85. data/core/rubygems/uninstaller.rbs +10 -0
  86. data/core/rubygems/version.rbs +294 -0
  87. data/core/set.rbs +621 -0
  88. data/core/signal.rbs +100 -0
  89. data/core/string.rbs +3583 -0
  90. data/core/struct.rbs +667 -0
  91. data/core/symbol.rbs +475 -0
  92. data/core/thread.rbs +1765 -0
  93. data/core/thread_group.rbs +79 -0
  94. data/core/time.rbs +1762 -0
  95. data/core/trace_point.rbs +477 -0
  96. data/core/true_class.rbs +98 -0
  97. data/core/unbound_method.rbs +329 -0
  98. data/core/warning.rbs +87 -0
  99. data/docs/CONTRIBUTING.md +106 -0
  100. data/docs/architecture.md +110 -0
  101. data/docs/collection.md +192 -0
  102. data/docs/data_and_struct.md +86 -0
  103. data/docs/gem.md +57 -0
  104. data/docs/rbs_by_example.md +309 -0
  105. data/docs/repo.md +125 -0
  106. data/docs/sigs.md +167 -0
  107. data/docs/stdlib.md +147 -0
  108. data/docs/syntax.md +910 -0
  109. data/docs/tools.md +17 -0
  110. data/exe/rbs +7 -0
  111. data/ext/rbs_extension/extconf.rb +15 -0
  112. data/ext/rbs_extension/lexer.c +2728 -0
  113. data/ext/rbs_extension/lexer.h +179 -0
  114. data/ext/rbs_extension/lexer.re +147 -0
  115. data/ext/rbs_extension/lexstate.c +175 -0
  116. data/ext/rbs_extension/location.c +325 -0
  117. data/ext/rbs_extension/location.h +85 -0
  118. data/ext/rbs_extension/main.c +33 -0
  119. data/ext/rbs_extension/parser.c +2973 -0
  120. data/ext/rbs_extension/parser.h +18 -0
  121. data/ext/rbs_extension/parserstate.c +397 -0
  122. data/ext/rbs_extension/parserstate.h +163 -0
  123. data/ext/rbs_extension/rbs_extension.h +31 -0
  124. data/ext/rbs_extension/unescape.c +32 -0
  125. data/goodcheck.yml +91 -0
  126. data/include/rbs/constants.h +82 -0
  127. data/include/rbs/ruby_objs.h +72 -0
  128. data/include/rbs/util/rbs_constant_pool.h +219 -0
  129. data/include/rbs.h +7 -0
  130. data/lib/rbs/ancestor_graph.rb +92 -0
  131. data/lib/rbs/annotate/annotations.rb +199 -0
  132. data/lib/rbs/annotate/formatter.rb +92 -0
  133. data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
  134. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  135. data/lib/rbs/annotate.rb +8 -0
  136. data/lib/rbs/ast/annotation.rb +29 -0
  137. data/lib/rbs/ast/comment.rb +29 -0
  138. data/lib/rbs/ast/declarations.rb +467 -0
  139. data/lib/rbs/ast/directives.rb +49 -0
  140. data/lib/rbs/ast/members.rb +451 -0
  141. data/lib/rbs/ast/type_param.rb +225 -0
  142. data/lib/rbs/ast/visitor.rb +137 -0
  143. data/lib/rbs/buffer.rb +67 -0
  144. data/lib/rbs/builtin_names.rb +58 -0
  145. data/lib/rbs/cli/colored_io.rb +48 -0
  146. data/lib/rbs/cli/diff.rb +83 -0
  147. data/lib/rbs/cli/validate.rb +357 -0
  148. data/lib/rbs/cli.rb +1223 -0
  149. data/lib/rbs/collection/cleaner.rb +38 -0
  150. data/lib/rbs/collection/config/lockfile.rb +92 -0
  151. data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
  152. data/lib/rbs/collection/config.rb +81 -0
  153. data/lib/rbs/collection/installer.rb +32 -0
  154. data/lib/rbs/collection/sources/base.rb +14 -0
  155. data/lib/rbs/collection/sources/git.rb +258 -0
  156. data/lib/rbs/collection/sources/local.rb +81 -0
  157. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  158. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  159. data/lib/rbs/collection/sources.rb +38 -0
  160. data/lib/rbs/collection.rb +16 -0
  161. data/lib/rbs/constant.rb +28 -0
  162. data/lib/rbs/definition.rb +401 -0
  163. data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
  164. data/lib/rbs/definition_builder/method_builder.rb +254 -0
  165. data/lib/rbs/definition_builder.rb +845 -0
  166. data/lib/rbs/diff.rb +125 -0
  167. data/lib/rbs/environment/use_map.rb +77 -0
  168. data/lib/rbs/environment.rb +829 -0
  169. data/lib/rbs/environment_loader.rb +173 -0
  170. data/lib/rbs/environment_walker.rb +155 -0
  171. data/lib/rbs/errors.rb +645 -0
  172. data/lib/rbs/factory.rb +18 -0
  173. data/lib/rbs/file_finder.rb +28 -0
  174. data/lib/rbs/location_aux.rb +138 -0
  175. data/lib/rbs/locator.rb +243 -0
  176. data/lib/rbs/method_type.rb +143 -0
  177. data/lib/rbs/namespace.rb +125 -0
  178. data/lib/rbs/parser/lex_result.rb +15 -0
  179. data/lib/rbs/parser/token.rb +23 -0
  180. data/lib/rbs/parser_aux.rb +114 -0
  181. data/lib/rbs/prototype/helpers.rb +140 -0
  182. data/lib/rbs/prototype/node_usage.rb +99 -0
  183. data/lib/rbs/prototype/rb.rb +840 -0
  184. data/lib/rbs/prototype/rbi.rb +641 -0
  185. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  186. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  187. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  188. data/lib/rbs/prototype/runtime.rb +667 -0
  189. data/lib/rbs/repository.rb +127 -0
  190. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  191. data/lib/rbs/resolver/type_name_resolver.rb +91 -0
  192. data/lib/rbs/sorter.rb +198 -0
  193. data/lib/rbs/substitution.rb +83 -0
  194. data/lib/rbs/subtractor.rb +201 -0
  195. data/lib/rbs/test/errors.rb +80 -0
  196. data/lib/rbs/test/guaranteed.rb +30 -0
  197. data/lib/rbs/test/hook.rb +212 -0
  198. data/lib/rbs/test/observer.rb +19 -0
  199. data/lib/rbs/test/setup.rb +84 -0
  200. data/lib/rbs/test/setup_helper.rb +50 -0
  201. data/lib/rbs/test/tester.rb +167 -0
  202. data/lib/rbs/test/type_check.rb +435 -0
  203. data/lib/rbs/test.rb +112 -0
  204. data/lib/rbs/type_alias_dependency.rb +100 -0
  205. data/lib/rbs/type_alias_regularity.rb +126 -0
  206. data/lib/rbs/type_name.rb +109 -0
  207. data/lib/rbs/types.rb +1596 -0
  208. data/lib/rbs/unit_test/convertibles.rb +176 -0
  209. data/lib/rbs/unit_test/spy.rb +138 -0
  210. data/lib/rbs/unit_test/type_assertions.rb +347 -0
  211. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  212. data/lib/rbs/unit_test.rb +6 -0
  213. data/lib/rbs/validator.rb +186 -0
  214. data/lib/rbs/variance_calculator.rb +189 -0
  215. data/lib/rbs/vendorer.rb +71 -0
  216. data/lib/rbs/version.rb +5 -0
  217. data/lib/rbs/writer.rb +424 -0
  218. data/lib/rbs.rb +94 -0
  219. data/lib/rdoc/discover.rb +20 -0
  220. data/lib/rdoc_plugin/parser.rb +163 -0
  221. data/rbs-relaxed.gemspec +48 -0
  222. data/schema/annotation.json +14 -0
  223. data/schema/comment.json +26 -0
  224. data/schema/decls.json +326 -0
  225. data/schema/function.json +87 -0
  226. data/schema/location.json +56 -0
  227. data/schema/members.json +266 -0
  228. data/schema/methodType.json +50 -0
  229. data/schema/typeParam.json +36 -0
  230. data/schema/types.json +317 -0
  231. data/sig/ancestor_builder.rbs +163 -0
  232. data/sig/ancestor_graph.rbs +60 -0
  233. data/sig/annotate/annotations.rbs +102 -0
  234. data/sig/annotate/formatter.rbs +24 -0
  235. data/sig/annotate/rdoc_annotater.rbs +82 -0
  236. data/sig/annotate/rdoc_source.rbs +30 -0
  237. data/sig/annotation.rbs +27 -0
  238. data/sig/buffer.rbs +32 -0
  239. data/sig/builtin_names.rbs +44 -0
  240. data/sig/cli/colored_io.rbs +15 -0
  241. data/sig/cli/diff.rbs +21 -0
  242. data/sig/cli/validate.rbs +43 -0
  243. data/sig/cli.rbs +87 -0
  244. data/sig/collection/cleaner.rbs +13 -0
  245. data/sig/collection/config/lockfile.rbs +74 -0
  246. data/sig/collection/config/lockfile_generator.rbs +66 -0
  247. data/sig/collection/config.rbs +46 -0
  248. data/sig/collection/installer.rbs +17 -0
  249. data/sig/collection/sources.rbs +214 -0
  250. data/sig/collection.rbs +4 -0
  251. data/sig/comment.rbs +26 -0
  252. data/sig/constant.rbs +21 -0
  253. data/sig/declarations.rbs +267 -0
  254. data/sig/definition.rbs +173 -0
  255. data/sig/definition_builder.rbs +165 -0
  256. data/sig/diff.rbs +28 -0
  257. data/sig/directives.rbs +77 -0
  258. data/sig/environment.rbs +279 -0
  259. data/sig/environment_loader.rbs +111 -0
  260. data/sig/environment_walker.rbs +65 -0
  261. data/sig/errors.rbs +405 -0
  262. data/sig/factory.rbs +5 -0
  263. data/sig/file_finder.rbs +28 -0
  264. data/sig/location.rbs +110 -0
  265. data/sig/locator.rbs +58 -0
  266. data/sig/manifest.yaml +7 -0
  267. data/sig/members.rbs +258 -0
  268. data/sig/method_builder.rbs +84 -0
  269. data/sig/method_types.rbs +58 -0
  270. data/sig/namespace.rbs +146 -0
  271. data/sig/parser.rbs +100 -0
  272. data/sig/prototype/helpers.rbs +27 -0
  273. data/sig/prototype/node_usage.rbs +20 -0
  274. data/sig/prototype/rb.rbs +96 -0
  275. data/sig/prototype/rbi.rbs +75 -0
  276. data/sig/prototype/runtime.rbs +182 -0
  277. data/sig/rbs.rbs +21 -0
  278. data/sig/rdoc/rbs.rbs +67 -0
  279. data/sig/repository.rbs +85 -0
  280. data/sig/resolver/constant_resolver.rbs +92 -0
  281. data/sig/resolver/context.rbs +34 -0
  282. data/sig/resolver/type_name_resolver.rbs +35 -0
  283. data/sig/shims/bundler.rbs +38 -0
  284. data/sig/shims/enumerable.rbs +5 -0
  285. data/sig/shims/rubygems.rbs +19 -0
  286. data/sig/sorter.rbs +41 -0
  287. data/sig/substitution.rbs +48 -0
  288. data/sig/subtractor.rbs +37 -0
  289. data/sig/test/errors.rbs +52 -0
  290. data/sig/test/guranteed.rbs +9 -0
  291. data/sig/test/type_check.rbs +19 -0
  292. data/sig/test.rbs +82 -0
  293. data/sig/type_alias_dependency.rbs +53 -0
  294. data/sig/type_alias_regularity.rbs +98 -0
  295. data/sig/type_param.rbs +110 -0
  296. data/sig/typename.rbs +79 -0
  297. data/sig/types.rbs +579 -0
  298. data/sig/unit_test/convertibles.rbs +154 -0
  299. data/sig/unit_test/spy.rbs +30 -0
  300. data/sig/unit_test/type_assertions.rbs +196 -0
  301. data/sig/unit_test/with_aliases.rbs +136 -0
  302. data/sig/use_map.rbs +35 -0
  303. data/sig/util.rbs +9 -0
  304. data/sig/validator.rbs +63 -0
  305. data/sig/variance_calculator.rbs +87 -0
  306. data/sig/vendorer.rbs +51 -0
  307. data/sig/version.rbs +3 -0
  308. data/sig/visitor.rbs +47 -0
  309. data/sig/writer.rbs +127 -0
  310. data/src/constants.c +153 -0
  311. data/src/ruby_objs.c +795 -0
  312. data/src/util/rbs_constant_pool.c +342 -0
  313. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  314. data/stdlib/abbrev/0/array.rbs +26 -0
  315. data/stdlib/base64/0/base64.rbs +355 -0
  316. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  317. data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
  318. data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
  319. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  320. data/stdlib/cgi/0/core.rbs +1285 -0
  321. data/stdlib/cgi/0/manifest.yaml +3 -0
  322. data/stdlib/coverage/0/coverage.rbs +263 -0
  323. data/stdlib/csv/0/csv.rbs +3776 -0
  324. data/stdlib/csv/0/manifest.yaml +3 -0
  325. data/stdlib/date/0/date.rbs +1585 -0
  326. data/stdlib/date/0/date_time.rbs +616 -0
  327. data/stdlib/date/0/time.rbs +26 -0
  328. data/stdlib/dbm/0/dbm.rbs +421 -0
  329. data/stdlib/delegate/0/delegator.rbs +184 -0
  330. data/stdlib/delegate/0/kernel.rbs +47 -0
  331. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  332. data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
  333. data/stdlib/digest/0/digest.rbs +577 -0
  334. data/stdlib/erb/0/erb.rbs +532 -0
  335. data/stdlib/etc/0/etc.rbs +865 -0
  336. data/stdlib/fileutils/0/fileutils.rbs +1734 -0
  337. data/stdlib/find/0/find.rbs +49 -0
  338. data/stdlib/forwardable/0/forwardable.rbs +268 -0
  339. data/stdlib/io-console/0/io-console.rbs +414 -0
  340. data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
  341. data/stdlib/json/0/json.rbs +1916 -0
  342. data/stdlib/kconv/0/kconv.rbs +166 -0
  343. data/stdlib/logger/0/formatter.rbs +45 -0
  344. data/stdlib/logger/0/log_device.rbs +100 -0
  345. data/stdlib/logger/0/logger.rbs +796 -0
  346. data/stdlib/logger/0/manifest.yaml +2 -0
  347. data/stdlib/logger/0/period.rbs +17 -0
  348. data/stdlib/logger/0/severity.rbs +34 -0
  349. data/stdlib/minitest/0/kernel.rbs +42 -0
  350. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  351. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  352. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  353. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  354. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  355. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  356. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  357. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  358. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  359. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  360. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  361. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  362. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  363. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  364. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  365. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  366. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  367. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  368. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  369. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  370. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  371. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  372. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  373. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  374. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  375. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  376. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  377. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  378. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  379. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  380. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  381. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  382. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  383. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  384. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  385. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  386. data/stdlib/minitest/0/minitest.rbs +115 -0
  387. data/stdlib/monitor/0/monitor.rbs +363 -0
  388. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  389. data/stdlib/net-http/0/manifest.yaml +3 -0
  390. data/stdlib/net-http/0/net-http.rbs +5552 -0
  391. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  392. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  393. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  394. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  395. data/stdlib/nkf/0/nkf.rbs +402 -0
  396. data/stdlib/objspace/0/objspace.rbs +487 -0
  397. data/stdlib/observable/0/observable.rbs +217 -0
  398. data/stdlib/open-uri/0/manifest.yaml +4 -0
  399. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  400. data/stdlib/open3/0/open3.rbs +147 -0
  401. data/stdlib/openssl/0/manifest.yaml +3 -0
  402. data/stdlib/openssl/0/openssl.rbs +12113 -0
  403. data/stdlib/optparse/0/optparse.rbs +1725 -0
  404. data/stdlib/pathname/0/pathname.rbs +1406 -0
  405. data/stdlib/pp/0/manifest.yaml +2 -0
  406. data/stdlib/pp/0/pp.rbs +300 -0
  407. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  408. data/stdlib/pstore/0/pstore.rbs +603 -0
  409. data/stdlib/psych/0/core_ext.rbs +12 -0
  410. data/stdlib/psych/0/dbm.rbs +237 -0
  411. data/stdlib/psych/0/manifest.yaml +3 -0
  412. data/stdlib/psych/0/psych.rbs +402 -0
  413. data/stdlib/psych/0/store.rbs +59 -0
  414. data/stdlib/pty/0/pty.rbs +237 -0
  415. data/stdlib/rdoc/0/code_object.rbs +51 -0
  416. data/stdlib/rdoc/0/comment.rbs +59 -0
  417. data/stdlib/rdoc/0/context.rbs +153 -0
  418. data/stdlib/rdoc/0/markup.rbs +117 -0
  419. data/stdlib/rdoc/0/parser.rbs +56 -0
  420. data/stdlib/rdoc/0/rdoc.rbs +391 -0
  421. data/stdlib/rdoc/0/ri.rbs +17 -0
  422. data/stdlib/rdoc/0/store.rbs +48 -0
  423. data/stdlib/rdoc/0/top_level.rbs +97 -0
  424. data/stdlib/resolv/0/manifest.yaml +3 -0
  425. data/stdlib/resolv/0/resolv.rbs +1830 -0
  426. data/stdlib/ripper/0/ripper.rbs +1648 -0
  427. data/stdlib/securerandom/0/securerandom.rbs +62 -0
  428. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  429. data/stdlib/singleton/0/singleton.rbs +131 -0
  430. data/stdlib/socket/0/addrinfo.rbs +666 -0
  431. data/stdlib/socket/0/basic_socket.rbs +590 -0
  432. data/stdlib/socket/0/constants.rbs +2295 -0
  433. data/stdlib/socket/0/ip_socket.rbs +92 -0
  434. data/stdlib/socket/0/socket.rbs +4157 -0
  435. data/stdlib/socket/0/socket_error.rbs +5 -0
  436. data/stdlib/socket/0/tcp_server.rbs +192 -0
  437. data/stdlib/socket/0/tcp_socket.rbs +79 -0
  438. data/stdlib/socket/0/udp_socket.rbs +133 -0
  439. data/stdlib/socket/0/unix_server.rbs +169 -0
  440. data/stdlib/socket/0/unix_socket.rbs +172 -0
  441. data/stdlib/stringio/0/stringio.rbs +567 -0
  442. data/stdlib/strscan/0/string_scanner.rbs +1627 -0
  443. data/stdlib/tempfile/0/tempfile.rbs +479 -0
  444. data/stdlib/time/0/time.rbs +432 -0
  445. data/stdlib/timeout/0/timeout.rbs +81 -0
  446. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  447. data/stdlib/tsort/0/cyclic.rbs +5 -0
  448. data/stdlib/tsort/0/interfaces.rbs +20 -0
  449. data/stdlib/tsort/0/tsort.rbs +409 -0
  450. data/stdlib/uri/0/common.rbs +582 -0
  451. data/stdlib/uri/0/file.rbs +118 -0
  452. data/stdlib/uri/0/ftp.rbs +13 -0
  453. data/stdlib/uri/0/generic.rbs +1108 -0
  454. data/stdlib/uri/0/http.rbs +104 -0
  455. data/stdlib/uri/0/https.rbs +14 -0
  456. data/stdlib/uri/0/ldap.rbs +230 -0
  457. data/stdlib/uri/0/ldaps.rbs +14 -0
  458. data/stdlib/uri/0/mailto.rbs +92 -0
  459. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  460. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  461. data/stdlib/uri/0/ws.rbs +13 -0
  462. data/stdlib/uri/0/wss.rbs +9 -0
  463. data/stdlib/yaml/0/manifest.yaml +2 -0
  464. data/stdlib/yaml/0/yaml.rbs +1 -0
  465. data/stdlib/zlib/0/buf_error.rbs +10 -0
  466. data/stdlib/zlib/0/data_error.rbs +10 -0
  467. data/stdlib/zlib/0/deflate.rbs +210 -0
  468. data/stdlib/zlib/0/error.rbs +20 -0
  469. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  470. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  471. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  472. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  473. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  474. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  475. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  476. data/stdlib/zlib/0/inflate.rbs +180 -0
  477. data/stdlib/zlib/0/mem_error.rbs +10 -0
  478. data/stdlib/zlib/0/need_dict.rbs +13 -0
  479. data/stdlib/zlib/0/stream_end.rbs +11 -0
  480. data/stdlib/zlib/0/stream_error.rbs +11 -0
  481. data/stdlib/zlib/0/version_error.rbs +11 -0
  482. data/stdlib/zlib/0/zlib.rbs +449 -0
  483. data/stdlib/zlib/0/zstream.rbs +200 -0
  484. metadata +532 -0
data/docs/repo.md ADDED
@@ -0,0 +1,125 @@
1
+ # Third-party RBS Repository
2
+
3
+ This is the spec of the directory structure for RBS files of gems without RBS files. It allows distributing RBS type definitions of gems separately from the `.gemspec` files so that the Ruby developers can type check their Ruby programs even if the dependent gems don't ship with their type definitions.
4
+
5
+ The spec includes:
6
+
7
+ * The directory structure, and
8
+ * The RBS file lookup rules given _repository root_, gem name, and version.
9
+
10
+ ## Motivating Example
11
+
12
+ Assume there is a rubygem called `bug-free-doodle` and our application depends on the library. We are trying to type check our application and we need RBS files of `bug-free-doodle`. The problem is that the `bug-free-doodle` gem doesn't ship with RBS files. The type checkers cannot resolve the type of constant `Bug::Free::Doodle` and its methods.
13
+
14
+ One workaround is to add type definitions of the library in the application signatures.
15
+
16
+ ```rbs
17
+ # sig/polyfill/bug-free-doodle.rbs
18
+
19
+ module Bug
20
+ module Free
21
+ class Doodle
22
+ attr_reader name: Symbol
23
+ attr_reader strokes: Array[Stroke]
24
+
25
+ def initialize: (name: Symbol) -> void
26
+ end
27
+ end
28
+ end
29
+ ```
30
+
31
+ You may want to distribute the RBS file to anyone who needs it. Which version do we support? Testing it? How to load the RBS files? This is the spec you need!
32
+
33
+ ### Third-party RBS repository
34
+
35
+ Make a directory (or you may want to `git init`) to put your _third party RBSs_.
36
+
37
+ ```sh
38
+ $ make my-rbs # Or you may want a git repository: git init my-rbs
39
+ $ cd my-rbs
40
+ $ mkdir gems
41
+ ```
42
+
43
+ We call the `my-rbs/gems` directory _repository root_. Note that it is different from the root of the git repository. The RBS repository root is the directory that contains directories of gem names.
44
+
45
+ Make a directory for the gem and the version.
46
+
47
+ ```sh
48
+ $ mkdir gems/bug-free-doodle
49
+ $ mkdir gems/bug-free-doodle/1.2.3
50
+ ```
51
+
52
+ And copy the RBS file in it.
53
+
54
+ ```sh
55
+ $ cp your-app/sig/polyfill/bug-free-doodle.rbs gems/bug-free-doodle/1.2.3
56
+ ```
57
+
58
+ ### Reading Third-party RBS
59
+
60
+ `rbs` command accepts `--repo` option which points to a _repository root_. You can specify `-r` option to let the command know which gems you want to load.
61
+
62
+ In this case, the _repository root_ is `./gems` and we are trying to load `bug-free-doodle` gem.
63
+
64
+ ```sh
65
+ $ rbs --repo=gems -r bug-free-doodle paths
66
+ ```
67
+
68
+ The `-r` option also accepts gem name with version.
69
+
70
+ ```sh
71
+ $ rbs --repo=gems -r bug-free-doodle:1.2.3 paths
72
+ ```
73
+
74
+ Note that the version resolution is not compatible with semantic versioning. It is optimistic. It resolves to some version unless no version for the gem is available.
75
+
76
+ ## Directory Structure
77
+
78
+ There are directories for each gem under _repository root_. We also have directories for each version of each gem.
79
+
80
+ - $REPO_ROOT/bug-free-doodle/0.2.0
81
+ - $REPO_ROOT/bug-free-doodle/1.0
82
+ - $REPO_ROOT/bug-free-doodle/1.2.3
83
+ - $REPO_ROOT/bug-free-doodle/2.0
84
+
85
+ Note that we assume that we have git repositories for each RBS repository, and we have a directory at the root of the git repository for _repository root_.
86
+
87
+ So the git repository structure would be something like the following:
88
+
89
+ - /Gemfile
90
+ - /Gemfile.lock
91
+ - /README.md
92
+ - /LICENSE
93
+ - /gems/bug-free-doodle/1.2.3/bug-free-doodle.rbs
94
+
95
+ You should have `Gemfile` and `Gemfile.lock` to manage dependencies, `README.md` and `LICENSE` to documentation, and `gems` directory as _repository root_.
96
+
97
+ (We call _repository root_ `gems` in this doc, but the name can be anything you like.)
98
+
99
+ ## Version Resolution
100
+
101
+ The version resolution in RBS is optimistic. We don't block loading RBS files for _incompatible_ version in terms of semantic versioning.
102
+
103
+ It tries to resolve version _n_ as follows:
104
+
105
+ 1. It resolves to _m_ such that _m_ is the latest version available and _m_ <= _n_ holds.
106
+ 2. It resolves to the oldest version when rule 1 cannot find version _m_.
107
+
108
+ If two versions, `0.4.0`, `1.0.0` are available for a gem:
109
+
110
+ | Requested version | Resolved version |
111
+ |-------------------|------------------|
112
+ | `0.3.0` | `0.4.0` (Rule 2) |
113
+ | `0.4.0` | `0.4.0` |
114
+ | `0.5.0` | `0.4.0` |
115
+ | `1.0.0` | `1.0.0` |
116
+ | `2.0.0` | `1.0.0` |
117
+
118
+ This is not compatible with the concept of semantic versioning. We don't want to block users to load RBS even for incompatible versions of gems.
119
+
120
+ We believe this makes more sense because:
121
+
122
+ * Using (potentially) incompatible type definitions are better than no type definition.
123
+ * Users can stop loading RBS if incompatibility causes an issue and falling back to hand-written polyfills.
124
+
125
+
data/docs/sigs.md ADDED
@@ -0,0 +1,167 @@
1
+ # Writing Signatures Guide
2
+
3
+ You can write the signature of your applications and libraries.
4
+ Signature of your Ruby program would help:
5
+
6
+ 1. Understanding the code structure
7
+ 2. Finding APIs
8
+
9
+ And if you ship your gem with signature, the gem users can type check their applications!
10
+
11
+ ## Writing signatures
12
+
13
+ You first need to write your program's signature.
14
+ See [syntax guide](syntax.md).
15
+
16
+ ## Testing signatures
17
+
18
+ When you finish writing signature, you may want to test the signature.
19
+ rbs provides a feature to test your signature.
20
+
21
+ ```console
22
+ $ RBS_TEST_TARGET='Foo::*' bundle exec ruby -r rbs/test/setup test/foo_test.rb
23
+ ```
24
+
25
+ The test installs instrumentations to spy the method calls and check if arguments/return values are correct with respect to the type of the method in signature.
26
+ If errors are reported by the test, you will fix the signature.
27
+ You will be sure that you ship a correct signature finally.
28
+
29
+ The instrumentations are implemented using `Module#prepend`.
30
+ It defines a module with same name of methods, which asserts the type of arguments/return values and calls `super`.
31
+
32
+ ## Type errors
33
+
34
+ If the test detects type errors, it will print error messages.
35
+
36
+ ### ArgumentTypeError, BlockArgumentTypeError
37
+
38
+ The message means there is an unexpected type of argument or block argument.
39
+
40
+ ```
41
+ ERROR -- : [Kaigi::Speaker.new] ArgumentTypeError: expected `::String` (email) but given `:"matsumoto@soutaro.com"`
42
+ ```
43
+
44
+ ### ArgumentError, BlockArgumentError
45
+
46
+ The message means there is an unexpected argument or missing argument.
47
+
48
+ ```
49
+ [Kaigi::Speaker.new] ArgumentError: expected method type (size: ::Symbol, email: ::String, name: ::String) -> ::Kaigi::Speaker
50
+ ```
51
+
52
+ ### ReturnTypeError, BlockReturnTypeError
53
+
54
+ The message means the return value from method or block is incorrect.
55
+
56
+ ```
57
+ ERROR -- : [Kaigi::Conference#each_speaker] ReturnTypeError: expected `self` but returns `[#<Kaigi::Speaker:0x00007fb2b249e5a0 @name="Soutaro Matsumoto", @email=:"matsumoto@soutaro.com">]`
58
+ ```
59
+
60
+ ### UnexpectedBlockError, MissingBlockError
61
+
62
+ The errors are reported when required block is not given or unused block is given.
63
+
64
+ ```
65
+ ERROR -- : [Kaigi::Conference#speakers] UnexpectedBlockError: unexpected block is given for `() -> ::Array[::Kaigi::Speaker]`
66
+ ```
67
+
68
+ ### UnresolvedOverloadingError
69
+
70
+ The error means there is a type error on overloaded methods.
71
+ The `rbs` test framework tries to the best error message for overloaded methods too, but it reports the `UnresolvedOverloadingError` when it fails.
72
+
73
+ ### DuplicatedMethodDefinitionError
74
+
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
+
77
+ ```rbs
78
+ # First definition
79
+ class C
80
+ def foo: () -> untyped
81
+ end
82
+
83
+ # Second definition, use `...` syntax to tell RBS that we're overloading the method
84
+ class C
85
+ def foo: () -> untyped
86
+ | ...
87
+ end
88
+ ```
89
+
90
+ ## Setting up the test
91
+
92
+ The design of the signature testing aims to be non-intrusive. The setup is done in two steps:
93
+
94
+ 1. Loading the testing library
95
+ 2. Setting up the test through environment variables
96
+
97
+ ### Loading the library
98
+
99
+ You need to require `rbs/test/setup` for signature testing.
100
+ You can do it using `-r` option through command line argument or the `RUBYOPT` environment variable.
101
+
102
+ ```console
103
+ $ ruby -r rbs/test/setup run_tests.rb
104
+ $ RUBYOPT='-rrbs/test/setup' rake test
105
+ ```
106
+
107
+ When you are using Bundler, you may need to require `bundler/setup` explicitly.
108
+
109
+ ```console
110
+ $ RUBYOPT='-rbundler/setup -rrbs/test/setup' bundle exec rake test
111
+ ```
112
+
113
+ ### Environment variables
114
+
115
+ You need to specify `RBS_TEST_TARGET` to run the test, and you can customize the test with the following environment variables.
116
+
117
+ - `RBS_TEST_SKIP` (optional)
118
+ - `RBS_TEST_OPT` (optional)
119
+ - `RBS_TEST_LOGLEVEL` (optional)
120
+ - `RBS_TEST_RAISE` (optional)
121
+
122
+ `RBS_TEST_TARGET` is to specify the classes you want to test. `RBS_TEST_TARGET` can contain comma-separated class name pattern, which is one of an exact class name or with wildcard `*`.
123
+
124
+ - `RBS_TEST_TARGET=Foo::Bar,Foo::Baz` comma separated exact class names
125
+ - `RBS_TEST_TARGET=Foo::*` using wildcard
126
+
127
+ `RBS_TEST_SKIP` is to skip some of the classes which matches with `RBS_TEST_TARGET`.
128
+
129
+ `RBS_TEST_OPT` is to pass the options for rbs handling.
130
+ You may need to specify `-r` or `-I` to load signatures.
131
+ The default is `-I sig`.
132
+
133
+ ```shell
134
+ RBS_TEST_OPT='-r pathname -I sig'
135
+ ```
136
+
137
+ Replacing `pathname` with the `stdlib` you want to include. For example, if you need to load `Set` and `BigDecimal` in `stdlib`, you would need to have `RBS_TEST_OPT='-r set -r bigdecimal -I sig'`
138
+
139
+ `RBS_TEST_LOGLEVEL` can be used to configure log level. Defaults to `info`.
140
+
141
+ `RBS_TEST_RAISE` may help to debug the type signatures.
142
+ If the environment variable is set, it raises an exception when a type error is detected.
143
+ You can see the backtrace how the type error is caused and debug your program or signature.
144
+
145
+ So, a typical command line to start the test would look like the following:
146
+
147
+ ```console
148
+ $ RBS_TEST_LOGLEVEL=error \
149
+ RBS_TEST_TARGET='Kaigi::*' \
150
+ RBS_TEST_SKIP='Kaigi::MonkeyPatch' \
151
+ RBS_TEST_OPT='-rset -rpathname -Isig -Iprivate' \
152
+ RBS_TEST_RAISE=true \
153
+ RUBYOPT='-rbundler/setup -rrbs/test/setup' \
154
+ bundle exec rake test
155
+ ```
156
+
157
+ ## Testing tips
158
+
159
+ ### Skipping a method
160
+
161
+ You can skip installing the instrumentation per-method basis using `rbs:test:skip` annotation.
162
+
163
+ ```rbs
164
+ class String
165
+ %a{rbs:test:skip} def =~: (Regexp) -> Integer?
166
+ end
167
+ ```
data/docs/stdlib.md ADDED
@@ -0,0 +1,147 @@
1
+ # Testing Core API and Standard Library Types
2
+
3
+ This is a guide for testing core/stdlib types.
4
+
5
+ ## Add Tests
6
+
7
+ We support writing tests for core/stdlib signatures.
8
+
9
+ ### Writing tests
10
+
11
+ First, execute `generate:stdlib_test` rake task with a class name that you want to test.
12
+
13
+ ```console
14
+ $ bundle exec rake 'generate:stdlib_test[String]'
15
+ Created: test/stdlib/String_test.rb
16
+ ```
17
+
18
+ It generates `test/stdlib/[class_name]_test.rb`.
19
+ The test scripts would look like the following:
20
+
21
+ ```rb
22
+ class StringSingletonTest < Test::Unit::TestCase
23
+ include TypeAssertions
24
+
25
+ testing "singleton(::String)"
26
+
27
+ def test_initialize
28
+ assert_send_type "() -> String",
29
+ String, :new
30
+ assert_send_type "(String) -> String",
31
+ String, :new, ""
32
+ assert_send_type "(String, encoding: Encoding) -> String",
33
+ String, :new, "", encoding: Encoding::ASCII_8BIT
34
+ assert_send_type "(String, encoding: Encoding, capacity: Integer) -> String",
35
+ String, :new, "", encoding: Encoding::ASCII_8BIT, capacity: 123
36
+ assert_send_type "(encoding: Encoding, capacity: Integer) -> String",
37
+ String, :new, encoding: Encoding::ASCII_8BIT, capacity: 123
38
+ assert_send_type "(ToStr) -> String",
39
+ String, :new, ToStr.new("")
40
+ assert_send_type "(encoding: ToStr) -> String",
41
+ String, :new, encoding: ToStr.new('Shift_JIS')
42
+ assert_send_type "(capacity: ToInt) -> String",
43
+ String, :new, capacity: ToInt.new(123)
44
+ end
45
+ end
46
+
47
+ class StringTest < Test::Unit::TestCase
48
+ include TypeAssertions
49
+
50
+ testing "::String"
51
+
52
+ def test_gsub
53
+ assert_send_type "(Regexp, String) -> String",
54
+ "string", :gsub, /./, ""
55
+ assert_send_type "(String, String) -> String",
56
+ "string", :gsub, "a", "b"
57
+ assert_send_type "(Regexp) { (String) -> String } -> String",
58
+ "string", :gsub, /./ do |x| "" end
59
+ assert_send_type "(Regexp) { (String) -> ToS } -> String",
60
+ "string", :gsub, /./ do |x| ToS.new("") end
61
+ assert_send_type "(Regexp, Hash[String, String]) -> String",
62
+ "string", :gsub, /./, {"foo" => "bar"}
63
+ assert_send_type "(Regexp) -> Enumerator[String, self]",
64
+ "string", :gsub, /./
65
+ assert_send_type "(String) -> Enumerator[String, self]",
66
+ "string", :gsub, ""
67
+ assert_send_type "(ToStr, ToStr) -> String",
68
+ "string", :gsub, ToStr.new("a"), ToStr.new("b")
69
+ end
70
+ end
71
+ ```
72
+
73
+ You need include `TypeAssertions` which provide useful methods for you.
74
+ `testing` method call tells which class is the subject of the class.
75
+ You may need `library` call to test a library if the type definition is provided as a library (under `stdlib` dir).
76
+
77
+ Note that the instrumentation is based on refinements and you need to write all method calls in the unit class definitions.
78
+ If the execution of the program escape from the class definition, the instrumentation is disabled and no check will be done.
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
+
140
+ ### Running tests
141
+
142
+ You can run the test with:
143
+
144
+ ```console
145
+ $ bundle exec rake stdlib_test # Run all tests
146
+ $ bundle exec ruby test/stdlib/String_test.rb # Run specific tests
147
+ ```