rbs-relaxed 3.9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. checksums.yaml +7 -0
  2. data/.github/dependabot.yml +22 -0
  3. data/.github/workflows/comments.yml +35 -0
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +82 -0
  6. data/.github/workflows/typecheck.yml +38 -0
  7. data/.github/workflows/windows.yml +43 -0
  8. data/.gitignore +23 -0
  9. data/.rubocop.yml +68 -0
  10. data/BSDL +22 -0
  11. data/CHANGELOG.md +1868 -0
  12. data/COPYING +56 -0
  13. data/README.md +203 -0
  14. data/Rakefile +417 -0
  15. data/Steepfile +44 -0
  16. data/config.yml +313 -0
  17. data/core/array.rbs +4062 -0
  18. data/core/basic_object.rbs +375 -0
  19. data/core/binding.rbs +150 -0
  20. data/core/builtin.rbs +277 -0
  21. data/core/class.rbs +220 -0
  22. data/core/comparable.rbs +171 -0
  23. data/core/complex.rbs +786 -0
  24. data/core/constants.rbs +96 -0
  25. data/core/data.rbs +415 -0
  26. data/core/dir.rbs +981 -0
  27. data/core/encoding.rbs +1371 -0
  28. data/core/enumerable.rbs +2405 -0
  29. data/core/enumerator/product.rbs +92 -0
  30. data/core/enumerator.rbs +630 -0
  31. data/core/env.rbs +6 -0
  32. data/core/errno.rbs +673 -0
  33. data/core/errors.rbs +760 -0
  34. data/core/exception.rbs +485 -0
  35. data/core/false_class.rbs +82 -0
  36. data/core/fiber.rbs +550 -0
  37. data/core/fiber_error.rbs +11 -0
  38. data/core/file.rbs +2936 -0
  39. data/core/file_test.rbs +331 -0
  40. data/core/float.rbs +1151 -0
  41. data/core/gc.rbs +644 -0
  42. data/core/global_variables.rbs +184 -0
  43. data/core/hash.rbs +1861 -0
  44. data/core/integer.rbs +1413 -0
  45. data/core/io/buffer.rbs +984 -0
  46. data/core/io/wait.rbs +70 -0
  47. data/core/io.rbs +3406 -0
  48. data/core/kernel.rbs +3096 -0
  49. data/core/marshal.rbs +207 -0
  50. data/core/match_data.rbs +635 -0
  51. data/core/math.rbs +729 -0
  52. data/core/method.rbs +386 -0
  53. data/core/module.rbs +1704 -0
  54. data/core/nil_class.rbs +209 -0
  55. data/core/numeric.rbs +818 -0
  56. data/core/object.rbs +110 -0
  57. data/core/object_space/weak_key_map.rbs +166 -0
  58. data/core/object_space.rbs +190 -0
  59. data/core/proc.rbs +868 -0
  60. data/core/process.rbs +2296 -0
  61. data/core/ractor.rbs +1068 -0
  62. data/core/random.rbs +237 -0
  63. data/core/range.rbs +1107 -0
  64. data/core/rational.rbs +531 -0
  65. data/core/rb_config.rbs +88 -0
  66. data/core/rbs/unnamed/argf.rbs +1229 -0
  67. data/core/rbs/unnamed/env_class.rbs +1209 -0
  68. data/core/rbs/unnamed/random.rbs +293 -0
  69. data/core/refinement.rbs +59 -0
  70. data/core/regexp.rbs +1930 -0
  71. data/core/ruby_vm.rbs +765 -0
  72. data/core/rubygems/basic_specification.rbs +6 -0
  73. data/core/rubygems/config_file.rbs +38 -0
  74. data/core/rubygems/dependency_installer.rbs +6 -0
  75. data/core/rubygems/errors.rbs +176 -0
  76. data/core/rubygems/installer.rbs +15 -0
  77. data/core/rubygems/path_support.rbs +6 -0
  78. data/core/rubygems/platform.rbs +7 -0
  79. data/core/rubygems/request_set.rbs +49 -0
  80. data/core/rubygems/requirement.rbs +148 -0
  81. data/core/rubygems/rubygems.rbs +1171 -0
  82. data/core/rubygems/source_list.rbs +15 -0
  83. data/core/rubygems/specification.rbs +23 -0
  84. data/core/rubygems/stream_ui.rbs +5 -0
  85. data/core/rubygems/uninstaller.rbs +10 -0
  86. data/core/rubygems/version.rbs +294 -0
  87. data/core/set.rbs +621 -0
  88. data/core/signal.rbs +100 -0
  89. data/core/string.rbs +3583 -0
  90. data/core/struct.rbs +667 -0
  91. data/core/symbol.rbs +475 -0
  92. data/core/thread.rbs +1765 -0
  93. data/core/thread_group.rbs +79 -0
  94. data/core/time.rbs +1762 -0
  95. data/core/trace_point.rbs +477 -0
  96. data/core/true_class.rbs +98 -0
  97. data/core/unbound_method.rbs +329 -0
  98. data/core/warning.rbs +87 -0
  99. data/docs/CONTRIBUTING.md +106 -0
  100. data/docs/architecture.md +110 -0
  101. data/docs/collection.md +192 -0
  102. data/docs/data_and_struct.md +86 -0
  103. data/docs/gem.md +57 -0
  104. data/docs/rbs_by_example.md +309 -0
  105. data/docs/repo.md +125 -0
  106. data/docs/sigs.md +167 -0
  107. data/docs/stdlib.md +147 -0
  108. data/docs/syntax.md +910 -0
  109. data/docs/tools.md +17 -0
  110. data/exe/rbs +7 -0
  111. data/ext/rbs_extension/extconf.rb +15 -0
  112. data/ext/rbs_extension/lexer.c +2728 -0
  113. data/ext/rbs_extension/lexer.h +179 -0
  114. data/ext/rbs_extension/lexer.re +147 -0
  115. data/ext/rbs_extension/lexstate.c +175 -0
  116. data/ext/rbs_extension/location.c +325 -0
  117. data/ext/rbs_extension/location.h +85 -0
  118. data/ext/rbs_extension/main.c +33 -0
  119. data/ext/rbs_extension/parser.c +2973 -0
  120. data/ext/rbs_extension/parser.h +18 -0
  121. data/ext/rbs_extension/parserstate.c +397 -0
  122. data/ext/rbs_extension/parserstate.h +163 -0
  123. data/ext/rbs_extension/rbs_extension.h +31 -0
  124. data/ext/rbs_extension/unescape.c +32 -0
  125. data/goodcheck.yml +91 -0
  126. data/include/rbs/constants.h +82 -0
  127. data/include/rbs/ruby_objs.h +72 -0
  128. data/include/rbs/util/rbs_constant_pool.h +219 -0
  129. data/include/rbs.h +7 -0
  130. data/lib/rbs/ancestor_graph.rb +92 -0
  131. data/lib/rbs/annotate/annotations.rb +199 -0
  132. data/lib/rbs/annotate/formatter.rb +92 -0
  133. data/lib/rbs/annotate/rdoc_annotator.rb +400 -0
  134. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  135. data/lib/rbs/annotate.rb +8 -0
  136. data/lib/rbs/ast/annotation.rb +29 -0
  137. data/lib/rbs/ast/comment.rb +29 -0
  138. data/lib/rbs/ast/declarations.rb +467 -0
  139. data/lib/rbs/ast/directives.rb +49 -0
  140. data/lib/rbs/ast/members.rb +451 -0
  141. data/lib/rbs/ast/type_param.rb +225 -0
  142. data/lib/rbs/ast/visitor.rb +137 -0
  143. data/lib/rbs/buffer.rb +67 -0
  144. data/lib/rbs/builtin_names.rb +58 -0
  145. data/lib/rbs/cli/colored_io.rb +48 -0
  146. data/lib/rbs/cli/diff.rb +83 -0
  147. data/lib/rbs/cli/validate.rb +357 -0
  148. data/lib/rbs/cli.rb +1223 -0
  149. data/lib/rbs/collection/cleaner.rb +38 -0
  150. data/lib/rbs/collection/config/lockfile.rb +92 -0
  151. data/lib/rbs/collection/config/lockfile_generator.rb +218 -0
  152. data/lib/rbs/collection/config.rb +81 -0
  153. data/lib/rbs/collection/installer.rb +32 -0
  154. data/lib/rbs/collection/sources/base.rb +14 -0
  155. data/lib/rbs/collection/sources/git.rb +258 -0
  156. data/lib/rbs/collection/sources/local.rb +81 -0
  157. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  158. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  159. data/lib/rbs/collection/sources.rb +38 -0
  160. data/lib/rbs/collection.rb +16 -0
  161. data/lib/rbs/constant.rb +28 -0
  162. data/lib/rbs/definition.rb +401 -0
  163. data/lib/rbs/definition_builder/ancestor_builder.rb +620 -0
  164. data/lib/rbs/definition_builder/method_builder.rb +254 -0
  165. data/lib/rbs/definition_builder.rb +845 -0
  166. data/lib/rbs/diff.rb +125 -0
  167. data/lib/rbs/environment/use_map.rb +77 -0
  168. data/lib/rbs/environment.rb +829 -0
  169. data/lib/rbs/environment_loader.rb +173 -0
  170. data/lib/rbs/environment_walker.rb +155 -0
  171. data/lib/rbs/errors.rb +645 -0
  172. data/lib/rbs/factory.rb +18 -0
  173. data/lib/rbs/file_finder.rb +28 -0
  174. data/lib/rbs/location_aux.rb +138 -0
  175. data/lib/rbs/locator.rb +243 -0
  176. data/lib/rbs/method_type.rb +143 -0
  177. data/lib/rbs/namespace.rb +125 -0
  178. data/lib/rbs/parser/lex_result.rb +15 -0
  179. data/lib/rbs/parser/token.rb +23 -0
  180. data/lib/rbs/parser_aux.rb +114 -0
  181. data/lib/rbs/prototype/helpers.rb +140 -0
  182. data/lib/rbs/prototype/node_usage.rb +99 -0
  183. data/lib/rbs/prototype/rb.rb +840 -0
  184. data/lib/rbs/prototype/rbi.rb +641 -0
  185. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  186. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  187. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  188. data/lib/rbs/prototype/runtime.rb +667 -0
  189. data/lib/rbs/repository.rb +127 -0
  190. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  191. data/lib/rbs/resolver/type_name_resolver.rb +91 -0
  192. data/lib/rbs/sorter.rb +198 -0
  193. data/lib/rbs/substitution.rb +83 -0
  194. data/lib/rbs/subtractor.rb +201 -0
  195. data/lib/rbs/test/errors.rb +80 -0
  196. data/lib/rbs/test/guaranteed.rb +30 -0
  197. data/lib/rbs/test/hook.rb +212 -0
  198. data/lib/rbs/test/observer.rb +19 -0
  199. data/lib/rbs/test/setup.rb +84 -0
  200. data/lib/rbs/test/setup_helper.rb +50 -0
  201. data/lib/rbs/test/tester.rb +167 -0
  202. data/lib/rbs/test/type_check.rb +435 -0
  203. data/lib/rbs/test.rb +112 -0
  204. data/lib/rbs/type_alias_dependency.rb +100 -0
  205. data/lib/rbs/type_alias_regularity.rb +126 -0
  206. data/lib/rbs/type_name.rb +109 -0
  207. data/lib/rbs/types.rb +1596 -0
  208. data/lib/rbs/unit_test/convertibles.rb +176 -0
  209. data/lib/rbs/unit_test/spy.rb +138 -0
  210. data/lib/rbs/unit_test/type_assertions.rb +347 -0
  211. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  212. data/lib/rbs/unit_test.rb +6 -0
  213. data/lib/rbs/validator.rb +186 -0
  214. data/lib/rbs/variance_calculator.rb +189 -0
  215. data/lib/rbs/vendorer.rb +71 -0
  216. data/lib/rbs/version.rb +5 -0
  217. data/lib/rbs/writer.rb +424 -0
  218. data/lib/rbs.rb +94 -0
  219. data/lib/rdoc/discover.rb +20 -0
  220. data/lib/rdoc_plugin/parser.rb +163 -0
  221. data/rbs-relaxed.gemspec +48 -0
  222. data/schema/annotation.json +14 -0
  223. data/schema/comment.json +26 -0
  224. data/schema/decls.json +326 -0
  225. data/schema/function.json +87 -0
  226. data/schema/location.json +56 -0
  227. data/schema/members.json +266 -0
  228. data/schema/methodType.json +50 -0
  229. data/schema/typeParam.json +36 -0
  230. data/schema/types.json +317 -0
  231. data/sig/ancestor_builder.rbs +163 -0
  232. data/sig/ancestor_graph.rbs +60 -0
  233. data/sig/annotate/annotations.rbs +102 -0
  234. data/sig/annotate/formatter.rbs +24 -0
  235. data/sig/annotate/rdoc_annotater.rbs +82 -0
  236. data/sig/annotate/rdoc_source.rbs +30 -0
  237. data/sig/annotation.rbs +27 -0
  238. data/sig/buffer.rbs +32 -0
  239. data/sig/builtin_names.rbs +44 -0
  240. data/sig/cli/colored_io.rbs +15 -0
  241. data/sig/cli/diff.rbs +21 -0
  242. data/sig/cli/validate.rbs +43 -0
  243. data/sig/cli.rbs +87 -0
  244. data/sig/collection/cleaner.rbs +13 -0
  245. data/sig/collection/config/lockfile.rbs +74 -0
  246. data/sig/collection/config/lockfile_generator.rbs +66 -0
  247. data/sig/collection/config.rbs +46 -0
  248. data/sig/collection/installer.rbs +17 -0
  249. data/sig/collection/sources.rbs +214 -0
  250. data/sig/collection.rbs +4 -0
  251. data/sig/comment.rbs +26 -0
  252. data/sig/constant.rbs +21 -0
  253. data/sig/declarations.rbs +267 -0
  254. data/sig/definition.rbs +173 -0
  255. data/sig/definition_builder.rbs +165 -0
  256. data/sig/diff.rbs +28 -0
  257. data/sig/directives.rbs +77 -0
  258. data/sig/environment.rbs +279 -0
  259. data/sig/environment_loader.rbs +111 -0
  260. data/sig/environment_walker.rbs +65 -0
  261. data/sig/errors.rbs +405 -0
  262. data/sig/factory.rbs +5 -0
  263. data/sig/file_finder.rbs +28 -0
  264. data/sig/location.rbs +110 -0
  265. data/sig/locator.rbs +58 -0
  266. data/sig/manifest.yaml +7 -0
  267. data/sig/members.rbs +258 -0
  268. data/sig/method_builder.rbs +84 -0
  269. data/sig/method_types.rbs +58 -0
  270. data/sig/namespace.rbs +146 -0
  271. data/sig/parser.rbs +100 -0
  272. data/sig/prototype/helpers.rbs +27 -0
  273. data/sig/prototype/node_usage.rbs +20 -0
  274. data/sig/prototype/rb.rbs +96 -0
  275. data/sig/prototype/rbi.rbs +75 -0
  276. data/sig/prototype/runtime.rbs +182 -0
  277. data/sig/rbs.rbs +21 -0
  278. data/sig/rdoc/rbs.rbs +67 -0
  279. data/sig/repository.rbs +85 -0
  280. data/sig/resolver/constant_resolver.rbs +92 -0
  281. data/sig/resolver/context.rbs +34 -0
  282. data/sig/resolver/type_name_resolver.rbs +35 -0
  283. data/sig/shims/bundler.rbs +38 -0
  284. data/sig/shims/enumerable.rbs +5 -0
  285. data/sig/shims/rubygems.rbs +19 -0
  286. data/sig/sorter.rbs +41 -0
  287. data/sig/substitution.rbs +48 -0
  288. data/sig/subtractor.rbs +37 -0
  289. data/sig/test/errors.rbs +52 -0
  290. data/sig/test/guranteed.rbs +9 -0
  291. data/sig/test/type_check.rbs +19 -0
  292. data/sig/test.rbs +82 -0
  293. data/sig/type_alias_dependency.rbs +53 -0
  294. data/sig/type_alias_regularity.rbs +98 -0
  295. data/sig/type_param.rbs +110 -0
  296. data/sig/typename.rbs +79 -0
  297. data/sig/types.rbs +579 -0
  298. data/sig/unit_test/convertibles.rbs +154 -0
  299. data/sig/unit_test/spy.rbs +30 -0
  300. data/sig/unit_test/type_assertions.rbs +196 -0
  301. data/sig/unit_test/with_aliases.rbs +136 -0
  302. data/sig/use_map.rbs +35 -0
  303. data/sig/util.rbs +9 -0
  304. data/sig/validator.rbs +63 -0
  305. data/sig/variance_calculator.rbs +87 -0
  306. data/sig/vendorer.rbs +51 -0
  307. data/sig/version.rbs +3 -0
  308. data/sig/visitor.rbs +47 -0
  309. data/sig/writer.rbs +127 -0
  310. data/src/constants.c +153 -0
  311. data/src/ruby_objs.c +795 -0
  312. data/src/util/rbs_constant_pool.c +342 -0
  313. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  314. data/stdlib/abbrev/0/array.rbs +26 -0
  315. data/stdlib/base64/0/base64.rbs +355 -0
  316. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  317. data/stdlib/bigdecimal/0/big_decimal.rbs +1629 -0
  318. data/stdlib/bigdecimal-math/0/big_math.rbs +119 -0
  319. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  320. data/stdlib/cgi/0/core.rbs +1285 -0
  321. data/stdlib/cgi/0/manifest.yaml +3 -0
  322. data/stdlib/coverage/0/coverage.rbs +263 -0
  323. data/stdlib/csv/0/csv.rbs +3776 -0
  324. data/stdlib/csv/0/manifest.yaml +3 -0
  325. data/stdlib/date/0/date.rbs +1585 -0
  326. data/stdlib/date/0/date_time.rbs +616 -0
  327. data/stdlib/date/0/time.rbs +26 -0
  328. data/stdlib/dbm/0/dbm.rbs +421 -0
  329. data/stdlib/delegate/0/delegator.rbs +184 -0
  330. data/stdlib/delegate/0/kernel.rbs +47 -0
  331. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  332. data/stdlib/did_you_mean/0/did_you_mean.rbs +343 -0
  333. data/stdlib/digest/0/digest.rbs +577 -0
  334. data/stdlib/erb/0/erb.rbs +532 -0
  335. data/stdlib/etc/0/etc.rbs +865 -0
  336. data/stdlib/fileutils/0/fileutils.rbs +1734 -0
  337. data/stdlib/find/0/find.rbs +49 -0
  338. data/stdlib/forwardable/0/forwardable.rbs +268 -0
  339. data/stdlib/io-console/0/io-console.rbs +414 -0
  340. data/stdlib/ipaddr/0/ipaddr.rbs +428 -0
  341. data/stdlib/json/0/json.rbs +1916 -0
  342. data/stdlib/kconv/0/kconv.rbs +166 -0
  343. data/stdlib/logger/0/formatter.rbs +45 -0
  344. data/stdlib/logger/0/log_device.rbs +100 -0
  345. data/stdlib/logger/0/logger.rbs +796 -0
  346. data/stdlib/logger/0/manifest.yaml +2 -0
  347. data/stdlib/logger/0/period.rbs +17 -0
  348. data/stdlib/logger/0/severity.rbs +34 -0
  349. data/stdlib/minitest/0/kernel.rbs +42 -0
  350. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  351. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  352. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  353. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  354. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  355. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  356. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  357. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  358. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  359. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  360. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  361. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  362. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  363. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  364. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  365. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  366. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  367. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  368. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  369. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  370. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  371. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  372. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  373. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  374. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  375. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  376. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  377. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  378. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  379. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  380. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  381. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  382. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  383. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  384. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  385. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  386. data/stdlib/minitest/0/minitest.rbs +115 -0
  387. data/stdlib/monitor/0/monitor.rbs +363 -0
  388. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  389. data/stdlib/net-http/0/manifest.yaml +3 -0
  390. data/stdlib/net-http/0/net-http.rbs +5552 -0
  391. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  392. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  393. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  394. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  395. data/stdlib/nkf/0/nkf.rbs +402 -0
  396. data/stdlib/objspace/0/objspace.rbs +487 -0
  397. data/stdlib/observable/0/observable.rbs +217 -0
  398. data/stdlib/open-uri/0/manifest.yaml +4 -0
  399. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  400. data/stdlib/open3/0/open3.rbs +147 -0
  401. data/stdlib/openssl/0/manifest.yaml +3 -0
  402. data/stdlib/openssl/0/openssl.rbs +12113 -0
  403. data/stdlib/optparse/0/optparse.rbs +1725 -0
  404. data/stdlib/pathname/0/pathname.rbs +1406 -0
  405. data/stdlib/pp/0/manifest.yaml +2 -0
  406. data/stdlib/pp/0/pp.rbs +300 -0
  407. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  408. data/stdlib/pstore/0/pstore.rbs +603 -0
  409. data/stdlib/psych/0/core_ext.rbs +12 -0
  410. data/stdlib/psych/0/dbm.rbs +237 -0
  411. data/stdlib/psych/0/manifest.yaml +3 -0
  412. data/stdlib/psych/0/psych.rbs +402 -0
  413. data/stdlib/psych/0/store.rbs +59 -0
  414. data/stdlib/pty/0/pty.rbs +237 -0
  415. data/stdlib/rdoc/0/code_object.rbs +51 -0
  416. data/stdlib/rdoc/0/comment.rbs +59 -0
  417. data/stdlib/rdoc/0/context.rbs +153 -0
  418. data/stdlib/rdoc/0/markup.rbs +117 -0
  419. data/stdlib/rdoc/0/parser.rbs +56 -0
  420. data/stdlib/rdoc/0/rdoc.rbs +391 -0
  421. data/stdlib/rdoc/0/ri.rbs +17 -0
  422. data/stdlib/rdoc/0/store.rbs +48 -0
  423. data/stdlib/rdoc/0/top_level.rbs +97 -0
  424. data/stdlib/resolv/0/manifest.yaml +3 -0
  425. data/stdlib/resolv/0/resolv.rbs +1830 -0
  426. data/stdlib/ripper/0/ripper.rbs +1648 -0
  427. data/stdlib/securerandom/0/securerandom.rbs +62 -0
  428. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  429. data/stdlib/singleton/0/singleton.rbs +131 -0
  430. data/stdlib/socket/0/addrinfo.rbs +666 -0
  431. data/stdlib/socket/0/basic_socket.rbs +590 -0
  432. data/stdlib/socket/0/constants.rbs +2295 -0
  433. data/stdlib/socket/0/ip_socket.rbs +92 -0
  434. data/stdlib/socket/0/socket.rbs +4157 -0
  435. data/stdlib/socket/0/socket_error.rbs +5 -0
  436. data/stdlib/socket/0/tcp_server.rbs +192 -0
  437. data/stdlib/socket/0/tcp_socket.rbs +79 -0
  438. data/stdlib/socket/0/udp_socket.rbs +133 -0
  439. data/stdlib/socket/0/unix_server.rbs +169 -0
  440. data/stdlib/socket/0/unix_socket.rbs +172 -0
  441. data/stdlib/stringio/0/stringio.rbs +567 -0
  442. data/stdlib/strscan/0/string_scanner.rbs +1627 -0
  443. data/stdlib/tempfile/0/tempfile.rbs +479 -0
  444. data/stdlib/time/0/time.rbs +432 -0
  445. data/stdlib/timeout/0/timeout.rbs +81 -0
  446. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  447. data/stdlib/tsort/0/cyclic.rbs +5 -0
  448. data/stdlib/tsort/0/interfaces.rbs +20 -0
  449. data/stdlib/tsort/0/tsort.rbs +409 -0
  450. data/stdlib/uri/0/common.rbs +582 -0
  451. data/stdlib/uri/0/file.rbs +118 -0
  452. data/stdlib/uri/0/ftp.rbs +13 -0
  453. data/stdlib/uri/0/generic.rbs +1108 -0
  454. data/stdlib/uri/0/http.rbs +104 -0
  455. data/stdlib/uri/0/https.rbs +14 -0
  456. data/stdlib/uri/0/ldap.rbs +230 -0
  457. data/stdlib/uri/0/ldaps.rbs +14 -0
  458. data/stdlib/uri/0/mailto.rbs +92 -0
  459. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  460. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  461. data/stdlib/uri/0/ws.rbs +13 -0
  462. data/stdlib/uri/0/wss.rbs +9 -0
  463. data/stdlib/yaml/0/manifest.yaml +2 -0
  464. data/stdlib/yaml/0/yaml.rbs +1 -0
  465. data/stdlib/zlib/0/buf_error.rbs +10 -0
  466. data/stdlib/zlib/0/data_error.rbs +10 -0
  467. data/stdlib/zlib/0/deflate.rbs +210 -0
  468. data/stdlib/zlib/0/error.rbs +20 -0
  469. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  470. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  471. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  472. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  473. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  474. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  475. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  476. data/stdlib/zlib/0/inflate.rbs +180 -0
  477. data/stdlib/zlib/0/mem_error.rbs +10 -0
  478. data/stdlib/zlib/0/need_dict.rbs +13 -0
  479. data/stdlib/zlib/0/stream_end.rbs +11 -0
  480. data/stdlib/zlib/0/stream_error.rbs +11 -0
  481. data/stdlib/zlib/0/version_error.rbs +11 -0
  482. data/stdlib/zlib/0/zlib.rbs +449 -0
  483. data/stdlib/zlib/0/zstream.rbs +200 -0
  484. metadata +532 -0
