rbi 0.2.4 → 0.3.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/Gemfile +1 -1
- data/lib/rbi/formatter.rb +5 -16
- data/lib/rbi/index.rb +37 -41
- data/lib/rbi/loc.rb +6 -18
- data/lib/rbi/model.rb +207 -575
- data/lib/rbi/parser.rb +64 -63
- data/lib/rbi/printer.rb +135 -101
- data/lib/rbi/rbs/method_type_translator.rb +120 -0
- data/lib/rbi/rbs/type_translator.rb +181 -0
- data/lib/rbi/rbs_printer.rb +178 -116
- data/lib/rbi/rewriters/add_sig_templates.rb +7 -10
- data/lib/rbi/rewriters/annotate.rb +6 -9
- data/lib/rbi/rewriters/attr_to_methods.rb +16 -32
- data/lib/rbi/rewriters/deannotate.rb +5 -8
- data/lib/rbi/rewriters/filter_versions.rb +7 -12
- data/lib/rbi/rewriters/flatten_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/flatten_visibilities.rb +4 -7
- data/lib/rbi/rewriters/group_nodes.rb +6 -11
- data/lib/rbi/rewriters/merge_trees.rb +74 -122
- data/lib/rbi/rewriters/nest_non_public_members.rb +5 -10
- data/lib/rbi/rewriters/nest_singleton_methods.rb +3 -6
- data/lib/rbi/rewriters/nest_top_level_members.rb +4 -7
- data/lib/rbi/rewriters/remove_known_definitions.rb +10 -20
- data/lib/rbi/rewriters/sort_nodes.rb +7 -10
- data/lib/rbi/rewriters/translate_rbs_sigs.rb +87 -0
- data/lib/rbi/type.rb +127 -129
- data/lib/rbi/type_parser.rb +15 -15
- data/lib/rbi/type_visitor.rb +19 -21
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi/visitor.rb +50 -46
- data/lib/rbi.rb +7 -3
- data/rbi/rbi.rbi +4686 -0
- metadata +21 -3
data/lib/rbi/type_parser.rb
CHANGED
@@ -6,7 +6,7 @@ module RBI
|
|
6
6
|
class Error < RBI::Error; end
|
7
7
|
|
8
8
|
class << self
|
9
|
-
|
9
|
+
#: (String string) -> Type
|
10
10
|
def parse_string(string)
|
11
11
|
result = Prism.parse(string)
|
12
12
|
unless result.success?
|
@@ -22,7 +22,7 @@ module RBI
|
|
22
22
|
parse_node(node)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
#: (Prism::Node node) -> Type
|
26
26
|
def parse_node(node)
|
27
27
|
case node
|
28
28
|
when Prism::ConstantReadNode, Prism::ConstantPathNode
|
@@ -48,7 +48,7 @@ module RBI
|
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
-
|
51
|
+
#: ((Prism::ConstantReadNode | Prism::ConstantPathNode) node) -> Type
|
52
52
|
def parse_constant(node)
|
53
53
|
case node
|
54
54
|
when Prism::ConstantReadNode
|
@@ -65,7 +65,7 @@ module RBI
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
#: (Prism::CallNode node) -> Type
|
69
69
|
def parse_call(node)
|
70
70
|
recv = node.receiver
|
71
71
|
|
@@ -167,12 +167,12 @@ module RBI
|
|
167
167
|
end
|
168
168
|
end
|
169
169
|
|
170
|
-
|
170
|
+
#: (Prism::ArrayNode node) -> Type
|
171
171
|
def parse_tuple(node)
|
172
172
|
T.unsafe(Type).tuple(*node.elements.map { |elem| parse_node(elem) })
|
173
173
|
end
|
174
174
|
|
175
|
-
|
175
|
+
#: ((Prism::HashNode | Prism::KeywordHashNode) node) -> Type
|
176
176
|
def parse_shape(node)
|
177
177
|
hash = node.elements.map do |elem|
|
178
178
|
raise Error, "Expected key-value pair, got `#{elem.slice}`" unless elem.is_a?(Prism::AssocNode)
|
@@ -191,7 +191,7 @@ module RBI
|
|
191
191
|
T.unsafe(Type).shape(**hash)
|
192
192
|
end
|
193
193
|
|
194
|
-
|
194
|
+
#: (Prism::CallNode node) -> Type
|
195
195
|
def parse_proc(node)
|
196
196
|
calls = call_chain(node).reverse
|
197
197
|
calls.pop # remove `T.`
|
@@ -231,7 +231,7 @@ module RBI
|
|
231
231
|
type
|
232
232
|
end
|
233
233
|
|
234
|
-
|
234
|
+
#: (Prism::CallNode node, Integer count) -> Array[Prism::Node]
|
235
235
|
def check_arguments_exactly!(node, count)
|
236
236
|
args = node.arguments&.arguments || []
|
237
237
|
unless args.size == count
|
@@ -246,7 +246,7 @@ module RBI
|
|
246
246
|
args
|
247
247
|
end
|
248
248
|
|
249
|
-
|
249
|
+
#: (Prism::CallNode node, Integer count) -> Array[Prism::Node]
|
250
250
|
def check_arguments_at_least!(node, count)
|
251
251
|
args = node.arguments&.arguments || []
|
252
252
|
if args.size < count
|
@@ -259,7 +259,7 @@ module RBI
|
|
259
259
|
args
|
260
260
|
end
|
261
261
|
|
262
|
-
|
262
|
+
#: (Prism::CallNode node) -> Array[Prism::Node]
|
263
263
|
def call_chain(node)
|
264
264
|
call_chain = T.let([node], T::Array[Prism::Node])
|
265
265
|
receiver = T.let(node.receiver, T.nilable(Prism::Node))
|
@@ -272,7 +272,7 @@ module RBI
|
|
272
272
|
call_chain
|
273
273
|
end
|
274
274
|
|
275
|
-
|
275
|
+
#: (Prism::Node? node) -> bool
|
276
276
|
def t?(node)
|
277
277
|
case node
|
278
278
|
when Prism::ConstantReadNode
|
@@ -284,26 +284,26 @@ module RBI
|
|
284
284
|
false
|
285
285
|
end
|
286
286
|
|
287
|
-
|
287
|
+
#: (Prism::Node? node) -> bool
|
288
288
|
def t_boolean?(node)
|
289
289
|
return false unless node.is_a?(Prism::ConstantPathNode)
|
290
290
|
|
291
291
|
t?(node.parent) && node.name == :Boolean
|
292
292
|
end
|
293
293
|
|
294
|
-
|
294
|
+
#: (Prism::ConstantPathNode node) -> bool
|
295
295
|
def t_class?(node)
|
296
296
|
t?(node.parent) && node.name == :Class
|
297
297
|
end
|
298
298
|
|
299
|
-
|
299
|
+
#: (Prism::Node? node) -> bool
|
300
300
|
def t_class_of?(node)
|
301
301
|
return false unless node.is_a?(Prism::CallNode)
|
302
302
|
|
303
303
|
t?(node.receiver) && node.name == :class_of
|
304
304
|
end
|
305
305
|
|
306
|
-
|
306
|
+
#: (Prism::CallNode node) -> bool
|
307
307
|
def t_proc?(node)
|
308
308
|
chain = call_chain(node)
|
309
309
|
return false if chain.size < 2
|
data/lib/rbi/type_visitor.rb
CHANGED
@@ -4,11 +4,9 @@
|
|
4
4
|
module RBI
|
5
5
|
class Type
|
6
6
|
class Visitor
|
7
|
-
extend T::Sig
|
8
|
-
|
9
7
|
class Error < RBI::Error; end
|
10
8
|
|
11
|
-
|
9
|
+
#: (Type node) -> void
|
12
10
|
def visit(node)
|
13
11
|
case node
|
14
12
|
when Type::Simple
|
@@ -54,58 +52,58 @@ module RBI
|
|
54
52
|
|
55
53
|
private
|
56
54
|
|
57
|
-
|
55
|
+
#: (Type::All type) -> void
|
58
56
|
def visit_all(type); end
|
59
57
|
|
60
|
-
|
58
|
+
#: (Type::Any type) -> void
|
61
59
|
def visit_any(type); end
|
62
60
|
|
63
|
-
|
61
|
+
#: (Type::Anything type) -> void
|
64
62
|
def visit_anything(type); end
|
65
63
|
|
66
|
-
|
64
|
+
#: (Type::AttachedClass type) -> void
|
67
65
|
def visit_attached_class(type); end
|
68
66
|
|
69
|
-
|
67
|
+
#: (Type::Boolean type) -> void
|
70
68
|
def visit_boolean(type); end
|
71
69
|
|
72
|
-
|
70
|
+
#: (Type::Class type) -> void
|
73
71
|
def visit_class(type); end
|
74
72
|
|
75
|
-
|
73
|
+
#: (Type::ClassOf type) -> void
|
76
74
|
def visit_class_of(type); end
|
77
75
|
|
78
|
-
|
76
|
+
#: (Type::Generic type) -> void
|
79
77
|
def visit_generic(type); end
|
80
78
|
|
81
|
-
|
79
|
+
#: (Type::Nilable type) -> void
|
82
80
|
def visit_nilable(type); end
|
83
81
|
|
84
|
-
|
82
|
+
#: (Type::Simple type) -> void
|
85
83
|
def visit_simple(type); end
|
86
84
|
|
87
|
-
|
85
|
+
#: (Type::NoReturn type) -> void
|
88
86
|
def visit_no_return(type); end
|
89
87
|
|
90
|
-
|
88
|
+
#: (Type::Proc type) -> void
|
91
89
|
def visit_proc(type); end
|
92
90
|
|
93
|
-
|
91
|
+
#: (Type::SelfType type) -> void
|
94
92
|
def visit_self_type(type); end
|
95
93
|
|
96
|
-
|
94
|
+
#: (Type::Void type) -> void
|
97
95
|
def visit_void(type); end
|
98
96
|
|
99
|
-
|
97
|
+
#: (Type::Shape type) -> void
|
100
98
|
def visit_shape(type); end
|
101
99
|
|
102
|
-
|
100
|
+
#: (Type::Tuple type) -> void
|
103
101
|
def visit_tuple(type); end
|
104
102
|
|
105
|
-
|
103
|
+
#: (Type::TypeParameter type) -> void
|
106
104
|
def visit_type_parameter(type); end
|
107
105
|
|
108
|
-
|
106
|
+
#: (Type::Untyped type) -> void
|
109
107
|
def visit_untyped(type); end
|
110
108
|
end
|
111
109
|
end
|
data/lib/rbi/version.rb
CHANGED
data/lib/rbi/visitor.rb
CHANGED
@@ -6,17 +6,18 @@ module RBI
|
|
6
6
|
|
7
7
|
class Visitor
|
8
8
|
extend T::Helpers
|
9
|
-
extend T::Sig
|
10
9
|
|
11
10
|
abstract!
|
12
11
|
|
13
|
-
|
12
|
+
#: (Node? node) -> void
|
14
13
|
def visit(node)
|
15
14
|
return unless node
|
16
15
|
|
17
16
|
case node
|
18
17
|
when BlankLine
|
19
18
|
visit_blank_line(node)
|
19
|
+
when RBSComment
|
20
|
+
visit_rbs_comment(node)
|
20
21
|
when Comment
|
21
22
|
visit_comment(node)
|
22
23
|
when TEnum
|
@@ -104,142 +105,145 @@ module RBI
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
|
108
|
+
#: (Array[Node] nodes) -> void
|
108
109
|
def visit_all(nodes)
|
109
110
|
nodes.each { |node| visit(node) }
|
110
111
|
end
|
111
112
|
|
112
|
-
|
113
|
+
#: (File file) -> void
|
113
114
|
def visit_file(file)
|
114
115
|
visit(file.root)
|
115
116
|
end
|
116
117
|
|
117
118
|
private
|
118
119
|
|
119
|
-
|
120
|
+
#: (Comment node) -> void
|
120
121
|
def visit_comment(node); end
|
121
122
|
|
122
|
-
|
123
|
+
#: (RBSComment node) -> void
|
124
|
+
def visit_rbs_comment(node); end
|
125
|
+
|
126
|
+
#: (BlankLine node) -> void
|
123
127
|
def visit_blank_line(node); end
|
124
128
|
|
125
|
-
|
129
|
+
#: (Module node) -> void
|
126
130
|
def visit_module(node); end
|
127
131
|
|
128
|
-
|
132
|
+
#: (Class node) -> void
|
129
133
|
def visit_class(node); end
|
130
134
|
|
131
|
-
|
135
|
+
#: (SingletonClass node) -> void
|
132
136
|
def visit_singleton_class(node); end
|
133
137
|
|
134
|
-
|
138
|
+
#: (Struct node) -> void
|
135
139
|
def visit_struct(node); end
|
136
140
|
|
137
|
-
|
141
|
+
#: (Tree node) -> void
|
138
142
|
def visit_tree(node); end
|
139
143
|
|
140
|
-
|
144
|
+
#: (Const node) -> void
|
141
145
|
def visit_const(node); end
|
142
146
|
|
143
|
-
|
147
|
+
#: (AttrAccessor node) -> void
|
144
148
|
def visit_attr_accessor(node); end
|
145
149
|
|
146
|
-
|
150
|
+
#: (AttrReader node) -> void
|
147
151
|
def visit_attr_reader(node); end
|
148
152
|
|
149
|
-
|
153
|
+
#: (AttrWriter node) -> void
|
150
154
|
def visit_attr_writer(node); end
|
151
155
|
|
152
|
-
|
156
|
+
#: (Method node) -> void
|
153
157
|
def visit_method(node); end
|
154
158
|
|
155
|
-
|
159
|
+
#: (ReqParam node) -> void
|
156
160
|
def visit_req_param(node); end
|
157
161
|
|
158
|
-
|
162
|
+
#: (OptParam node) -> void
|
159
163
|
def visit_opt_param(node); end
|
160
164
|
|
161
|
-
|
165
|
+
#: (RestParam node) -> void
|
162
166
|
def visit_rest_param(node); end
|
163
167
|
|
164
|
-
|
168
|
+
#: (KwParam node) -> void
|
165
169
|
def visit_kw_param(node); end
|
166
170
|
|
167
|
-
|
171
|
+
#: (KwOptParam node) -> void
|
168
172
|
def visit_kw_opt_param(node); end
|
169
173
|
|
170
|
-
|
174
|
+
#: (KwRestParam node) -> void
|
171
175
|
def visit_kw_rest_param(node); end
|
172
176
|
|
173
|
-
|
177
|
+
#: (BlockParam node) -> void
|
174
178
|
def visit_block_param(node); end
|
175
179
|
|
176
|
-
|
180
|
+
#: (Include node) -> void
|
177
181
|
def visit_include(node); end
|
178
182
|
|
179
|
-
|
183
|
+
#: (Extend node) -> void
|
180
184
|
def visit_extend(node); end
|
181
185
|
|
182
|
-
|
186
|
+
#: (Public node) -> void
|
183
187
|
def visit_public(node); end
|
184
188
|
|
185
|
-
|
189
|
+
#: (Protected node) -> void
|
186
190
|
def visit_protected(node); end
|
187
191
|
|
188
|
-
|
192
|
+
#: (Private node) -> void
|
189
193
|
def visit_private(node); end
|
190
194
|
|
191
|
-
|
195
|
+
#: (Send node) -> void
|
192
196
|
def visit_send(node); end
|
193
197
|
|
194
|
-
|
198
|
+
#: (Arg node) -> void
|
195
199
|
def visit_arg(node); end
|
196
200
|
|
197
|
-
|
201
|
+
#: (KwArg node) -> void
|
198
202
|
def visit_kw_arg(node); end
|
199
203
|
|
200
|
-
|
204
|
+
#: (Sig node) -> void
|
201
205
|
def visit_sig(node); end
|
202
206
|
|
203
|
-
|
207
|
+
#: (SigParam node) -> void
|
204
208
|
def visit_sig_param(node); end
|
205
209
|
|
206
|
-
|
210
|
+
#: (TStruct node) -> void
|
207
211
|
def visit_tstruct(node); end
|
208
212
|
|
209
|
-
|
213
|
+
#: (TStructConst node) -> void
|
210
214
|
def visit_tstruct_const(node); end
|
211
215
|
|
212
|
-
|
216
|
+
#: (TStructProp node) -> void
|
213
217
|
def visit_tstruct_prop(node); end
|
214
218
|
|
215
|
-
|
219
|
+
#: (TEnum node) -> void
|
216
220
|
def visit_tenum(node); end
|
217
221
|
|
218
|
-
|
222
|
+
#: (TEnumBlock node) -> void
|
219
223
|
def visit_tenum_block(node); end
|
220
224
|
|
221
|
-
|
225
|
+
#: (Helper node) -> void
|
222
226
|
def visit_helper(node); end
|
223
227
|
|
224
|
-
|
228
|
+
#: (TypeMember node) -> void
|
225
229
|
def visit_type_member(node); end
|
226
230
|
|
227
|
-
|
231
|
+
#: (MixesInClassMethods node) -> void
|
228
232
|
def visit_mixes_in_class_methods(node); end
|
229
233
|
|
230
|
-
|
234
|
+
#: (RequiresAncestor node) -> void
|
231
235
|
def visit_requires_ancestor(node); end
|
232
236
|
|
233
|
-
|
237
|
+
#: (Group node) -> void
|
234
238
|
def visit_group(node); end
|
235
239
|
|
236
|
-
|
240
|
+
#: (VisibilityGroup node) -> void
|
237
241
|
def visit_visibility_group(node); end
|
238
242
|
|
239
|
-
|
243
|
+
#: (ConflictTree node) -> void
|
240
244
|
def visit_conflict_tree(node); end
|
241
245
|
|
242
|
-
|
246
|
+
#: (ScopeConflict node) -> void
|
243
247
|
def visit_scope_conflict(node); end
|
244
248
|
end
|
245
249
|
end
|
data/lib/rbi.rb
CHANGED
@@ -3,11 +3,10 @@
|
|
3
3
|
|
4
4
|
require "sorbet-runtime"
|
5
5
|
require "stringio"
|
6
|
+
require "rbs"
|
6
7
|
|
7
8
|
module RBI
|
8
|
-
class Error < StandardError
|
9
|
-
extend T::Sig
|
10
|
-
end
|
9
|
+
class Error < StandardError; end
|
11
10
|
end
|
12
11
|
|
13
12
|
require "rbi/loc"
|
@@ -15,6 +14,10 @@ require "rbi/model"
|
|
15
14
|
require "rbi/type"
|
16
15
|
require "rbi/visitor"
|
17
16
|
require "rbi/index"
|
17
|
+
|
18
|
+
require "rbi/rbs/method_type_translator"
|
19
|
+
require "rbi/rbs/type_translator"
|
20
|
+
|
18
21
|
require "rbi/rewriters/add_sig_templates"
|
19
22
|
require "rbi/rewriters/annotate"
|
20
23
|
require "rbi/rewriters/deannotate"
|
@@ -29,6 +32,7 @@ require "rbi/rewriters/group_nodes"
|
|
29
32
|
require "rbi/rewriters/remove_known_definitions"
|
30
33
|
require "rbi/rewriters/attr_to_methods"
|
31
34
|
require "rbi/rewriters/sort_nodes"
|
35
|
+
require "rbi/rewriters/translate_rbs_sigs"
|
32
36
|
require "rbi/parser"
|
33
37
|
require "rbi/type_parser"
|
34
38
|
require "rbi/type_visitor"
|