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