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/struct.rbs ADDED
@@ -0,0 +1,667 @@
1
+ # <!-- rdoc-file=struct.c -->
2
+ # Class Struct provides a convenient way to create a simple class that can store
3
+ # and fetch values.
4
+ #
5
+ # This example creates a subclass of `Struct`, `Struct::Customer`; the first
6
+ # argument, a string, is the name of the subclass; the other arguments, symbols,
7
+ # determine the *members* of the new subclass.
8
+ #
9
+ # Customer = Struct.new('Customer', :name, :address, :zip)
10
+ # Customer.name # => "Struct::Customer"
11
+ # Customer.class # => Class
12
+ # Customer.superclass # => Struct
13
+ #
14
+ # Corresponding to each member are two methods, a writer and a reader, that
15
+ # store and fetch values:
16
+ #
17
+ # methods = Customer.instance_methods false
18
+ # methods # => [:zip, :address=, :zip=, :address, :name, :name=]
19
+ #
20
+ # An instance of the subclass may be created, and its members assigned values,
21
+ # via method `::new`:
22
+ #
23
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
24
+ # joe # => #<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown NC", zip=12345>
25
+ #
26
+ # The member values may be managed thus:
27
+ #
28
+ # joe.name # => "Joe Smith"
29
+ # joe.name = 'Joseph Smith'
30
+ # joe.name # => "Joseph Smith"
31
+ #
32
+ # And thus; note that member name may be expressed as either a string or a
33
+ # symbol:
34
+ #
35
+ # joe[:name] # => "Joseph Smith"
36
+ # joe[:name] = 'Joseph Smith, Jr.'
37
+ # joe['name'] # => "Joseph Smith, Jr."
38
+ #
39
+ # See Struct::new.
40
+ #
41
+ # ## What's Here
42
+ #
43
+ # First, what's elsewhere. Class Struct:
44
+ #
45
+ # * Inherits from [class Object](rdoc-ref:Object@What-27s+Here).
46
+ # * Includes [module Enumerable](rdoc-ref:Enumerable@What-27s+Here), which
47
+ # provides dozens of additional methods.
48
+ #
49
+ # See also Data, which is a somewhat similar, but stricter concept for defining
50
+ # immutable value objects.
51
+ #
52
+ # Here, class Struct provides methods that are useful for:
53
+ #
54
+ # * [Creating a Struct
55
+ # Subclass](rdoc-ref:Struct@Methods+for+Creating+a+Struct+Subclass)
56
+ # * [Querying](rdoc-ref:Struct@Methods+for+Querying)
57
+ # * [Comparing](rdoc-ref:Struct@Methods+for+Comparing)
58
+ # * [Fetching](rdoc-ref:Struct@Methods+for+Fetching)
59
+ # * [Assigning](rdoc-ref:Struct@Methods+for+Assigning)
60
+ # * [Iterating](rdoc-ref:Struct@Methods+for+Iterating)
61
+ # * [Converting](rdoc-ref:Struct@Methods+for+Converting)
62
+ #
63
+ # ### Methods for Creating a Struct Subclass
64
+ #
65
+ # * ::new: Returns a new subclass of Struct.
66
+ #
67
+ # ### Methods for Querying
68
+ #
69
+ # * #hash: Returns the integer hash code.
70
+ # * #size (aliased as #length): Returns the number of members.
71
+ #
72
+ # ### Methods for Comparing
73
+ #
74
+ # * #==: Returns whether a given object is equal to `self`, using `==` to
75
+ # compare member values.
76
+ # * #eql?: Returns whether a given object is equal to `self`, using `eql?` to
77
+ # compare member values.
78
+ #
79
+ # ### Methods for Fetching
80
+ #
81
+ # * #[]: Returns the value associated with a given member name.
82
+ # * #to_a (aliased as #values, #deconstruct): Returns the member values in
83
+ # `self` as an array.
84
+ # * #deconstruct_keys: Returns a hash of the name/value pairs for given member
85
+ # names.
86
+ # * #dig: Returns the object in nested objects that is specified by a given
87
+ # member name and additional arguments.
88
+ # * #members: Returns an array of the member names.
89
+ # * #select (aliased as #filter): Returns an array of member values from
90
+ # `self`, as selected by the given block.
91
+ # * #values_at: Returns an array containing values for given member names.
92
+ #
93
+ # ### Methods for Assigning
94
+ #
95
+ # * #[]=: Assigns a given value to a given member name.
96
+ #
97
+ # ### Methods for Iterating
98
+ #
99
+ # * #each: Calls a given block with each member name.
100
+ # * #each_pair: Calls a given block with each member name/value pair.
101
+ #
102
+ # ### Methods for Converting
103
+ #
104
+ # * #inspect (aliased as #to_s): Returns a string representation of `self`.
105
+ # * #to_h: Returns a hash of the member name/value pairs in `self`.
106
+ #
107
+ class Struct[Elem]
108
+ include Enumerable[Elem]
109
+
110
+ # The types that can be used when "indexing" into a `Struct` via `[]`, `[]=`, `dig`, and
111
+ # `deconstruct_keys`.
112
+ #
113
+ type index = String | Symbol | int
114
+
115
+ # <!--
116
+ # rdoc-file=struct.c
117
+ # - Struct.new(*member_names, keyword_init: nil){|Struct_subclass| ... } -> Struct_subclass
118
+ # - Struct.new(class_name, *member_names, keyword_init: nil){|Struct_subclass| ... } -> Struct_subclass
119
+ # - Struct_subclass.new(*member_names) -> Struct_subclass_instance
120
+ # - Struct_subclass.new(**member_names) -> Struct_subclass_instance
121
+ # -->
122
+ # `Struct.new` returns a new subclass of `Struct`. The new subclass:
123
+ #
124
+ # * May be anonymous, or may have the name given by `class_name`.
125
+ # * May have members as given by `member_names`.
126
+ # * May have initialization via ordinary arguments, or via keyword arguments
127
+ #
128
+ # The new subclass has its own method `::new`; thus:
129
+ #
130
+ # Foo = Struct.new('Foo', :foo, :bar) # => Struct::Foo
131
+ # f = Foo.new(0, 1) # => #<struct Struct::Foo foo=0, bar=1>
132
+ #
133
+ # **\Class Name**
134
+ #
135
+ # With string argument `class_name`, returns a new subclass of `Struct` named
136
+ # `Struct::*class_name`*:
137
+ #
138
+ # Foo = Struct.new('Foo', :foo, :bar) # => Struct::Foo
139
+ # Foo.name # => "Struct::Foo"
140
+ # Foo.superclass # => Struct
141
+ #
142
+ # Without string argument `class_name`, returns a new anonymous subclass of
143
+ # `Struct`:
144
+ #
145
+ # Struct.new(:foo, :bar).name # => nil
146
+ #
147
+ # **Block**
148
+ #
149
+ # With a block given, the created subclass is yielded to the block:
150
+ #
151
+ # Customer = Struct.new('Customer', :name, :address) do |new_class|
152
+ # p "The new subclass is #{new_class}"
153
+ # def greeting
154
+ # "Hello #{name} at #{address}"
155
+ # end
156
+ # end # => Struct::Customer
157
+ # dave = Customer.new('Dave', '123 Main')
158
+ # dave # => #<struct Struct::Customer name="Dave", address="123 Main">
159
+ # dave.greeting # => "Hello Dave at 123 Main"
160
+ #
161
+ # Output, from `Struct.new`:
162
+ #
163
+ # "The new subclass is Struct::Customer"
164
+ #
165
+ # **Member Names**
166
+ #
167
+ # Symbol arguments `member_names` determines the members of the new subclass:
168
+ #
169
+ # Struct.new(:foo, :bar).members # => [:foo, :bar]
170
+ # Struct.new('Foo', :foo, :bar).members # => [:foo, :bar]
171
+ #
172
+ # The new subclass has instance methods corresponding to `member_names`:
173
+ #
174
+ # Foo = Struct.new('Foo', :foo, :bar)
175
+ # Foo.instance_methods(false) # => [:foo, :bar, :foo=, :bar=]
176
+ # f = Foo.new # => #<struct Struct::Foo foo=nil, bar=nil>
177
+ # f.foo # => nil
178
+ # f.foo = 0 # => 0
179
+ # f.bar # => nil
180
+ # f.bar = 1 # => 1
181
+ # f # => #<struct Struct::Foo foo=0, bar=1>
182
+ #
183
+ # **Singleton Methods**
184
+ #
185
+ # A subclass returned by Struct.new has these singleton methods:
186
+ #
187
+ # * Method `::new ` creates an instance of the subclass:
188
+ #
189
+ # Foo.new # => #<struct Struct::Foo foo=nil, bar=nil>
190
+ # Foo.new(0) # => #<struct Struct::Foo foo=0, bar=nil>
191
+ # Foo.new(0, 1) # => #<struct Struct::Foo foo=0, bar=1>
192
+ # Foo.new(0, 1, 2) # Raises ArgumentError: struct size differs
193
+ #
194
+ # # Initialization with keyword arguments:
195
+ # Foo.new(foo: 0) # => #<struct Struct::Foo foo=0, bar=nil>
196
+ # Foo.new(foo: 0, bar: 1) # => #<struct Struct::Foo foo=0, bar=1>
197
+ # Foo.new(foo: 0, bar: 1, baz: 2)
198
+ # # Raises ArgumentError: unknown keywords: baz
199
+ #
200
+ # * Method `:inspect` returns a string representation of the subclass:
201
+ #
202
+ # Foo.inspect
203
+ # # => "Struct::Foo"
204
+ #
205
+ # * Method `::members` returns an array of the member names:
206
+ #
207
+ # Foo.members # => [:foo, :bar]
208
+ #
209
+ # **Keyword Argument**
210
+ #
211
+ # By default, the arguments for initializing an instance of the new subclass can
212
+ # be both positional and keyword arguments.
213
+ #
214
+ # Optional keyword argument `keyword_init:` allows to force only one type of
215
+ # arguments to be accepted:
216
+ #
217
+ # KeywordsOnly = Struct.new(:foo, :bar, keyword_init: true)
218
+ # KeywordsOnly.new(bar: 1, foo: 0)
219
+ # # => #<struct KeywordsOnly foo=0, bar=1>
220
+ # KeywordsOnly.new(0, 1)
221
+ # # Raises ArgumentError: wrong number of arguments
222
+ #
223
+ # PositionalOnly = Struct.new(:foo, :bar, keyword_init: false)
224
+ # PositionalOnly.new(0, 1)
225
+ # # => #<struct PositionalOnly foo=0, bar=1>
226
+ # PositionalOnly.new(bar: 1, foo: 0)
227
+ # # => #<struct PositionalOnly foo={:foo=>1, :bar=>2}, bar=nil>
228
+ # # Note that no error is raised, but arguments treated as one hash value
229
+ #
230
+ # # Same as not providing keyword_init:
231
+ # Any = Struct.new(:foo, :bar, keyword_init: nil)
232
+ # Any.new(foo: 1, bar: 2)
233
+ # # => #<struct Any foo=1, bar=2>
234
+ # Any.new(1, 2)
235
+ # # => #<struct Any foo=1, bar=2>
236
+ #
237
+ def self.new: (string? classname, *interned fields, ?keyword_init: boolish?) ?{ (singleton(Struct)) [self: singleton(Struct)] -> void } -> untyped
238
+ | (Symbol field1, *interned fields, ?keyword_init: boolish?) ?{ (singleton(Struct)) [self: singleton(Struct)] -> void } -> untyped
239
+
240
+ # <!--
241
+ # rdoc-file=struct.c
242
+ # - StructClass::members -> array_of_symbols
243
+ # -->
244
+ # Returns the member names of the Struct descendant as an array:
245
+ #
246
+ # Customer = Struct.new(:name, :address, :zip)
247
+ # Customer.members # => [:name, :address, :zip]
248
+ #
249
+ def self.members: () -> Array[Symbol]
250
+
251
+ # <!--
252
+ # rdoc-file=struct.c
253
+ # - StructClass::keyword_init? -> true or falsy value
254
+ # -->
255
+ # Returns `true` if the class was initialized with `keyword_init: true`.
256
+ # Otherwise returns `nil` or `false`.
257
+ #
258
+ # Examples:
259
+ # Foo = Struct.new(:a)
260
+ # Foo.keyword_init? # => nil
261
+ # Bar = Struct.new(:a, keyword_init: true)
262
+ # Bar.keyword_init? # => true
263
+ # Baz = Struct.new(:a, keyword_init: false)
264
+ # Baz.keyword_init? # => false
265
+ #
266
+ def self.keyword_init?: () -> bool?
267
+
268
+ # <!--
269
+ # rdoc-file=struct.c
270
+ # - self == other -> true or false
271
+ # -->
272
+ # Returns `true` if and only if the following are true; otherwise returns
273
+ # `false`:
274
+ #
275
+ # * `other.class == self.class`.
276
+ # * For each member name `name`, `other.name == self.name`.
277
+ #
278
+ # Examples:
279
+ #
280
+ # Customer = Struct.new(:name, :address, :zip)
281
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
282
+ # joe_jr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
283
+ # joe_jr == joe # => true
284
+ # joe_jr[:name] = 'Joe Smith, Jr.'
285
+ # # => "Joe Smith, Jr."
286
+ # joe_jr == joe # => false
287
+ #
288
+ def ==: (untyped other) -> bool
289
+
290
+ # <!--
291
+ # rdoc-file=struct.c
292
+ # - eql?(other) -> true or false
293
+ # -->
294
+ # Returns `true` if and only if the following are true; otherwise returns
295
+ # `false`:
296
+ #
297
+ # * `other.class == self.class`.
298
+ # * For each member name `name`, `other.name.eql?(self.name)`.
299
+ #
300
+ # Customer = Struct.new(:name, :address, :zip)
301
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
302
+ # joe_jr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
303
+ # joe_jr.eql?(joe) # => true
304
+ # joe_jr[:name] = 'Joe Smith, Jr.'
305
+ # joe_jr.eql?(joe) # => false
306
+ #
307
+ # Related: Object#==.
308
+ #
309
+ def eql?: (untyped other) -> bool
310
+
311
+ # <!--
312
+ # rdoc-file=struct.c
313
+ # - hash -> integer
314
+ # -->
315
+ # Returns the integer hash value for `self`.
316
+ #
317
+ # Two structs of the same class and with the same content will have the same
318
+ # hash code (and will compare using Struct#eql?):
319
+ #
320
+ # Customer = Struct.new(:name, :address, :zip)
321
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
322
+ # joe_jr = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
323
+ # joe.hash == joe_jr.hash # => true
324
+ # joe_jr[:name] = 'Joe Smith, Jr.'
325
+ # joe.hash == joe_jr.hash # => false
326
+ #
327
+ # Related: Object#hash.
328
+ #
329
+ def hash: () -> Integer
330
+
331
+ # <!--
332
+ # rdoc-file=struct.c
333
+ # - inspect -> string
334
+ # -->
335
+ # Returns a string representation of `self`:
336
+ #
337
+ # Customer = Struct.new(:name, :address, :zip) # => Customer
338
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
339
+ # joe.inspect # => "#<struct Customer name=\"Joe Smith\", address=\"123 Maple, Anytown NC\", zip=12345>"
340
+ #
341
+ def inspect: () -> String
342
+
343
+ # <!-- rdoc-file=struct.c -->
344
+ # Returns a string representation of `self`:
345
+ #
346
+ # Customer = Struct.new(:name, :address, :zip) # => Customer
347
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
348
+ # joe.inspect # => "#<struct Customer name=\"Joe Smith\", address=\"123 Maple, Anytown NC\", zip=12345>"
349
+ #
350
+ alias to_s inspect
351
+
352
+ # <!--
353
+ # rdoc-file=struct.c
354
+ # - to_a -> array
355
+ # -->
356
+ # Returns the values in `self` as an array:
357
+ #
358
+ # Customer = Struct.new(:name, :address, :zip)
359
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
360
+ # joe.to_a # => ["Joe Smith", "123 Maple, Anytown NC", 12345]
361
+ #
362
+ # Related: #members.
363
+ #
364
+ def to_a: () -> Array[Elem]
365
+
366
+ # <!--
367
+ # rdoc-file=struct.c
368
+ # - to_h -> hash
369
+ # - to_h {|name, value| ... } -> hash
370
+ # -->
371
+ # Returns a hash containing the name and value for each member:
372
+ #
373
+ # Customer = Struct.new(:name, :address, :zip)
374
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
375
+ # h = joe.to_h
376
+ # h # => {:name=>"Joe Smith", :address=>"123 Maple, Anytown NC", :zip=>12345}
377
+ #
378
+ # If a block is given, it is called with each name/value pair; the block should
379
+ # return a 2-element array whose elements will become a key/value pair in the
380
+ # returned hash:
381
+ #
382
+ # h = joe.to_h{|name, value| [name.upcase, value.to_s.upcase]}
383
+ # h # => {:NAME=>"JOE SMITH", :ADDRESS=>"123 MAPLE, ANYTOWN NC", :ZIP=>"12345"}
384
+ #
385
+ # Raises ArgumentError if the block returns an inappropriate value.
386
+ #
387
+ def to_h: () -> Hash[Symbol, Elem]
388
+ | [K, V] () { (Symbol key, Elem value) -> [K, V] } -> Hash[K, V]
389
+
390
+ # <!-- rdoc-file=struct.c -->
391
+ # Returns the values in `self` as an array:
392
+ #
393
+ # Customer = Struct.new(:name, :address, :zip)
394
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
395
+ # joe.to_a # => ["Joe Smith", "123 Maple, Anytown NC", 12345]
396
+ #
397
+ # Related: #members.
398
+ #
399
+ alias values to_a
400
+
401
+ # <!--
402
+ # rdoc-file=struct.c
403
+ # - size -> integer
404
+ # -->
405
+ # Returns the number of members.
406
+ #
407
+ # Customer = Struct.new(:name, :address, :zip)
408
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
409
+ # joe.size #=> 3
410
+ #
411
+ def size: () -> Integer
412
+
413
+ # <!-- rdoc-file=struct.c -->
414
+ # Returns the number of members.
415
+ #
416
+ # Customer = Struct.new(:name, :address, :zip)
417
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
418
+ # joe.size #=> 3
419
+ #
420
+ alias length size
421
+
422
+ # <!--
423
+ # rdoc-file=struct.c
424
+ # - each {|value| ... } -> self
425
+ # - each -> enumerator
426
+ # -->
427
+ # Calls the given block with the value of each member; returns `self`:
428
+ #
429
+ # Customer = Struct.new(:name, :address, :zip)
430
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
431
+ # joe.each {|value| p value }
432
+ #
433
+ # Output:
434
+ #
435
+ # "Joe Smith"
436
+ # "123 Maple, Anytown NC"
437
+ # 12345
438
+ #
439
+ # Returns an Enumerator if no block is given.
440
+ #
441
+ # Related: #each_pair.
442
+ #
443
+ def each: () -> Enumerator[Elem, self]
444
+ | () { (Elem value) -> void } -> self
445
+
446
+ # <!--
447
+ # rdoc-file=struct.c
448
+ # - each_pair {|(name, value)| ... } -> self
449
+ # - each_pair -> enumerator
450
+ # -->
451
+ # Calls the given block with each member name/value pair; returns `self`:
452
+ #
453
+ # Customer = Struct.new(:name, :address, :zip) # => Customer
454
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
455
+ # joe.each_pair {|(name, value)| p "#{name} => #{value}" }
456
+ #
457
+ # Output:
458
+ #
459
+ # "name => Joe Smith"
460
+ # "address => 123 Maple, Anytown NC"
461
+ # "zip => 12345"
462
+ #
463
+ # Returns an Enumerator if no block is given.
464
+ #
465
+ # Related: #each.
466
+ #
467
+ def each_pair: () -> Enumerator[[Symbol, Elem], self]
468
+ | () { ([Symbol, Elem] key_value) -> void } -> self
469
+
470
+ # <!--
471
+ # rdoc-file=struct.c
472
+ # - struct[name] -> object
473
+ # - struct[n] -> object
474
+ # -->
475
+ # Returns a value from `self`.
476
+ #
477
+ # With symbol or string argument `name` given, returns the value for the named
478
+ # member:
479
+ #
480
+ # Customer = Struct.new(:name, :address, :zip)
481
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
482
+ # joe[:zip] # => 12345
483
+ #
484
+ # Raises NameError if `name` is not the name of a member.
485
+ #
486
+ # With integer argument `n` given, returns `self.values[n]` if `n` is in range;
487
+ # see Array@Array+Indexes:
488
+ #
489
+ # joe[2] # => 12345
490
+ # joe[-2] # => "123 Maple, Anytown NC"
491
+ #
492
+ # Raises IndexError if `n` is out of range.
493
+ #
494
+ def []: (index name_or_position) -> Elem
495
+
496
+ # <!--
497
+ # rdoc-file=struct.c
498
+ # - struct[name] = value -> value
499
+ # - struct[n] = value -> value
500
+ # -->
501
+ # Assigns a value to a member.
502
+ #
503
+ # With symbol or string argument `name` given, assigns the given `value` to the
504
+ # named member; returns `value`:
505
+ #
506
+ # Customer = Struct.new(:name, :address, :zip)
507
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
508
+ # joe[:zip] = 54321 # => 54321
509
+ # joe # => #<struct Customer name="Joe Smith", address="123 Maple, Anytown NC", zip=54321>
510
+ #
511
+ # Raises NameError if `name` is not the name of a member.
512
+ #
513
+ # With integer argument `n` given, assigns the given `value` to the `n`-th
514
+ # member if `n` is in range; see Array@Array+Indexes:
515
+ #
516
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
517
+ # joe[2] = 54321 # => 54321
518
+ # joe[-3] = 'Joseph Smith' # => "Joseph Smith"
519
+ # joe # => #<struct Customer name="Joseph Smith", address="123 Maple, Anytown NC", zip=54321>
520
+ #
521
+ # Raises IndexError if `n` is out of range.
522
+ #
523
+ def []=: (index name_or_position, Elem value) -> Elem
524
+
525
+ # <!--
526
+ # rdoc-file=struct.c
527
+ # - select {|value| ... } -> array
528
+ # - select -> enumerator
529
+ # -->
530
+ # With a block given, returns an array of values from `self` for which the block
531
+ # returns a truthy value:
532
+ #
533
+ # Customer = Struct.new(:name, :address, :zip)
534
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
535
+ # a = joe.select {|value| value.is_a?(String) }
536
+ # a # => ["Joe Smith", "123 Maple, Anytown NC"]
537
+ # a = joe.select {|value| value.is_a?(Integer) }
538
+ # a # => [12345]
539
+ #
540
+ # With no block given, returns an Enumerator.
541
+ #
542
+ def select: () -> Enumerator[Elem, Array[Elem]]
543
+ | () { (Elem value) -> boolish } -> Array[Elem]
544
+
545
+ # <!-- rdoc-file=struct.c -->
546
+ # With a block given, returns an array of values from `self` for which the block
547
+ # returns a truthy value:
548
+ #
549
+ # Customer = Struct.new(:name, :address, :zip)
550
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
551
+ # a = joe.select {|value| value.is_a?(String) }
552
+ # a # => ["Joe Smith", "123 Maple, Anytown NC"]
553
+ # a = joe.select {|value| value.is_a?(Integer) }
554
+ # a # => [12345]
555
+ #
556
+ # With no block given, returns an Enumerator.
557
+ #
558
+ alias filter select
559
+
560
+ # <!--
561
+ # rdoc-file=struct.c
562
+ # - values_at(*integers) -> array
563
+ # - values_at(integer_range) -> array
564
+ # -->
565
+ # Returns an array of values from `self`.
566
+ #
567
+ # With integer arguments `integers` given, returns an array containing each
568
+ # value given by one of `integers`:
569
+ #
570
+ # Customer = Struct.new(:name, :address, :zip)
571
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
572
+ # joe.values_at(0, 2) # => ["Joe Smith", 12345]
573
+ # joe.values_at(2, 0) # => [12345, "Joe Smith"]
574
+ # joe.values_at(2, 1, 0) # => [12345, "123 Maple, Anytown NC", "Joe Smith"]
575
+ # joe.values_at(0, -3) # => ["Joe Smith", "Joe Smith"]
576
+ #
577
+ # Raises IndexError if any of `integers` is out of range; see
578
+ # Array@Array+Indexes.
579
+ #
580
+ # With integer range argument `integer_range` given, returns an array containing
581
+ # each value given by the elements of the range; fills with `nil` values for
582
+ # range elements larger than the structure:
583
+ #
584
+ # joe.values_at(0..2)
585
+ # # => ["Joe Smith", "123 Maple, Anytown NC", 12345]
586
+ # joe.values_at(-3..-1)
587
+ # # => ["Joe Smith", "123 Maple, Anytown NC", 12345]
588
+ # joe.values_at(1..4) # => ["123 Maple, Anytown NC", 12345, nil, nil]
589
+ #
590
+ # Raises RangeError if any element of the range is negative and out of range;
591
+ # see Array@Array+Indexes.
592
+ #
593
+ def values_at: (*int | range[int?] positions) -> Array[Elem]
594
+
595
+ # <!--
596
+ # rdoc-file=struct.c
597
+ # - members -> array_of_symbols
598
+ # -->
599
+ # Returns the member names from `self` as an array:
600
+ #
601
+ # Customer = Struct.new(:name, :address, :zip)
602
+ # Customer.new.members # => [:name, :address, :zip]
603
+ #
604
+ # Related: #to_a.
605
+ #
606
+ def members: () -> Array[Symbol]
607
+
608
+ # <!--
609
+ # rdoc-file=struct.c
610
+ # - dig(name, *identifiers) -> object
611
+ # - dig(n, *identifiers) -> object
612
+ # -->
613
+ # Finds and returns an object among nested objects. The nested objects may be
614
+ # instances of various classes. See [Dig Methods](rdoc-ref:dig_methods.rdoc).
615
+ #
616
+ # Given symbol or string argument `name`, returns the object that is specified
617
+ # by `name` and `identifiers`:
618
+ #
619
+ # Foo = Struct.new(:a)
620
+ # f = Foo.new(Foo.new({b: [1, 2, 3]}))
621
+ # f.dig(:a) # => #<struct Foo a={:b=>[1, 2, 3]}>
622
+ # f.dig(:a, :a) # => {:b=>[1, 2, 3]}
623
+ # f.dig(:a, :a, :b) # => [1, 2, 3]
624
+ # f.dig(:a, :a, :b, 0) # => 1
625
+ # f.dig(:b, 0) # => nil
626
+ #
627
+ # Given integer argument `n`, returns the object that is specified by `n` and
628
+ # `identifiers`:
629
+ #
630
+ # f.dig(0) # => #<struct Foo a={:b=>[1, 2, 3]}>
631
+ # f.dig(0, 0) # => {:b=>[1, 2, 3]}
632
+ # f.dig(0, 0, :b) # => [1, 2, 3]
633
+ # f.dig(0, 0, :b, 0) # => 1
634
+ # f.dig(:b, 0) # => nil
635
+ #
636
+ def dig: (index name_or_position) -> Elem
637
+ | (index name_or_position, untyped, *untyped) -> untyped
638
+
639
+ # <!-- rdoc-file=struct.c -->
640
+ # Returns the values in `self` as an array:
641
+ #
642
+ # Customer = Struct.new(:name, :address, :zip)
643
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
644
+ # joe.to_a # => ["Joe Smith", "123 Maple, Anytown NC", 12345]
645
+ #
646
+ # Related: #members.
647
+ #
648
+ alias deconstruct to_a
649
+
650
+ # <!--
651
+ # rdoc-file=struct.c
652
+ # - deconstruct_keys(array_of_names) -> hash
653
+ # -->
654
+ # Returns a hash of the name/value pairs for the given member names.
655
+ #
656
+ # Customer = Struct.new(:name, :address, :zip)
657
+ # joe = Customer.new("Joe Smith", "123 Maple, Anytown NC", 12345)
658
+ # h = joe.deconstruct_keys([:zip, :address])
659
+ # h # => {:zip=>12345, :address=>"123 Maple, Anytown NC"}
660
+ #
661
+ # Returns all names and values if `array_of_names` is `nil`:
662
+ #
663
+ # h = joe.deconstruct_keys(nil)
664
+ # h # => {:name=>"Joseph Smith, Jr.", :address=>"123 Maple, Anytown NC", :zip=>12345}
665
+ #
666
+ def deconstruct_keys: (Array[index & Hash::_Key]? indices) -> Hash[index & Hash::_Key, Elem]
667
+ end