rbi 0.1.13 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc6e4bca77c6143bf821b712db2dd8b5bb24ce1cf039c35cf9c1cef2eecb438e
4
- data.tar.gz: 224672f4a192a102f01b5d8903ea771fbd26cc4fe3c0519120bd3597cb31d45f
3
+ metadata.gz: 8bcb914ddfe3208193a252f650ac6bcbc25c741efa183d28876ad1f0957cd24f
4
+ data.tar.gz: db2f129f6925c498e6112e43a7fc44b9a4a6aeb694cd18e97e64e3531bfe7ae4
5
5
  SHA512:
6
- metadata.gz: 6b98fab6fd4a4efab9f443d54cc974f1814f3a1895e6dfadf1e42c8cbc22af582c6f36a5e540f466efd5b5dc678568165e4d46b349f06ff75a2b01ba51408d1c
7
- data.tar.gz: 07ab68691a289c8a4733a7dcd85e9505313646ce9291448df9fbf820743606916e8f878f5e6b9903e9182f5dfdb99a18264b82b206c846bf1b6a5d2069406444
6
+ metadata.gz: 0def2a8d159eba09b59cbd403126a4b198687f018c65acec3d35cfa978d25da1bc97956ccb2d017d81ece08fe8e1f65e06b0ed4968b60fcb3b3e4b5cb497cdfe
7
+ data.tar.gz: 7f065932016677c397967f1dc16ca5115d8279ec65d00962e850496f616c16f76954e334611a66132cdeeea889866f5c41ffd2089ee5f9cdf473d77211cbfd80
data/Gemfile CHANGED
@@ -10,9 +10,9 @@ group(:development, :test) do
10
10
  gem("minitest")
11
11
  gem("minitest-reporters")
12
12
  gem("rake", "~> 13.2")
13
- gem("rubocop", "~> 1.63", require: false)
13
+ gem("rubocop", "~> 1.65", require: false)
14
14
  gem("rubocop-shopify", require: false)
15
15
  gem("rubocop-sorbet", require: false)
16
16
  gem("sorbet", ">= 0.5.9204", require: false)
17
- gem("tapioca", require: false)
17
+ gem("tapioca", github: "Shopify/tapioca", branch: "at-bump-rbi", require: false)
18
18
  end
data/lib/rbi/formatter.rb CHANGED
@@ -8,18 +8,6 @@ module RBI
8
8
  sig { params(sort_nodes: T::Boolean).returns(T::Boolean) }
9
9
  attr_writer :sort_nodes
10
10
 
11
- sig { params(nest_singleton_methods: T::Boolean).returns(T::Boolean) }
12
- attr_writer :nest_singleton_methods
13
-
14
- sig { params(add_sig_templates: T::Boolean).returns(T::Boolean) }
15
- attr_writer :add_sig_templates
16
-
17
- sig { params(group_nodes: T::Boolean).returns(T::Boolean) }
18
- attr_writer :group_nodes
19
-
20
- sig { params(nest_non_public_methods: T::Boolean).returns(T::Boolean) }
21
- attr_writer :nest_non_public_methods
22
-
23
11
  sig { returns(T.nilable(Integer)) }
24
12
  attr_accessor :max_line_length
25
13
 
@@ -29,7 +17,7 @@ module RBI
29
17
  group_nodes: T::Boolean,
30
18
  max_line_length: T.nilable(Integer),
31
19
  nest_singleton_methods: T::Boolean,
32
- nest_non_public_methods: T::Boolean,
20
+ nest_non_public_members: T::Boolean,
33
21
  sort_nodes: T::Boolean,
34
22
  ).void
35
23
  end
@@ -38,14 +26,14 @@ module RBI
38
26
  group_nodes: false,
39
27
  max_line_length: nil,
40
28
  nest_singleton_methods: false,
41
- nest_non_public_methods: false,
29
+ nest_non_public_members: false,
42
30
  sort_nodes: false
43
31
  )
44
32
  @add_sig_templates = add_sig_templates
45
33
  @group_nodes = group_nodes
46
34
  @max_line_length = max_line_length
47
35
  @nest_singleton_methods = nest_singleton_methods
48
- @nest_non_public_methods = nest_non_public_methods
36
+ @nest_non_public_members = nest_non_public_members
49
37
  @sort_nodes = sort_nodes
