rbs 4.0.0.dev.4 → 4.1.0.pre.2

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 (306) hide show
  1. checksums.yaml +4 -4
  2. data/.clang-format +1 -0
  3. data/.github/dependabot.yml +16 -14
  4. data/.github/workflows/bundle-update.yml +63 -0
  5. data/.github/workflows/c-check.yml +21 -11
  6. data/.github/workflows/comments.yml +5 -3
  7. data/.github/workflows/dependabot.yml +2 -2
  8. data/.github/workflows/jruby.yml +67 -0
  9. data/.github/workflows/milestone.yml +83 -0
  10. data/.github/workflows/ruby.yml +63 -24
  11. data/.github/workflows/rust.yml +184 -0
  12. data/.github/workflows/truffleruby.yml +54 -0
  13. data/.github/workflows/typecheck.yml +5 -2
  14. data/.github/workflows/wasm.yml +53 -0
  15. data/.github/workflows/windows.yml +8 -2
  16. data/.gitignore +11 -0
  17. data/.rubocop.yml +1 -1
  18. data/CHANGELOG.md +357 -0
  19. data/README.md +4 -4
  20. data/Rakefile +365 -33
  21. data/Steepfile +8 -0
  22. data/config.yml +450 -24
  23. data/core/array.rbs +443 -363
  24. data/core/basic_object.rbs +9 -8
  25. data/core/binding.rbs +0 -2
  26. data/core/builtin.rbs +9 -8
  27. data/core/class.rbs +11 -8
  28. data/core/comparable.rbs +55 -34
  29. data/core/complex.rbs +104 -78
  30. data/core/dir.rbs +61 -49
  31. data/core/encoding.rbs +12 -15
  32. data/core/enumerable.rbs +288 -196
  33. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  34. data/core/enumerator/product.rbs +5 -5
  35. data/core/enumerator.rbs +91 -28
  36. data/core/errno.rbs +11 -2
  37. data/core/errors.rbs +58 -29
  38. data/core/exception.rbs +13 -13
  39. data/core/fiber.rbs +74 -54
  40. data/core/file.rbs +260 -1151
  41. data/core/file_constants.rbs +463 -0
  42. data/core/file_stat.rbs +534 -0
  43. data/core/file_test.rbs +3 -3
  44. data/core/float.rbs +257 -92
  45. data/core/gc.rbs +425 -281
  46. data/core/hash.rbs +1151 -829
  47. data/core/integer.rbs +156 -195
  48. data/core/io/buffer.rbs +53 -42
  49. data/core/io/wait.rbs +13 -35
  50. data/core/io.rbs +216 -150
  51. data/core/kernel.rbs +239 -163
  52. data/core/marshal.rbs +4 -4
  53. data/core/match_data.rbs +15 -13
  54. data/core/math.rbs +107 -66
  55. data/core/method.rbs +69 -33
  56. data/core/module.rbs +302 -150
  57. data/core/nil_class.rbs +7 -6
  58. data/core/numeric.rbs +77 -63
  59. data/core/object.rbs +9 -11
  60. data/core/object_space/weak_key_map.rbs +7 -7
  61. data/core/object_space.rbs +30 -23
  62. data/core/pathname.rbs +1322 -0
  63. data/core/proc.rbs +95 -58
  64. data/core/process.rbs +222 -202
  65. data/core/ractor.rbs +371 -515
  66. data/core/random.rbs +21 -3
  67. data/core/range.rbs +181 -79
  68. data/core/rational.rbs +60 -89
  69. data/core/rbs/ops.rbs +154 -0
  70. data/core/rbs/unnamed/argf.rbs +63 -56
  71. data/core/rbs/unnamed/env_class.rbs +19 -14
  72. data/core/rbs/unnamed/main_class.rbs +123 -0
  73. data/core/rbs/unnamed/random.rbs +11 -118
  74. data/core/regexp.rbs +258 -214
  75. data/core/ruby.rbs +53 -0
  76. data/core/ruby_vm.rbs +78 -34
  77. data/core/rubygems/config_file.rbs +5 -5
  78. data/core/rubygems/errors.rbs +4 -71
  79. data/core/rubygems/requirement.rbs +5 -5
  80. data/core/rubygems/rubygems.rbs +16 -82
  81. data/core/rubygems/version.rbs +2 -3
  82. data/core/set.rbs +493 -363
  83. data/core/signal.rbs +26 -16
  84. data/core/string.rbs +3234 -1285
  85. data/core/struct.rbs +43 -42
  86. data/core/symbol.rbs +41 -34
  87. data/core/thread.rbs +141 -73
  88. data/core/time.rbs +81 -50
  89. data/core/trace_point.rbs +41 -35
  90. data/core/true_class.rbs +2 -2
  91. data/core/unbound_method.rbs +24 -16
  92. data/core/warning.rbs +7 -7
  93. data/docs/CONTRIBUTING.md +2 -1
  94. data/docs/aliases.md +79 -0
  95. data/docs/collection.md +3 -3
  96. data/docs/config.md +171 -0
  97. data/docs/encoding.md +56 -0
  98. data/docs/gem.md +0 -1
  99. data/docs/inline.md +634 -0
  100. data/docs/rbs_by_example.md +20 -20
  101. data/docs/rust.md +96 -0
  102. data/docs/sigs.md +3 -3
  103. data/docs/syntax.md +48 -18
  104. data/docs/type_fingerprint.md +21 -0
  105. data/docs/wasm_serialization.md +80 -0
  106. data/exe/rbs +1 -1
  107. data/ext/rbs_extension/ast_translation.c +1441 -671
  108. data/ext/rbs_extension/ast_translation.h +7 -0
  109. data/ext/rbs_extension/class_constants.c +18 -2
  110. data/ext/rbs_extension/class_constants.h +9 -0
  111. data/ext/rbs_extension/extconf.rb +6 -1
  112. data/ext/rbs_extension/legacy_location.c +33 -56
  113. data/ext/rbs_extension/legacy_location.h +37 -0
  114. data/ext/rbs_extension/main.c +183 -39
  115. data/include/rbs/ast.h +597 -297
  116. data/include/rbs/defines.h +40 -0
  117. data/include/rbs/lexer.h +31 -11
  118. data/include/rbs/location.h +25 -44
  119. data/include/rbs/parser.h +6 -6
  120. data/include/rbs/serialize.h +39 -0
  121. data/include/rbs/string.h +0 -2
  122. data/include/rbs/util/rbs_allocator.h +34 -13
  123. data/include/rbs/util/rbs_assert.h +12 -1
  124. data/include/rbs/util/rbs_constant_pool.h +0 -3
  125. data/include/rbs/util/rbs_encoding.h +2 -0
  126. data/include/rbs/util/rbs_unescape.h +2 -1
  127. data/include/rbs.h +8 -0
  128. data/lib/rbs/annotate/rdoc_annotator.rb +27 -31
  129. data/lib/rbs/ast/annotation.rb +1 -1
  130. data/lib/rbs/ast/comment.rb +1 -1
  131. data/lib/rbs/ast/declarations.rb +10 -10
  132. data/lib/rbs/ast/members.rb +14 -14
  133. data/lib/rbs/ast/ruby/annotations.rb +335 -3
  134. data/lib/rbs/ast/ruby/comment_block.rb +30 -4
  135. data/lib/rbs/ast/ruby/declarations.rb +209 -4
  136. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  137. data/lib/rbs/ast/ruby/helpers/location_helper.rb +1 -1
  138. data/lib/rbs/ast/ruby/members.rb +571 -22
  139. data/lib/rbs/ast/type_param.rb +24 -4
  140. data/lib/rbs/buffer.rb +66 -24
  141. data/lib/rbs/cli/diff.rb +16 -15
  142. data/lib/rbs/cli/validate.rb +38 -106
  143. data/lib/rbs/cli.rb +55 -24
  144. data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
  145. data/lib/rbs/collection/sources/git.rb +7 -0
  146. data/lib/rbs/definition.rb +1 -1
  147. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  148. data/lib/rbs/definition_builder/method_builder.rb +32 -6
  149. data/lib/rbs/definition_builder.rb +147 -25
  150. data/lib/rbs/diff.rb +7 -1
  151. data/lib/rbs/environment.rb +235 -75
  152. data/lib/rbs/environment_loader.rb +0 -6
  153. data/lib/rbs/errors.rb +27 -18
  154. data/lib/rbs/inline_parser.rb +377 -15
  155. data/lib/rbs/location_aux.rb +1 -1
  156. data/lib/rbs/locator.rb +5 -1
  157. data/lib/rbs/method_type.rb +5 -3
  158. data/lib/rbs/namespace.rb +47 -11
  159. data/lib/rbs/parser_aux.rb +20 -7
  160. data/lib/rbs/prototype/helpers.rb +57 -0
  161. data/lib/rbs/prototype/rb.rb +3 -28
  162. data/lib/rbs/prototype/rbi.rb +3 -20
  163. data/lib/rbs/prototype/runtime.rb +10 -0
  164. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  165. data/lib/rbs/resolver/type_name_resolver.rb +120 -44
  166. data/lib/rbs/rewriter.rb +70 -0
  167. data/lib/rbs/subtractor.rb +3 -1
  168. data/lib/rbs/test/type_check.rb +25 -3
  169. data/lib/rbs/type_name.rb +34 -14
  170. data/lib/rbs/types.rb +88 -78
  171. data/lib/rbs/unit_test/type_assertions.rb +44 -8
  172. data/lib/rbs/validator.rb +2 -2
  173. data/lib/rbs/version.rb +1 -1
  174. data/lib/rbs/wasm/deserializer.rb +213 -0
  175. data/lib/rbs/wasm/location.rb +61 -0
  176. data/lib/rbs/wasm/parser.rb +137 -0
  177. data/lib/rbs/wasm/runtime.rb +217 -0
  178. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  179. data/lib/rbs.rb +13 -2
  180. data/lib/rdoc/discover.rb +1 -1
  181. data/lib/rdoc_plugin/parser.rb +1 -1
  182. data/rbs.gemspec +24 -6
  183. data/schema/typeParam.json +17 -1
  184. data/sig/annotate/rdoc_annotater.rbs +12 -9
  185. data/sig/ast/ruby/annotations.rbs +364 -4
  186. data/sig/ast/ruby/comment_block.rbs +8 -0
  187. data/sig/ast/ruby/declarations.rbs +102 -4
  188. data/sig/ast/ruby/members.rbs +128 -2
  189. data/sig/buffer.rbs +19 -1
  190. data/sig/cli/diff.rbs +5 -11
  191. data/sig/cli/validate.rbs +12 -8
  192. data/sig/cli.rbs +18 -18
  193. data/sig/collection/config/lockfile_generator.rbs +2 -0
  194. data/sig/definition.rbs +6 -1
  195. data/sig/definition_builder.rbs +2 -0
  196. data/sig/environment.rbs +70 -12
  197. data/sig/errors.rbs +13 -14
  198. data/sig/inline_parser.rbs +41 -2
  199. data/sig/locator.rbs +0 -2
  200. data/sig/manifest.yaml +0 -2
  201. data/sig/method_builder.rbs +3 -1
  202. data/sig/namespace.rbs +20 -0
  203. data/sig/parser.rbs +41 -13
  204. data/sig/prototype/helpers.rbs +2 -0
  205. data/sig/resolver/type_name_resolver.rbs +36 -10
  206. data/sig/rewriter.rbs +45 -0
  207. data/sig/source.rbs +3 -3
  208. data/sig/type_param.rbs +13 -8
  209. data/sig/typename.rbs +15 -0
  210. data/sig/types.rbs +6 -7
  211. data/sig/unit_test/spy.rbs +0 -8
  212. data/sig/unit_test/type_assertions.rbs +15 -0
  213. data/sig/wasm/deserializer.rbs +66 -0
  214. data/sig/wasm/serialization_schema.rbs +13 -0
  215. data/src/ast.c +443 -162
  216. data/src/lexer.c +1415 -1313
  217. data/src/lexer.re +4 -0
  218. data/src/lexstate.c +63 -37
  219. data/src/location.c +7 -47
  220. data/src/parser.c +1032 -521
  221. data/src/serialize.c +958 -0
  222. data/src/string.c +0 -48
  223. data/src/util/rbs_allocator.c +89 -74
  224. data/src/util/rbs_assert.c +1 -1
  225. data/src/util/rbs_buffer.c +2 -2
  226. data/src/util/rbs_constant_pool.c +10 -14
  227. data/src/util/rbs_encoding.c +4 -8
  228. data/src/util/rbs_unescape.c +56 -20
  229. data/stdlib/abbrev/0/array.rbs +1 -1
  230. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  231. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  232. data/stdlib/cgi/0/core.rbs +9 -393
  233. data/stdlib/cgi/0/manifest.yaml +1 -0
  234. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  235. data/stdlib/coverage/0/coverage.rbs +7 -4
  236. data/stdlib/csv/0/csv.rbs +5 -5
  237. data/stdlib/date/0/date.rbs +92 -79
  238. data/stdlib/date/0/date_time.rbs +25 -24
  239. data/stdlib/delegate/0/delegator.rbs +10 -7
  240. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  241. data/stdlib/digest/0/digest.rbs +111 -1
  242. data/stdlib/erb/0/erb.rbs +748 -347
  243. data/stdlib/etc/0/etc.rbs +73 -54
  244. data/stdlib/fileutils/0/fileutils.rbs +179 -160
  245. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  246. data/stdlib/io-console/0/io-console.rbs +2 -2
  247. data/stdlib/json/0/json.rbs +223 -142
  248. data/stdlib/monitor/0/monitor.rbs +3 -3
  249. data/stdlib/net-http/0/net-http.rbs +162 -134
  250. data/stdlib/objspace/0/objspace.rbs +17 -34
  251. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  252. data/stdlib/open3/0/open3.rbs +469 -10
  253. data/stdlib/openssl/0/openssl.rbs +482 -364
  254. data/stdlib/optparse/0/optparse.rbs +26 -17
  255. data/stdlib/pathname/0/pathname.rbs +11 -1381
  256. data/stdlib/pp/0/pp.rbs +9 -8
  257. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  258. data/stdlib/pstore/0/pstore.rbs +35 -30
  259. data/stdlib/psych/0/psych.rbs +65 -12
  260. data/stdlib/psych/0/store.rbs +2 -4
  261. data/stdlib/pty/0/pty.rbs +9 -6
  262. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  263. data/stdlib/rdoc/0/code_object.rbs +2 -1
  264. data/stdlib/rdoc/0/parser.rbs +1 -1
  265. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  266. data/stdlib/rdoc/0/store.rbs +1 -1
  267. data/stdlib/resolv/0/resolv.rbs +26 -69
  268. data/stdlib/ripper/0/ripper.rbs +22 -19
  269. data/stdlib/securerandom/0/manifest.yaml +2 -0
  270. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  271. data/stdlib/shellwords/0/shellwords.rbs +3 -3
  272. data/stdlib/singleton/0/singleton.rbs +3 -0
  273. data/stdlib/socket/0/addrinfo.rbs +7 -7
  274. data/stdlib/socket/0/basic_socket.rbs +3 -3
  275. data/stdlib/socket/0/ip_socket.rbs +10 -8
  276. data/stdlib/socket/0/socket.rbs +23 -10
  277. data/stdlib/socket/0/tcp_server.rbs +1 -1
  278. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  279. data/stdlib/socket/0/udp_socket.rbs +1 -1
  280. data/stdlib/socket/0/unix_server.rbs +1 -1
  281. data/stdlib/stringio/0/stringio.rbs +1209 -95
  282. data/stdlib/strscan/0/string_scanner.rbs +101 -80
  283. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  284. data/stdlib/time/0/time.rbs +8 -6
  285. data/stdlib/timeout/0/timeout.rbs +63 -7
  286. data/stdlib/tsort/0/cyclic.rbs +4 -1
  287. data/stdlib/tsort/0/interfaces.rbs +8 -8
  288. data/stdlib/tsort/0/tsort.rbs +16 -15
  289. data/stdlib/uri/0/common.rbs +42 -20
  290. data/stdlib/uri/0/file.rbs +3 -3
  291. data/stdlib/uri/0/generic.rbs +26 -18
  292. data/stdlib/uri/0/http.rbs +2 -2
  293. data/stdlib/uri/0/ldap.rbs +2 -2
  294. data/stdlib/uri/0/mailto.rbs +3 -3
  295. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  296. data/stdlib/zlib/0/deflate.rbs +4 -3
  297. data/stdlib/zlib/0/gzip_reader.rbs +8 -8
  298. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  299. data/stdlib/zlib/0/inflate.rbs +1 -1
  300. data/stdlib/zlib/0/need_dict.rbs +1 -1
  301. data/stdlib/zlib/0/zstream.rbs +1 -0
  302. data/wasm/README.md +59 -0
  303. data/wasm/rbs_wasm.c +411 -0
  304. metadata +56 -8
  305. data/.vscode/extensions.json +0 -5
  306. data/.vscode/settings.json +0 -19
