rbs 3.9.5 → 4.0.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 +74 -0
- data/.clangd +2 -0
- data/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +58 -0
- data/.github/workflows/comments.yml +5 -3
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +40 -32
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/windows.yml +3 -3
- data/.gitignore +4 -0
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +284 -0
- data/README.md +38 -1
- data/Rakefile +144 -29
- data/Steepfile +2 -0
- data/config.yml +634 -62
- data/core/array.rbs +307 -227
- data/core/basic_object.rbs +9 -8
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/class.rbs +6 -5
- 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 +188 -87
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +65 -2
- 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 +280 -177
- data/core/file_test.rbs +3 -3
- data/core/float.rbs +257 -92
- data/core/gc.rbs +425 -281
- data/core/hash.rbs +1045 -739
- data/core/integer.rbs +135 -137
- data/core/io/buffer.rbs +53 -42
- data/core/io/wait.rbs +13 -35
- data/core/io.rbs +196 -148
- data/core/kernel.rbs +216 -155
- data/core/marshal.rbs +4 -4
- data/core/match_data.rbs +15 -13
- data/core/math.rbs +107 -66
- data/core/method.rbs +69 -33
- data/core/module.rbs +244 -106
- data/core/nil_class.rbs +7 -6
- data/core/numeric.rbs +74 -63
- data/core/object.rbs +9 -11
- data/core/object_space.rbs +30 -23
- data/core/pathname.rbs +1322 -0
- data/core/proc.rbs +95 -58
- data/core/process.rbs +222 -202
- data/core/ractor.rbs +371 -515
- data/core/random.rbs +21 -3
- data/core/range.rbs +159 -57
- data/core/rational.rbs +60 -89
- data/core/rbs/unnamed/argf.rbs +60 -53
- 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 +38 -34
- data/core/rubygems/config_file.rbs +5 -5
- data/core/rubygems/errors.rbs +4 -71
- data/core/rubygems/requirement.rbs +5 -5
- data/core/rubygems/rubygems.rbs +16 -82
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +490 -360
- data/core/signal.rbs +26 -16
- data/core/string.rbs +3303 -1365
- data/core/struct.rbs +27 -26
- data/core/symbol.rbs +41 -34
- data/core/thread.rbs +135 -74
- 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/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 +576 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +46 -16
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +1513 -0
- data/ext/rbs_extension/ast_translation.h +37 -0
- data/ext/rbs_extension/class_constants.c +185 -0
- data/{include/rbs/constants.h → ext/rbs_extension/class_constants.h} +22 -1
- data/ext/rbs_extension/compat.h +10 -0
- data/ext/rbs_extension/extconf.rb +25 -1
- data/ext/rbs_extension/legacy_location.c +294 -0
- data/ext/rbs_extension/legacy_location.h +82 -0
- data/ext/rbs_extension/main.c +468 -24
- 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 +1022 -0
- data/include/rbs/defines.h +86 -0
- data/include/rbs/lexer.h +206 -0
- data/include/rbs/location.h +40 -0
- data/include/rbs/parser.h +153 -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 +3 -1
- 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 +10 -10
- data/lib/rbs/ast/members.rb +14 -14
- data/lib/rbs/ast/ruby/annotations.rb +409 -0
- data/lib/rbs/ast/ruby/comment_block.rb +245 -0
- data/lib/rbs/ast/ruby/declarations.rb +281 -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 +723 -0
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +105 -20
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +63 -126
- data/lib/rbs/cli.rb +56 -24
- data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/collection.rb +0 -1
- data/lib/rbs/definition.rb +6 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +121 -65
- data/lib/rbs/definition_builder/method_builder.rb +65 -30
- data/lib/rbs/definition_builder.rb +177 -20
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment/class_entry.rb +69 -0
- data/lib/rbs/environment/module_entry.rb +66 -0
- data/lib/rbs/environment.rb +402 -214
- 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 +542 -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 +0 -7
- data/lib/rbs/parser_aux.rb +35 -7
- data/lib/rbs/prototype/helpers.rb +57 -0
- data/lib/rbs/prototype/rb.rb +3 -28
- data/lib/rbs/prototype/rbi.rb +3 -20
- data/lib/rbs/prototype/runtime.rb +10 -2
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +7 -4
- data/lib/rbs/test/type_check.rb +19 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +91 -79
- data/lib/rbs/unit_test/convertibles.rb +1 -0
- data/lib/rbs/unit_test/type_assertions.rb +35 -8
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +13 -2
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +3 -3
- data/rbs.gemspec +4 -2
- 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/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 +1 -1
- data/sig/ast/ruby/annotations.rbs +421 -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 +178 -0
- data/sig/buffer.rbs +63 -5
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +12 -8
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -0
- data/sig/definition_builder.rbs +3 -1
- data/sig/environment/class_entry.rbs +50 -0
- data/sig/environment/module_entry.rbs +50 -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 +124 -0
- data/sig/location.rbs +32 -7
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +67 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +10 -8
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +1604 -0
- data/src/lexer.c +3194 -0
- data/src/lexer.re +154 -0
- data/src/lexstate.c +212 -0
- data/src/location.c +31 -0
- data/src/parser.c +4205 -0
- data/src/string.c +41 -0
- data/src/util/rbs_allocator.c +165 -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 +21308 -0
- data/src/util/rbs_unescape.c +167 -0
- 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/date/0/date.rbs +92 -79
- data/stdlib/date/0/date_time.rbs +25 -24
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +748 -347
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +158 -139
- data/stdlib/forwardable/0/forwardable.rbs +13 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +226 -179
- data/stdlib/monitor/0/monitor.rbs +3 -3
- 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 +475 -357
- 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 +25 -68
- 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 +2 -2
- data/stdlib/singleton/0/singleton.rbs +3 -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 +1177 -85
- data/stdlib/strscan/0/string_scanner.rbs +27 -25
- data/stdlib/tempfile/0/tempfile.rbs +25 -21
- data/stdlib/time/0/time.rbs +8 -6
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/tsort/0/tsort.rbs +7 -6
- data/stdlib/uri/0/common.rbs +42 -20
- data/stdlib/uri/0/file.rbs +3 -3
- data/stdlib/uri/0/generic.rbs +26 -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_reader.rbs +6 -6
- 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
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +121 -18
- 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
data/sig/location.rbs
CHANGED
|
@@ -4,14 +4,20 @@ module RBS
|
|
|
4
4
|
#
|
|
5
5
|
# A location can have _child_ locations.
|
|
6
6
|
#
|
|
7
|
-
class Location[in RequiredChildKeys, in OptionalChildKeys]
|
|
7
|
+
class Location[in RequiredChildKeys = untyped, in OptionalChildKeys = untyped]
|
|
8
8
|
# The buffer this location points on.
|
|
9
9
|
attr_reader buffer (): Buffer
|
|
10
10
|
|
|
11
|
-
# The index of character the range starts from
|
|
11
|
+
# The absolute start index of character the range starts from
|
|
12
|
+
#
|
|
13
|
+
# It returns the index in the `buffer.top_buffer`.
|
|
14
|
+
#
|
|
12
15
|
attr_reader start_pos (): Integer
|
|
13
16
|
|
|
14
|
-
# The index of character the range ends at
|
|
17
|
+
# The absolute end index of character the range ends at
|
|
18
|
+
#
|
|
19
|
+
# It returns the index in the `buffer.top_buffer`.
|
|
20
|
+
#
|
|
15
21
|
attr_reader end_pos (): Integer
|
|
16
22
|
|
|
17
23
|
def initialize: (Buffer, Integer start_pos, Integer end_pos) -> void
|
|
@@ -24,26 +30,37 @@ module RBS
|
|
|
24
30
|
# Returns the name of the buffer.
|
|
25
31
|
def name: () -> untyped
|
|
26
32
|
|
|
27
|
-
#
|
|
33
|
+
# The *raw* index of character the range starts from.
|
|
34
|
+
attr_reader _start_pos (): Integer
|
|
35
|
+
|
|
36
|
+
# The *raw* index of character the range ends at.
|
|
37
|
+
attr_reader _end_pos (): Integer
|
|
38
|
+
|
|
39
|
+
# Line of the `start_pos` (1 origin, absolute)
|
|
28
40
|
attr_reader start_line (): Integer
|
|
29
41
|
|
|
30
|
-
# Column of the `start_pos` (0 origin)
|
|
42
|
+
# Column of the `start_pos` (0 origin, absolute)
|
|
31
43
|
attr_reader start_column (): Integer
|
|
32
44
|
|
|
33
|
-
# Line of the `end_pos` (1 origin)
|
|
45
|
+
# Line of the `end_pos` (1 origin, absolute)
|
|
34
46
|
attr_reader end_line (): Integer
|
|
35
47
|
|
|
36
|
-
# Column of the `end_pos` (0 origin)
|
|
48
|
+
# Column of the `end_pos` (0 origin, absolute)
|
|
37
49
|
attr_reader end_column (): Integer
|
|
38
50
|
|
|
51
|
+
# The absolute line-column pair of the start position
|
|
52
|
+
#
|
|
39
53
|
attr_reader start_loc (): Buffer::loc
|
|
40
54
|
|
|
41
55
|
@start_loc: Buffer::loc?
|
|
42
56
|
|
|
57
|
+
# The absolute line-column pair of the end position
|
|
58
|
+
#
|
|
43
59
|
attr_reader end_loc (): Buffer::loc
|
|
44
60
|
|
|
45
61
|
@end_loc: Buffer::loc?
|
|
46
62
|
|
|
63
|
+
# The absolute range of the start and end position
|
|
47
64
|
attr_reader range (): Range[Integer]
|
|
48
65
|
|
|
49
66
|
@range: Range[Integer]?
|
|
@@ -97,6 +114,14 @@ module RBS
|
|
|
97
114
|
|
|
98
115
|
def key?: (Symbol) -> bool
|
|
99
116
|
|
|
117
|
+
# Returns the location of the buffer, but the buffer is detached from the parent buffer
|
|
118
|
+
#
|
|
119
|
+
def local_location: () -> self
|
|
120
|
+
|
|
121
|
+
# Returns the source of `#local_location`
|
|
122
|
+
#
|
|
123
|
+
def local_source: () -> String
|
|
124
|
+
|
|
100
125
|
private
|
|
101
126
|
|
|
102
127
|
def _add_required_child: (RequiredChildKeys name, Integer start_pos, Integer end_pos) -> void
|
data/sig/locator.rbs
CHANGED
|
@@ -37,8 +37,6 @@ module RBS
|
|
|
37
37
|
#
|
|
38
38
|
def find2: (line: Integer, column: Integer) -> [Symbol?, Array[component]]?
|
|
39
39
|
|
|
40
|
-
private
|
|
41
|
-
|
|
42
40
|
def find_in_directive: (Integer pos, AST::Directives::t, Array[component]) -> bool
|
|
43
41
|
|
|
44
42
|
def find_in_decl: (Integer pos, decl: AST::Declarations::t, array: Array[component]) -> bool
|
data/sig/manifest.yaml
CHANGED
data/sig/method_builder.rbs
CHANGED
|
@@ -16,16 +16,19 @@ module RBS
|
|
|
16
16
|
#
|
|
17
17
|
class Definition
|
|
18
18
|
type original = AST::Members::MethodDefinition | AST::Members::Alias | AST::Members::AttrAccessor | AST::Members::AttrWriter | AST::Members::AttrReader
|
|
19
|
+
| AST::Ruby::Members::DefMember | AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember
|
|
20
|
+
|
|
21
|
+
type overloading_definition = AST::Members::MethodDefinition | AST::Ruby::Members::DefMember
|
|
19
22
|
|
|
20
23
|
type accessibility = RBS::Definition::accessibility
|
|
21
24
|
|
|
22
25
|
attr_reader name: Symbol
|
|
23
26
|
attr_reader type: instance_type
|
|
24
27
|
attr_reader originals: Array[original]
|
|
25
|
-
attr_reader overloads: Array[
|
|
28
|
+
attr_reader overloads: Array[overloading_definition]
|
|
26
29
|
attr_reader accessibilities: Array[accessibility]
|
|
27
30
|
|
|
28
|
-
def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[
|
|
31
|
+
def initialize: (name: Symbol, type: instance_type, originals: Array[original], overloads: Array[overloading_definition], accessibilities: Array[accessibility]) -> void
|
|
29
32
|
|
|
30
33
|
def original: () -> original?
|
|
31
34
|
|
|
@@ -74,9 +77,11 @@ module RBS
|
|
|
74
77
|
|
|
75
78
|
def build_attribute: (Methods, Methods::instance_type, member: AST::Members::AttrAccessor | AST::Members::AttrReader | AST::Members::AttrWriter, accessibility: Definition::accessibility) -> void
|
|
76
79
|
|
|
77
|
-
def
|
|
80
|
+
def build_ruby_attribute: (Methods, Methods::instance_type, member: AST::Ruby::Members::AttrReaderMember | AST::Ruby::Members::AttrWriterMember | AST::Ruby::Members::AttrAccessorMember, accessibility: Definition::accessibility) -> void
|
|
81
|
+
|
|
82
|
+
def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition | AST::Ruby::Members::DefMember, accessibility: Definition::accessibility) -> void
|
|
78
83
|
|
|
79
|
-
def
|
|
84
|
+
def each_rbs_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void
|
|
80
85
|
|
|
81
86
|
def update: (env: Environment, except: _Each[TypeName]) -> MethodBuilder
|
|
82
87
|
end
|
data/sig/namespace.rbs
CHANGED
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.
|
|
@@ -62,12 +63,45 @@ module RBS
|
|
|
62
63
|
# RBS::Parser.parse_type("", require_eof: true) # => nil
|
|
63
64
|
# ```
|
|
64
65
|
#
|
|
65
|
-
|
|
66
|
+
# The `void_allowed` keyword controls whether `void` is allowed as a type.
|
|
67
|
+
#
|
|
68
|
+
# ```ruby
|
|
69
|
+
# RBS::Parser.parse_type("void", void_allowed: true) # => `void`
|
|
70
|
+
# RBS::Parser.parse_type("void", void_allowed: false) # => Raises an syntax error
|
|
71
|
+
# ```
|
|
72
|
+
#
|
|
73
|
+
# The `self_allowed` keyword controls whether `self` is allowed as a type.
|
|
74
|
+
#
|
|
75
|
+
# ```ruby
|
|
76
|
+
# RBS::Parser.parse_type("self", self_allowed: true) # => `self`
|
|
77
|
+
# RBS::Parser.parse_type("self", self_allowed: false) # => Raises an syntax error
|
|
78
|
+
# ```
|
|
79
|
+
#
|
|
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?
|
|
66
82
|
|
|
67
83
|
# Parse whole RBS file and return an array of declarations
|
|
68
84
|
#
|
|
69
85
|
def self.parse_signature: (Buffer | String) -> [Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]]
|
|
70
86
|
|
|
87
|
+
# Parse a list of type parameters and return it
|
|
88
|
+
#
|
|
89
|
+
# ```ruby
|
|
90
|
+
# RBS::Parser.parse_type_params("") # => nil
|
|
91
|
+
# RBS::Parser.parse_type_params("[U, V]") # => `[:U, :V]`
|
|
92
|
+
# RBS::Parser.parse_type_params("[in U, V < Integer]") # => `[:U, :V]`
|
|
93
|
+
# ```
|
|
94
|
+
#
|
|
95
|
+
# When `module_type_params` is `false`, an error is raised if `unchecked`, `in` or `out` are used.
|
|
96
|
+
#
|
|
97
|
+
# ```ruby
|
|
98
|
+
# RBS::Parser.parse_type_params("[unchecked U]", module_type_params: false) # => Raises an error
|
|
99
|
+
# RBS::Parser.parse_type_params("[out U]", module_type_params: false) # => Raises an error
|
|
100
|
+
# RBS::Parser.parse_type_params("[in U]", module_type_params: false) # => Raises an error
|
|
101
|
+
# ```
|
|
102
|
+
#
|
|
103
|
+
def self.parse_type_params: (Buffer | String, ?module_type_params: bool) -> Array[AST::TypeParam]
|
|
104
|
+
|
|
71
105
|
# Returns the magic comment from the buffer
|
|
72
106
|
#
|
|
73
107
|
def self.magic_comment: (Buffer) -> AST::Directives::ResolveTypeNames?
|
|
@@ -82,18 +116,38 @@ module RBS
|
|
|
82
116
|
|
|
83
117
|
KEYWORDS: Hash[String, bot]
|
|
84
118
|
|
|
119
|
+
# Parse a leading annotation and return it
|
|
120
|
+
#
|
|
121
|
+
# Raises an exception if the source text contains a syntax error.
|
|
122
|
+
#
|
|
123
|
+
def self.parse_inline_leading_annotation: (Buffer | String, Range[Integer?], ?variables: Array[Symbol]) -> AST::Ruby::Annotations::leading_annotation
|
|
124
|
+
|
|
125
|
+
# Parse a leading annotation and return it
|
|
126
|
+
#
|
|
127
|
+
# Raises an exception if the source text contains a syntax error.
|
|
128
|
+
#
|
|
129
|
+
def self.parse_inline_trailing_annotation: (Buffer | String, Range[Integer?], ?variables: Array[Symbol]) -> AST::Ruby::Annotations::trailing_annotation
|
|
130
|
+
|
|
85
131
|
private
|
|
86
132
|
|
|
87
133
|
def self.buffer: (String | Buffer source) -> Buffer
|
|
88
134
|
|
|
89
|
-
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?
|
|
90
138
|
|
|
91
139
|
def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
|
|
92
140
|
|
|
93
141
|
def self._parse_signature: (Buffer, Integer start_pos, Integer end_pos) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
|
|
94
142
|
|
|
143
|
+
def self._parse_type_params: (Buffer, Integer start_pos, Integer end_pos, bool module_type_params) -> Array[AST::TypeParam]
|
|
144
|
+
|
|
95
145
|
def self._lex: (Buffer, Integer end_pos) -> Array[[Symbol, Location[untyped, untyped]]]
|
|
96
146
|
|
|
147
|
+
def self._parse_inline_leading_annotation: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> AST::Ruby::Annotations::leading_annotation
|
|
148
|
+
|
|
149
|
+
def self._parse_inline_trailing_annotation: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> AST::Ruby::Annotations::trailing_annotation
|
|
150
|
+
|
|
97
151
|
class LocatedValue
|
|
98
152
|
end
|
|
99
153
|
end
|
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
|
|
@@ -8,28 +8,56 @@ module RBS
|
|
|
8
8
|
class TypeNameResolver
|
|
9
9
|
type query = [TypeName, context]
|
|
10
10
|
|
|
11
|
-
def initialize: (
|
|
11
|
+
def initialize: (Set[TypeName] all_names, Hash[TypeName, [TypeName, context]] aliases) -> void
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
def self.build: (Environment) -> instance
|
|
14
|
+
|
|
15
|
+
# Translates given type name to absolute type name
|
|
16
|
+
#
|
|
14
17
|
# Returns `nil` if cannot find associated type name.
|
|
18
|
+
# Module names in the type name are normalized.
|
|
15
19
|
#
|
|
16
20
|
def resolve: (TypeName, context: context) -> TypeName?
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
# Translates given type name to absolute type name
|
|
23
|
+
#
|
|
24
|
+
# Returns `false` if a cycle is detected while resolving aliases.
|
|
25
|
+
# Returns `nil` if the type name cannot be resolved.
|
|
26
|
+
#
|
|
27
|
+
def resolve_namespace: (TypeName, context: context) -> (TypeName | false | nil)
|
|
19
28
|
|
|
20
|
-
|
|
29
|
+
private
|
|
21
30
|
|
|
22
31
|
attr_reader all_names: Set[TypeName]
|
|
23
32
|
|
|
33
|
+
attr_reader aliases: Hash[TypeName, [TypeName, context]]
|
|
34
|
+
|
|
24
35
|
attr_reader cache: Hash[query, TypeName?]
|
|
25
36
|
|
|
26
|
-
|
|
37
|
+
# Returns the type name if it exists in `all_names` (normalized)
|
|
38
|
+
#
|
|
39
|
+
def has_type_name?: (TypeName) -> TypeName?
|
|
40
|
+
|
|
41
|
+
# Returns the type name if it is an alias (not normalized)
|
|
42
|
+
#
|
|
43
|
+
def aliased_name?: (TypeName) -> TypeName?
|
|
27
44
|
|
|
28
45
|
def try_cache: (query) { () -> TypeName? } -> TypeName?
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
# Translates the head module name in the context and returns an absolute type name
|
|
48
|
+
#
|
|
49
|
+
# Returns `nil` if cannot find associated type name.
|
|
50
|
+
# The returned namespace may be an alias
|
|
51
|
+
#
|
|
52
|
+
def resolve_head_namespace: (Symbol, context) -> TypeName?
|
|
53
|
+
|
|
54
|
+
# Resolves the type name in the given context
|
|
55
|
+
#
|
|
56
|
+
def resolve_type_name: (Symbol, context) -> TypeName?
|
|
57
|
+
|
|
58
|
+
def resolve_namespace0: (TypeName, context, Set[TypeName]) -> (TypeName | false | nil)
|
|
31
59
|
|
|
32
|
-
def
|
|
60
|
+
def normalize_namespace: (TypeName, TypeName rhs, context, Set[TypeName]) -> (TypeName | false | nil)
|
|
33
61
|
end
|
|
34
62
|
end
|
|
35
63
|
end
|
data/sig/source.rbs
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module RBS
|
|
2
|
+
module Source
|
|
3
|
+
type t = RBS | Ruby
|
|
4
|
+
|
|
5
|
+
class RBS
|
|
6
|
+
attr_reader buffer: Buffer
|
|
7
|
+
|
|
8
|
+
attr_reader directives: Array[AST::Directives::t]
|
|
9
|
+
|
|
10
|
+
attr_reader declarations: Array[AST::Declarations::t]
|
|
11
|
+
|
|
12
|
+
def initialize: (Buffer, Array[AST::Directives::t], Array[AST::Declarations::t]) -> void
|
|
13
|
+
|
|
14
|
+
# Enumerates defined type names in the source
|
|
15
|
+
#
|
|
16
|
+
# The order is undefined. Deduplicated per source object.
|
|
17
|
+
#
|
|
18
|
+
def each_type_name: () { (TypeName) -> void } -> void
|
|
19
|
+
| () -> Enumerator[TypeName]
|
|
20
|
+
|
|
21
|
+
private def each_declaration_type_name: (Set[TypeName], AST::Declarations::t) { (TypeName) -> void } -> void
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Ruby
|
|
25
|
+
attr_reader buffer: Buffer
|
|
26
|
+
|
|
27
|
+
attr_reader prism_result: Prism::ParseResult
|
|
28
|
+
|
|
29
|
+
attr_reader declarations: Array[AST::Ruby::Declarations::t]
|
|
30
|
+
|
|
31
|
+
attr_reader diagnostics: Array[InlineParser::Diagnostic::t]
|
|
32
|
+
|
|
33
|
+
def initialize: (Buffer, Prism::ParseResult, Array[AST::Ruby::Declarations::t], Array[InlineParser::Diagnostic::t]) -> void
|
|
34
|
+
|
|
35
|
+
def each_type_name: () { (TypeName) -> void } -> void
|
|
36
|
+
| () -> Enumerator[TypeName]
|
|
37
|
+
|
|
38
|
+
private def each_declaration_type_name: (Set[TypeName], AST::Ruby::Declarations::t) { (TypeName) -> void } -> void
|
|
39
|
+
|
|
40
|
+
# Compares the type declaration between `self` and `other`
|
|
41
|
+
#
|
|
42
|
+
# The comparison is based on the AST structure.
|
|
43
|
+
# Differences on Ruby code implementation may be ignored.
|
|
44
|
+
#
|
|
45
|
+
def ==: (other: Ruby) -> bool
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
data/sig/type_param.rbs
CHANGED
|
@@ -4,13 +4,14 @@ module RBS
|
|
|
4
4
|
# Key
|
|
5
5
|
# ^^^ name
|
|
6
6
|
#
|
|
7
|
-
# unchecked out Elem < _ToJson = untyped
|
|
8
|
-
# ^^^^^^^^^
|
|
9
|
-
# ^^^
|
|
10
|
-
# ^^^^
|
|
11
|
-
# ^^^^^^^^^
|
|
12
|
-
#
|
|
13
|
-
|
|
7
|
+
# unchecked out Elem < _ToJson > bot = untyped
|
|
8
|
+
# ^^^^^^^^^ unchecked
|
|
9
|
+
# ^^^ variance
|
|
10
|
+
# ^^^^ name
|
|
11
|
+
# ^^^^^^^^^ upper_bound
|
|
12
|
+
# ^^^^^ lower_bound
|
|
13
|
+
# ^^^^^^^^ default
|
|
14
|
+
type loc = Location[:name, :variance | :unchecked | :upper_bound | :lower_bound | :default]
|
|
14
15
|
|
|
15
16
|
type variance = :invariant | :covariant | :contravariant
|
|
16
17
|
|
|
@@ -24,9 +25,13 @@ module RBS
|
|
|
24
25
|
|
|
25
26
|
attr_reader upper_bound_type: Types::t?
|
|
26
27
|
|
|
28
|
+
%a{pure} def lower_bound: () -> bound?
|
|
29
|
+
|
|
30
|
+
attr_reader lower_bound_type: Types::t?
|
|
31
|
+
|
|
27
32
|
attr_reader default_type: Types::t?
|
|
28
33
|
|
|
29
|
-
def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
|
|
34
|
+
def initialize: (name: Symbol, variance: variance, upper_bound: Types::t?, lower_bound: Types::t?, location: loc?, ?default_type: Types::t?, ?unchecked: bool) -> void
|
|
30
35
|
|
|
31
36
|
include _ToJson
|
|
32
37
|
|
data/sig/typename.rbs
CHANGED
data/sig/types.rbs
CHANGED
|
@@ -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
|
|
@@ -518,7 +517,10 @@ module RBS
|
|
|
518
517
|
|
|
519
518
|
attr_reader self_type: t?
|
|
520
519
|
|
|
521
|
-
|
|
520
|
+
type loc = Location[bot, bot]
|
|
521
|
+
attr_reader location: loc?
|
|
522
|
+
|
|
523
|
+
def initialize: (?location: loc?, type: function, ?self_type: t?, required: boolish) -> void
|
|
522
524
|
|
|
523
525
|
def ==: (untyped other) -> bool
|
|
524
526
|
|
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
|