rbi 0.2.2 → 0.3.3

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.
@@ -6,7 +6,7 @@ module RBI
6
6
  class Error < RBI::Error; end
7
7
 
8
8
  class << self
9
- sig { params(string: String).returns(Type) }
9
+ #: (String string) -> Type
10
10
  def parse_string(string)
11
11
  result = Prism.parse(string)
12
12
  unless result.success?
@@ -18,11 +18,11 @@ 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 = T.must(node.statements.body.first)
21
+ node = node.statements.body.first #: as !nil
22
22
  parse_node(node)
23
23
  end
24
24
 
25
- sig { params(node: Prism::Node).returns(Type) }
25
+ #: (Prism::Node node) -> Type
26
26
  def parse_node(node)
27
27
  case node
28
28
  when Prism::ConstantReadNode, Prism::ConstantPathNode
@@ -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(T.must(children.first))
43
+ parse_node(
44
+ children.first, #: as !nil
45
+ )
44
46
  else
45
47
  raise Error, "Unexpected node `#{node}`"
46
48
  end
@@ -48,7 +50,7 @@ module RBI
48
50
 
49
51
  private
50
52
 
51
- sig { params(node: T.any(Prism::ConstantReadNode, Prism::ConstantPathNode)).returns(Type) }
53
+ #: ((Prism::ConstantReadNode | Prism::ConstantPathNode) node) -> Type
52
54
  def parse_constant(node)
53
55
  case node
54
56
  when Prism::ConstantReadNode
@@ -65,7 +67,7 @@ module RBI
65
67
  end
66
68
  end
67
69
 
68
- sig { params(node: Prism::CallNode).returns(Type) }
70
+ #: (Prism::CallNode node) -> Type
69
71
  def parse_call(node)
70
72
  recv = node.receiver
71
73
 
@@ -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(parse_node(T.must(args.first)))
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(T.must(type_args.first))
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(T.must(type_param_args.first))
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(T.must(args.first))
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(T.must(args.first))
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)
@@ -167,12 +181,12 @@ module RBI
167
181
  end
168
182
  end
169
183
 
170
- sig { params(node: Prism::ArrayNode).returns(Type) }
184
+ #: (Prism::ArrayNode node) -> Type
171
185
  def parse_tuple(node)
172
186
  T.unsafe(Type).tuple(*node.elements.map { |elem| parse_node(elem) })
173
187
  end
174
188
 
175
- sig { params(node: T.any(Prism::HashNode, Prism::KeywordHashNode)).returns(Type) }
189
+ #: ((Prism::HashNode | Prism::KeywordHashNode) node) -> Type
176
190
  def parse_shape(node)
177
191
  hash = node.elements.map do |elem|
178
192
  raise Error, "Expected key-value pair, got `#{elem.slice}`" unless elem.is_a?(Prism::AssocNode)
@@ -180,7 +194,9 @@ module RBI
180
194
  elem_key = elem.key
181
195
  key = case elem_key
182
196
  when Prism::SymbolNode
183
- T.must(elem_key.value).to_sym
197
+ elem_key
198
+ .value #: as !nil
199
+ .to_sym
184
200
  when Prism::StringNode
185
201
  elem_key.content
186
202
  else
@@ -191,7 +207,7 @@ module RBI
191
207
  T.unsafe(Type).shape(**hash)
192
208
  end
193
209
 
194
- sig { params(node: Prism::CallNode).returns(Type) }
210
+ #: (Prism::CallNode node) -> Type
195
211
  def parse_proc(node)
196
212
  calls = call_chain(node).reverse
197
213
  calls.pop # remove `T.`
@@ -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(parse_node(T.must(args.first)))
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(parse_node(T.must(args.first)))
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
@@ -231,7 +255,7 @@ module RBI
231
255
  type
232
256
  end
233
257
 
234
- sig { params(node: Prism::CallNode, count: Integer).returns(T::Array[Prism::Node]) }
258
+ #: (Prism::CallNode node, Integer count) -> Array[Prism::Node]
235
259
  def check_arguments_exactly!(node, count)
236
260
  args = node.arguments&.arguments || []
237
261
  unless args.size == count
@@ -246,7 +270,7 @@ module RBI
246
270
  args
247
271
  end
248
272
 