@@ -17,14 +17,14 @@ module URI
17
17
  # <!-- rdoc-file=lib/uri/rfc2396_parser.rb -->
18
18
  # The Hash of patterns.
19
19
  #
20
- # See also URI::Parser.initialize_pattern.
20
+ # See also #initialize_pattern.
21
21
  #
22
22
  attr_reader pattern: Hash[Symbol, String]
23
23
 
24
24
  # <!-- rdoc-file=lib/uri/rfc2396_parser.rb -->
25
25
  # The Hash of Regexp.
26
26
  #
27
- # See also URI::Parser.initialize_regexp.
27
+ # See also #initialize_regexp.
28
28
  #
29
29
  attr_reader regexp: Hash[Symbol, Regexp]
30
30
 
@@ -34,7 +34,7 @@ module URI
34
34
  # -->
35
35
  # ## Synopsis
36
36
  #
37
- # URI::Parser.new([opts])
37
+ # URI::RFC2396_Parser.new([opts])
38
38
  #
39
39
  # ## Args
40
40
  #
@@ -52,7 +52,7 @@ module URI
52
52
  #
53
53
  # ## Examples
54
54
  #
55
- # p = URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
55
+ # p = URI::RFC2396_Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
56
56
  # u = p.parse("http://example.jp/%uABCD") #=> #<URI::HTTP http://example.jp/%uABCD>
