rbi 0.3.0 → 0.3.2
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/Gemfile +2 -1
- data/lib/rbi/formatter.rb +5 -2
- data/lib/rbi/index.rb +12 -2
- data/lib/rbi/loc.rb +1 -1
- data/lib/rbi/model.rb +31 -6
- data/lib/rbi/parser.rb +130 -29
- data/lib/rbi/printer.rb +23 -4
- data/lib/rbi/rbs/method_type_translator.rb +2 -2
- data/lib/rbi/rbs/type_translator.rb +1 -1
- data/lib/rbi/rbs_printer.rb +24 -18
- data/lib/rbi/rewriters/flatten_singleton_methods.rb +2 -1
- data/lib/rbi/rewriters/flatten_visibilities.rb +2 -2
- data/lib/rbi/rewriters/merge_trees.rb +10 -10
- data/lib/rbi/rewriters/nest_top_level_members.rb +1 -1
- data/lib/rbi/rewriters/remove_known_definitions.rb +3 -3
- data/lib/rbi/rewriters/sort_nodes.rb +3 -1
- data/lib/rbi/rewriters/translate_rbs_sigs.rb +2 -2
- data/lib/rbi/type.rb +8 -8
- data/lib/rbi/type_parser.rb +36 -12
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi/visitor.rb +5 -0
- data/rbi/rbi.rbi +64 -1077
- metadata +3 -3
@@ -67,8 +67,8 @@ module RBI
|
|
67
67
|
@left_name = left_name
|
68
68
|
@right_name = right_name
|
69
69
|
@keep = keep
|
70
|
-
@tree =
|
71
|
-
@scope_stack =
|
70
|
+
@tree = MergeTree.new #: MergeTree
|
71
|
+
@scope_stack = [@tree] #: Array[Tree]
|
72
72
|
end
|
73
73
|
|
74
74
|
#: (Tree tree) -> void
|
@@ -99,12 +99,12 @@ module RBI
|
|
99
99
|
def initialize(output, left_name: "left", right_name: "right", keep: Keep::NONE)
|
100
100
|
super()
|
101
101
|
@tree = output
|
102
|
-
@index =
|
103
|
-
@scope_stack =
|
102
|
+
@index = output.index #: Index
|
103
|
+
@scope_stack = [@tree] #: Array[Tree]
|
104
104
|
@left_name = left_name
|
105
105
|
@right_name = right_name
|
106
106
|
@keep = keep
|
107
|
-
@conflicts =
|
107
|
+
@conflicts = [] #: Array[Conflict]
|
108
108
|
end
|
109
109
|
|
110
110
|
# @override
|
@@ -159,7 +159,7 @@ module RBI
|
|
159
159
|
|
160
160
|
#: -> Tree
|
161
161
|
def current_scope
|
162
|
-
|
162
|
+
@scope_stack.last #: as !nil
|
163
163
|
end
|
164
164
|
|
165
165
|
#: (Node node) -> Node?
|
@@ -245,7 +245,7 @@ module RBI
|
|
245
245
|
# @override
|
246
246
|
#: (Array[Node] nodes) -> void
|
247
247
|
def visit_all(nodes)
|
248
|
-
last_conflict_tree =
|
248
|
+
last_conflict_tree = nil #: ConflictTree?
|
249
249
|
nodes.dup.each do |node|
|
250
250
|
if node.is_a?(ConflictTree)
|
251
251
|
if last_conflict_tree
|
@@ -287,7 +287,7 @@ module RBI
|
|
287
287
|
|
288
288
|
#: -> ConflictTree?
|
289
289
|
def parent_conflict_tree
|
290
|
-
parent =
|
290
|
+
parent = parent_tree #: Node?
|
291
291
|
while parent
|
292
292
|
return parent if parent.is_a?(ConflictTree)
|
293
293
|
|
@@ -555,9 +555,9 @@ module RBI
|
|
555
555
|
super()
|
556
556
|
@left_name = left_name
|
557
557
|
@right_name = right_name
|
558
|
-
@left =
|
558
|
+
@left = Tree.new #: Tree
|
559
559
|
@left.parent_tree = self
|
560
|
-
@right =
|
560
|
+
@right = Tree.new #: Tree
|
561
561
|
@right.parent_tree = self
|
562
562
|
end
|
563
563
|
end
|
@@ -53,7 +53,7 @@ module RBI
|
|
53
53
|
def initialize(index)
|
54
54
|
super()
|
55
55
|
@index = index
|
56
|
-
@operations =
|
56
|
+
@operations = [] #: Array[Operation]
|
57
57
|
end
|
58
58
|
|
59
59
|
class << self
|
@@ -107,10 +107,10 @@ module RBI
|
|
107
107
|
when Scope
|
108
108
|
node.empty?
|
109
109
|
when Attr
|
110
|
-
previous =
|
110
|
+
previous = previous #: as Attr
|
111
111
|
node.names == previous.names && node.sigs == previous.sigs
|
112
112
|
when Method
|
113
|
-
previous =
|
113
|
+
previous = previous #: as Method
|
114
114
|
node.params == previous.params && node.sigs == previous.sigs
|
115
115
|
else
|
116
116
|
true
|
@@ -31,7 +31,9 @@ module RBI
|
|
31
31
|
next res if res && res != 0 # we can sort the nodes by their name, let's stop here
|
32
32
|
|
33
33
|
# Finally, if the two nodes have the same rank and the same name or at least one node is anonymous then,
|
34
|
-
|
34
|
+
original_order_a = original_order[a] #: as !nil
|
35
|
+
original_order_b = original_order[b] #: as !nil
|
36
|
+
original_order_a <=> original_order_b # we keep the original order
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -35,7 +35,7 @@ module RBI
|
|
35
35
|
comments = node.comments.dup
|
36
36
|
node.comments.clear
|
37
37
|
|
38
|
-
rbs_sigs =
|
38
|
+
rbs_sigs = [] #: Array[RBSComment]
|
39
39
|
|
40
40
|
comments.each do |comment|
|
41
41
|
case comment
|
@@ -67,7 +67,7 @@ module RBI
|
|
67
67
|
raise Error, "AttrWriter must have exactly one name"
|
68
68
|
end
|
69
69
|
|
70
|
-
name =
|
70
|
+
name = node.names.first #: as !nil
|
71
71
|
sig.params << SigParam.new(name.to_s, RBS::TypeTranslator.translate(attr_type))
|
72
72
|
end
|
73
73
|
|
data/lib/rbi/type.rb
CHANGED
@@ -285,7 +285,7 @@ module RBI
|
|
285
285
|
def initialize(name, *params)
|
286
286
|
super()
|
287
287
|
@name = name
|
288
|
-
@params =
|
288
|
+
@params = params #: Array[Type]
|
289
289
|
end
|
290
290
|
|
291
291
|
# @override
|
@@ -395,9 +395,9 @@ module RBI
|
|
395
395
|
#: -> void
|
396
396
|
def initialize
|
397
397
|
super
|
398
|
-
@proc_params =
|
399
|
-
@proc_returns =
|
400
|
-
@proc_bind =
|
398
|
+
@proc_params = {} #: Hash[Symbol, Type]
|
399
|
+
@proc_returns = Type.void #: Type
|
400
|
+
@proc_bind = nil #: Type?
|
401
401
|
end
|
402
402
|
|
403
403
|
# @override
|
@@ -570,7 +570,7 @@ module RBI
|
|
570
570
|
end.uniq
|
571
571
|
|
572
572
|
if flattened.size == 1
|
573
|
-
|
573
|
+
flattened.first #: as !nil
|
574
574
|
else
|
575
575
|
raise ArgumentError, "RBI::Type.all should have at least 2 types supplied" if flattened.size < 2
|
576
576
|
|
@@ -596,7 +596,7 @@ module RBI
|
|
596
596
|
end
|
597
597
|
end
|
598
598
|
|
599
|
-
is_nilable =
|
599
|
+
is_nilable = false #: bool
|
600
600
|
|
601
601
|
types = flattened.filter_map do |type|
|
602
602
|
case type
|
@@ -632,7 +632,7 @@ module RBI
|
|
632
632
|
raise ArgumentError, "RBI::Type.any should have at least 2 types supplied"
|
633
633
|
end
|
634
634
|
when 1
|
635
|
-
|
635
|
+
types.first #: as !nil
|
636
636
|
else
|
637
637
|
Any.new(types)
|
638
638
|
end
|
@@ -693,7 +693,7 @@ module RBI
|
|
693
693
|
|
694
694
|
#: -> void
|
695
695
|
def initialize
|
696
|
-
@nilable =
|
696
|
+
@nilable = false #: bool
|
697
697
|
end
|
698
698
|
|
699
699
|
# Returns a new type that is `nilable` if it is not already.
|
data/lib/rbi/type_parser.rb
CHANGED
@@ -18,7 +18,7 @@ module RBI
|
|
18
18
|
raise Error, "Expected a type expression, got nothing" if node.statements.body.empty?
|
19
19
|
raise Error, "Expected a single type expression, got `#{node.slice}`" if node.statements.body.size > 1
|
20
20
|
|
21
|
-
node =
|
21
|
+
node = node.statements.body.first #: as !nil
|
22
22
|
parse_node(node)
|
23
23
|
end
|
24
24
|
|
@@ -40,7 +40,9 @@ module RBI
|
|
40
40
|
children = body.body
|
41
41
|
raise Error, "Expected exactly 1 child, got #{children.size}" unless children.size == 1
|
42
42
|
|
43
|
-
parse_node(
|
43
|
+
parse_node(
|
44
|
+
children.first, #: as !nil
|
45
|
+
)
|
44
46
|
else
|
45
47
|
raise Error, "Unexpected node `#{node}`"
|
46
48
|
end
|
@@ -84,7 +86,11 @@ module RBI
|
|
84
86
|
if t_class?(recv)
|
85
87
|
# `T::Class[Foo]` or `::T::Class[Foo]`
|
86
88
|
args = check_arguments_exactly!(node, 1)
|
87
|
-
return Type::Class.new(
|
89
|
+
return Type::Class.new(
|
90
|
+
parse_node(
|
91
|
+
args.first, #: as !nil
|
92
|
+
),
|
93
|
+
)
|
88
94
|
else
|
89
95
|
# `::Foo[Bar]` or `::Foo[Bar, Baz]`
|
90
96
|
args = check_arguments_at_least!(node, 1)
|
@@ -94,11 +100,15 @@ module RBI
|
|
94
100
|
# `T.class_of(Foo)[Bar]`
|
95
101
|
if t_class_of?(recv)
|
96
102
|
type_args = check_arguments_exactly!(recv, 1)
|
97
|
-
type = parse_node(
|
103
|
+
type = parse_node(
|
104
|
+
type_args.first, #: as !nil
|
105
|
+
)
|
98
106
|
raise Error, "Expected a simple type, got `#{type}`" unless type.is_a?(Type::Simple)
|
99
107
|
|
100
108
|
type_param_args = check_arguments_exactly!(node, 1)
|
101
|
-
type_param = parse_node(
|
109
|
+
type_param = parse_node(
|
110
|
+
type_param_args.first, #: as !nil
|
111
|
+
)
|
102
112
|
return Type::ClassOf.new(type, type_param)
|
103
113
|
end
|
104
114
|
end
|
@@ -117,7 +127,9 @@ module RBI
|
|
117
127
|
when :nilable
|
118
128
|
# `T.nilable(Foo)`
|
119
129
|
args = check_arguments_exactly!(node, 1)
|
120
|
-
type = parse_node(
|
130
|
+
type = parse_node(
|
131
|
+
args.first, #: as !nil
|
132
|
+
)
|
121
133
|
Type::Nilable.new(type)
|
122
134
|
when :anything
|
123
135
|
# `T.anything`
|
@@ -142,7 +154,9 @@ module RBI
|
|
142
154
|
when :class_of
|
143
155
|
# `T.class_of(Foo)`
|
144
156
|
args = check_arguments_exactly!(node, 1)
|
145
|
-
type = parse_node(
|
157
|
+
type = parse_node(
|
158
|
+
args.first, #: as !nil
|
159
|
+
)
|
146
160
|
raise Error, "Expected a simple type, got `#{type}`" unless type.is_a?(Type::Simple)
|
147
161
|
|
148
162
|
Type::ClassOf.new(type)
|
@@ -180,7 +194,9 @@ module RBI
|
|
180
194
|
elem_key = elem.key
|
181
195
|
key = case elem_key
|
182
196
|
when Prism::SymbolNode
|
183
|
-
|
197
|
+
elem_key
|
198
|
+
.value #: as !nil
|
199
|
+
.to_sym
|
184
200
|
when Prism::StringNode
|
185
201
|
elem_key.content
|
186
202
|
else
|
@@ -216,14 +232,22 @@ module RBI
|
|
216
232
|
T.unsafe(type).params(**params)
|
217
233
|
when :returns
|
218
234
|
args = check_arguments_exactly!(call, 1)
|
219
|
-
type.returns(
|
235
|
+
type.returns(
|
236
|
+
parse_node(
|
237
|
+
args.first, #: as !nil
|
238
|
+
),
|
239
|
+
)
|
220
240
|
when :void
|
221
241
|
type.void
|
222
242
|
when :proc
|
223
243
|
return type
|
224
244
|
when :bind
|
225
245
|
args = check_arguments_exactly!(call, 1)
|
226
|
-
type.bind(
|
246
|
+
type.bind(
|
247
|
+
parse_node(
|
248
|
+
args.first, #: as !nil
|
249
|
+
),
|
250
|
+
)
|
227
251
|
else
|
228
252
|
raise Error, "Unexpected expression `#{node.slice}`"
|
229
253
|
end
|
@@ -261,8 +285,8 @@ module RBI
|
|
261
285
|
|
262
286
|
#: (Prism::CallNode node) -> Array[Prism::Node]
|
263
287
|
def call_chain(node)
|
264
|
-
call_chain =
|
265
|
-
receiver =
|
288
|
+
call_chain = [node] #: Array[Prism::Node]
|
289
|
+
receiver = node.receiver #: Prism::Node?
|
266
290
|
while receiver
|
267
291
|
call_chain.prepend(receiver)
|
268
292
|
break unless receiver.is_a?(Prism::CallNode)
|
data/lib/rbi/version.rb
CHANGED
data/lib/rbi/visitor.rb
CHANGED
@@ -88,6 +88,8 @@ module RBI
|
|
88
88
|
visit_sig(node)
|
89
89
|
when SigParam
|
90
90
|
visit_sig_param(node)
|
91
|
+
when TEnumValue
|
92
|
+
visit_tenum_value(node)
|
91
93
|
when TStructConst
|
92
94
|
visit_tstruct_const(node)
|
93
95
|
when TStructProp
|
@@ -222,6 +224,9 @@ module RBI
|
|
222
224
|
#: (TEnumBlock node) -> void
|
223
225
|
def visit_tenum_block(node); end
|
224
226
|
|
227
|
+
#: (TEnumValue node) -> void
|
228
|
+
def visit_tenum_value(node); end
|
229
|
+
|
225
230
|
#: (Helper node) -> void
|
226
231
|
def visit_helper(node); end
|
227
232
|
|