50
38
  end
51
39
 
@@ -64,7 +52,7 @@ module RBI
64
52
  def format_tree(tree)
65
53
  tree.add_sig_templates! if @add_sig_templates
66
54
  tree.nest_singleton_methods! if @nest_singleton_methods
67
- tree.nest_non_public_methods! if @nest_non_public_methods
55
+ tree.nest_non_public_members! if @nest_non_public_members
68
56
  tree.group_nodes! if @group_nodes
69
57
  tree.sort_nodes! if @sort_nodes
70
58
  end
data/lib/rbi/index.rb CHANGED
@@ -19,7 +19,7 @@ module RBI
19
19
 
20
20
  sig { void }
21
21
  def initialize
22
- super()
22
+ super
23
23
  @index = T.let({}, T::Hash[String, T::Array[Node]])
24
24
  end
25
25
 
data/lib/rbi/model.rb CHANGED
@@ -2,6 +2,8 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RBI
5
+ class ReplaceNodeError < Error; end
6
+
5
7
  class Node
6
8
  extend T::Sig
7
9
  extend T::Helpers
@@ -32,10 +34,10 @@ module RBI
32
34
  sig { params(node: Node).void }
33
35
  def replace(node)
34
36
  tree = parent_tree
35
- raise unless tree
37
+ raise ReplaceNodeError, "Can't replace #{self} without a parent tree" unless tree
36
38
 
37
39
  index = tree.nodes.index(self)
38
- raise unless index
40
+ raise ReplaceNodeError, "Can't find #{self} in #{tree} child nodes" unless index
39
41
 
40
42
  tree.nodes[index] = node
41
43
  node.parent_tree = tree
@@ -572,7 +574,7 @@ module RBI
572
574
  sig do
