rbs 3.10.4 → 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/.github/dependabot.yml +14 -14
- data/.github/workflows/bundle-update.yml +60 -0
- data/.github/workflows/c-check.yml +7 -5
- data/.github/workflows/comments.yml +2 -2
- data/.github/workflows/dependabot.yml +2 -2
- data/.github/workflows/ruby.yml +16 -26
- data/.github/workflows/rust.yml +95 -0
- data/.github/workflows/typecheck.yml +1 -1
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +2 -2
- data/.vscode/extensions.json +5 -0
- data/.vscode/settings.json +19 -0
- data/CHANGELOG.md +202 -2
- data/Rakefile +9 -23
- data/Steepfile +2 -0
- data/config.yml +457 -13
- data/core/array.rbs +218 -188
- 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 +45 -31
- data/core/complex.rbs +66 -55
- data/core/dir.rbs +57 -45
- data/core/encoding.rbs +6 -6
- data/core/enumerable.rbs +105 -91
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +24 -3
- data/core/errno.rbs +3 -2
- data/core/errors.rbs +31 -29
- data/core/exception.rbs +12 -12
- data/core/fiber.rbs +47 -36
- data/core/file.rbs +242 -169
- data/core/file_test.rbs +2 -2
- data/core/float.rbs +42 -68
- data/core/gc.rbs +78 -70
- data/core/hash.rbs +70 -60
- data/core/integer.rbs +32 -75
- data/core/io/buffer.rbs +36 -36
- data/core/io/wait.rbs +7 -7
- data/core/io.rbs +192 -146
- data/core/kernel.rbs +198 -147
- data/core/marshal.rbs +3 -3
- data/core/match_data.rbs +14 -12
- data/core/math.rbs +69 -67
- data/core/method.rbs +6 -8
- data/core/module.rbs +148 -88
- data/core/nil_class.rbs +4 -3
- data/core/numeric.rbs +53 -50
- data/core/object.rbs +6 -8
- data/core/object_space.rbs +11 -10
- data/core/pathname.rbs +131 -81
- data/core/proc.rbs +65 -34
- data/core/process.rbs +221 -201
- data/core/ractor.rbs +15 -11
- data/core/random.rbs +21 -3
- data/core/range.rbs +152 -49
- data/core/rational.rbs +5 -56
- 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 -116
- 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 +318 -298
- data/core/struct.rbs +26 -25
- data/core/symbol.rbs +25 -24
- data/core/thread.rbs +40 -41
- 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 +576 -0
- 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 +595 -98
- data/ext/rbs_extension/class_constants.c +30 -0
- data/ext/rbs_extension/class_constants.h +15 -0
- data/ext/rbs_extension/legacy_location.c +30 -53
- data/ext/rbs_extension/legacy_location.h +37 -0
- data/ext/rbs_extension/main.c +125 -24
- data/include/rbs/ast.h +485 -150
- data/include/rbs/lexer.h +11 -4
- data/include/rbs/location.h +25 -44
- data/include/rbs/parser.h +20 -2
- data/include/rbs/util/rbs_constant_pool.h +0 -3
- data/include/rbs.h +8 -0
- 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 +62 -125
- data/lib/rbs/cli.rb +55 -23
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -4
- 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 +119 -63
- 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 +338 -155
- data/lib/rbs/environment_loader.rb +2 -2
- data/lib/rbs/errors.rb +30 -20
- 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 +31 -8
- 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/type_name_resolver.rb +0 -8
- data/lib/rbs/source.rb +99 -0
- data/lib/rbs/subtractor.rb +4 -3
- data/lib/rbs/test/type_check.rb +5 -2
- data/lib/rbs/type_name.rb +1 -8
- data/lib/rbs/types.rb +88 -78
- 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 +12 -1
- data/rbs.gemspec +3 -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/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 +37 -81
- 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/method_builder.rbs +9 -4
- data/sig/namespace.rbs +0 -5
- data/sig/parser.rbs +47 -13
- data/sig/prototype/helpers.rbs +2 -0
- data/sig/resolver/type_name_resolver.rbs +0 -3
- data/sig/source.rbs +48 -0
- data/sig/type_param.rbs +13 -8
- data/sig/typename.rbs +0 -5
- data/sig/types.rbs +6 -7
- data/sig/unit_test/spy.rbs +0 -8
- data/sig/unit_test/type_assertions.rbs +11 -0
- data/src/ast.c +491 -143
- data/src/lexer.c +1552 -1314
- data/src/lexer.re +7 -0
- data/src/lexstate.c +8 -1
- data/src/location.c +8 -48
- data/src/parser.c +1107 -409
- 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/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +64 -53
- data/stdlib/etc/0/etc.rbs +55 -50
- data/stdlib/fileutils/0/fileutils.rbs +140 -126
- data/stdlib/forwardable/0/forwardable.rbs +10 -10
- data/stdlib/io-console/0/io-console.rbs +2 -2
- data/stdlib/json/0/json.rbs +158 -131
- 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 -30
- data/stdlib/open-uri/0/open-uri.rbs +8 -8
- data/stdlib/open3/0/open3.rbs +469 -10
- data/stdlib/openssl/0/openssl.rbs +144 -129
- data/stdlib/optparse/0/optparse.rbs +23 -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 +62 -9
- 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 +2 -1
- data/stdlib/rdoc/0/parser.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/ripper/0/ripper.rbs +20 -17
- 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/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 +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 +31 -18
- data/stdlib/uri/0/file.rbs +2 -2
- data/stdlib/uri/0/generic.rbs +9 -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 +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
- metadata +66 -3
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
|
|
12
|
+
attr_reader :sources
|
|
59
13
|
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
def primary
|
|
81
|
-
raise "Not implemented"
|
|
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
|
|
@@ -375,7 +274,7 @@ module RBS
|
|
|
375
274
|
normalize_module_name?(name) or raise "Module name `#{name}` cannot be normalized"
|
|
376
275
|
end
|
|
377
276
|
|
|
378
|
-
def
|
|
277
|
+
def insert_rbs_decl(decl, context:, namespace:)
|
|
379
278
|
case decl
|
|
380
279
|
when AST::Declarations::Class, AST::Declarations::Module
|
|
381
280
|
name = decl.name.with_prefix(namespace)
|
|
@@ -389,9 +288,9 @@ module RBS
|
|
|
389
288
|
unless class_decls.key?(name)
|
|
390
289
|
case decl
|
|
391
290
|
when AST::Declarations::Class
|
|
392
|
-
class_decls[name] ||= ClassEntry.new(name
|
|
291
|
+
class_decls[name] ||= ClassEntry.new(name)
|
|
393
292
|
when AST::Declarations::Module
|
|
394
|
-
class_decls[name] ||= ModuleEntry.new(name
|
|
293
|
+
class_decls[name] ||= ModuleEntry.new(name)
|
|
395
294
|
end
|
|
396
295
|
end
|
|
397
296
|
|
|
@@ -399,17 +298,17 @@ module RBS
|
|
|
399
298
|
|
|
400
299
|
case
|
|
401
300
|
when decl.is_a?(AST::Declarations::Module) && existing_entry.is_a?(ModuleEntry)
|
|
402
|
-
existing_entry
|
|
301
|
+
existing_entry << [context, decl]
|
|
403
302
|
when decl.is_a?(AST::Declarations::Class) && existing_entry.is_a?(ClassEntry)
|
|
404
|
-
existing_entry
|
|
303
|
+
existing_entry << [context, decl]
|
|
405
304
|
else
|
|
406
|
-
raise DuplicatedDeclarationError.new(name, decl, existing_entry.
|
|
305
|
+
raise DuplicatedDeclarationError.new(name, decl, existing_entry.primary_decl)
|
|
407
306
|
end
|
|
408
307
|
|
|
409
|
-
|
|
410
|
-
|
|
308
|
+
inner_context = [context, name] #: Resolver::context
|
|
309
|
+
inner_namespace = name.to_namespace
|
|
411
310
|
decl.each_decl do |d|
|
|
412
|
-
|
|
311
|
+
insert_rbs_decl(d, context: inner_context, namespace: inner_namespace)
|
|
413
312
|
end
|
|
414
313
|
|
|
415
314
|
when AST::Declarations::Interface
|
|
@@ -419,7 +318,7 @@ module RBS
|
|
|
419
318
|
raise DuplicatedDeclarationError.new(name, decl, interface_entry.decl)
|
|
420
319
|
end
|
|
421
320
|
|
|
422
|
-
interface_decls[name] = InterfaceEntry.new(name: name, decl: decl,
|
|
321
|
+
interface_decls[name] = InterfaceEntry.new(name: name, decl: decl, context: context)
|
|
423
322
|
|
|
424
323
|
when AST::Declarations::TypeAlias
|
|
425
324
|
name = decl.name.with_prefix(namespace)
|
|
@@ -428,7 +327,7 @@ module RBS
|
|
|
428
327
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
429
328
|
end
|
|
430
329
|
|
|
431
|
-
type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl,
|
|
330
|
+
type_alias_decls[name] = TypeAliasEntry.new(name: name, decl: decl, context: context)
|
|
432
331
|
|
|
433
332
|
when AST::Declarations::Constant
|
|
434
333
|
name = decl.name.with_prefix(namespace)
|
|
@@ -438,18 +337,18 @@ module RBS
|
|
|
438
337
|
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
439
338
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
440
339
|
when ClassEntry, ModuleEntry
|
|
441
|
-
raise DuplicatedDeclarationError.new(name, decl, *entry.
|
|
340
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
442
341
|
end
|
|
443
342
|
end
|
|
444
343
|
|
|
445
|
-
constant_decls[name] = ConstantEntry.new(name: name, decl: decl,
|
|
344
|
+
constant_decls[name] = ConstantEntry.new(name: name, decl: decl, context: context)
|
|
446
345
|
|
|
447
346
|
when AST::Declarations::Global
|
|
448
347
|
if entry = global_decls[decl.name]
|
|
449
348
|
raise DuplicatedDeclarationError.new(decl.name, decl, entry.decl)
|
|
450
349
|
end
|
|
451
350
|
|
|
452
|
-
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)
|
|
453
352
|
|
|
454
353
|
when AST::Declarations::ClassAlias, AST::Declarations::ModuleAlias
|
|
455
354
|
name = decl.new_name.with_prefix(namespace)
|
|
@@ -459,35 +358,142 @@ module RBS
|
|
|
459
358
|
when ClassAliasEntry, ModuleAliasEntry, ConstantEntry
|
|
460
359
|
raise DuplicatedDeclarationError.new(name, decl, entry.decl)
|
|
461
360
|
when ClassEntry, ModuleEntry
|
|
462
|
-
raise DuplicatedDeclarationError.new(name, decl, *entry.
|
|
361
|
+
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
|
|
463
362
|
end
|
|
464
363
|
end
|
|
465
364
|
|
|
466
365
|
case decl
|
|
467
366
|
when AST::Declarations::ClassAlias
|
|
468
|
-
class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl,
|
|
367
|
+
class_alias_decls[name] = ClassAliasEntry.new(name: name, decl: decl, context: context)
|
|
469
368
|
when AST::Declarations::ModuleAlias
|
|
470
|
-
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
|
|
471
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}"
|
|
472
452
|
end
|
|
473
453
|
end
|
|
474
454
|
|
|
475
|
-
def
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
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
|
|
479
468
|
end
|
|
480
469
|
|
|
481
|
-
def
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
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)
|
|
485
491
|
end
|
|
486
492
|
end
|
|
487
493
|
|
|
488
494
|
def validate_type_params
|
|
489
495
|
class_decls.each_value do |decl|
|
|
490
|
-
decl.
|
|
496
|
+
decl.validate_type_params
|
|
491
497
|
end
|
|
492
498
|
end
|
|
493
499
|
|
|
@@ -506,7 +512,7 @@ module RBS
|
|
|
506
512
|
if only && !only.member?(decl)
|
|
507
513
|
decl
|
|
508
514
|
else
|
|
509
|
-
resolve_declaration(resolver, map, decl,
|
|
515
|
+
resolve_declaration(resolver, map, decl, context: nil, prefix: Namespace.root)
|
|
510
516
|
end
|
|
511
517
|
end
|
|
512
518
|
|
|
@@ -524,12 +530,30 @@ module RBS
|
|
|
524
530
|
table.known_types.merge(interface_decls.keys)
|
|
525
531
|
table.compute_children
|
|
526
532
|
|
|
527
|
-
|
|
528
|
-
resolve =
|
|
533
|
+
each_rbs_source do |source|
|
|
534
|
+
resolve = source.directives.find { _1.is_a?(AST::Directives::ResolveTypeNames) } #: AST::Directives::ResolveTypeNames?
|
|
529
535
|
if !resolve || resolve.value
|
|
530
|
-
_, decls = resolve_signature(resolver, table,
|
|
536
|
+
_, decls = resolve_signature(resolver, table, source.directives, source.declarations, only: only)
|
|
537
|
+
else
|
|
538
|
+
decls = source.declarations
|
|
539
|
+
end
|
|
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
|
|
531
554
|
end
|
|
532
|
-
|
|
555
|
+
|
|
556
|
+
env.add_source(Source::Ruby.new(source.buffer, source.prism_result, decls, source.diagnostics))
|
|
533
557
|
end
|
|
534
558
|
|
|
535
559
|
env
|
|
@@ -550,7 +574,7 @@ module RBS
|
|
|
550
574
|
end
|
|
551
575
|
end
|
|
552
576
|
|
|
553
|
-
def resolve_declaration(resolver, map, decl,
|
|
577
|
+
def resolve_declaration(resolver, map, decl, context:, prefix:)
|
|
554
578
|
if decl.is_a?(AST::Declarations::Global)
|
|
555
579
|
# @type var decl: AST::Declarations::Global
|
|
556
580
|
return AST::Declarations::Global.new(
|
|
@@ -562,14 +586,11 @@ module RBS
|
|
|
562
586
|
)
|
|
563
587
|
end
|
|
564
588
|
|
|
565
|
-
context = resolver_context(*outer)
|
|
566
|
-
|
|
567
589
|
case decl
|
|
568
590
|
when AST::Declarations::Class
|
|
569
591
|
outer_context = context
|
|
570
592
|
inner_context = append_context(outer_context, decl)
|
|
571
593
|
|
|
572
|
-
outer_ = outer + [decl]
|
|
573
594
|
prefix_ = prefix + decl.name.to_namespace
|
|
574
595
|
AST::Declarations::Class.new(
|
|
575
596
|
name: decl.name.with_prefix(prefix),
|
|
@@ -590,7 +611,7 @@ module RBS
|
|
|
590
611
|
resolver,
|
|
591
612
|
map,
|
|
592
613
|
member,
|
|
593
|
-
|
|
614
|
+
context: inner_context,
|
|
594
615
|
prefix: prefix_
|
|
595
616
|
)
|
|
596
617
|
else
|
|
@@ -606,7 +627,6 @@ module RBS
|
|
|
606
627
|
outer_context = context
|
|
607
628
|
inner_context = append_context(outer_context, decl)
|
|
608
629
|
|
|
609
|
-
outer_ = outer + [decl]
|
|
610
630
|
prefix_ = prefix + decl.name.to_namespace
|
|
611
631
|
AST::Declarations::Module.new(
|
|
612
632
|
name: decl.name.with_prefix(prefix),
|
|
@@ -627,7 +647,7 @@ module RBS
|
|
|
627
647
|
resolver,
|
|
628
648
|
map,
|
|
629
649
|
member,
|
|
630
|
-
|
|
650
|
+
context: inner_context,
|
|
631
651
|
prefix: prefix_
|
|
632
652
|
)
|
|
633
653
|
else
|
|
@@ -690,6 +710,155 @@ module RBS
|
|
|
690
710
|
end
|
|
691
711
|
end
|
|
692
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
|
+
|
|
693
862
|
def resolve_member(resolver, map, member, context:)
|
|
694
863
|
case member
|
|
695
864
|
when AST::Members::MethodDefinition
|
|
@@ -805,7 +974,7 @@ module RBS
|
|
|
805
974
|
end
|
|
806
975
|
|
|
807
976
|
def absolute_type_name(resolver, map, type_name, context:)
|
|
808
|
-
type_name = map.resolve(type_name)
|
|
977
|
+
type_name = map.resolve(type_name) if map
|
|
809
978
|
resolver.resolve(type_name, context: context) || type_name
|
|
810
979
|
end
|
|
811
980
|
|
|
@@ -816,20 +985,34 @@ module RBS
|
|
|
816
985
|
end
|
|
817
986
|
|
|
818
987
|
def inspect
|
|
819
|
-
ivars = %i[@
|
|
988
|
+
ivars = %i[@sources @class_decls @class_alias_decls @interface_decls @type_alias_decls @constant_decls @global_decls]
|
|
820
989
|
"\#<RBS::Environment #{ivars.map { |iv| "#{iv}=(#{instance_variable_get(iv).size} items)"}.join(' ')}>"
|
|
821
990
|
end
|
|
822
991
|
|
|
823
992
|
def buffers
|
|
824
|
-
|
|
993
|
+
sources.map(&:buffer)
|
|
825
994
|
end
|
|
826
995
|
|
|
827
|
-
def unload(
|
|
828
|
-
|
|
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
|
|
829
1012
|
|
|
830
|
-
|
|
831
|
-
next if
|
|
832
|
-
env.
|
|
1013
|
+
each_ruby_source do |source|
|
|
1014
|
+
next if ps.include?(source.buffer.name)
|
|
1015
|
+
env.add_source(source)
|
|
833
1016
|
end
|
|
834
1017
|
|
|
835
1018
|
env
|
|
@@ -116,7 +116,7 @@ module RBS
|
|
|
116
116
|
decls.each do |decl|
|
|
117
117
|
loaded << [decl, path, source]
|
|
118
118
|
end
|
|
119
|
-
env.
|
|
119
|
+
env.add_source(Source::RBS.new(buffer, dirs, decls))
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
loaded
|
|
@@ -155,7 +155,7 @@ module RBS
|
|
|
155
155
|
next if files.include?(path)
|
|
156
156
|
|
|
157
157
|
files << path
|
|
158
|
-
buffer = Buffer.new(name: path
|
|
158
|
+
buffer = Buffer.new(name: path, content: path.read(encoding: "UTF-8"))
|
|
159
159
|
|
|
160
160
|
_, dirs, decls = Parser.parse_signature(buffer)
|
|
161
161
|
|