rbs 2.8.4 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -4
  3. data/.github/workflows/comments.yml +11 -11
  4. data/.github/workflows/dependabot.yml +30 -0
  5. data/.github/workflows/ruby.yml +40 -49
  6. data/.github/workflows/typecheck.yml +36 -0
  7. data/.github/workflows/windows.yml +28 -0
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +42 -2
  10. data/CHANGELOG.md +845 -1
  11. data/README.md +64 -4
  12. data/Rakefile +198 -18
  13. data/Steepfile +11 -11
  14. data/config.yml +311 -0
  15. data/core/array.rbs +2189 -1914
  16. data/core/basic_object.rbs +59 -84
  17. data/core/binding.rbs +7 -69
  18. data/core/builtin.rbs +210 -11
  19. data/core/class.rbs +37 -0
  20. data/core/comparable.rbs +23 -25
  21. data/core/complex.rbs +449 -227
  22. data/core/constants.rbs +29 -21
  23. data/core/data.rbs +415 -0
  24. data/core/dir.rbs +698 -415
  25. data/core/encoding.rbs +468 -843
  26. data/core/enumerable.rbs +495 -455
  27. data/core/enumerator/product.rbs +92 -0
  28. data/core/enumerator.rbs +106 -9
  29. data/core/env.rbs +1 -1
  30. data/core/errno.rbs +506 -605
  31. data/core/errors.rbs +15 -17
  32. data/core/exception.rbs +361 -145
  33. data/core/false_class.rbs +39 -26
  34. data/core/fiber.rbs +121 -14
  35. data/core/file.rbs +1262 -320
  36. data/core/file_test.rbs +62 -45
  37. data/core/float.rbs +187 -208
  38. data/core/gc.rbs +446 -196
  39. data/core/global_variables.rbs +29 -29
  40. data/core/hash.rbs +242 -349
  41. data/core/integer.rbs +246 -308
  42. data/core/io/buffer.rbs +373 -122
  43. data/core/io/wait.rbs +29 -17
  44. data/core/io.rbs +1881 -1518
  45. data/core/kernel.rbs +2116 -1538
  46. data/core/marshal.rbs +24 -14
  47. data/core/match_data.rbs +413 -166
  48. data/core/math.rbs +531 -291
  49. data/core/method.rbs +101 -32
  50. data/core/module.rbs +228 -64
  51. data/core/nil_class.rbs +106 -47
  52. data/core/numeric.rbs +206 -292
  53. data/core/object.rbs +73 -1168
  54. data/core/object_space/weak_key_map.rbs +166 -0
  55. data/core/object_space.rbs +5 -3
  56. data/core/proc.rbs +280 -39
  57. data/core/process.rbs +1318 -658
  58. data/core/ractor.rbs +200 -134
  59. data/core/random.rbs +21 -4
  60. data/core/range.rbs +309 -153
  61. data/core/rational.rbs +4 -12
  62. data/core/rb_config.rbs +64 -43
  63. data/core/rbs/unnamed/argf.rbs +411 -147
  64. data/core/rbs/unnamed/env_class.rbs +137 -253
  65. data/core/rbs/unnamed/random.rbs +49 -26
  66. data/core/refinement.rbs +16 -1
  67. data/core/regexp.rbs +1568 -862
  68. data/core/ruby_vm.rbs +719 -7
  69. data/core/rubygems/config_file.rbs +3 -0
  70. data/core/rubygems/errors.rbs +69 -6
  71. data/core/rubygems/rubygems.rbs +71 -17
  72. data/core/rubygems/version.rbs +11 -7
  73. data/{stdlib/set/0 → core}/set.rbs +80 -91
  74. data/core/signal.rbs +14 -8
  75. data/core/string.rbs +1732 -1607
  76. data/core/struct.rbs +467 -95
  77. data/core/symbol.rbs +215 -245
  78. data/core/thread.rbs +133 -89
  79. data/core/thread_group.rbs +9 -9
  80. data/core/time.rbs +1141 -841
  81. data/core/trace_point.rbs +181 -121
  82. data/core/true_class.rbs +58 -32
  83. data/core/unbound_method.rbs +103 -30
  84. data/core/warning.rbs +50 -5
  85. data/docs/CONTRIBUTING.md +1 -1
  86. data/docs/architecture.md +110 -0
  87. data/docs/collection.md +59 -5
  88. data/docs/data_and_struct.md +86 -0
  89. data/docs/gem.md +57 -0
  90. data/docs/rbs_by_example.md +16 -35
  91. data/docs/repo.md +1 -1
  92. data/docs/sigs.md +7 -7
  93. data/docs/stdlib.md +63 -5
  94. data/docs/syntax.md +255 -61
  95. data/docs/tools.md +1 -0
  96. data/ext/rbs_extension/extconf.rb +10 -0
  97. data/ext/rbs_extension/lexer.c +1741 -1548
  98. data/ext/rbs_extension/lexer.h +11 -1
  99. data/ext/rbs_extension/lexer.re +12 -6
  100. data/ext/rbs_extension/lexstate.c +26 -3
  101. data/ext/rbs_extension/location.c +119 -111
  102. data/ext/rbs_extension/location.h +32 -7
  103. data/ext/rbs_extension/main.c +3 -0
  104. data/ext/rbs_extension/parser.c +883 -481
  105. data/ext/rbs_extension/parserstate.c +65 -25
  106. data/ext/rbs_extension/parserstate.h +13 -3
  107. data/ext/rbs_extension/rbs_extension.h +1 -10
  108. data/ext/rbs_extension/unescape.c +7 -47
  109. data/goodcheck.yml +2 -2
  110. data/{ext/rbs_extension → include/rbs}/constants.h +26 -15
  111. data/include/rbs/ruby_objs.h +72 -0
  112. data/include/rbs.h +7 -0
  113. data/lib/rbs/annotate/annotations.rb +3 -3
  114. data/lib/rbs/annotate/formatter.rb +13 -3
  115. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  116. data/lib/rbs/annotate/rdoc_source.rb +12 -3
  117. data/lib/rbs/ast/declarations.rb +85 -2
  118. data/lib/rbs/ast/directives.rb +39 -0
  119. data/lib/rbs/ast/members.rb +49 -15
  120. data/lib/rbs/ast/type_param.rb +104 -15
  121. data/lib/rbs/ast/visitor.rb +137 -0
  122. data/lib/rbs/buffer.rb +5 -0
  123. data/lib/rbs/cli/colored_io.rb +48 -0
  124. data/lib/rbs/cli/diff.rb +83 -0
  125. data/lib/rbs/cli/validate.rb +356 -0
  126. data/lib/rbs/cli.rb +253 -143
  127. data/lib/rbs/collection/cleaner.rb +8 -1
  128. data/lib/rbs/collection/config/lockfile.rb +92 -0
  129. data/lib/rbs/collection/config/lockfile_generator.rb +154 -65
  130. data/lib/rbs/collection/config.rb +19 -46
  131. data/lib/rbs/collection/installer.rb +12 -13
  132. data/lib/rbs/collection/sources/base.rb +2 -2
  133. data/lib/rbs/collection/sources/git.rb +146 -69
  134. data/lib/rbs/collection/sources/local.rb +81 -0
  135. data/lib/rbs/collection/sources/rubygems.rb +10 -12
  136. data/lib/rbs/collection/sources/stdlib.rb +14 -13
  137. data/lib/rbs/collection/sources.rb +15 -2
  138. data/lib/rbs/collection.rb +2 -1
  139. data/lib/rbs/definition.rb +13 -16
  140. data/lib/rbs/definition_builder/ancestor_builder.rb +100 -24
  141. data/lib/rbs/definition_builder/method_builder.rb +4 -4
  142. data/lib/rbs/definition_builder.rb +489 -584
  143. data/lib/rbs/diff.rb +125 -0
  144. data/lib/rbs/environment/use_map.rb +77 -0
  145. data/lib/rbs/environment.rb +406 -105
  146. data/lib/rbs/environment_loader.rb +48 -44
  147. data/lib/rbs/environment_walker.rb +1 -1
  148. data/lib/rbs/errors.rb +175 -56
  149. data/lib/rbs/file_finder.rb +28 -0
  150. data/lib/rbs/location_aux.rb +8 -7
  151. data/lib/rbs/locator.rb +37 -15
  152. data/lib/rbs/method_type.rb +23 -0
  153. data/lib/rbs/namespace.rb +1 -0
  154. data/lib/rbs/parser/lex_result.rb +15 -0
  155. data/lib/rbs/parser/token.rb +23 -0
  156. data/lib/rbs/parser_aux.rb +22 -13
  157. data/lib/rbs/prototype/helpers.rb +48 -22
  158. data/lib/rbs/prototype/node_usage.rb +99 -0
  159. data/lib/rbs/prototype/rb.rb +125 -31
  160. data/lib/rbs/prototype/rbi.rb +49 -36
  161. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  162. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  163. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  164. data/lib/rbs/prototype/runtime.rb +273 -159
  165. data/lib/rbs/resolver/constant_resolver.rb +24 -8
  166. data/lib/rbs/resolver/type_name_resolver.rb +41 -7
  167. data/lib/rbs/sorter.rb +153 -123
  168. data/lib/rbs/substitution.rb +19 -0
  169. data/lib/rbs/subtractor.rb +201 -0
  170. data/lib/rbs/test/errors.rb +24 -11
  171. data/lib/rbs/test/guaranteed.rb +30 -0
  172. data/lib/rbs/test/hook.rb +45 -40
  173. data/lib/rbs/test/setup.rb +1 -1
  174. data/lib/rbs/test/tester.rb +1 -1
  175. data/lib/rbs/test/type_check.rb +120 -23
  176. data/lib/rbs/test.rb +6 -3
  177. data/lib/rbs/type_alias_dependency.rb +13 -3
  178. data/lib/rbs/type_alias_regularity.rb +21 -14
  179. data/lib/rbs/type_name.rb +18 -13
  180. data/lib/rbs/types.rb +352 -18
  181. data/lib/rbs/unit_test/convertibles.rb +176 -0
  182. data/lib/rbs/unit_test/spy.rb +136 -0
  183. data/lib/rbs/unit_test/type_assertions.rb +341 -0
  184. data/lib/rbs/unit_test/with_aliases.rb +143 -0
  185. data/lib/rbs/unit_test.rb +6 -0
  186. data/lib/rbs/validator.rb +55 -30
  187. data/lib/rbs/variance_calculator.rb +26 -23
  188. data/lib/rbs/vendorer.rb +3 -3
  189. data/lib/rbs/version.rb +1 -1
  190. data/lib/rbs/writer.rb +69 -22
  191. data/lib/rbs.rb +7 -2
  192. data/lib/rdoc/discover.rb +1 -1
  193. data/lib/rdoc_plugin/parser.rb +5 -5
  194. data/rbs.gemspec +12 -2
  195. data/schema/decls.json +1 -1
  196. data/schema/members.json +15 -10
  197. data/sig/ancestor_builder.rbs +4 -0
  198. data/sig/ancestor_graph.rbs +22 -2
  199. data/sig/annotate/formatter.rbs +2 -2
  200. data/sig/annotate/rdoc_annotater.rbs +1 -1
  201. data/sig/cli/colored_io.rbs +15 -0
  202. data/sig/cli/diff.rbs +21 -0
  203. data/sig/cli/validate.rbs +43 -0
  204. data/sig/cli.rbs +4 -0
  205. data/sig/collection/config/lockfile.rbs +74 -0
  206. data/sig/collection/config/lockfile_generator.rbs +66 -0
  207. data/sig/collection/config.rbs +5 -48
  208. data/sig/collection/installer.rbs +1 -1
  209. data/sig/collection/sources.rbs +105 -33
  210. data/sig/constant.rbs +1 -1
  211. data/sig/declarations.rbs +42 -3
  212. data/sig/definition.rbs +26 -10
  213. data/sig/definition_builder.rbs +103 -81
  214. data/sig/diff.rbs +28 -0
  215. data/sig/directives.rbs +61 -0
  216. data/sig/environment.rbs +175 -29
  217. data/sig/environment_loader.rbs +20 -18
  218. data/sig/errors.rbs +123 -2
  219. data/sig/file_finder.rbs +28 -0
  220. data/sig/location.rbs +0 -3
  221. data/sig/locator.rbs +14 -2
  222. data/sig/manifest.yaml +0 -1
  223. data/sig/members.rbs +32 -9
  224. data/sig/method_types.rbs +10 -4
  225. data/sig/namespace.rbs +2 -3
  226. data/sig/parser.rbs +55 -16
  227. data/sig/prototype/helpers.rbs +4 -0
  228. data/sig/prototype/node_usage.rbs +20 -0
  229. data/sig/prototype/rb.rbs +10 -2
  230. data/sig/prototype/rbi.rbs +2 -0
  231. data/sig/prototype/runtime.rbs +182 -0
  232. data/sig/rbs.rbs +1 -1
  233. data/sig/rdoc/rbs.rbs +4 -0
  234. data/sig/repository.rbs +7 -5
  235. data/sig/resolver/constant_resolver.rbs +3 -4
  236. data/sig/resolver/context.rbs +1 -1
  237. data/sig/resolver/type_name_resolver.rbs +5 -1
  238. data/sig/shims/bundler.rbs +38 -0
  239. data/sig/shims/rubygems.rbs +19 -0
  240. data/sig/sorter.rbs +23 -5
  241. data/sig/substitution.rbs +6 -0
  242. data/sig/subtractor.rbs +37 -0
  243. data/sig/test/errors.rbs +52 -0
  244. data/sig/test/guranteed.rbs +9 -0
  245. data/sig/test/type_check.rbs +19 -0
  246. data/sig/test.rbs +82 -0
  247. data/sig/type_alias_dependency.rbs +31 -0
  248. data/sig/type_alias_regularity.rbs +12 -6
  249. data/sig/type_param.rbs +45 -9
  250. data/sig/typename.rbs +8 -5
  251. data/sig/types.rbs +119 -12
  252. data/sig/unit_test/convertibles.rbs +154 -0
  253. data/sig/unit_test/spy.rbs +28 -0
  254. data/sig/unit_test/type_assertions.rbs +194 -0
  255. data/sig/unit_test/with_aliases.rbs +136 -0
  256. data/sig/use_map.rbs +35 -0
  257. data/sig/validator.rbs +12 -5
  258. data/sig/variance_calculator.rbs +3 -1
  259. data/sig/vendorer.rbs +1 -1
  260. data/sig/visitor.rbs +47 -0
  261. data/sig/writer.rbs +6 -2
  262. data/src/constants.c +153 -0
  263. data/src/ruby_objs.c +793 -0
  264. data/stdlib/base64/0/base64.rbs +298 -45
  265. data/stdlib/benchmark/0/benchmark.rbs +12 -3
  266. data/stdlib/bigdecimal/0/big_decimal.rbs +62 -198
  267. data/stdlib/cgi/0/core.rbs +68 -15
  268. data/stdlib/cgi/0/manifest.yaml +1 -0
  269. data/stdlib/coverage/0/coverage.rbs +50 -11
  270. data/stdlib/csv/0/csv.rbs +90 -119
  271. data/stdlib/csv/0/manifest.yaml +1 -0
  272. data/stdlib/date/0/date.rbs +806 -735
  273. data/stdlib/date/0/date_time.rbs +70 -211
  274. data/stdlib/dbm/0/dbm.rbs +0 -2
  275. data/stdlib/delegate/0/delegator.rbs +184 -0
  276. data/stdlib/delegate/0/kernel.rbs +47 -0
  277. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  278. data/stdlib/did_you_mean/0/did_you_mean.rbs +3 -8
  279. data/stdlib/digest/0/digest.rbs +48 -35
  280. data/stdlib/erb/0/erb.rbs +15 -39
  281. data/stdlib/etc/0/etc.rbs +174 -54
  282. data/stdlib/fileutils/0/fileutils.rbs +1234 -385
  283. data/stdlib/forwardable/0/forwardable.rbs +4 -4
  284. data/stdlib/io-console/0/io-console.rbs +82 -17
  285. data/stdlib/ipaddr/0/ipaddr.rbs +11 -6
  286. data/stdlib/json/0/json.rbs +434 -151
  287. data/stdlib/kconv/0/kconv.rbs +166 -0
  288. data/stdlib/logger/0/formatter.rbs +0 -2
  289. data/stdlib/logger/0/log_device.rbs +1 -3
  290. data/stdlib/logger/0/logger.rbs +465 -328
  291. data/stdlib/minitest/0/kernel.rbs +2 -2
  292. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +4 -1
  293. data/stdlib/minitest/0/minitest/assertion.rbs +1 -0
  294. data/stdlib/minitest/0/minitest/assertions.rbs +58 -13
  295. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +7 -0
  296. data/stdlib/minitest/0/minitest/bench_spec.rbs +8 -8
  297. data/stdlib/minitest/0/minitest/benchmark.rbs +17 -16
  298. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  299. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  300. data/stdlib/minitest/0/minitest/mock.rbs +9 -5
  301. data/stdlib/minitest/0/minitest/parallel/executor.rbs +4 -0
  302. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +0 -1
  303. data/stdlib/minitest/0/minitest/pride_io.rbs +8 -0
  304. data/stdlib/minitest/0/minitest/pride_lol.rbs +2 -0
  305. data/stdlib/minitest/0/minitest/progress_reporter.rbs +1 -1
  306. data/stdlib/minitest/0/minitest/reportable.rbs +2 -0
  307. data/stdlib/minitest/0/minitest/runnable.rbs +33 -1
  308. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +1 -1
  309. data/stdlib/minitest/0/minitest/spec/dsl.rbs +10 -6
  310. data/stdlib/minitest/0/minitest/spec.rbs +1 -1
  311. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +5 -0
  312. data/stdlib/minitest/0/minitest/summary_reporter.rbs +0 -7
  313. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +7 -7
  314. data/stdlib/minitest/0/minitest/test.rbs +7 -14
  315. data/stdlib/minitest/0/minitest/unexpected_error.rbs +2 -0
  316. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  317. data/stdlib/minitest/0/minitest/unit.rbs +1 -2
  318. data/stdlib/minitest/0/minitest.rbs +41 -892
  319. data/stdlib/monitor/0/monitor.rbs +91 -10
  320. data/stdlib/mutex_m/0/mutex_m.rbs +0 -2
  321. data/stdlib/net-http/0/manifest.yaml +1 -1
  322. data/stdlib/net-http/0/net-http.rbs +3858 -964
  323. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  324. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  325. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  326. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  327. data/stdlib/nkf/0/nkf.rbs +35 -5
  328. data/stdlib/objspace/0/objspace.rbs +40 -18
  329. data/stdlib/observable/0/observable.rbs +217 -0
  330. data/stdlib/open-uri/0/manifest.yaml +4 -0
  331. data/stdlib/open-uri/0/open-uri.rbs +393 -0
  332. data/stdlib/open3/0/open3.rbs +147 -0
  333. data/stdlib/openssl/0/manifest.yaml +1 -0
  334. data/stdlib/openssl/0/openssl.rbs +681 -316
  335. data/stdlib/optparse/0/optparse.rbs +100 -65
  336. data/stdlib/pathname/0/pathname.rbs +24 -15
  337. data/stdlib/pp/0/manifest.yaml +2 -0
  338. data/stdlib/pp/0/pp.rbs +300 -0
  339. data/stdlib/prettyprint/0/prettyprint.rbs +2 -6
  340. data/stdlib/pstore/0/pstore.rbs +370 -156
  341. data/stdlib/psych/0/core_ext.rbs +12 -0
  342. data/stdlib/{yaml → psych}/0/dbm.rbs +3 -3
  343. data/stdlib/psych/0/manifest.yaml +3 -0
  344. data/stdlib/psych/0/psych.rbs +402 -0
  345. data/stdlib/{yaml → psych}/0/store.rbs +2 -2
  346. data/stdlib/pty/0/pty.rbs +63 -11
  347. data/stdlib/rdoc/0/code_object.rbs +51 -0
  348. data/stdlib/rdoc/0/comment.rbs +59 -0
  349. data/stdlib/rdoc/0/context.rbs +153 -0
  350. data/stdlib/rdoc/0/markup.rbs +117 -0
  351. data/stdlib/rdoc/0/parser.rbs +56 -0
  352. data/stdlib/rdoc/0/rdoc.rbs +13 -380
  353. data/stdlib/rdoc/0/ri.rbs +17 -0
  354. data/stdlib/rdoc/0/store.rbs +48 -0
  355. data/stdlib/rdoc/0/top_level.rbs +97 -0
  356. data/stdlib/resolv/0/resolv.rbs +16 -79
  357. data/stdlib/ripper/0/ripper.rbs +1648 -0
  358. data/stdlib/securerandom/0/securerandom.rbs +7 -2
  359. data/stdlib/shellwords/0/shellwords.rbs +11 -12
  360. data/stdlib/singleton/0/singleton.rbs +0 -3
  361. data/stdlib/socket/0/addrinfo.rbs +13 -18
  362. data/stdlib/socket/0/basic_socket.rbs +5 -10
  363. data/stdlib/socket/0/ip_socket.rbs +0 -2
  364. data/stdlib/socket/0/socket.rbs +77 -46
  365. data/stdlib/socket/0/tcp_server.rbs +0 -5
  366. data/stdlib/socket/0/tcp_socket.rbs +36 -3
  367. data/stdlib/socket/0/udp_socket.rbs +4 -5
  368. data/stdlib/socket/0/unix_server.rbs +0 -5
  369. data/stdlib/socket/0/unix_socket.rbs +2 -4
  370. data/{core/string_io.rbs → stdlib/stringio/0/stringio.rbs} +188 -107
  371. data/stdlib/strscan/0/string_scanner.rbs +1269 -425
  372. data/stdlib/tempfile/0/tempfile.rbs +224 -61
  373. data/stdlib/time/0/time.rbs +48 -35
  374. data/stdlib/timeout/0/timeout.rbs +17 -8
  375. data/stdlib/tmpdir/0/tmpdir.rbs +10 -3
  376. data/stdlib/tsort/0/tsort.rbs +0 -4
  377. data/stdlib/uri/0/common.rbs +271 -144
  378. data/stdlib/uri/0/file.rbs +5 -0
  379. data/stdlib/uri/0/ftp.rbs +1 -1
  380. data/stdlib/uri/0/generic.rbs +26 -22
  381. data/stdlib/uri/0/http.rbs +4 -4
  382. data/stdlib/uri/0/ldap.rbs +1 -1
  383. data/stdlib/uri/0/mailto.rbs +84 -0
  384. data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
  385. data/stdlib/yaml/0/manifest.yaml +1 -2
  386. data/stdlib/yaml/0/yaml.rbs +1 -199
  387. data/stdlib/zlib/0/buf_error.rbs +10 -0
  388. data/stdlib/zlib/0/data_error.rbs +10 -0
  389. data/stdlib/zlib/0/deflate.rbs +210 -0
  390. data/stdlib/zlib/0/error.rbs +20 -0
  391. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  392. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  393. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  394. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  395. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  396. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  397. data/stdlib/zlib/0/gzip_writer.rbs +166 -0
  398. data/stdlib/zlib/0/inflate.rbs +180 -0
  399. data/stdlib/zlib/0/mem_error.rbs +10 -0
  400. data/stdlib/zlib/0/need_dict.rbs +13 -0
  401. data/stdlib/zlib/0/stream_end.rbs +11 -0
  402. data/stdlib/zlib/0/stream_error.rbs +11 -0
  403. data/stdlib/zlib/0/version_error.rbs +11 -0
  404. data/stdlib/zlib/0/zlib.rbs +1 -3
  405. data/stdlib/zlib/0/zstream.rbs +200 -0
  406. data/templates/include/rbs/constants.h.erb +20 -0
  407. data/templates/include/rbs/ruby_objs.h.erb +10 -0
  408. data/templates/src/constants.c.erb +36 -0
  409. data/templates/src/ruby_objs.c.erb +27 -0
  410. data/templates/template.rb +122 -0
  411. metadata +136 -36
  412. data/Gemfile +0 -33
  413. data/Gemfile.lock +0 -118
  414. data/core/deprecated.rbs +0 -9
  415. data/ext/rbs_extension/constants.c +0 -135
  416. data/ext/rbs_extension/ruby_objs.c +0 -525
  417. data/ext/rbs_extension/ruby_objs.h +0 -43
  418. data/lib/rbs/constant_table.rb +0 -167
  419. data/lib/rbs/parser_compat/lexer_error.rb +0 -6
  420. data/lib/rbs/parser_compat/located_value.rb +0 -7
  421. data/lib/rbs/parser_compat/semantics_error.rb +0 -6
  422. data/lib/rbs/parser_compat/syntax_error.rb +0 -6
  423. data/lib/rbs/test/spy.rb +0 -6
  424. data/lib/rbs/type_name_resolver.rb +0 -67
  425. data/sig/constant_table.rbs +0 -30
  426. data/sig/shims/abstract_syntax_tree.rbs +0 -25
  427. data/sig/shims/pp.rbs +0 -3
  428. data/sig/shims/ripper.rbs +0 -8
  429. data/sig/shims.rbs +0 -69
  430. data/sig/type_name_resolver.rbs +0 -26
  431. data/stdlib/minitest/0/manifest.yaml +0 -2
  432. data/stdlib/prime/0/integer-extension.rbs +0 -41
  433. data/stdlib/prime/0/manifest.yaml +0 -2
  434. data/stdlib/prime/0/prime.rbs +0 -372
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ module Directives
6
+ class Base
7
+ end
8
+
9
+ class Use < Base
10
+ class SingleClause
11
+ attr_reader :type_name, :new_name, :location
12
+
13
+ def initialize(type_name:, new_name:, location:)
14
+ @type_name = type_name
15
+ @new_name = new_name
16
+ @location = location
17
+ end
18
+ end
19
+
20
+ class WildcardClause
21
+ attr_reader :namespace, :location
22
+
23
+ def initialize(namespace:, location:)
24
+ @location = location
25
+ @namespace = namespace
26
+ end
27
+ end
28
+
29
+ attr_reader :clauses, :location
30
+
31
+ def initialize(clauses:, location:)
32
+ @clauses = clauses
33
+ @location = location
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -7,23 +7,57 @@ module RBS
7
7
  end
