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/lib/rbs/environment.rb
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
module RBS
|
|
4
4
|
class Environment
|
|
5
|
-
attr_reader :declarations
|
|
6
|
-
|
|
7
5
|
attr_reader :class_decls
|
|
8
6
|
attr_reader :interface_decls
|
|
9
7
|
attr_reader :type_alias_decls
|
|
@@ -11,116 +9,21 @@ module RBS
|
|
|
11
9
|
attr_reader :global_decls
|
|
12
10
|
attr_reader :class_alias_decls
|
|
13
11
|
|
|
14
|
-
attr_reader :
|
|
15
|
-
|
|
16
|
-
module ContextUtil
|
|
17
|
-
def calculate_context(decls)
|
|
18
|
-
decls.inject(nil) do |context, decl| #$ Resolver::context
|
|
19
|
-
if (_, last = context)
|
|
20
|
-
last or raise
|
|
21
|
-
[context, last + decl.name]
|
|
22
|
-
else
|
|
23
|
-
[nil, decl.name.absolute!]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class MultiEntry
|
|
30
|
-
D = _ = Struct.new(:decl, :outer, keyword_init: true) do
|
|
31
|
-
# @implements D[M]
|
|
32
|
-
|
|
33
|
-
include ContextUtil
|
|
34
|
-
|
|
35
|
-
def context
|
|
36
|
-
@context ||= calculate_context(outer + [decl])
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
attr_reader :name
|
|
41
|
-
attr_reader :decls
|
|
42
|
-
|
|
43
|
-
def initialize(name:)
|
|
44
|
-
@name = name
|
|
45
|
-
@decls = []
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def insert(decl:, outer:)
|
|
49
|
-
decls << D.new(decl: decl, outer: outer)
|
|
50
|
-
@primary = nil
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def validate_type_params
|
|
54
|
-
unless decls.empty?
|
|
55
|
-
hd_decl, *tl_decls = decls
|
|
56
|
-
raise unless hd_decl
|
|
57
|
-
|
|
58
|
-
hd_params = hd_decl.decl.type_params
|
|
59
|
-
|
|
60
|
-
tl_decls.each do |tl_decl|
|
|
61
|
-
tl_params = tl_decl.decl.type_params
|
|
62
|
-
|
|
63
|
-
unless compatible_params?(hd_params, tl_params)
|
|
64
|
-
raise GenericParameterMismatchError.new(name: name, decl: _ = tl_decl.decl)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def compatible_params?(ps1, ps2)
|
|
71
|
-
if ps1.size == ps2.size
|
|
72
|
-
ps1 == AST::TypeParam.rename(ps2, new_names: ps1.map(&:name))
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def type_params
|
|
77
|
-
primary.decl.type_params
|
|
78
|
-
end
|
|
12
|
+
attr_reader :sources
|
|
79
13
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
class ModuleEntry < MultiEntry
|
|
86
|
-
def self_types
|
|
87
|
-
decls.flat_map do |d|
|
|
88
|
-
d.decl.self_types
|
|
89
|
-
end.uniq
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def primary
|
|
93
|
-
@primary ||= begin
|
|
94
|
-
validate_type_params
|
|
95
|
-
decls.first or raise("decls cannot be empty")
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
class ClassEntry < MultiEntry
|
|
101
|
-
def primary
|
|
102
|
-
@primary ||= begin
|
|
103
|
-
validate_type_params
|
|
104
|
-
decls.find {|d| d.decl.super_class } || decls.first or raise("decls cannot be empty")
|
|
105
|
-
end
|
|
106
|
-
end
|
|
14
|
+
def declarations
|
|
15
|
+
sources.flat_map(&:declarations)
|
|
107
16
|
end
|
|
108
17
|
|
|
109
18
|
class SingleEntry
|
|
110
19
|
attr_reader :name
|
|
111
|
-
attr_reader :
|
|
20
|
+
attr_reader :context
|
|
112
21
|
attr_reader :decl
|
|
113
22
|
|
|
114
|
-
def initialize(name:, decl:,
|
|
23
|
+
def initialize(name:, decl:, context:)
|
|
115
24
|
@name = name
|
|
116
25
|
@decl = decl
|
|
117
|
-
@
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
include ContextUtil
|
|
121
|
-
|
|
122
|
-
def context
|
|
123
|
-
@context ||= calculate_context(outer)
|
|
26
|
+
@context = context
|
|
124
27
|
end
|
|
125
28
|
end
|
|
126
29
|
|
|
@@ -143,9 +46,7 @@ module RBS
|
|
|
143
46
|
end
|
|
144
47
|
|
|
145
48
|
def initialize
|
|
146
|
-
@
|
|
147
|
-
@declarations = []
|
|
148
|
-
|
|
49
|
+
@sources = []
|
|
149
50
|
@class_decls = {}
|
|
150
51
|
@interface_decls = {}
|
|
151
52
|
@type_alias_decls = {}
|
|
@@ -156,9 +57,7 @@ module RBS
|
|
|
156
57
|
end
|
|
157
58
|
|
|
158
59
|
def initialize_copy(other)
|
|
159
|
-
@
|
|
160
|
-
@declarations = other.declarations.dup
|
|
161
|
-
|
|
60
|
+
@sources = other.sources.dup
|
|
162
61
|
@class_decls = other.class_decls.dup
|
|
163
62
|
@interface_decls = other.interface_decls.dup
|
|
164
63
|
@type_alias_decls = other.type_alias_decls.dup
|
|
@@ -223,21 +122,17 @@ module RBS
|
|
|
223
122
|
end
|
|
224
123
|
end
|
|
225
124
|
|
|
226
|
-
def class_entry(type_name)
|
|
227
|
-
case
|
|
228
|
-
when
|
|
229
|
-
|
|
230
|
-
when (class_alias = class_alias_decls[type_name]).is_a?(ClassAliasEntry)
|
|
231
|
-
class_alias
|
|
125
|
+
def class_entry(type_name, normalized: false)
|
|
126
|
+
case entry = constant_entry(type_name, normalized: normalized || false)
|
|
127
|
+
when ClassEntry, ClassAliasEntry
|
|
128
|
+
entry
|
|
232
129
|
end
|
|
233
130
|
end
|
|
234
131
|
|
|
235
|
-
def module_entry(type_name)
|
|
236
|
-
case
|
|
237
|
-
when
|
|
238
|
-
|
|
239
|
-
when (module_alias = class_alias_decls[type_name]).is_a?(ModuleAliasEntry)
|
|
240
|
-
module_alias
|
|
132
|
+
def module_entry(type_name, normalized: false)
|
|
133
|
+
case entry = constant_entry(type_name, normalized: normalized || false)
|
|
134
|
+
when ModuleEntry, ModuleAliasEntry
|
|
135
|
+
entry
|
|
241
136
|
end
|
|
242
137
|
end
|
|
243
138
|
|
|
@@ -253,26 +148,40 @@ module RBS
|
|
|
253
148
|
end
|
|
254
149
|
|
|
255
150
|
def normalized_module_entry(type_name)
|
|
256
|
-
|
|
257
|
-
case entry = module_entry(name)
|
|
258
|
-
when ModuleEntry, nil
|
|
259
|
-
entry
|
|
260
|
-
when ModuleAliasEntry
|
|
261
|
-
raise
|
|
262
|
-
end
|
|
263
|
-
end
|
|
151
|
+
module_entry(type_name, normalized: true)
|
|
264
152
|
end
|
|
265
153
|
|
|
266
|
-
def module_class_entry(type_name)
|
|
267
|
-
|
|
154
|
+
def module_class_entry(type_name, normalized: false)
|
|
155
|
+
entry = constant_entry(type_name, normalized: normalized || false)
|
|
156
|
+
if entry.is_a?(ConstantEntry)
|
|
157
|
+
nil
|
|
158
|
+
else
|
|
159
|
+
entry
|
|
160
|
+
end
|
|
268
161
|
end
|
|
269
162
|
|
|
270
163
|
def normalized_module_class_entry(type_name)
|
|
271
|
-
|
|
164
|
+
module_class_entry(type_name, normalized: true)
|
|
272
165
|
end
|
|
273
166
|
|
|
274
|
-
def constant_entry(type_name)
|
|
275
|
-
|
|
167
|
+
def constant_entry(type_name, normalized: false)
|
|
168
|
+
if normalized
|
|
169
|
+
if normalized_name = normalize_module_name?(type_name)
|
|
170
|
+
class_decls.fetch(normalized_name, nil)
|
|
171
|
+
else
|
|
172
|
+
# The type_name may be declared with constant declaration
|
|
173
|
+
unless type_name.namespace.empty?
|
|
174
|
+
parent = type_name.namespace.to_type_name
|
|
175
|
+
normalized_parent = normalize_module_name?(parent) or return
|
|
176
|
+
constant_name = TypeName.new(name: type_name.name, namespace: normalized_parent.to_namespace)
|
|
177
|
+
constant_decls.fetch(constant_name, nil)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
else
|
|
181
|
+
class_decls.fetch(type_name, nil) ||
|
|
182
|
+
class_alias_decls.fetch(type_name, nil) ||
|
|
183
|
+
constant_decls.fetch(type_name, nil)
|
|
184
|
+
end
|
|
276
185
|
end
|
|
277
186
|
|
|
278
187
|
def normalize_type_name?(name)
|
|
@@ -307,6 +216,10 @@ module RBS
|
|
|
307
216
|
end
|
|
308
217
|
end
|
|
309
218
|
|
|
219
|
+
def normalize_type_name(name)
|
|
220
|
+
normalize_type_name?(name) || name
|
|
221
|
+
end
|
|
222
|
+
|
|
310
223
|
def normalized_type_name?(type_name)
|
|
311
224
|
case
|
|
312
225
|
when type_name.interface?
|
|
@@ -321,56 +234,47 @@ module RBS
|
|
|
321
234
|
end
|
|
322
235
|
|
|
323
236
|
def normalized_type_name!(name)
|
|
324
|
-
normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}
|
|
237
|
+
normalized_type_name?(name) or raise "Normalized type name is expected but given `#{name}`"
|
|
325
238
|
name
|
|
326
239
|
end
|
|
327
240
|
|
|
328
|
-
def normalize_type_name(name)
|
|
329
|
-
normalize_type_name?(name) || name
|
|
330
|
-
end
|
|
331
|
-
|
|
332
|
-
def normalize_module_name(name)
|
|
333
|
-
normalize_module_name?(name) or name
|
|
334
|
-
end
|
|
335
|
-
|
|
336
241
|
def normalize_module_name?(name)
|
|
337
242
|
raise "Class/module name is expected: #{name}" unless name.class?
|
|
338
243
|
name = name.absolute! unless name.absolute?
|
|
339
244
|
|
|
340
|
-
|
|
341
|
-
|
|
245
|
+
original_name = name
|
|
246
|
+
|
|
247
|
+
if @normalize_module_name_cache.key?(original_name)
|
|
248
|
+
return @normalize_module_name_cache[original_name]
|
|
342
249
|
end
|
|
343
250
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
251
|
+
if alias_entry = class_alias_decls.fetch(name, nil)
|
|
252
|
+
unless alias_entry.decl.old_name.absolute?
|
|
253
|
+
# Having relative old_name means the type name resolution was failed.
|
|
254
|
+
# Run TypeNameResolver for failure reason
|
|
255
|
+
resolver = Resolver::TypeNameResolver.build(self)
|
|
256
|
+
name = resolver.resolve_namespace(name, context: nil)
|
|
257
|
+
@normalize_module_name_cache[original_name] = name
|
|
258
|
+
return name
|
|
351
259
|
end
|
|
352
|
-
else
|
|
353
|
-
type_name = name
|
|
354
|
-
end
|
|
355
260
|
|
|
356
|
-
|
|
261
|
+
name = alias_entry.decl.old_name
|
|
262
|
+
end
|
|
357
263
|
|
|
358
|
-
|
|
264
|
+
if class_decls.key?(name)
|
|
265
|
+
@normalize_module_name_cache[original_name] = name
|
|
266
|
+
end
|
|
267
|
+
end
|
|
359
268
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
type_name
|
|
364
|
-
when ClassAliasEntry, ModuleAliasEntry
|
|
365
|
-
normalize_module_name?(entry.decl.old_name)
|
|
366
|
-
else
|
|
367
|
-
nil
|
|
368
|
-
end
|
|
269
|
+
def normalize_module_name(name)
|
|
270
|
+
normalize_module_name?(name) || name
|
|
271
|
+
end
|
|
369
272
|
|
|
370
|
-
|
|
273
|
+
def normalize_module_name!(name)
|
|
274
|
+
normalize_module_name?(name) or raise "Module name `#{name}` cannot be normalized"
|
|
371
275
|
end
|
|
372
276
|
|
|
373
|
-
def
|
|
277
|
+
def insert_rbs_decl(decl, context:, namespace:)
|
|
374
278
|
case decl
|
|
375
279
|
when AST::Declarations::Class, AST::Declarations::Module
|
|
376
280
|
name = decl.name.with_prefix(namespace)
|
|
@@ -384,9 +288,9 @@ module RBS
|
|
|
384
288
|
unless class_decls.key?(name)
|
|
385
289
|
case decl
|
|
386
290
|
when AST::Declarations::Class
|
|
387
|
-
class_decls[name] ||= ClassEntry.new(name
|
|
291
|
+
class_decls[name] ||= ClassEntry.new(name)
|
|
388
292
|
when AST::Declarations::Module
|
|
389
|
-
class_decls[name] ||= ModuleEntry.new(name
|
|
293
|
+
class_decls[name] ||= ModuleEntry.new(name)
|
|
390
294
|
end
|
|
391
295
|
end
|
|
392
296
|
|
|
@@ -394,17 +298,17 @@ module RBS
|
|
|
394
298
|
|
|
395
299
|
case
|
|
396
300
|
when decl.is_a?(AST::Declarations::Module) && existing_entry.is_a?(ModuleEntry)
|
|
397
|
-
existing_entry
|
|
301
|
+
existing_entry << [context, decl]
|
|
398
302
|
when decl.is_a?(AST::Declarations::Class) && existing_entry.is_a?(ClassEntry)
|
|
399
|
-
existing_entry
|
|
303
|
+
existing_entry << [context, decl]
|
|
400
304
|
else
|
|
401
|
-
raise DuplicatedDeclarationError.new(name, decl, existing_entry.
|
|
305
|
+
raise DuplicatedDeclarationError.new(name, decl, existing_entry.primary_decl)
|
|
402
306
|
end
|
|
403
307
|
|
|
404
|
-
|
|
405
|
-
|
|
308
|
+
inner_context = [context, name] #: Resolver::context
|
|
309
|
+
inner_namespace = name.to_namespace
|
|
406
310
|
decl.each_decl do |d|
|
|
407
|
-
|
|
311
|
+
insert_rbs_decl(d, context: inner_context, namespace: inner_namespace)
|
|
408
312
|
end
|
|
409
313
|
|
|
410
314
|
when AST::Declarations::Interface
|
|
@@ -414,7 +318,7 @@ module RBS
|
|
|
414
318
|
raise DuplicatedDeclarationError.new(name, decl, interface_entry.decl)
|
|
415
319
|
end
|
|
416
320
|
|
|
417
|
-
interface_decls[name] = InterfaceEntry.new(name: name, decl: decl,
|
|
321
|
+
interface_decls[name] = InterfaceEntry.new(name: name, decl: decl, context: context)
|
|
418
322
|
|
|
419
323
|
when AST::Declarations::TypeAlias
|
|
420
324
|
name = decl.name.with_prefix(namespace)
|
|
@@ -423,7 +327,7 @@ module RBS
|
|
|
423
327
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
424
328
|
end
|
|
425
329
|
|
|
426
|
-
type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl,
|
|
330
|
+
type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl, context: context)
|
|
427
331
|
|
|
428
332
|
when AST::Declarations::Constant
|
|
429
333
|
name = decl.name.with_prefix(namespace)
|
|
@@ -433,18 +337,18 @@ module RBS
|
|
|
433
337
|
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
434
338
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
435
339
|
when ClassEntry, ModuleEntry
|
|
436
|
-
raise DuplicatedDeclarationError.new(name, decl, *entry.
|
|
340
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
437
341
|
end
|
|
438
342
|
end
|
|
439
343
|
|
|
440
|
-
constant_decls[name] = ConstantEntry.new(name: name, decl: decl,
|
|
344
|
+
constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
|
|
441
345
|
|
|
442
346
|
when AST::Declarations::Global
|
|
443
347
|
if entry = global_decls[decl.name]
|
|
444
348
|
raise DuplicatedDeclarationError.new(decl.name, decl, entry.decl)
|
|
445
349
|
end
|
|
446
350
|
|
|
447
|
-
global_decls[decl.name] = GlobalEntry.new(name: decl.name, decl: decl,
|
|
351
|
+
global_decls[decl.name] = GlobalEntry.new(name: decl.name, decl: decl, context: context)
|
|
448
352
|
|
|
449
353
|
when AST::Declarations::ClassAlias, AST::Declarations::ModuleAlias
|
|
450
354
|
name = decl.new_name.with_prefix(namespace)
|
|
@@ -454,35 +358,142 @@ module RBS
|
|
|
454
358
|
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
455
359
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
456
360
|
when ClassEntry, ModuleEntry
|
|
457
|
-
raise DuplicatedDeclarationError.new(name, decl, *entry.
|
|
361
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
458
362
|
end
|
|
459
363
|
end
|
|
460
364
|
|
|
461
365
|
case decl
|
|
462
366
|
when AST::Declarations::ClassAlias
|
|
463
|
-
class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl,
|
|
367
|
+
class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
|
|
464
368
|
when AST::Declarations::ModuleAlias
|
|
465
|
-
class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl,
|
|
369
|
+
class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, context: context)
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def insert_ruby_decl(decl, context:, namespace:)
|
|
375
|
+
case decl
|
|
376
|
+
when AST::Ruby::Declarations::ClassDecl
|
|
377
|
+
name = decl.class_name.with_prefix(namespace)
|
|
378
|
+
|
|
379
|
+
if entry = constant_entry(name)
|
|
380
|
+
if entry.is_a?(ConstantEntry) || entry.is_a?(ModuleAliasEntry) || entry.is_a?(ClassAliasEntry)
|
|
381
|
+
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
382
|
+
end
|
|
383
|
+
if entry.is_a?(ModuleEntry)
|
|
384
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
385
|
+
end
|
|
386
|
+
else
|
|
387
|
+
entry = class_decls[name] = ClassEntry.new(name)
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
entry << [context, decl]
|
|
391
|
+
|
|
392
|
+
inner_context = [context, name] #: Resolver::context
|
|
393
|
+
decl.each_decl do |member|
|
|
394
|
+
insert_ruby_decl(member, context: inner_context, namespace: name.to_namespace)
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
when AST::Ruby::Declarations::ModuleDecl
|
|
398
|
+
name = decl.module_name.with_prefix(namespace)
|
|
399
|
+
|
|
400
|
+
if entry = constant_entry(name)
|
|
401
|
+
if entry.is_a?(ConstantEntry) || entry.is_a?(ModuleAliasEntry) || entry.is_a?(ClassAliasEntry)
|
|
402
|
+
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
403
|
+
end
|
|
404
|
+
if entry.is_a?(ClassEntry)
|
|
405
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
406
|
+
end
|
|
407
|
+
else
|
|
408
|
+
entry = class_decls[name] = ModuleEntry.new(name)
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
entry << [context, decl]
|
|
412
|
+
|
|
413
|
+
inner_context = [context, name] #: Resolver::context
|
|
414
|
+
decl.each_decl do |member|
|
|
415
|
+
insert_ruby_decl(member, context: inner_context, namespace: name.to_namespace)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
when AST::Ruby::Declarations::ConstantDecl
|
|
419
|
+
name = decl.constant_name.with_prefix(namespace)
|
|
420
|
+
|
|
421
|
+
if entry = constant_entry(name)
|
|
422
|
+
case entry
|
|
423
|
+
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
424
|
+
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
425
|
+
when ClassEntry, ModuleEntry
|
|
426
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
|
|
430
|
+
constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
|
|
431
|
+
|
|
432
|
+
when AST::Ruby::Declarations::ClassModuleAliasDecl
|
|
433
|
+
name = decl.new_name.with_prefix(namespace)
|
|
434
|
+
|
|
435
|
+
if entry = constant_entry(name)
|
|
436
|
+
case entry
|
|
437
|
+
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
438
|
+
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
439
|
+
when ClassEntry, ModuleEntry
|
|
440
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
441
|
+
end
|
|
466
442
|
end
|
|
443
|
+
|
|
444
|
+
case decl.annotation
|
|
445
|
+
when AST::Ruby::Annotations::ClassAliasAnnotation
|
|
446
|
+
class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
|
|
447
|
+
when AST::Ruby::Annotations::ModuleAliasAnnotation
|
|
448
|
+
class_alias_decls[name] = ModuleAliasEntry.new(name: name, decl: decl, context: context)
|
|
449
|
+
end
|
|
450
|
+
else
|
|
451
|
+
raise "Unknown Ruby declaration type: #{decl.class}"
|
|
467
452
|
end
|
|
468
453
|
end
|
|
469
454
|
|
|
470
|
-
def
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
455
|
+
def add_source(source)
|
|
456
|
+
sources << source
|
|
457
|
+
|
|
458
|
+
case source
|
|
459
|
+
when Source::RBS
|
|
460
|
+
source.declarations.each do |decl|
|
|
461
|
+
insert_rbs_decl(decl, context: nil, namespace: Namespace.root)
|
|
462
|
+
end
|
|
463
|
+
when Source::Ruby
|
|
464
|
+
source.declarations.each do |dir|
|
|
465
|
+
insert_ruby_decl(dir, context: nil, namespace: Namespace.root)
|
|
466
|
+
end
|
|
467
|
+
end
|
|
474
468
|
end
|
|
475
469
|
|
|
476
|
-
def
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
470
|
+
def each_rbs_source(&block)
|
|
471
|
+
if block
|
|
472
|
+
sources.each do |source|
|
|
473
|
+
if source.is_a?(Source::RBS)
|
|
474
|
+
yield source
|
|
475
|
+
end
|
|
476
|
+
end
|
|
477
|
+
else
|
|
478
|
+
enum_for(:each_rbs_source)
|
|
479
|
+
end
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def each_ruby_source(&block)
|
|
483
|
+
if block
|
|
484
|
+
sources.each do |source|
|
|
485
|
+
if source.is_a?(Source::Ruby)
|
|
486
|
+
yield source
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
else
|
|
490
|
+
enum_for(:each_ruby_source)
|
|
480
491
|
end
|
|
481
492
|
end
|
|
482
493
|
|
|
483
494
|
def validate_type_params
|
|
484
495
|
class_decls.each_value do |decl|
|
|
485
|
-
decl.
|
|
496
|
+
decl.validate_type_params
|
|
486
497
|
end
|
|
487
498
|
end
|
|
488
499
|
|
|
@@ -501,7 +512,7 @@ module RBS
|
|
|
501
512
|
if only && !only.member?(decl)
|
|
502
513
|
decl
|
|
503
514
|
else
|
|
504
|
-
resolve_declaration(resolver, map, decl,
|
|
515
|
+
resolve_declaration(resolver, map, decl, context: nil, prefix: Namespace.root)
|
|
505
516
|
end
|
|
506
517
|
end
|
|
507
518
|
|
|
@@ -509,7 +520,7 @@ module RBS
|
|
|
509
520
|
end
|
|
510
521
|
|
|
511
522
|
def resolve_type_names(only: nil)
|
|
512
|
-
resolver = Resolver::TypeNameResolver.
|
|
523
|
+
resolver = Resolver::TypeNameResolver.build(self)
|
|
513
524
|
env = Environment.new
|
|
514
525
|
|
|
515
526
|
table = UseMap::Table.new()
|
|
@@ -519,12 +530,30 @@ module RBS
|
|
|
519
530
|
table.known_types.merge(interface_decls.keys)
|
|
520
531
|
table.compute_children
|
|
521
532
|
|
|
522
|
-
|
|
523
|
-
resolve =
|
|
533
|
+
each_rbs_source do |source|
|
|
534
|
+
resolve = source.directives.find { _1.is_a?(AST::Directives::ResolveTypeNames) } #: AST::Directives::ResolveTypeNames?
|
|
524
535
|
if !resolve || resolve.value
|
|
525
|
-
_, decls = resolve_signature(resolver, table,
|
|
536
|
+
_, decls = resolve_signature(resolver, table, source.directives, source.declarations, only: only)
|
|
537
|
+
else
|
|
538
|
+
decls = source.declarations
|
|
526
539
|
end
|
|
527
|
-
env.
|
|
540
|
+
env.add_source(Source::RBS.new(source.buffer, source.directives, decls))
|
|
541
|
+
end
|
|
542
|
+
|
|
543
|
+
each_ruby_source do |source|
|
|
544
|
+
decls = source.declarations.map do |decl|
|
|
545
|
+
if only
|
|
546
|
+
if only.include?(decl)
|
|
547
|
+
resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
|
|
548
|
+
else
|
|
549
|
+
decl
|
|
550
|
+
end
|
|
551
|
+
else
|
|
552
|
+
resolve_ruby_decl(resolver, decl, context: nil, prefix: Namespace.root)
|
|
553
|
+
end
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
env.add_source(Source::Ruby.new(source.buffer, source.prism_result, decls, source.diagnostics))
|
|
528
557
|
end
|
|
529
558
|
|
|
530
559
|
env
|
|
@@ -545,7 +574,7 @@ module RBS
|
|
|
545
574
|
end
|
|
546
575
|
end
|
|
547
576
|
|
|
548
|
-
def resolve_declaration(resolver, map, decl,
|
|
577
|
+
def resolve_declaration(resolver, map, decl, context:, prefix:)
|
|
549
578
|
if decl.is_a?(AST::Declarations::Global)
|
|
550
579
|
# @type var decl: AST::Declarations::Global
|
|
551
580
|
return AST::Declarations::Global.new(
|
|
@@ -557,14 +586,11 @@ module RBS
|
|
|
557
586
|
)
|
|
558
587
|
end
|
|
559
588
|
|
|
560
|
-
context = resolver_context(*outer)
|
|
561
|
-
|
|
562
589
|
case decl
|
|
563
590
|
when AST::Declarations::Class
|
|
564
591
|
outer_context = context
|
|
565
592
|
inner_context = append_context(outer_context, decl)
|
|
566
593
|
|
|
567
|
-
outer_ = outer + [decl]
|
|
568
594
|
prefix_ = prefix + decl.name.to_namespace
|
|
569
595
|
AST::Declarations::Class.new(
|
|
570
596
|
name: decl.name.with_prefix(prefix),
|
|
@@ -585,7 +611,7 @@ module RBS
|
|
|
585
611
|
resolver,
|
|
586
612
|
map,
|
|
587
613
|
member,
|
|
588
|
-
|
|
614
|
+
context: inner_context,
|
|
589
615
|
prefix: prefix_
|
|
590
616
|
)
|
|
591
617
|
else
|
|
@@ -601,7 +627,6 @@ module RBS
|
|
|
601
627
|
outer_context = context
|
|
602
628
|
inner_context = append_context(outer_context, decl)
|
|
603
629
|
|
|
604
|
-
outer_ = outer + [decl]
|
|
605
630
|
prefix_ = prefix + decl.name.to_namespace
|
|
606
631
|
AST::Declarations::Module.new(
|
|
607
632
|
name: decl.name.with_prefix(prefix),
|
|
@@ -622,7 +647,7 @@ module RBS
|
|
|
622
647
|
resolver,
|
|
623
648
|
map,
|
|
624
649
|
member,
|
|
625
|
-
|
|
650
|
+
context: inner_context,
|
|
626
651
|
prefix: prefix_
|
|
627
652
|
)
|
|
628
653
|
else
|
|
@@ -685,6 +710,155 @@ module RBS
|
|
|
685
710
|
end
|
|
686
711
|
end
|
|
687
712
|
|
|
713
|
+
def resolve_ruby_decl(resolver, decl, context:, prefix:)
|
|
714
|
+
case decl
|
|
715
|
+
when AST::Ruby::Declarations::ClassDecl
|
|
716
|
+
full_name = decl.class_name.with_prefix(prefix)
|
|
717
|
+
inner_context = [context, full_name] #: Resolver::context
|
|
718
|
+
inner_prefix = full_name.to_namespace
|
|
719
|
+
|
|
720
|
+
super_class = decl.super_class&.yield_self do |super_class|
|
|
721
|
+
AST::Ruby::Declarations::ClassDecl::SuperClass.new(
|
|
722
|
+
super_class.type_name_location,
|
|
723
|
+
super_class.operator_location,
|
|
724
|
+
absolute_type_name(resolver, nil, super_class.name, context: context),
|
|
725
|
+
super_class.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
726
|
+
)
|
|
727
|
+
end
|
|
728
|
+
|
|
729
|
+
AST::Ruby::Declarations::ClassDecl.new(decl.buffer, full_name, decl.node, super_class).tap do |resolved|
|
|
730
|
+
decl.members.each do |member|
|
|
731
|
+
case member
|
|
732
|
+
when AST::Ruby::Declarations::Base
|
|
733
|
+
resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
|
|
734
|
+
when AST::Ruby::Members::Base
|
|
735
|
+
resolved.members << resolve_ruby_member(resolver, member, context: inner_context)
|
|
736
|
+
else
|
|
737
|
+
raise "Unknown member type: #{member.class}"
|
|
738
|
+
end
|
|
739
|
+
end
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
when AST::Ruby::Declarations::ModuleDecl
|
|
743
|
+
full_name = decl.module_name.with_prefix(prefix)
|
|
744
|
+
inner_context = [context, full_name] #: Resolver::context
|
|
745
|
+
inner_prefix = full_name.to_namespace
|
|
746
|
+
|
|
747
|
+
AST::Ruby::Declarations::ModuleDecl.new(decl.buffer, full_name, decl.node).tap do |resolved|
|
|
748
|
+
decl.members.each do |member|
|
|
749
|
+
case member
|
|
750
|
+
when AST::Ruby::Declarations::Base
|
|
751
|
+
resolved.members << resolve_ruby_decl(resolver, member, context: inner_context, prefix: inner_prefix)
|
|
752
|
+
when AST::Ruby::Members::Base
|
|
753
|
+
resolved.members << resolve_ruby_member(resolver, member, context: inner_context)
|
|
754
|
+
else
|
|
755
|
+
raise "Unknown member type: #{member.class}"
|
|
756
|
+
end
|
|
757
|
+
end
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
when AST::Ruby::Declarations::ConstantDecl
|
|
761
|
+
full_name = decl.constant_name.with_prefix(prefix)
|
|
762
|
+
|
|
763
|
+
AST::Ruby::Declarations::ConstantDecl.new(
|
|
764
|
+
decl.buffer,
|
|
765
|
+
full_name,
|
|
766
|
+
decl.node,
|
|
767
|
+
decl.leading_comment,
|
|
768
|
+
decl.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
769
|
+
)
|
|
770
|
+
|
|
771
|
+
when AST::Ruby::Declarations::ClassModuleAliasDecl
|
|
772
|
+
full_name = decl.new_name.with_prefix(prefix)
|
|
773
|
+
resolved_annotation = decl.annotation.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
774
|
+
resolved_infered_name = decl.infered_old_name&.yield_self {|name| absolute_type_name(resolver, nil, name, context: context) }
|
|
775
|
+
|
|
776
|
+
AST::Ruby::Declarations::ClassModuleAliasDecl.new(
|
|
777
|
+
decl.buffer,
|
|
778
|
+
decl.node,
|
|
779
|
+
full_name,
|
|
780
|
+
resolved_infered_name,
|
|
781
|
+
decl.leading_comment,
|
|
782
|
+
resolved_annotation
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
else
|
|
786
|
+
raise "Unknown declaration type: #{decl.class}"
|
|
787
|
+
end
|
|
788
|
+
end
|
|
789
|
+
|
|
790
|
+
def resolve_ruby_member(resolver, member, context:)
|
|
791
|
+
case member
|
|
792
|
+
when AST::Ruby::Members::DefMember
|
|
793
|
+
AST::Ruby::Members::DefMember.new(
|
|
794
|
+
member.buffer,
|
|
795
|
+
member.name,
|
|
796
|
+
member.node,
|
|
797
|
+
member.method_type.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) },
|
|
798
|
+
member.leading_comment
|
|
799
|
+
)
|
|
800
|
+
when AST::Ruby::Members::IncludeMember
|
|
801
|
+
resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
802
|
+
AST::Ruby::Members::IncludeMember.new(
|
|
803
|
+
member.buffer,
|
|
804
|
+
member.node,
|
|
805
|
+
absolute_type_name(resolver, nil, member.module_name, context: context),
|
|
806
|
+
resolved_annotation
|
|
807
|
+
)
|
|
808
|
+
when AST::Ruby::Members::ExtendMember
|
|
809
|
+
resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
810
|
+
AST::Ruby::Members::ExtendMember.new(
|
|
811
|
+
member.buffer,
|
|
812
|
+
member.node,
|
|
813
|
+
absolute_type_name(resolver, nil, member.module_name, context: context),
|
|
814
|
+
resolved_annotation
|
|
815
|
+
)
|
|
816
|
+
when AST::Ruby::Members::PrependMember
|
|
817
|
+
resolved_annotation = member.annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
818
|
+
AST::Ruby::Members::PrependMember.new(
|
|
819
|
+
member.buffer,
|
|
820
|
+
member.node,
|
|
821
|
+
absolute_type_name(resolver, nil, member.module_name, context: context),
|
|
822
|
+
resolved_annotation
|
|
823
|
+
)
|
|
824
|
+
when AST::Ruby::Members::AttrReaderMember
|
|
825
|
+
resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
826
|
+
AST::Ruby::Members::AttrReaderMember.new(
|
|
827
|
+
member.buffer,
|
|
828
|
+
member.node,
|
|
829
|
+
member.name_nodes,
|
|
830
|
+
member.leading_comment,
|
|
831
|
+
resolved_type_annotation
|
|
832
|
+
)
|
|
833
|
+
when AST::Ruby::Members::AttrWriterMember
|
|
834
|
+
resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
835
|
+
AST::Ruby::Members::AttrWriterMember.new(
|
|
836
|
+
member.buffer,
|
|
837
|
+
member.node,
|
|
838
|
+
member.name_nodes,
|
|
839
|
+
member.leading_comment,
|
|
840
|
+
resolved_type_annotation
|
|
841
|
+
)
|
|
842
|
+
when AST::Ruby::Members::AttrAccessorMember
|
|
843
|
+
resolved_type_annotation = member.type_annotation&.map_type_name {|name, _, _| absolute_type_name(resolver, nil, name, context: context) }
|
|
844
|
+
AST::Ruby::Members::AttrAccessorMember.new(
|
|
845
|
+
member.buffer,
|
|
846
|
+
member.node,
|
|
847
|
+
member.name_nodes,
|
|
848
|
+
member.leading_comment,
|
|
849
|
+
resolved_type_annotation
|
|
850
|
+
)
|
|
851
|
+
when AST::Ruby::Members::InstanceVariableMember
|
|
852
|
+
resolved_annotation = member.annotation.map_type_name {|name| absolute_type_name(resolver, nil, name, context: context) }
|
|
853
|
+
AST::Ruby::Members::InstanceVariableMember.new(
|
|
854
|
+
member.buffer,
|
|
855
|
+
resolved_annotation
|
|
856
|
+
)
|
|
857
|
+
else
|
|
858
|
+
raise "Unknown member type: #{member.class}"
|
|
859
|
+
end
|
|
860
|
+
end
|
|
861
|
+
|
|
688
862
|
def resolve_member(resolver, map, member, context:)
|
|
689
863
|
case member
|
|
690
864
|
when AST::Members::MethodDefinition
|
|
@@ -800,7 +974,7 @@ module RBS
|
|
|
800
974
|
end
|
|
801
975
|
|
|
802
976
|
def absolute_type_name(resolver, map, type_name, context:)
|
|
803
|
-
type_name = map.resolve(type_name)
|
|
977
|
+
type_name = map.resolve(type_name) if map
|
|
804
978
|
resolver.resolve(type_name, context: context) || type_name
|
|
805
979
|
end
|
|
806
980
|
|
|
@@ -811,20 +985,34 @@ module RBS
|
|
|
811
985
|
end
|
|
812
986
|
|
|
813
987
|
def inspect
|
|
814
|
-
ivars = %i[@
|
|
988
|
+
ivars = %i[@sources @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
|
|
815
989
|
"\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
|
|
816
990
|
end
|
|
817
991
|
|
|
818
992
|
def buffers
|
|
819
|
-
|
|
993
|
+
sources.map(&:buffer)
|
|
820
994
|
end
|
|
821
995
|
|
|
822
|
-
def unload(
|
|
823
|
-
|
|
996
|
+
def unload(paths)
|
|
997
|
+
ps = Set[]
|
|
998
|
+
paths.each do |path|
|
|
999
|
+
if path.is_a?(Buffer)
|
|
1000
|
+
ps << path.name
|
|
1001
|
+
else
|
|
1002
|
+
ps << path
|
|
1003
|
+
end
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
env = Environment.new()
|
|
1007
|
+
|
|
1008
|
+
each_rbs_source do |source|
|
|
1009
|
+
next if ps.include?(source.buffer.name)
|
|
1010
|
+
env.add_source(source)
|
|
1011
|
+
end
|
|
824
1012
|
|
|
825
|
-
|
|
826
|
-
next if
|
|
827
|
-
env.
|
|
1013
|
+
each_ruby_source do |source|
|
|
1014
|
+
next if ps.include?(source.buffer.name)
|
|
1015
|
+
env.add_source(source)
|
|
828
1016
|
end
|
|
829
1017
|
|
|
830
1018
|
env
|