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,451 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ module Annotations
7
+ class Base
8
+ attr_reader :location, :prefix_location
9
+
10
+ def initialize(location, prefix_location)
11
+ @location = location
12
+ @prefix_location = prefix_location
13
+ end
14
+
15
+ def buffer
16
+ location.buffer
17
+ end
18
+ end
19
+
20
+ class NodeTypeAssertion < Base
21
+ attr_reader :type
22
+
23
+ def initialize(location:, prefix_location:, type:)
24
+ super(location, prefix_location)
25
+ @type = type
26
+ end
27
+
28
+ def map_type_name
29
+ self.class.new(
30
+ location:, prefix_location:,
31
+ type: type.map_type_name { yield _1 }
32
+ ) #: self
33
+ end
34
+
35
+ def type_fingerprint
36
+ [
37
+ "annots/node_type_assertion",
38
+ type.to_s
39
+ ]
40
+ end
41
+ end
42
+
43
+ class AliasAnnotation < Base
44
+ attr_reader :keyword_location, :type_name_location, :type_name
45
+
46
+ def initialize(location:, prefix_location:, keyword_location:, type_name:, type_name_location:)
47
+ super(location, prefix_location)
48
+ @keyword_location = keyword_location
49
+ @type_name = type_name
50
+ @type_name_location = type_name_location
51
+ end
52
+
53
+ def map_type_name
54
+ self.class.new(
55
+ location:,
56
+ prefix_location:,
57
+ keyword_location:,
58
+ type_name: type_name ? yield(type_name) : nil,
59
+ type_name_location:
60
+ ) #: self
61
+ end
62
+ end
63
+
64
+ class ClassAliasAnnotation < AliasAnnotation
65
+ def type_fingerprint
66
+ [
67
+ "annots/class-alias",
68
+ type_name&.to_s
69
+ ]
70
+ end
71
+ end
72
+
73
+ class ModuleAliasAnnotation < AliasAnnotation
74
+ def type_fingerprint
75
+ [
76
+ "annots/module-alias",
77
+ type_name&.to_s
78
+ ]
79
+ end
80
+ end
81
+
82
+ class ColonMethodTypeAnnotation < Base
83
+ attr_reader :annotations, :method_type
84
+
85
+ def initialize(location:, prefix_location:, annotations:, method_type:)
86
+ super(location, prefix_location)
87
+ @annotations = annotations
88
+ @method_type = method_type
89
+ end
90
+
91
+ def map_type_name
92
+ self.class.new(
93
+ location:,
94
+ prefix_location:,
95
+ annotations: annotations,
96
+ method_type: method_type.map_type {|type| type.map_type_name { yield _1 }}
97
+ ) #: self
98
+ end
99
+
100
+ def type_fingerprint
101
+ [
102
+ "annots/colon_method_type",
103
+ annotations.map(&:to_s),
104
+ method_type.to_s
105
+ ]
106
+ end
107
+ end
108
+
109
+ class MethodTypesAnnotation < Base
110
+ Overload = AST::Members::MethodDefinition::Overload
111
+
112
+ attr_reader :overloads, :vertical_bar_locations, :dot3_location
113
+
114
+ def initialize(location:, prefix_location:, overloads:, vertical_bar_locations:, dot3_location:)
115
+ super(location, prefix_location)
116
+ @overloads = overloads
117
+ @vertical_bar_locations = vertical_bar_locations
118
+ @dot3_location = dot3_location
119
+ end
120
+
121
+ def map_type_name(&block)
122
+ ovs = overloads.map do |overload|
123
+ Overload.new(
124
+ method_type: overload.method_type.map_type {|type| type.map_type_name { yield _1 } },
125
+ annotations: overload.annotations
126
+ )
127
+ end
128
+
129
+ self.class.new(location:, prefix_location:, overloads: ovs, vertical_bar_locations:, dot3_location:) #: self
130
+ end
131
+
132
+ def type_fingerprint
133
+ [
134
+ "annots/method_types",
135
+ overloads.map { |o| [o.annotations.map(&:to_s), o.method_type.to_s] },
136
+ overloading: dot3_location ? true : false
137
+ ]
138
+ end
139
+ end
140
+
141
+ class SkipAnnotation < Base
142
+ attr_reader :skip_location, :comment_location
143
+
144
+ def initialize(location:, prefix_location:, skip_location:, comment_location:)
145
+ super(location, prefix_location)
146
+ @skip_location = skip_location
147
+ @comment_location = comment_location
148
+ end
149
+
150
+ def type_fingerprint
151
+ "annots/skip"
152
+ end
153
+ end
154
+
155
+ class ReturnTypeAnnotation < Base
156
+ attr_reader :return_location
157
+
158
+ attr_reader :colon_location
159
+
160
+ attr_reader :return_type
161
+
162
+ attr_reader :comment_location
163
+
164
+ def initialize(location:, prefix_location:, return_location:, colon_location:, return_type:, comment_location:)
165
+ super(location, prefix_location)
166
+ @return_location = return_location
167
+ @colon_location = colon_location
168
+ @return_type = return_type
169
+ @comment_location = comment_location
170
+ end
171
+
172
+ def map_type_name(&block)
173
+ self.class.new(
174
+ location:,
175
+ prefix_location:,
176
+ return_location: return_location,
177
+ colon_location: colon_location,
178
+ return_type: return_type.map_type_name { yield _1 },
179
+ comment_location: comment_location
180
+ ) #: self
181
+ end
182
+
183
+ def type_fingerprint
184
+ [
185
+ "annots/return_type",
186
+ return_type.to_s,
187
+ comment_location&.source
188
+ ]
189
+ end
190
+ end
191
+
192
+ class TypeApplicationAnnotation < Base
193
+ attr_reader :type_args, :close_bracket_location, :comma_locations
194
+
195
+ def initialize(location:, prefix_location:, type_args:, close_bracket_location:, comma_locations:)
196
+ super(location, prefix_location)
197
+ @type_args = type_args
198
+ @close_bracket_location = close_bracket_location
199
+ @comma_locations = comma_locations
200
+ end
201
+
202
+ def map_type_name(&block)
203
+ mapped_type_args = type_args.map { |type| type.map_type_name { yield _1 } }
204
+
205
+ self.class.new(
206
+ location:,
207
+ prefix_location:,
208
+ type_args: mapped_type_args,
209
+ close_bracket_location:,
210
+ comma_locations:
211
+ ) #: self
212
+ end
213
+
214
+ def type_fingerprint
215
+ [
216
+ "annots/type_application",
217
+ type_args.map(&:to_s)
218
+ ]
219
+ end
220
+ end
221
+
222
+ class InstanceVariableAnnotation < Base
223
+ attr_reader :ivar_name, :ivar_name_location, :colon_location, :type, :comment_location
224
+
225
+ def initialize(location:, prefix_location:, ivar_name:, ivar_name_location:, colon_location:, type:, comment_location:)
226
+ super(location, prefix_location)
227
+ @ivar_name = ivar_name
228
+ @ivar_name_location = ivar_name_location
229
+ @colon_location = colon_location
230
+ @type = type
231
+ @comment_location = comment_location
232
+ end
233
+
234
+ def map_type_name(&block)
235
+ self.class.new(
236
+ location:,
237
+ prefix_location:,
238
+ ivar_name:,
239
+ ivar_name_location:,
240
+ colon_location:,
241
+ type: type.map_type_name { yield _1 },
242
+ comment_location:
243
+ ) #: self
244
+ end
245
+
246
+ def type_fingerprint
247
+ [
248
+ "annots/instance_variable",
249
+ ivar_name.to_s,
250
+ type.to_s,
251
+ comment_location&.source
252
+ ]
253
+ end
254
+ end
255
+
256
+ class ParamTypeAnnotation < Base
257
+ attr_reader :name_location, :colon_location, :param_type, :comment_location
258
+
259
+ def initialize(location:, prefix_location:, name_location:, colon_location:, param_type:, comment_location:)
260
+ super(location, prefix_location)
261
+ @name_location = name_location
262
+ @colon_location = colon_location
263
+ @param_type = param_type
264
+ @comment_location = comment_location
265
+ end
266
+
267
+ def map_type_name(&block)
268
+ self.class.new(
269
+ location:,
270
+ prefix_location:,
271
+ name_location: name_location,
272
+ colon_location: colon_location,
273
+ param_type: param_type.map_type_name { yield _1 },
274
+ comment_location: comment_location
275
+ ) #: self
276
+ end
277
+
278
+ def type_fingerprint
279
+ [
280
+ "annots/param_type",
281
+ name_location.source,
282
+ param_type.to_s,
283
+ comment_location&.source
284
+ ]
285
+ end
286
+ end
287
+
288
+ class SplatParamTypeAnnotation < Base
289
+ attr_reader :star_location, :name_location, :colon_location, :param_type, :comment_location
290
+
291
+ def initialize(location:, prefix_location:, star_location:, name_location:, colon_location:, param_type:, comment_location:)
292
+ super(location, prefix_location)
293
+ @star_location = star_location
294
+ @name_location = name_location
295
+ @colon_location = colon_location
296
+ @param_type = param_type
297
+ @comment_location = comment_location
298
+ end
299
+
300
+ def map_type_name(&block)
301
+ self.class.new(
302
+ location:,
303
+ prefix_location:,
304
+ star_location: star_location,
305
+ name_location: name_location,
306
+ colon_location: colon_location,
307
+ param_type: param_type.map_type_name { yield _1 },
308
+ comment_location: comment_location
309
+ ) #: self
310
+ end
311
+
312
+ def type_fingerprint
313
+ [
314
+ "annots/splat_param_type",
315
+ name_location&.source,
316
+ param_type.to_s,
317
+ comment_location&.source
318
+ ]
319
+ end
320
+ end
321
+
322
+ class DoubleSplatParamTypeAnnotation < Base
323
+ attr_reader :star2_location, :name_location, :colon_location, :param_type, :comment_location
324
+
325
+ def initialize(location:, prefix_location:, star2_location:, name_location:, colon_location:, param_type:, comment_location:)
326
+ super(location, prefix_location)
327
+ @star2_location = star2_location
328
+ @name_location = name_location
329
+ @colon_location = colon_location
330
+ @param_type = param_type
331
+ @comment_location = comment_location
332
+ end
333
+
334
+ def map_type_name(&block)
335
+ self.class.new(
336
+ location:,
337
+ prefix_location:,
338
+ star2_location: star2_location,
339
+ name_location: name_location,
340
+ colon_location: colon_location,
341
+ param_type: param_type.map_type_name { yield _1 },
342
+ comment_location: comment_location
343
+ ) #: self
344
+ end
345
+
346
+ def type_fingerprint
347
+ [
348
+ "annots/double_splat_param_type",
349
+ name_location&.source,
350
+ param_type.to_s,
351
+ comment_location&.source
352
+ ]
353
+ end
354
+ end
355
+
356
+ class ModuleSelfAnnotation < Base
357
+ attr_reader :keyword_location, :colon_location, :name, :args, :open_bracket_location, :close_bracket_location, :args_comma_locations, :comment_location
358
+
359
+ def initialize(location:, prefix_location:, keyword_location:, colon_location:, name:, args:, open_bracket_location:, close_bracket_location:, args_comma_locations:, comment_location:)
360
+ super(location, prefix_location)
361
+ @keyword_location = keyword_location
362
+ @colon_location = colon_location
363
+ @name = name
364
+ @args = args
365
+ @open_bracket_location = open_bracket_location
366
+ @close_bracket_location = close_bracket_location
367
+ @args_comma_locations = args_comma_locations
368
+ @comment_location = comment_location
369
+ end
370
+
371
+ def map_type_name
372
+ mapped_args = args.map { |type| type.map_type_name { yield _1 } }
373
+
374
+ self.class.new(
375
+ location:,
376
+ prefix_location:,
377
+ keyword_location:,
378
+ colon_location:,
379
+ name: yield(name),
380
+ args: mapped_args,
381
+ open_bracket_location:,
382
+ close_bracket_location:,
383
+ args_comma_locations:,
384
+ comment_location:
385
+ ) #: self
386
+ end
387
+
388
+ def type_fingerprint
389
+ [
390
+ "annots/module_self",
391
+ name.to_s,
392
+ args.map(&:to_s),
393
+ comment_location&.source
394
+ ]
395
+ end
396
+ end
397
+
398
+ class BlockParamTypeAnnotation < Base
399
+ attr_reader :ampersand_location, :name_location, :colon_location, :question_location, :type_location, :type, :comment_location
400
+
401
+ def initialize(location:, prefix_location:, ampersand_location:, name_location:, colon_location:, question_location:, type_location:, type:, comment_location:)
402
+ super(location, prefix_location)
403
+ @ampersand_location = ampersand_location
404
+ @name_location = name_location
405
+ @colon_location = colon_location
406
+ @question_location = question_location
407
+ @type_location = type_location
408
+ @type = type
409
+ @comment_location = comment_location
410
+ end
411
+
412
+ def map_type_name(&block)
413
+ self.class.new(
414
+ location:,
415
+ prefix_location:,
416
+ ampersand_location: ampersand_location,
417
+ name_location: name_location,
418
+ colon_location: colon_location,
419
+ question_location: question_location,
420
+ type_location: type_location,
421
+ type: type.map_type_name { yield _1 },
422
+ comment_location: comment_location
423
+ ) #: self
424
+ end
425
+
426
+ def name
427
+ name_location&.source&.to_sym
428
+ end
429
+
430
+ def optional?
431
+ question_location ? true : false
432
+ end
433
+
434
+ def required?
435
+ !optional?
436
+ end
437
+
438
+ def type_fingerprint
439
+ [
440
+ "annots/block_param_type",
441
+ name_location&.source,
442
+ type.to_s,
443
+ optional? ? "optional" : "required",
444
+ comment_location&.source
445
+ ]
446
+ end
447
+ end
448
+ end
449
+ end
450
+ end
451
+ end
@@ -0,0 +1,247 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Ruby
6
+ class CommentBlock
7
+ attr_reader :name, :offsets, :comment_buffer
8
+
9
+ def initialize(source_buffer, comments)
10
+ @name = source_buffer.name
11
+
12
+ @offsets = []
13
+
14
+ # Assume the comment starts with a prefix whitespace
15
+ prefix_str = "# "
16
+
17
+ ranges = [] #: Array[Range[Integer]]
18
+ byte_ranges = [] #: Array[Range[Integer]]
19
+
20
+ comments.each do |comment|
21
+ tuple = [comment, 2] #: [Prism::Comment, Integer]
22
+
23
+ unless comment.location.slice.start_with?(prefix_str)
24
+ tuple[1] = 1
25
+ end
26
+
27
+ offsets << tuple
28
+
29
+ start_char = source_buffer.character_offset(comment.location.start_offset) + tuple[1]
30
+ end_char = source_buffer.character_offset(comment.location.end_offset)
31
+ ranges << (start_char ... end_char)
32
+ byte_ranges << ((comment.location.start_offset + tuple[1]) ... comment.location.end_offset)
33
+ end
34
+
35
+ @comment_buffer = source_buffer.sub_buffer(lines: ranges, byte_lines_hint: byte_ranges)
36
+ end
37
+
38
+ def leading?
39
+ comment = offsets[0][0] or raise
40
+ comment.location.start_line_slice.index(/\S/) ? false : true
41
+ end
42
+
43
+ def trailing?
44
+ comment = offsets[0][0] or raise
45
+ comment.location.start_line_slice.index(/\S/) ? true : false
46
+ end
47
+
48
+ def start_line
49
+ comments[0].location.start_line
50
+ end
51
+
52
+ def end_line
53
+ comments[-1].location.end_line
54
+ end
55
+
56
+ def line_starts
57
+ offsets.map do |comment, prefix_size|
58
+ comment_buffer.character_offset(comment.location.start_offset) + prefix_size
59
+ end
60
+ end
61
+
62
+ def self.build(buffer, comments)
63
+ blocks = [] #: Array[CommentBlock]
64
+
65
+ comments = comments.filter {|comment| comment.is_a?(Prism::InlineComment) }
66
+
67
+ until comments.empty?
68
+ block_comments = [] #: Array[Prism::Comment]
69
+
70
+ until comments.empty?
71
+ comment = comments.first or raise
72
+ last_comment = block_comments.last
73
+
74
+ if last_comment
75
+ if last_comment.location.end_line + 1 == comment.location.start_line
76
+ if last_comment.location.start_column == comment.location.start_column
77
+ unless comment.location.start_line_slice.index(/\S/)
78
+ block_comments << comments.shift
79
+ next
80
+ end
81
+ end
82
+ end
83
+
84
+ break
85
+ else
86
+ block_comments << comments.shift
87
+ end
88
+ end
89
+
90
+ unless block_comments.empty?
91
+ blocks << CommentBlock.new(buffer, block_comments.dup)
92
+ end
93
+ end
94
+
95
+ blocks
96
+ end
97
+
98
+ AnnotationSyntaxError = _ = Struct.new(:location, :error)
99
+
100
+ def each_paragraph(variables, &block)
101
+ if block
102
+ if leading_annotation?(0)
103
+ yield_annotation(0, 0, 0, variables, &block)
104
+ else
105
+ yield_paragraph(0, 0, variables, &block)
106
+ end
107
+ else
108
+ enum_for :each_paragraph, variables
109
+ end
110
+ end
111
+
112
+ def yield_paragraph(start_line, current_line, variables, &block)
113
+ # We already know at start_line..current_line are paragraph.
114
+
115
+ while true
116
+ next_line = current_line + 1
117
+
118
+ if next_line >= comment_buffer.line_count
119
+ yield line_location(start_line, current_line)
120
+ return
121
+ end
122
+
123
+ if leading_annotation?(next_line)
124
+ yield line_location(start_line, current_line)
125
+ return yield_annotation(next_line, next_line, next_line, variables, &block)
126
+ else
127
+ current_line = next_line
128
+ end
129
+ end
130
+ end
131
+
132
+ def yield_annotation(start_line, end_line, current_line, variables, &block)
133
+ # We already know at start_line..end_line are annotation.
134
+ while true
135
+ next_line = current_line + 1
136
+
137
+ if next_line >= comment_buffer.line_count
138
+ annotation = parse_annotation_lines(start_line, end_line, variables)
139
+ yield annotation
140
+
141
+ if end_line > current_line
142
+ yield_paragraph(end_line + 1, end_line + 1, variables, &block)
143
+ end
144
+
145
+ return
146
+ end
147
+
148
+ line_text = text(next_line)
149
+ if leading_spaces = line_text.index(/\S/)
150
+ if leading_spaces == 0
151
+ # End of annotation
152
+ yield parse_annotation_lines(start_line, end_line, variables)
153
+
154
+ if leading_annotation?(end_line + 1)
155
+ yield_annotation(end_line + 1, end_line + 1, end_line + 1, variables, &block)
156
+ else
157
+ yield_paragraph(end_line + 1, end_line + 1, variables, &block)
158
+ end
159
+
160
+ return
161
+ else
162
+ current_line = next_line
163
+ end_line = next_line
164
+ end
165
+ else
166
+ current_line = next_line
167
+ end
168
+ end
169
+ end
170
+
171
+ def text(comment_index)
172
+ range = comment_buffer.ranges[comment_index]
173
+ comment_buffer.content[range] or raise
174
+ end
175
+
176
+ def line_location(start_line, end_line)
177
+ start_offset = comment_buffer.ranges[start_line].begin
178
+ end_offset = comment_buffer.ranges[end_line].end
179
+ Location.new(comment_buffer, start_offset, end_offset)
180
+ end
181
+
182
+ def location()
183
+ first_comment = comments[0] or raise
184
+ last_comment = comments[-1] or raise
185
+
186
+ comment_buffer.rbs_location(first_comment.location.join last_comment.location)
187
+ end
188
+
189
+ def parse_annotation_lines(start_line, end_line, variables)
190
+ start_pos = comment_buffer.ranges[start_line].begin
191
+ end_pos = comment_buffer.ranges[end_line].end
192
+ begin
193
+ Parser.parse_inline_leading_annotation(comment_buffer, start_pos...end_pos, variables: variables)
194
+ rescue ParsingError => error
195
+ AnnotationSyntaxError.new(line_location(start_line, end_line), error)
196
+ end
197
+ end
198
+
199
+ def trailing_annotation(variables)
200
+ if trailing?
201
+ comment = comments[0] or raise
202
+ if comment.location.slice.start_with?(/#[:\[]/)
203
+ begin
204
+ Parser.parse_inline_trailing_annotation(comment_buffer, 0...comment_buffer.last_position, variables: variables)
205
+ rescue ParsingError => error
206
+ location = line_location(0, offsets.size - 1)
207
+ AnnotationSyntaxError.new(location, error)
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ def comments
214
+ offsets.map { _1[0]}
215
+ end
216
+
217
+ def leading_annotation?(index)
218
+ if index < comment_buffer.line_count
219
+ text(index).start_with?(/@rbs\b/) and return true
220
+
221
+ comment = offsets[index][0]
222
+ comment.location.slice.start_with?(/\#:/) and return true
223
+ end
224
+
225
+ false
226
+ end
227
+
228
+ def as_comment
229
+ lines = [] #: Array[String]
230
+
231
+ each_paragraph([]) do |paragraph|
232
+ case paragraph
233
+ when Location
234
+ lines << paragraph.local_source
235
+ end
236
+ end
237
+
238
+ string = lines.join("\n")
239
+
240
+ unless string.strip.empty?
241
+ AST::Comment.new(string: string, location: location)
242
+ end
243
+ end
244
+ end
245
+ end
246
+ end
247
+ end