8
8
 
9
9
  class MethodDefinition < Base
10
+ class Overload
11
+ attr_reader :method_type, :annotations
12
+
13
+ def initialize(method_type:, annotations:)
14
+ @method_type = method_type
15
+ @annotations = annotations
16
+ end
17
+
18
+ def ==(other)
19
+ other.is_a?(Overload) && other.method_type == method_type && other.annotations == annotations
20
+ end
21
+
22
+ def hash
23
+ method_type.hash ^ annotations.hash
24
+ end
25
+
26
+ alias eql? ==
27
+
28
+ def update(annotations: self.annotations, method_type: self.method_type)
29
+ Overload.new(annotations: annotations, method_type: method_type)
30
+ end
31
+
32
+ def sub(subst)
33
+ update(method_type: self.method_type.sub(subst))
34
+ end
35
+
36
+ def to_json(state = _ = nil)
37
+ {
38
+ annotations: annotations,
39
+ method_type: method_type
40
+ }.to_json(state)
41
+ end
42
+ end
43
+
10
44
  attr_reader :name
11
45
  attr_reader :kind
12
- attr_reader :types
46
+ attr_reader :overloads
13
47
  attr_reader :annotations
14
48
  attr_reader :location
15
49
  attr_reader :comment
16
- attr_reader :overload
50
+ attr_reader :overloading
17
51
  attr_reader :visibility
