rbs 2.5.1 → 2.6.0
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 +1 -1
- data/.github/workflows/ruby.yml +3 -3
- data/CHANGELOG.md +44 -0
- data/Gemfile.lock +5 -5
- data/Rakefile +6 -38
- data/Steepfile +6 -2
- data/core/constants.rbs +1 -1
- data/core/env.rbs +1 -1323
- data/core/global_variables.rbs +1 -1
- data/core/hash.rbs +3 -3
- data/core/kernel.rbs +2 -2
- data/core/random.rbs +5 -220
- data/core/rational.rbs +3 -3
- data/core/rbs/unnamed/argf.rbs +965 -0
- data/core/rbs/unnamed/env_class.rbs +1325 -0
- data/core/rbs/unnamed/random.rbs +270 -0
- data/core/regexp.rbs +2 -3
- data/docs/CONTRIBUTING.md +2 -2
- data/ext/rbs_extension/lexer.c +1343 -1353
- data/ext/rbs_extension/lexer.re +2 -2
- data/ext/rbs_extension/rbs_extension.h +1 -1
- data/ext/rbs_extension/unescape.c +17 -10
- data/lib/rbs/ast/members.rb +6 -3
- data/lib/rbs/cli.rb +2 -0
- data/lib/rbs/factory.rb +2 -0
- data/lib/rbs/prototype/helpers.rb +1 -5
- data/lib/rbs/prototype/rb.rb +105 -56
- data/lib/rbs/prototype/rbi.rb +65 -30
- data/lib/rbs/prototype/runtime.rb +4 -3
- data/lib/rbs/test/setup_helper.rb +6 -1
- data/lib/rbs/version.rb +1 -1
- data/schema/members.json +4 -1
- data/sig/collection/config.rbs +3 -0
- data/sig/factory.rbs +5 -0
- data/sig/prototype/helpers.rbs +23 -0
- data/sig/prototype/rb.rbs +84 -0
- data/sig/prototype/rbi.rbs +73 -0
- data/sig/shims/abstract_syntax_tree.rbs +25 -0
- data/sig/shims/enumerable.rbs +5 -0
- data/sig/shims/pp.rbs +3 -0
- data/sig/shims/ripper.rbs +8 -0
- data/stdlib/cgi/0/manifest.yaml +2 -0
- data/stdlib/date/0/time.rbs +26 -0
- data/stdlib/etc/0/etc.rbs +745 -0
- data/stdlib/minitest/0/kernel.rbs +42 -0
- data/stdlib/minitest/0/manifest.yaml +2 -0
- data/stdlib/minitest/0/minitest/abstract_reporter.rbs +49 -0
- data/stdlib/minitest/0/minitest/assertion.rbs +16 -0
- data/stdlib/minitest/0/minitest/assertions.rbs +545 -0
- data/stdlib/minitest/0/minitest/backtrace_filter.rbs +16 -0
- data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
- data/stdlib/minitest/0/minitest/benchmark.rbs +258 -0
- data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
- data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
- data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
- data/stdlib/minitest/0/minitest/guard.rbs +64 -0
- data/stdlib/minitest/0/minitest/mock.rbs +60 -0
- data/stdlib/minitest/0/minitest/parallel/executor.rbs +42 -0
- data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +6 -0
- data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
- data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
- data/stdlib/minitest/0/minitest/pride_io.rbs +54 -0
- data/stdlib/minitest/0/minitest/pride_lol.rbs +17 -0
- data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
- data/stdlib/minitest/0/minitest/reportable.rbs +51 -0
- data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
- data/stdlib/minitest/0/minitest/result.rbs +28 -0
- data/stdlib/minitest/0/minitest/runnable.rbs +131 -0
- data/stdlib/minitest/0/minitest/skip.rbs +6 -0
- data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
- data/stdlib/minitest/0/minitest/spec/dsl.rbs +125 -0
- data/stdlib/minitest/0/minitest/spec.rbs +11 -0
- data/stdlib/minitest/0/minitest/statistics_reporter.rbs +76 -0
- data/stdlib/minitest/0/minitest/summary_reporter.rbs +25 -0
- data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
- data/stdlib/minitest/0/minitest/test.rbs +76 -0
- data/stdlib/minitest/0/minitest/unexpected_error.rbs +10 -0
- data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
- data/stdlib/minitest/0/minitest/unit.rbs +5 -0
- data/stdlib/minitest/0/minitest.rbs +966 -0
- data/stdlib/rubygems/0/errors.rbs +113 -0
- metadata +54 -4
- data/lib/rbs/char_scanner.rb +0 -20
data/lib/rbs/prototype/rbi.rb
CHANGED
@@ -14,17 +14,20 @@ module RBS
|
|
14
14
|
def parse(string)
|
15
15
|
comments = Ripper.lex(string).yield_self do |tokens|
|
16
16
|
tokens.each.with_object({}) do |token, hash|
|
17
|
+
# @type var hash: Hash[Integer, AST::Comment]
|
18
|
+
|
17
19
|
if token[1] == :on_comment
|
18
20
|
line = token[0][0]
|
19
|
-
body = token[2][2..-1]
|
21
|
+
body = token[2][2..-1] or raise
|
20
22
|
|
21
23
|
body = "\n" if body.empty?
|
22
24
|
|
23
25
|
comment = AST::Comment.new(string: body, location: nil)
|
24
|
-
if (prev_comment = hash
|
25
|
-
hash[line
|
26
|
-
|
27
|
-
|
26
|
+
if (prev_comment = hash.delete(line - 1))
|
27
|
+
hash[line] = AST::Comment.new(
|
28
|
+
string: prev_comment.string + comment.string,
|
29
|
+
location: nil
|
30
|
+
)
|
28
31
|
else
|
29
32
|
hash[line] = comment
|
30
33
|
end
|
@@ -45,7 +48,7 @@ module RBS
|
|
45
48
|
end
|
46
49
|
|
47
50
|
def push_class(name, super_class, comment:)
|
48
|
-
|
51
|
+
class_decl = AST::Declarations::Class.new(
|
49
52
|
name: nested_name(name),
|
50
53
|
super_class: super_class && AST::Declarations::Class::Super.new(name: const_to_name(super_class), args: [], location: nil),
|
51
54
|
type_params: [],
|
@@ -55,7 +58,8 @@ module RBS
|
|
55
58
|
comment: comment
|
56
59
|
)
|
57
60
|
|
58
|
-
|
61
|
+
modules << class_decl
|
62
|
+
decls << class_decl
|
59
63
|
|
60
64
|
yield
|
61
65
|
ensure
|
@@ -63,7 +67,7 @@ module RBS
|
|
63
67
|
end
|
64
68
|
|
65
69
|
def push_module(name, comment:)
|
66
|
-
|
70
|
+
module_decl = AST::Declarations::Module.new(
|
67
71
|
name: nested_name(name),
|
68
72
|
type_params: [],
|
69
73
|
members: [],
|
@@ -73,7 +77,8 @@ module RBS
|
|
73
77
|
comment: comment
|
74
78
|
)
|
75
79
|
|
76
|
-
|
80
|
+
modules << module_decl
|
81
|
+
decls << module_decl
|
77
82
|
|
78
83
|
yield
|
79
84
|
ensure
|
@@ -84,9 +89,16 @@ module RBS
|
|
84
89
|
modules.last
|
85
90
|
end
|
86
91
|
|
92
|
+
def current_module!
|
93
|
+
current_module or raise
|
94
|
+
end
|
95
|
+
|
87
96
|
def push_sig(node)
|
88
|
-
|
89
|
-
|
97
|
+
if last_sig = @last_sig
|
98
|
+
last_sig << node
|
99
|
+
else
|
100
|
+
@last_sig = [node]
|
101
|
+
end
|
90
102
|
end
|
91
103
|
|
92
104
|
def pop_sig
|
@@ -125,7 +137,7 @@ module RBS
|
|
125
137
|
location: nil,
|
126
138
|
comment: nil
|
127
139
|
)
|
128
|
-
current_module
|
140
|
+
current_module!.members << include_member
|
129
141
|
end
|
130
142
|
end
|
131
143
|
when :extend
|
@@ -140,15 +152,16 @@ module RBS
|
|
140
152
|
location: nil,
|
141
153
|
comment: nil
|
142
154
|
)
|
143
|
-
current_module
|
155
|
+
current_module!.members << member
|
144
156
|
end
|
145
157
|
end
|
146
158
|
end
|
147
159
|
when :sig
|
148
|
-
|
160
|
+
out = outer.last or raise
|
161
|
+
push_sig out.children.last.children.last
|
149
162
|
when :alias_method
|
150
163
|
new, old = each_arg(node.children[1]).map {|x| x.children[0] }
|
151
|
-
current_module
|
164
|
+
current_module!.members << AST::Members::Alias.new(
|
152
165
|
new_name: new,
|
153
166
|
old_name: old,
|
154
167
|
location: nil,
|
@@ -164,9 +177,9 @@ module RBS
|
|
164
177
|
comment = join_comments(sigs, comments)
|
165
178
|
|
166
179
|
args = node.children[2]
|
167
|
-
types = sigs.map {|sig| method_type(args, sig, variables: current_module.
|
180
|
+
types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
|
168
181
|
|
169
|
-
current_module
|
182
|
+
current_module!.members << AST::Members::MethodDefinition.new(
|
170
183
|
name: node.children[1],
|
171
184
|
location: nil,
|
172
185
|
annotations: [],
|
@@ -184,9 +197,9 @@ module RBS
|
|
184
197
|
comment = join_comments(sigs, comments)
|
185
198
|
|
186
199
|
args = node.children[1]
|
187
|
-
types = sigs.map {|sig| method_type(args, sig, variables: current_module.
|
200
|
+
types = sigs.map {|sig| method_type(args, sig, variables: current_module!.type_params, overloads: sigs.size) }.compact
|
188
201
|
|
189
|
-
current_module
|
202
|
+
current_module!.members << AST::Members::MethodDefinition.new(
|
190
203
|
name: node.children[0],
|
191
204
|
location: nil,
|
192
205
|
annotations: [],
|
@@ -203,7 +216,8 @@ module RBS
|
|
203
216
|
node.type == :HASH &&
|
204
217
|
each_arg(node.children[0]).each_slice(2).any? {|a, _| a.type == :LIT && a.children[0] == :fixed }
|
205
218
|
}
|
206
|
-
|
219
|
+
# @type var variance: AST::TypeParam::variance?
|
220
|
+
if (a0 = each_arg(send.children[1]).to_a[0]) && a0.type == :LIT
|
207
221
|
variance = case a0.children[0]
|
208
222
|
when :out
|
209
223
|
:covariant
|
@@ -212,7 +226,7 @@ module RBS
|
|
212
226
|
end
|
213
227
|
end
|
214
228
|
|
215
|
-
current_module
|
229
|
+
current_module!.type_params << AST::TypeParam.new(
|
216
230
|
name: node.children[0],
|
217
231
|
variance: variance || :invariant,
|
218
232
|
location: nil,
|
@@ -242,7 +256,7 @@ module RBS
|
|
242
256
|
)
|
243
257
|
end
|
244
258
|
when :ALIAS
|
245
|
-
current_module
|
259
|
+
current_module!.members << AST::Members::Alias.new(
|
246
260
|
new_name: node.children[0].children[0],
|
247
261
|
old_name: node.children[1].children[0],
|
248
262
|
location: nil,
|
@@ -257,10 +271,10 @@ module RBS
|
|
257
271
|
end
|
258
272
|
end
|
259
273
|
|
260
|
-
def method_type(args_node, type_node, variables:)
|
274
|
+
def method_type(args_node, type_node, variables:, overloads:)
|
261
275
|
if type_node
|
262
276
|
if type_node.type == :CALL
|
263
|
-
method_type = method_type(args_node, type_node.children[0], variables: variables)
|
277
|
+
method_type = method_type(args_node, type_node.children[0], variables: variables, overloads: overloads) or raise
|
264
278
|
else
|
265
279
|
method_type = MethodType.new(
|
266
280
|
type: Types::Function.empty(Types::Bases::Any.new(location: nil)),
|
@@ -289,7 +303,7 @@ module RBS
|
|
289
303
|
method_type.update(type: method_type.type.with_return_type(type_of(return_type, variables: variables)))
|
290
304
|
when :params
|
291
305
|
if args_node
|
292
|
-
parse_params(args_node, args, method_type, variables: variables)
|
306
|
+
parse_params(args_node, args, method_type, variables: variables, overloads: overloads)
|
293
307
|
else
|
294
308
|
vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
|
295
309
|
|
@@ -319,15 +333,22 @@ module RBS
|
|
319
333
|
end
|
320
334
|
end
|
321
335
|
|
322
|
-
def parse_params(args_node, args, method_type, variables:)
|
336
|
+
def parse_params(args_node, args, method_type, variables:, overloads:)
|
323
337
|
vars = (node_to_hash(each_arg(args).to_a[0]) || {}).transform_values {|value| type_of(value, variables: variables) }
|
324
338
|
|
339
|
+
# @type var required_positionals: Array[Types::Function::Param]
|
325
340
|
required_positionals = []
|
341
|
+
# @type var optional_positionals: Array[Types::Function::Param]
|
326
342
|
optional_positionals = []
|
343
|
+
# @type var rest_positionals: Types::Function::Param?
|
327
344
|
rest_positionals = nil
|
345
|
+
# @type var trailing_positionals: Array[Types::Function::Param]
|
328
346
|
trailing_positionals = []
|
347
|
+
# @type var required_keywords: Hash[Symbol, Types::Function::Param]
|
329
348
|
required_keywords = {}
|
349
|
+
# @type var optional_keywords: Hash[Symbol, Types::Function::Param]
|
330
350
|
optional_keywords = {}
|
351
|
+
# @type var rest_keywords: Types::Function::Param?
|
331
352
|
rest_keywords = nil
|
332
353
|
|
333
354
|
var_names = args_node.children[0]
|
@@ -396,8 +417,8 @@ module RBS
|
|
396
417
|
type: Types::Function.empty(Types::Bases::Any.new(location: nil))
|
397
418
|
)
|
398
419
|
# Handle an optional block like `T.nilable(T.proc.void)`.
|
399
|
-
elsif type.is_a?(Types::Optional) && type.type.is_a?(Types::Proc)
|
400
|
-
method_block = Types::Block.new(required: false, type:
|
420
|
+
elsif type.is_a?(Types::Optional) && (proc_type = type.type).is_a?(Types::Proc)
|
421
|
+
method_block = Types::Block.new(required: false, type: proc_type.type)
|
401
422
|
else
|
402
423
|
STDERR.puts "Unexpected block type: #{type}"
|
403
424
|
PP.pp args_node, STDERR
|
@@ -406,6 +427,13 @@ module RBS
|
|
406
427
|
type: Types::Function.empty(Types::Bases::Any.new(location: nil))
|
407
428
|
)
|
408
429
|
end
|
430
|
+
else
|
431
|
+
if overloads == 1
|
432
|
+
method_block = Types::Block.new(
|
433
|
+
required: false,
|
434
|
+
type: Types::Function.empty(Types::Bases::Any.new(location: nil))
|
435
|
+
)
|
436
|
+
end
|
409
437
|
end
|
410
438
|
end
|
411
439
|
|
@@ -439,7 +467,7 @@ module RBS
|
|
439
467
|
def type_of0(type_node, variables:)
|
440
468
|
case
|
441
469
|
when type_node.type == :CONST
|
442
|
-
if variables.
|
470
|
+
if variables.include?(type_node.children[0])
|
443
471
|
Types::Variable.new(name: type_node.children[0], location: nil)
|
444
472
|
else
|
445
473
|
Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
|
@@ -447,7 +475,10 @@ module RBS
|
|
447
475
|
when type_node.type == :COLON2
|
448
476
|
Types::ClassInstance.new(name: const_to_name(type_node), args: [], location: nil)
|
449
477
|
when call_node?(type_node, name: :[], receiver: -> (_) { true })
|
478
|
+
# The type_node represents a type application
|
450
479
|
type = type_of(type_node.children[0], variables: variables)
|
480
|
+
type.is_a?(Types::ClassInstance) or raise
|
481
|
+
|
451
482
|
each_arg(type_node.children[2]) do |arg|
|
452
483
|
type.args << type_of(arg, variables: variables)
|
453
484
|
end
|
@@ -487,7 +518,8 @@ module RBS
|
|
487
518
|
Types::Tuple.new(types: types, location: nil)
|
488
519
|
else
|
489
520
|
if proc_type?(type_node)
|
490
|
-
|
521
|
+
method_type = method_type(nil, type_node, variables: variables, overloads: 1) or raise
|
522
|
+
Types::Proc.new(type: method_type.type, block: nil, location: nil)
|
491
523
|
else
|
492
524
|
STDERR.puts "Unexpected type_node:"
|
493
525
|
PP.pp type_node, STDERR
|
@@ -572,9 +604,12 @@ module RBS
|
|
572
604
|
|
573
605
|
def node_to_hash(node)
|
574
606
|
if node&.type == :HASH
|
607
|
+
# @type var hash: Hash[Symbol, untyped]
|
575
608
|
hash = {}
|
576
609
|
|
577
610
|
each_arg(node.children[0]).each_slice(2) do |var, type|
|
611
|
+
var or raise
|
612
|
+
|
578
613
|
if var.type == :LIT && type
|
579
614
|
hash[var.children[0]] = type
|
580
615
|
end
|
@@ -341,7 +341,7 @@ module RBS
|
|
341
341
|
end
|
342
342
|
|
343
343
|
decls << AST::Declarations::Constant.new(
|
344
|
-
name: name,
|
344
|
+
name: to_type_name(name.to_s),
|
345
345
|
type: type,
|
346
346
|
location: nil,
|
347
347
|
comment: nil
|
@@ -470,8 +470,9 @@ module RBS
|
|
470
470
|
*outer_module_names, _ = const_name(mod).split(/::/) #=> parent = [A, B], mod = C
|
471
471
|
destination = @decls # Copy the entries in ivar @decls, not .dup
|
472
472
|
|
473
|
-
outer_module_names&.
|
474
|
-
|
473
|
+
outer_module_names&.each_with_index do |outer_module_name, i|
|
474
|
+
current_name = outer_module_names[0, i + 1].join('::')
|
475
|
+
outer_module = @modules.detect { |x| const_name(x) == current_name }
|
475
476
|
outer_decl = destination.detect { |decl| decl.is_a?(outer_module.is_a?(Class) ? AST::Declarations::Class : AST::Declarations::Module) && decl.name.name == outer_module_name.to_sym }
|
476
477
|
|
477
478
|
# Insert AST::Declarations if declarations are not added previously
|
@@ -30,7 +30,12 @@ module RBS
|
|
30
30
|
|
31
31
|
case double_suite.downcase.strip
|
32
32
|
when 'rspec'
|
33
|
-
[
|
33
|
+
[
|
34
|
+
'::RSpec::Mocks::Double',
|
35
|
+
'::RSpec::Mocks::InstanceVerifyingDouble',
|
36
|
+
'::RSpec::Mocks::ObjectVerifyingDouble',
|
37
|
+
'::RSpec::Mocks::ClassVerifyingDouble',
|
38
|
+
]
|
34
39
|
when 'minitest'
|
35
40
|
['::Minitest::Mock']
|
36
41
|
else
|
data/lib/rbs/version.rb
CHANGED
data/schema/members.json
CHANGED
@@ -202,9 +202,12 @@
|
|
202
202
|
},
|
203
203
|
"location": {
|
204
204
|
"$ref": "location.json"
|
205
|
+
},
|
206
|
+
"visibility": {
|
207
|
+
"enum": ["public", "private", null]
|
205
208
|
}
|
206
209
|
},
|
207
|
-
"required": ["member", "name", "ivar_name", "type", "annotations", "kind", "comment", "location"]
|
210
|
+
"required": ["member", "name", "ivar_name", "type", "annotations", "kind", "comment", "location", "visibility"]
|
208
211
|
},
|
209
212
|
"visibility": {
|
210
213
|
"title": "Visibility specifier",
|
data/sig/collection/config.rbs
CHANGED
data/sig/factory.rbs
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module RBS
|
2
|
+
module Prototype
|
3
|
+
module Helpers
|
4
|
+
type node = RubyVM::AbstractSyntaxTree::Node
|
5
|
+
|
6
|
+
def block_from_body: (node) -> Types::Block?
|
7
|
+
|
8
|
+
def each_node: (Array[untyped] nodes) { (node) -> void } -> void
|
9
|
+
|
10
|
+
def each_child: (node) { (node child) -> void } -> void
|
11
|
+
|
12
|
+
def any_node?: (node, ?nodes: Array[node]) { (node) -> bool } -> Array[node]?
|
13
|
+
|
14
|
+
def keyword_hash?: (node) -> bool
|
15
|
+
|
16
|
+
def args_from_node: (node?) -> Array[untyped]
|
17
|
+
|
18
|
+
def untyped: () -> Types::Bases::Any
|
19
|
+
|
20
|
+
@untyped: Types::Bases::Any
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module RBS
|
2
|
+
module Prototype
|
3
|
+
class RB
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
class Context
|
7
|
+
type method_kind = :singleton | :singleton_instance | :instance
|
8
|
+
|
9
|
+
attr_accessor module_function: bool
|
10
|
+
|
11
|
+
attr_accessor singleton: bool
|
12
|
+
|
13
|
+
attr_accessor namespace: Namespace
|
14
|
+
|
15
|
+
def initialize: (module_function: bool, singleton: bool, namespace: Namespace) -> void
|
16
|
+
|
17
|
+
def method_kind: () -> method_kind
|
18
|
+
|
19
|
+
def attribute_kind: () -> (:singleton | :instance)
|
20
|
+
|
21
|
+
def self.initial: (?namespace: Namespace) -> Context
|
22
|
+
end
|
23
|
+
|
24
|
+
type decl = AST::Declarations::t | AST::Members::t
|
25
|
+
|
26
|
+
attr_reader source_decls: Array[decl]
|
27
|
+
|
28
|
+
def initialize: () -> void
|
29
|
+
|
30
|
+
def decls: () -> Array[AST::Declarations::t]
|
31
|
+
|
32
|
+
def parse: (String) -> void
|
33
|
+
|
34
|
+
def process: (untyped node, decls: Array[AST::Declarations::t | AST::Members::t], comments: Hash[Integer, AST::Comment], context: Context) -> void
|
35
|
+
|
36
|
+
def process_children: (RubyVM::AbstractSyntaxTree::Node node, decls: Array[decl], comments: Hash[Integer, AST::Comment], context: Context) -> void
|
37
|
+
|
38
|
+
# Returns a type name that represents the name of the constant.
|
39
|
+
# `node` must be _constant_ node, `CONST`, `COLON2`, or `COLON3` node.
|
40
|
+
#
|
41
|
+
def const_to_name!: (RubyVM::AbstractSyntaxTree::Node node) -> TypeName
|
42
|
+
|
43
|
+
# Returns a type name that represents the name of the constant.
|
44
|
+
# `node` can be `SELF` for `extend self` pattern.
|
45
|
+
#
|
46
|
+
def const_to_name: (RubyVM::AbstractSyntaxTree::Node? node, context: Context) -> TypeName?
|
47
|
+
|
48
|
+
def literal_to_symbol: (RubyVM::AbstractSyntaxTree::Node node) -> Symbol?
|
49
|
+
|
50
|
+
def function_type_from_body: (RubyVM::AbstractSyntaxTree::Node node, Symbol def_name) -> Types::Function
|
51
|
+
|
52
|
+
def function_return_type_from_body: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
|
53
|
+
|
54
|
+
def body_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
|
55
|
+
|
56
|
+
def if_unless_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
|
57
|
+
|
58
|
+
def block_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
|
59
|
+
|
60
|
+
def literal_to_type: (RubyVM::AbstractSyntaxTree::Node node) -> Types::t
|
61
|
+
|
62
|
+
def types_to_union_type: (Array[Types::t] types) -> Types::t
|
63
|
+
|
64
|
+
def range_element_type: (Array[Types::t] types) -> Types::t
|
65
|
+
|
66
|
+
def param_type: (RubyVM::AbstractSyntaxTree::Node node, ?default: Types::Bases::Any) -> Types::t
|
67
|
+
|
68
|
+
# backward compatible
|
69
|
+
alias node_type param_type
|
70
|
+
|
71
|
+
def private: () -> AST::Members::Private
|
72
|
+
|
73
|
+
def public: () -> AST::Members::Public
|
74
|
+
|
75
|
+
def current_accessibility: (Array[decl] decls, ?Integer index) -> (AST::Members::Private | AST::Members::Public)
|
76
|
+
|
77
|
+
def remove_unnecessary_accessibility_methods!: (Array[decl]) -> void
|
78
|
+
|
79
|
+
def is_accessibility?: (decl) -> bool
|
80
|
+
|
81
|
+
def find_def_index_by_name: (Array[decl] decls, Symbol name) -> [Integer, AST::Members::MethodDefinition | AST::Members::AttrReader | AST::Members::AttrWriter]?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module RBS
|
2
|
+
module Prototype
|
3
|
+
class RBI
|
4
|
+
attr_reader decls: Array[AST::Declarations::t]
|
5
|
+
|
6
|
+
type module_decl = AST::Declarations::Class | AST::Declarations::Module
|
7
|
+
|
8
|
+
# A stack representing the module nesting structure in the Ruby code
|
9
|
+
attr_reader modules: Array[module_decl]
|
10
|
+
|
11
|
+
# Last subsequent `sig` calls
|
12
|
+
attr_reader last_sig: Array[RubyVM::AbstractSyntaxTree::Node]?
|
13
|
+
|
14
|
+
def initialize: () -> void
|
15
|
+
|
16
|
+
def parse: (String) -> void
|
17
|
+
|
18
|
+
def nested_name: (RubyVM::AbstractSyntaxTree::Node name) -> TypeName
|
19
|
+
|
20
|
+
def current_namespace: () -> Namespace
|
21
|
+
|
22
|
+
def push_class: (
|
23
|
+
RubyVM::AbstractSyntaxTree::Node name,
|
24
|
+
RubyVM::AbstractSyntaxTree::Node super_class,
|
25
|
+
comment: AST::Comment?
|
26
|
+
) { () -> void } -> void
|
27
|
+
|
28
|
+
def push_module: (RubyVM::AbstractSyntaxTree::Node name, comment: AST::Comment?) { () -> void } -> void
|
29
|
+
|
30
|
+
# The inner most module/class definition, returns `nil` on toplevel
|
31
|
+
def current_module: () -> module_decl?
|
32
|
+
|
33
|
+
# The inner most module/class definition, raises on toplevel
|
34
|
+
def current_module!: () -> module_decl
|
35
|
+
|
36
|
+
# Put a `sig` call to current list.
|
37
|
+
def push_sig: (RubyVM::AbstractSyntaxTree::Node node) -> void
|
38
|
+
|
39
|
+
# Clear the `sig` call list
|
40
|
+
def pop_sig: () -> Array[RubyVM::AbstractSyntaxTree::Node]?
|
41
|
+
|
42
|
+
def join_comments: (Array[RubyVM::AbstractSyntaxTree::Node] nodes, Hash[Integer, AST::Comment] comments) -> AST::Comment
|
43
|
+
|
44
|
+
def process: (RubyVM::AbstractSyntaxTree::Node node, comments: Hash[Integer, AST::Comment], ?outer: Array[RubyVM::AbstractSyntaxTree::Node]) -> void
|
45
|
+
|
46
|
+
def method_type: (RubyVM::AbstractSyntaxTree::Node? args_node, RubyVM::AbstractSyntaxTree::Node? type_node, variables: Array[AST::TypeParam], overloads: Integer) -> MethodType?
|
47
|
+
|
48
|
+
def parse_params: (RubyVM::AbstractSyntaxTree::Node args_node, RubyVM::AbstractSyntaxTree::Node args, MethodType method_type, variables: Array[AST::TypeParam], overloads: Integer) -> MethodType
|
49
|
+
|
50
|
+
def type_of: (RubyVM::AbstractSyntaxTree::Node type_node, variables: Array[AST::TypeParam]) -> Types::t
|
51
|
+
|
52
|
+
def type_of0: (RubyVM::AbstractSyntaxTree::Node type_node, variables: Array[AST::TypeParam]) -> Types::t
|
53
|
+
|
54
|
+
def proc_type?: (RubyVM::AbstractSyntaxTree::Node type_node) -> bool
|
55
|
+
|
56
|
+
def call_node?: (RubyVM::AbstractSyntaxTree::Node node, name: Symbol, ?receiver: ^(RubyVM::AbstractSyntaxTree::Node) -> bool, ?args: ^(RubyVM::AbstractSyntaxTree::Node) -> bool) -> bool
|
57
|
+
|
58
|
+
# Receives a constant node and returns `TypeName` instance
|
59
|
+
def const_to_name: (RubyVM::AbstractSyntaxTree::Node node) -> TypeName
|
60
|
+
|
61
|
+
# Receives `:ARRAY` or `:LIST` node and yields the child nodes.
|
62
|
+
def each_arg: (RubyVM::AbstractSyntaxTree::Node array) { (RubyVM::AbstractSyntaxTree::Node) -> void } -> void
|
63
|
+
| (RubyVM::AbstractSyntaxTree::Node array) -> Enumerator[RubyVM::AbstractSyntaxTree::Node, void]
|
64
|
+
|
65
|
+
# Receives node and yields the child nodes.
|
66
|
+
def each_child: (RubyVM::AbstractSyntaxTree::Node node) { (RubyVM::AbstractSyntaxTree::Node) -> void } -> void
|
67
|
+
| (RubyVM::AbstractSyntaxTree::Node node) -> Enumerator[RubyVM::AbstractSyntaxTree::Node, void]
|
68
|
+
|
69
|
+
# Receives a keyword `:HASH` node and returns hash instance.
|
70
|
+
def node_to_hash: (RubyVM::AbstractSyntaxTree::Node node) -> Hash[Symbol, RubyVM::AbstractSyntaxTree::Node]?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class RubyVM
|
2
|
+
module AbstractSyntaxTree
|
3
|
+
def self.parse: (String src) -> Node
|
4
|
+
|
5
|
+
def self.parse_file: (String pathname) -> Node
|
6
|
+
|
7
|
+
def self.of: (untyped proc) -> Node
|
8
|
+
|
9
|
+
class Node
|
10
|
+
attr_reader children (): Array[untyped]
|
11
|
+
|
12
|
+
attr_reader first_column (): Integer
|
13
|
+
|
14
|
+
attr_reader first_lineno (): Integer
|
15
|
+
|
16
|
+
attr_reader last_column (): Integer
|
17
|
+
|
18
|
+
attr_reader last_lineno (): Integer
|
19
|
+
|
20
|
+
attr_reader type (): Symbol
|
21
|
+
|
22
|
+
def inspect: () -> String
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/sig/shims/pp.rbs
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
%a{annotate:rdoc:skip}
|
2
|
+
class Time
|
3
|
+
# <!--
|
4
|
+
# rdoc-file=ext/date/date_core.c
|
5
|
+
# - t.to_time -> time
|
6
|
+
# -->
|
7
|
+
# Returns self.
|
8
|
+
#
|
9
|
+
def to_time: () -> Time
|
10
|
+
|
11
|
+
# <!--
|
12
|
+
# rdoc-file=ext/date/date_core.c
|
13
|
+
# - t.to_date -> date
|
14
|
+
# -->
|
15
|
+
# Returns a Date object which denotes self.
|
16
|
+
#
|
17
|
+
def to_date: () -> Date
|
18
|
+
|
19
|
+
# <!--
|
20
|
+
# rdoc-file=ext/date/date_core.c
|
21
|
+
# - t.to_datetime -> datetime
|
22
|
+
# -->
|
23
|
+
# Returns a DateTime object which denotes self.
|
24
|
+
#
|
25
|
+
def to_datetime: () -> DateTime
|
26
|
+
end
|