rbs 4.0.0.dev.5 → 4.0.1.dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.clang-format +1 -0
- data/.github/workflows/c-check.yml +8 -4
- data/.github/workflows/comments.yml +3 -1
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +10 -0
- data/.github/workflows/rust.yml +95 -0
- data/CHANGELOG.md +323 -0
- data/Rakefile +12 -29
- data/Steepfile +1 -0
- data/config.yml +393 -37
- data/core/array.rbs +218 -188
- data/core/basic_object.rbs +9 -8
- data/core/class.rbs +6 -5
- data/core/comparable.rbs +45 -31
- data/core/complex.rbs +52 -40
- data/core/dir.rbs +57 -45
- data/core/encoding.rbs +5 -5
- data/core/enumerable.rbs +96 -91
- data/core/enumerator.rbs +4 -3
- data/core/errno.rbs +3 -2
- data/core/errors.rbs +31 -29
- data/core/exception.rbs +12 -12
- data/core/fiber.rbs +36 -36
- data/core/file.rbs +186 -113
- data/core/file_test.rbs +2 -2
- data/core/float.rbs +41 -32
- data/core/gc.rbs +78 -70
- data/core/hash.rbs +70 -60
- data/core/integer.rbs +32 -28
- data/core/io/buffer.rbs +36 -36
- data/core/io/wait.rbs +7 -7
- data/core/io.rbs +120 -135
- data/core/kernel.rbs +189 -139
- data/core/marshal.rbs +3 -3
- data/core/match_data.rbs +14 -12
- data/core/math.rbs +69 -67
- data/core/method.rbs +6 -6
- data/core/module.rbs +146 -85
- data/core/nil_class.rbs +4 -3
- data/core/numeric.rbs +35 -32
- data/core/object.rbs +6 -8
- data/core/object_space.rbs +11 -10
- data/core/pathname.rbs +131 -81
- data/core/proc.rbs +65 -33
- data/core/process.rbs +219 -201
- data/core/ractor.rbs +15 -11
- data/core/random.rbs +4 -3
- data/core/range.rbs +52 -47
- data/core/rational.rbs +5 -5
- data/core/rbs/unnamed/argf.rbs +58 -51
- data/core/rbs/unnamed/env_class.rbs +18 -13
- data/core/rbs/unnamed/main_class.rbs +123 -0
- data/core/rbs/unnamed/random.rbs +7 -5
- data/core/regexp.rbs +236 -197
- data/core/ruby.rbs +1 -1
- data/core/ruby_vm.rbs +32 -30
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +1 -1
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +5 -3
- data/core/set.rbs +17 -16
- data/core/signal.rbs +2 -2
- data/core/string.rbs +311 -292
- data/core/struct.rbs +26 -25
- data/core/symbol.rbs +25 -24
- data/core/thread.rbs +40 -34
- data/core/time.rbs +47 -42
- data/core/trace_point.rbs +34 -31
- data/core/true_class.rbs +2 -2
- data/core/unbound_method.rbs +10 -10
- data/core/warning.rbs +7 -7
- data/docs/collection.md +1 -1
- data/docs/config.md +171 -0
- data/docs/inline.md +110 -4
- data/docs/syntax.md +13 -12
- data/ext/rbs_extension/ast_translation.c +489 -135
- data/ext/rbs_extension/class_constants.c +8 -0
- data/ext/rbs_extension/class_constants.h +4 -0
- data/ext/rbs_extension/legacy_location.c +28 -51
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +12 -20
- data/include/rbs/ast.h +423 -195
- data/include/rbs/lexer.h +2 -2
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +2 -2
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs.h +8 -0
- data/lib/rbs/ast/ruby/annotations.rb +157 -4
- data/lib/rbs/ast/ruby/members.rb +374 -22
- data/lib/rbs/cli/validate.rb +5 -60
- data/lib/rbs/collection/config/lockfile_generator.rb +6 -2
- data/lib/rbs/definition_builder.rb +60 -27
- data/lib/rbs/errors.rb +0 -11
- data/lib/rbs/inline_parser.rb +1 -1
- data/lib/rbs/parser_aux.rb +20 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +1 -26
- data/lib/rbs/prototype/rbi.rb +1 -20
- data/lib/rbs/test/type_check.rb +3 -0
- data/lib/rbs/types.rb +62 -52
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +0 -1
- data/rbs.gemspec +1 -1
- data/rust/.gitignore +1 -0
- data/rust/Cargo.lock +378 -0
- data/rust/Cargo.toml +7 -0
- data/rust/ruby-rbs/Cargo.toml +22 -0
- data/rust/ruby-rbs/build.rs +764 -0
- data/rust/ruby-rbs/examples/locations.rs +60 -0
- data/rust/ruby-rbs/src/lib.rs +1 -0
- data/rust/ruby-rbs/src/node/mod.rs +742 -0
- data/rust/ruby-rbs/tests/sanity.rs +47 -0
- data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
- data/rust/ruby-rbs-sys/Cargo.toml +23 -0
- data/rust/ruby-rbs-sys/build.rs +204 -0
- data/rust/ruby-rbs-sys/src/lib.rs +50 -0
- data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
- data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
- data/rust/ruby-rbs-sys/wrapper.h +1 -0
- data/sig/ast/ruby/annotations.rbs +191 -4
- data/sig/ast/ruby/members.rbs +21 -1
- data/sig/cli/validate.rbs +1 -6
- data/sig/definition_builder.rbs +2 -0
- data/sig/errors.rbs +0 -8
- data/sig/method_types.rbs +1 -1
- data/sig/parser.rbs +17 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/types.rbs +10 -11
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +339 -161
- data/src/lexstate.c +1 -1
- data/src/location.c +7 -47
- data/src/parser.c +674 -480
- data/src/util/rbs_constant_pool.c +0 -4
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -16
- data/stdlib/cgi-escape/0/escape.rbs +4 -4
- data/stdlib/coverage/0/coverage.rbs +4 -3
- data/stdlib/date/0/date.rbs +33 -28
- data/stdlib/date/0/date_time.rbs +24 -23
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/erb/0/erb.rbs +64 -53
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +138 -125
- data/stdlib/forwardable/0/forwardable.rbs +10 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +135 -108
- data/stdlib/monitor/0/monitor.rbs +3 -3
- data/stdlib/net-http/0/net-http.rbs +159 -134
- data/stdlib/objspace/0/objspace.rbs +8 -7
- data/stdlib/open-uri/0/open-uri.rbs +8 -8
- data/stdlib/open3/0/open3.rbs +36 -35
- data/stdlib/openssl/0/openssl.rbs +144 -129
- data/stdlib/optparse/0/optparse.rbs +18 -14
- data/stdlib/pathname/0/pathname.rbs +2 -2
- 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 +61 -8
- data/stdlib/psych/0/store.rbs +2 -4
- data/stdlib/pty/0/pty.rbs +9 -6
- data/stdlib/random-formatter/0/random-formatter.rbs +2 -2
- data/stdlib/ripper/0/ripper.rbs +20 -17
- data/stdlib/securerandom/0/securerandom.rbs +1 -1
- data/stdlib/shellwords/0/shellwords.rbs +2 -2
- data/stdlib/socket/0/addrinfo.rbs +7 -7
- data/stdlib/socket/0/basic_socket.rbs +3 -3
- data/stdlib/socket/0/ip_socket.rbs +10 -8
- data/stdlib/socket/0/socket.rbs +10 -9
- data/stdlib/socket/0/tcp_server.rbs +1 -1
- data/stdlib/socket/0/tcp_socket.rbs +1 -1
- data/stdlib/socket/0/udp_socket.rbs +1 -1
- data/stdlib/socket/0/unix_server.rbs +1 -1
- data/stdlib/stringio/0/stringio.rbs +55 -54
- data/stdlib/strscan/0/string_scanner.rbs +46 -44
- data/stdlib/tempfile/0/tempfile.rbs +24 -20
- data/stdlib/time/0/time.rbs +7 -5
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +26 -18
- data/stdlib/uri/0/file.rbs +2 -2
- data/stdlib/uri/0/generic.rbs +2 -2
- 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 +6 -5
- data/stdlib/zlib/0/deflate.rbs +4 -3
- data/stdlib/zlib/0/gzip_reader.rbs +4 -4
- data/stdlib/zlib/0/gzip_writer.rbs +14 -12
- data/stdlib/zlib/0/inflate.rbs +1 -1
- data/stdlib/zlib/0/need_dict.rbs +1 -1
- metadata +23 -5
- data/.github/workflows/valgrind.yml +0 -42
data/sig/parser.rbs
CHANGED
|
@@ -20,13 +20,13 @@ module RBS
|
|
|
20
20
|
|
|
21
21
|
# Parse a method type and return it
|
|
22
22
|
#
|
|
23
|
-
# When `
|
|
23
|
+
# When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
|
|
24
24
|
#
|
|
25
25
|
# ```ruby
|
|
26
|
-
# RBS::Parser.parse_method_type("() -> void")
|
|
27
|
-
# RBS::Parser.parse_method_type("() -> void",
|
|
28
|
-
# RBS::Parser.parse_method_type("() -> void () -> String",
|
|
29
|
-
# RBS::Parser.parse_method_type("() -> void () -> String",
|
|
26
|
+
# RBS::Parser.parse_method_type("() -> void") # => `() -> void`
|
|
27
|
+
# RBS::Parser.parse_method_type("() -> void", byte_range: 0...) # => `() -> void`
|
|
28
|
+
# RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 11...) # => `() -> String`
|
|
29
|
+
# RBS::Parser.parse_method_type("() -> void () -> String", byte_range: 23...) # => nil
|
|
30
30
|
# ```
|
|
31
31
|
#
|
|
32
32
|
# When `require_eof` is `true`, an error is raised if more tokens are left in the input.
|
|
@@ -39,17 +39,18 @@ module RBS
|
|
|
39
39
|
# RBS::Parser.parse_method_type("", require_eof: true) # => nil
|
|
40
40
|
# ```
|
|
41
41
|
#
|
|
42
|
-
def self.parse_method_type: (Buffer | String, ?
|
|
42
|
+
def self.parse_method_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
|
|
43
|
+
| %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
|
|
43
44
|
|
|
44
45
|
# Parse a type and return it
|
|
45
46
|
#
|
|
46
|
-
# When `
|
|
47
|
+
# When `byte_range` keyword is specified, it starts parsing from the `begin` to the `end` of the range.
|
|
47
48
|
#
|
|
48
49
|
# ```ruby
|
|
49
|
-
# RBS::Parser.parse_type("String")
|
|
50
|
-
# RBS::Parser.parse_type("String",
|
|
51
|
-
# RBS::Parser.parse_type("String Integer",
|
|
52
|
-
# RBS::Parser.parse_type("String Integer",
|
|
50
|
+
# RBS::Parser.parse_type("String") # => `String`
|
|
51
|
+
# RBS::Parser.parse_type("String", byte_range: 0...) # => `String`
|
|
52
|
+
# RBS::Parser.parse_type("String Integer", byte_range: 7...) # => `Integer`
|
|
53
|
+
# RBS::Parser.parse_type("String Integer", byte_range: 14...) # => nil
|
|
53
54
|
# ```
|
|
54
55
|
#
|
|
55
56
|
# When `require_eof` is `true`, an error is raised if more tokens are left in the input.
|
|
@@ -76,7 +77,8 @@ module RBS
|
|
|
76
77
|
# RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
|
|
77
78
|
# ```
|
|
78
79
|
#
|
|
79
|
-
def self.parse_type: (Buffer | String, ?
|
|
80
|
+
def self.parse_type: (Buffer | String, ?byte_range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
|
|
81
|
+
| %a{deprecated: Use `byte_range:` keyword instead of `range:`} (Buffer | String, range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool, ?void_allowed: bool, ?self_allowed: bool, ?classish_allowed: bool) -> Types::t?
|
|
80
82
|
|
|
81
83
|
# Parse whole RBS file and return an array of declarations
|
|
82
84
|
#
|
|
@@ -130,7 +132,9 @@ module RBS
|
|
|
130
132
|
|
|
131
133
|
def self.buffer: (String | Buffer source) -> Buffer
|
|
132
134
|
|
|
133
|
-
def self.
|
|
135
|
+
def self.byte_range: (Range[Integer?] char_range, String content) -> Range[Integer?]
|
|
136
|
+
|
|
137
|
+
def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof, bool void_allowed, bool self_allowed, bool classish_allowed) -> Types::t?
|
|
134
138
|
|
|
135
139
|
def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
|
|
136
140
|
|
data/sig/prototype/helpers.rbs
CHANGED
|
@@ -3,6 +3,8 @@ module RBS
|
|
|
3
3
|
module Helpers
|
|
4
4
|
type node = RubyVM::AbstractSyntaxTree::Node
|
|
5
5
|
|
|
6
|
+
def parse_comments: (String, include_trailing: bool) -> Hash[Integer, AST::Comment]
|
|
7
|
+
|
|
6
8
|
def block_from_body: (node) -> Types::Block?
|
|
7
9
|
|
|
8
10
|
def each_node: (Array[untyped] nodes) { (node) -> void } -> void
|
data/sig/types.rbs
CHANGED
|
@@ -54,7 +54,7 @@ module RBS
|
|
|
54
54
|
# * The function return type is a return position (`() -> void`)
|
|
55
55
|
# * Generic parameter is a return position (`Enumerator[Integer, void]`)
|
|
56
56
|
#
|
|
57
|
-
|
|
57
|
+
def with_nonreturn_void?: () -> bool
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
# t represents union of all possible types.
|
|
@@ -172,24 +172,23 @@ module RBS
|
|
|
172
172
|
class ClassSingleton
|
|
173
173
|
# singleton(::Foo)
|
|
174
174
|
# ^^^^^ => name
|
|
175
|
-
type loc = Location[:name,
|
|
176
|
-
|
|
177
|
-
def initialize: (name: TypeName, location: loc?) -> void
|
|
175
|
+
type loc = Location[:name, :args]
|
|
178
176
|
|
|
179
|
-
|
|
177
|
+
def initialize: (name: TypeName, location: loc?, ?args: Array[t]) -> void
|
|
180
178
|
|
|
181
179
|
attr_reader location: loc?
|
|
182
180
|
|
|
183
181
|
include _TypeBase
|
|
184
|
-
include
|
|
185
|
-
include NoSubst
|
|
186
|
-
include EmptyEachType
|
|
182
|
+
include Application
|
|
187
183
|
|
|
188
184
|
def ==: (untyped other) -> bool
|
|
189
185
|
|
|
190
186
|
alias eql? ==
|
|
191
187
|
|
|
192
188
|
def hash: () -> Integer
|
|
189
|
+
|
|
190
|
+
def map_type: () { (t) -> t } -> ClassSingleton
|
|
191
|
+
| () -> Enumerator[t, ClassSingleton]
|
|
193
192
|
end
|
|
194
193
|
|
|
195
194
|
module Application
|
|
@@ -213,7 +212,7 @@ module RBS
|
|
|
213
212
|
|
|
214
213
|
def has_classish_type?: () -> bool
|
|
215
214
|
|
|
216
|
-
|
|
215
|
+
def with_nonreturn_void?: () -> bool
|
|
217
216
|
end
|
|
218
217
|
|
|
219
218
|
class Interface
|
|
@@ -452,7 +451,7 @@ module RBS
|
|
|
452
451
|
|
|
453
452
|
def has_classish_type?: () -> bool
|
|
454
453
|
|
|
455
|
-
|
|
454
|
+
def with_nonreturn_void?: () -> bool
|
|
456
455
|
|
|
457
456
|
def ==: (untyped) -> bool
|
|
458
457
|
|
|
@@ -495,7 +494,7 @@ module RBS
|
|
|
495
494
|
|
|
496
495
|
def has_classish_type?: () -> bool
|
|
497
496
|
|
|
498
|
-
|
|
497
|
+
def with_nonreturn_void?: () -> bool
|
|
499
498
|
|
|
500
499
|
# Returns `?`
|
|
501
500
|
def param_to_s: () -> String
|
data/sig/unit_test/spy.rbs
CHANGED
|
@@ -153,6 +153,17 @@ module RBS
|
|
|
153
153
|
#
|
|
154
154
|
def refute_send_type: (String | MethodType method_type, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
|
|
155
155
|
|
|
156
|
+
# Calls a method `method_name`, validates if it's compatible with RBS type definition, and ensures it raises the `exception` class.
|
|
157
|
+
#
|
|
158
|
+
# 1. It calls `method_name` with `receiver` passing `args` and given block,
|
|
159
|
+
# 2. Validates if it's compatible with given `method_type`, and
|
|
160
|
+
# 3. Validates if it's compatible with one of the overloads defined in RBS type definition
|
|
161
|
+
# 4. Ensures that `exception` is thrown
|
|
162
|
+
#
|
|
163
|
+
# See `assert_send_type` for the details.
|
|
164
|
+
#
|
|
165
|
+
def assert_send_type_error: (String | MethodType method_type, Class exception, untyped receiver, Symbol method_name, *untyped args) ?{ () -> untyped } -> void
|
|
166
|
+
|
|
156
167
|
# Asserts if the constant `constant_name` has `constant_type`, and the RBS definition has compatible type
|
|
157
168
|
#
|
|
158
169
|
# ```ruby
|