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,127 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Repository
5
+ DEFAULT_STDLIB_ROOT = Pathname(_ = __dir__) + "../../stdlib"
6
+
7
+ class GemRBS
8
+ attr_reader :name
9
+ attr_reader :paths
10
+
11
+ def initialize(name:)
12
+ @name = name
13
+ @paths = []
14
+ @versions = nil
15
+ end
16
+
17
+ def versions
18
+ load! unless @versions
19
+ @versions or raise
20
+ end
21
+
22
+ def load!
23
+ @versions = {}
24
+ versions = @versions or raise
25
+
26
+ paths.each do |gem_path|
27
+ gem_path.each_child(false) do |child|
28
+ next unless Gem::Version.correct?(child.to_s)
29
+
30
+ if version = Gem::Version.create(child.to_s)
31
+ unless version.prerelease?
32
+ path = gem_path + child
33
+
34
+ if prev = versions[version]
35
+ RBS.logger.info { "Overwriting gem RBS in repository: gem=#{name}, prev_path=#{prev.path}, new_path=#{path}" }
36
+ end
37
+
38
+ versions[version] = VersionPath.new(gem: self, version: version, path: path)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ def version_names
46
+ versions.keys.sort_by(&:version)
47
+ end
48
+
49
+ def oldest_version
50
+ oldest = version_names.first or raise
51
+ versions[oldest] or raise
52
+ end
53
+
54
+ def latest_version
55
+ latest = version_names.last or raise
56
+ versions[latest] or raise
57
+ end
58
+
59
+ def find_best_version(version)
60
+ best_version = Repository.find_best_version(version, version_names)
61
+ versions[best_version]
62
+ end
63
+
64
+ def empty?
65
+ versions.empty?
66
+ end
67
+ end
68
+
69
+ VersionPath = _ = Struct.new(:gem, :version, :path, keyword_init: true)
70
+
71
+ attr_reader :dirs
72
+ attr_reader :gems
73
+
74
+ def initialize(no_stdlib: false)
75
+ @dirs = []
76
+ @gems = {}
77
+
78
+ unless no_stdlib
79
+ add(DEFAULT_STDLIB_ROOT)
80
+ end
81
+ end
82
+
83
+ def self.default
84
+ new()
85
+ end
86
+
87
+ def self.find_best_version(version, candidates)
88
+ candidates = candidates.sort
89
+ return candidates.last || raise unless version
90
+
91
+ if v = candidates.reverse.bsearch {|v| v <= version ? true : false }
92
+ v
93
+ else
94
+ candidates.first or raise
95
+ end
96
+ end
97
+
98
+ def add(dir)
99
+ dirs << dir
100
+
101
+ dir.each_child(false) do |child|
102
+ gem_name = child.to_s
103
+ gem_rbs = (gems[gem_name] ||= GemRBS.new(name: gem_name))
104
+ gem_rbs.paths << dir + child
105
+ end
106
+ end
107
+
108
+ def lookup(gem, version)
109
+ _, set = lookup_path(gem, version)
110
+ set&.path
111
+ end
112
+
113
+ def lookup_path(gem, version)
114
+ if gem_rbs = gems[gem]
115
+ unless gem_rbs.empty?
116
+ set = if version and v = Gem::Version.create(version)&.release
117
+ gem_rbs.find_best_version(v)
118
+ else
119
+ gem_rbs.latest_version
120
+ end
121
+
122
+ [gem_rbs, set]
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,219 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Resolver
5
+ class ConstantResolver
6
+ class Table
7
+ attr_reader :children_table, :toplevel
8
+ attr_reader :constants_table
9
+
10
+ def initialize(environment)
11
+ @children_table = {}
12
+ @toplevel = {}
13
+
14
+ @constants_table = {}
15
+
16
+ environment.class_decls.each_key do |name|
17
+ children_table[name] = {}
18
+ end
19
+
20
+ environment.class_decls.each do |name, entry|
21
+ constant = constant_of_module(name, entry)
22
+
23
+ unless name.namespace.empty?
24
+ parent = name.namespace.to_type_name
25
+ table = children_table[parent] or raise "#{parent} not found by #{name}"
26
+ else
27
+ table = toplevel
28
+ end
29
+
30
+ table[name.name] = constant
31
+ constants_table[name] = constant
32
+ end
33
+
34
+ environment.class_alias_decls.each do |name, entry|
35
+ normalized_entry = environment.normalized_module_class_entry(name) or next
36
+ constant = constant_of_module(name, normalized_entry)
37
+
38
+ # Insert class/module aliases into `children_table` and `toplevel` table
39
+ unless name.namespace.empty?
40
+ normalized_parent = environment.normalize_module_name?(name.namespace.to_type_name) or raise
41
+ table = children_table[normalized_parent] or raise
42
+ table[name.name] = constant
43
+ else
44
+ toplevel[name.name] = constant
45
+ end
46
+ end
47
+
48
+ environment.constant_decls.each do |name, entry|
49
+ unless name.namespace.empty?
50
+ parent = name.namespace.to_type_name
51
+
52
+ table = children_table[parent] or raise
53
+ constant = constant_of_constant(name, entry)
54
+ else
55
+ table = toplevel
56
+ constant = constant_of_constant(name, entry)
57
+ end
58
+
59
+ table[name.name] = constant
60
+ end
61
+ end
62
+
63
+ def children(name)
64
+ children_table[name]
65
+ end
66
+
67
+ def constant(name)
68
+ constants_table[name]
69
+ end
70
+
71
+ def constant_of_module(name, entry)
72
+ type = Types::ClassSingleton.new(
73
+ name: name,
74
+ location: nil
75
+ )
76
+
77
+ Constant.new(name: name, type: type, entry: entry)
78
+ end
79
+
80
+ def constant_of_constant(name, entry)
81
+ Constant.new(name: name, type: entry.decl.type, entry: entry)
82
+ end
83
+ end
84
+
85
+ attr_reader :builder, :table
86
+ attr_reader :context_constants_cache, :child_constants_cache
87
+
88
+ def initialize(builder:)
89
+ @builder = builder
90
+ @table = Table.new(builder.env)
91
+ @context_constants_cache = {}
92
+ @child_constants_cache = {}
93
+ end
94
+
95
+ def resolve(name, context:)
96
+ cs = constants(context) or raise "Broken context is given"
97
+ cs[name]
98
+ end
99
+
100
+ def constants(context)
101
+ unless context_constants_cache.key?(context)
102
+ load_context_constants(context)
103
+ end
104
+
105
+ context_constants_cache[context]
106
+ end
107
+
108
+ def resolve_child(module_name, name)
109
+ children(module_name)[name]
110
+ end
111
+
112
+ def children(module_name)
113
+ module_name = builder.env.normalize_module_name(module_name)
114
+
115
+ unless child_constants_cache.key?(module_name)
116
+ load_child_constants(module_name)
117
+ end
118
+
119
+ child_constants_cache[module_name] or raise
120
+ end
121
+
122
+ def load_context_constants(context)
123
+ # @type var consts: Hash[Symbol, Constant]
124
+ consts = {}
125
+
126
+ if last = context&.[](1)
127
+ constants_from_ancestors(last, constants: consts)
128
+ else
129
+ constants_from_ancestors(BuiltinNames::Object.name, constants: consts)
130
+ end
131
+
132
+ constants_from_context(context, constants: consts) or return
133
+ constants_itself(context, constants: consts)
134
+
135
+ context_constants_cache[context] = consts
136
+ end
137
+
138
+ def load_child_constants(name)
139
+ # @type var constants: Hash[Symbol, Constant]
140
+ constants = {}
141
+
142
+ if table.children(name)
143
+ builder.ancestor_builder.instance_ancestors(name).ancestors.reverse_each do |ancestor|
144
+ if ancestor.is_a?(Definition::Ancestor::Instance)
145
+ if ancestor.name == BuiltinNames::Object.name
146
+ if name != BuiltinNames::Object.name
147
+ next
148
+ end
149
+ end
150
+
151
+ case ancestor.source
152
+ when AST::Members::Include, :super, nil
153
+ consts = table.children(ancestor.name) or raise
154
+ constants.merge!(consts)
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ child_constants_cache[name] = constants
161
+ end
162
+
163
+ def constants_from_context(context, constants:)
164
+ if context
165
+ parent, last = context
166
+
167
+ constants_from_context(parent, constants: constants) or return false
168
+
169
+ if last
170
+ consts = table.children(builder.env.normalize_module_name(last)) or return false
171
+ constants.merge!(consts)
172
+ end
173
+ end
174
+
175
+ true
176
+ end
177
+
178
+ def constants_from_ancestors(module_name, constants:)
179
+ entry = builder.env.normalized_module_class_entry(module_name) or raise
180
+
181
+ if entry.is_a?(Environment::ClassEntry) || entry.is_a?(Environment::ModuleEntry)
182
+ constants.merge!(table.children(BuiltinNames::Object.name) || raise)
183
+ constants.merge!(table.toplevel)
184
+ end
185
+
186
+ builder.ancestor_builder.instance_ancestors(entry.name).ancestors.reverse_each do |ancestor|
187
+ if ancestor.is_a?(Definition::Ancestor::Instance)
188
+ case ancestor.source
189
+ when AST::Members::Include, :super, nil
190
+ consts = table.children(ancestor.name) or raise
191
+ if ancestor.name == BuiltinNames::Object.name && entry.is_a?(Environment::ClassEntry)
192
+ # Insert toplevel constants as ::Object's constants
193
+ consts.merge!(table.toplevel)
194
+ end
195
+ constants.merge!(consts)
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ def constants_itself(context, constants:)
202
+ if context
203
+ _, typename = context
204
+
205
+ if typename
206
+ if (ns = typename.namespace).empty?
207
+ constant = table.toplevel[typename.name] or raise
208
+ else
209
+ hash = table.children(ns.to_type_name) or raise
210
+ constant = hash[typename.name]
211
+ end
212
+
213
+ constants[typename.name] = constant
214
+ end
215
+ end
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module Resolver
5
+ class TypeNameResolver
6
+ attr_reader :all_names
7
+ attr_reader :cache
8
+ attr_reader :env
9
+
10
+ def initialize(env)
11
+ @all_names = Set[]
12
+ @cache = {}
13
+ @env = env
14
+
15
+ all_names.merge(env.class_decls.keys)
16
+ all_names.merge(env.interface_decls.keys)
17
+ all_names.merge(env.type_alias_decls.keys)
18
+ all_names.merge(env.class_alias_decls.keys)
19
+ end
20
+
21
+ def try_cache(query)
22
+ cache.fetch(query) do
23
+ result = yield
24
+ cache[query] = result
25
+ end
26
+ end
27
+
28
+ def resolve(type_name, context:)
29
+ if type_name.absolute?
30
+ return type_name
31
+ end
32
+
33
+ try_cache([type_name, context]) do
34
+ head, tail = partition(type_name)
35
+
36
+ head = resolve_in(head, context)
37
+
38
+ if head
39
+ if tail
40
+ absolute_name = tail.with_prefix(head.to_namespace)
41
+ if env.normalize_type_name?(absolute_name)
42
+ absolute_name
43
+ end
44
+ else
45
+ head
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ def partition(type_name)
52
+ if type_name.namespace.empty?
53
+ head = type_name.name
54
+ tail = nil
55
+ else
56
+ head, *tail = type_name.namespace.path
57
+
58
+ head or raise
59
+
60
+ tail = TypeName.new(
61
+ name: type_name.name,
62
+ namespace: Namespace.new(absolute: false, path: tail)
63
+ )
64
+ end
65
+
66
+ [head, tail]
67
+ end
68
+
69
+ def resolve_in(head, context)
70
+ if context
71
+ parent, child = context
72
+ case child
73
+ when false
74
+ resolve_in(head, parent)
75
+ when TypeName
76
+ name = TypeName.new(name: head, namespace: child.to_namespace)
77
+ has_name?(name) || resolve_in(head, parent)
78
+ end
79
+ else
80
+ has_name?(TypeName.new(name: head, namespace: Namespace.root))
81
+ end
82
+ end
83
+
84
+ def has_name?(full_name)
85
+ if all_names.include?(full_name)
86
+ full_name
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
data/lib/rbs/sorter.rb ADDED
@@ -0,0 +1,198 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Sorter
5
+ include RBS::AST
6
+
7
+ attr_reader :path, :stdout
8
+
9
+ def initialize(path, stdout: $stdout)
10
+ @path = path
11
+ @stdout = stdout
12
+ end
13
+
14
+ def run
15
+ stdout.puts "Opening #{path}..."
16
+
17
+ buffer = Buffer.new(name: path, content: path.read)
18
+ _, _, sigs = Parser.parse_signature(buffer)
19
+
20
+ sigs = sigs.map do |m|
21
+ sort_decl m
22
+ end
23
+
24
+ stdout.puts "Writing #{path}..."
25
+ path.open('w') do |out|
26
+ writer = RBS::Writer.new(out: out)
27
+ writer.write _ = sigs
28
+ end
29
+ end
30
+
31
+ def sort_decl(decl)
32
+ case decl
33
+ when Declarations::Class, Declarations::Module, Declarations::Interface
34
+ partitioned = {
35
+ type_alias_decls: [],
36
+ constant_decls: [],
37
+ class_decls: [],
38
+ mixin_includes: [],
39
+ mixin_prepends: [],
40
+ mixin_extends: [],
41
+ class_variables: [],
42
+ class_instance_variables: [],
43
+ instance_variables: [],
44
+ singleton_attributes: [],
45
+ instance_attributes: [],
46
+ module_functions: [],
47
+ singleton_new_methods: [],
48
+ public_singleton_methods: [],
49
+ private_singleton_methods: [],
50
+ instance_initialize_methods: [],
51
+ public_instance_methods: [],
52
+ private_instance_methods: [],
53
+ } #: partitioned
54
+
55
+ members = decl.members.map { |m| sort_decl m }
56
+ decl = decl.update(members: _ = members)
57
+
58
+ visibility_annotated_members = [] #: Array[member]
59
+
60
+ decl.members.inject(:public) do |current_visibility, member| #$ AST::Members::visibility
61
+ case member
62
+ when Members::Public
63
+ :public
64
+ when Members::Private
65
+ :private
66
+ when Members::MethodDefinition, Members::AttrReader, Members::AttrWriter, Members::AttrAccessor
67
+ visibility_annotated_members << member.update(visibility: member.visibility || current_visibility)
68
+ current_visibility
69
+ else
70
+ visibility_annotated_members << member
71
+ current_visibility
72
+ end
73
+ end
74
+
75
+ visibility_annotated_members.each do |member|
76
+ case member
77
+ when Declarations::TypeAlias
78
+ partitioned[:type_alias_decls] << member
79
+ when Declarations::Constant
80
+ partitioned[:constant_decls] << member
81
+ when Declarations::Class, Declarations::Module, Declarations::Interface
82
+ partitioned[:class_decls] << member
83
+ when Members::Include
84
+ partitioned[:mixin_includes] << member
85
+ when Members::Prepend
86
+ partitioned[:mixin_prepends] << member
87
+ when Members::Extend
88
+ partitioned[:mixin_extends] << member
89
+ when Members::ClassVariable
90
+ partitioned[:class_variables] << member
91
+ when Members::ClassInstanceVariable
92
+ partitioned[:class_instance_variables] << member
93
+ when Members::InstanceVariable
94
+ partitioned[:instance_variables] << member
95
+ when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
96
+ if member.kind == :singleton
97
+ partitioned[:singleton_attributes] << member.update(visibility: nil)
98
+ else
99
+ partitioned[:instance_attributes] << member.update(visibility: nil)
100
+ end
101
+ when Members::MethodDefinition
102
+ case member.kind
103
+ when :singleton_instance
104
+ partitioned[:module_functions] << member.update(visibility: nil)
105
+ when :singleton
106
+ if member.name == :new
107
+ partitioned[:singleton_new_methods] << member.update(visibility: nil)
108
+ elsif member.visibility == :public
109
+ partitioned[:public_singleton_methods] << member.update(visibility: nil)
110
+ else
111
+ partitioned[:private_singleton_methods] << member.update(visibility: nil)
112
+ end
113
+ else
114
+ if member.name == :initialize
115
+ partitioned[:instance_initialize_methods] << member.update(visibility: nil)
116
+ elsif member.visibility == :public
117
+ partitioned[:public_instance_methods] << member.update(visibility: nil)
118
+ else
119
+ partitioned[:private_instance_methods] << member.update(visibility: nil)
120
+ end
121
+ end
122
+ when Members::Alias
123
+ if member.singleton?
124
+ partitioned[:public_singleton_methods] << member
125
+ else
126
+ partitioned[:public_instance_methods] << member
127
+ end
128
+ when Members::Public, Members::Private
129
+ raise
130
+ else
131
+ partitioned[:other_decls] << member
132
+ end
133
+ end
134
+
135
+ partitioned[:type_alias_decls].sort_by! {|decl| decl.name.to_s }
136
+ partitioned[:constant_decls].sort_by! {|decl| decl.name.to_s }
137
+ partitioned[:class_decls].sort_by! {|decl| decl.name.to_s }
138
+ partitioned[:mixin_includes].sort_by! {|decl| decl.name.to_s }
139
+ partitioned[:mixin_prepends].sort_by! {|decl| decl.name.to_s }
140
+ partitioned[:mixin_extends].sort_by! {|decl| decl.name.to_s }
141
+ partitioned[:class_variables].sort_by! {|decl| decl.name.to_s }
142
+ partitioned[:class_instance_variables].sort_by! {|decl| decl.name.to_s }
143
+ partitioned[:instance_variables].sort_by! {|decl| decl.name.to_s }
144
+ partitioned[:singleton_attributes].sort_by! {|decl| decl.name.to_s }
145
+ partitioned[:instance_attributes].sort_by! {|decl| decl.name.to_s }
146
+ partitioned[:module_functions].sort_by! {|decl| decl.name.to_s }
147
+ partitioned[:public_singleton_methods].sort_by! {|decl| decl.is_a?(Members::MethodDefinition) ? decl.name.to_s : decl.new_name.to_s }
148
+ partitioned[:private_singleton_methods].sort_by! {|decl| decl.name.to_s }
149
+ partitioned[:public_instance_methods].sort_by! {|decl| decl.is_a?(Members::MethodDefinition) ? decl.name.to_s : decl.new_name.to_s }
150
+ partitioned[:private_instance_methods].sort_by! {|decl| decl.name.to_s }
151
+
152
+ members = [] #: Array[member]
153
+ members.push(*partitioned[:type_alias_decls])
154
+ members.push(*partitioned[:constant_decls])
155
+ members.push(*partitioned[:class_decls])
156
+ members.push(*partitioned[:mixin_includes])
157
+ members.push(*partitioned[:mixin_prepends])
158
+ members.push(*partitioned[:mixin_extends])
159
+ members.push(*partitioned[:class_variables])
160
+ members.push(*partitioned[:class_instance_variables])
161
+ members.push(*partitioned[:instance_variables])
162
+ members.push(*partitioned[:module_functions])
163
+ members.push(*partitioned[:singleton_attributes])
164
+
165
+ current_visibility = :public #: AST::Members::visibility
166
+
167
+ members.push(*partitioned[:singleton_new_methods])
168
+ members.push(*partitioned[:public_singleton_methods])
169
+
170
+ if !partitioned[:private_singleton_methods].empty?
171
+ current_visibility = :private
172
+ members.push Members::Private.new(location: nil)
173
+ end
174
+ members.push(*partitioned[:private_singleton_methods])
175
+
176
+ if current_visibility == :private && !partitioned[:public_instance_methods].empty?
177
+ current_visibility = :public
178
+ members.push Members::Public.new(location: nil)
179
+ end
180
+ members.push(*partitioned[:instance_attributes])
181
+ members.push(*partitioned[:instance_initialize_methods])
182
+ members.push(*partitioned[:public_instance_methods])
183
+
184
+ if current_visibility == :public && !partitioned[:private_instance_methods].empty?
185
+ current_visibility = :private
186
+ members.push Members::Private.new(location: nil)
187
+ end
188
+ members.push(*partitioned[:private_instance_methods])
189
+
190
+ members.push(*partitioned[:other_decls])
191
+
192
+ decl.update(members: _ = members)
193
+ else
194
+ decl
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Substitution
5
+ attr_reader :mapping
6
+ attr_accessor :instance_type
7
+
8
+ def empty?
9
+ mapping.empty? && instance_type.nil?
10
+ end
11
+
12
+ def initialize()
13
+ @mapping = {}
14
+ end
15
+
16
+ def add(from:, to:)
17
+ mapping[from] = to
18
+ end
19
+
20
+ def self.build(variables, types, instance_type: nil, &block)
21
+ unless variables.size == types.size
22
+ raise "Broken substitution: variables=#{variables}, types=#{types}"
23
+ end
24
+
25
+ mapping = variables.zip(types).to_h
26
+
27
+ self.new.tap do |subst|
28
+ mapping.each do |v, t|
29
+ type = block_given? ? yield(t) : t
30
+ subst.add(from: v, to: type)
31
+ end
32
+
33
+ subst.instance_type = instance_type
34
+ end
35
+ end
36
+
37
+ def apply(ty)
38
+ case ty
39
+ when Types::Variable
40
+ # @type var ty: Types::Variable
41
+ mapping[ty.name] || ty
42
+ when Types::Bases::Instance
43
+ if t = instance_type
44
+ t
45
+ else
46
+ ty
47
+ end
48
+ else
49
+ ty
50
+ end
51
+ end
52
+
53
+ alias [] apply
54
+
55
+ def without(*vars)
56
+ Substitution.new.tap do |subst|
57
+ subst.mapping.merge!(mapping)
58
+ vars.each do |var|
59
+ subst.mapping.delete(var)
60
+ end
61
+
62
+ subst.instance_type = self.instance_type
63
+ end
64
+ end
65
+
66
+ def +(other)
67
+ return self if other.empty?
68
+ return other if self.empty?
69
+
70
+ Substitution.new.tap do |subst|
71
+ subst.mapping.merge!(mapping)
72
+
73
+ other.mapping.each do |var, type|
74
+ if mapping.key?(var)
75
+ subst.add(from: var, to: self[type])
76
+ else
77
+ subst.add(from: var, to: type)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end