249
- sig { params(node: Prism::CallNode, count: Integer).returns(T::Array[Prism::Node]) }
273
+ #: (Prism::CallNode node, Integer count) -> Array[Prism::Node]
250
274
  def check_arguments_at_least!(node, count)
251
275
  args = node.arguments&.arguments || []
252
276
  if args.size < count
@@ -259,10 +283,10 @@ module RBI
259
283
  args
260
284
  end
261
285
 
262
- sig { params(node: Prism::CallNode).returns(T::Array[Prism::Node]) }
286
+ #: (Prism::CallNode node) -> Array[Prism::Node]
263
287
  def call_chain(node)
264
- call_chain = T.let([node], T::Array[Prism::Node])
265
- receiver = T.let(node.receiver, T.nilable(Prism::Node))
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)
@@ -272,7 +296,7 @@ module RBI
272
296
  call_chain
273
297
  end
274
298
 
275
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
299
+ #: (Prism::Node? node) -> bool
276
300
  def t?(node)
277
301
  case node
278
302
  when Prism::ConstantReadNode
@@ -284,26 +308,26 @@ module RBI
284
308
  false
285
309
  end
286
310
 
287
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
311
+ #: (Prism::Node? node) -> bool
288
312
  def t_boolean?(node)
289
313
  return false unless node.is_a?(Prism::ConstantPathNode)
290
314
 
291
315
  t?(node.parent) && node.name == :Boolean
292
316
  end
293
317
 
294
- sig { params(node: Prism::ConstantPathNode).returns(T::Boolean) }
318
+ #: (Prism::ConstantPathNode node) -> bool
295
319
  def t_class?(node)
296
320
  t?(node.parent) && node.name == :Class
297
321
  end
298
322
 
299
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
323
+ #: (Prism::Node? node) -> bool
300
324
  def t_class_of?(node)
301
325
  return false unless node.is_a?(Prism::CallNode)
302
326
 
303
327
  t?(node.receiver) && node.name == :class_of
304
328
  end
305
329
 
306
- sig { params(node: Prism::CallNode).returns(T::Boolean) }
330
+ #: (Prism::CallNode node) -> bool
307
331
  def t_proc?(node)
308
332
  chain = call_chain(node)
309
333
  return false if chain.size < 2
@@ -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
- sig { params(node: Type).void }
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
- sig { params(type: Type::All).void }
55
+ #: (Type::All type) -> void
58
56
  def visit_all(type); end
59
57
 
60
- sig { params(type: Type::Any).void }
58
+ #: (Type::Any type) -> void
61
59
  def visit_any(type); end
62
60
 
63
- sig { params(type: Type::Anything).void }
61
+ #: (Type::Anything type) -> void
64
62
  def visit_anything(type); end
65
63
 
66
- sig { params(type: Type::AttachedClass).void }
64
+ #: (Type::AttachedClass type) -> void
67
65
  def visit_attached_class(type); end
68
66
 
69
- sig { params(type: Type::Boolean).void }
67
+ #: (Type::Boolean type) -> void
70
68
  def visit_boolean(type); end
71
69
 
72
- sig { params(type: Type::Class).void }
70
+ #: (Type::Class type) -> void
73
71
  def visit_class(type); end
74
72
 
75
- sig { params(type: Type::ClassOf).void }
73
+ #: (Type::ClassOf type) -> void
76
74
  def visit_class_of(type); end
77
75
 
78
- sig { params(type: Type::Generic).void }
76
+ #: (Type::Generic type) -> void
79
77
  def visit_generic(type); end
80
78
 
81
- sig { params(type: Type::Nilable).void }
79
+ #: (Type::Nilable type) -> void
82
80
  def visit_nilable(type); end
83
81
 
84
- sig { params(type: Type::Simple).void }
82
+ #: (Type::Simple type) -> void
85
83
  def visit_simple(type); end
86
84
 
87
- sig { params(type: Type::NoReturn).void }
85
+ #: (Type::NoReturn type) -> void
88
86
  def visit_no_return(type); end
89
87
 
90
- sig { params(type: Type::Proc).void }
88
+ #: (Type::Proc type) -> void
91
89
  def visit_proc(type); end
92
90
 