18
52
 
19
- def initialize(name:, kind:, types:, annotations:, location:, comment:, overload:, visibility: nil)
53
+ def initialize(name:, kind:, overloads:, annotations:, location:, comment:, overloading:, visibility:)
20
54
  @name = name
21
55
  @kind = kind
22
- @types = types
56
+ @overloads = overloads
23
57
  @annotations = annotations
24
58
  @location = location
25
59
  @comment = comment
26
- @overload = overload ? true : false
60
+ @overloading = overloading
27
61
  @visibility = visibility
28
62
  end
29
63
 
@@ -31,15 +65,15 @@ module RBS
31
65
  other.is_a?(MethodDefinition) &&
32
66
  other.name == name &&
33
67
  other.kind == kind &&
34
- other.types == types &&
35
- other.overload == overload &&
68
+ other.overloads == overloads &&
69
+ other.overloading? == overloading? &&
36
70
  other.visibility == visibility
37
71
  end
38
72
 
39
73
  alias eql? ==
40
74
 
41
75
  def hash
42
- name.hash ^ kind.hash ^ types.hash ^ overload.hash
76
+ name.hash ^ kind.hash ^ overloads.hash ^ overloading?.hash ^ visibility.hash
43
77
  end
44
78
 
45
79
  def instance?
@@ -50,19 +84,19 @@ module RBS
50
84
  kind == :singleton || kind == :singleton_instance