57
57
  # URI.parse(u.to_s) #=> raises URI::InvalidURIError
58
58
  #
@@ -75,7 +75,7 @@ module URI
75
75
  # : String to make safe
76
76
  #
77
77
  # `unsafe`
78
- # : Regexp to apply. Defaults to `self.regexp[:UNSAFE]`
78
+ # : Regexp to apply. Defaults to <code>self.regexp[:UNSAFE]</code>
79
79
  #
80
80
  #
81
81
  # ## Description
@@ -105,7 +105,7 @@ module URI
105
105
  # Attempts to parse and merge a set of URIs. If no `block` given, then returns
106
106
  # the result, else it calls `block` for each element in result.
107
107
  #
108
- # See also URI::Parser.make_regexp.
108
+ # See also #make_regexp.
109
109
  #
110
110
  def extract: (String str, ?Array[String] schemes) -> Array[String]
111
111
  | (String str, ?Array[String] schemes) { (String) -> untyped } -> nil
@@ -130,8 +130,9 @@ module URI
130
130
  # rdoc-file=lib/uri/rfc2396_parser.rb
131
131
  # - make_regexp(schemes = nil)
132
132
  # -->
133
- # Returns Regexp that is default `self.regexp[:ABS_URI_REF]`, unless `schemes`
134
- # is provided. Then it is a Regexp.union with `self.pattern[:X_ABS_URI]`.
133
+ # Returns Regexp that is default <code>self.regexp[:ABS_URI_REF]</code>, unless
134
+ # `schemes` is provided. Then it is a Regexp.union with
135
+ # <code>self.pattern[:X_ABS_URI]</code>.
135
136
  #
