rbs 3.7.0 → 3.8.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/ruby.yml +7 -7
- data/CHANGELOG.md +52 -0
- data/core/array.rbs +1743 -1580
- data/core/basic_object.rbs +38 -35
- data/core/comparable.rbs +1 -1
- data/core/complex.rbs +165 -93
- data/core/data.rbs +1 -1
- data/core/dir.rbs +1 -17
- data/core/encoding.rbs +12 -6
- data/core/enumerable.rbs +270 -266
- data/core/enumerator.rbs +0 -2
- data/core/env.rbs +1 -1
- data/core/errno.rbs +33 -16
- data/core/errors.rbs +2 -2
- data/core/exception.rbs +236 -170
- data/core/fiber.rbs +3 -2
- data/core/file.rbs +32 -74
- data/core/float.rbs +125 -72
- data/core/gc.rbs +138 -40
- data/core/hash.rbs +120 -141
- data/core/integer.rbs +79 -50
- data/core/io/buffer.rbs +49 -43
- data/core/io.rbs +97 -144
- data/core/kernel.rbs +290 -200
- data/core/match_data.rbs +76 -2
- data/core/math.rbs +0 -36
- data/core/module.rbs +28 -23
- data/core/nil_class.rbs +0 -3
- data/core/numeric.rbs +100 -103
- data/core/object.rbs +0 -4
- data/core/object_space/weak_key_map.rbs +3 -4
- data/core/object_space.rbs +3 -3
- data/core/proc.rbs +0 -2
- data/core/process.rbs +109 -57
- data/core/ractor.rbs +37 -4
- data/core/range.rbs +114 -87
- data/core/rational.rbs +0 -2
- data/core/rbs/unnamed/argf.rbs +234 -33
- data/core/rbs/unnamed/env_class.rbs +35 -53
- data/core/rbs/unnamed/random.rbs +1 -2
- data/core/regexp.rbs +4 -52
- data/core/ruby_vm.rbs +88 -9
- data/core/rubygems/config_file.rbs +3 -0
- data/core/rubygems/errors.rbs +0 -5
- data/core/rubygems/platform.rbs +0 -9
- data/core/rubygems/rubygems.rbs +0 -5
- data/core/rubygems/version.rbs +6 -6
- data/core/set.rbs +3 -15
- data/core/string.rbs +130 -136
- data/core/struct.rbs +6 -18
- data/core/symbol.rbs +14 -21
- data/core/thread.rbs +32 -35
- data/core/time.rbs +127 -50
- data/core/trace_point.rbs +16 -0
- data/core/true_class.rbs +0 -1
- data/core/warning.rbs +9 -2
- data/docs/architecture.md +1 -1
- data/docs/syntax.md +1 -1
- data/ext/rbs_extension/location.c +29 -19
- data/ext/rbs_extension/parser.c +267 -292
- data/ext/rbs_extension/parserstate.c +56 -22
- data/lib/rbs/annotate/annotations.rb +3 -3
- data/lib/rbs/annotate/rdoc_source.rb +2 -2
- data/lib/rbs/cli/diff.rb +3 -3
- data/lib/rbs/cli/validate.rb +1 -1
- data/lib/rbs/cli.rb +13 -13
- data/lib/rbs/collection/config.rb +3 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +3 -3
- data/lib/rbs/environment_loader.rb +1 -1
- data/lib/rbs/namespace.rb +1 -0
- data/lib/rbs/parser_aux.rb +2 -2
- data/lib/rbs/prototype/rb.rb +11 -8
- data/lib/rbs/prototype/rbi.rb +9 -5
- data/lib/rbs/prototype/runtime/value_object_generator.rb +7 -5
- data/lib/rbs/prototype/runtime.rb +4 -5
- data/lib/rbs/type_name.rb +14 -9
- data/lib/rbs/unit_test/type_assertions.rb +2 -2
- data/lib/rbs/validator.rb +3 -1
- data/lib/rbs/version.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +2 -2
- data/rbs.gemspec +4 -0
- data/sig/ancestor_graph.rbs +4 -4
- data/sig/namespace.rbs +2 -3
- data/sig/resolver/constant_resolver.rbs +2 -2
- data/sig/resolver/context.rbs +1 -1
- data/sig/type_alias_regularity.rbs +5 -5
- data/sig/typename.rbs +8 -5
- data/sig/use_map.rbs +1 -1
- data/sig/validator.rbs +2 -2
- data/stdlib/base64/0/base64.rbs +0 -9
- data/stdlib/benchmark/0/benchmark.rbs +11 -2
- data/stdlib/bigdecimal/0/big_decimal.rbs +26 -182
- data/stdlib/cgi/0/core.rbs +47 -0
- data/stdlib/coverage/0/coverage.rbs +0 -3
- data/stdlib/csv/0/csv.rbs +18 -58
- data/stdlib/date/0/date.rbs +4 -19
- data/stdlib/did_you_mean/0/did_you_mean.rbs +0 -5
- data/stdlib/digest/0/digest.rbs +25 -2
- data/stdlib/erb/0/erb.rbs +0 -1
- data/stdlib/etc/0/etc.rbs +51 -34
- data/stdlib/fileutils/0/fileutils.rbs +3 -44
- data/stdlib/io-console/0/io-console.rbs +69 -15
- data/stdlib/ipaddr/0/ipaddr.rbs +8 -4
- data/stdlib/json/0/json.rbs +56 -71
- data/stdlib/logger/0/log_device.rbs +1 -1
- data/stdlib/logger/0/logger.rbs +3 -18
- data/stdlib/net-http/0/net-http.rbs +19 -77
- data/stdlib/nkf/0/nkf.rbs +30 -0
- data/stdlib/objspace/0/objspace.rbs +1 -2
- data/stdlib/observable/0/observable.rbs +1 -1
- data/stdlib/open-uri/0/open-uri.rbs +52 -0
- data/stdlib/open3/0/open3.rbs +0 -8
- data/stdlib/openssl/0/openssl.rbs +136 -69
- data/stdlib/optparse/0/optparse.rbs +58 -18
- data/stdlib/pathname/0/pathname.rbs +2 -8
- data/stdlib/pp/0/pp.rbs +3 -1
- data/stdlib/prettyprint/0/prettyprint.rbs +0 -4
- data/stdlib/pstore/0/pstore.rbs +0 -6
- data/stdlib/psych/0/psych.rbs +15 -4
- data/stdlib/pty/0/pty.rbs +46 -4
- data/stdlib/rdoc/0/code_object.rbs +0 -4
- data/stdlib/rdoc/0/markup.rbs +10 -12
- data/stdlib/rdoc/0/rdoc.rbs +1 -2
- data/stdlib/resolv/0/resolv.rbs +8 -3
- data/stdlib/ripper/0/ripper.rbs +0 -2
- data/stdlib/securerandom/0/securerandom.rbs +0 -2
- data/stdlib/shellwords/0/shellwords.rbs +11 -12
- data/stdlib/singleton/0/singleton.rbs +0 -1
- data/stdlib/socket/0/addrinfo.rbs +0 -1
- data/stdlib/socket/0/basic_socket.rbs +0 -5
- data/stdlib/socket/0/socket.rbs +49 -25
- data/stdlib/socket/0/tcp_server.rbs +0 -3
- data/stdlib/socket/0/tcp_socket.rbs +58 -3
- data/stdlib/socket/0/udp_socket.rbs +0 -1
- data/stdlib/socket/0/unix_server.rbs +0 -3
- data/stdlib/strscan/0/string_scanner.rbs +1265 -422
- data/stdlib/tempfile/0/tempfile.rbs +135 -28
- data/stdlib/time/0/time.rbs +48 -35
- data/stdlib/timeout/0/timeout.rbs +11 -8
- data/stdlib/tmpdir/0/tmpdir.rbs +8 -1
- data/stdlib/tsort/0/tsort.rbs +0 -4
- data/stdlib/uri/0/common.rbs +11 -30
- data/stdlib/uri/0/ftp.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +22 -18
- data/stdlib/uri/0/http.rbs +2 -2
- data/stdlib/uri/0/rfc2396_parser.rbs +3 -0
- data/stdlib/zlib/0/buf_error.rbs +1 -70
- data/stdlib/zlib/0/data_error.rbs +1 -70
- data/stdlib/zlib/0/deflate.rbs +8 -72
- data/stdlib/zlib/0/error.rbs +1 -70
- data/stdlib/zlib/0/gzip_file/crc_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/length_error.rbs +2 -105
- data/stdlib/zlib/0/gzip_file/no_footer.rbs +2 -105
- data/stdlib/zlib/0/gzip_file.rbs +1 -71
- data/stdlib/zlib/0/gzip_reader.rbs +3 -74
- data/stdlib/zlib/0/gzip_writer.rbs +1 -70
- data/stdlib/zlib/0/inflate.rbs +4 -71
- data/stdlib/zlib/0/mem_error.rbs +1 -70
- data/stdlib/zlib/0/need_dict.rbs +1 -70
- data/stdlib/zlib/0/stream_end.rbs +1 -70
- data/stdlib/zlib/0/stream_error.rbs +1 -70
- data/stdlib/zlib/0/version_error.rbs +1 -70
- data/stdlib/zlib/0/zlib.rbs +0 -2
- data/stdlib/zlib/0/zstream.rbs +4 -72
- metadata +4 -6
@@ -4,16 +4,26 @@
|
|
4
4
|
|
5
5
|
id_table *alloc_empty_table(void) {
|
6
6
|
id_table *table = malloc(sizeof(id_table));
|
7
|
-
|
8
|
-
table
|
9
|
-
|
7
|
+
|
8
|
+
*table = (id_table) {
|
9
|
+
.size = 10,
|
10
|
+
.count = 0,
|
11
|
+
.ids = calloc(10, sizeof(ID)),
|
12
|
+
.next = NULL,
|
13
|
+
};
|
10
14
|
|
11
15
|
return table;
|
12
16
|
}
|
13
17
|
|
14
18
|
id_table *alloc_reset_table(void) {
|
15
19
|
id_table *table = malloc(sizeof(id_table));
|
16
|
-
|
20
|
+
|
21
|
+
*table = (id_table) {
|
22
|
+
.size = 0,
|
23
|
+
.count = 0,
|
24
|
+
.ids = NULL,
|
25
|
+
.next = NULL,
|
26
|
+
};
|
17
27
|
|
18
28
|
return table;
|
19
29
|
}
|
@@ -182,15 +192,18 @@ VALUE get_comment(parserstate *state, int subject_line) {
|
|
182
192
|
}
|
183
193
|
|
184
194
|
comment *alloc_comment(token comment_token, comment *last_comment) {
|
185
|
-
comment *new_comment =
|
195
|
+
comment *new_comment = malloc(sizeof(comment));
|
186
196
|
|
187
|
-
new_comment
|
197
|
+
*new_comment = (comment) {
|
198
|
+
.start = comment_token.range.start,
|
199
|
+
.end = comment_token.range.end,
|
188
200
|
|
189
|
-
|
190
|
-
|
201
|
+
.line_size = 0,
|
202
|
+
.line_count = 0,
|
203
|
+
.tokens = NULL,
|
191
204
|
|
192
|
-
|
193
|
-
|
205
|
+
.next_comment = last_comment,
|
206
|
+
};
|
194
207
|
|
195
208
|
comment_insert_new_line(new_comment, comment_token);
|
196
209
|
|
@@ -279,11 +292,25 @@ lexstate *alloc_lexer(VALUE string, int start_pos, int end_pos) {
|
|
279
292
|
rb_raise(rb_eArgError, "negative position range: %d...%d", start_pos, end_pos);
|
280
293
|
}
|
281
294
|
|
282
|
-
lexstate *lexer =
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
295
|
+
lexstate *lexer = malloc(sizeof(lexstate));
|
296
|
+
|
297
|
+
position start_position = (position) {
|
298
|
+
.byte_pos = 0,
|
299
|
+
.char_pos = 0,
|
300
|
+
.line = 1,
|
301
|
+
.column = 0,
|
302
|
+
};
|
303
|
+
|
304
|
+
*lexer = (lexstate) {
|
305
|
+
.string = string,
|
306
|
+
.start_pos = start_pos,
|
307
|
+
.end_pos = end_pos,
|
308
|
+
.current = start_position,
|
309
|
+
.start = { 0 },
|
310
|
+
.first_token_of_line = false,
|
311
|
+
.last_char = 0,
|
312
|
+
};
|
313
|
+
|
287
314
|
skipn(lexer, start_pos);
|
288
315
|
lexer->start = lexer->current;
|
289
316
|
lexer->first_token_of_line = lexer->current.column == 0;
|
@@ -292,13 +319,20 @@ lexstate *alloc_lexer(VALUE string, int start_pos, int end_pos) {
|
|
292
319
|
}
|
293
320
|
|
294
321
|
parserstate *alloc_parser(VALUE buffer, lexstate *lexer, int start_pos, int end_pos, VALUE variables) {
|
295
|
-
parserstate *parser =
|
296
|
-
|
297
|
-
parser
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
322
|
+
parserstate *parser = malloc(sizeof(parserstate));
|
323
|
+
|
324
|
+
*parser = (parserstate) {
|
325
|
+
.lexstate = lexer,
|
326
|
+
|
327
|
+
.current_token = NullToken,
|
328
|
+
.next_token = NullToken,
|
329
|
+
.next_token2 = NullToken,
|
330
|
+
.next_token3 = NullToken,
|
331
|
+
.buffer = buffer,
|
332
|
+
|
333
|
+
.vars = NULL,
|
334
|
+
.last_comment = NULL,
|
335
|
+
};
|
302
336
|
|
303
337
|
parser_advance(parser);
|
304
338
|
parser_advance(parser);
|
@@ -93,7 +93,7 @@ module RBS
|
|
93
93
|
case
|
94
94
|
when match = source.match(/(?<constant_name>[^#]+)#(?<method_name>.+)/)
|
95
95
|
[
|
96
|
-
TypeName(match[:constant_name] || raise),
|
96
|
+
TypeName.parse(match[:constant_name] || raise),
|
97
97
|
[
|
98
98
|
false,
|
99
99
|
(match[:method_name] or raise).to_sym
|
@@ -101,7 +101,7 @@ module RBS
|
|
101
101
|
]
|
102
102
|
when match = source.match(/(?<constant_name>[^#]+)\.(?<method_name>.+)/)
|
103
103
|
[
|
104
|
-
TypeName(match[:constant_name] || raise),
|
104
|
+
TypeName.parse(match[:constant_name] || raise),
|
105
105
|
[
|
106
106
|
true,
|
107
107
|
(match[:method_name] or raise).to_sym
|
@@ -109,7 +109,7 @@ module RBS
|
|
109
109
|
]
|
110
110
|
else
|
111
111
|
[
|
112
|
-
TypeName(source),
|
112
|
+
TypeName.parse(source),
|
113
113
|
nil
|
114
114
|
]
|
115
115
|
end
|
@@ -31,7 +31,7 @@ module RBS
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def find_class(typename)
|
34
|
-
classes = []
|
34
|
+
classes = [] #: Array[::RDoc::ClassModule]
|
35
35
|
|
36
36
|
@stores.each do |store|
|
37
37
|
if klass = store.find_class_or_module(typename.relative!.to_s)
|
@@ -70,7 +70,7 @@ module RBS
|
|
70
70
|
def find_const(const_name)
|
71
71
|
namespace =
|
72
72
|
if const_name.namespace.empty?
|
73
|
-
TypeName("::Object")
|
73
|
+
TypeName.parse("::Object")
|
74
74
|
else
|
75
75
|
const_name.namespace.to_type_name
|
76
76
|
end
|
data/lib/rbs/cli/diff.rb
CHANGED
@@ -11,8 +11,8 @@ module RBS
|
|
11
11
|
# @type var type_name: String?
|
12
12
|
type_name = nil
|
13
13
|
library_options = library_options
|
14
|
-
before_path = []
|
15
|
-
after_path = []
|
14
|
+
before_path = [] #: Array[String]
|
15
|
+
after_path = [] #: Array[String]
|
16
16
|
detail = false
|
17
17
|
|
18
18
|
opt = OptionParser.new do |o|
|
@@ -46,7 +46,7 @@ module RBS
|
|
46
46
|
end
|
47
47
|
|
48
48
|
@diff = RBS::Diff.new(
|
49
|
-
type_name: TypeName(type_name).absolute!,
|
49
|
+
type_name: TypeName.parse(type_name).absolute!,
|
50
50
|
library_options: library_options,
|
51
51
|
after_path: after_path,
|
52
52
|
before_path: before_path,
|
data/lib/rbs/cli/validate.rb
CHANGED
@@ -52,7 +52,7 @@ module RBS
|
|
52
52
|
loader = options.loader()
|
53
53
|
@env = Environment.from_loader(loader).resolve_type_names
|
54
54
|
@builder = DefinitionBuilder.new(env: @env)
|
55
|
-
@validator = Validator.new(env: @env
|
55
|
+
@validator = Validator.new(env: @env)
|
56
56
|
exit_error = false
|
57
57
|
limit = nil #: Integer?
|
58
58
|
OptionParser.new do |opts|
|
data/lib/rbs/cli.rb
CHANGED
@@ -288,7 +288,7 @@ EOU
|
|
288
288
|
env = Environment.from_loader(loader).resolve_type_names
|
289
289
|
|
290
290
|
builder = DefinitionBuilder::AncestorBuilder.new(env: env)
|
291
|
-
type_name = TypeName(args[0]).absolute!
|
291
|
+
type_name = TypeName.parse(args[0]).absolute!
|
292
292
|
|
293
293
|
case env.constant_entry(type_name)
|
294
294
|
when Environment::ClassEntry, Environment::ModuleEntry, Environment::ClassAliasEntry, Environment::ModuleAliasEntry
|
@@ -353,7 +353,7 @@ EOU
|
|
353
353
|
env = Environment.from_loader(loader).resolve_type_names
|
354
354
|
|
355
355
|
builder = DefinitionBuilder.new(env: env)
|
356
|
-
type_name = TypeName(args[0]).absolute!
|
356
|
+
type_name = TypeName.parse(args[0]).absolute!
|
357
357
|
|
358
358
|
if env.module_name?(type_name)
|
359
359
|
definition = case kind
|
@@ -406,7 +406,7 @@ EOU
|
|
406
406
|
env = Environment.from_loader(loader).resolve_type_names
|
407
407
|
|
408
408
|
builder = DefinitionBuilder.new(env: env)
|
409
|
-
type_name = TypeName(args[0]).absolute!
|
409
|
+
type_name = TypeName.parse(args[0]).absolute!
|
410
410
|
method_name = args[1].to_sym
|
411
411
|
|
412
412
|
unless env.module_name?(type_name)
|
@@ -479,9 +479,9 @@ EOU
|
|
479
479
|
builder = DefinitionBuilder.new(env: env)
|
480
480
|
resolver = Resolver::ConstantResolver.new(builder: builder)
|
481
481
|
|
482
|
-
resolver_context = context ? [nil, TypeName(context).absolute!] : nil #: Resolver::context
|
482
|
+
resolver_context = context ? [nil, TypeName.parse(context).absolute!] : nil #: Resolver::context
|
483
483
|
stdout.puts "Context: #{context}"
|
484
|
-
const_name = TypeName(args[0])
|
484
|
+
const_name = TypeName.parse(args[0])
|
485
485
|
stdout.puts "Constant name: #{const_name}"
|
486
486
|
|
487
487
|
if const_name.absolute?
|
@@ -554,11 +554,11 @@ EOU
|
|
554
554
|
when "rbi", "rb"
|
555
555
|
run_prototype_file(format, args)
|
556
556
|
when "runtime"
|
557
|
-
require_libs = []
|
558
|
-
relative_libs = []
|
557
|
+
require_libs = [] #: Array[String]
|
558
|
+
relative_libs = [] #: Array[String]
|
559
559
|
merge = false
|
560
560
|
todo = false
|
561
|
-
owners_included = []
|
561
|
+
owners_included = [] #: Array[Symbol]
|
562
562
|
outline = false
|
563
563
|
autoload = false
|
564
564
|
|
@@ -591,7 +591,7 @@ EOU
|
|
591
591
|
todo = true
|
592
592
|
end
|
593
593
|
opts.on("--method-owner CLASS", "Generate method prototypes if the owner of the method is [CLASS]") do |klass|
|
594
|
-
owners_included << klass
|
594
|
+
owners_included << klass.to_sym
|
595
595
|
end
|
596
596
|
opts.on("--outline", "Generates only module/class/constant declaration (no method definition)") do
|
597
597
|
outline = true
|
@@ -615,9 +615,9 @@ EOU
|
|
615
615
|
::Module.prepend(hook)
|
616
616
|
::Kernel.prepend(hook)
|
617
617
|
|
618
|
-
arguments = []
|
618
|
+
arguments = [] #: Array[[Module, interned]]
|
619
619
|
TracePoint.new(:call) do |tp|
|
620
|
-
base = tp.self.kind_of?(Module) ? tp.self : Kernel
|
620
|
+
base = tp.self.kind_of?(Module) ? tp.self : Kernel #: Module
|
621
621
|
name = (tp.binding or raise).local_variable_get(:name)
|
622
622
|
arguments << [base, name]
|
623
623
|
end.enable(target: hook.instance_method(:autoload), &block)
|
@@ -979,7 +979,7 @@ Options:
|
|
979
979
|
end
|
980
980
|
|
981
981
|
def test_opt options
|
982
|
-
opts = []
|
982
|
+
opts = [] #: Array[String]
|
983
983
|
|
984
984
|
opts.push(*options.repos.map {|dir| "--repo #{Shellwords.escape(dir)}"})
|
985
985
|
opts.push(*options.dirs.map {|dir| "-I #{Shellwords.escape(dir)}"})
|
@@ -1056,7 +1056,7 @@ EOB
|
|
1056
1056
|
require 'bundler'
|
1057
1057
|
|
1058
1058
|
opts = collection_options(args)
|
1059
|
-
params = {}
|
1059
|
+
params = {} #: Hash[Symbol, untyped]
|
1060
1060
|
opts.order args.drop(1), into: params
|
1061
1061
|
config_path = options.config_path or raise
|
1062
1062
|
lock_path = Collection::Config.to_lockfile_path(config_path)
|
@@ -209,7 +209,7 @@ module RBS
|
|
209
209
|
super_args = super_class.args
|
210
210
|
else
|
211
211
|
super_name = BuiltinNames::Object.name
|
212
|
-
super_args = []
|
212
|
+
super_args = [] #: Array[Types::t]
|
213
213
|
end
|
214
214
|
|
215
215
|
super_name = env.normalize_module_name(super_name)
|
@@ -525,7 +525,7 @@ module RBS
|
|
525
525
|
|
526
526
|
one_ancestors = one_singleton_ancestors(type_name)
|
527
527
|
|
528
|
-
ancestors = []
|
528
|
+
ancestors = [] #: Array[Definition::Ancestor::t]
|
529
529
|
|
530
530
|
case super_class = one_ancestors.super_class
|
531
531
|
when Definition::Ancestor::Instance
|
@@ -581,7 +581,7 @@ module RBS
|
|
581
581
|
building_ancestors.push self_ancestor
|
582
582
|
|
583
583
|
one_ancestors = one_interface_ancestors(type_name)
|
584
|
-
ancestors = []
|
584
|
+
ancestors = [] #: Array[Definition::Ancestor::t]
|
585
585
|
|
586
586
|
included_interfaces = one_ancestors.included_interfaces or raise
|
587
587
|
included_interfaces.each do |a|
|
@@ -26,7 +26,7 @@ module RBS
|
|
26
26
|
DEFAULT_CORE_ROOT = Pathname(_ = __dir__) + "../../core"
|
27
27
|
|
28
28
|
def self.gem_sig_path(name, version)
|
29
|
-
requirements = []
|
29
|
+
requirements = [] #: Array[String]
|
30
30
|
requirements << version if version
|
31
31
|
spec = Gem::Specification.find_by_name(name, *requirements)
|
32
32
|
path = Pathname(spec.gem_dir) + "sig"
|
data/lib/rbs/namespace.rb
CHANGED
data/lib/rbs/parser_aux.rb
CHANGED
data/lib/rbs/prototype/rb.rb
CHANGED
@@ -75,8 +75,8 @@ module RBS
|
|
75
75
|
def parse(string)
|
76
76
|
# @type var comments: Hash[Integer, AST::Comment]
|
77
77
|
comments = Ripper.lex(string).yield_self do |tokens|
|
78
|
-
code_lines = {}
|
79
|
-
tokens.each.with_object({}) do |token, hash|
|
78
|
+
code_lines = {} #: Hash[Integer, bool]
|
79
|
+
tokens.each.with_object({}) do |token, hash| #$ Hash[Integer, AST::Comment]
|
80
80
|
case token[1]
|
81
81
|
when :on_sp, :on_ignored_nl
|
82
82
|
# skip
|
@@ -643,11 +643,11 @@ module RBS
|
|
643
643
|
children = list.children
|
644
644
|
children.pop
|
645
645
|
else
|
646
|
-
children = []
|
646
|
+
children = [] #: Array[untyped]
|
647
647
|
end
|
648
648
|
|
649
|
-
key_types = []
|
650
|
-
value_types = []
|
649
|
+
key_types = [] #: Array[Types::t]
|
650
|
+
value_types = [] #: Array[Types::t]
|
651
651
|
children.each_slice(2) do |k, v|
|
652
652
|
if k
|
653
653
|
key_types << literal_to_type(k)
|
@@ -659,7 +659,10 @@ module RBS
|
|
659
659
|
end
|
660
660
|
|
661
661
|
if !key_types.empty? && key_types.all? { |t| t.is_a?(Types::Literal) }
|
662
|
-
fields = key_types.map {
|
662
|
+
fields = key_types.map {|t|
|
663
|
+
t.is_a?(Types::Literal) or raise
|
664
|
+
t.literal
|
665
|
+
}.zip(value_types).to_h #: Hash[Types::Literal::literal, Types::t]
|
663
666
|
Types::Record.new(fields: fields, location: nil)
|
664
667
|
else
|
665
668
|
key_type = types_to_union_type(key_types)
|
@@ -719,9 +722,9 @@ module RBS
|
|
719
722
|
when :FLOAT
|
720
723
|
BuiltinNames::Float.instance_type
|
721
724
|
when :RATIONAL
|
722
|
-
Types::ClassInstance.new(name: TypeName("::Rational"), args: [], location: nil)
|
725
|
+
Types::ClassInstance.new(name: TypeName.parse("::Rational"), args: [], location: nil)
|
723
726
|
when :IMAGINARY
|
724
|
-
Types::ClassInstance.new(name: TypeName("::Complex"), args: [], location: nil)
|
727
|
+
Types::ClassInstance.new(name: TypeName.parse("::Complex"), args: [], location: nil)
|
725
728
|
when :LIT
|
726
729
|
case node.children[0]
|
727
730
|
when Symbol
|
data/lib/rbs/prototype/rbi.rb
CHANGED
@@ -17,9 +17,7 @@ module RBS
|
|
17
17
|
|
18
18
|
def parse(string)
|
19
19
|
comments = Ripper.lex(string).yield_self do |tokens|
|
20
|
-
tokens.each.with_object({}) do |token, hash|
|
21
|
-
# @type var hash: Hash[Integer, AST::Comment]
|
22
|
-
|
20
|
+
tokens.each.with_object({}) do |token, hash| #$ Hash[Integer, AST::Comment]
|
23
21
|
if token[1] == :on_comment
|
24
22
|
line = token[0][0]
|
25
23
|
body = token[2][2..-1] or raise
|
@@ -325,11 +323,17 @@ module RBS
|
|
325
323
|
end
|
326
324
|
end
|
327
325
|
when :type_parameters
|
328
|
-
type_params = []
|
326
|
+
type_params = [] #: Array[AST::TypeParam]
|
329
327
|
|
330
328
|
each_arg args do |node|
|
331
329
|
if name = symbol_literal_node?(node)
|
332
|
-
type_params <<
|
330
|
+
type_params << AST::TypeParam.new(
|
331
|
+
name: name,
|
332
|
+
variance: :invariant,
|
333
|
+
upper_bound: nil,
|
334
|
+
location: nil,
|
335
|
+
default_type: nil
|
336
|
+
)
|
333
337
|
end
|
334
338
|
end
|
335
339
|
|
@@ -80,7 +80,9 @@ module RBS
|
|
80
80
|
kind: :instance,
|
81
81
|
location: nil,
|
82
82
|
comment: nil,
|
83
|
-
annotations:
|
83
|
+
annotations: (
|
84
|
+
[] #: Array[AST::Annotation]
|
85
|
+
)
|
84
86
|
)
|
85
87
|
end
|
86
88
|
end
|
@@ -100,7 +102,7 @@ module RBS
|
|
100
102
|
CAN_CALL_KEYWORD_INIT_P = Struct.new(:tmp).respond_to?(:keyword_init?)
|
101
103
|
|
102
104
|
def build_super_class
|
103
|
-
AST::Declarations::Class::Super.new(name: TypeName("::Struct"), args: [untyped], location: nil)
|
105
|
+
AST::Declarations::Class::Super.new(name: TypeName.parse("::Struct"), args: [untyped], location: nil)
|
104
106
|
end
|
105
107
|
|
106
108
|
def add_decl_members(decl)
|
@@ -114,7 +116,7 @@ module RBS
|
|
114
116
|
# | (?foo: untyped, ?bar: untyped) -> instance
|
115
117
|
def build_s_new
|
116
118
|
[:new, :[]].map do |name|
|
117
|
-
new_overloads = []
|
119
|
+
new_overloads = [] #: Array[AST::Members::MethodDefinition::Overload]
|
118
120
|
|
119
121
|
if CAN_CALL_KEYWORD_INIT_P
|
120
122
|
case @target_class.keyword_init?
|
@@ -221,7 +223,7 @@ module RBS
|
|
221
223
|
private
|
222
224
|
|
223
225
|
def build_super_class
|
224
|
-
AST::Declarations::Class::Super.new(name: TypeName("::Data"), args: [], location: nil)
|
226
|
+
AST::Declarations::Class::Super.new(name: TypeName.parse("::Data"), args: [], location: nil)
|
225
227
|
end
|
226
228
|
|
227
229
|
def add_decl_members(decl)
|
@@ -234,7 +236,7 @@ module RBS
|
|
234
236
|
# | (foo: untyped, bar: untyped) -> instance
|
235
237
|
def build_s_new
|
236
238
|
[:new, :[]].map do |name|
|
237
|
-
new_overloads = []
|
239
|
+
new_overloads = [] #: Array[AST::Members::MethodDefinition::Overload]
|
238
240
|
|
239
241
|
new_overloads << AST::Members::MethodDefinition::Overload.new(
|
240
242
|
annotations: [],
|
@@ -48,7 +48,8 @@ module RBS
|
|
48
48
|
|
49
49
|
def mixin_decls(type_name)
|
50
50
|
type_name_absolute = type_name.absolute!
|
51
|
-
|
51
|
+
@mixin_decls_cache ||= {} #: Hash[TypeName, Array[AST::Members::Mixin]]
|
52
|
+
@mixin_decls_cache.fetch(type_name_absolute) do
|
52
53
|
@mixin_decls_cache[type_name_absolute] = @builder.env.class_decls[type_name_absolute].decls.flat_map do |d|
|
53
54
|
d.decl.members.select { |m| m.kind_of?(AST::Members::Mixin) }
|
54
55
|
end
|
@@ -448,9 +449,9 @@ module RBS
|
|
448
449
|
location: nil
|
449
450
|
)
|
450
451
|
when ARGF
|
451
|
-
Types::ClassInstance.new(name: TypeName("::RBS::Unnamed::ARGFClass"), args: [], location: nil)
|
452
|
+
Types::ClassInstance.new(name: TypeName.parse("::RBS::Unnamed::ARGFClass"), args: [], location: nil)
|
452
453
|
when ENV
|
453
|
-
Types::ClassInstance.new(name: TypeName("::RBS::Unnamed::ENVClass"), args: [], location: nil)
|
454
|
+
Types::ClassInstance.new(name: TypeName.parse("::RBS::Unnamed::ENVClass"), args: [], location: nil)
|
454
455
|
else
|
455
456
|
value_type_name = to_type_name(const_name!(Reflection.object_class(value)), full_name: true).absolute!
|
456
457
|
args = type_args(value_type_name)
|
@@ -648,8 +649,6 @@ module RBS
|
|
648
649
|
end
|
649
650
|
|
650
651
|
def block_from_ast_of(method)
|
651
|
-
return nil if RUBY_VERSION < '3.1'
|
652
|
-
|
653
652
|
begin
|
654
653
|
ast = RubyVM::AbstractSyntaxTree.of(method)
|
655
654
|
rescue ArgumentError
|
data/lib/rbs/type_name.rb
CHANGED
@@ -86,19 +86,24 @@ module RBS
|
|
86
86
|
)
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
def self.parse(string)
|
91
|
+
absolute = string.start_with?("::")
|
92
|
+
|
93
|
+
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
94
|
+
raise unless name
|
95
|
+
|
96
|
+
TypeName.new(
|
97
|
+
name: name,
|
98
|
+
namespace: RBS::Namespace.new(path: path, absolute: absolute)
|
99
|
+
)
|
100
|
+
end
|
89
101
|
end
|
90
102
|
end
|
91
103
|
|
92
104
|
module Kernel
|
93
105
|
def TypeName(string)
|
94
|
-
|
95
|
-
|
96
|
-
*path, name = string.delete_prefix("::").split("::").map(&:to_sym)
|
97
|
-
raise unless name
|
98
|
-
|
99
|
-
RBS::TypeName.new(
|
100
|
-
name: name,
|
101
|
-
namespace: RBS::Namespace.new(path: path, absolute: absolute)
|
102
|
-
)
|
106
|
+
warn "Kernel#TypeName() is deprecated. Use RBS::TypeName.parse instead.", category: :deprecated
|
107
|
+
RBS::TypeName.parse(string)
|
103
108
|
end
|
104
109
|
end
|
@@ -15,7 +15,7 @@ module RBS
|
|
15
15
|
@target = nil
|
16
16
|
end
|
17
17
|
|
18
|
-
@@env_cache = {}
|
18
|
+
@@env_cache = {} #: Hash[Array[String], RBS::Environment]
|
19
19
|
|
20
20
|
def env
|
21
21
|
@env = @@env_cache[@libs] ||=
|
@@ -271,7 +271,7 @@ module RBS
|
|
271
271
|
|
272
272
|
assert typecheck.value(constant, value_type), "`#{constant_name}` (#{constant.inspect}) must be compatible with given type `#{value_type}`"
|
273
273
|
|
274
|
-
type_name = TypeName(constant_name).absolute!
|
274
|
+
type_name = TypeName.parse(constant_name).absolute!
|
275
275
|
definition = env.constant_entry(type_name)
|
276
276
|
assert definition, "Cannot find RBS type definition of `#{constant_name}`"
|
277
277
|
|
data/lib/rbs/validator.rb
CHANGED
@@ -6,13 +6,15 @@ module RBS
|
|
6
6
|
attr_reader :resolver
|
7
7
|
attr_reader :definition_builder
|
8
8
|
|
9
|
-
def initialize(env:, resolver:)
|
9
|
+
def initialize(env:, resolver: nil)
|
10
10
|
@env = env
|
11
11
|
@resolver = resolver
|
12
12
|
@definition_builder = DefinitionBuilder.new(env: env)
|
13
13
|
end
|
14
14
|
|
15
15
|
def absolute_type(type, context:, &block)
|
16
|
+
return type unless resolver
|
17
|
+
|
16
18
|
type.map_type_name do |type_name, _, type|
|
17
19
|
resolver.resolve(type_name, context: context) || (block ? yield(type) : type_name)
|
18
20
|
end
|
data/lib/rbs/version.rb
CHANGED
data/lib/rdoc_plugin/parser.rb
CHANGED
@@ -108,7 +108,7 @@ module RBS
|
|
108
108
|
|
109
109
|
def parse_include_decl(decl:, context:, outer_name: nil)
|
110
110
|
name = decl.name.to_s
|
111
|
-
outer_names = outer_name ? outer_name.to_s.split("::") : []
|
111
|
+
outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
|
112
112
|
qualified_name = ''
|
113
113
|
outer_names.each do |namespace|
|
114
114
|
qualified_name += namespace
|
@@ -124,7 +124,7 @@ module RBS
|
|
124
124
|
|
125
125
|
def parse_extend_decl(decl:, context:, outer_name: nil)
|
126
126
|
name = decl.name.to_s
|
127
|
-
outer_names = outer_name ? outer_name.to_s.split("::") : []
|
127
|
+
outer_names = outer_name ? outer_name.to_s.split("::") : [] #: Array[String]
|
128
128
|
qualified_name = ''
|
129
129
|
outer_names.each do |namespace|
|
130
130
|
qualified_name += namespace
|
data/rbs.gemspec
CHANGED
@@ -37,6 +37,10 @@ Gem::Specification.new do |spec|
|
|
37
37
|
end
|
38
38
|
spec.extensions = %w{ext/rbs_extension/extconf.rb}
|
39
39
|
|
40
|
+
if false
|
41
|
+
spec.required_ruby_version = ">= 3.3"
|
42
|
+
end
|
43
|
+
|
40
44
|
spec.bindir = "exe"
|
41
45
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
42
46
|
spec.require_paths = ["lib"]
|
data/sig/ancestor_graph.rbs
CHANGED
@@ -4,11 +4,11 @@ module RBS
|
|
4
4
|
# ```ruby
|
5
5
|
# graph = AncestorGraph.new(env: env, ancestor_builder: ancestor_builder)
|
6
6
|
#
|
7
|
-
# graph.each_parent(AncestorGraph::InstanceNode.new(type_name: TypeName("::Object")))
|
8
|
-
# graph.each_ancestor(AncestorGraph::InstanceNode.new(type_name: TypeName("::Object")))
|
7
|
+
# graph.each_parent(AncestorGraph::InstanceNode.new(type_name: TypeName.parse("::Object")))
|
8
|
+
# graph.each_ancestor(AncestorGraph::InstanceNode.new(type_name: TypeName.parse("::Object")))
|
9
9
|
#
|
10
|
-
# graph.each_child(AncestorGraph::InstanceNode.new(type_name: TypeName("::Object")))
|
11
|
-
# graph.each_descendant(AncestorGraph::InstanceNode.new(type_name: TypeName("::Object")))
|
10
|
+
# graph.each_child(AncestorGraph::InstanceNode.new(type_name: TypeName.parse("::Object")))
|
11
|
+
# graph.each_descendant(AncestorGraph::InstanceNode.new(type_name: TypeName.parse("::Object")))
|
12
12
|
# ```
|
13
13
|
#
|
14
14
|
# Note that the class works for class/module declarations.
|
data/sig/namespace.rbs
CHANGED
@@ -141,7 +141,6 @@ module RBS
|
|
141
141
|
end
|
142
142
|
|
143
143
|
module Kernel
|
144
|
-
#
|
145
|
-
|
146
|
-
def Namespace: (String) -> RBS::Namespace
|
144
|
+
# Deprecated: Use `RBS::Namespace.parse` instead
|
145
|
+
%a{steep:deprecated} def Namespace: (String) -> RBS::Namespace
|
147
146
|
end
|
@@ -6,8 +6,8 @@ module RBS
|
|
6
6
|
# ```rb
|
7
7
|
# table = RBS::ConstantResolver::Table.new(env)
|
8
8
|
#
|
9
|
-
# table.children(TypeName("::Object")) # -> { ... } Returns a hash of name and constants.
|
10
|
-
# table.children(TypeName("::File::PATH_SEPARATOR")) # -> nil Returns nil because the constant is not a module.
|
9
|
+
# table.children(TypeName.parse("::Object")) # -> { ... } Returns a hash of name and constants.
|
10
|
+
# table.children(TypeName.parse("::File::PATH_SEPARATOR")) # -> nil Returns nil because the constant is not a module.
|
11
11
|
#
|
12
12
|
# table.toplevel # -> { ... } Returns a hash of top level constants.
|
13
13
|
# ```
|