51
85
  end
52
86
 
53
- def overload?
54
- overload
87
+ def overloading?
88
+ overloading
55
89
  end
56
90
 
57
- def update(name: self.name, kind: self.kind, types: self.types, annotations: self.annotations, location: self.location, comment: self.comment, overload: self.overload, visibility: self.visibility)
91
+ def update(name: self.name, kind: self.kind, overloads: self.overloads, annotations: self.annotations, location: self.location, comment: self.comment, overloading: self.overloading?, visibility: self.visibility)
58
92
  self.class.new(
59
93
  name: name,
60
94
  kind: kind,
61
- types: types,
95
+ overloads: overloads,
62
96
  annotations: annotations,
63
97
  location: location,
64
98
  comment: comment,
65
- overload: overload,
99
+ overloading: overloading,
66
100
  visibility: visibility
67
101
  )
68
102
  end
@@ -72,11 +106,11 @@ module RBS
72
106
  member: :method_definition,
73
107
  name: name,
74
108
  kind: kind,
75
- types: types,
109
+ overloads: overloads,
76
110
  annotations: annotations,
77
111
  location: location,
78
112
  comment: comment,
79
- overload: overload,
113
+ overloading: overloading?,
80
114
  visibility: visibility
81
115
  }.to_json(state)
82
116
  end
