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,199 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Annotate
5
+ class Annotations
6
+ class Skip
7
+ attr_reader :annotation, :skip_children
8
+
9
+ def initialize(annotation:, skip_children:)
10
+ @annotation = annotation
11
+ @skip_children = skip_children
12
+ end
13
+
14
+ def hash
15
+ self.class.hash ^ annotation.hash ^ skip_children.hash
16
+ end
17
+
18
+ def ==(other)
19
+ other.is_a?(Skip) &&
20
+ other.skip_children == skip_children &&
21
+ other.annotation == annotation
22
+ end
23
+
24
+ alias eql? ==
25
+ end
26
+
27
+ class Source
28
+ attr_reader :annotation
29
+ attr_reader :include_source, :skip_source
30
+
31
+ def initialize(annotation:, include: nil, skip: nil)
32
+ @annotation = annotation
33
+ @include_source = include
34
+ @skip_source = skip
35
+ end
36
+
37
+ def hash
38
+ self.class.hash ^ annotation.hash ^ include_source.hash ^ skip_source.hash
39
+ end
40
+
41
+ def ==(other)
42
+ other.is_a?(Source) &&
43
+ other.annotation == annotation &&
44
+ other.include_source == include_source &&
45
+ other.skip_source == skip_source
46
+ end
47
+
48
+ alias eql? ==
49
+ end
50
+
51
+ class Copy
52
+ attr_reader :annotation, :source
53
+
54
+ def initialize(annotation:, source:)
55
+ @annotation = annotation
56
+ @source = source
57
+ end
58
+
59
+ def type_name
60
+ name, _ = partition
61
+ name
62
+ end
63
+
64
+ def method_name
65
+ _, m = partition
66
+ if m
67
+ m[1]
68
+ end
69
+ end
70
+
71
+ def singleton?
72
+ _, m = partition
73
+ if m
74
+ m[0]
75
+ else
76
+ false
77
+ end
78
+ end
79
+
80
+ def hash
81
+ self.class.hash ^ annotation.hash ^ source.hash
82
+ end
83
+
84
+ def ==(other)
85
+ other.is_a?(Copy) &&
86
+ other.annotation == annotation &&
87
+ other.source == source
88
+ end
89
+
90
+ alias eql? ==
91
+
92
+ def partition
93
+ case
94
+ when match = source.match(/(?<constant_name>[^#]+)#(?<method_name>.+)/)
95
+ [
96
+ TypeName.parse(match[:constant_name] || raise),
97
+ [
98
+ false,
99
+ (match[:method_name] or raise).to_sym
100
+ ]
101
+ ]
102
+ when match = source.match(/(?<constant_name>[^#]+)\.(?<method_name>.+)/)
103
+ [
104
+ TypeName.parse(match[:constant_name] || raise),
105
+ [
106
+ true,
107
+ (match[:method_name] or raise).to_sym
108
+ ]
109
+ ]
110
+ else
111
+ [
112
+ TypeName.parse(source),
113
+ nil
114
+ ]
115
+ end
116
+ end
117
+ end
118
+
119
+ def self.parse(annotation)
120
+ string = annotation.string
121
+
122
+ case
123
+ when match = string.match(/\Aannotate:rdoc:skip(:all)?\Z/)
124
+ Skip.new(
125
+ annotation: annotation,
126
+ skip_children: string.end_with?(":all")
127
+ )
128
+ when match = string.match(/\Aannotate:rdoc:source:from=(?<path>.+)\Z/)
129
+ Source.new(
130
+ annotation: annotation,
131
+ include: (match[:path] or raise).strip
132
+ )
133
+ when match = string.match(/\Aannotate:rdoc:source:skip=(?<path>.+)\Z/)
134
+ Source.new(
135
+ annotation: annotation,
136
+ skip: (match[:path] or raise).strip
137
+ )
138
+ when match = string.match(/\Aannotate:rdoc:copy:(?<name>.+)\Z/)
139
+ Copy.new(
140
+ annotation: annotation,
141
+ source: (match[:name] or raise).strip
142
+ )
143
+ end
144
+ end
145
+
146
+ attr_reader :items
147
+
148
+ def initialize(items)
149
+ @items = items
150
+ end
151
+
152
+ def skip?
153
+ items.any? {|a| a.is_a?(Skip) }
154
+ end
155
+
156
+ def skip_all?
157
+ items.any? {|a| a.is_a?(Skip) && a.skip_children }
158
+ end
159
+
160
+ def copy_annotation
161
+ _ = items.find {|a| a.is_a?(Copy) }
162
+ end
163
+
164
+ def test_path(path)
165
+ # @type var source_items: Array[Source]
166
+ source_items = _ = items.select {|item| item.is_a?(Source) }
167
+
168
+ return true if source_items.empty?
169
+
170
+ result = source_items[0].include_source == nil
171
+
172
+ items.each do |a|
173
+ if a.is_a?(Source)
174
+ if pat = a.include_source
175
+ if test_path_string(pat, path)
176
+ result = true
177
+ end
178
+ end
179
+
180
+ if pat = a.skip_source
181
+ if test_path_string(pat, path)
182
+ result = false
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ result
189
+ end
190
+
191
+ def test_path_string(pattern, string)
192
+ return true if pattern == string
193
+ return true if string.start_with?(pattern + File::SEPARATOR)
194
+
195
+ false
196
+ end
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Annotate
5
+ class Formatter
6
+ attr_reader :buffer
7
+
8
+ def initialize()
9
+ @buffer = +""
10
+ @pending_separator = nil
11
+ end
12
+
13
+ def <<(s)
14
+ if s
15
+ if s.is_a?(RDoc::Markup::Document)
16
+ s = self.class.translate(s) or raise
17
+ end
18
+
19
+ s = s.rstrip
20
+
21
+ unless s.empty?
22
+ if ss = @pending_separator
23
+ buffer << ss
24
+ buffer << "\n"
25
+ @pending_separator = nil
26
+ end
27
+
28
+ buffer << s
29
+ buffer << "\n"
30
+ end
31
+ end
32
+
33
+ self
34
+ end
35
+
36
+ def margin(separator: "")
37
+ unless buffer.empty?
38
+ @pending_separator = separator
39
+ end
40
+
41
+ self
42
+ end
43
+
44
+ def empty?
45
+ buffer.empty?
46
+ end
47
+
48
+ def format(newline_at_end:)
49
+ unless buffer.empty?
50
+ if newline_at_end
51
+ buffer.strip + "\n\n"
52
+ else
53
+ buffer.strip + "\n"
54
+ end
55
+ else
56
+ buffer
57
+ end
58
+ end
59
+
60
+ def self.each_part(doc, &block)
61
+ if block
62
+ if doc.file
63
+ yield doc
64
+ else
65
+ doc.each do |d|
66
+ each_part(d, &block)
67
+ end
68
+ end
69
+ else
70
+ enum_for :each_part, doc
71
+ end
72
+ end
73
+
74
+ def self.translate(doc)
75
+ if doc.file
76
+ formatter = RDoc::Markup::ToMarkdown.new
77
+ doc.accept(formatter).strip.lines.map(&:rstrip).join("\n")
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,398 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Annotate
5
+ class RDocAnnotator
6
+ attr_reader :source
7
+ attr_accessor :include_arg_lists, :include_filename
8
+
9
+ def initialize(source:)
10
+ @source = source
11
+
12
+ @include_arg_lists = true
13
+ @include_filename = true
14
+ end
15
+
16
+ def annotate_file(path, preserve: true)
17
+ buffer, _, decls = Parser.parse_signature(path.read())
18
+
19
+ rewriter = Rewriter.new(buffer)
20
+ annotate_decls(decls, rewriter)
21
+
22
+ path.write(rewriter.string)
23
+ end
24
+
25
+ def annotate_decls(decls, rewriter, outer: [])
26
+ decls.each do |decl|
27
+ case decl
28
+ when AST::Declarations::Class, AST::Declarations::Module
29
+ annotate_class(decl, rewriter, outer: outer)
30
+ when AST::Declarations::Constant
31
+ annotate_constant(decl, rewriter, outer: outer)
32
+ end
33
+ end
34
+ end
35
+
36
+ def each_part(subjects, tester:)
37
+ if block_given?
38
+ subjects.each do |subject, docs|
39
+ comment = subject.comment
40
+ raise if comment.is_a?(String)
41
+ Formatter.each_part(comment.parse) do |doc|
42
+ if tester.test_path(doc.file || raise)
43
+ yield [doc, subject]
44
+ end
45
+ end
46
+ end
47
+ else
48
+ enum_for :each_part, tester: tester
49
+ end
50
+ end
51
+
52
+ def resolve_doc_source(copy, tester:)
53
+ case
54
+ when copy && (mn = copy.method_name) && copy.singleton?
55
+ doc_for_method(copy.type_name, singleton_method: mn, tester: tester)
56
+ when copy && (mn = copy.method_name) && !copy.singleton?
57
+ doc_for_method(copy.type_name, instance_method: mn, tester: tester)
58
+ when copy
59
+ doc_for_class(copy.type_name, tester: tester) || doc_for_constant(copy.type_name, tester: tester)
60
+ else
61
+ yield
62
+ end
63
+ end
64
+
65
+ def doc_for_class(name, tester:)
66
+ if clss = source.find_class(name)
67
+ formatter = Formatter.new()
68
+
69
+ each_part(clss, tester: tester) do |doc, _|
70
+ text = Formatter.translate(doc) or next
71
+
72
+ unless text.empty?
73
+ if include_filename
74
+ formatter << "<!-- rdoc-file=#{doc.file} -->"
75
+ end
76
+ formatter << text
77
+
78
+ formatter.margin
79
+ end
80
+ end
81
+
82
+ formatter.format(newline_at_end: true)
83
+ end
84
+ end
85
+
86
+ def doc_for_constant(name, tester:)
87
+ if constants = source.find_const(name)
88
+ formatter = Formatter.new
89
+
90
+ each_part(constants, tester: tester) do |doc, _|
91
+ text = Formatter.translate(doc) or next
92
+
93
+ unless text.empty?
94
+ if include_filename
95
+ formatter << "<!-- rdoc-file=#{doc.file} -->"
96
+ end
97
+
98
+ formatter << text
99
+
100
+ formatter.margin
101
+ end
102
+ end
103
+
104
+ formatter.format(newline_at_end: true)
105
+ end
106
+ end
107
+
108
+ def doc_for_method0(typename, instance_method: nil, singleton_method: nil, tester:)
109
+ ms = source.find_method(typename, instance_method: instance_method) if instance_method
110
+ ms = source.find_method(typename, singleton_method: singleton_method) if singleton_method
111
+
112
+ if ms
113
+ formatter = Formatter.new
114
+
115
+ each_part(ms, tester: tester) do |doc, method|
116
+ text = Formatter.translate(doc) or next
117
+ # @type var as: String?
118
+ as = (_ = method).arglists
119
+
120
+ if include_arg_lists && as
121
+ formatter << "<!--"
122
+ formatter << " rdoc-file=#{doc.file}" if include_filename
123
+ as.chomp.split("\n").each do |line|
124
+ formatter << " - #{line.strip}"
125
+ end
126
+ formatter << "-->"
127
+ else
128
+ if include_filename
129
+ formatter << "<!-- rdoc-file=#{doc.file} -->"
130
+ end
131
+ end
132
+
133
+ unless text.empty?
134
+ formatter << text
135
+ end
136
+
137
+ formatter.margin(separator: "----")
138
+ end
139
+
140
+ formatter.format(newline_at_end: false)
141
+ end
142
+ end
143
+
144
+ def doc_for_method(typename, instance_method: nil, singleton_method: nil, tester:)
145
+ formatter = Formatter.new()
146
+
147
+ case
148
+ when method = instance_method
149
+ doc = doc_for_alias(typename, name: method, singleton: false, tester: tester)
150
+ doc = doc_for_method0(typename, instance_method: method, tester: tester) if !doc || doc.empty?
151
+ if !doc || doc.empty?
152
+ if (s = method.to_s) =~ /\A[a-zA-Z_]/
153
+ # may be attribute
154
+ doc =
155
+ if s.end_with?("=")
156
+ doc_for_attribute(typename, s.delete_suffix("=").to_sym, require: "W", singleton: false, tester: tester)
157
+ else
158
+ doc_for_attribute(typename, s.to_sym, require: "R", singleton: false, tester: tester)
159
+ end
160
+ end
161
+ end
162
+ when method = singleton_method
163
+ doc = doc_for_alias(typename, name: method, singleton: true, tester: tester)
164
+ doc = doc_for_method0(typename, singleton_method: method, tester: tester) if !doc || doc.empty?
165
+ if !doc || doc.empty?
166
+ if (s = method.to_s) =~ /\A[a-zA-Z_]/
167
+ # may be attribute
168
+ doc =
169
+ if s.end_with?("=")
170
+ doc_for_attribute(typename, s.delete_suffix("=").to_sym, require: "W", singleton: true, tester: tester)
171
+ else
172
+ doc_for_attribute(typename, s.to_sym, require: "R", singleton: true, tester: tester)
173
+ end
174
+ end
175
+ end
176
+ else
177
+ raise
178
+ end
179
+
180
+ if doc
181
+ formatter << doc
182
+ formatter.format(newline_at_end: true)
183
+ end
184
+ end
185
+
186
+ def doc_for_alias(typename, name:, singleton:, tester:)
187
+ if as =
188
+ if singleton
189
+ source.find_method(typename, singleton_method: name)
190
+ else
191
+ source.find_method(typename, instance_method: name)
192
+ end
193
+
194
+ formatter = Formatter.new
195
+
196
+ each_part(as, tester: tester) do |doc, obj|
197
+ # @type var method: RDoc::AnyMethod
198
+ method = _ = obj
199
+
200
+ if method.is_alias_for
201
+ text = Formatter.translate(doc) or next
202
+
203
+ unless text.empty?
204
+ formatter << "<!-- rdoc-file=#{doc.file} -->" if include_filename
205
+ formatter << text
206
+ end
207
+ end
208
+ end
209
+
210
+ formatter.format(newline_at_end: true)
211
+ end
212
+ end
213
+
214
+ def doc_for_attribute(typename, attr_name, require: nil, singleton:, tester:)
215
+ if as = source.find_attribute(typename, attr_name, singleton: singleton)
216
+ as = as.select do |attr|
217
+ case require
218
+ when "R"
219
+ attr.rw == "R" || attr.rw == "RW"
220
+ when "W"
221
+ attr.rw == "W" || attr.rw == "RW"
222
+ else
223
+ true
224
+ end
225
+ end
226
+
227
+ return if as.empty?
228
+
229
+ formatter = Formatter.new()
230
+
231
+ each_part(as, tester: tester) do |doc, obj|
232
+ if text = Formatter.translate(doc)
233
+ unless text.empty?
234
+ formatter << "<!-- rdoc-file=#{doc.file} -->" if include_filename
235
+ formatter << text
236
+ end
237
+ end
238
+ end
239
+
240
+ formatter.format(newline_at_end: true)
241
+ end
242
+ end
243
+
244
+ def annotate_class(decl, rewriter, outer:)
245
+ annots = annotations(decl)
246
+
247
+ full_name = resolve_name(decl.name, outer: outer)
248
+ unless annots.skip?
249
+ text = resolve_doc_source(annots.copy_annotation, tester: annots) { doc_for_class(full_name, tester: annots) }
250
+ end
251
+
252
+ replace_comment(decl, text, rewriter)
253
+
254
+ unless annots.skip_all?
255
+ outer_ = outer + [decl.name.to_namespace]
256
+
257
+ decl.each_member do |member|
258
+ case member
259
+ when AST::Members::MethodDefinition
260
+ annotate_method(full_name, member, rewriter)
261
+ when AST::Members::Alias
262
+ annotate_alias(full_name, member, rewriter)
263
+ when AST::Members::AttrReader, AST::Members::AttrAccessor, AST::Members::AttrWriter
264
+ annotate_attribute(full_name, member, rewriter)
265
+ end
266
+ end
267
+
268
+ annotate_decls(decl.each_decl.to_a, rewriter, outer: outer_)
269
+ end
270
+ end
271
+
272
+ def annotate_constant(const, rewriter, outer:)
273
+ annots = Annotations.new([])
274
+
275
+ full_name = resolve_name(const.name, outer: outer)
276
+ text = doc_for_constant(full_name, tester: annots)
277
+
278
+ replace_comment(const, text, rewriter)
279
+ end
280
+
281
+ def annotate_alias(typename, als, rewriter)
282
+ annots = annotations(als)
283
+
284
+ unless annots.skip?
285
+ text = resolve_doc_source(annots.copy_annotation, tester: annots) do
286
+ case als.kind
287
+ when :instance
288
+ doc_for_method(typename, instance_method: als.new_name, tester: annots)
289
+ when :singleton
290
+ doc_for_method(typename, singleton_method: als.new_name, tester: annots)
291
+ end
292
+ end
293
+ end
294
+
295
+ replace_comment(als, text, rewriter)
296
+ end
297
+
298
+ def join_docs(docs, separator: "----")
299
+ formatter = Formatter.new()
300
+
301
+ docs.each do |doc|
302
+ formatter << doc
303
+ formatter.margin(separator: separator)
304
+ end
305
+
306
+ unless formatter.empty?
307
+ formatter.format(newline_at_end: true)
308
+ end
309
+ end
310
+
311
+ def annotate_method(typename, method, rewriter)
312
+ annots = annotations(method)
313
+
314
+ unless annots.skip?
315
+ text = resolve_doc_source(annots.copy_annotation, tester: annots) {
316
+ case method.kind
317
+ when :singleton
318
+ doc_for_method(typename, singleton_method: method.name, tester: annots)
319
+ when :instance
320
+ if method.name == :initialize
321
+ doc_for_method(typename, instance_method: :initialize, tester: annots) ||
322
+ doc_for_method(typename, singleton_method: :new, tester: annots)
323
+ else
324
+ doc_for_method(typename, instance_method: method.name, tester: annots)
325
+ end
326
+ when :singleton_instance
327
+ join_docs(
328
+ [
329
+ doc_for_method(typename, singleton_method: method.name, tester: annots),
330
+ doc_for_method(typename, instance_method: method.name, tester: annots)
331
+ ].uniq
332
+ )
333
+ end
334
+ }
335
+ end
336
+
337
+ replace_comment(method, text, rewriter)
338
+ end
339
+
340
+ def annotate_attribute(typename, attr, rewriter)
341
+ annots = annotations(attr)
342
+
343
+ unless annots.skip?
344
+ text = resolve_doc_source(annots.copy_annotation, tester: annots) do
345
+ # @type var docs: Array[String?]
346
+ docs = []
347
+
348
+ case attr.kind
349
+ when :instance
350
+ if attr.is_a?(AST::Members::AttrReader) || attr.is_a?(AST::Members::AttrAccessor)
351
+ docs << doc_for_method(typename, instance_method: attr.name, tester: annots)
352
+ end
353
+ if attr.is_a?(AST::Members::AttrWriter) || attr.is_a?(AST::Members::AttrAccessor)
354
+ docs << doc_for_method(typename, instance_method: :"#{attr.name}=", tester: annots)
355
+ end
356
+ when :singleton
357
+ if attr.is_a?(AST::Members::AttrReader) || attr.is_a?(AST::Members::AttrAccessor)
358
+ docs << doc_for_method(typename, singleton_method: attr.name, tester: annots)
359
+ end
360
+ if attr.is_a?(AST::Members::AttrWriter) || attr.is_a?(AST::Members::AttrAccessor)
361
+ docs << doc_for_method(typename, singleton_method: :"#{attr.name}=", tester: annots)
362
+ end
363
+ end
364
+ join_docs(docs.uniq)
365
+ end
366
+ end
367
+
368
+ replace_comment(attr, text, rewriter)
369
+ end
370
+
371
+ def replace_comment(commented, string, rewriter)
372
+ if string
373
+ if string.empty?
374
+ rewriter.delete_comment(commented.comment) if commented.comment
375
+ elsif commented.comment
376
+ rewriter.replace_comment(commented.comment, content: string)
377
+ else
378
+ rewriter.add_comment(commented.location || raise, *commented.annotations.filter_map(&:location), content: string)
379
+ end
380
+ end
381
+ end
382
+
383
+ def resolve_name(name, outer:)
384
+ namespace = outer.inject(RBS::Namespace.root) do |ns1, ns2|
385
+ ns1 + ns2
386
+ end
387
+
388
+ name.with_prefix(namespace).relative!
389
+ end
390
+
391
+ def annotations(annots)
392
+ # @type var as: Array[Annotations::t]
393
+ as = _ = annots.annotations.map {|annot| Annotations.parse(annot) }.compact
394
+ Annotations.new(as)
395
+ end
396
+ end
397
+ end
398
+ end