rbs 3.9.4 → 4.2.0
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.
- checksums.yaml +4 -4
- data/.clang-format +75 -0
- data/.clangd +2 -0
- data/.dockerignore +37 -0
- data/.gitattributes +1 -0
- data/.github/dependabot.yml +16 -14
- data/.github/workflows/bundle-update.yml +63 -0
- data/.github/workflows/c-check.yml +66 -0
- data/.github/workflows/changelog.yml +121 -0
- data/.github/workflows/comments.yml +6 -4
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/jruby.yml +74 -0
- data/.github/workflows/release-gems.yml +234 -0
- data/.github/workflows/ruby.yml +86 -32
- data/.github/workflows/rust.yml +186 -0
- data/.github/workflows/truffleruby.yml +54 -0
- data/.github/workflows/typecheck.yml +6 -3
- data/.github/workflows/wasm.yml +55 -0
- data/.github/workflows/windows.yml +10 -4
- data/.gitignore +16 -0
- data/.rubocop.yml +1 -2
- data/CHANGELOG.md +502 -0
- data/Dockerfile.jruby +53 -0
- data/README.md +42 -5
- data/Rakefile +892 -111
- data/Steepfile +11 -0
- data/config.yml +665 -62
- data/core/array.rbs +541 -398
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +9 -8
- data/core/class.rbs +11 -8
- data/core/comparable.rbs +55 -34
- data/core/complex.rbs +104 -78
- data/core/dir.rbs +61 -49
- data/core/encoding.rbs +12 -15
- data/core/enumerable.rbs +297 -196
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator/product.rbs +5 -5
- data/core/enumerator.rbs +91 -28
- data/core/errno.rbs +11 -2
- data/core/errors.rbs +58 -29
- data/core/exception.rbs +13 -13
- data/core/fiber.rbs +74 -54
- data/core/file.rbs +260 -1151
- data/core/file_constants.rbs +463 -0
- data/core/file_stat.rbs +534 -0
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -116
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1151 -829
- data/core/integer.rbs +156 -195
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +222 -155
- data/core/kernel.rbs +239 -163
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +16 -14
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +302 -150
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +77 -63
- data/core/object.rbs +9 -11
- data/core/object_space/weak_key_map.rbs +7 -7
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1312 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +364 -518
- data/core/random.rbs +21 -3
- data/core/range.rbs +181 -79
- data/core/rational.rbs +60 -89
- data/core/rbs/ops.rbs +154 -0
- data/core/rbs/unnamed/argf.rbs +63 -56
- data/core/rbs/unnamed/env_class.rbs +19 -14
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +11 -118
- data/core/regexp.rbs +258 -214
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +78 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +6 -70
- data/core/rubygems/requirement.rbs +5 -15
- data/core/rubygems/rubygems.rbs +18 -81
- data/core/rubygems/specification.rbs +8 -0
- data/core/rubygems/version.rbs +2 -163
- data/core/set.rbs +493 -363
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3234 -1285
- data/core/struct.rbs +43 -42
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +139 -83
- data/core/time.rbs +81 -50
- data/core/trace_point.rbs +41 -35
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +24 -16
- data/core/warning.rbs +7 -7
- data/docs/CONTRIBUTING.md +3 -2
- data/docs/aliases.md +79 -0
- data/docs/collection.md +3 -3
- data/docs/config.md +171 -0
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +634 -0
- data/docs/rbs_by_example.md +20 -20
- data/docs/release.md +303 -0
- data/docs/rust.md +96 -0
- data/docs/sigs.md +3 -3
- data/docs/stdlib.md +8 -0
- data/docs/syntax.md +60 -18
- data/docs/type_fingerprint.md +21 -0
- data/docs/wasm_serialization.md +80 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1870 -0
- data/ext/rbs_extension/ast_translation.h +41 -0
- data/ext/rbs_extension/class_constants.c +189 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +24 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +26 -1
- data/ext/rbs_extension/legacy_location.c +299 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +639 -23
- data/ext/rbs_extension/rbs_extension.h +6 -21
- data/ext/rbs_extension/rbs_string_bridging.c +9 -0
- data/ext/rbs_extension/rbs_string_bridging.h +24 -0
- data/include/rbs/ast.h +1055 -0
- data/include/rbs/defines.h +104 -0
- data/include/rbs/lexer.h +208 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +187 -0
- data/include/rbs/serialize.h +39 -0
- data/include/rbs/string.h +47 -0
- data/include/rbs/util/rbs_allocator.h +59 -0
- data/include/rbs/util/rbs_assert.h +20 -0
- data/include/rbs/util/rbs_buffer.h +83 -0
- data/include/rbs/util/rbs_constant_pool.h +6 -70
- data/include/rbs/util/rbs_encoding.h +282 -0
- data/include/rbs/util/rbs_unescape.h +24 -0
- data/include/rbs.h +9 -2
- data/lib/rbs/annotate/formatter.rb +3 -13
- data/lib/rbs/annotate/rdoc_annotator.rb +30 -32
- data/lib/rbs/annotate/rdoc_source.rb +1 -1
- data/lib/rbs/ast/annotation.rb +1 -1
- data/lib/rbs/ast/comment.rb +1 -1
- data/lib/rbs/ast/declarations.rb +11 -11
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +451 -0
- data/lib/rbs/ast/ruby/comment_block.rb +247 -0
- data/lib/rbs/ast/ruby/declarations.rb +291 -0
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
- data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
- data/lib/rbs/ast/ruby/members.rb +762 -0
- data/lib/rbs/ast/type_param.rb +25 -5
- data/lib/rbs/buffer.rb +142 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +63 -126
- data/lib/rbs/cli.rb +59 -29
- data/lib/rbs/collection/config/lockfile_generator.rb +28 -3
- data/lib/rbs/collection/sources/git.rb +7 -0
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +129 -70
- data/lib/rbs/definition_builder/method_builder.rb +74 -33
- data/lib/rbs/definition_builder.rb +181 -21
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +81 -0
- data/lib/rbs/environment/module_entry.rb +91 -0
- data/lib/rbs/environment.rb +410 -215
- data/lib/rbs/environment_loader.rb +2 -8
- data/lib/rbs/errors.rb +31 -21
- data/lib/rbs/inline_parser/comment_association.rb +117 -0
- data/lib/rbs/inline_parser.rb +568 -0
- data/lib/rbs/location_aux.rb +36 -4
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/namespace.rb +47 -18
- data/lib/rbs/parser_aux.rb +37 -7
- data/lib/rbs/prototype/helpers.rb +24 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +196 -45
- data/lib/rbs/prototype/runtime/value_object_generator.rb +0 -1
- data/lib/rbs/prototype/runtime.rb +13 -3
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +120 -44
- data/lib/rbs/rewriter.rb +70 -0
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +7 -4
- data/lib/rbs/test/type_check.rb +25 -3
- data/lib/rbs/type_name.rb +34 -21
- data/lib/rbs/types.rb +135 -81
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +47 -11
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs/wasm/deserializer.rb +213 -0
- data/lib/rbs/wasm/location.rb +61 -0
- data/lib/rbs/wasm/parser.rb +174 -0
- data/lib/rbs/wasm/runtime.rb +211 -0
- data/lib/rbs/wasm/serialization_schema.rb +111 -0
- data/lib/rbs.rb +25 -2
- data/lib/rbs_jars.rb +39 -0
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +8 -3
- data/rbs.gemspec +34 -6
- data/schema/function.json +12 -1
- data/schema/typeParam.json +17 -1
- data/sig/ancestor_builder.rbs +1 -1
- data/sig/annotate/formatter.rbs +2 -2
- data/sig/annotate/rdoc_annotater.rbs +13 -10
- data/sig/ast/ruby/annotations.rbs +470 -0
- data/sig/ast/ruby/comment_block.rbs +127 -0
- data/sig/ast/ruby/declarations.rbs +158 -0
- data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
- data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
- data/sig/ast/ruby/members.rbs +198 -0
- data/sig/buffer.rbs +81 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/collection/config/lockfile_generator.rbs +2 -0
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +56 -0
- data/sig/environment/module_entry.rbs +65 -0
- data/sig/environment.rbs +94 -87
- data/sig/errors.rbs +26 -20
- data/sig/inline_parser/comment_association.rbs +71 -0
- data/sig/inline_parser.rbs +126 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -2
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +20 -5
- data/sig/parser.rbs +79 -15
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/prototype/rbi.rbs +33 -4
- data/sig/resolver/type_name_resolver.rbs +36 -10
- data/sig/rewriter.rbs +45 -0
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +15 -5
- data/sig/types.rbs +21 -9
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +17 -2
- data/sig/wasm/deserializer.rbs +66 -0
- data/sig/wasm/serialization_schema.rbs +13 -0
- data/src/ast.c +1644 -0
- data/src/lexer.c +3223 -0
- data/src/lexer.re +187 -0
- data/src/lexstate.c +222 -0
- data/src/location.c +31 -0
- data/src/parser.c +4318 -0
- data/src/serialize.c +965 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +171 -0
- data/src/util/rbs_assert.c +19 -0
- data/src/util/rbs_buffer.c +54 -0
- data/src/util/rbs_constant_pool.c +18 -92
- data/src/util/rbs_encoding.c +21454 -0
- data/src/util/rbs_unescape.c +167 -0
- data/stdlib/abbrev/0/array.rbs +1 -1
- data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
- data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
- data/stdlib/cgi/0/core.rbs +9 -393
- data/stdlib/cgi/0/manifest.yaml +1 -0
- data/stdlib/cgi-escape/0/escape.rbs +171 -0
- data/stdlib/coverage/0/coverage.rbs +7 -4
- data/stdlib/csv/0/csv.rbs +5 -5
- data/stdlib/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +11 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +117 -1
- data/stdlib/erb/0/erb.rbs +754 -353
- data/stdlib/etc/0/etc.rbs +73 -54
- data/stdlib/fileutils/0/fileutils.rbs +179 -160
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/ipaddr/0/ipaddr.rbs +0 -5
- data/stdlib/json/0/json.rbs +232 -185
- data/stdlib/monitor/0/monitor.rbs +9 -9
- data/stdlib/net-http/0/net-http.rbs +162 -134
- data/stdlib/objspace/0/objspace.rbs +17 -34
- data/stdlib/open-uri/0/open-uri.rbs +48 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +521 -397
- data/stdlib/optparse/0/optparse.rbs +26 -17
- data/stdlib/pathname/0/pathname.rbs +11 -1381
- data/stdlib/pp/0/pp.rbs +9 -8
- data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
- data/stdlib/pstore/0/pstore.rbs +35 -30
- data/stdlib/psych/0/psych.rbs +65 -12
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
- data/stdlib/rdoc/0/code_object.rbs +4 -3
- data/stdlib/rdoc/0/comment.rbs +2 -0
- data/stdlib/rdoc/0/options.rbs +76 -0
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/rdoc.rbs +7 -5
- data/stdlib/rdoc/0/store.rbs +2 -2
- data/stdlib/resolv/0/resolv.rbs +26 -69
- data/stdlib/ripper/0/ripper.rbs +25 -19
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +7 -20
- data/stdlib/shellwords/0/shellwords.rbs +3 -3
- data/stdlib/singleton/0/singleton.rbs +6 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -9
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +23 -10
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +11 -3
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +1211 -96
- data/stdlib/strscan/0/string_scanner.rbs +101 -80
- data/stdlib/tempfile/0/manifest.yaml +3 -0
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +58 -7
- data/stdlib/tsort/0/cyclic.rbs +4 -1
- data/stdlib/tsort/0/interfaces.rbs +8 -8
- data/stdlib/tsort/0/tsort.rbs +16 -15
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +21 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/ldap.rbs +2 -2
- data/stdlib/uri/0/mailto.rbs +3 -3
- data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_file.rbs +1 -1
- data/stdlib/zlib/0/gzip_reader.rbs +8 -8
- data/stdlib/zlib/0/gzip_writer.rbs +16 -13
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- data/wasm/README.md +109 -0
- data/wasm/rbs_wasm.c +479 -0
- metadata +133 -19
- data/ext/rbs_extension/lexer.c +0 -2728
- data/ext/rbs_extension/lexer.h +0 -179
- data/ext/rbs_extension/lexer.re +0 -147
- data/ext/rbs_extension/lexstate.c +0 -175
- data/ext/rbs_extension/location.c +0 -325
- data/ext/rbs_extension/location.h +0 -85
- data/ext/rbs_extension/parser.c +0 -2982
- data/ext/rbs_extension/parser.h +0 -18
- data/ext/rbs_extension/parserstate.c +0 -411
- data/ext/rbs_extension/parserstate.h +0 -163
- data/ext/rbs_extension/unescape.c +0 -32
- data/include/rbs/ruby_objs.h +0 -72
- data/src/constants.c +0 -153
- data/src/ruby_objs.c +0 -799
|
@@ -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
|
|
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
|
|
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::
|
|
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::
|
|
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
|
|
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
|
|
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
|
|
134
|
-
# is provided. Then it is a Regexp.union with
|
|
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
|
-
#
|
|
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
|
|
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
|
|
180
|
+
# : Regexp to apply. Defaults to <code>self.regexp[:ESCAPED]</code>
|
|
181
181
|
#
|
|
182
182
|
#
|
|
183
183
|
# ## Description
|
data/stdlib/zlib/0/deflate.rbs
CHANGED
|
@@ -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
|
|
82
|
-
# provided to improve the readability of your Ruby program. If a block is
|
|
83
|
-
# chunks of deflate output are yielded to the block until the buffer is
|
|
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.
|
data/stdlib/zlib/0/gzip_file.rbs
CHANGED
|
@@ -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
|
-
#
|
|
39
|
-
#
|
|
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: (
|
|
66
|
-
| (
|
|
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
|
-
#
|
|
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
|
|
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.
|
|
65
|
-
# `flush` is omitted. It is no use giving 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) ->
|
|
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
|
|
78
|
-
# the resultant file's mtime to the value in the header. By default
|
|
79
|
-
# will set the mtime of the expanded file to the mtime of the gzipped
|
|
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=: (
|
|
88
|
+
def mtime=: (Time | Integer) -> void
|
|
87
89
|
|
|
88
90
|
# <!--
|
|
89
91
|
# rdoc-file=ext/zlib/zlib.c
|
|
@@ -123,7 +125,8 @@ module Zlib
|
|
|
123
125
|
# -->
|
|
124
126
|
# Same as IO.
|
|
125
127
|
#
|
|
126
|
-
def putc: (
|
|
128
|
+
def putc: (real) -> real
|
|
129
|
+
| (String) -> String
|
|
127
130
|
|
|
128
131
|
# <!--
|
|
129
132
|
# rdoc-file=ext/zlib/zlib.c
|
|
@@ -158,9 +161,9 @@ module Zlib
|
|
|
158
161
|
# that behaves the same as IO#write.
|
|
159
162
|
#
|
|
160
163
|
# The `options` hash may be used to set the encoding of the data.
|
|
161
|
-
#
|
|
162
|
-
# IO::new.
|
|
164
|
+
# <code>:external_encoding</code>, <code>:internal_encoding</code> and
|
|
165
|
+
# <code>:encoding</code> may be set as in IO::new.
|
|
163
166
|
#
|
|
164
|
-
def initialize: (_Writer io, Integer level, Integer strategy, **untyped opts) -> void
|
|
167
|
+
def initialize: (_Writer io, ?Integer? level, ?Integer? strategy, **untyped opts) -> void
|
|
165
168
|
end
|
|
166
169
|
end
|
data/stdlib/zlib/0/inflate.rbs
CHANGED
data/stdlib/zlib/0/need_dict.rbs
CHANGED
data/wasm/README.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
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 # copy rbs_parser.wasm into lib/rbs/wasm/ for JRuby
|
|
25
|
+
$ rake wasm:install_jars # download the Chicory/ASM jars into ~/.m2 (run on JRuby)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The compiled `rbs_parser.wasm` is a build artifact and is not checked in.
|
|
29
|
+
|
|
30
|
+
Like the MRI extension, the module is compiled with `-DNDEBUG`, which removes the
|
|
31
|
+
`RBS_ASSERT` checks — they sit in the lexer and the constant pool, so leaving them
|
|
32
|
+
in costs around 20% of parse time. `DEBUG=1 rake wasm:build` keeps them, which is
|
|
33
|
+
what you want when debugging the parser itself through the module.
|
|
34
|
+
|
|
35
|
+
The WASI SDK is needed for the *build*, not for running the result — the host clang already
|
|
36
|
+
knows the `wasm32` target, but there is no wasm32 libc on a normal machine, so it picks up the
|
|
37
|
+
host headers and fails on the first `#include`. That is what the SDK supplies, along with the
|
|
38
|
+
builtins the link step needs.
|
|
39
|
+
|
|
40
|
+
## Running the suite on JRuby
|
|
41
|
+
|
|
42
|
+
[`Dockerfile.jruby`](../Dockerfile.jruby) builds an image that has everything this needs, so no
|
|
43
|
+
JRuby, JDK or WASI SDK has to be installed to work on the JRuby side:
|
|
44
|
+
|
|
45
|
+
```console
|
|
46
|
+
$ docker build -f Dockerfile.jruby -t rbs-jruby .
|
|
47
|
+
$ docker run --rm rbs-jruby # run the test suite
|
|
48
|
+
$ docker run --rm -e RBS_PLATFORM=java rbs-jruby \
|
|
49
|
+
gem build rbs.gemspec # build the -java gem
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Two things in it are not obvious:
|
|
53
|
+
|
|
54
|
+
- `build-essential` is for prism, which builds `libprism.so` and loads it through FFI on JRuby
|
|
55
|
+
rather than as an MRI C extension. It needs `cc` and `make`.
|
|
56
|
+
- Bundler is skipped. The development `Gemfile` pulls in CRuby-only C extensions (bigdecimal,
|
|
57
|
+
stackprof, …) that cannot build on JRuby, so the few gems the suite needs are installed
|
|
58
|
+
directly, in the same set as [`jruby.yml`](../.github/workflows/jruby.yml).
|
|
59
|
+
|
|
60
|
+
The image compiles `rbs_parser.wasm` itself, which is why it carries the WASI SDK. That is not
|
|
61
|
+
the only arrangement: the build needs the SDK but not JRuby, and running the suite needs JRuby
|
|
62
|
+
but not the SDK, so `jruby.yml` splits them instead — it compiles the module on CRuby and then
|
|
63
|
+
switches engines to test against the result.
|
|
64
|
+
|
|
65
|
+
`rake wasm:install_jars` is the step that has to be on JRuby either way: it resolves the `jar`
|
|
66
|
+
requirements from `rbs.gemspec` through the JVM.
|
|
67
|
+
|
|
68
|
+
## Exported functions
|
|
69
|
+
|
|
70
|
+
The module is built as a "reactor": it has no `main`, and the host calls
|
|
71
|
+
`_initialize` once before invoking any export.
|
|
72
|
+
|
|
73
|
+
Memory management and results:
|
|
74
|
+
|
|
75
|
+
| Export | Signature | Description |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| `rbs_wasm_alloc` | `(i32) -> i32` | Allocate N bytes in linear memory, return the offset. |
|
|
78
|
+
| `rbs_wasm_free` | `(i32) -> ()` | Free a region from `rbs_wasm_alloc`. |
|
|
79
|
+
| `rbs_wasm_result_ptr` | `() -> i32` | Offset of the most recent result. |
|
|
80
|
+
| `rbs_wasm_result_len` | `() -> i32` | Length of the most recent result. |
|
|
81
|
+
|
|
82
|
+
Parsing — each takes the whole buffer (`ptr`/`len`), its Ruby encoding name
|
|
83
|
+
(`enc`/`enc_len`, e.g. `"UTF-8"` or `"EUC-JP"`; falls back to UTF-8 when empty or
|
|
84
|
+
unknown), and the character range to parse (`start`/`end`). Each returns:
|
|
85
|
+
|
|
86
|
+
| Status | Meaning | Result |
|
|
87
|
+
| --- | --- | --- |
|
|
88
|
+
| `1` | Parsed. | The serialized AST. |
|
|
89
|
+
| `0` | Parse error. | An error blob (start/end positions, syntax flag, token type, message). |
|
|
90
|
+
| `-1` | Negative or reversed range. | Empty. |
|
|
91
|
+
| `-2` | `start` is a byte position no character starts at — inside a character, or past the end of the buffer. | Empty. |
|
|
92
|
+
|
|
93
|
+
An `end` past the end of the buffer is not an error: it is clamped to the
|
|
94
|
+
buffer, which is where lexing stops anyway. The two negative statuses are about
|
|
95
|
+
the range the caller asked for rather than the source text, and `RBS::Parser`
|
|
96
|
+
turns both into an `ArgumentError`, as the C extension does.
|
|
97
|
+
|
|
98
|
+
Type/method-type parsing also takes a buffer of newline-separated
|
|
99
|
+
type-variable names (`vars`/`vars_len`, with `vars_len < 0` meaning "none"):
|
|
100
|
+
|
|
101
|
+
| Export | Signature |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| `rbs_wasm_parse_signature` | `(ptr, len, enc, enc_len, start, end) -> i32` |
|
|
104
|
+
| `rbs_wasm_parse_type` | `(ptr, len, enc, enc_len, start, end, vars, vars_len, require_eof, void_allowed, self_allowed, classish_allowed) -> i32` |
|
|
105
|
+
| `rbs_wasm_parse_method_type` | `(ptr, len, enc, enc_len, start, end, vars, vars_len, require_eof) -> i32` |
|
|
106
|
+
| `rbs_wasm_selftest` | `() -> i32` (parses a fixed sample; `1` on success) |
|
|
107
|
+
|
|
108
|
+
For type and method-type parsing, a successful result of length 0 means the input
|
|
109
|
+
was empty (`nil`).
|