93
- sig { params(type: Type::SelfType).void }
91
+ #: (Type::SelfType type) -> void
94
92
  def visit_self_type(type); end
95
93
 
96
- sig { params(type: Type::Void).void }
94
+ #: (Type::Void type) -> void
97
95
  def visit_void(type); end
98
96
 
99
- sig { params(type: Type::Shape).void }
97
+ #: (Type::Shape type) -> void
100
98
  def visit_shape(type); end
101
99
 
102
- sig { params(type: Type::Tuple).void }
100
+ #: (Type::Tuple type) -> void
103
101
  def visit_tuple(type); end
104
102
 
105
- sig { params(type: Type::TypeParameter).void }
103
+ #: (Type::TypeParameter type) -> void
106
104
  def visit_type_parameter(type); end
107
105
 
108
- sig { params(type: Type::Untyped).void }
106
+ #: (Type::Untyped type) -> void
109
107
  def visit_untyped(type); end
110
108
  end
111
109
  end
data/lib/rbi/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RBI
5
- VERSION = "0.2.2"
5
+ VERSION = "0.3.3"
6
6
  end
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
- sig { params(node: T.nilable(Node)).void }
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
@@ -87,6 +88,8 @@ module RBI
87
88
  visit_sig(node)
88
89
  when SigParam
89
90
  visit_sig_param(node)
91
+ when TEnumValue
92
+ visit_tenum_value(node)
90
93
  when TStructConst
91
94
  visit_tstruct_const(node)
92
95
  when TStructProp
@@ -104,142 +107,148 @@ module RBI
104
107
  end
105
108
  end
106
109
 
107
- sig { params(nodes: T::Array[Node]).void }
110
+ #: (Array[Node] nodes) -> void
108
111
  def visit_all(nodes)
109
112
  nodes.each { |node| visit(node) }
110
113
  end
111
114
 
112
- sig { params(file: File).void }
115
+ #: (File file) -> void
113
116
  def visit_file(file)
114
117
  visit(file.root)
115
118
  end
116
119
 
117
120
  private
118
121
 
119
- sig { params(node: Comment).void }
122
+ #: (Comment node) -> void
120
123
  def visit_comment(node); end
121
124
 
122
- sig { params(node: BlankLine).void }
125
+ #: (RBSComment node) -> void
126
+ def visit_rbs_comment(node); end
127
+
128
+ #: (BlankLine node) -> void
123
129
  def visit_blank_line(node); end
124
130
 
125
- sig { params(node: Module).void }
131
+ #: (Module node) -> void
126
132
  def visit_module(node); end
127
133
 
128
- sig { params(node: Class).void }
134
+ #: (Class node) -> void
129
135
  def visit_class(node); end
130
136
 
131
- sig { params(node: SingletonClass).void }
137
+ #: (SingletonClass node) -> void
132
138
  def visit_singleton_class(node); end
133
139
 
134
- sig { params(node: Struct).void }
140
+ #: (Struct node) -> void
135
141
  def visit_struct(node); end
136
142
 
137
- sig { params(node: Tree).void }
143
+ #: (Tree node) -> void
138
144
  def visit_tree(node); end
139
145
 
140
- sig { params(node: Const).void }
146
+ #: (Const node) -> void
141
147
  def visit_const(node); end
142
148
 
143
- sig { params(node: AttrAccessor).void }
149
+ #: (AttrAccessor node) -> void
144
150
  def visit_attr_accessor(node); end
145
151
 
146
- sig { params(node: AttrReader).void }
152
+ #: (AttrReader node) -> void
147
153
  def visit_attr_reader(node); end
148
154
 
149
- sig { params(node: AttrWriter).void }
155
+ #: (AttrWriter node) -> void
150
156
  def visit_attr_writer(node); end
151
157
 
152
- sig { params(node: Method).void }
158
+ #: (Method node) -> void
153
159
  def visit_method(node); end
154
160
 
155
- sig { params(node: ReqParam).void }
161
+ #: (ReqParam node) -> void
156
162
  def visit_req_param(node); end
157
163
 
158
- sig { params(node: OptParam).void }
164
+ #: (OptParam node) -> void
159
165
  def visit_opt_param(node); end
160
166
 
161
- sig { params(node: RestParam).void }
167
+ #: (RestParam node) -> void
162
168
  def visit_rest_param(node); end