136
137
  def make_regexp: (?Array[String] schemes) -> Regexp
137
138
 
@@ -152,8 +153,7 @@ module URI
152
153
  #
153
154
  # ## Usage
154
155
  #
155
- # p = URI::Parser.new
156
- # p.parse("ldap://ldap.example.com/dc=example?user=john")
156
+ # URI::RFC2396_PARSER.parse("ldap://ldap.example.com/dc=example?user=john")
157
157
  # #=> #<URI::LDAP ldap://ldap.example.com/dc=example?user=john>
158
158
  #
159
159
  def parse: (String uri) -> URI::Generic
@@ -162,7 +162,7 @@ module URI
162
162
  # rdoc-file=lib/uri/rfc2396_parser.rb
163
163
  # - split(uri)
164
164
  # -->
165
- # Returns a split URI against `regexp[:ABS_URI]`.
165
+ # Returns a split URI against <code>regexp[:ABS_URI]</code>.
166
166
  #
167
167
  def split: (String uri) -> [ String?, String?, String?, String?, String?, String?, String?, String?, String? ]
168
168
 
@@ -177,7 +177,7 @@ module URI
177
177
  # : String to remove escapes from
178
178
  #
179
179
  # `escaped`
180
- # : Regexp to apply. Defaults to `self.regexp[:ESCAPED]`
180
+ # : Regexp to apply. Defaults to <code>self.regexp[:ESCAPED]</code>
181
181
  #