@@ -3,14 +3,22 @@
3
3
  module RBS
4
4
  module AST
5
5
  class TypeParam
6
- attr_reader :name, :variance, :location, :upper_bound
6
+ attr_reader :name, :variance, :location, :upper_bound_type, :default_type
7
7
 
8
- def initialize(name:, variance:, upper_bound:, location:)
8
+ def initialize(name:, variance:, upper_bound:, location:, default_type: nil)
9
9
  @name = name
10
10
  @variance = variance
11
- @upper_bound = upper_bound
11
+ @upper_bound_type = upper_bound
12
12
  @location = location
13
13
  @unchecked = false
14
+ @default_type = default_type
15
+ end
16
+
17
+ def upper_bound
18
+ case upper_bound_type
19
+ when Types::ClassInstance, Types::ClassSingleton, Types::Interface
20
+ upper_bound_type
21
+ end
14
22
  end
15
23
 
16
24
  def unchecked!(value = true)
@@ -26,14 +34,15 @@ module RBS
26
34
  other.is_a?(TypeParam) &&
27
35
  other.name == name &&
28
36
  other.variance == variance &&
29
- other.upper_bound == upper_bound &&
37
+ other.upper_bound_type == upper_bound_type &&
38
+ other.default_type == default_type &&
30
39
  other.unchecked? == unchecked?
