rbs 2.5.1 → 2.6.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/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
|