182
182
  #
183
183
  # ## Description
@@ -78,9 +78,10 @@ module Zlib
78
78
  # - flush(flush = Zlib::SYNC_FLUSH) -> String
79
79
  # - flush(flush = Zlib::SYNC_FLUSH) { |chunk| ... } -> nil
80
80
  # -->
81
- # This method is equivalent to `deflate('', flush)`. This method is just
82
- # provided to improve the readability of your Ruby program. If a block is given
83
- # chunks of deflate output are yielded to the block until the buffer is flushed.
81
+ # This method is equivalent to <code>deflate('', flush)</code>. This method is
82
+ # just provided to improve the readability of your Ruby program. If a block is
83
+ # given chunks of deflate output are yielded to the block until the buffer is
84
+ # flushed.
84
85
  #
85
86
  # See Zlib::Deflate#deflate for detail on the `flush` constants NO_FLUSH,
86
87
  # SYNC_FLUSH, FULL_FLUSH and FINISH.
@@ -35,8 +35,8 @@ module Zlib
35
35
  # Be careful of the footer of the gzip file. A gzip file has the checksum of
36
36
  # pre-compressed data in its footer. GzipReader checks all uncompressed data
37
37
  # against that checksum at the following cases, and if it fails, raises
38
- # `Zlib::GzipFile::NoFooter`, `Zlib::GzipFile::CRCError`, or
39
- # `Zlib::GzipFile::LengthError` exception.
38
+ # <code>Zlib::GzipFile::NoFooter</code>, <code>Zlib::GzipFile::CRCError</code>,
39
+ # or <code>Zlib::GzipFile::LengthError</code> exception.
40
40
  #