31
40
  end
32
41
 
33
42
  alias eql? ==
34
43
 
35
44
  def hash
36
- self.class.hash ^ name.hash ^ variance.hash ^ upper_bound.hash ^ unchecked?.hash
45
+ self.class.hash ^ name.hash ^ variance.hash ^ upper_bound_type.hash ^ unchecked?.hash ^ default_type.hash
37
46
  end
38
47
 
39
48
  def to_json(state = JSON::State.new)
@@ -42,7 +51,8 @@ module RBS
42
51
  variance: variance,
43
52
  unchecked: unchecked?,
44
53
  location: location,
45
- upper_bound: upper_bound
54
+ upper_bound: upper_bound_type,
55
+ default_type: default_type
46
56
  }.to_json(state)
47
57
  end
48
58
 
@@ -50,21 +60,27 @@ module RBS
50
60
  TypeParam.new(
51
61
  name: name,
52
62
  variance: variance,
53
- upper_bound: upper_bound,
54
- location: location
63
+ upper_bound: upper_bound_type,
64
+ location: location,
65
+ default_type: default_type
55
66
  ).unchecked!(unchecked?)
56
67
  end
57
68
 
58
69
  def map_type(&block)
59
- if b = upper_bound
60
- _upper_bound = yield(b)
70
+ if b = upper_bound_type
71
+ _upper_bound_type = yield(b)
72
+ end
73
+
74
+ if dt = default_type
75
+ _default_type = yield(dt)
61
76
  end
62
77
 
63
78
  TypeParam.new(
64
79
  name: name,
65
80
  variance: variance,
66
- upper_bound: _upper_bound,
67
- location: location
81
+ upper_bound: _upper_bound_type,
82
+ location: location,
83
+ default_type: _default_type
68
84
  ).unchecked!(unchecked?)
69
85
  end
70
86
 
