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/core/builtin.rbs ADDED
@@ -0,0 +1,277 @@
1
+ # A type that's convertible to a `Complex`.
2
+ #
3
+ interface _ToC
4
+ # Convert `self` to a `Complex`.
5
+ #
6
+ def to_c: () -> Complex
7
+ end
8
+
9
+ # A type that's convertible to a `Rational`.
10
+ #
11
+ interface _ToR
12
+ # Convert `self` to a `Complex`.
13
+ #
14
+ def to_r: () -> Rational
15
+ end
16
+
17
+ # A type that's convertible to a `Float`.
18
+ #
19
+ interface _ToF
20
+ # Convert `self` to a `Float`.
21
+ #
22
+ def to_f: () -> Float
23
+ end
24
+
25
+ # A type that's convertible to an `Integer`.
26
+ #
27
+ interface _ToI
28
+ # Convert `self` to an `Integer`.
29
+ #
30
+ def to_i: () -> Integer
31
+ end
32
+
33
+ # A type that's implicitly convertible to an `Integer`.
34
+ #
35
+ # Implicit `.to_int` conversions are usable all over Ruby's stdlib, such as `Kernel#exit`,
36
+ # `File#chmod`, and `Array#take`. Virtually anywhere that accepts an `Integer` will also accept
37
+ # something that defines `.to_int`.
38
+ #
39
+ # Interestingly, types that define `.to_int` aren't immediately converted in math operations on
40
+ # `Integers` (eg `1 + defines_to_int`): Instead, `.coerce` must be defined on the right-hand-side
41
+ # value.
42
+ #
43
+ interface _ToInt
44
+ # Converts `self` to an `Integer`.
45
+ #
46
+ def to_int: () -> Integer
47
+ end
48
+
49
+ # A type that's convertible to a `String`.
50
+ #
51
+ interface _ToS
52
+ # Converts `self` to a `String`.
53
+ #
54
+ def to_s: () -> String
55
+ end
56
+
57
+ # A type that's implicitly convertible to a `String`.
58
+ #
59
+ # Implicit `.to_str` conversions are usable all over Ruby's stdlib, such as `Kernel#abort`,
60
+ # `String#+`, and `Object#send`. Virtually anywhere that accepts a `String` will also accept
61
+ # something that defines `.to_Str`.
62
+ #
63
+ # Types that define `.to_str` are also usable wherever paths are expected (See the `path` type
64
+ # alias).
65
+ #
66
+ interface _ToStr
67
+ # Converts `self` to a `String`.
68
+ #
69
+ def to_str: () -> String
70
+ end
71
+
72
+ # A type that's explicitly convertible to a `String`.
73
+ #
74
+ # Interestingly enough, most methods that accept `Symbol` in the standard library _do not_ accept
75
+ # an object that defines `.to_sym` (unlike `String` and `.to_str`).
76
+ #
77
+ # There are only two places that `Symbol | _ToSym`, and they're quite obscure:
78
+ # - `Kernel#warn`'s `category:` optional parameter. (Oddly enough, not for `Warning.warn`, though.)
79
+ # - `TracePoint#trace`'s `event`s parameter.
80
+ # Additionally, the `rb_iseq_load` C function, only accessible through `Fiddle`, uses `.to_sym`
81
+ # internally.
82
+ #
83
+ interface _ToSym
84
+ # Converts `self` to a `Symbol`.
85
+ #
86
+ def to_sym: () -> Symbol
87
+ end
88
+
89
+ # A type that's convertible to a `Hash`.
90
+ #
91
+ interface _ToH[K, V]
92
+ # Converts `self` to a `Hash`.
93
+ #
94
+ def to_h: () -> Hash[K, V]
95
+ end
96
+
97
+ # A type that's implicitly convertible to a `Hash`.
98
+ #
99
+ # Implicit `.to_hash` conversions are usable infrequently in Ruby's stdlib, such as `Io#popen`,
100
+ # `Kernel#sprintf`, and `Enumerable#tally`. It's also used with the `**` "splatsplat" operator.
101
+ #
102
+ interface _ToHash[K, V]
103
+ # Converts `self` to a `Hash`.
104
+ #
105
+ def to_hash: () -> Hash[K, V]
106
+ end
107
+
108
+ # A type that's convertible to an `Array`.
109
+ #
110
+ interface _ToA[T]
111
+ # Converts `self` to an `Array`.
112
+ #
113
+ def to_a: () -> Array[T]
114
+ end
115
+
116
+ # A type that's implicitly convertible to an `Array`.
117
+ #
118
+ # Implicit `.to_ary` conversions are usable semi-frequently in Ruby's stdlib, such as `Dir#glob`,
119
+ # `Regex#union`, and `Class#private`. It's also used with the `*` "splat" operator.
120
+ #
121
+ interface _ToAry[T]
122
+ # Converts `self` to an `Array`.
123
+ #
124
+ def to_ary: () -> Array[T]
125
+ end
126
+
127
+ # A type that's convertible to a `Proc`.
128
+ #
129
+ # This is implicitly called when the `&` "block-passing" operator is used, in addition to a handful
130
+ # of other places, such as `Hash#default_proc=`.
131
+ #
132
+ interface _ToProc
133
+ # Converts `self` to a `Proc.`
134
+ #
135
+ def to_proc: () -> Proc
136
+ end
137
+
138
+ # A type that's convertible to a `String` that contains a filepath.
139
+ #
140
+ # Implicit `.to_path` conversions are usable throughout Ruby's stdlib, whenever a file path is
141
+ # expected, such as `Dir#mkdir`, `File#open`, and `UNIXSocket#read`. These functions, however, also
142
+ # accept types that define `.to_str`. See the `path` type alias.
143
+ #
144
+ interface _ToPath
145
+ # Converts `self` to a `String` containing a filepath.
146
+ #
147
+ def to_path: () -> String
148
+ end
149
+
150
+ # A type that's convertible to an `IO`.
151
+ #
152
+ # Implicit `.to_io` conversions are usuable infrequently in Ruby's stdlib, such as `IO#reopen`,
153
+ # `File.exist?`, and `Kernel#select`.
154
+ #
155
+ interface _ToIO
156
+ # Converts `self` to an `IO` object.
157
+ #
158
+ def to_io: () -> IO
159
+ end
160
+
161
+ # A type that defines the `.inspect` method.
162
+ #
163
+ # Since `Object` defines `.inspect`, nearly every object in Ruby has it defined: Only those that
164
+ # derive from `BasicObject`, or `undef inspect` won't have it. It's used in a few locations,
165
+ # such as `Kernel#p` and `Array#join`.
166
+ #
167
+ interface _Inspect
168
+ # Returns a debugging representation of `self`.
169
+ #
170
+ def inspect: () -> String
171
+ end
172
+
173
+ interface _Each[out E, out R = void]
174
+ def each: () { (E) -> void } -> R
175
+ end
176
+
177
+ interface _EachEntry[out E]
178
+ def each_entry: () { (E) -> void } -> self
179
+ end
180
+
181
+ interface _Reader
182
+ def read: (?int? length, ?string outbuf) -> String?
183
+ end
184
+
185
+ interface _ReaderPartial
186
+ def readpartial: (int maxlen, ?string outbuf) -> String
187
+ end
188
+
189
+ interface _Writer
190
+ # Writes the +data+ string. Returns the number of bytes written
191
+ #
192
+ def write: (*_ToS data) -> Integer
193
+ end
194
+
195
+ interface _Rewindable
196
+ # Positions the stream to the beginning of input, resetting `lineno` to zero.
197
+ #
198
+ def rewind: () -> Integer
199
+ end
200
+
201
+ # A type that's usable like a `Range[T]`.
202
+ #
203
+ # Implicit `_Range` usage is usable frequently in ruby's stdlib, such as `Comparable#clamp`,
204
+ # `String#[]`, and `Kernel#rand`.
205
+ #
206
+ interface _Range[T]
207
+ # The beginning value, `nil` if there is no beginning.
208
+ def begin: () -> T?
209
+
210
+ # The ending value, `nil` if there is no ending.
211
+ def end: () -> T?
212
+
213
+ # Whether or not to include the end in the range.
214
+ def exclude_end?: () -> bool
215
+ end
216
+
217
+ interface _Exception
218
+ def exception: () -> Exception
219
+ | (String arg0) -> Exception
220
+ end
221
+
222
+ # Represents an `Integer`, or a type convertible to it (via `.to_int`).
223
+ #
224
+ type int = Integer | _ToInt
225
+
226
+ # Represents a `Float`, or a type convertible to it (via `.to_f`).
227
+ #
228
+ type float = Float | _ToF
229
+
230
+ # Represents a `Range[T]`, or a type that acts like it (via `.begin`, `.end`, and `.exclude_end?`).
231
+ #
232
+ type range[T] = Range[T] | _Range[T]
233
+
234
+ # Represents a `String`, or a type convertible to it (via `.to_str`).
235
+ #
236
+ type string = String | _ToStr
237
+
238
+ # Represents an `Array[T]`, or a type convertible to it (via `.to_ary`).
239
+ #
240
+ type array[T] = Array[T] | _ToAry[T]
241
+
242
+ # Represents a `Hash[K, V]`, or a type convertible to it (via `.to_hash`).
243
+ #
244
+ type hash[K, V] = Hash[K, V] | _ToHash[K, V]
245
+
246
+ # Represents an `IO`, or a type convertible to it (via `.to_io`).
247
+ #
248
+ type io = IO | _ToIO
249
+
250
+ # A filesystem path: Either something that defines `.to_path`, or a `String` (or a type that is
251
+ # convertible to a string via `.to_str`).
252
+ #
253
+ # If a type defines both `.to_path` and `.to_str`, the `.to_path` function is called.
254
+ #
255
+ type path = string | _ToPath
256
+
257
+ # An `Encoding`, or a `String` (or type that defines `.to_str`) that represents it.
258
+ #
259
+ type encoding = Encoding | string
260
+
261
+ # A real number, ie not a `Complex`.
262
+ #
263
+ type real = Integer | Float | Rational
264
+
265
+ # Represents a `Symbol` or a `string`.
266
+ #
267
+ # A lot of builtin functions accept either a Symbol, a String, or something which has `.to_str`
268
+ # defined.
269
+ #
270
+ type interned = Symbol | string
271
+
272
+ # `boolish` is a type for documentation.
273
+ # It means the value of this type is only for testing a condition.
274
+ # Unlike `bool` type, it doesn't require the value is one of `true` or `false`.
275
+ # Any Ruby object can have `boolish` type.
276
+ #
277
+ type boolish = top
data/core/class.rbs ADDED
@@ -0,0 +1,220 @@
1
+ # <!-- rdoc-file=object.c -->
2
+ # Classes in Ruby are first-class objects---each is an instance of class Class.
3
+ #
4
+ # Typically, you create a new class by using:
5
+ #
6
+ # class Name
7
+ # # some code describing the class behavior
8
+ # end
9
+ #
10
+ # When a new class is created, an object of type Class is initialized and
11
+ # assigned to a global constant (Name in this case).
12
+ #
13
+ # When `Name.new` is called to create a new object, the #new method in Class is
14
+ # run by default. This can be demonstrated by overriding #new in Class:
15
+ #
16
+ # class Class
17
+ # alias old_new new
18
+ # def new(*args)
19
+ # print "Creating a new ", self.name, "\n"
20
+ # old_new(*args)
21
+ # end
22
+ # end
23
+ #
24
+ # class Name
25
+ # end
26
+ #
27
+ # n = Name.new
28
+ #
29
+ # *produces:*
30
+ #
31
+ # Creating a new Name
32
+ #
33
+ # Classes, modules, and objects are interrelated. In the diagram that follows,
34
+ # the vertical arrows represent inheritance, and the parentheses metaclasses.
35
+ # All metaclasses are instances of the class `Class'.
36
+ # +---------+ +-...
37
+ # | | |
38
+ # BasicObject-----|-->(BasicObject)-------|-...
39
+ # ^ | ^ |
40
+ # | | | |
41
+ # Object---------|----->(Object)---------|-...
42
+ # ^ | ^ |
43
+ # | | | |
44
+ # +-------+ | +--------+ |
45
+ # | | | | | |
46
+ # | Module-|---------|--->(Module)-|-...
47
+ # | ^ | | ^ |
48
+ # | | | | | |
49
+ # | Class-|---------|---->(Class)-|-...
50
+ # | ^ | | ^ |
51
+ # | +---+ | +----+
52
+ # | |
53
+ # obj--->OtherClass---------->(OtherClass)-----------...
54
+ #
55
+ %a{annotate:rdoc:source:from=object.c}
56
+ class Class < Module
57
+ # <!--
58
+ # rdoc-file=object.c
59
+ # - Class.new(super_class=Object) -> a_class
60
+ # - Class.new(super_class=Object) { |mod| ... } -> a_class
61
+ # -->
62
+ # Creates a new anonymous (unnamed) class with the given superclass (or Object
63
+ # if no parameter is given). You can give a class a name by assigning the class
64
+ # object to a constant.
65
+ #
66
+ # If a block is given, it is passed the class object, and the block is evaluated
67
+ # in the context of this class like #class_eval.
68
+ #
69
+ # fred = Class.new do
70
+ # def meth1
71
+ # "hello"
72
+ # end
73
+ # def meth2
74
+ # "bye"
75
+ # end
76
+ # end
77
+ #
78
+ # a = fred.new #=> #<#<Class:0x100381890>:0x100376b98>
79
+ # a.meth1 #=> "hello"
80
+ # a.meth2 #=> "bye"
81
+ #
82
+ # Assign the class to a constant (name starting uppercase) if you want to treat
83
+ # it like a regular class.
84
+ #
85
+ def initialize: (?Class superclass) ?{ (Class newclass) -> void } -> void
86
+
87
+ # <!--
88
+ # rdoc-file=object.c
89
+ # - class.allocate() -> obj
90
+ # -->
91
+ # Allocates space for a new object of *class*'s class and does not call
92
+ # initialize on the new instance. The returned object must be an instance of
93
+ # *class*.
94
+ #
95
+ # klass = Class.new do
96
+ # def initialize(*args)
97
+ # @initialized = true
98
+ # end
99
+ #
100
+ # def initialized?
101
+ # @initialized || false
102
+ # end
103
+ # end
104
+ #
105
+ # klass.allocate.initialized? #=> false
106
+ #
107
+ def allocate: () -> untyped
108
+
109
+ # <!--
110
+ # rdoc-file=object.c
111
+ # - attached_object -> object
112
+ # -->
113
+ # Returns the object for which the receiver is the singleton class.
114
+ #
115
+ # Raises an TypeError if the class is not a singleton class.
116
+ #
117
+ # class Foo; end
118
+ #
119
+ # Foo.singleton_class.attached_object #=> Foo
120
+ # Foo.attached_object #=> TypeError: `Foo' is not a singleton class
121
+ # Foo.new.singleton_class.attached_object #=> #<Foo:0x000000010491a370>
122
+ # TrueClass.attached_object #=> TypeError: `TrueClass' is not a singleton class
123
+ # NilClass.attached_object #=> TypeError: `NilClass' is not a singleton class
124
+ #
125
+ def attached_object: () -> untyped
126
+
127
+ # <!--
128
+ # rdoc-file=object.c
129
+ # - inherited(subclass)
130
+ # -->
131
+ # Callback invoked whenever a subclass of the current class is created.
132
+ #
133
+ # Example:
134
+ #
135
+ # class Foo
136
+ # def self.inherited(subclass)
137
+ # puts "New subclass: #{subclass}"
138
+ # end
139
+ # end
140
+ #
141
+ # class Bar < Foo
142
+ # end
143
+ #
144
+ # class Baz < Bar
145
+ # end
146
+ #
147
+ # *produces:*
148
+ #
149
+ # New subclass: Bar
150
+ # New subclass: Baz
151
+ #
152
+ def inherited: (Class arg0) -> untyped
153
+
154
+ # <!--
155
+ # rdoc-file=object.c
156
+ # - class.new(args, ...) -> obj
157
+ # -->
158
+ # Calls #allocate to create a new object of *class*'s class, then invokes that
159
+ # object's #initialize method, passing it *args*. This is the method that ends
160
+ # up getting called whenever an object is constructed using `.new`.
161
+ #
162
+ def new: () -> untyped
163
+
164
+ # <!--
165
+ # rdoc-file=object.c
166
+ # - subclasses -> array
167
+ # -->
168
+ # Returns an array of classes where the receiver is the direct superclass of the
169
+ # class, excluding singleton classes. The order of the returned array is not
170
+ # defined.
171
+ #
172
+ # class A; end
173
+ # class B < A; end
174
+ # class C < B; end
175
+ # class D < A; end
176
+ #
177
+ # A.subclasses #=> [D, B]
178
+ # B.subclasses #=> [C]
179
+ # C.subclasses #=> []
180
+ #
181
+ # Anonymous subclasses (not associated with a constant) are returned, too:
182
+ #
183
+ # c = Class.new(A)
184
+ # A.subclasses # => [#<Class:0x00007f003c77bd78>, D, B]
185
+ #
186
+ # Note that the parent does not hold references to subclasses and doesn't
187
+ # prevent them from being garbage collected. This means that the subclass might
188
+ # disappear when all references to it are dropped:
189
+ #
190
+ # # drop the reference to subclass, it can be garbage-collected now
191
+ # c = nil
192
+ #
193
+ # A.subclasses
194
+ # # It can be
195
+ # # => [#<Class:0x00007f003c77bd78>, D, B]
196
+ # # ...or just
197
+ # # => [D, B]
198
+ # # ...depending on whether garbage collector was run
199
+ #
200
+ def subclasses: () -> Array[Class]
201
+
202
+ # <!--
203
+ # rdoc-file=object.c
204
+ # - class.superclass -> a_super_class or nil
205
+ # -->
206
+ # Returns the superclass of *class*, or `nil`.
207
+ #
208
+ # File.superclass #=> IO
209
+ # IO.superclass #=> Object
210
+ # Object.superclass #=> BasicObject
211
+ # class Foo; end
212
+ # class Bar < Foo; end
213
+ # Bar.superclass #=> Foo
214
+ #
215
+ # Returns nil when the given class does not have a parent class:
216
+ #
217
+ # BasicObject.superclass #=> nil
218
+ #
219
+ def superclass: () -> Class?
220
+ end
@@ -0,0 +1,171 @@
1
+ # <!-- rdoc-file=compar.c -->
2
+ # The Comparable mixin is used by classes whose objects may be ordered. The
3
+ # class must define the `<=>` operator, which compares the receiver against
4
+ # another object, returning a value less than 0, returning 0, or returning a
5
+ # value greater than 0, depending on whether the receiver is less than, equal
6
+ # to, or greater than the other object. If the other object is not comparable
7
+ # then the `<=>` operator should return `nil`. Comparable uses `<=>` to
8
+ # implement the conventional comparison operators (`<`, `<=`, `==`, `>=`, and
9
+ # `>`) and the method `between?`.
10
+ #
11
+ # class StringSorter
12
+ # include Comparable
13
+ #
14
+ # attr :str
15
+ # def <=>(other)
16
+ # str.size <=> other.str.size
17
+ # end
18
+ #
19
+ # def initialize(str)
20
+ # @str = str
21
+ # end
22
+ #
23
+ # def inspect
24
+ # @str
25
+ # end
26
+ # end
27
+ #
28
+ # s1 = StringSorter.new("Z")
29
+ # s2 = StringSorter.new("YY")
30
+ # s3 = StringSorter.new("XXX")
31
+ # s4 = StringSorter.new("WWWW")
32
+ # s5 = StringSorter.new("VVVVV")
33
+ #
34
+ # s1 < s2 #=> true
35
+ # s4.between?(s1, s3) #=> false
36
+ # s4.between?(s3, s5) #=> true
37
+ # [ s3, s2, s5, s4, s1 ].sort #=> [Z, YY, XXX, WWWW, VVVVV]
38
+ #
39
+ # ## What's Here
40
+ #
41
+ # Module Comparable provides these methods, all of which use method `#<=>`:
42
+ #
43
+ # * #<: Returns whether `self` is less than the given object.
44
+ # * #<=: Returns whether `self` is less than or equal to the given object.
45
+ # * #==: Returns whether `self` is equal to the given object.
46
+ # * #>: Returns whether `self` is greater than the given object.
47
+ # * #>=: Returns whether `self` is greater than or equal to the given object.
48
+ # * #between?: Returns `true` if `self` is between two given objects.
49
+ # * #clamp: For given objects `min` and `max`, or range `(min..max)`, returns:
50
+ #
51
+ # * `min` if `(self <=> min) < 0`.
52
+ # * `max` if `(self <=> max) > 0`.
53
+ # * `self` otherwise.
54
+ #
55
+ module Comparable : _WithSpaceshipOperator
56
+ # <!--
57
+ # rdoc-file=compar.c
58
+ # - obj < other -> true or false
59
+ # -->
60
+ # Compares two objects based on the receiver's `<=>` method, returning true if
61
+ # it returns a value less than 0.
62
+ #
63
+ def <: (untyped other) -> bool
64
+
65
+ # <!--
66
+ # rdoc-file=compar.c
67
+ # - obj <= other -> true or false
68
+ # -->
69
+ # Compares two objects based on the receiver's `<=>` method, returning true if
70
+ # it returns a value less than or equal to 0.
71
+ #
72
+ def <=: (untyped other) -> bool
73
+
74
+ # <!--
75
+ # rdoc-file=compar.c
76
+ # - obj == other -> true or false
77
+ # -->
78
+ # Compares two objects based on the receiver's `<=>` method, returning true if
79
+ # it returns 0. Also returns true if *obj* and *other* are the same object.
80
+ #
81
+ def ==: (untyped other) -> bool
82
+
83
+ # <!--
84
+ # rdoc-file=compar.c
85
+ # - obj > other -> true or false
86
+ # -->
87
+ # Compares two objects based on the receiver's `<=>` method, returning true if
88
+ # it returns a value greater than 0.
89
+ #
90
+ def >: (untyped other) -> bool
91
+
92
+ # <!--
93
+ # rdoc-file=compar.c
94
+ # - obj >= other -> true or false
95
+ # -->
96
+ # Compares two objects based on the receiver's `<=>` method, returning true if
97
+ # it returns a value greater than or equal to 0.
98
+ #
99
+ def >=: (untyped other) -> bool
100
+
101
+ # <!--
102
+ # rdoc-file=compar.c
103
+ # - obj.between?(min, max) -> true or false
104
+ # -->
105
+ # Returns `false` if *obj* `<=>` *min* is less than zero or if *obj* `<=>` *max*
106
+ # is greater than zero, `true` otherwise.
107
+ #
108
+ # 3.between?(1, 5) #=> true
109
+ # 6.between?(1, 5) #=> false
110
+ # 'cat'.between?('ant', 'dog') #=> true
111
+ # 'gnu'.between?('ant', 'dog') #=> false
112
+ #
113
+ def between?: (untyped min, untyped max) -> bool
114
+
115
+ # <!--
116
+ # rdoc-file=compar.c
117
+ # - obj.clamp(min, max) -> obj
118
+ # - obj.clamp(range) -> obj
119
+ # -->
120
+ # In `(min, max)` form, returns *min* if *obj* `<=>` *min* is less than zero,
121
+ # *max* if *obj* `<=>` *max* is greater than zero, and *obj* otherwise.
122
+ #
123
+ # 12.clamp(0, 100) #=> 12
124
+ # 523.clamp(0, 100) #=> 100
125
+ # -3.123.clamp(0, 100) #=> 0
126
+ #
127
+ # 'd'.clamp('a', 'f') #=> 'd'
128
+ # 'z'.clamp('a', 'f') #=> 'f'
129
+ #
130
+ # If *min* is `nil`, it is considered smaller than *obj*, and if *max* is `nil`,
131
+ # it is considered greater than *obj*.
132
+ #
133
+ # -20.clamp(0, nil) #=> 0
134
+ # 523.clamp(nil, 100) #=> 100
135
+ #
136
+ # In `(range)` form, returns *range.begin* if *obj* `<=>` *range.begin* is less
137
+ # than zero, *range.end* if *obj* `<=>` *range.end* is greater than zero, and
138
+ # *obj* otherwise.
139
+ #
140
+ # 12.clamp(0..100) #=> 12
141
+ # 523.clamp(0..100) #=> 100
142
+ # -3.123.clamp(0..100) #=> 0
143
+ #
144
+ # 'd'.clamp('a'..'f') #=> 'd'
145
+ # 'z'.clamp('a'..'f') #=> 'f'
146
+ #
147
+ # If *range.begin* is `nil`, it is considered smaller than *obj*, and if
148
+ # *range.end* is `nil`, it is considered greater than *obj*.
149
+ #
150
+ # -20.clamp(0..) #=> 0
151
+ # 523.clamp(..100) #=> 100
152
+ #
153
+ # When *range.end* is excluded and not `nil`, an exception is raised.
154
+ #
155
+ # 100.clamp(0...100) # ArgumentError
156
+ #
157
+ def clamp: [A, B] (A min, B max) -> (self | A | B)
158
+ | [A] (Range[A]) -> (self | A)
159
+ end
160
+
161
+ # This interface defines the condition for Comparable mixin.
162
+ #
163
+ interface Comparable::_WithSpaceshipOperator
164
+ # `<=>` operator must return Integer or `nil`.
165
+ # If `other` is greater than `self`, it returns a positive Integer.
166
+ # If `other` equals to `self`, it returns zero.
167
+ # If `other` is less than `self`, it returns a positive Integer.
168
+ # If no comparison is defined with `other` and `self`, it returns `nil`.
169
+ #
170
+ def <=>: (untyped other) -> Integer?
171
+ end