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.
@@ -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?
@@ -22,7 +22,7 @@ module RBI
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
@@ -48,7 +48,7 @@ module RBI
48
48
 
49
49
  private
50
50
 
51
- sig { params(node: T.any(Prism::ConstantReadNode, Prism::ConstantPathNode)).returns(Type) }
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
- sig { params(node: Prism::CallNode).returns(Type) }
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
- sig { params(node: Prism::ArrayNode).returns(Type) }
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
- sig { params(node: T.any(Prism::HashNode, Prism::KeywordHashNode)).returns(Type) }
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
- sig { params(node: Prism::CallNode).returns(Type) }
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
- sig { params(node: Prism::CallNode, count: Integer).returns(T::Array[Prism::Node]) }
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
- sig { params(node: Prism::CallNode, count: Integer).returns(T::Array[Prism::Node]) }
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
- sig { params(node: Prism::CallNode).returns(T::Array[Prism::Node]) }
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
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
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
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
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
- sig { params(node: Prism::ConstantPathNode).returns(T::Boolean) }
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
- sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
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
- sig { params(node: Prism::CallNode).returns(T::Boolean) }
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
@@ -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.4"
5
+ VERSION = "0.3.0"
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
@@ -104,142 +105,145 @@ module RBI
104
105
  end
105
106
  end
106
107
 
107
- sig { params(nodes: T::Array[Node]).void }
108
+ #: (Array[Node] nodes) -> void
108
109
  def visit_all(nodes)
109
110
  nodes.each { |node| visit(node) }
110
111
  end
111
112
 
112
- sig { params(file: File).void }
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
- sig { params(node: Comment).void }
120
+ #: (Comment node) -> void
120
121
  def visit_comment(node); end
121
122
 
122
- sig { params(node: BlankLine).void }
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
- sig { params(node: Module).void }
129
+ #: (Module node) -> void
126
130
  def visit_module(node); end
127
131
 
128
- sig { params(node: Class).void }
132
+ #: (Class node) -> void
129
133
  def visit_class(node); end
130
134
 
131
- sig { params(node: SingletonClass).void }
135
+ #: (SingletonClass node) -> void
132
136
  def visit_singleton_class(node); end
133
137
 
134
- sig { params(node: Struct).void }
138
+ #: (Struct node) -> void
135
139
  def visit_struct(node); end
136
140
 
137
- sig { params(node: Tree).void }
141
+ #: (Tree node) -> void
138
142
  def visit_tree(node); end
139
143
 
140
- sig { params(node: Const).void }
144
+ #: (Const node) -> void
141
145
  def visit_const(node); end
142
146
 
143
- sig { params(node: AttrAccessor).void }
147
+ #: (AttrAccessor node) -> void
144
148
  def visit_attr_accessor(node); end
145
149
 
146
- sig { params(node: AttrReader).void }
150
+ #: (AttrReader node) -> void
147
151
  def visit_attr_reader(node); end
148
152
 
149
- sig { params(node: AttrWriter).void }
153
+ #: (AttrWriter node) -> void
150
154
  def visit_attr_writer(node); end
151
155
 
152
- sig { params(node: Method).void }
156
+ #: (Method node) -> void
153
157
  def visit_method(node); end
154
158
 
155
- sig { params(node: ReqParam).void }
159
+ #: (ReqParam node) -> void
156
160
  def visit_req_param(node); end
157
161
 
158
- sig { params(node: OptParam).void }
162
+ #: (OptParam node) -> void
159
163
  def visit_opt_param(node); end
160
164
 
161
- sig { params(node: RestParam).void }
165
+ #: (RestParam node) -> void
162
166
  def visit_rest_param(node); end
163
167
 
164
- sig { params(node: KwParam).void }
168
+ #: (KwParam node) -> void
165
169
  def visit_kw_param(node); end
166
170
 
167
- sig { params(node: KwOptParam).void }
171
+ #: (KwOptParam node) -> void
168
172
  def visit_kw_opt_param(node); end
169
173
 
170
- sig { params(node: KwRestParam).void }
174
+ #: (KwRestParam node) -> void
171
175
  def visit_kw_rest_param(node); end
172
176
 
173
- sig { params(node: BlockParam).void }
177
+ #: (BlockParam node) -> void
174
178
  def visit_block_param(node); end
175
179
 
176
- sig { params(node: Include).void }
180
+ #: (Include node) -> void
177
181
  def visit_include(node); end
178
182
 
179
- sig { params(node: Extend).void }
183
+ #: (Extend node) -> void
180
184
  def visit_extend(node); end
181
185
 
182
- sig { params(node: Public).void }
186
+ #: (Public node) -> void
183
187
  def visit_public(node); end
184
188
 
185
- sig { params(node: Protected).void }
189
+ #: (Protected node) -> void
186
190
  def visit_protected(node); end
187
191
 
188
- sig { params(node: Private).void }
192
+ #: (Private node) -> void
189
193
  def visit_private(node); end
190
194
 
191
- sig { params(node: Send).void }
195
+ #: (Send node) -> void
192
196
  def visit_send(node); end
193
197
 
194
- sig { params(node: Arg).void }
198
+ #: (Arg node) -> void
195
199
  def visit_arg(node); end
196
200
 
197
- sig { params(node: KwArg).void }
201
+ #: (KwArg node) -> void
198
202
  def visit_kw_arg(node); end
199
203
 
200
- sig { params(node: Sig).void }
204
+ #: (Sig node) -> void
201
205
  def visit_sig(node); end
202
206
 
203
- sig { params(node: SigParam).void }
207
+ #: (SigParam node) -> void
204
208
  def visit_sig_param(node); end
205
209
 
206
- sig { params(node: TStruct).void }
210
+ #: (TStruct node) -> void
207
211
  def visit_tstruct(node); end
208
212
 
209
- sig { params(node: TStructConst).void }
213
+ #: (TStructConst node) -> void
210
214
  def visit_tstruct_const(node); end
211
215
 
212
- sig { params(node: TStructProp).void }
216
+ #: (TStructProp node) -> void
213
217
  def visit_tstruct_prop(node); end
214
218
 
215
- sig { params(node: TEnum).void }
219
+ #: (TEnum node) -> void
216
220
  def visit_tenum(node); end
217
221
 
218
- sig { params(node: TEnumBlock).void }
222
+ #: (TEnumBlock node) -> void
219
223
  def visit_tenum_block(node); end
220
224
 
221
- sig { params(node: Helper).void }
225
+ #: (Helper node) -> void
222
226
  def visit_helper(node); end
223
227
 
224
- sig { params(node: TypeMember).void }
228
+ #: (TypeMember node) -> void
225
229
  def visit_type_member(node); end
226
230
 
227
- sig { params(node: MixesInClassMethods).void }
231
+ #: (MixesInClassMethods node) -> void
228
232
  def visit_mixes_in_class_methods(node); end
229
233
 
230
- sig { params(node: RequiresAncestor).void }
234
+ #: (RequiresAncestor node) -> void
231
235
  def visit_requires_ancestor(node); end
232
236
 
233
- sig { params(node: Group).void }
237
+ #: (Group node) -> void
234
238
  def visit_group(node); end
235
239
 
236
- sig { params(node: VisibilityGroup).void }
240
+ #: (VisibilityGroup node) -> void
237
241
  def visit_visibility_group(node); end
238
242
 
239
- sig { params(node: ConflictTree).void }
243
+ #: (ConflictTree node) -> void
240
244
  def visit_conflict_tree(node); end
241
245
 
242
- sig { params(node: ScopeConflict).void }
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"