41
41
  # * When an reading request is received beyond the end of file (the end of
42
42
  # compressed data). That is, when Zlib::GzipReader#read,
@@ -62,8 +62,8 @@ module Zlib
62
62
  # GzipReader object associated with that file. Further details of this method
63
63
  # are in Zlib::GzipReader.new and ZLib::GzipFile.wrap.
64
64
  #
65
- def self.open: (String | _ToPath filename) -> instance
66
- | (String | _ToPath filename) { (instance gz) -> void } -> void
65
+ def self.open: (path filename) -> instance
66
+ | (path filename) { (instance gz) -> void } -> void
67
67
 
68
68
  # <!--
69
69
  # rdoc-file=ext/zlib/zlib.c
@@ -187,7 +187,7 @@ module Zlib
187
187
  # -->
188
188
  # See Zlib::GzipReader documentation for a description.
189
189
  #
190
- def read: (?int? length, ?string outbuf) -> String?
190
+ def read: (?int? length, ?string? outbuf) -> String?
191
191
 
192
192
  # <!--
193
193
  # rdoc-file=ext/zlib/zlib.c
@@ -230,7 +230,7 @@ module Zlib
230
230
  # argument is present, it must reference a String, which will receive the data.
231
231
  # It raises `EOFError` on end of file.
232
232
  #
233
- def readpartial: (int maxlen, ?string outbuf) -> String
233
+ def readpartial: (int maxlen, ?string? outbuf) -> String
234
234
 
235
235
  # <!--
236
236
  # rdoc-file=ext/zlib/zlib.c
@@ -282,8 +282,8 @@ module Zlib
282
282
  # `read` method that behaves same as the IO#read.
283
283
  #
284
284
  # The `options` hash may be used to set the encoding of the data.
285
- # `:external_encoding`, `:internal_encoding` and `:encoding` may be set as in
286
- # IO::new.
285
+ # <code>:external_encoding</code>, <code>:internal_encoding</code> and
286
+ # <code>:encoding</code> may be set as in IO::new.
287
287
  #
