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,83 @@
1
+ #ifndef RBS__RBS_BUFFER_H
2
+ #define RBS__RBS_BUFFER_H
3
+
4
+ #include "rbs/util/rbs_allocator.h"
5
+ #include "rbs/string.h"
6
+
7
+ #include <stdbool.h>
8
+ #include <stdlib.h>
9
+ #include <string.h>
10
+
11
+ /**
12
+ * The default capacity of a rbs_buffer_t.
13
+ * If the buffer needs to grow beyond this capacity, it will be doubled.
14
+ */
15
+ #define RBS_BUFFER_DEFAULT_CAPACITY 128
16
+
17
+ /**
18
+ * A rbs_buffer_t is a simple memory buffer that stores data in a contiguous block of memory.
19
+ */
20
+ typedef struct {
21
+ /** The length of the buffer in bytes. */
22
+ size_t length;
23
+
24
+ /** The capacity of the buffer in bytes that has been allocated. */
25
+ size_t capacity;
26
+
27
+ /** A pointer to the start of the buffer. */
28
+ char *value;
29
+ } rbs_buffer_t;
30
+
31
+ /**
32
+ * Initialize a rbs_buffer_t with its default values.
33
+ *
34
+ * @param allocator The allocator to use.
35
+ * @param buffer The buffer to initialize.
36
+ * @returns True if the buffer was initialized successfully, false otherwise.
37
+ */
38
+ bool rbs_buffer_init(rbs_allocator_t *, rbs_buffer_t *buffer);
39
+
40
+ /**
41
+ * Return the value of the buffer.
42
+ *
43
+ * @param buffer The buffer to get the value of.
44
+ * @returns The value of the buffer.
45
+ */
46
+ char *rbs_buffer_value(const rbs_buffer_t *buffer);
47
+
48
+ /**
49
+ * Return the length of the buffer.
50
+ *
51
+ * @param buffer The buffer to get the length of.
52
+ * @returns The length of the buffer.
53
+ */
54
+ size_t rbs_buffer_length(const rbs_buffer_t *buffer);
55
+
56
+ /**
57
+ * Append a C string to the buffer.
58
+ *
59
+ * @param allocator The allocator to use.
60
+ * @param buffer The buffer to append to.
61
+ * @param value The C string to append.
62
+ */
63
+ void rbs_buffer_append_cstr(rbs_allocator_t *, rbs_buffer_t *buffer, const char *value);
64
+
65
+ /**
66
+ * Append a string to the buffer.
67
+ *
68
+ * @param allocator The allocator to use.
69
+ * @param buffer The buffer to append to.
70
+ * @param value The string to append.
71
+ * @param length The length of the string to append.
72
+ */
73
+ void rbs_buffer_append_string(rbs_allocator_t *, rbs_buffer_t *buffer, const char *value, size_t length);
74
+
75
+ /**
76
+ * Convert the buffer to a rbs_string_t.
77
+ *
78
+ * @param buffer The buffer to convert.
79
+ * @returns The converted rbs_string_t.
80
+ */
81
+ rbs_string_t rbs_buffer_to_string(rbs_buffer_t *buffer);
82
+
83
+ #endif
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @file rbs_constant_pool.h
3
+ *
4
+ * A data structure that stores a set of strings.
5
+ *
6
+ * Each string is assigned a unique id, which can be used to compare strings for
7
+ * equality. This comparison ends up being much faster than strcmp, since it
8
+ * only requires a single integer comparison.
9
+ */
10
+ #ifndef RBS_CONSTANT_POOL_H
11
+ #define RBS_CONSTANT_POOL_H
12
+
13
+ #include "rbs/util/rbs_encoding.h"
14
+
15
+ #include <assert.h>
16
+ #include <stdbool.h>
17
+ #include <stdint.h>
18
+ #include <stdlib.h>
19
+ #include <string.h>
20
+
21
+ /**
22
+ * When we allocate constants into the pool, we reserve 0 to mean that the slot
23
+ * is not yet filled. This constant is reused in other places to indicate the
24
+ * lack of a constant id.
25
+ */
26
+ #define RBS_CONSTANT_ID_UNSET 0
27
+
28
+ /**
29
+ * A constant id is a unique identifier for a constant in the constant pool.
30
+ */
31
+ typedef uint32_t rbs_constant_id_t;
32
+
33
+ /**
34
+ * The type of bucket in the constant pool hash map. This determines how the
35
+ * bucket should be freed.
36
+ */
37
+ typedef unsigned int rbs_constant_pool_bucket_type_t;
38
+
39
+ /** By default, each constant is a slice of the source. */
40
+ static const rbs_constant_pool_bucket_type_t RBS_CONSTANT_POOL_BUCKET_DEFAULT = 0;
41
+
42
+ /** An owned constant is one for which memory has been allocated. */
43
+ static const rbs_constant_pool_bucket_type_t RBS_CONSTANT_POOL_BUCKET_OWNED = 1;
44
+
45
+ /** A constant constant is known at compile time. */
46
+ static const rbs_constant_pool_bucket_type_t RBS_CONSTANT_POOL_BUCKET_CONSTANT = 2;
47
+
48
+ /** A bucket in the hash map. */
49
+ typedef struct {
50
+ /** The incremental ID used for indexing back into the pool. */
51
+ unsigned int id : 30;
52
+
53
+ /** The type of the bucket, which determines how to free it. */
54
+ rbs_constant_pool_bucket_type_t type : 2;
55
+
56
+ /** The hash of the bucket. */
57
+ uint32_t hash;
58
+ } rbs_constant_pool_bucket_t;
59
+
60
+ /** A constant in the pool which effectively stores a string. */
61
+ typedef struct {
62
+ /** A pointer to the start of the string. */
63
+ const uint8_t *start;
64
+
65
+ /** The length of the string. */
66
+ size_t length;
67
+ } rbs_constant_t;
68
+
69
+ /** The overall constant pool, which stores constants found while parsing. */
70
+ typedef struct {
71
+ /** The buckets in the hash map. */
72
+ rbs_constant_pool_bucket_t *buckets;
73
+
74
+ /** The constants that are stored in the buckets. */
75
+ rbs_constant_t *constants;
76
+
77
+ /** The number of buckets in the hash map. */
78
+ uint32_t size;
79
+
80
+ /** The number of buckets that have been allocated in the hash map. */
81
+ uint32_t capacity;
82
+ } rbs_constant_pool_t;
83
+
84
+ /**
85
+ * Initialize a new constant pool with a given capacity.
86
+ *
87
+ * @param pool The pool to initialize.
88
+ * @param capacity The initial capacity of the pool.
89
+ * @return Whether the initialization succeeded.
90
+ */
91
+ bool rbs_constant_pool_init(rbs_constant_pool_t *pool, uint32_t capacity);
92
+
93
+ /**
94
+ * Return a pointer to the constant indicated by the given constant id.
95
+ *
96
+ * @param pool The pool to get the constant from.
97
+ * @param constant_id The id of the constant to get.
98
+ * @return A pointer to the constant.
99
+ */
100
+ rbs_constant_t *rbs_constant_pool_id_to_constant(const rbs_constant_pool_t *pool, rbs_constant_id_t constant_id);
101
+
102
+ /**
103
+ * Find a constant in a constant pool. Returns the id of the constant, or 0 if
104
+ * the constant is not found.
105
+ *
106
+ * @param pool The pool to find the constant in.
107
+ * @param start A pointer to the start of the constant.
108
+ * @param length The length of the constant.
109
+ * @return The id of the constant.
110
+ */
111
+ rbs_constant_id_t rbs_constant_pool_find(const rbs_constant_pool_t *pool, const uint8_t *start, size_t length);
112
+
113
+ /**
114
+ * Insert a constant into a constant pool that is a slice of a source string.
115
+ * Returns the id of the constant, or 0 if any potential calls to resize fail.
116
+ *
117
+ * @param pool The pool to insert the constant into.
118
+ * @param start A pointer to the start of the constant.
119
+ * @param length The length of the constant.
120
+ * @return The id of the constant.
121
+ */
122
+ rbs_constant_id_t rbs_constant_pool_insert_shared(rbs_constant_pool_t *pool, const uint8_t *start, size_t length);
123
+ rbs_constant_id_t rbs_constant_pool_insert_shared_with_encoding(rbs_constant_pool_t *pool, const uint8_t *start, size_t length, const rbs_encoding_t *encoding);
124
+
125
+ /**
126
+ * Insert a constant into a constant pool from memory that is now owned by the
127
+ * constant pool. Returns the id of the constant, or 0 if any potential calls to
128
+ * resize fail.
129
+ *
130
+ * @param pool The pool to insert the constant into.
131
+ * @param start A pointer to the start of the constant.
132
+ * @param length The length of the constant.
133
+ * @return The id of the constant.
134
+ */
135
+ rbs_constant_id_t rbs_constant_pool_insert_owned(rbs_constant_pool_t *pool, uint8_t *start, size_t length);
136
+
137
+ /**
138
+ * Insert a constant into a constant pool from memory that is constant. Returns
139
+ * the id of the constant, or 0 if any potential calls to resize fail.
140
+ *
141
+ * @param pool The pool to insert the constant into.
142
+ * @param start A pointer to the start of the constant.
143
+ * @param length The length of the constant.
144
+ * @return The id of the constant.
145
+ */
146
+ rbs_constant_id_t rbs_constant_pool_insert_constant(rbs_constant_pool_t *pool, const uint8_t *start, size_t length);
147
+
148
+ /**
149
+ * Free the memory associated with a constant pool.
150
+ *
151
+ * @param pool The pool to free.
152
+ */
153
+ void rbs_constant_pool_free(rbs_constant_pool_t *pool);
154
+
155
+ #endif
@@ -0,0 +1,282 @@
1
+ /**
2
+ * @file encoding.h
3
+ *
4
+ * The encoding interface and implementations used by the parser.
5
+ */
6
+ #ifndef RBS_RBS_ENCODING_H
7
+ #define RBS_RBS_ENCODING_H
8
+
9
+ #include "rbs/defines.h"
10
+
11
+ #include <assert.h>
12
+ #include <stdbool.h>
13
+ #include <stddef.h>
14
+ #include <stdint.h>
15
+
16
+ /**
17
+ * This struct defines the functions necessary to implement the encoding
18
+ * interface so we can determine how many bytes the subsequent character takes.
19
+ * Each callback should return the number of bytes, or 0 if the next bytes are
20
+ * invalid for the encoding and type.
21
+ */
22
+ typedef struct {
23
+ /**
24
+ * Return the number of bytes that the next character takes if it is valid
25
+ * in the encoding. Does not read more than n bytes. It is assumed that n is
26
+ * at least 1.
27
+ */
28
+ size_t (*char_width)(const uint8_t *b, ptrdiff_t n);
29
+
30
+ /**
31
+ * Return the number of bytes that the next character takes if it is valid
32
+ * in the encoding and is alphabetical. Does not read more than n bytes. It
33
+ * is assumed that n is at least 1.
34
+ */
35
+ size_t (*alpha_char)(const uint8_t *b, ptrdiff_t n);
36
+
37
+ /**
38
+ * Return the number of bytes that the next character takes if it is valid
39
+ * in the encoding and is alphanumeric. Does not read more than n bytes. It
40
+ * is assumed that n is at least 1.
41
+ */
42
+ size_t (*alnum_char)(const uint8_t *b, ptrdiff_t n);
43
+
44
+ /**
45
+ * Return true if the next character is valid in the encoding and is an
46
+ * uppercase character. Does not read more than n bytes. It is assumed that
47
+ * n is at least 1.
48
+ */
49
+ bool (*isupper_char)(const uint8_t *b, ptrdiff_t n);
50
+
51
+ /**
52
+ * The name of the encoding. This should correspond to a value that can be
53
+ * passed to Encoding.find in Ruby.
54
+ */
55
+ const char *name;
56
+
57
+ /**
58
+ * Return true if the encoding is a multibyte encoding.
59
+ */
60
+ bool multibyte;
61
+ } rbs_encoding_t;
62
+
63
+ /**
64
+ * All of the lookup tables use the first bit of each embedded byte to indicate
65
+ * whether the codepoint is alphabetical.
66
+ */
67
+ #define RBS_ENCODING_ALPHABETIC_BIT 1 << 0
68
+
69
+ /**
70
+ * All of the lookup tables use the second bit of each embedded byte to indicate
71
+ * whether the codepoint is alphanumeric.
72
+ */
73
+ #define RBS_ENCODING_ALPHANUMERIC_BIT 1 << 1
74
+
75
+ /**
76
+ * All of the lookup tables use the third bit of each embedded byte to indicate
77
+ * whether the codepoint is uppercase.
78
+ */
79
+ #define RBS_ENCODING_UPPERCASE_BIT 1 << 2
80
+
81
+ /**
82
+ * Return the size of the next character in the UTF-8 encoding.
83
+ *
84
+ * @param b The bytes to read.
85
+ * @param n The number of bytes that can be read.
86
+ * @returns The number of bytes that the next character takes if it is valid in
87
+ * the encoding, or 0 if it is not.
88
+ */
89
+ size_t rbs_encoding_utf_8_char_width(const uint8_t *b, ptrdiff_t n);
90
+
91
+ /**
92
+ * Return the size of the next character in the UTF-8 encoding if it is an
93
+ * alphabetical character.
94
+ *
95
+ * @param b The bytes to read.
96
+ * @param n The number of bytes that can be read.
97
+ * @returns The number of bytes that the next character takes if it is valid in
98
+ * the encoding, or 0 if it is not.
99
+ */
100
+ size_t rbs_encoding_utf_8_alpha_char(const uint8_t *b, ptrdiff_t n);
101
+
102
+ /**
103
+ * Return the size of the next character in the UTF-8 encoding if it is an
104
+ * alphanumeric character.
105
+ *
106
+ * @param b The bytes to read.
107
+ * @param n The number of bytes that can be read.
108
+ * @returns The number of bytes that the next character takes if it is valid in
109
+ * the encoding, or 0 if it is not.
110
+ */
111
+ size_t rbs_encoding_utf_8_alnum_char(const uint8_t *b, ptrdiff_t n);
112
+
113
+ /**
114
+ * Return true if the next character in the UTF-8 encoding if it is an uppercase
115
+ * character.
116
+ *
117
+ * @param b The bytes to read.
118
+ * @param n The number of bytes that can be read.
119
+ * @returns True if the next character is valid in the encoding and is an
120
+ * uppercase character, or false if it is not.
121
+ */
122
+ bool rbs_encoding_utf_8_isupper_char(const uint8_t *b, ptrdiff_t n);
123
+
124
+ /**
125
+ * This lookup table is referenced in both the UTF-8 encoding file and the
126
+ * parser directly in order to speed up the default encoding processing. It is
127
+ * used to indicate whether a character is alphabetical, alphanumeric, or
128
+ * uppercase in unicode mappings.
129
+ */
130
+ extern const uint8_t rbs_encoding_unicode_table[256];
131
+
132
+ /**
133
+ * These are all of the encodings that prism supports.
134
+ */
135
+ typedef enum {
136
+ RBS_ENCODING_UTF_8 = 0,
137
+ RBS_ENCODING_US_ASCII,
138
+ RBS_ENCODING_ASCII_8BIT,
139
+ RBS_ENCODING_EUC_JP,
140
+ RBS_ENCODING_WINDOWS_31J,
141
+
142
+ // We optionally support excluding the full set of encodings to only support the
143
+ // minimum necessary to process Ruby code without encoding comments.
144
+ #ifndef RBS_ENCODING_EXCLUDE_FULL
145
+ RBS_ENCODING_BIG5,
146
+ RBS_ENCODING_BIG5_HKSCS,
147
+ RBS_ENCODING_BIG5_UAO,
148
+ RBS_ENCODING_CESU_8,
149
+ RBS_ENCODING_CP51932,
150
+ RBS_ENCODING_CP850,
151
+ RBS_ENCODING_CP852,
152
+ RBS_ENCODING_CP855,
153
+ RBS_ENCODING_CP949,
154
+ RBS_ENCODING_CP950,
155
+ RBS_ENCODING_CP951,
156
+ RBS_ENCODING_EMACS_MULE,
157
+ RBS_ENCODING_EUC_JP_MS,
158
+ RBS_ENCODING_EUC_JIS_2004,
159
+ RBS_ENCODING_EUC_KR,
160
+ RBS_ENCODING_EUC_TW,
161
+ RBS_ENCODING_GB12345,
162
+ RBS_ENCODING_GB18030,
163
+ RBS_ENCODING_GB1988,
164
+ RBS_ENCODING_GB2312,
165
+ RBS_ENCODING_GBK,
166
+ RBS_ENCODING_IBM437,
167
+ RBS_ENCODING_IBM720,
168
+ RBS_ENCODING_IBM737,
169
+ RBS_ENCODING_IBM775,
170
+ RBS_ENCODING_IBM852,
171
+ RBS_ENCODING_IBM855,
172
+ RBS_ENCODING_IBM857,
173
+ RBS_ENCODING_IBM860,
174
+ RBS_ENCODING_IBM861,
175
+ RBS_ENCODING_IBM862,
176
+ RBS_ENCODING_IBM863,
177
+ RBS_ENCODING_IBM864,
178
+ RBS_ENCODING_IBM865,
179
+ RBS_ENCODING_IBM866,
180
+ RBS_ENCODING_IBM869,
181
+ RBS_ENCODING_ISO_8859_1,
182
+ RBS_ENCODING_ISO_8859_2,
183
+ RBS_ENCODING_ISO_8859_3,
184
+ RBS_ENCODING_ISO_8859_4,
185
+ RBS_ENCODING_ISO_8859_5,
186
+ RBS_ENCODING_ISO_8859_6,
187
+ RBS_ENCODING_ISO_8859_7,
188
+ RBS_ENCODING_ISO_8859_8,
189
+ RBS_ENCODING_ISO_8859_9,
190
+ RBS_ENCODING_ISO_8859_10,
191
+ RBS_ENCODING_ISO_8859_11,
192
+ RBS_ENCODING_ISO_8859_13,
193
+ RBS_ENCODING_ISO_8859_14,
194
+ RBS_ENCODING_ISO_8859_15,
195
+ RBS_ENCODING_ISO_8859_16,
196
+ RBS_ENCODING_KOI8_R,
197
+ RBS_ENCODING_KOI8_U,
198
+ RBS_ENCODING_MAC_CENT_EURO,
199
+ RBS_ENCODING_MAC_CROATIAN,
200
+ RBS_ENCODING_MAC_CYRILLIC,
201
+ RBS_ENCODING_MAC_GREEK,
202
+ RBS_ENCODING_MAC_ICELAND,
203
+ RBS_ENCODING_MAC_JAPANESE,
204
+ RBS_ENCODING_MAC_ROMAN,
205
+ RBS_ENCODING_MAC_ROMANIA,
206
+ RBS_ENCODING_MAC_THAI,
207
+ RBS_ENCODING_MAC_TURKISH,
208
+ RBS_ENCODING_MAC_UKRAINE,
209
+ RBS_ENCODING_SHIFT_JIS,
210
+ RBS_ENCODING_SJIS_DOCOMO,
211
+ RBS_ENCODING_SJIS_KDDI,
212
+ RBS_ENCODING_SJIS_SOFTBANK,
213
+ RBS_ENCODING_STATELESS_ISO_2022_JP,
214
+ RBS_ENCODING_STATELESS_ISO_2022_JP_KDDI,
215
+ RBS_ENCODING_TIS_620,
216
+ RBS_ENCODING_UTF8_MAC,
217
+ RBS_ENCODING_UTF8_DOCOMO,
218
+ RBS_ENCODING_UTF8_KDDI,
219
+ RBS_ENCODING_UTF8_SOFTBANK,
220
+ RBS_ENCODING_WINDOWS_1250,
221
+ RBS_ENCODING_WINDOWS_1251,
222
+ RBS_ENCODING_WINDOWS_1252,
223
+ RBS_ENCODING_WINDOWS_1253,
224
+ RBS_ENCODING_WINDOWS_1254,
225
+ RBS_ENCODING_WINDOWS_1255,
226
+ RBS_ENCODING_WINDOWS_1256,
227
+ RBS_ENCODING_WINDOWS_1257,
228
+ RBS_ENCODING_WINDOWS_1258,
229
+ RBS_ENCODING_WINDOWS_874,
230
+ #endif
231
+
232
+ RBS_ENCODING_MAXIMUM
233
+ } rbs_encoding_type_t;
234
+
235
+ /**
236
+ * This is the table of all of the encodings that prism supports.
237
+ */
238
+ extern const rbs_encoding_t rbs_encodings[RBS_ENCODING_MAXIMUM];
239
+
240
+ /**
241
+ * This is the default UTF-8 encoding. We need a reference to it to quickly
242
+ * create parsers.
243
+ */
244
+ #define RBS_ENCODING_UTF_8_ENTRY (&rbs_encodings[RBS_ENCODING_UTF_8])
245
+
246
+ /**
247
+ * This is the US-ASCII encoding. We need a reference to it to be able to
248
+ * compare against it when a string is being created because it could possibly
249
+ * need to fall back to ASCII-8BIT.
250
+ */
251
+ #define RBS_ENCODING_US_ASCII_ENTRY (&rbs_encodings[RBS_ENCODING_US_ASCII])
252
+
253
+ /**
254
+ * This is the ASCII-8BIT encoding. We need a reference to it so that rbs_strpbrk
255
+ * can compare against it because invalid multibyte characters are not a thing
256
+ * in this encoding. It is also needed for handling Regexp encoding flags.
257
+ */
258
+ #define RBS_ENCODING_ASCII_8BIT_ENTRY (&rbs_encodings[RBS_ENCODING_ASCII_8BIT])
259
+
260
+ /**
261
+ * This is the EUC-JP encoding. We need a reference to it to quickly process
262
+ * regular expression modifiers.
263
+ */
264
+ #define RBS_ENCODING_EUC_JP_ENTRY (&rbs_encodings[RBS_ENCODING_EUC_JP])
265
+
266
+ /**
267
+ * This is the Windows-31J encoding. We need a reference to it to quickly
268
+ * process regular expression modifiers.
269
+ */
270
+ #define RBS_ENCODING_WINDOWS_31J_ENTRY (&rbs_encodings[RBS_ENCODING_WINDOWS_31J])
271
+
272
+ /**
273
+ * Parse the given name of an encoding and return a pointer to the corresponding
274
+ * encoding struct if one can be found, otherwise return NULL.
275
+ *
276
+ * @param start A pointer to the first byte of the name.
277
+ * @param end A pointer to the last byte of the name.
278
+ * @returns A pointer to the encoding struct if one is found, otherwise NULL.
279
+ */
280
+ const rbs_encoding_t *rbs_encoding_find(const uint8_t *start, const uint8_t *end);
281
+
282
+ #endif
@@ -0,0 +1,24 @@
1
+ #ifndef RBS_RBS_UNESCAPE_H
2
+ #define RBS_RBS_UNESCAPE_H
3
+
4
+ #include <stddef.h>
5
+ #include "rbs/util/rbs_allocator.h"
6
+ #include "rbs/string.h"
7
+ #include "rbs/util/rbs_encoding.h"
8
+
9
+ /**
10
+ * Receives `rbs_parser_t` and `range`, which represents a string token or symbol token, and returns a string VALUE.
11
+ *
12
+ * Input token | Output string
13
+ * ------------+-------------
14
+ * "foo\\n" | foo\n
15
+ * 'foo' | foo
16
+ * `bar` | bar
17
+ * :"baz\\t" | baz\t
18
+ * :'baz' | baz
19
+ *
20
+ * @returns A new owned string that will be freed when the allocator is freed.
21
+ * */
22
+ rbs_string_t rbs_unquote_string(rbs_allocator_t *, const rbs_string_t input, const rbs_encoding_t *encoding);
23
+
24
+ #endif // RBS_RBS_UNESCAPE_H
data/include/rbs.h ADDED
@@ -0,0 +1,14 @@
1
+ #ifndef RBS_H
2
+ #define RBS_H
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ #include "rbs/parser.h"
9
+
10
+ #ifdef __cplusplus
11
+ }
12
+ #endif
13
+
14
+ #endif
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class AncestorGraph
5
+ InstanceNode = _ = Struct.new(:type_name, keyword_init: true)
6
+ SingletonNode = _ = Struct.new(:type_name, keyword_init: true)
7
+
8
+ attr_reader :env
9
+ attr_reader :ancestor_builder
10
+ attr_reader :parents
11
+ attr_reader :children
12
+
13
+ def initialize(env:, ancestor_builder: DefinitionBuilder::AncestorBuilder.new(env: env))
14
+ @env = env
15
+ @ancestor_builder = ancestor_builder
16
+ build()
17
+ end
18
+
19
+ def build()
20
+ @parents = {}
21
+ @children = {}
22
+
23
+ env.class_decls.each_key do |type_name|
24
+ build_ancestors(InstanceNode.new(type_name: type_name), ancestor_builder.one_instance_ancestors(type_name))
25
+ build_ancestors(SingletonNode.new(type_name: type_name), ancestor_builder.one_singleton_ancestors(type_name))
26
+ end
27
+ env.interface_decls.each_key do |type_name|
28
+ build_ancestors(InstanceNode.new(type_name: type_name), ancestor_builder.one_interface_ancestors(type_name))
29
+ end
30
+ end
31
+
32
+ def build_ancestors(node, ancestors)
33
+ ancestors.each_ancestor do |ancestor|
34
+ case ancestor
35
+ when Definition::Ancestor::Instance
36
+ register(child: node, parent: InstanceNode.new(type_name: ancestor.name))
37
+ when Definition::Ancestor::Singleton
38
+ register(child: node, parent: SingletonNode.new(type_name: ancestor.name))
39
+ end
40
+ end
41
+ end
42
+
43
+ def register(parent:, child:)
44
+ (parents[child] ||= Set[]) << parent
45
+ (children[parent] ||= Set[]) << child
46
+ end
47
+
48
+ def each_parent(node, &block)
49
+ if block
50
+ parents[node]&.each(&block)
51
+ else
52
+ enum_for :each_parent, node
53
+ end
54
+ end
55
+
56
+ def each_child(node, &block)
57
+ if block
58
+ children[node]&.each(&block)
59
+ else
60
+ enum_for :each_child, node
61
+ end
62
+ end
63
+
64
+ def each_ancestor(node, yielded: Set[], &block)
65
+ if block
66
+ each_parent(node) do |parent|
67
+ unless yielded.member?(parent)
68
+ yielded << parent
69
+ yield parent
70
+ each_ancestor(parent, yielded: yielded, &block)
71
+ end
72
+ end
73
+ else
74
+ enum_for :each_ancestor, node
75
+ end
76
+ end
77
+
78
+ def each_descendant(node, yielded: Set[], &block)
79
+ if block
80
+ each_child(node) do |child|
81
+ unless yielded.member?(child)
82
+ yielded << child
83
+ yield child
84
+ each_descendant(child, yielded: yielded, &block)
85
+ end
86
+ end
87
+ else
88
+ enum_for :each_descendant, node
89
+ end
90
+ end
91
+ end
92
+ end