@@ -101,8 +117,9 @@ module RBS
101
117
  TypeParam.new(
102
118
  name: new_name,
103
119
  variance: param.variance,
104
- upper_bound: param.upper_bound&.map_type {|type| type.sub(subst) },
105
- location: param.location
120
+ upper_bound: param.upper_bound_type&.map_type {|type| type.sub(subst) },
121
+ location: param.location,
122
+ default_type: param.default_type&.map_type {|type| type.sub(subst) }
106
123
  ).unchecked!(param.unchecked?)
107
124
  end
108
125
  end
@@ -125,12 +142,84 @@ module RBS
125
142
 
126
143
  s << name.to_s
127
144
 
128
- if type = upper_bound
145
+ if type = upper_bound_type
129
146
  s << " < #{type}"
130
147
  end
131
148
 
149
+ if dt = default_type
150
+ s << " = #{dt}"
151
+ end
152
+
132
153
  s
133
154
  end
155
+
156
+ def self.application(params, args)
157
+ if params.empty?
158
+ return nil
159
+ end
160
+
161
+ optional_params, required_params = params.partition {|param| param.default_type }
162
+
163
+ param_subst = Substitution.new()
164
+ app_subst = Substitution.new()
165
+
166
+ required_params.zip(args.take(required_params.size)).each do |param, arg|
167
+ arg ||= Types::Bases::Any.new(location: nil)
168
+ param_subst.add(from: param.name, to: arg)
169
+ app_subst.add(from: param.name, to: arg)
170
+ end
171
+
172
+ optional_params.each do |param|
173
+ param_subst.add(from: param.name, to: Types::Bases::Any.new(location: nil))
174
+ end
175
+
176
+ optional_params.zip(args.drop(required_params.size)).each do |param, arg|
177
+ if arg
178
+ app_subst.add(from: param.name, to: arg)
179
+ else
180
+ param.default_type or raise
181
+ app_subst.add(from: param.name, to: param.default_type.sub(param_subst))
182
+ end
183
+ end
184
+
185
+ app_subst
186
+ end
187
+
188
+ def self.normalize_args(params, args)
189
+ app = application(params, args) or return []
190
+
191
+ min_count = params.count { _1.default_type.nil? }
192
+ unless min_count <= args.size && args.size <= params.size
193
+ return args
194
+ end
195
+
196
+ params.zip(args).filter_map do |param, arg|
197
+ if arg
198
+ arg
199
+ else
200
+ if param.default_type
201
+ param.default_type.sub(app)
202
+ else
203
+ Types::Bases::Any.new(location: nil)
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+ def self.validate(type_params)
210
+ optionals = type_params.filter {|param| param.default_type }
211
+
212
+ optional_param_names = optionals.map(&:name).sort
213
+
214
+ optionals.filter! do |param|
215
+ default_type = param.default_type or raise
216
+ optional_param_names.any? { default_type.free_variables.include?(_1) }
217
+ end
218
+
219
+ unless optionals.empty?
220
+ optionals
221
+ end
222
+ end
134
223
  end
135
224
  end
136
225
  end
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ module AST
5
+ # The Visitor class implements the Visitor pattern for traversing the RBS Abstract Syntax Tree (AST).
6
+ #
7
+ # It provides methods to visit each type of node in the AST, allowing for custom processing of each node type.
8
+ #
9
+ # This class is designed to be subclassed, with specific visit methods overridden to implement custom behavior for
10
+ # different node types.
11
+ #
12
+ # Example usage:
13
+ #
14
+ # ~~~rb
15
+ # class MyVisitor < RBS::AST::Visitor
16
+ # def visit_declaration_class(node)
17
+ # puts "Visiting class: #{node.name}"
18
+ #
19
+ # super # call `super` to run the default visiting behavior
20
+ # end
21
+ # end
22
+ #
23
+ # visitor = MyVisitor.new
24
+ # visitor.visit(ast_node)
25
+ # ~~~
26
+ class Visitor
27
+ def visit(node)
28
+ case node
29
+ when Declarations::Global
30
+ visit_declaration_global(node)
31
+ when Declarations::Class
32
+ visit_declaration_class(node)
33
+ when Declarations::Module
34
+ visit_declaration_module(node)
35
+ when Declarations::Constant
36
+ visit_declaration_constant(node)
37
+ when Declarations::TypeAlias
38
+ visit_declaration_type_alias(node)
39
+ when Declarations::Interface
40
+ visit_declaration_interface(node)
41
+ when Members::Alias
42
+ visit_member_alias(node)
43
+ when Members::ClassInstanceVariable
44
+ visit_member_class_instance_variable(node)
45
+ when Members::ClassVariable
46
+ visit_member_class_variable(node)
47
+ when Members::InstanceVariable
48
+ visit_member_instance_variable(node)
49
+ when Members::Private
50
+ visit_member_private(node)
51
+ when Members::Public
52
+ visit_member_public(node)
53
+ when Members::MethodDefinition
54
+ visit_member_method_definition(node)
55
+ when Members::AttrReader
56
+ visit_member_attr_reader(node)
57
+ when Members::AttrWriter
58
+ visit_member_attr_writer(node)
59
+ when Members::AttrAccessor
60
+ visit_member_attr_accessor(node)
61
+ when Members::Include
62
+ visit_member_include(node)
63
+ when Members::Prepend
64
+ visit_member_prepend(node)
65
+ when Members::Extend
66
+ visit_member_extend(node)
67
+ end
68
+ end
69
+
70
+ def visit_all(nodes)
71
+ nodes.each do |node|
72
+ visit(node)
73
+ end
74
+ end
75
+
76
+ def visit_declaration_global(node)
77
+ end
78
+
79
+ def visit_declaration_class(node)
80
+ visit_all(node.members)
81
+ end
82
+
83
+ def visit_declaration_module(node)
84
+ visit_all(node.members)
85
+ end
86
+
87
+ def visit_declaration_constant(node)
88
+ end
89
+
90
+ def visit_declaration_type_alias(node)
91
+ end
92
+
93
+ def visit_declaration_interface(node)
94
+ visit_all(node.members)
95
+ end
96
+
97
+ def visit_member_alias(node)
98
+ end
99
+
100
+ def visit_member_class_instance_variable(node)
101
+ end
102
+
103
+ def visit_member_class_variable(node)
104
+ end
105
+
106
+ def visit_member_instance_variable(node)
107
+ end
108
+
109
+ def visit_member_private(node)
110
+ end
111
+
112
+ def visit_member_public(node)
113
+ end
114
+
115
+ def visit_member_method_definition(node)
116
+ end
117
+
118
+ def visit_member_attr_reader(node)
119
+ end
120
+
121
+ def visit_member_attr_writer(node)
122
+ end
123
+
124
+ def visit_member_attr_accessor(node)
125
+ end
126
+
127
+ def visit_member_include(node)
128
+ end
129
+
130
+ def visit_member_prepend(node)
131
+ end
132
+
133
+ def visit_member_extend(node)
134
+ end
135
+ end
136
+ end
137
+ end
data/lib/rbs/buffer.rb CHANGED
@@ -25,6 +25,11 @@ module RBS
25
25
  @ranges << range