288
288
  # If the gzip file header is incorrect, raises an Zlib::GzipFile::Error
289
289
  # exception.
@@ -38,7 +38,8 @@ module Zlib
38
38
  # returns a GzipWriter object associated with that file. Further details of
39
39
  # this method are found in Zlib::GzipWriter.new and Zlib::GzipFile.wrap.
40
40
  #
41
- def self.open: (String filename) { (instance gz) -> void } -> instance
41
+ def self.open: (String filename, ?Integer level, ?Integer strategy, **untyped opts) -> instance
42
+ | (String filename, ?Integer level, ?Integer strategy, **untyped opts) { (instance gz) -> void } -> nil
42
43
 
43
44
  # <!--
44
45
  # rdoc-file=ext/zlib/zlib.c
@@ -61,10 +62,11 @@ module Zlib
61
62
  # - flush(flush=nil)
62
63
  # -->
63
64
  # Flushes all the internal buffers of the GzipWriter object. The meaning of
64
- # `flush` is same as in Zlib::Deflate#deflate. `Zlib::SYNC_FLUSH` is used if
65
- # `flush` is omitted. It is no use giving flush `Zlib::NO_FLUSH`.
65
+ # `flush` is same as in Zlib::Deflate#deflate. <code>Zlib::SYNC_FLUSH</code> is
66
+ # used if `flush` is omitted. It is no use giving flush
67
+ # <code>Zlib::NO_FLUSH</code>.
66
68
  #
67
- def flush: (?Integer flush) -> String
69
+ def flush: (?Integer flush) -> self
68
70
 
69
71
  # <!--
70
72
  # rdoc-file=ext/zlib/zlib.c
@@ -74,16 +76,16 @@ module Zlib
74
76
  #
75
77
  # Setting the mtime in the gzip header does not effect the mtime of the file
76
78
  # generated. Different utilities that expand the gzipped files may use the mtime
77
- # header. For example the gunzip utility can use the `-N` flag which will set
78
- # the resultant file's mtime to the value in the header. By default many tools
79
- # will set the mtime of the expanded file to the mtime of the gzipped file, not
80
- # the mtime in the header.
79
+ # header. For example the gunzip utility can use the <code>-N</code> flag which
80
+ # will set the resultant file's mtime to the value in the header. By default
81
+ # many tools will set the mtime of the expanded file to the mtime of the gzipped
82
+ # file, not the mtime in the header.
81
83
  #
82
84
  # If you do not set an mtime, the default value will be the time when
83
85
  # compression started. Setting a value of 0 indicates no time stamp is
84
86
  # available.
85
87
  #
86
- def mtime=: (string | _ToPath | IO file_name) -> Time
88
+ def mtime=: (Time | Integer) -> void
87
89
 
88
90
  # <!--
89
91
  # rdoc-file=ext/zlib/zlib.c
@@ -158,9 +160,9 @@ module Zlib
158
160
  # that behaves the same as IO#write.
159
161
  #
160
162
  # The `options` hash may be used to set the encoding of the data.
161
- # `:external_encoding`, `:internal_encoding` and `:encoding` may be set as in
162
- # IO::new.
163
+ # <code>:external_encoding</code>, <code>:internal_encoding</code> and
164
+ # <code>:encoding</code> may be set as in IO::new.
163
165
  #
164
- def initialize: (_Writer io, Integer level, Integer strategy, **untyped opts) -> void
166
+ def initialize: (_Writer io, ?Integer? level, ?Integer? strategy, **untyped opts) -> void
165
167
  end
166
168
  end
@@ -123,7 +123,7 @@ module Zlib
123
123
  #
124
124
  # What is this?
125
125
  #
126
- # `:)`
126
+ # <code>:)</code>
127
127
  #
128
128
  def sync_point?: () -> bool
129
129
 
@@ -6,7 +6,7 @@ module Zlib
6
6
  # When zlib returns a Z_NEED_DICT if a preset dictionary is needed at this
7
7
  # point.
8
8
  #
9
- # Used by Zlib::Inflate.inflate and `Zlib.inflate`
9
+ # Used by Zlib::Inflate.inflate and <code>Zlib.inflate</code>
10
10
  #
