rbs 4.0.0.dev.4 → 4.0.0.dev.5
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 +11 -8
- data/.github/workflows/comments.yml +3 -3
- data/.github/workflows/dependabot.yml +1 -1
- data/.github/workflows/ruby.yml +17 -34
- data/.github/workflows/typecheck.yml +2 -2
- data/.github/workflows/valgrind.yml +42 -0
- data/.github/workflows/windows.yml +2 -2
- data/.rubocop.yml +1 -1
- data/README.md +1 -1
- data/Rakefile +32 -5
- data/config.yml +46 -0
- data/core/array.rbs +96 -46
- data/core/binding.rbs +0 -2
- data/core/builtin.rbs +2 -2
- data/core/comparable.rbs +13 -6
- data/core/complex.rbs +55 -41
- data/core/dir.rbs +4 -4
- data/core/encoding.rbs +7 -10
- data/core/enumerable.rbs +90 -3
- data/core/enumerator/arithmetic_sequence.rbs +70 -0
- data/core/enumerator.rbs +63 -1
- data/core/errno.rbs +8 -0
- data/core/errors.rbs +28 -1
- data/core/exception.rbs +2 -2
- data/core/fiber.rbs +40 -20
- data/core/file.rbs +108 -78
- data/core/file_test.rbs +1 -1
- data/core/float.rbs +225 -69
- data/core/gc.rbs +417 -281
- data/core/hash.rbs +1023 -727
- data/core/integer.rbs +104 -110
- data/core/io/buffer.rbs +21 -10
- data/core/io/wait.rbs +11 -33
- data/core/io.rbs +82 -19
- data/core/kernel.rbs +70 -59
- data/core/marshal.rbs +1 -1
- data/core/match_data.rbs +1 -1
- data/core/math.rbs +42 -3
- data/core/method.rbs +63 -27
- data/core/module.rbs +103 -26
- data/core/nil_class.rbs +3 -3
- data/core/numeric.rbs +43 -35
- data/core/object.rbs +3 -3
- data/core/object_space.rbs +21 -15
- data/core/pathname.rbs +1272 -0
- data/core/proc.rbs +30 -25
- data/core/process.rbs +4 -2
- data/core/ractor.rbs +361 -509
- data/core/random.rbs +17 -0
- data/core/range.rbs +113 -16
- data/core/rational.rbs +56 -85
- data/core/rbs/unnamed/argf.rbs +2 -2
- data/core/rbs/unnamed/env_class.rbs +1 -1
- data/core/rbs/unnamed/random.rbs +4 -113
- data/core/regexp.rbs +25 -20
- data/core/ruby.rbs +53 -0
- data/core/ruby_vm.rbs +6 -4
- data/core/rubygems/errors.rbs +3 -70
- data/core/rubygems/rubygems.rbs +11 -79
- data/core/rubygems/version.rbs +2 -3
- data/core/set.rbs +488 -359
- data/core/signal.rbs +24 -14
- data/core/string.rbs +3171 -1241
- data/core/struct.rbs +1 -1
- data/core/symbol.rbs +17 -11
- data/core/thread.rbs +95 -33
- data/core/time.rbs +35 -9
- data/core/trace_point.rbs +7 -4
- data/core/unbound_method.rbs +14 -6
- data/docs/aliases.md +79 -0
- data/docs/collection.md +2 -2
- data/docs/encoding.md +56 -0
- data/docs/gem.md +0 -1
- data/docs/inline.md +470 -0
- data/docs/sigs.md +3 -3
- data/docs/syntax.md +33 -4
- data/docs/type_fingerprint.md +21 -0
- data/exe/rbs +1 -1
- data/ext/rbs_extension/ast_translation.c +77 -3
- data/ext/rbs_extension/ast_translation.h +3 -0
- data/ext/rbs_extension/class_constants.c +8 -2
- data/ext/rbs_extension/class_constants.h +4 -0
- data/ext/rbs_extension/extconf.rb +5 -1
- data/ext/rbs_extension/legacy_location.c +5 -5
- data/ext/rbs_extension/main.c +37 -20
- data/include/rbs/ast.h +85 -38
- data/include/rbs/defines.h +27 -0
- data/include/rbs/lexer.h +30 -11
- data/include/rbs/parser.h +6 -6
- data/include/rbs/string.h +0 -2
- data/include/rbs/util/rbs_allocator.h +34 -13
- data/include/rbs/util/rbs_assert.h +12 -1
- data/include/rbs/util/rbs_encoding.h +2 -0
- data/include/rbs/util/rbs_unescape.h +2 -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 +137 -0
- data/lib/rbs/ast/ruby/comment_block.rb +24 -0
- data/lib/rbs/ast/ruby/declarations.rb +198 -3
- data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
- data/lib/rbs/ast/ruby/members.rb +159 -1
- data/lib/rbs/ast/type_param.rb +24 -4
- data/lib/rbs/buffer.rb +20 -15
- data/lib/rbs/cli/diff.rb +16 -15
- data/lib/rbs/cli/validate.rb +38 -51
- data/lib/rbs/cli.rb +52 -19
- data/lib/rbs/collection/config/lockfile_generator.rb +8 -0
- data/lib/rbs/collection/sources/git.rb +1 -0
- data/lib/rbs/definition.rb +1 -1
- data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
- data/lib/rbs/definition_builder/method_builder.rb +20 -0
- data/lib/rbs/definition_builder.rb +91 -2
- data/lib/rbs/diff.rb +7 -1
- data/lib/rbs/environment.rb +227 -74
- data/lib/rbs/environment_loader.rb +0 -6
- data/lib/rbs/errors.rb +27 -7
- data/lib/rbs/inline_parser.rb +341 -5
- data/lib/rbs/location_aux.rb +1 -1
- data/lib/rbs/locator.rb +5 -1
- data/lib/rbs/method_type.rb +5 -3
- data/lib/rbs/parser_aux.rb +2 -2
- data/lib/rbs/prototype/rb.rb +2 -2
- data/lib/rbs/prototype/rbi.rb +2 -0
- data/lib/rbs/prototype/runtime.rb +8 -0
- data/lib/rbs/resolver/constant_resolver.rb +2 -2
- data/lib/rbs/resolver/type_name_resolver.rb +116 -38
- data/lib/rbs/subtractor.rb +3 -1
- data/lib/rbs/test/type_check.rb +16 -2
- data/lib/rbs/type_name.rb +1 -1
- data/lib/rbs/types.rb +27 -27
- data/lib/rbs/validator.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +1 -1
- data/lib/rdoc/discover.rb +1 -1
- data/lib/rdoc_plugin/parser.rb +1 -1
- data/rbs.gemspec +3 -2
- data/schema/typeParam.json +17 -1
- data/sig/ast/ruby/annotations.rbs +124 -0
- data/sig/ast/ruby/comment_block.rbs +8 -0
- data/sig/ast/ruby/declarations.rbs +102 -4
- data/sig/ast/ruby/members.rbs +87 -1
- data/sig/cli/diff.rbs +5 -11
- data/sig/cli/validate.rbs +13 -4
- data/sig/cli.rbs +18 -18
- data/sig/definition.rbs +6 -1
- data/sig/environment.rbs +70 -12
- data/sig/errors.rbs +13 -6
- data/sig/inline_parser.rbs +39 -2
- data/sig/locator.rbs +0 -2
- data/sig/manifest.yaml +0 -1
- data/sig/method_builder.rbs +3 -1
- data/sig/method_types.rbs +1 -1
- data/sig/parser.rbs +16 -2
- data/sig/resolver/type_name_resolver.rbs +35 -7
- data/sig/source.rbs +3 -3
- data/sig/type_param.rbs +13 -8
- data/sig/types.rbs +4 -4
- data/src/ast.c +80 -1
- data/src/lexer.c +1392 -1313
- data/src/lexer.re +3 -0
- data/src/lexstate.c +58 -37
- data/src/location.c +4 -4
- data/src/parser.c +412 -145
- data/src/string.c +0 -48
- data/src/util/rbs_allocator.c +89 -71
- data/src/util/rbs_assert.c +1 -1
- data/src/util/rbs_buffer.c +2 -2
- data/src/util/rbs_constant_pool.c +10 -10
- data/src/util/rbs_encoding.c +4 -8
- data/src/util/rbs_unescape.c +56 -20
- data/stdlib/bigdecimal/0/big_decimal.rbs +100 -82
- 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 +3 -1
- data/stdlib/date/0/date.rbs +67 -59
- data/stdlib/date/0/date_time.rbs +1 -1
- data/stdlib/delegate/0/delegator.rbs +10 -7
- data/stdlib/digest/0/digest.rbs +110 -0
- data/stdlib/erb/0/erb.rbs +737 -347
- data/stdlib/fileutils/0/fileutils.rbs +20 -14
- data/stdlib/forwardable/0/forwardable.rbs +3 -0
- data/stdlib/json/0/json.rbs +82 -28
- data/stdlib/net-http/0/net-http.rbs +3 -0
- data/stdlib/objspace/0/objspace.rbs +9 -27
- data/stdlib/open-uri/0/open-uri.rbs +40 -0
- data/stdlib/open3/0/open3.rbs +459 -1
- data/stdlib/openssl/0/openssl.rbs +331 -228
- data/stdlib/optparse/0/optparse.rbs +8 -3
- data/stdlib/pathname/0/pathname.rbs +9 -1379
- data/stdlib/psych/0/psych.rbs +4 -4
- 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/rdoc.rbs +1 -1
- data/stdlib/rdoc/0/store.rbs +1 -1
- data/stdlib/resolv/0/resolv.rbs +25 -68
- data/stdlib/ripper/0/ripper.rbs +2 -2
- data/stdlib/securerandom/0/manifest.yaml +2 -0
- data/stdlib/securerandom/0/securerandom.rbs +6 -19
- data/stdlib/singleton/0/singleton.rbs +3 -0
- data/stdlib/socket/0/socket.rbs +13 -1
- data/stdlib/socket/0/tcp_socket.rbs +10 -2
- data/stdlib/stringio/0/stringio.rbs +1176 -85
- data/stdlib/strscan/0/string_scanner.rbs +31 -31
- data/stdlib/tempfile/0/tempfile.rbs +3 -3
- data/stdlib/time/0/time.rbs +1 -1
- data/stdlib/timeout/0/timeout.rbs +63 -7
- data/stdlib/tsort/0/cyclic.rbs +3 -0
- data/stdlib/uri/0/common.rbs +16 -2
- data/stdlib/uri/0/file.rbs +1 -1
- data/stdlib/uri/0/generic.rbs +24 -16
- data/stdlib/uri/0/rfc2396_parser.rbs +6 -7
- data/stdlib/zlib/0/gzip_reader.rbs +2 -2
- data/stdlib/zlib/0/gzip_writer.rbs +1 -1
- data/stdlib/zlib/0/zstream.rbs +1 -0
- metadata +30 -4
|
@@ -5,17 +5,28 @@ module RBS
|
|
|
5
5
|
class TypeNameResolver
|
|
6
6
|
attr_reader :all_names
|
|
7
7
|
attr_reader :cache
|
|
8
|
-
attr_reader :
|
|
8
|
+
attr_reader :aliases
|
|
9
9
|
|
|
10
|
-
def initialize(
|
|
11
|
-
@all_names =
|
|
10
|
+
def initialize(all_names, aliases)
|
|
11
|
+
@all_names = all_names
|
|
12
|
+
@aliases = aliases
|
|
12
13
|
@cache = {}
|
|
13
|
-
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.build(env)
|
|
17
|
+
all_names = Set.new #: Set[TypeName]
|
|
14
18
|
|
|
15
19
|
all_names.merge(env.class_decls.keys)
|
|
16
20
|
all_names.merge(env.interface_decls.keys)
|
|
17
21
|
all_names.merge(env.type_alias_decls.keys)
|
|
18
|
-
|
|
22
|
+
|
|
23
|
+
aliases = {} #: Hash[TypeName, [TypeName, context]]
|
|
24
|
+
|
|
25
|
+
env.class_alias_decls.each do |name, entry|
|
|
26
|
+
aliases[name] = [entry.decl.old_name, entry.context]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
new(all_names, aliases)
|
|
19
30
|
end
|
|
20
31
|
|
|
21
32
|
def try_cache(query)
|
|
@@ -26,64 +37,131 @@ module RBS
|
|
|
26
37
|
end
|
|
27
38
|
|
|
28
39
|
def resolve(type_name, context:)
|
|
29
|
-
if type_name.absolute?
|
|
40
|
+
if type_name.absolute? && has_type_name?(type_name)
|
|
30
41
|
return type_name
|
|
31
42
|
end
|
|
32
43
|
|
|
33
44
|
try_cache([type_name, context]) do
|
|
34
|
-
|
|
45
|
+
if type_name.class?
|
|
46
|
+
resolve_namespace0(type_name, context, Set.new) || nil
|
|
47
|
+
else
|
|
48
|
+
namespace = type_name.namespace
|
|
35
49
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if head
|
|
39
|
-
if tail
|
|
40
|
-
absolute_name = tail.with_prefix(head.to_namespace)
|
|
41
|
-
if env.normalize_type_name?(absolute_name)
|
|
42
|
-
absolute_name
|
|
43
|
-
end
|
|
50
|
+
if namespace.empty?
|
|
51
|
+
resolve_type_name(type_name.name, context)
|
|
44
52
|
else
|
|
45
|
-
|
|
53
|
+
if namespace = resolve_namespace0(namespace.to_type_name, context, Set.new)
|
|
54
|
+
type_name = TypeName.new(name: type_name.name, namespace: namespace.to_namespace)
|
|
55
|
+
has_type_name?(type_name)
|
|
56
|
+
end
|
|
46
57
|
end
|
|
47
58
|
end
|
|
48
59
|
end
|
|
49
60
|
end
|
|
50
61
|
|
|
51
|
-
def
|
|
52
|
-
if type_name.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
else
|
|
56
|
-
head, *tail = type_name.namespace.path
|
|
62
|
+
def resolve_namespace(type_name, context:)
|
|
63
|
+
if type_name.absolute? && has_type_name?(type_name)
|
|
64
|
+
return type_name
|
|
65
|
+
end
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
unless type_name.class?
|
|
68
|
+
raise "Type name must be a class name: #{type_name}"
|
|
69
|
+
end
|
|
59
70
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
namespace: Namespace.new(absolute: false, path: tail)
|
|
63
|
-
)
|
|
71
|
+
try_cache([type_name, context]) do
|
|
72
|
+
ns = resolve_namespace0(type_name, context, Set.new) or return ns
|
|
64
73
|
end
|
|
74
|
+
end
|
|
65
75
|
|
|
66
|
-
|
|
76
|
+
def has_type_name?(full_name)
|
|
77
|
+
if all_names.include?(full_name)
|
|
78
|
+
full_name
|
|
79
|
+
end
|
|
67
80
|
end
|
|
68
81
|
|
|
69
|
-
def
|
|
82
|
+
def aliased_name?(type_name)
|
|
83
|
+
if aliases.key?(type_name)
|
|
84
|
+
type_name
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def resolve_type_name(type_name, context)
|
|
70
89
|
if context
|
|
71
|
-
|
|
72
|
-
case
|
|
90
|
+
outer, inner = context
|
|
91
|
+
case inner
|
|
73
92
|
when false
|
|
74
|
-
|
|
93
|
+
resolve_type_name(type_name, outer)
|
|
94
|
+
else
|
|
95
|
+
has_type_name?(inner) or raise "Context must be normalized: #{inner.inspect}"
|
|
96
|
+
has_type_name?(TypeName.new(name: type_name, namespace: inner.to_namespace)) || resolve_type_name(type_name, outer)
|
|
97
|
+
end
|
|
98
|
+
else
|
|
99
|
+
type_name = TypeName.new(name: type_name, namespace: Namespace.root)
|
|
100
|
+
has_type_name?(type_name)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def resolve_head_namespace(head, context)
|
|
105
|
+
if context
|
|
106
|
+
outer, inner = context
|
|
107
|
+
case inner
|
|
108
|
+
when false
|
|
109
|
+
resolve_head_namespace(head, outer)
|
|
75
110
|
when TypeName
|
|
76
|
-
|
|
77
|
-
|
|
111
|
+
has_type_name?(inner) or raise "Context must be normalized: #{inner.inspect}"
|
|
112
|
+
type_name = TypeName.new(name: head, namespace: inner.to_namespace)
|
|
113
|
+
has_type_name?(type_name) || aliased_name?(type_name) || resolve_head_namespace(head, outer)
|
|
78
114
|
end
|
|
79
115
|
else
|
|
80
|
-
|
|
116
|
+
type_name = TypeName.new(name: head, namespace: Namespace.root)
|
|
117
|
+
has_type_name?(type_name) || aliased_name?(type_name)
|
|
81
118
|
end
|
|
82
119
|
end
|
|
83
120
|
|
|
84
|
-
def
|
|
85
|
-
if
|
|
86
|
-
|
|
121
|
+
def normalize_namespace(type_name, rhs, context, visited)
|
|
122
|
+
if visited.include?(type_name)
|
|
123
|
+
# Cycle detected
|
|
124
|
+
return false
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
visited << type_name
|
|
128
|
+
|
|
129
|
+
begin
|
|
130
|
+
resolve_namespace0(rhs, context, visited)
|
|
131
|
+
ensure
|
|
132
|
+
visited.delete(type_name)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def resolve_namespace0(type_name, context, visited)
|
|
137
|
+
head, *tail = [*type_name.namespace.path, type_name.name]
|
|
138
|
+
|
|
139
|
+
head = head #: Symbol
|
|
140
|
+
|
|
141
|
+
head =
|
|
142
|
+
if type_name.absolute?
|
|
143
|
+
root_name = TypeName.new(name: head, namespace: Namespace.root)
|
|
144
|
+
has_type_name?(root_name) || aliased_name?(root_name)
|
|
145
|
+
else
|
|
146
|
+
resolve_head_namespace(head, context)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
if head
|
|
150
|
+
if (rhs, context = aliases.fetch(head, nil))
|
|
151
|
+
head = normalize_namespace(head, rhs, context, visited) or return head
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
tail.inject(head) do |namespace, name|
|
|
155
|
+
type_name = TypeName.new(name: name, namespace: namespace.to_namespace)
|
|
156
|
+
case
|
|
157
|
+
when has_type_name?(type_name)
|
|
158
|
+
type_name
|
|
159
|
+
when (rhs, context = aliases.fetch(type_name, nil))
|
|
160
|
+
m = normalize_namespace(type_name, rhs, context, visited) or return m
|
|
161
|
+
else
|
|
162
|
+
return nil
|
|
163
|
+
end
|
|
164
|
+
end
|
|
87
165
|
end
|
|
88
166
|
end
|
|
89
167
|
end
|
data/lib/rbs/subtractor.rb
CHANGED
|
@@ -107,7 +107,9 @@ module RBS
|
|
|
107
107
|
each_member(owner).any? do |m|
|
|
108
108
|
case m
|
|
109
109
|
when AST::Members::InstanceVariable
|
|
110
|
-
m.name == name
|
|
110
|
+
m.name == name && kind == :instance
|
|
111
|
+
when AST::Members::ClassInstanceVariable
|
|
112
|
+
m.name == name && kind == :singleton
|
|
111
113
|
when AST::Members::Attribute
|
|
112
114
|
ivar_name = m.ivar_name == false ? nil : m.ivar_name || :"@#{m.name}"
|
|
113
115
|
ivar_name == name && m.kind == kind
|
data/lib/rbs/test/type_check.rb
CHANGED
|
@@ -245,7 +245,7 @@ module RBS
|
|
|
245
245
|
when Types::Bases::Any
|
|
246
246
|
true
|
|
247
247
|
when Types::Bases::Bool
|
|
248
|
-
|
|
248
|
+
Test.call(val, IS_AP, TrueClass) || Test.call(val, IS_AP, FalseClass)
|
|
249
249
|
when Types::Bases::Top
|
|
250
250
|
true
|
|
251
251
|
when Types::Bases::Bottom
|
|
@@ -288,6 +288,19 @@ module RBS
|
|
|
288
288
|
values << args
|
|
289
289
|
nil
|
|
290
290
|
end
|
|
291
|
+
when nil
|
|
292
|
+
values = []
|
|
293
|
+
count = 10_000
|
|
294
|
+
|
|
295
|
+
ret = val.each do |*args|
|
|
296
|
+
count -= 1
|
|
297
|
+
values << args
|
|
298
|
+
break if count <= 0
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
if count == 0
|
|
302
|
+
ret = self
|
|
303
|
+
end
|
|
291
304
|
else
|
|
292
305
|
values = []
|
|
293
306
|
ret = val.each do |*args|
|
|
@@ -323,7 +336,7 @@ module RBS
|
|
|
323
336
|
rescue TypeError
|
|
324
337
|
return false
|
|
325
338
|
end
|
|
326
|
-
|
|
339
|
+
Test.call(val, IS_AP, singleton_class)
|
|
327
340
|
when Types::Interface
|
|
328
341
|
if (definition = builder.build_interface(type.name.absolute!))
|
|
329
342
|
definition.methods.each.all? do |method_name, method|
|
|
@@ -351,6 +364,7 @@ module RBS
|
|
|
351
364
|
value(val, builder.expand_alias2(type.name.absolute!, type.args))
|
|
352
365
|
when Types::Tuple
|
|
353
366
|
Test.call(val, IS_AP, ::Array) &&
|
|
367
|
+
type.types.length == val.length &&
|
|
354
368
|
type.types.map.with_index {|ty, index| value(val[index], ty) }.all?
|
|
355
369
|
when Types::Record
|
|
356
370
|
Test::call(val, IS_AP, ::Hash) &&
|
data/lib/rbs/type_name.rb
CHANGED
data/lib/rbs/types.rb
CHANGED
|
@@ -61,7 +61,7 @@ module RBS
|
|
|
61
61
|
include EmptyEachType
|
|
62
62
|
include NoTypeName
|
|
63
63
|
|
|
64
|
-
def to_json(state =
|
|
64
|
+
def to_json(state = nil)
|
|
65
65
|
klass = to_s.to_sym
|
|
66
66
|
{ class: klass, location: location }.to_json(state)
|
|
67
67
|
end
|
|
@@ -157,7 +157,7 @@ module RBS
|
|
|
157
157
|
end
|
|
158
158
|
end
|
|
159
159
|
|
|
160
|
-
def to_json(state =
|
|
160
|
+
def to_json(state = nil)
|
|
161
161
|
{ class: :variable, name: name, location: location }.to_json(state)
|
|
162
162
|
end
|
|
163
163
|
|
|
@@ -221,7 +221,7 @@ module RBS
|
|
|
221
221
|
include NoFreeVariables
|
|
222
222
|
include NoSubst
|
|
223
223
|
|
|
224
|
-
def to_json(state =
|
|
224
|
+
def to_json(state = nil)
|
|
225
225
|
{ class: :class_singleton, name: name, location: location }.to_json(state)
|
|
226
226
|
end
|
|
227
227
|
|
|
@@ -303,7 +303,7 @@ module RBS
|
|
|
303
303
|
# `void` in immediate generics parameter is allowed
|
|
304
304
|
false
|
|
305
305
|
else
|
|
306
|
-
type.with_nonreturn_void?
|
|
306
|
+
type.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
307
307
|
end
|
|
308
308
|
end
|
|
309
309
|
end
|
|
@@ -320,7 +320,7 @@ module RBS
|
|
|
320
320
|
@location = location
|
|
321
321
|
end
|
|
322
322
|
|
|
323
|
-
def to_json(state =
|
|
323
|
+
def to_json(state = nil)
|
|
324
324
|
{ class: :interface, name: name, args: args, location: location }.to_json(state)
|
|
325
325
|
end
|
|
326
326
|
|
|
@@ -364,7 +364,7 @@ module RBS
|
|
|
364
364
|
@location = location
|
|
365
365
|
end
|
|
366
366
|
|
|
367
|
-
def to_json(state =
|
|
367
|
+
def to_json(state = nil)
|
|
368
368
|
{ class: :class_instance, name: name, args: args, location: location }.to_json(state)
|
|
369
369
|
end
|
|
370
370
|
|
|
@@ -408,7 +408,7 @@ module RBS
|
|
|
408
408
|
@location = location
|
|
409
409
|
end
|
|
410
410
|
|
|
411
|
-
def to_json(state =
|
|
411
|
+
def to_json(state = nil)
|
|
412
412
|
{ class: :alias, name: name, args: args, location: location }.to_json(state)
|
|
413
413
|
end
|
|
414
414
|
|
|
@@ -466,7 +466,7 @@ module RBS
|
|
|
466
466
|
end
|
|
467
467
|
end
|
|
468
468
|
|
|
469
|
-
def to_json(state =
|
|
469
|
+
def to_json(state = nil)
|
|
470
470
|
{ class: :tuple, types: types, location: location }.to_json(state)
|
|
471
471
|
end
|
|
472
472
|
|
|
@@ -520,7 +520,7 @@ module RBS
|
|
|
520
520
|
end
|
|
521
521
|
|
|
522
522
|
def with_nonreturn_void?
|
|
523
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
523
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
524
524
|
end
|
|
525
525
|
end
|
|
526
526
|
|
|
@@ -573,7 +573,7 @@ module RBS
|
|
|
573
573
|
end
|
|
574
574
|
end
|
|
575
575
|
|
|
576
|
-
def to_json(state =
|
|
576
|
+
def to_json(state = nil)
|
|
577
577
|
{ class: :record, fields: fields, optional_fields: optional_fields, location: location }.to_json(state)
|
|
578
578
|
end
|
|
579
579
|
|
|
@@ -638,7 +638,7 @@ module RBS
|
|
|
638
638
|
end
|
|
639
639
|
|
|
640
640
|
def with_nonreturn_void?
|
|
641
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
641
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
642
642
|
end
|
|
643
643
|
end
|
|
644
644
|
|
|
@@ -665,7 +665,7 @@ module RBS
|
|
|
665
665
|
type.free_variables(set)
|
|
666
666
|
end
|
|
667
667
|
|
|
668
|
-
def to_json(state =
|
|
668
|
+
def to_json(state = nil)
|
|
669
669
|
{ class: :optional, type: type, location: location }.to_json(state)
|
|
670
670
|
end
|
|
671
671
|
|
|
@@ -724,7 +724,7 @@ module RBS
|
|
|
724
724
|
end
|
|
725
725
|
|
|
726
726
|
def with_nonreturn_void?
|
|
727
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
727
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
728
728
|
end
|
|
729
729
|
end
|
|
730
730
|
|
|
@@ -755,7 +755,7 @@ module RBS
|
|
|
755
755
|
end
|
|
756
756
|
end
|
|
757
757
|
|
|
758
|
-
def to_json(state =
|
|
758
|
+
def to_json(state = nil)
|
|
759
759
|
{ class: :union, types: types, location: location }.to_json(state)
|
|
760
760
|
end
|
|
761
761
|
|
|
@@ -815,7 +815,7 @@ module RBS
|
|
|
815
815
|
end
|
|
816
816
|
|
|
817
817
|
def with_nonreturn_void?
|
|
818
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
818
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
819
819
|
end
|
|
820
820
|
end
|
|
821
821
|
|
|
@@ -846,7 +846,7 @@ module RBS
|
|
|
846
846
|
end
|
|
847
847
|
end
|
|
848
848
|
|
|
849
|
-
def to_json(state =
|
|
849
|
+
def to_json(state = nil)
|
|
850
850
|
{ class: :intersection, types: types, location: location }.to_json(state)
|
|
851
851
|
end
|
|
852
852
|
|
|
@@ -898,7 +898,7 @@ module RBS
|
|
|
898
898
|
end
|
|
899
899
|
|
|
900
900
|
def with_nonreturn_void?
|
|
901
|
-
each_type.any? {|type| type.with_nonreturn_void? }
|
|
901
|
+
each_type.any? {|type| type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
902
902
|
end
|
|
903
903
|
end
|
|
904
904
|
|
|
@@ -932,7 +932,7 @@ module RBS
|
|
|
932
932
|
end
|
|
933
933
|
end
|
|
934
934
|
|
|
935
|
-
def to_json(state =
|
|
935
|
+
def to_json(state = nil)
|
|
936
936
|
{ type: type, name: name }.to_json(state)
|
|
937
937
|
end
|
|
938
938
|
|
|
@@ -1091,7 +1091,7 @@ module RBS
|
|
|
1091
1091
|
end
|
|
1092
1092
|
end
|
|
1093
1093
|
|
|
1094
|
-
def to_json(state =
|
|
1094
|
+
def to_json(state = nil)
|
|
1095
1095
|
{
|
|
1096
1096
|
required_positionals: required_positionals,
|
|
1097
1097
|
optional_positionals: optional_positionals,
|
|
@@ -1226,13 +1226,13 @@ module RBS
|
|
|
1226
1226
|
end
|
|
1227
1227
|
|
|
1228
1228
|
def with_nonreturn_void?
|
|
1229
|
-
if each_param.any? {|param| param.type.with_nonreturn_void? }
|
|
1229
|
+
if each_param.any? {|param| param.type.with_nonreturn_void? } # steep:ignore DeprecatedReference
|
|
1230
1230
|
true
|
|
1231
1231
|
else
|
|
1232
1232
|
if return_type.is_a?(Bases::Void)
|
|
1233
1233
|
false
|
|
1234
1234
|
else
|
|
1235
|
-
return_type.with_nonreturn_void?
|
|
1235
|
+
return_type.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
1236
1236
|
end
|
|
1237
1237
|
end
|
|
1238
1238
|
end
|
|
@@ -1279,7 +1279,7 @@ module RBS
|
|
|
1279
1279
|
end
|
|
1280
1280
|
end
|
|
1281
1281
|
|
|
1282
|
-
def to_json(state =
|
|
1282
|
+
def to_json(state = nil)
|
|
1283
1283
|
{
|
|
1284
1284
|
return_type: return_type
|
|
1285
1285
|
}.to_json(state)
|
|
@@ -1355,7 +1355,7 @@ module RBS
|
|
|
1355
1355
|
other.self_type == self_type
|
|
1356
1356
|
end
|
|
1357
1357
|
|
|
1358
|
-
def to_json(state =
|
|
1358
|
+
def to_json(state = nil)
|
|
1359
1359
|
{
|
|
1360
1360
|
type: type,
|
|
1361
1361
|
required: required,
|
|
@@ -1424,7 +1424,7 @@ module RBS
|
|
|
1424
1424
|
set
|
|
1425
1425
|
end
|
|
1426
1426
|
|
|
1427
|
-
def to_json(state =
|
|
1427
|
+
def to_json(state = nil)
|
|
1428
1428
|
{
|
|
1429
1429
|
class: :proc,
|
|
1430
1430
|
type: type,
|
|
@@ -1505,11 +1505,11 @@ module RBS
|
|
|
1505
1505
|
end
|
|
1506
1506
|
|
|
1507
1507
|
def with_nonreturn_void?
|
|
1508
|
-
if type.with_nonreturn_void? || self_type&.with_nonreturn_void?
|
|
1508
|
+
if type.with_nonreturn_void? || self_type&.with_nonreturn_void? # steep:ignore DeprecatedReference
|
|
1509
1509
|
true
|
|
1510
1510
|
else
|
|
1511
1511
|
if block = block()
|
|
1512
|
-
block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false
|
|
1512
|
+
block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false # steep:ignore DeprecatedReference
|
|
1513
1513
|
else
|
|
1514
1514
|
false
|
|
1515
1515
|
end
|
|
@@ -1541,7 +1541,7 @@ module RBS
|
|
|
1541
1541
|
include EmptyEachType
|
|
1542
1542
|
include NoTypeName
|
|
1543
1543
|
|
|
1544
|
-
def to_json(state =
|
|
1544
|
+
def to_json(state = nil)
|
|
1545
1545
|
{ class: :literal, literal: literal.inspect, location: location }.to_json(state)
|
|
1546
1546
|
end
|
|
1547
1547
|
|
data/lib/rbs/validator.rb
CHANGED
|
@@ -127,8 +127,8 @@ module RBS
|
|
|
127
127
|
# @type var each_child: ^(Symbol) { (Symbol) -> void } -> void
|
|
128
128
|
each_child = -> (name, &block) do
|
|
129
129
|
if param = params.find {|p| p.name == name }
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
[param.upper_bound_type, param.lower_bound_type].compact.each do |bound|
|
|
131
|
+
bound.free_variables.each do |tv|
|
|
132
132
|
block[tv]
|
|
133
133
|
end
|
|
134
134
|
end
|
data/lib/rbs/version.rb
CHANGED
data/lib/rbs.rb
CHANGED
data/lib/rdoc/discover.rb
CHANGED
data/lib/rdoc_plugin/parser.rb
CHANGED
|
@@ -76,7 +76,7 @@ module RBS
|
|
|
76
76
|
method.visibility = decl.visibility
|
|
77
77
|
method.call_seq = decl.overloads.map {|overload| "#{decl.name.to_s}#{overload.method_type.to_s}" }.join("\n")
|
|
78
78
|
if loc = decl.location
|
|
79
|
-
method.start_collecting_tokens
|
|
79
|
+
method.start_collecting_tokens(:ruby)
|
|
80
80
|
method.add_token({ line_no: 1, char_no: 1, kind: :on_comment, text: "# File #{@top_level.relative_name}, line(s) #{loc.start_line}:#{loc.end_line}\n" })
|
|
81
81
|
method.add_token({ line_no: 1, char_no: 1, text: loc.source })
|
|
82
82
|
method.line = loc.start_line
|
data/rbs.gemspec
CHANGED
|
@@ -38,13 +38,14 @@ Gem::Specification.new do |spec|
|
|
|
38
38
|
spec.extensions = %w{ext/rbs_extension/extconf.rb}
|
|
39
39
|
|
|
40
40
|
if false
|
|
41
|
-
spec.required_ruby_version = ">= 3.
|
|
41
|
+
spec.required_ruby_version = ">= 3.4"
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
spec.bindir = "exe"
|
|
45
45
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
46
46
|
spec.require_paths = ["lib"]
|
|
47
|
-
spec.required_ruby_version = ">= 3.
|
|
47
|
+
spec.required_ruby_version = ">= 3.2"
|
|
48
48
|
spec.add_dependency "logger"
|
|
49
49
|
spec.add_dependency "prism", ">= 1.3.0"
|
|
50
|
+
spec.add_dependency "tsort"
|
|
50
51
|
end
|
data/schema/typeParam.json
CHANGED
|
@@ -28,9 +28,25 @@
|
|
|
28
28
|
}
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
|
+
"lower_bound": {
|
|
32
|
+
"oneOf": [
|
|
33
|
+
{
|
|
34
|
+
"$ref": "types.json#/definitions/classInstance"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"$ref": "types.json#/definitions/classSingleton"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"$ref": "types.json#/definitions/interface"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "null"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
31
47
|
"location": {
|
|
32
48
|
"$ref": "location.json"
|
|
33
49
|
}
|
|
34
50
|
},
|
|
35
|
-
"required": ["name", "variance", "unchecked", "upper_bound", "location"]
|
|
51
|
+
"required": ["name", "variance", "unchecked", "upper_bound", "lower_bound", "location"]
|
|
36
52
|
}
|