26
26
  offset += size
27
27
  end
28
+
29
+ if !content.end_with?("\n") && content.size > 0
30
+ @ranges[-1] = @ranges[-1].begin...(@ranges[-1].end+1)
31
+ end
32
+
28
33
  @ranges
29
34
  end
30
35
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class CLI
5
+ class ColoredIO
6
+ attr_reader :stdout
7
+
8
+ def initialize(stdout:)
9
+ @stdout = stdout
10
+ end
11
+
12
+ def puts_red(string)
13
+ if can_display_colors?
14
+ puts "\e[31m#{string}\e[m"
15
+ else
16
+ puts string
17
+ end
18
+ end
19
+
20
+ def puts_green(string)
21
+ if can_display_colors?
22
+ puts "\e[32m#{string}\e[m"
23
+ else
24
+ puts string
25
+ end
26
+ end
27
+
28
+ def puts(...)
29
+ stdout.puts(...)
30
+ end
31
+
32
+ private
33
+
34
+ # https://github.com/rubygems/rubygems/blob/ed65279100234a17d65d71fe26de5083984ac5b8/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb#L99-L109
35
+ def can_display_colors?
36
+ are_colors_supported? && !are_colors_disabled?
37
+ end
38
+
39
+ def are_colors_supported?
40
+ stdout.tty? && ENV["TERM"] != "dumb"
41
+ end
42
+
43
+ def are_colors_disabled?
44
+ !ENV['NO_COLOR'].nil? && !ENV.fetch('NO_COLOR', '').empty?
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class CLI
5
+ class Diff
6
+ def initialize(argv:, library_options:, stdout: $stdout, stderr: $stderr)
7
+ @format = nil
8
+ @stdout = stdout
9
+ @stderr = stderr
10
+
11
+ # @type var type_name: String?
12
+ type_name = nil
13
+ library_options = library_options
14
+ before_path = [] #: Array[String]
15
+ after_path = [] #: Array[String]
16
+ detail = false
17
+
18
+ opt = OptionParser.new do |o|
19
+ o.banner = <<~HELP
20
+ [Experimental] This command is experimental. API and output compatibility is not guaranteed.
21
+
22
+ Usage:
23
+ rbs diff --format markdown --type-name Foo --before before_sig --after after_sig
24
+
25
+ Print diff for rbs environment dir
26
+
27
+ Examples:
28
+
29
+ # Diff dir1 and dir2 for Foo
30
+ $ rbs diff --format markdown --type-name Foo --before dir1 --after dir2
31
+
32
+ # Confirmation of methods related to Time class added by including stdlib/time
33
+ $ rbs diff --format diff --type-name Time --after stdlib/time
34
+ HELP
35
+ o.on("--format NAME") { |arg| @format = arg }
36
+ o.on("--type-name NAME") { |arg| type_name = arg }
37
+ o.on("--before DIR") { |arg| before_path << arg }
38
+ o.on("--after DIR") { |arg| after_path << arg }
39
+ o.on("--[no-]detail") { |arg| detail = arg }
40
+ end
41
+ opt.parse!(argv)
42
+
43
+ unless @format && type_name && ["markdown", "diff"].include?(@format)
44
+ @stderr.puts opt.banner
45
+ exit 1
46
+ end
47
+
48
+ @diff = RBS::Diff.new(
49
+ type_name: TypeName.parse(type_name).absolute!,
50
+ library_options: library_options,
51
+ after_path: after_path,
52
+ before_path: before_path,
53
+ detail: detail,
54
+ )
55
+ end
56
+
57
+ def run
58
+ public_send("run_#{@format}")
59
+ end
60
+
61
+ def run_diff
62
+ first = true
63
+ io = RBS::CLI::ColoredIO.new(stdout: @stdout)
64
+ @diff.each_diff do |before, after|
65
+ io.puts if !first
66
+ io.puts_red "- #{before}"
67
+ io.puts_green "+ #{after}"
68
+ first = false
69
+ end
70
+ end
71
+
72
+ def run_markdown
73
+ @stdout.puts "| before | after |"
74
+ @stdout.puts "| --- | --- |"
75
+ @diff.each_diff do |before, after|
76
+ before.gsub!("|", "\\|")
77
+ after.gsub!("|", "\\|")
78
+ @stdout.puts "| `#{before}` | `#{after}` |"
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end