573
575
  params(
574
576
  params: T::Array[SigParam],
575
- return_type: T.nilable(String),
577
+ return_type: T.any(String, Type),
576
578
  is_abstract: T::Boolean,
577
579
  is_override: T::Boolean,
578
580
  is_overridable: T::Boolean,
@@ -584,7 +586,7 @@ module RBI
584
586
  end
585
587
  def add_sig(
586
588
  params: [],
587
- return_type: nil,
589
+ return_type: "void",
588
590
  is_abstract: false,
589
591
  is_override: false,
590
592
  is_overridable: false,
@@ -926,8 +928,10 @@ module RBI
926
928
  @visibility = visibility
927
929
  end
928
930
 
929
- sig { params(other: Visibility).returns(T::Boolean) }
931
+ sig { params(other: T.nilable(Object)).returns(T::Boolean) }
930
932
  def ==(other)
933
+ return false unless other.is_a?(Visibility)
934
+
931
935
  visibility == other.visibility
932
936
  end
933
937
 
@@ -1097,13 +1101,13 @@ module RBI
1097
1101
 
1098
1102
  # Sorbet's sigs
1099
1103
 
1100
- class Sig < Node
1104
+ class Sig < NodeWithComments
1101
1105
  extend T::Sig
1102
1106
 
1103
1107
  sig { returns(T::Array[SigParam]) }
1104
1108
  attr_reader :params
1105
1109
 
1106
- sig { returns(T.nilable(String)) }
1110
+ sig { returns(T.any(Type, String)) }
1107
1111
  attr_accessor :return_type
1108
1112
 
1109
1113
  sig { returns(T::Boolean) }
@@ -1118,7 +1122,7 @@ module RBI
1118
1122
  sig do
1119
1123
  params(
1120
1124
  params: T::Array[SigParam],
1121
- return_type: T.nilable(String),
1125
+ return_type: T.any(Type, String),
1122
1126
  is_abstract: T::Boolean,
1123
1127
  is_override: T::Boolean,
1124
1128
  is_overridable: T::Boolean,
@@ -1126,12 +1130,13 @@ module RBI
1126
1130
  type_params: T::Array[String],
1127
1131
  checked: T.nilable(Symbol),
1128
1132
  loc: T.nilable(Loc),
1133
+ comments: T::Array[Comment],
1129
1134
  block: T.nilable(T.proc.params(node: Sig).void),
1130
1135
  ).void
1131
1136
  end
1132
1137
  def initialize(
1133
1138
  params: [],
1134
- return_type: nil,
1139
+ return_type: "void",
1135
1140
  is_abstract: false,
1136
1141
  is_override: false,
1137
1142
  is_overridable: false,
@@ -1139,9 +1144,10 @@ module RBI
1139
1144
  type_params: [],
1140
1145
  checked: nil,
1141
1146
  loc: nil,
1147
+ comments: [],
1142
1148
  &block
1143
1149
  )
1144
- super(loc: loc)
1150
+ super(loc: loc, comments: comments)
1145
1151
  @params = params
1146
1152
  @return_type = return_type
1147
1153
  @is_abstract = is_abstract
@@ -1158,7 +1164,7 @@ module RBI
1158
1164
  @params << param
1159
1165
  end
1160
1166
 
1161
- sig { params(name: String, type: String).void }
1167
+ sig { params(name: String, type: T.any(Type, String)).void }
1162
1168
  def add_param(name, type)
1163
1169
  @params << SigParam.new(name, type)
1164
1170
  end
@@ -1167,7 +1173,7 @@ module RBI
1167
1173
  def ==(other)
1168
1174
  return false unless other.is_a?(Sig)
1169
1175
 
1170
- params == other.params && return_type == other.return_type && is_abstract == other.is_abstract &&
1176
+ params == other.params && return_type.to_s == other.return_type.to_s && is_abstract == other.is_abstract &&
1171
1177
  is_override == other.is_override && is_overridable == other.is_overridable && is_final == other.is_final &&
1172
1178
  type_params == other.type_params && checked == other.checked
1173
1179
  end
@@ -1177,12 +1183,15 @@ module RBI
1177
1183
  extend T::Sig
1178
1184
 
1179
1185
  sig { returns(String) }
1180
- attr_reader :name, :type
1186
+ attr_reader :name
1187
+
1188
+ sig { returns(T.any(Type, String)) }
1189
+ attr_reader :type
1181
1190
 
1182
1191
  sig do
1183
1192
  params(
1184
1193
  name: String,
1185
- type: String,
1194
+ type: T.any(Type, String),
1186
1195
  loc: T.nilable(Loc),
1187
1196
  comments: T::Array[Comment],
1188
1197
  block: T.nilable(T.proc.params(node: SigParam).void),
@@ -1197,7 +1206,7 @@ module RBI
1197
1206
 
1198
1207
  sig { params(other: Object).returns(T::Boolean) }
1199
1208
  def ==(other)
1200
- other.is_a?(SigParam) && name == other.name && type == other.type
1209
+ other.is_a?(SigParam) && name == other.name && type.to_s == other.type.to_s
1201
1210
  end
1202
1211
  end
1203
1212
 
@@ -1227,7 +1236,10 @@ module RBI
1227
1236
  abstract!
1228
1237
 
1229
1238
  sig { returns(String) }
1230
- attr_accessor :name, :type
1239
+ attr_accessor :name
1240
+
1241
+ sig { returns(T.any(Type, String)) }
1242
+ attr_accessor :type
1231
1243
 
1232
1244
  sig { returns(T.nilable(String)) }
1233
1245
  attr_accessor :default
@@ -1235,7 +1247,7 @@ module RBI
1235
1247
  sig do
1236
1248
  params(
1237
1249
  name: String,
1238
- type: String,
1250
+ type: T.any(Type, String),
1239
1251
  default: T.nilable(String),
1240
1252
  loc: T.nilable(Loc),
1241
1253
  comments: T::Array[Comment],
@@ -1258,7 +1270,7 @@ module RBI
1258
1270
  sig do
1259
1271
  params(
1260
1272
  name: String,
1261
- type: String,
1273
+ type: T.any(Type, String),
1262
1274
  default: T.nilable(String),
1263
1275
  loc: T.nilable(Loc),
1264
1276
  comments: T::Array[Comment],
@@ -1288,7 +1300,7 @@ module RBI
1288
1300
  sig do
1289
1301
  params(
1290
1302
  name: String,
1291
- type: String,
1303
+ type: T.any(Type, String),
1292
1304
  default: T.nilable(String),
1293
1305
  loc: T.nilable(Loc),
1294
1306
  comments: T::Array[Comment],
@@ -1331,39 +1343,29 @@ module RBI
1331
1343
  end
1332
1344
  end
1333
1345
 
1334
- class TEnumBlock < NodeWithComments
1346
+ class TEnumBlock < Scope
1335
1347
  extend T::Sig
1336
1348
 
1337
- sig { returns(T::Array[String]) }
1338
- attr_reader :names
1339
-
1340
1349
  sig do
1341
1350
  params(
1342
- names: T::Array[String],
1343
1351
  loc: T.nilable(Loc),
1344
1352
  comments: T::Array[Comment],
1345
1353
  block: T.nilable(T.proc.params(node: TEnumBlock).void),
1346
1354
  ).void
1347
1355
  end
1348
- def initialize(names = [], loc: nil, comments: [], &block)
1349
- super(loc: loc, comments: comments)
1350
- @names = names
1356
+ def initialize(loc: nil, comments: [], &block)
1357
+ super(loc: loc, comments: comments) {}
1351
1358
  block&.call(self)
1352
1359
  end
1353
1360
 
1354
- sig { returns(T::Boolean) }
1355
- def empty?
1356
- names.empty?
1357
- end
1358
-
1359
- sig { params(name: String).void }
1360
- def <<(name)
1361
- @names << name
1361
+ sig { override.returns(String) }
1362
+ def fully_qualified_name
1363
+ "#{parent_scope&.fully_qualified_name}.enums"
1362
1364
  end
1363
1365
 
1364
1366
  sig { override.returns(String) }
1365
1367
  def to_s
1366
- "#{parent_scope&.fully_qualified_name}.enums"
1368
+ fully_qualified_name
1367
1369
  end
1368
1370
  end
1369
1371
 
data/lib/rbi/parser.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  require "prism"
5
5
 
6
6
  module RBI
7
- class ParseError < StandardError
7
+ class ParseError < Error
8
8
  extend T::Sig
9
9
 
10
10
  sig { returns(Loc) }
@@ -17,7 +17,7 @@ module RBI
17
17
  end
18
18
  end
19
19
 
20
- class UnexpectedParserError < StandardError
20
+ class UnexpectedParserError < Error
21
21
  extend T::Sig
22
22
 
23
23
  sig { returns(Loc) }
@@ -169,22 +169,38 @@ module RBI
169
169
  @scopes_stack = T.let([@tree], T::Array[Tree])
170
170
  @last_node = T.let(nil, T.nilable(Prism::Node))
171
171
  @last_sigs = T.let([], T::Array[RBI::Sig])
172
- @last_sigs_comments = T.let([], T::Array[Comment])
173
172
  end
174
173
 
175
174
  sig { override.params(node: Prism::ClassNode).void }
176
175
  def visit_class_node(node)
177
176
  @last_node = node
178
- scope = Class.new(
179
- node_string!(node.constant_path),
180
- superclass_name: node_string(node.superclass),
181
- loc: node_loc(node),
182
- comments: node_comments(node),
183
- )
177
+ superclass_name = node_string(node.superclass)
178
+ scope = case superclass_name
179
+ when /^(::)?T::Struct$/
180
+ TStruct.new(
181
+ node_string!(node.constant_path),
182
+ loc: node_loc(node),
183
+ comments: node_comments(node),
184
+ )
185
+ when /^(::)?T::Enum$/
186
+ TEnum.new(
187
+ node_string!(node.constant_path),
188
+ loc: node_loc(node),
189
+ comments: node_comments(node),
190
+ )
191
+ else
192
+ Class.new(
193
+ node_string!(node.constant_path),
194
+ superclass_name: superclass_name,
195
+ loc: node_loc(node),
196
+ comments: node_comments(node),
197
+ )
198
+ end
184
199
 
185
200
  current_scope << scope
186
201
  @scopes_stack << scope
187
202
  visit(node.body)
203
+ scope.nodes.concat(current_sigs)
188
204
  collect_dangling_comments(node)
189
205
  @scopes_stack.pop
190
206
  @last_node = nil
@@ -240,12 +256,19 @@ module RBI
240
256
  sig { override.params(node: Prism::DefNode).void }
241
257
  def visit_def_node(node)
242
258
  @last_node = node
259
+
260
+ # We need to collect the comments with `current_sigs_comments` _before_ visiting the parameters to make sure
261
+ # the method comments are properly associated with the sigs and not the parameters.
262
+ sigs = current_sigs
263
+ comments = detach_comments_from_sigs(sigs) + node_comments(node)
264
+ params = parse_params(node.parameters)
265
+
243
266
  current_scope << Method.new(
244
267
  node.name.to_s,
245
- params: parse_params(node.parameters),
246
- sigs: current_sigs,
268
+ params: params,
269
+ sigs: sigs,
247
270
  loc: node_loc(node),
248
- comments: current_sigs_comments + node_comments(node),
271
+ comments: comments,
249
272
  is_singleton: !!node.receiver,
250
273
  )
251
274
  @last_node = nil
@@ -263,6 +286,7 @@ module RBI
263
286
  current_scope << scope
264
287
  @scopes_stack << scope
265
288
  visit(node.body)
289
+ scope.nodes.concat(current_sigs)
266
290
  collect_dangling_comments(node)
267
291
  @scopes_stack.pop
268
292
  @last_node = nil
@@ -272,7 +296,7 @@ module RBI
272
296
  def visit_program_node(node)
273
297
  @last_node = node
274
298
  super
275
-
299
+ @tree.nodes.concat(current_sigs)
276
300
  collect_orphan_comments
277
301
  separate_header_comments
278
302
  set_root_tree_loc
@@ -290,6 +314,7 @@ module RBI
290
314
  current_scope << scope
291
315
  @scopes_stack << scope
292
316
  visit(node.body)
317
+ scope.nodes.concat(current_sigs)
293
318
  collect_dangling_comments(node)
294
319
  @scopes_stack.pop
295
320
  @last_node = nil
@@ -314,11 +339,14 @@ module RBI
314
339
  return
315
340
  end
316
341
 
342
+ sigs = current_sigs
343
+ comments = detach_comments_from_sigs(sigs) + node_comments(node)
344
+
317
345
  current_scope << AttrReader.new(
318
346
  *T.unsafe(args.arguments.map { |arg| node_string!(arg).delete_prefix(":").to_sym }),
319
- sigs: current_sigs,
347
+ sigs: sigs,
320
348
  loc: node_loc(node),
321
- comments: current_sigs_comments + node_comments(node),
349
+ comments: comments,
322
350
  )
323
351
  when "attr_writer"
324
352
  args = node.arguments
@@ -328,11 +356,14 @@ module RBI
328
356
  return
329
357
  end
330
358
 
359
+ sigs = current_sigs
360
+ comments = detach_comments_from_sigs(sigs) + node_comments(node)
361
+
331
362
  current_scope << AttrWriter.new(
332
363
  *T.unsafe(args.arguments.map { |arg| node_string!(arg).delete_prefix(":").to_sym }),
333
- sigs: current_sigs,
364
+ sigs: sigs,
334
365
  loc: node_loc(node),
335
- comments: current_sigs_comments + node_comments(node),
366
+ comments: comments,
336
367
  )
337
368
  when "attr_accessor"
338
369
  args = node.arguments
@@ -342,32 +373,30 @@ module RBI
342
373
  return
343
374
  end
344
375
 
376
+ sigs = current_sigs
377
+ comments = detach_comments_from_sigs(sigs) + node_comments(node)
378
+
345
379
  current_scope << AttrAccessor.new(
346
380
  *T.unsafe(args.arguments.map { |arg| node_string!(arg).delete_prefix(":").to_sym }),
347
- sigs: current_sigs,
381
+ sigs: sigs,
348
382
  loc: node_loc(node),
349
- comments: current_sigs_comments + node_comments(node),
383
+ comments: comments,
350
384
  )
351
385
  when "enums"
352
- block = node.block
353
-
354
- unless block.is_a?(Prism::BlockNode)
355
- @last_node = nil
356
- return
357
- end
358
-
359
- body = block.body
360
-
361
- unless body.is_a?(Prism::StatementsNode)
362
- @last_node = nil
363
- return
386
+ if node.block && node.arguments.nil?
387
+ scope = TEnumBlock.new(loc: node_loc(node), comments: node_comments(node))
388
+ current_scope << scope
389
+ @scopes_stack << scope
390
+ visit(node.block)
391
+ @scopes_stack.pop
392
+ else
393
+ current_scope << Send.new(
394
+ message,
395
+ parse_send_args(node.arguments),
396
+ loc: node_loc(node),
397
+ comments: node_comments(node),
398
+ )
364
399
  end
365
-
366
- current_scope << TEnumBlock.new(
367
- body.body.map { |stmt| T.cast(stmt, Prism::ConstantWriteNode).name.to_s },
368
- loc: node_loc(node),
369
- comments: node_comments(node),
370
- )
371
400
  when "extend"
372
401
  args = node.arguments
373
402
 
@@ -415,6 +444,13 @@ module RBI
415
444
  case last_node
416
445
  when Method, Attr
417
446
  last_node.visibility = parse_visibility(node.name.to_s, node)
447
+ when Send
448
+ current_scope << Send.new(
449
+ message,
450
+ parse_send_args(node.arguments),
451
+ loc: node_loc(node),
452
+ comments: node_comments(node),
453
+ )
418
454
  else
419
455
  raise ParseError.new(
420
456
  "Unexpected token `#{node.message}` before `#{last_node&.string&.strip}`",
@@ -470,7 +506,7 @@ module RBI
470
506
 
471
507
  last_node_last_line = node.child_nodes.last&.location&.end_line
472
508
 
473
- last_line.downto(first_line) do |line|
509
+ first_line.upto(last_line) do |line|
474
510
  comment = @comments_by_line[line]
475
511
  next unless comment
476
512
  break if last_node_last_line && line <= last_node_last_line
@@ -516,10 +552,15 @@ module RBI
516
552
  sigs
517
553
  end
518
554
 
519
- sig { returns(T::Array[Comment]) }
520
- def current_sigs_comments
521
- comments = @last_sigs_comments.dup
522
- @last_sigs_comments.clear
555
+ sig { params(sigs: T::Array[Sig]).returns(T::Array[Comment]) }
556
+ def detach_comments_from_sigs(sigs)
557
+ comments = T.let([], T::Array[Comment])
558
+
559
+ sigs.each do |sig|
560
+ comments += sig.comments.dup
561
+ sig.comments.clear
562
+ end
563
+
523
564
  comments
524
565
  end
525
566
 
@@ -646,11 +687,10 @@ module RBI
646
687
 
647
688
  sig { params(node: Prism::CallNode).returns(Sig) }
648
689
  def parse_sig(node)
649
- @last_sigs_comments = node_comments(node)
650
-
651
690
  builder = SigBuilder.new(@source, file: @file)
652
691
  builder.current.loc = node_loc(node)
653
692
  builder.visit_call_node(node)
693
+ builder.current.comments = node_comments(node)
654
694
  builder.current
655
695
  end
656
696
 
@@ -719,7 +759,7 @@ module RBI
719
759
  comments = node_comments(send)
720
760
  default_value = T.let(nil, T.nilable(String))
721
761
 
722
- rest&.each do |arg|
762
+ rest.each do |arg|
723
763
  next unless arg.is_a?(Prism::KeywordHashNode)
724
764
 
725
765
  arg.elements.each do |assoc|
@@ -745,11 +785,11 @@ module RBI
745
785
  def parse_visibility(name, node)
746
786
  case name
747
787
  when "public"
748
- Public.new(loc: node_loc(node))
788
+ Public.new(loc: node_loc(node), comments: node_comments(node))
749
789
  when "protected"
750
- Protected.new(loc: node_loc(node))
790
+ Protected.new(loc: node_loc(node), comments: node_comments(node))
751
791
  when "private"
752
- Private.new(loc: node_loc(node))
792
+ Private.new(loc: node_loc(node), comments: node_comments(node))
753
793
  else
754
794
  raise ParseError.new("Unexpected visibility `#{name}`", node_loc(node))
755
795
  end
@@ -781,10 +821,7 @@ module RBI
781
821
 
782
822
  sig { params(node: T.nilable(Prism::Node)).returns(T::Boolean) }
783
823
  def type_variable_definition?(node)
784
- return false unless node.is_a?(Prism::CallNode)
785
- return false unless node.block
786
-
787
- node.message == "type_member" || node.message == "type_template"
824
+ node.is_a?(Prism::CallNode) && (node.message == "type_member" || node.message == "type_template")
788
825
  end
789
826
  end
790
827
 
@@ -839,7 +876,7 @@ module RBI
839
876
  end
840
877
  end
841
878
  when "void"
842
- @current.return_type = nil
879
+ @current.return_type = "void"
843
880
  end
844
881
 
845
882
  visit(node.receiver)