11
11
  class NeedDict < Zlib::Error
12
12
  end
@@ -153,6 +153,7 @@ module Zlib
153
153
  # rdoc-file=ext/zlib/zlib.c
154
154
  # - flush_next_in -> input
155
155
  # -->
156
+ # Flushes input buffer and returns all data in that buffer.
156
157
  #
157
158
  def flush_next_in: () -> String
158
159
 
data/wasm/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # RBS parser as WebAssembly
2
+
3
+ The parser under [`src/`](../src) is plain, self-contained C with no dependency
4
+ on the Ruby C API, so it can be compiled to WebAssembly as-is. This directory
5
+ holds the small entry-point shim ([`rbs_wasm.c`](rbs_wasm.c)) that exposes a
6
+ stable ABI to a WebAssembly host.
7
+
8
+ This is how RBS runs on Ruby implementations that cannot load the MRI C
9
+ extension (notably JRuby): the host loads `rbs_parser.wasm`, runs the parser over
10
+ a source buffer, and reads the serialized AST back out. The Ruby side then
11
+ rebuilds `RBS::AST` objects with `RBS::WASM::Deserializer` — no native build per
12
+ platform required. See [`lib/rbs/wasm`](../lib/rbs/wasm) and
13
+ [`docs/wasm_serialization.md`](../docs/wasm_serialization.md).
14
+
15
+ ## Building
16
+
17
+ The build needs the [WASI SDK](https://github.com/WebAssembly/wasi-sdk/releases)
18
+ (for `clang`, the wasi-libc sysroot, and the wasm32 compiler-rt builtins):
19
+
20
+ ```console
21
+ $ export WASI_SDK_PATH=/path/to/wasi-sdk
22
+ $ rake wasm:build # compile rbs_parser.wasm
23
+ $ rake wasm:check # also smoke-test it (needs wasmtime)
24
+ $ rake wasm:jruby_setup # assemble lib/rbs/wasm/ for JRuby (wasm + Chicory jars)
25
+ ```
26
+
27
+ The compiled `rbs_parser.wasm` is a build artifact and is not checked in.
28
+
29
+ ## Exported functions
30
+
31
+ The module is built as a "reactor": it has no `main`, and the host calls
32
+ `_initialize` once before invoking any export.
33
+
34
+ Memory management and results:
35
+
36
+ | Export | Signature | Description |
37
+ | --- | --- | --- |
38
+ | `rbs_wasm_alloc` | `(i32) -> i32` | Allocate N bytes in linear memory, return the offset. |
39
+ | `rbs_wasm_free` | `(i32) -> ()` | Free a region from `rbs_wasm_alloc`. |
40
+ | `rbs_wasm_result_ptr` | `() -> i32` | Offset of the most recent result. |
41
+ | `rbs_wasm_result_len` | `() -> i32` | Length of the most recent result. |
42
+
43
+ Parsing — each takes the whole buffer (`ptr`/`len`), its Ruby encoding name
44
+ (`enc`/`enc_len`, e.g. `"UTF-8"` or `"EUC-JP"`; falls back to UTF-8 when empty or
45
+ unknown), and the character range to parse (`start`/`end`). Each returns `1` on
46
+ success or `0` on a parse error. On success the result is the serialized AST; on
47
+ error it is an error blob (start/end positions, syntax flag, token type,
48
+ message). Type/method-type parsing also takes a buffer of newline-separated
49
+ type-variable names (`vars`/`vars_len`, with `vars_len < 0` meaning "none"):
50
+
51
+ | Export | Signature |
52
+ | --- | --- |
53
+ | `rbs_wasm_parse_signature` | `(ptr, len, enc, enc_len, start, end) -> i32` |
54
+ | `rbs_wasm_parse_type` | `(ptr, len, enc, enc_len, start, end, vars, vars_len, require_eof, void_allowed, self_allowed, classish_allowed) -> i32` |
55
+ | `rbs_wasm_parse_method_type` | `(ptr, len, enc, enc_len, start, end, vars, vars_len, require_eof) -> i32` |
56
+ | `rbs_wasm_selftest` | `() -> i32` (parses a fixed sample; `1` on success) |
57
+
58
+ For type and method-type parsing, a successful result of length 0 means the input
59
+ was empty (`nil`).