rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
@@ -0,0 +1,167 @@
1
+ #include "rbs/util/rbs_unescape.h"
2
+ #include "rbs/util/rbs_encoding.h"
3
+ #include <string.h>
4
+ #include <stdlib.h>
5
+ #include <ctype.h>
6
+
7
+ // Define the escape character mappings
8
+ // TODO: use a switch instead
9
+ static const struct {
10
+ const char *from;
11
+ const char *to;
12
+ } TABLE[] = {
13
+ { "\\a", "\a" },
14
+ { "\\b", "\b" },
15
+ { "\\e", "\033" },
16
+ { "\\f", "\f" },
17
+ { "\\n", "\n" },
18
+ { "\\r", "\r" },
19
+ { "\\s", " " },
20
+ { "\\t", "\t" },
21
+ { "\\v", "\v" },
22
+ { "\\\"", "\"" },
23
+ { "\\'", "'" },
24
+ { "\\\\", "\\" },
25
+ { "\\", "" }
26
+ };
27
+
28
+ // Helper function to convert hex string to integer
29
+ static int hex_to_int(const char *hex, int length) {
30
+ int result = 0;
31
+ for (int i = 0; i < length; i++) {
32
+ result = result * 16 + (isdigit(hex[i]) ? hex[i] - '0' : tolower(hex[i]) - 'a' + 10);
33
+ }
34
+ return result;
35
+ }
36
+
37
+ // Helper function to convert octal string to integer
38
+ static int octal_to_int(const char *octal, int length) {
39
+ int result = 0;
40
+ for (int i = 0; i < length; i++) {
41
+ result = result * 8 + (octal[i] - '0');
42
+ }
43
+ return result;
44
+ }
45
+
46
+ // Fills buf starting at index 'start' with the UTF-8 encoding of 'codepoint'.
47
+ // Returns the number of bytes written, or 0 when the output is not changed.
48
+ //
49
+ size_t rbs_utf8_fill_codepoint(char *buf, size_t start, size_t end, unsigned int codepoint) {
50
+ if (start + 4 > end) {
51
+ return 0;
52
+ }
53
+
54
+ if (codepoint <= 0x7F) {
55
+ buf[start] = codepoint & 0x7F;
56
+ return 1;
57
+ } else if (codepoint <= 0x7FF) {
58
+ buf[start + 0] = 0xC0 | ((codepoint >> 6) & 0x1F);
59
+ buf[start + 1] = 0x80 | (codepoint & 0x3F);
60
+ return 2;
61
+ } else if (codepoint <= 0xFFFF) {
62
+ buf[start + 0] = 0xE0 | ((codepoint >> 12) & 0x0F);
63
+ buf[start + 1] = 0x80 | ((codepoint >> 6) & 0x3F);
64
+ buf[start + 2] = 0x80 | (codepoint & 0x3F);
65
+ return 3;
66
+ } else if (codepoint <= 0x10FFFF) {
67
+ buf[start + 0] = 0xF0 | ((codepoint >> 18) & 0x07);
68
+ buf[start + 1] = 0x80 | ((codepoint >> 12) & 0x3F);
69
+ buf[start + 2] = 0x80 | ((codepoint >> 6) & 0x3F);
70
+ buf[start + 3] = 0x80 | (codepoint & 0x3F);
71
+ return 4;
72
+ } else {
73
+ return 0;
74
+ }
75
+ }
76
+
77
+ rbs_string_t unescape_string(rbs_allocator_t *allocator, const rbs_string_t string, bool is_double_quote, bool is_unicode) {
78
+ if (!string.start) return RBS_STRING_NULL;
79
+
80
+ size_t len = string.end - string.start;
81
+ const char *input = string.start;
82
+
83
+ // The output cannot be longer than the input even after unescaping.
84
+ char *output = rbs_allocator_alloc_many(allocator, len + 1, char);
85
+ if (!output) return RBS_STRING_NULL;
86
+
87
+ size_t i = 0, j = 0;
88
+ while (i < len) {
89
+ if (input[i] == '\\' && i + 1 < len) {
90
+ if (is_double_quote) {
91
+ if (isdigit(input[i + 1])) {
92
+ // Octal escape
93
+ int octal_len = 1;
94
+ while (octal_len < 3 && i + 1 + octal_len < len && isdigit(input[i + 1 + octal_len]))
95
+ octal_len++;
96
+ int value = octal_to_int(input + i + 1, octal_len);
97
+ output[j++] = (char) value;
98
+ i += octal_len + 1;
99
+ } else if (input[i + 1] == 'x' && i + 3 < len) {
100
+ // Hex escape
101
+ int hex_len = isxdigit(input[i + 3]) ? 2 : 1;
102
+ int value = hex_to_int(input + i + 2, hex_len);
103
+ output[j++] = (char) value;
104
+ i += hex_len + 2;
105
+ } else if (input[i + 1] == 'u' && i + 5 < len) {
106
+ // Unicode escape
107
+
108
+ if (is_unicode) {
109
+ // The UTF-8 representation is at most 4 bytes, shorter than the input length.
110
+ int value = hex_to_int(input + i + 2, 4);
111
+ j += rbs_utf8_fill_codepoint(output, j, len + 1, value);
112
+ i += 6;
113
+ } else {
114
+ // Copy the escape sequence as-is
115
+ output[j++] = input[i++];
116
+ output[j++] = input[i++];
117
+ output[j++] = input[i++];
118
+ output[j++] = input[i++];
119
+ output[j++] = input[i++];
120
+ output[j++] = input[i++];
121
+ }
122
+ } else {
123
+ // Other escapes
124
+ int found = 0;
125
+ for (size_t k = 0; k < sizeof(TABLE) / sizeof(TABLE[0]); k++) {
126
+ if (strncmp(input + i, TABLE[k].from, strlen(TABLE[k].from)) == 0) {
127
+ output[j++] = TABLE[k].to[0];
128
+ i += strlen(TABLE[k].from);
129
+ found = 1;
130
+ break;
131
+ }
132
+ }
133
+ if (!found) {
134
+ output[j++] = input[i++];
135
+ }
136
+ }
137
+ } else {
138
+ /* Single quote: only escape ' and \ */
139
+ if (input[i + 1] == '\'' || input[i + 1] == '\\') {
140
+ output[j++] = input[i + 1];
141
+ i += 2;
142
+ } else {
143
+ output[j++] = input[i++];
144
+ }
145
+ }
146
+ } else {
147
+ output[j++] = input[i++];
148
+ }
149
+ }
150
+ output[j] = '\0';
151
+ return rbs_string_new(output, output + j);
152
+ }
153
+
154
+ rbs_string_t rbs_unquote_string(rbs_allocator_t *allocator, rbs_string_t input, const rbs_encoding_t *encoding) {
155
+ unsigned int first_char = input.start[0];
156
+
157
+ const char *new_start = input.start;
158
+ const char *new_end = input.end;
159
+
160
+ if (first_char == '"' || first_char == '\'' || first_char == '`') {
161
+ new_start += 1;
162
+ new_end -= 1;
163
+ }
164
+
165
+ rbs_string_t string = rbs_string_new(new_start, new_end);
166
+ return unescape_string(allocator, string, first_char == '"', encoding == RBS_ENCODING_UTF_8_ENTRY);
167
+ }
@@ -0,0 +1,66 @@
1
+ # <!-- rdoc-file=lib/abbrev.rb -->
2
+ # Calculates the set of unambiguous abbreviations for a given set of strings.
3
+ #
4
+ # require 'abbrev'
5
+ # require 'pp'
6
+ #
7
+ # pp Abbrev.abbrev(['ruby'])
8
+ # #=> {"ruby"=>"ruby", "rub"=>"ruby", "ru"=>"ruby", "r"=>"ruby"}
9
+ #
10
+ # pp Abbrev.abbrev(%w{ ruby rules })
11
+ #
12
+ # *Generates:*
13
+ # { "ruby" => "ruby",
14
+ # "rub" => "ruby",
15
+ # "rules" => "rules",
16
+ # "rule" => "rules",
17
+ # "rul" => "rules" }
18
+ #
19
+ # It also provides an array core extension, Array#abbrev.
20
+ #
21
+ # pp %w{ summer winter }.abbrev
22
+ #
23
+ # *Generates:*
24
+ # { "summer" => "summer",
25
+ # "summe" => "summer",
26
+ # "summ" => "summer",
27
+ # "sum" => "summer",
28
+ # "su" => "summer",
29
+ # "s" => "summer",
30
+ # "winter" => "winter",
31
+ # "winte" => "winter",
32
+ # "wint" => "winter",
33
+ # "win" => "winter",
34
+ # "wi" => "winter",
35
+ # "w" => "winter" }
36
+ #
37
+ module Abbrev
38
+ # <!--
39
+ # rdoc-file=lib/abbrev.rb
40
+ # - abbrev(words, pattern = nil)
41
+ # -->
42
+ # Given a set of strings, calculate the set of unambiguous abbreviations for
43
+ # those strings, and return a hash where the keys are all the possible
44
+ # abbreviations and the values are the full strings.
45
+ #
46
+ # Thus, given `words` is "car" and "cone", the keys pointing to "car" would be
47
+ # "ca" and "car", while those pointing to "cone" would be "co", "con", and
48
+ # "cone".
49
+ #
50
+ # require 'abbrev'
51
+ #
52
+ # Abbrev.abbrev(%w{ car cone })
53
+ # #=> {"ca"=>"car", "con"=>"cone", "co"=>"cone", "car"=>"car", "cone"=>"cone"}
54
+ #
55
+ # The optional `pattern` parameter is a pattern or a string. Only input strings
56
+ # that match the pattern or start with the string are included in the output
57
+ # hash.
58
+ #
59
+ # Abbrev.abbrev(%w{car box cone crab}, /b/)
60
+ # #=> {"box"=>"box", "bo"=>"box", "b"=>"box", "crab" => "crab"}
61
+ #
62
+ # Abbrev.abbrev(%w{car box cone}, 'ca')
63
+ # #=> {"car"=>"car", "ca"=>"car"}
64
+ #
65
+ def self?.abbrev: (Array[String], ?String | Regexp | nil) -> Hash[String, String]
66
+ end
@@ -0,0 +1,26 @@
1
+ %a{annotate:rdoc:skip}
2
+ class Array[unchecked out E]
3
+ # <!--
4
+ # rdoc-file=lib/abbrev.rb
5
+ # - abbrev(pattern = nil)
6
+ # -->
7
+ # Calculates the set of unambiguous abbreviations for the strings in `self`.
8
+ #
9
+ # require 'abbrev'
10
+ # %w{ car cone }.abbrev
11
+ # #=> {"car"=>"car", "ca"=>"car", "cone"=>"cone", "con"=>"cone", "co"=>"cone"}
12
+ #
13
+ # The optional `pattern` parameter is a pattern or a string. Only input strings
14
+ # that match the pattern or start with the string are included in the output
15
+ # hash.
16
+ #
17
+ # %w{ fast boat day }.abbrev(/^.a/)
18
+ # #=> {"fast"=>"fast", "fas"=>"fast", "fa"=>"fast", "day"=>"day", "da"=>"day"}
19
+ #
20
+ # Abbrev.abbrev(%w{car box cone}, "ca")
21
+ # #=> {"car"=>"car", "ca"=>"car"}
22
+ #
23
+ # See also Abbrev.abbrev
24
+ #
25
+ def abbrev: (?String | Regexp | nil) -> Hash[String, String]
26
+ end
@@ -0,0 +1,355 @@
1
+ # <!-- rdoc-file=lib/base64.rb -->
2
+ # Module Base64 provides methods for:
3
+ #
4
+ # * Encoding a binary string (containing non-ASCII characters) as a string of
5
+ # printable ASCII characters.
6
+ # * Decoding such an encoded string.
7
+ #
8
+ # Base64 is commonly used in contexts where binary data is not allowed or
9
+ # supported:
10
+ #
11
+ # * Images in HTML or CSS files, or in URLs.
12
+ # * Email attachments.
13
+ #
14
+ # A Base64-encoded string is about one-third larger that its source. See the
15
+ # [Wikipedia article](https://en.wikipedia.org/wiki/Base64) for more
16
+ # information.
17
+ #
18
+ # This module provides three pairs of encode/decode methods. Your choices among
19
+ # these methods should depend on:
20
+ #
21
+ # * Which character set is to be used for encoding and decoding.
22
+ # * Whether "padding" is to be used.
23
+ # * Whether encoded strings are to contain newlines.
24
+ #
25
+ # Note: Examples on this page assume that the including program has executed:
26
+ #
27
+ # require 'base64'
28
+ #
29
+ # ## Encoding Character Sets
30
+ #
31
+ # A Base64-encoded string consists only of characters from a 64-character set:
32
+ #
33
+ # * `('A'..'Z')`.
34
+ # * `('a'..'z')`.
35
+ # * `('0'..'9')`.
36
+ # * `=`, the 'padding' character.
37
+ # * Either:
38
+ # * `%w[+ /]`:
39
+ # [RFC-2045-compliant](https://datatracker.ietf.org/doc/html/rfc2045);
40
+ # *not* safe for URLs.
41
+ # * `%w[- _]`:
42
+ # [RFC-4648-compliant](https://datatracker.ietf.org/doc/html/rfc4648);
43
+ # safe for URLs.
44
+ #
45
+ # If you are working with Base64-encoded strings that will come from or be put
46
+ # into URLs, you should choose this encoder-decoder pair of RFC-4648-compliant
47
+ # methods:
48
+ #
49
+ # * Base64.urlsafe_encode64 and Base64.urlsafe_decode64.
50
+ #
51
+ # Otherwise, you may choose any of the pairs in this module, including the pair
52
+ # above, or the RFC-2045-compliant pairs:
53
+ #
54
+ # * Base64.encode64 and Base64.decode64.
55
+ # * Base64.strict_encode64 and Base64.strict_decode64.
56
+ #
57
+ # ## Padding
58
+ #
59
+ # Base64-encoding changes a triplet of input bytes into a quartet of output
60
+ # characters.
61
+ #
62
+ # **Padding in Encode Methods**
63
+ #
64
+ # Padding -- extending an encoded string with zero, one, or two trailing `=`
65
+ # characters -- is performed by methods Base64.encode64, Base64.strict_encode64,
66
+ # and, by default, Base64.urlsafe_encode64:
67
+ #
68
+ # Base64.encode64('s') # => "cw==\n"
69
+ # Base64.strict_encode64('s') # => "cw=="
70
+ # Base64.urlsafe_encode64('s') # => "cw=="
71
+ # Base64.urlsafe_encode64('s', padding: false) # => "cw"
72
+ #
73
+ # When padding is performed, the encoded string is always of length *4n*, where
74
+ # `n` is a non-negative integer:
75
+ #
76
+ # * Input bytes of length *3n* generate unpadded output characters of length
77
+ # *4n*:
78
+ #
79
+ # # n = 1: 3 bytes => 4 characters.
80
+ # Base64.strict_encode64('123') # => "MDEy"
81
+ # # n = 2: 6 bytes => 8 characters.
82
+ # Base64.strict_encode64('123456') # => "MDEyMzQ1"
83
+ #
84
+ # * Input bytes of length *3n+1* generate padded output characters of length
85
+ # *4(n+1)*, with two padding characters at the end:
86
+ #
87
+ # # n = 1: 4 bytes => 8 characters.
88
+ # Base64.strict_encode64('1234') # => "MDEyMw=="
89
+ # # n = 2: 7 bytes => 12 characters.
90
+ # Base64.strict_encode64('1234567') # => "MDEyMzQ1Ng=="
91
+ #
92
+ # * Input bytes of length *3n+2* generate padded output characters of length
93
+ # *4(n+1)*, with one padding character at the end:
94
+ #
95
+ # # n = 1: 5 bytes => 8 characters.
96
+ # Base64.strict_encode64('12345') # => "MDEyMzQ="
97
+ # # n = 2: 8 bytes => 12 characters.
98
+ # Base64.strict_encode64('12345678') # => "MDEyMzQ1Njc="
99
+ #
100
+ # When padding is suppressed, for a positive integer *n*:
101
+ #
102
+ # * Input bytes of length *3n* generate unpadded output characters of length
103
+ # *4n*:
104
+ #
105
+ # # n = 1: 3 bytes => 4 characters.
106
+ # Base64.urlsafe_encode64('123', padding: false) # => "MDEy"
107
+ # # n = 2: 6 bytes => 8 characters.
108
+ # Base64.urlsafe_encode64('123456', padding: false) # => "MDEyMzQ1"
109
+ #
110
+ # * Input bytes of length *3n+1* generate unpadded output characters of length
111
+ # *4n+2*, with two padding characters at the end:
112
+ #
113
+ # # n = 1: 4 bytes => 6 characters.
114
+ # Base64.urlsafe_encode64('1234', padding: false) # => "MDEyMw"
115
+ # # n = 2: 7 bytes => 10 characters.
116
+ # Base64.urlsafe_encode64('1234567', padding: false) # => "MDEyMzQ1Ng"
117
+ #
118
+ # * Input bytes of length *3n+2* generate unpadded output characters of length
119
+ # *4n+3*, with one padding character at the end:
120
+ #
121
+ # # n = 1: 5 bytes => 7 characters.
122
+ # Base64.urlsafe_encode64('12345', padding: false) # => "MDEyMzQ"
123
+ # # m = 2: 8 bytes => 11 characters.
124
+ # Base64.urlsafe_encode64('12345678', padding: false) # => "MDEyMzQ1Njc"
125
+ #
126
+ # **Padding in Decode Methods**
127
+ #
128
+ # All of the Base64 decode methods support (but do not require) padding.
129
+ #
130
+ # Method Base64.decode64 does not check the size of the padding:
131
+ #
132
+ # Base64.decode64("MDEyMzQ1Njc") # => "01234567"
133
+ # Base64.decode64("MDEyMzQ1Njc=") # => "01234567"
134
+ # Base64.decode64("MDEyMzQ1Njc==") # => "01234567"
135
+ #
136
+ # Method Base64.strict_decode64 strictly enforces padding size:
137
+ #
138
+ # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError
139
+ # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567"
140
+ # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError
141
+ #
142
+ # Method Base64.urlsafe_decode64 allows padding in `str`, which if present, must
143
+ # be correct: see [Padding](Base64.html#module-Base64-label-Padding), above:
144
+ #
145
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567"
146
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567"
147
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError.
148
+ #
149
+ # ## Newlines
150
+ #
151
+ # An encoded string returned by Base64.encode64 or Base64.urlsafe_encode64 has
152
+ # an embedded newline character after each 60-character sequence, and, if
153
+ # non-empty, at the end:
154
+ #
155
+ # # No newline if empty.
156
+ # encoded = Base64.encode64("\x00" * 0)
157
+ # encoded.index("\n") # => nil
158
+ #
159
+ # # Newline at end of short output.
160
+ # encoded = Base64.encode64("\x00" * 1)
161
+ # encoded.size # => 4
162
+ # encoded.index("\n") # => 4
163
+ #
164
+ # # Newline at end of longer output.
165
+ # encoded = Base64.encode64("\x00" * 45)
166
+ # encoded.size # => 60
167
+ # encoded.index("\n") # => 60
168
+ #
169
+ # # Newlines embedded and at end of still longer output.
170
+ # encoded = Base64.encode64("\x00" * 46)
171
+ # encoded.size # => 65
172
+ # encoded.rindex("\n") # => 65
173
+ # encoded.split("\n").map {|s| s.size } # => [60, 4]
174
+ #
175
+ # The string to be encoded may itself contain newlines, which are encoded as
176
+ # Base64:
177
+ #
178
+ # # Base64.encode64("\n\n\n") # => "CgoK\n"
179
+ # s = "This is line 1\nThis is line 2\n"
180
+ # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
181
+ #
182
+ module Base64
183
+ # <!--
184
+ # rdoc-file=lib/base64.rb
185
+ # - decode64(str)
186
+ # -->
187
+ # Returns a string containing the decoding of an RFC-2045-compliant
188
+ # Base64-encoded string `str`:
189
+ #
190
+ # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
191
+ # Base64.decode64(s) # => "This is line 1\nThis is line 2\n"
192
+ #
193
+ # Non-Base64 characters in `str` are ignored; see [Encoding Character
194
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these
195
+ # include newline characters and characters `-` and `/`:
196
+ #
197
+ # Base64.decode64("\x00\n-_") # => ""
198
+ #
199
+ # Padding in `str` (even if incorrect) is ignored:
200
+ #
201
+ # Base64.decode64("MDEyMzQ1Njc") # => "01234567"
202
+ # Base64.decode64("MDEyMzQ1Njc=") # => "01234567"
203
+ # Base64.decode64("MDEyMzQ1Njc==") # => "01234567"
204
+ #
205
+ def self?.decode64: (String str) -> String
206
+
207
+ # <!--
208
+ # rdoc-file=lib/base64.rb
209
+ # - encode64(bin)
210
+ # -->
211
+ # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`.
212
+ #
213
+ # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or
214
+ # `/`; see [Encoding Character
215
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
216
+ #
217
+ # Base64.encode64("\xFB\xEF\xBE") # => "++++\n"
218
+ # Base64.encode64("\xFF\xFF\xFF") # => "////\n"
219
+ #
220
+ # The returned string may include padding; see
221
+ # [Padding](Base64.html#module-Base64-label-Padding) above.
222
+ #
223
+ # Base64.encode64('*') # => "Kg==\n"
224
+ #
225
+ # The returned string ends with a newline character, and if sufficiently long
226
+ # will have one or more embedded newline characters; see
227
+ # [Newlines](Base64.html#module-Base64-label-Newlines) above:
228
+ #
229
+ # Base64.encode64('*') # => "Kg==\n"
230
+ # Base64.encode64('*' * 46)
231
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\nKg==\n"
232
+ #
233
+ # The string to be encoded may itself contain newlines, which will be encoded as
234
+ # ordinary Base64:
235
+ #
236
+ # Base64.encode64("\n\n\n") # => "CgoK\n"
237
+ # s = "This is line 1\nThis is line 2\n"
238
+ # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n"
239
+ #
240
+ def self?.encode64: (String bin) -> String
241
+
242
+ # <!--
243
+ # rdoc-file=lib/base64.rb
244
+ # - strict_decode64(str)
245
+ # -->
246
+ # Returns a string containing the decoding of an RFC-2045-compliant
247
+ # Base64-encoded string `str`:
248
+ #
249
+ # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK"
250
+ # Base64.strict_decode64(s) # => "This is line 1\nThis is line 2\n"
251
+ #
252
+ # Non-Base64 characters in `str` not allowed; see [Encoding Character
253
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these
254
+ # include newline characters and characters `-` and `/`:
255
+ #
256
+ # Base64.strict_decode64("\n") # Raises ArgumentError
257
+ # Base64.strict_decode64('-') # Raises ArgumentError
258
+ # Base64.strict_decode64('_') # Raises ArgumentError
259
+ #
260
+ # Padding in `str`, if present, must be correct:
261
+ #
262
+ # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError
263
+ # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567"
264
+ # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError
265
+ #
266
+ def self?.strict_decode64: (String str) -> String
267
+
268
+ # <!--
269
+ # rdoc-file=lib/base64.rb
270
+ # - strict_encode64(bin)
271
+ # -->
272
+ # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`.
273
+ #
274
+ # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or
275
+ # `/`; see [Encoding Character
276
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
277
+ #
278
+ # Base64.strict_encode64("\xFB\xEF\xBE") # => "++++\n"
279
+ # Base64.strict_encode64("\xFF\xFF\xFF") # => "////\n"
280
+ #
281
+ # The returned string may include padding; see
282
+ # [Padding](Base64.html#module-Base64-label-Padding) above.
283
+ #
284
+ # Base64.strict_encode64('*') # => "Kg==\n"
285
+ #
286
+ # The returned string will have no newline characters, regardless of its length;
287
+ # see [Newlines](Base64.html#module-Base64-label-Newlines) above:
288
+ #
289
+ # Base64.strict_encode64('*') # => "Kg=="
290
+ # Base64.strict_encode64('*' * 46)
291
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg=="
292
+ #
293
+ # The string to be encoded may itself contain newlines, which will be encoded as
294
+ # ordinary Base64:
295
+ #
296
+ # Base64.strict_encode64("\n\n\n") # => "CgoK"
297
+ # s = "This is line 1\nThis is line 2\n"
298
+ # Base64.strict_encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK"
299
+ #
300
+ def self?.strict_encode64: (String bin) -> String
301
+
302
+ # <!--
303
+ # rdoc-file=lib/base64.rb
304
+ # - urlsafe_decode64(str)
305
+ # -->
306
+ # Returns the decoding of an RFC-4648-compliant Base64-encoded string `str`:
307
+ #
308
+ # `str` may not contain non-Base64 characters; see [Encoding Character
309
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
310
+ #
311
+ # Base64.urlsafe_decode64('+') # Raises ArgumentError.
312
+ # Base64.urlsafe_decode64('/') # Raises ArgumentError.
313
+ # Base64.urlsafe_decode64("\n") # Raises ArgumentError.
314
+ #
315
+ # Padding in `str`, if present, must be correct: see
316
+ # [Padding](Base64.html#module-Base64-label-Padding), above:
317
+ #
318
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567"
319
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567"
320
+ # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError.
321
+ #
322
+ def self?.urlsafe_decode64: (String str) -> String
323
+
324
+ # <!--
325
+ # rdoc-file=lib/base64.rb
326
+ # - urlsafe_encode64(bin, padding: true)
327
+ # -->
328
+ # Returns the RFC-4648-compliant Base64-encoding of `bin`.
329
+ #
330
+ # Per RFC 4648, the returned string will not contain the URL-unsafe characters
331
+ # `+` or `/`, but instead may contain the URL-safe characters `-` and `_`; see
332
+ # [Encoding Character
333
+ # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above:
334
+ #
335
+ # Base64.urlsafe_encode64("\xFB\xEF\xBE") # => "----"
336
+ # Base64.urlsafe_encode64("\xFF\xFF\xFF") # => "____"
337
+ #
338
+ # By default, the returned string may have padding; see
339
+ # [Padding](Base64.html#module-Base64-label-Padding), above:
340
+ #
341
+ # Base64.urlsafe_encode64('*') # => "Kg=="
342
+ #
343
+ # Optionally, you can suppress padding:
344
+ #
345
+ # Base64.urlsafe_encode64('*', padding: false) # => "Kg"
346
+ #
347
+ # The returned string will have no newline characters, regardless of its length;
348
+ # see [Newlines](Base64.html#module-Base64-label-Newlines) above:
349
+ #
350
+ # Base64.urlsafe_encode64('*') # => "Kg=="
351
+ # Base64.urlsafe_encode64('*' * 46)
352
+ # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg=="
353
+ #
354
+ def self?.urlsafe_encode64: (String bin, ?padding: boolish) -> String
355
+ end