163
169
 
164
- sig { params(node: KwParam).void }
170
+ #: (KwParam node) -> void
165
171
  def visit_kw_param(node); end
166
172
 
167
- sig { params(node: KwOptParam).void }
173
+ #: (KwOptParam node) -> void
168
174
  def visit_kw_opt_param(node); end
169
175
 
170
- sig { params(node: KwRestParam).void }
176
+ #: (KwRestParam node) -> void
171
177
  def visit_kw_rest_param(node); end
172
178
 
173
- sig { params(node: BlockParam).void }
179
+ #: (BlockParam node) -> void
174
180
  def visit_block_param(node); end
175
181
 
176
- sig { params(node: Include).void }
182
+ #: (Include node) -> void
177
183
  def visit_include(node); end
178
184
 
179
- sig { params(node: Extend).void }
185
+ #: (Extend node) -> void
180
186
  def visit_extend(node); end
181
187
 
182
- sig { params(node: Public).void }
188
+ #: (Public node) -> void
183
189
  def visit_public(node); end
184
190
 
185
- sig { params(node: Protected).void }
191
+ #: (Protected node) -> void
186
192
  def visit_protected(node); end
187
193
 
188
- sig { params(node: Private).void }
194
+ #: (Private node) -> void
189
195
  def visit_private(node); end
190
196
 
191
- sig { params(node: Send).void }
197
+ #: (Send node) -> void
192
198
  def visit_send(node); end
193
199
 
194
- sig { params(node: Arg).void }
200
+ #: (Arg node) -> void
195
201
  def visit_arg(node); end
196
202
 
197
- sig { params(node: KwArg).void }
203
+ #: (KwArg node) -> void
198
204
  def visit_kw_arg(node); end
199
205
 
200
- sig { params(node: Sig).void }
206
+ #: (Sig node) -> void
201
207
  def visit_sig(node); end
202
208
 
203
- sig { params(node: SigParam).void }
209
+ #: (SigParam node) -> void
204
210
  def visit_sig_param(node); end
205
211
 
206
- sig { params(node: TStruct).void }
212
+ #: (TStruct node) -> void
207
213
  def visit_tstruct(node); end
208
214
 
209
- sig { params(node: TStructConst).void }
215
+ #: (TStructConst node) -> void
210
216
  def visit_tstruct_const(node); end
211
217
 
212
- sig { params(node: TStructProp).void }
218
+ #: (TStructProp node) -> void
213
219
  def visit_tstruct_prop(node); end
214
220
 
215
- sig { params(node: TEnum).void }
221
+ #: (TEnum node) -> void
216
222
  def visit_tenum(node); end
217
223
 
218
- sig { params(node: TEnumBlock).void }
224
+ #: (TEnumBlock node) -> void
219
225
  def visit_tenum_block(node); end
220
226
 
221
- sig { params(node: Helper).void }
227
+ #: (TEnumValue node) -> void
228
+ def visit_tenum_value(node); end
229
+
230
+ #: (Helper node) -> void
222
231
  def visit_helper(node); end
223
232
 
224
- sig { params(node: TypeMember).void }
233
+ #: (TypeMember node) -> void
225
234
  def visit_type_member(node); end
226
235
 
227
- sig { params(node: MixesInClassMethods).void }
236
+ #: (MixesInClassMethods node) -> void
228
237
  def visit_mixes_in_class_methods(node); end
229
238
 
230
- sig { params(node: RequiresAncestor).void }
239
+ #: (RequiresAncestor node) -> void
231
240
  def visit_requires_ancestor(node); end
232
241
 
233
- sig { params(node: Group).void }
242
+ #: (Group node) -> void
234
243
  def visit_group(node); end
235
244
 
236
- sig { params(node: VisibilityGroup).void }
245
+ #: (VisibilityGroup node) -> void
237
246
  def visit_visibility_group(node); end
238
247
 
239
- sig { params(node: ConflictTree).void }
248
+ #: (ConflictTree node) -> void
240
249
  def visit_conflict_tree(node); end
241
250
 
242
- sig { params(node: ScopeConflict).void }
251
+ #: (ScopeConflict node) -> void
243
252
  def visit_scope_conflict(node); end
244
253
  end
245
254
  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"