data/lib/rbs/writer.rb ADDED
@@ -0,0 +1,424 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Writer
5
+ attr_reader :out
6
+ attr_reader :indentation
7
+
8
+ def initialize(out:)
9
+ @out = out
10
+ @indentation = []
11
+ @preserve = false
12
+ end
13
+
14
+ def preserve?
15
+ @preserve
16
+ end
17
+
18
+ def preserve!(preserve: true)
19
+ @preserve = preserve
20
+ self
21
+ end
22
+
23
+ def indent(size = 2)
24
+ indentation.push(" " * size)
25
+ yield
26
+ ensure
27
+ indentation.pop
28
+ end
29
+
30
+ def prefix
31
+ indentation.join()
32
+ end
33
+
34
+ def puts(string = "")
35
+ if string.size > 0
36
+ @out.puts("#{prefix}#{string}")
37
+ else
38
+ @out.puts
39
+ end
40
+ end
41
+
42
+ def format_annotation(annotation)
43
+ string = annotation.string
44
+ case
45
+ when string !~ /\}/
46
+ "%a{#{string}}"
47
+ when string !~ /\)/
48
+ "%a(#{string})"
49
+ when string !~ /\]/
50
+ "%a[#{string}]"
51
+ when string !~ /\>/
52
+ "%a<#{string}>"
53
+ when string !~ /\|/
54
+ "%a|#{string}|"
55
+ else
56
+ raise
57
+ end
58
+ end
59
+
60
+ def write_annotation(annotations)
61
+ annotations.each do |annotation|
62
+ puts format_annotation(annotation)
63
+ end
64
+ end
65
+
66
+ def write_comment(comment)
67
+ if comment
68
+ comment.string.lines.each do |line|
69
+ line = line.chomp
70
+ unless line.empty?
71
+ puts "# #{line}"
72
+ else
73
+ puts "#"
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ def write(contents)
80
+ resolves = contents.select { _1.is_a?(AST::Directives::ResolveTypeNames) } #: Array[AST::Directives::ResolveTypeNames]
81
+ uses = contents.select {|c| c.is_a?(AST::Directives::Use) } #: Array[AST::Directives::Use]
82
+ decls = contents.select {|c| c.is_a?(AST::Declarations::Base) } #: Array[AST::Declarations::t]
83
+
84
+ if first_resolves = resolves.first
85
+ puts "# resolve-type-names: #{first_resolves.value}"
86
+ puts
87
+ end
88
+
89
+ uses.each do |dir|
90
+ write_use_directive(dir)
91
+ end
92
+ puts unless uses.empty?
93
+
94
+ [nil, *decls].each_cons(2) do |prev, decl|
95
+ raise unless decl
96
+
97
+ preserve_empty_line(prev, decl)
98
+ write_decl decl
99
+ end
100
+ end
101
+
102
+ def write_use_directive(dir)
103
+ clauses = dir.clauses.map do |clause|
104
+ case clause
105
+ when AST::Directives::Use::SingleClause
106
+ if clause.new_name
107
+ "#{clause.type_name} as #{clause.new_name}"
108
+ else
109
+ "#{clause.type_name}"
110
+ end
111
+ when AST::Directives::Use::WildcardClause
112
+ "#{clause.namespace}*"
113
+ end
114
+ end
115
+
116
+ puts "use #{clauses.join(", ")}"
117
+ end
118
+
119
+ def write_decl(decl)
120
+ case decl
121
+ when AST::Declarations::Class
122
+ super_class = if super_class = decl.super_class
123
+ " < #{name_and_args(super_class.name, super_class.args)}"
124
+ end
125
+ write_comment decl.comment
126
+ write_annotation decl.annotations
127
+ puts "class #{name_and_params(decl.name, decl.type_params)}#{super_class}"
128
+
129
+ indent do
130
+ [nil, *decl.members].each_cons(2) do |prev, member|
131
+ raise unless member
132
+
133
+ preserve_empty_line prev, member
134
+ write_member member
135
+ end
136
+ end
137
+
138
+ puts "end"
139
+
140
+ when AST::Declarations::Module
141
+ self_type = unless decl.self_types.empty?
142
+ " : #{decl.self_types.join(", ")}"
143
+ end
144
+
145
+ write_comment decl.comment
146
+ write_annotation decl.annotations
147
+
148
+ puts "module #{name_and_params(decl.name, decl.type_params)}#{self_type}"
149
+
150
+ indent do
151
+ decl.members.each.with_index do |member, index|
152
+ if index > 0
153
+ puts
154
+ end
155
+ write_member member
156
+ end
157
+ end
158
+
159
+ puts "end"
160
+ when AST::Declarations::Constant
161
+ write_comment decl.comment
162
+ puts "#{decl.name}: #{decl.type}"
163
+
164
+ when AST::Declarations::Global
165
+ write_comment decl.comment
166
+ puts "#{decl.name}: #{decl.type}"
167
+
168
+ when AST::Declarations::TypeAlias
169
+ write_comment decl.comment
170
+ write_annotation decl.annotations
171
+ write_loc_source(decl) {
172
+ puts "type #{name_and_params(decl.name, decl.type_params)} = #{decl.type}"
173
+ }
174
+
175
+ when AST::Declarations::ClassAlias
176
+ write_comment decl.comment
177
+ write_loc_source(decl) {
178
+ puts "class #{decl.new_name} = #{decl.old_name}"
179
+ }
180
+
181
+ when AST::Declarations::ModuleAlias
182
+ write_comment decl.comment
183
+ write_loc_source(decl) {
184
+ puts "module #{decl.new_name} = #{decl.old_name}"
185
+ }
186
+
187
+ when AST::Declarations::Interface
188
+ write_comment decl.comment
189
+ write_annotation decl.annotations
190
+
191
+ puts "interface #{name_and_params(decl.name, decl.type_params)}"
192
+
193
+ indent do
194
+ decl.members.each.with_index do |member, index|
195
+ if index > 0
196
+ puts
197
+ end
198
+ write_member member
199
+ end
200
+ end
201
+
202
+ puts "end"
203
+
204
+ end
205
+ end
206
+
207
+ def name_and_params(name, params)
208
+ if params.empty?
209
+ "#{name}"
210
+ else
211
+ ps = params.each.map do |param|
212
+ param.to_s
213
+ end
214
+
215
+ "#{name}[#{ps.join(", ")}]"
216
+ end
217
+ end
218
+
219
+ def name_and_args(name, args)
220
+ if name && args
221
+ if args.empty?
222
+ "#{name}"
223
+ else
224
+ "#{name}[#{args.join(", ")}]"
225
+ end
226
+ end
227
+ end
228
+
229
+ def put_lines(lines, leading_spaces:)
230
+ lines.each_line.with_index do |line, index|
231
+ line.chomp!
232
+ line.rstrip!
233
+ line.sub!(/\A( {,#{leading_spaces}})/, '') if index > 0
234
+
235
+ puts line
236
+ end
237
+ end
238
+
239
+ def write_member(member)
240
+ case member
241
+ when AST::Members::Include
242
+ write_comment member.comment
243
+ write_annotation member.annotations
244
+ puts "include #{name_and_args(member.name, member.args)}"
245
+ when AST::Members::Extend
246
+ write_comment member.comment
247
+ write_annotation member.annotations
248
+ puts "extend #{name_and_args(member.name, member.args)}"
249
+ when AST::Members::Prepend
250
+ write_comment member.comment
251
+ write_annotation member.annotations
252
+ puts "prepend #{name_and_args(member.name, member.args)}"
253
+ when AST::Members::AttrAccessor
254
+ write_comment member.comment
255
+ write_annotation member.annotations
256
+ puts "#{attribute(:accessor, member)}"
257
+ when AST::Members::AttrReader
258
+ write_comment member.comment
259
+ write_annotation member.annotations
260
+ puts "#{attribute(:reader, member)}"
261
+ when AST::Members::AttrWriter
262
+ write_comment member.comment
263
+ write_annotation member.annotations
264
+ puts "#{attribute(:writer, member)}"
265
+ when AST::Members::Public
266
+ puts "public"
267
+ when AST::Members::Private
268
+ puts "private"
269
+ when AST::Members::Alias
270
+ write_comment member.comment
271
+ write_annotation member.annotations
272
+ new_name = member.singleton? ? "self.#{method_name(member.new_name)}" : method_name(member.new_name)
273
+ old_name = member.singleton? ? "self.#{method_name(member.old_name)}" : method_name(member.old_name)
274
+ puts "alias #{new_name} #{old_name}"
275
+ when AST::Members::InstanceVariable
276
+ write_comment member.comment
277
+ puts "#{member.name}: #{member.type}"
278
+ when AST::Members::ClassInstanceVariable
279
+ write_comment member.comment
280
+ puts "self.#{member.name}: #{member.type}"
281
+ when AST::Members::ClassVariable
282
+ write_comment member.comment
283
+ puts "#{member.name}: #{member.type}"
284
+ when AST::Members::MethodDefinition
285
+ write_comment member.comment
286
+ write_annotation member.annotations
287
+ write_loc_source(member) { write_def member }
288
+ else
289
+ write_decl member
290
+ end
291
+ end
292
+
293
+ def method_name(name)
294
+ s = name.to_s
295
+
296
+ case s
297
+ when /\A(_?)[A-Za-z_]\w*(\?|!|=)?\Z/
298
+ s
299
+ when *%w(| ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` ! != !~)
300
+ s
301
+ else
302
+ "`#{s}`"
303
+ end
304
+ end
305
+
306
+ def write_loc_source(located)
307
+ if preserve? && loc = located.location
308
+ put_lines(loc.source, leading_spaces: loc.start_column)
309
+ else
310
+ yield
311
+ end
312
+ end
313
+
314
+ def write_def(member)
315
+ visibility =
316
+ case member.visibility
317
+ when :public
318
+ "public "
319
+ when :private
320
+ "private "
321
+ else
322
+ ""
323
+ end
324
+
325
+ name = case member.kind
326
+ when :instance
327
+ "#{method_name(member.name)}"
328
+ when :singleton_instance
329
+ "self?.#{method_name(member.name)}"
330
+ when :singleton
331
+ "self.#{method_name(member.name)}"
332
+ end
333
+
334
+ string = +""
335
+
336
+ prefix = "#{visibility}def #{name}:"
337
+ padding = " " * (prefix.size-1)
338
+
339
+ string << prefix
340
+
341
+ member.overloads.each.with_index do |overload, index|
342
+ if index > 0
343
+ string << padding
344
+ string << "|"
345
+ end
346
+
347
+ overload.annotations.each do |annotation|
348
+ string << " #{format_annotation(annotation)}"
349
+ end
350
+ string << " #{overload.method_type}\n"
351
+ end
352
+
353
+ if member.overloading?
354
+ if member.overloads.size > 0
355
+ string << padding
356
+ string << "|"
357
+ end
358
+ string << " ...\n"
359
+ end
360
+
361
+ string.each_line do |line|
362
+ puts line.chomp
363
+ end
364
+ end
365
+
366
+ def attribute(kind, attr)
367
+ visibility =
368
+ case attr.visibility
369
+ when :public
370
+ "public "
371
+ when :private
372
+ "private "
373
+ else
374
+ ""
375
+ end
376
+
377
+ var = case attr.ivar_name
378
+ when nil
379
+ ""
380
+ when false
381
+ "()"
382
+ else
383
+ "(#{attr.ivar_name})"
384
+ end
385
+
386
+ receiver = case attr.kind
387
+ when :singleton
388
+ "self."
389
+ when :instance
390
+ ""
391
+ end
392
+
393
+ "#{visibility}attr_#{kind} #{receiver}#{method_name(attr.name)}#{var}: #{attr.type}"
394
+ end
395
+
396
+ def preserve_empty_line(prev, decl)
397
+ # @type var decl: _Located
398
+
399
+ return unless prev
400
+
401
+ if (_ = decl).respond_to?(:comment)
402
+ if comment = (_ = decl).comment
403
+ decl = comment
404
+ end
405
+ end
406
+
407
+ prev_loc = prev.location
408
+ decl_loc = decl.location
409
+
410
+ if prev_loc && decl_loc
411
+ prev_end_line = prev_loc.end_line
412
+ start_line = decl_loc.start_line
413
+
414
+ if start_line - prev_end_line > 1
415
+ puts
416
+ end
417
+ else
418
+ # When the signature is not constructed by the parser,
419
+ # it always inserts an empty line.
420
+ puts
421
+ end
422
+ end
423
+ end
424
+ end
data/lib/rbs.rb ADDED
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbs/version"
4
+
5
+ require "set"
6
+ require "json"
7
+ require "pathname"
8
+ require "pp"
9
+ require "ripper"
10
+ require "logger"
11
+ require "tsort"
12
+ require "strscan"
13
+
14
+ require "rbs/errors"
15
+ require "rbs/buffer"
16
+ require "rbs/namespace"
17
+ require "rbs/type_name"
18
+ require "rbs/types"
19
+ require "rbs/method_type"
20
+ require "rbs/file_finder"
21
+ require "rbs/ast/type_param"
22
+ require "rbs/ast/directives"
23
+ require "rbs/ast/declarations"
24
+ require "rbs/ast/members"
25
+ require "rbs/ast/annotation"
26
+ require "rbs/ast/visitor"
27
+ require "rbs/environment"
28
+ require "rbs/environment/use_map"
29
+ require "rbs/environment_loader"
30
+ require "rbs/builtin_names"
31
+ require "rbs/definition"
32
+ require "rbs/definition_builder"
33
+ require "rbs/definition_builder/ancestor_builder"
34
+ require "rbs/definition_builder/method_builder"
35
+ require "rbs/diff"
36
+ require "rbs/variance_calculator"
37
+ require "rbs/substitution"
38
+ require "rbs/constant"
39
+ require "rbs/resolver/constant_resolver"
40
+ require "rbs/resolver/type_name_resolver"
41
+ require "rbs/ast/comment"
42
+ require "rbs/writer"
43
+ require "rbs/prototype/helpers"
44
+ require "rbs/prototype/rbi"
45
+ require "rbs/prototype/rb"
46
+ require "rbs/prototype/runtime"
47
+ require "rbs/prototype/node_usage"
48
+ require "rbs/environment_walker"
49
+ require "rbs/vendorer"
50
+ require "rbs/validator"
51
+ require "rbs/factory"
52
+ require "rbs/repository"
53
+ require "rbs/subtractor"
54
+ require "rbs/ancestor_graph"
55
+ require "rbs/locator"
56
+ require "rbs/type_alias_dependency"
57
+ require "rbs/type_alias_regularity"
58
+ require "rbs/collection"
59
+
60
+ require "rbs_extension"
61
+ require "rbs/parser_aux"
62
+ require "rbs/location_aux"
63
+
64
+ module RBS
65
+ class <<self
66
+ attr_reader :logger_level
67
+ attr_reader :logger_output
68
+
69
+ def logger
70
+ @logger ||= Logger.new(logger_output || STDERR, level: logger_level || Logger::WARN, progname: "rbs")
71
+ end
72
+
73
+ def logger_output=(val)
74
+ @logger = nil
75
+ @logger_output = val
76
+ end
77
+
78
+ def logger_level=(level)
79
+ @logger_level = level
80
+ @logger = nil
81
+ end
82
+
83
+ def print_warning()
84
+ @warnings ||= Set[]
85
+
86
+ message = yield()
87
+
88
+ unless @warnings.include?(message)
89
+ @warnings << message
90
+ logger.warn { message }
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ gem 'rdoc', '~> 6.4'
5
+ require 'rdoc_plugin/parser'
6
+ module RDoc
7
+ class Parser
8
+ class RBS < Parser
9
+ parse_files_matching(/\.rbs$/)
10
+ def scan
11
+ ::RBS::RDocPlugin::Parser.new(@top_level, @content).scan
12
+ end
13
+ end
14
+ end
15
+ end
16
+ rescue Gem::LoadError
17
+ # Error :sad:
18
+ rescue Exception
19
+ # Exception :sad:
20
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rbs'
4
+
5
+ module RBS
6
+ module RDocPlugin
7
+ class Parser
8
+
9
+ attr_accessor :top_level, :content
10
+
11
+ def initialize(top_level, content)
12
+ @top_level = top_level
13
+ @content = content
14
+ end
15
+
16
+ def scan
17
+ _, _, decls = ::RBS::Parser.parse_signature(@content)
18
+ decls.each do |decl|
19
+ parse_member(decl: decl, context: @top_level)
20
+ end
21
+ @top_level
22
+ end
23
+
24
+ def parse_member(decl:, context:, outer_name: nil)
25
+ case decl
26
+ when ::RBS::AST::Declarations::Class
27
+ parse_class_decl(decl: decl, context: context, outer_name: outer_name)
28
+ when ::RBS::AST::Declarations::Module
29
+ parse_module_decl(decl: decl, context: context, outer_name: outer_name)
30
+ when ::RBS::AST::Declarations::Constant
31
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
32
+ parse_constant_decl(decl: decl, context: context, outer_name: outer_name)
33
+ when ::RBS::AST::Declarations::Interface
34
+ parse_module_decl(decl: decl, context: context, outer_name: outer_name)
35
+ when ::RBS::AST::Members::MethodDefinition
36
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
37
+ parse_method_decl(decl: decl, context: context, outer_name: outer_name)
38
+ when ::RBS::AST::Members::Alias
39
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
40
+ parse_method_alias_decl(decl: decl, context: context, outer_name: outer_name)
41
+ when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrWriter, ::RBS::AST::Members::AttrAccessor
42
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
43
+ parse_attr_decl(decl: decl, context: context, outer_name: outer_name)
44
+ when ::RBS::AST::Members::Include
45
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
46
+ parse_include_decl(decl: decl, context: context, outer_name: outer_name)
47
+ when ::RBS::AST::Members::Extend
48
+ context = @top_level.find_class_or_module outer_name.to_s if outer_name
49
+ parse_extend_decl(decl: decl, context: context, outer_name: outer_name)
50
+ end
51
+ end
52
+
53
+ def parse_class_decl(decl:, context:, outer_name: nil)
54
+ full_name = fully_qualified_name(outer_name: outer_name, decl: decl)
55
+ klass = context.add_class(RDoc::NormalClass, full_name.to_s, decl.super_class&.name&.to_s || "::Object")
56
+ klass.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment
57
+ decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) }
58
+ end
59
+
60
+ def parse_module_decl(decl:, context:, outer_name: nil)
61
+ full_name = fully_qualified_name(outer_name: outer_name, decl: _ = decl)
62
+ kmodule = context.add_module(RDoc::NormalModule, full_name.to_s)
63
+ kmodule.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment
64
+ decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) }
65
+ end
66
+
67
+ def parse_constant_decl(decl:, context:, outer_name: nil)
68
+ comment = decl.comment ? construct_comment(context: context, comment: comment_string(decl)) : nil
69
+ constant = RDoc::Constant.new(decl.name.to_s, decl.type.to_s, comment)
70
+ context.add_constant(constant)
71
+ end
72
+
73
+ def parse_method_decl(decl:, context:, outer_name: nil)
74
+ method = RDoc::AnyMethod.new(nil, decl.name.to_s)
75
+ method.singleton = decl.singleton?
76
+ method.visibility = decl.visibility
77
+ method.call_seq = decl.overloads.map {|overload| "#{decl.name.to_s}#{overload.method_type.to_s}" }.join("\n")
78
+ if loc = decl.location
79
+ method.start_collecting_tokens
80
+ method.add_token({ line_no: 1, char_no: 1, kind: :on_comment, text: "# File #{@top_level.relative_name}, line(s) #{loc.start_line}:#{loc.end_line}\n" })
81
+ method.add_token({ line_no: 1, char_no: 1, text: loc.source })
82
+ method.line = loc.start_line
83
+ end
84
+ method.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
85
+ context.add_method(method)
86
+ end
87
+
88
+ def parse_method_alias_decl(decl:, context:, outer_name: nil)
89
+ alias_def = RDoc::Alias.new(nil, decl.old_name.to_s, decl.new_name.to_s, nil, decl.kind == :singleton)
90
+ alias_def.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
91
+ context.add_alias(alias_def)
92
+ end
93
+
94
+ def parse_attr_decl(decl:, context:, outer_name: nil)
95
+ rw = case decl
96
+ when ::RBS::AST::Members::AttrReader
97
+ 'R'
98
+ when ::RBS::AST::Members::AttrWriter
99
+ 'W'
100
+ when ::RBS::AST::Members::AttrAccessor
101
+ 'RW'
102
+ end
103
+ attribute = RDoc::Attr.new(nil, decl.name.to_s, rw, nil, decl.kind == :singleton)
104
+ attribute.visibility = decl.visibility
105
+ attribute.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
106
+ context.add_attribute(attribute)
107
+ end
108
+
109
+ def parse_include_decl(decl:, context:, outer_name: nil)
110
+ name = decl.name.to_s
111
+ outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
112
+ qualified_name = ''
113
+ outer_names.each do |namespace|
114
+ qualified_name += namespace
115
+ if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
116
+ name = module_name.full_name
117
+ break
118
+ end
119
+ end
120
+ include_decl = RDoc::Include.new(name, nil)
121
+ include_decl.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
122
+ context.add_include(include_decl)
123
+ end
124
+
125
+ def parse_extend_decl(decl:, context:, outer_name: nil)
126
+ name = decl.name.to_s
127
+ outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
128
+ qualified_name = ''
129
+ outer_names.each do |namespace|
130
+ qualified_name += namespace
131
+ if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
132
+ name = module_name.full_name
133
+ break
134
+ end
135
+ end
136
+ extend_decl = RDoc::Extend.new(name, nil)
137
+ extend_decl.comment = construct_comment(context: context, comment: comment_string(decl)) if decl.comment
138
+ context.add_extend(extend_decl)
139
+ end
140
+
141
+ private
142
+
143
+ def construct_comment(context:, comment:)
144
+ comment = RDoc::Comment.new(comment, context)
145
+ comment.format = "markdown"
146
+ comment
147
+ end
148
+
149
+ def comment_string(with_comment)
150
+ comment = with_comment.comment or raise "Object with `#comment` returning a object is expected"
151
+ comment.string
152
+ end
153
+
154
+ def fully_qualified_name(outer_name:, decl:)
155
+ if outer_name
156
+ (outer_name + decl.name)
157
+ else
158
+ decl.name
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end