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/errors.rb ADDED
@@ -0,0 +1,645 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module MethodNameHelper
5
+ def method_name_string()
6
+ separator = case kind
7
+ when :instance
8
+ "#"
9
+ when :singleton
10
+ "."
11
+ else
12
+ raise
13
+ end
14
+
15
+ "#{type_name}#{separator}#{method_name}"
16
+ end
17
+ end
18
+
19
+ class BaseError < StandardError; end
20
+ class LoadingError < BaseError; end
21
+ class DefinitionError < BaseError; end
22
+
23
+ module DetailedMessageable
24
+ def detailed_message(highlight: false, **)
25
+ msg = if Exception.method_defined?(:detailed_message)
26
+ super
27
+ else
28
+ # Failback to `#message` in Ruby 3.1 or earlier
29
+ "#{message} (#{self.class.name})"
30
+ end
31
+
32
+ return msg unless location
33
+
34
+ # Support only one line
35
+ return msg unless location.start_line == location.end_line
36
+
37
+ indent = " " * location.start_column
38
+ marker = "^" * ([location.end_column - location.start_column, 1].max or raise)
39
+
40
+ io = StringIO.new
41
+ io.puts msg
42
+ io.puts
43
+ io.print "\e[1m" if highlight
44
+ io.puts " #{location.buffer.lines[location.end_line - 1]}"
45
+ io.puts " #{indent}#{marker}"
46
+ io.print "\e[m" if highlight
47
+ io.string
48
+ end
49
+ end
50
+
51
+ class ParsingError < BaseError
52
+ include DetailedMessageable
53
+
54
+ attr_reader :location
55
+ attr_reader :error_message
56
+ attr_reader :token_type
57
+
58
+ def initialize(location, error_message, token_type)
59
+ @location = location
60
+ @error_message = error_message
61
+ @token_type = token_type
62
+
63
+ super "#{Location.to_string location}: Syntax error: #{error_message}, token=`#{location.source}` (#{token_type})"
64
+ end
65
+ end
66
+
67
+ class InvalidTypeApplicationError < DefinitionError
68
+ attr_reader :type_name
69
+ attr_reader :args
70
+ attr_reader :params
71
+ attr_reader :type_params
72
+ attr_reader :location
73
+
74
+ def initialize(type_name:, args:, params:, location:)
75
+ @type_name = type_name
76
+ @args = args
77
+ @type_params = params
78
+ @params = params.map(&:name)
79
+ @location = location
80
+ super "#{Location.to_string location}: #{type_name} expects parameters [#{params.join(", ")}], but given args [#{args.join(", ")}]"
81
+ end
82
+
83
+ def self.check!(type_name:, args:, params:, location:)
84
+ min_arity = params.count { _1.default_type.nil? }
85
+ max_arity = params.size
86
+
87
+ unless min_arity <= args.size && args.size <= max_arity
88
+ raise new(type_name: type_name, args: args, params: params, location: location)
89
+ end
90
+ end
91
+
92
+ def self.check2!(env:, type_name:, args:, location:)
93
+ params =
94
+ case
95
+ when type_name.class?
96
+ decl = env.normalized_module_class_entry(type_name) or raise
97
+ decl.type_params
98
+ when type_name.interface?
99
+ env.interface_decls.fetch(type_name).decl.type_params
100
+ when type_name.alias?
101
+ env.type_alias_decls.fetch(type_name).decl.type_params
102
+ else
103
+ raise
104
+ end
105
+
106
+ check!(type_name: type_name, args: args, params: params, location: location)
107
+ end
108
+ end
109
+
110
+ class RecursiveAncestorError < DefinitionError
111
+ attr_reader :ancestors
112
+ attr_reader :location
113
+
114
+ def initialize(ancestors:, location:)
115
+ @ancestors = ancestors
116
+ @location = location
117
+
118
+ names = ancestors.map do |ancestor|
119
+ case ancestor
120
+ when Definition::Ancestor::Singleton
121
+ "singleton(#{ancestor.name})"
122
+ when Definition::Ancestor::Instance
123
+ if ancestor.args.empty?
124
+ ancestor.name.to_s
125
+ else
126
+ "#{ancestor.name}[#{ancestor.args.join(", ")}]"
127
+ end
128
+ end
129
+ end
130
+
131
+ super "#{Location.to_string location}: Detected recursive ancestors: #{names.join(" < ")}"
132
+ end
133
+
134
+ def self.check!(self_ancestor, ancestors:, location:)
135
+ case self_ancestor
136
+ when Definition::Ancestor::Instance
137
+ if ancestors.any? {|a| a.is_a?(Definition::Ancestor::Instance) && a.name == self_ancestor.name }
138
+ raise new(ancestors: ancestors + [self_ancestor], location: location)
139
+ end
140
+ when Definition::Ancestor::Singleton
141
+ if ancestors.include?(self_ancestor)
142
+ raise new(ancestors: ancestors + [self_ancestor], location: location)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ class NoTypeFoundError < DefinitionError
149
+ include DetailedMessageable
150
+
151
+ attr_reader :type_name
152
+ attr_reader :location
153
+
154
+ def initialize(type_name:, location:)
155
+ @type_name = type_name
156
+ @location = location
157
+
158
+ super "#{Location.to_string location}: Could not find #{type_name}"
159
+ end
160
+
161
+ def self.check!(type_name, env:, location:)
162
+ env.type_name?(type_name) or raise new(type_name: type_name, location: location)
163
+ type_name
164
+ end
165
+ end
166
+
167
+ class NoSuperclassFoundError < DefinitionError
168
+ attr_reader :type_name
169
+ attr_reader :location
170
+
171
+ def initialize(type_name:, location:)
172
+ @type_name = type_name
173
+ @location = location
174
+
175
+ super "#{Location.to_string location}: Could not find super class: #{type_name}"
176
+ end
177
+
178
+ def self.check!(type_name, env:, location:)
179
+ if env.module_name?(type_name)
180
+ return
181
+ end
182
+
183
+ raise new(type_name: type_name, location: location)
184
+ end
185
+ end
186
+
187
+ class InheritModuleError < DefinitionError
188
+ include DetailedMessageable
189
+
190
+ attr_reader :super_decl
191
+
192
+ def initialize(super_decl)
193
+ @super_decl = super_decl
194
+
195
+ super "#{Location.to_string(super_decl.location)}: Cannot inherit a module: #{super_decl.name}"
196
+ end
197
+
198
+ def location
199
+ @super_decl.location
200
+ end
201
+
202
+ def self.check!(super_decl, env:)
203
+ super_name = env.normalize_type_name(super_decl.name)
204
+ return if env.class_decl?(super_name) || env.class_alias?(super_name)
205
+
206
+ raise new(super_decl)
207
+ end
208
+ end
209
+
210
+ class NoSelfTypeFoundError < DefinitionError
211
+ include DetailedMessageable
212
+
213
+ attr_reader :type_name
214
+ attr_reader :location
215
+
216
+ def initialize(type_name:, location:)
217
+ @type_name = type_name
218
+ @location = location
219
+
220
+ super "#{Location.to_string location}: Could not find self type: #{type_name}"
221
+ end
222
+
223
+ def self.check!(self_type, env:)
224
+ self_name = env.normalize_type_name(self_type.name)
225
+ (env.module_name?(self_name) || env.interface_name?(self_name)) or raise new(type_name: self_type.name, location: self_type.location)
226
+ end
227
+ end
228
+
229
+ class NoMixinFoundError < DefinitionError
230
+ include DetailedMessageable
231
+
232
+ attr_reader :type_name
233
+ attr_reader :member
234
+
235
+ def initialize(type_name:, member:)
236
+ @type_name = type_name
237
+ @member = member
238
+
239
+ super "#{Location.to_string location}: Could not find mixin: #{type_name}"
240
+ end
241
+
242
+ def location
243
+ member.location
244
+ end
245
+
246
+ def self.check!(type_name, env:, member:)
247
+ (env.module_name?(type_name) || env.interface_name?(type_name)) or raise new(type_name: type_name, member: member)
248
+ end
249
+ end
250
+
251
+ class DuplicatedMethodDefinitionError < DefinitionError
252
+ include DetailedMessageable
253
+
254
+ attr_reader :type
255
+ attr_reader :method_name
256
+ attr_reader :members
257
+
258
+ def initialize(type:, method_name:, members:)
259
+ @type = type
260
+ @method_name = method_name
261
+ @members = members
262
+
263
+ message = +"#{Location.to_string location}: #{qualified_method_name} has duplicated definitions"
264
+ if members.size > 1
265
+ message << " in #{other_locations.map { |loc| Location.to_string loc }.join(', ')}"
266
+ end
267
+ super message
268
+ end
269
+
270
+ def qualified_method_name
271
+ case type
272
+ when Types::ClassSingleton
273
+ "#{type.name}.#{method_name}"
274
+ else
275
+ "#{type.name}##{method_name}"
276
+ end
277
+ end
278
+
279
+ def type_name
280
+ type.name
281
+ end
282
+
283
+ def location
284
+ members[0].location
285
+ end
286
+
287
+ def other_locations
288
+ members.drop(1).map(&:location)
289
+ end
290
+ end
291
+
292
+ class DuplicatedInterfaceMethodDefinitionError < DefinitionError
293
+ include DetailedMessageable
294
+
295
+ attr_reader :type
296
+ attr_reader :method_name
297
+ attr_reader :member
298
+
299
+ def initialize(type:, method_name:, member:)
300
+ @type = type
301
+ @method_name = method_name
302
+ @member = member
303
+
304
+ super "#{member.location}: Duplicated method definition: #{qualified_method_name}"
305
+ end
306
+
307
+ def location
308
+ member.location
309
+ end
310
+
311
+ def qualified_method_name
312
+ case type
313
+ when Types::ClassSingleton
314
+ "#{type.name}.#{method_name}"
315
+ else
316
+ "#{type.name}##{method_name}"
317
+ end
318
+ end
319
+
320
+ def type_name
321
+ type.name
322
+ end
323
+ end
324
+
325
+ class VariableDuplicationError < DefinitionError
326
+ include DetailedMessageable
327
+
328
+ attr_reader :member
329
+
330
+ def initialize(member:)
331
+ @member = member
332
+
333
+ super "#{Location.to_string location}: Duplicated variable name #{member.name}"
334
+ end
335
+
336
+ def location
337
+ loc = @member.location or raise
338
+ loc[:name]
339
+ end
340
+ end
341
+
342
+ class InstanceVariableDuplicationError < VariableDuplicationError
343
+ def self.check!(variables:, member:, type_name:)
344
+ if old = variables[member.name]
345
+ if old.declared_in == type_name
346
+ raise new(member: member)
347
+ end
348
+ end
349
+ end
350
+ end
351
+
352
+ class ClassInstanceVariableDuplicationError < VariableDuplicationError
353
+ def self.check!(variables:, member:, type_name:)
354
+ if old = variables[member.name]
355
+ if old.declared_in == type_name
356
+ raise new(member: member)
357
+ end
358
+ end
359
+ end
360
+ end
361
+
362
+ class ClassVariableDuplicationError < VariableDuplicationError
363
+ def self.check!(variables:, member:, type_name:)
364
+ if old = variables[member.name]
365
+ raise new(member: member)
366
+ end
367
+ end
368
+ end
369
+
370
+ class UnknownMethodAliasError < DefinitionError
371
+ include DetailedMessageable
372
+
373
+ attr_reader :type_name
374
+ attr_reader :original_name
375
+ attr_reader :aliased_name
376
+ attr_reader :location
377
+
378
+ def initialize(type_name:, original_name:, aliased_name:, location:)
379
+ @type_name = type_name
380
+ @original_name = original_name
381
+ @aliased_name = aliased_name
382
+ @location = location
383
+
384
+ super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name} (#{type_name})"
385
+ end
386
+ end
387
+
388
+ class SuperclassMismatchError < DefinitionError
389
+ attr_reader :name
390
+ attr_reader :entry
391
+
392
+ def initialize(name:, entry:)
393
+ @name = name
394
+ @entry = entry
395
+ super "#{Location.to_string entry.primary.decl.location}: Superclass mismatch: #{name}"
396
+ end
397
+ end
398
+
399
+ class InvalidOverloadMethodError < DefinitionError
400
+ include DetailedMessageable
401
+
402
+ attr_reader :type_name
403
+ attr_reader :method_name
404
+ attr_reader :kind
405
+ attr_reader :members
406
+
407
+ def initialize(type_name:, method_name:, kind:, members:)
408
+ @type_name = type_name
409
+ @method_name = method_name
410
+ @kind = kind
411
+ @members = members
412
+
413
+ delimiter = case kind
414
+ when :instance
415
+ "#"
416
+ when :singleton
417
+ "."
418
+ end
419
+
420
+ super "#{Location.to_string members[0].location}: Invalid method overloading: #{type_name}#{delimiter}#{method_name}"
421
+ end
422
+
423
+ def location
424
+ members[0].location
425
+ end
426
+ end
427
+
428
+ class GenericParameterMismatchError < LoadingError
429
+ attr_reader :name
430
+ attr_reader :decl
431
+
432
+ def initialize(name:, decl:)
433
+ @name = name
434
+ @decl = decl
435
+ super "#{Location.to_string decl.location}: Generic parameters mismatch: #{name}"
436
+ end
437
+ end
438
+
439
+ class DuplicatedDeclarationError < LoadingError
440
+ attr_reader :name
441
+ attr_reader :decls
442
+
443
+ def initialize(name, *decls)
444
+ @name = name
445
+ @decls = decls
446
+
447
+ last_decl = decls.last or raise
448
+ super "#{Location.to_string last_decl.location}: Duplicated declaration: #{name}"
449
+ end
450
+ end
451
+
452
+ class InvalidVarianceAnnotationError < DefinitionError
453
+ include DetailedMessageable
454
+
455
+ attr_reader :type_name
456
+ attr_reader :param
457
+ attr_reader :location
458
+
459
+ def initialize(type_name:, param:, location:)
460
+ @type_name = type_name
461
+ @param = param
462
+ @location = location
463
+
464
+ super "#{Location.to_string location}: Type parameter variance error: #{param.name} is #{param.variance} but used as incompatible variance"
465
+ end
466
+ end
467
+
468
+ class RecursiveAliasDefinitionError < DefinitionError
469
+ include DetailedMessageable
470
+
471
+ attr_reader :type
472
+ attr_reader :defs
473
+
474
+ def initialize(type:, defs:)
475
+ @type = type
476
+ @defs = defs
477
+
478
+ super "#{Location.to_string location}: Recursive aliases in #{type}: #{defs.map(&:name).join(", ")}"
479
+ end
480
+
481
+ def location
482
+ first_def = defs.first or raise
483
+ original = first_def.original or raise
484
+ original.location
485
+ end
486
+ end
487
+
488
+ class MixinClassError < DefinitionError
489
+ include DetailedMessageable
490
+
491
+ attr_reader :type_name
492
+ attr_reader :member
493
+
494
+ def initialize(type_name:, member:)
495
+ @type_name = type_name
496
+ @member = member
497
+
498
+ super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member.name}` in the definition of `#{type_name}`"
499
+ end
500
+
501
+ def location
502
+ member.location
503
+ end
504
+
505
+ def self.check!(type_name:, env:, member:)
506
+ if env.class_decl?(member.name)
507
+ raise new(type_name: type_name, member: member)
508
+ end
509
+ end
510
+
511
+ private
512
+
513
+ def mixin_name
514
+ case member
515
+ when AST::Members::Prepend
516
+ "prepend"
517
+ when AST::Members::Include
518
+ "include"
519
+ when AST::Members::Extend
520
+ "extend"
521
+ else
522
+ raise
523
+ end
524
+ end
525
+ end
526
+
527
+ class RecursiveTypeAliasError < BaseError
528
+ include DetailedMessageable
529
+
530
+ attr_reader :alias_names
531
+ attr_reader :location
532
+
533
+ def initialize(alias_names:, location:)
534
+ @alias_names = alias_names
535
+ @location = location
536
+
537
+ super "#{Location.to_string location}: Recursive type alias definition found for: #{name}"
538
+ end
539
+
540
+ def name
541
+ @alias_names.map(&:name).join(', ')
542
+ end
543
+ end
544
+
545
+ class NonregularTypeAliasError < BaseError
546
+ include DetailedMessageable
547
+
548
+ attr_reader :diagnostic
549
+ attr_reader :location
550
+
551
+ def initialize(diagnostic:, location:)
552
+ @diagnostic = diagnostic
553
+ @location = location
554
+
555
+ super "#{Location.to_string location}: Nonregular generic type alias is prohibited: #{diagnostic.type_name}, #{diagnostic.nonregular_type}"
556
+ end
557
+ end
558
+
559
+ class CyclicTypeParameterBound < BaseError
560
+ include DetailedMessageable
561
+
562
+ attr_reader :params, :type_name, :method_name, :location
563
+
564
+ def initialize(type_name:, method_name:, params:, location:)
565
+ @type_name = type_name
566
+ @method_name = method_name
567
+ @params = params
568
+ @location = location
569
+
570
+ super "#{Location.to_string(location)}: Cyclic type parameter bound is prohibited"
571
+ end
572
+ end
573
+
574
+ class InconsistentClassModuleAliasError < BaseError
575
+ include DetailedMessageable
576
+
577
+ attr_reader :alias_entry
578
+
579
+ def initialize(entry)
580
+ @alias_entry = entry
581
+
582
+ expected_kind, actual_kind =
583
+ case entry
584
+ when Environment::ModuleAliasEntry
585
+ ["module", "class"]
586
+ when Environment::ClassAliasEntry
587
+ ["class", "module"]
588
+ end
589
+
590
+ super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{expected_kind} `#{entry.decl.new_name}` cannot be an alias of a #{actual_kind} `#{entry.decl.old_name}`"
591
+ end
592
+
593
+ def location
594
+ @alias_entry.decl.location
595
+ end
596
+ end
597
+
598
+ class CyclicClassAliasDefinitionError < BaseError
599
+ include DetailedMessageable
600
+
601
+ attr_reader :alias_entry
602
+
603
+ def initialize(entry)
604
+ @alias_entry = entry
605
+
606
+ super "#{Location.to_string(entry.decl.location&.[](:old_name))}: A #{alias_entry.decl.new_name} is a cyclic definition"
607
+ end
608
+
609
+ def location
610
+ @alias_entry.decl.location
611
+ end
612
+ end
613
+
614
+ class WillSyntaxError < DefinitionError
615
+ include DetailedMessageable
616
+
617
+ attr_reader :location
618
+
619
+ def initialize(message, location:)
620
+ super "#{Location.to_string(location)}: #{message}"
621
+ @location = location
622
+ end
623
+ end
624
+
625
+ class TypeParamDefaultReferenceError < DefinitionError
626
+ include DetailedMessageable
627
+
628
+ attr_reader :type_param
629
+ attr_reader :location
630
+
631
+ def initialize(type_param, location:)
632
+ super "#{Location.to_string(location)}: the default of #{type_param.name} cannot include optional type parameter"
633
+ @location = location
634
+ @type_param = type_param
635
+ end
636
+
637
+ def self.check!(type_params)
638
+ if errors = AST::TypeParam.validate(type_params)
639
+ error = errors[0] or raise
640
+ error.default_type or raise
641
+ raise new(error, location: error.default_type.location)
642
+ end
643
+ end
644
+ end
645
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Factory
5
+ def type_name(string)
6
+ absolute = string.start_with?("::")
7
+
8
+ *path, name = string.delete_prefix("::").split("::").map(&:to_sym)
9
+
10
+ name or raise
11
+
12
+ TypeName.new(
13
+ name: name,
14
+ namespace: Namespace.new(path: path, absolute: absolute)
15
+ )
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module FileFinder
5
+ module_function
6
+
7
+ def self.each_file(path, immediate: nil, skip_hidden:, &block)
8
+ return enum_for((__method__ or raise), path, immediate: immediate, skip_hidden: skip_hidden) unless block
9
+
10
+ case
11
+ when path.file?
12
+ yield path
13
+
14
+ when path.directory?
15
+ paths = Pathname.glob("#{path}/**/*.rbs")
16
+
17
+ if skip_hidden
18
+ paths.select! do |child|
19
+ child.relative_path_from(path).ascend.drop(1).none? { _1.basename.to_s.start_with?("_") }
20
+ end
21
+ end
22
+ paths.sort_by!(&:to_s)
23
+
24
+ paths.each(&block)
25
+ end
26
+ end
27
+ end
28
+ end