sorbet-runtime 0.5.11144 → 0.5.11264

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sorbet-runtime.rb +1 -1
  3. data/lib/types/compatibility_patches.rb +1 -1
  4. data/lib/types/configuration.rb +1 -1
  5. data/lib/types/private/abstract/declare.rb +4 -5
  6. data/lib/types/private/caller_utils.rb +21 -0
  7. data/lib/types/private/methods/_methods.rb +35 -30
  8. data/lib/types/private/methods/call_validation.rb +16 -2
  9. data/lib/types/private/methods/call_validation_2_6.rb +518 -0
  10. data/lib/types/private/methods/call_validation_2_7.rb +518 -0
  11. data/lib/types/private/methods/decl_builder.rb +1 -1
  12. data/lib/types/private/methods/signature.rb +10 -2
  13. data/lib/types/private/methods/signature_validation.rb +12 -6
  14. data/lib/types/private/sealed.rb +6 -6
  15. data/lib/types/private/types/not_typed.rb +4 -0
  16. data/lib/types/private/types/string_holder.rb +4 -0
  17. data/lib/types/private/types/type_alias.rb +4 -0
  18. data/lib/types/private/types/void.rb +4 -0
  19. data/lib/types/props/_props.rb +2 -2
  20. data/lib/types/props/decorator.rb +8 -7
  21. data/lib/types/props/has_lazily_specialized_methods.rb +2 -0
  22. data/lib/types/props/pretty_printable.rb +1 -1
  23. data/lib/types/props/private/deserializer_generator.rb +4 -1
  24. data/lib/types/props/private/setter_factory.rb +129 -69
  25. data/lib/types/props/serializable.rb +7 -1
  26. data/lib/types/types/anything.rb +4 -0
  27. data/lib/types/types/attached_class.rb +4 -0
  28. data/lib/types/types/base.rb +6 -0
  29. data/lib/types/types/class_of.rb +4 -0
  30. data/lib/types/types/enum.rb +4 -0
  31. data/lib/types/types/fixed_array.rb +19 -12
  32. data/lib/types/types/fixed_hash.rb +16 -9
  33. data/lib/types/types/intersection.rb +13 -6
  34. data/lib/types/types/noreturn.rb +4 -0
  35. data/lib/types/types/proc.rb +18 -8
  36. data/lib/types/types/self_type.rb +4 -0
  37. data/lib/types/types/simple.rb +9 -0
  38. data/lib/types/types/t_enum.rb +4 -0
  39. data/lib/types/types/type_parameter.rb +4 -0
  40. data/lib/types/types/type_variable.rb +4 -0
  41. data/lib/types/types/typed_array.rb +6 -1
  42. data/lib/types/types/typed_class.rb +21 -4
  43. data/lib/types/types/typed_enumerable.rb +19 -12
  44. data/lib/types/types/typed_enumerator.rb +1 -3
  45. data/lib/types/types/typed_enumerator_chain.rb +1 -3
  46. data/lib/types/types/typed_enumerator_lazy.rb +1 -3
  47. data/lib/types/types/typed_hash.rb +17 -7
  48. data/lib/types/types/typed_range.rb +1 -3
  49. data/lib/types/types/typed_set.rb +1 -3
  50. data/lib/types/types/union.rb +12 -5
  51. data/lib/types/types/untyped.rb +4 -0
  52. data/lib/types/utils.rb +6 -4
  53. metadata +16 -30
  54. data/lib/types/interface_wrapper.rb +0 -162
@@ -343,6 +343,265 @@ module T::Private::Methods::CallValidation
343
343
  end
344
344
  end
345
345
 
346
+ def self.create_validator_method_skip_return_fast(mod, original_method, method_sig, original_visibility)
347
+ # trampoline to reduce stack frame size
348
+ arg_types = method_sig.arg_types
349
+ case arg_types.length
350
+ when 0
351
+ create_validator_method_skip_return_fast0(mod, original_method, method_sig, original_visibility)
352
+ when 1
353
+ create_validator_method_skip_return_fast1(mod, original_method, method_sig, original_visibility,
354
+ arg_types[0][1].raw_type)
355
+ when 2
356
+ create_validator_method_skip_return_fast2(mod, original_method, method_sig, original_visibility,
357
+ arg_types[0][1].raw_type,
358
+ arg_types[1][1].raw_type)
359
+ when 3
360
+ create_validator_method_skip_return_fast3(mod, original_method, method_sig, original_visibility,
361
+ arg_types[0][1].raw_type,
362
+ arg_types[1][1].raw_type,
363
+ arg_types[2][1].raw_type)
364
+ when 4
365
+ create_validator_method_skip_return_fast4(mod, original_method, method_sig, original_visibility,
366
+ arg_types[0][1].raw_type,
367
+ arg_types[1][1].raw_type,
368
+ arg_types[2][1].raw_type,
369
+ arg_types[3][1].raw_type)
370
+ else
371
+ raise 'should not happen'
372
+ end
373
+ end
374
+
375
+ def self.create_validator_method_skip_return_fast0(mod, original_method, method_sig, original_visibility)
376
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |&blk|
377
+ # This method is a manually sped-up version of more general code in `validate_call`
378
+ # The following line breaks are intentional to show nice pry message
379
+
380
+
381
+
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+ # PRY note:
390
+ # this code is sig validation code.
391
+ # Please issue `finish` to step out of it
392
+
393
+ original_method.bind_call(self, &blk)
394
+ end
395
+ end
396
+
397
+ def self.create_validator_method_skip_return_fast1(mod, original_method, method_sig, original_visibility, arg0_type)
398
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, &blk|
399
+ # This method is a manually sped-up version of more general code in `validate_call`
400
+ unless arg0.is_a?(arg0_type)
401
+ CallValidation.report_error(
402
+ method_sig,
403
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
404
+ 'Parameter',
405
+ method_sig.arg_types[0][0],
406
+ arg0_type,
407
+ arg0,
408
+ caller_offset: -1
409
+ )
410
+ end
411
+
412
+ # The following line breaks are intentional to show nice pry message
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+ # PRY note:
424
+ # this code is sig validation code.
425
+ # Please issue `finish` to step out of it
426
+
427
+ original_method.bind_call(self, arg0, &blk)
428
+ end
429
+ end
430
+
431
+ def self.create_validator_method_skip_return_fast2(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type)
432
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, &blk|
433
+ # This method is a manually sped-up version of more general code in `validate_call`
434
+ unless arg0.is_a?(arg0_type)
435
+ CallValidation.report_error(
436
+ method_sig,
437
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
438
+ 'Parameter',
439
+ method_sig.arg_types[0][0],
440
+ arg0_type,
441
+ arg0,
442
+ caller_offset: -1
443
+ )
444
+ end
445
+
446
+ unless arg1.is_a?(arg1_type)
447
+ CallValidation.report_error(
448
+ method_sig,
449
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
450
+ 'Parameter',
451
+ method_sig.arg_types[1][0],
452
+ arg1_type,
453
+ arg1,
454
+ caller_offset: -1
455
+ )
456
+ end
457
+
458
+ # The following line breaks are intentional to show nice pry message
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+ # PRY note:
470
+ # this code is sig validation code.
471
+ # Please issue `finish` to step out of it
472
+
473
+ original_method.bind_call(self, arg0, arg1, &blk)
474
+ end
475
+ end
476
+
477
+ def self.create_validator_method_skip_return_fast3(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type, arg2_type)
478
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, arg2, &blk|
479
+ # This method is a manually sped-up version of more general code in `validate_call`
480
+ unless arg0.is_a?(arg0_type)
481
+ CallValidation.report_error(
482
+ method_sig,
483
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
484
+ 'Parameter',
485
+ method_sig.arg_types[0][0],
486
+ arg0_type,
487
+ arg0,
488
+ caller_offset: -1
489
+ )
490
+ end
491
+
492
+ unless arg1.is_a?(arg1_type)
493
+ CallValidation.report_error(
494
+ method_sig,
495
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
496
+ 'Parameter',
497
+ method_sig.arg_types[1][0],
498
+ arg1_type,
499
+ arg1,
500
+ caller_offset: -1
501
+ )
502
+ end
503
+
504
+ unless arg2.is_a?(arg2_type)
505
+ CallValidation.report_error(
506
+ method_sig,
507
+ method_sig.arg_types[2][1].error_message_for_obj(arg2),
508
+ 'Parameter',
509
+ method_sig.arg_types[2][0],
510
+ arg2_type,
511
+ arg2,
512
+ caller_offset: -1
513
+ )
514
+ end
515
+
516
+ # The following line breaks are intentional to show nice pry message
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+ # PRY note:
528
+ # this code is sig validation code.
529
+ # Please issue `finish` to step out of it
530
+
531
+ original_method.bind_call(self, arg0, arg1, arg2, &blk)
532
+ end
533
+ end
534
+
535
+ def self.create_validator_method_skip_return_fast4(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type, arg2_type, arg3_type)
536
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, arg2, arg3, &blk|
537
+ # This method is a manually sped-up version of more general code in `validate_call`
538
+ unless arg0.is_a?(arg0_type)
539
+ CallValidation.report_error(
540
+ method_sig,
541
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
542
+ 'Parameter',
543
+ method_sig.arg_types[0][0],
544
+ arg0_type,
545
+ arg0,
546
+ caller_offset: -1
547
+ )
548
+ end
549
+
550
+ unless arg1.is_a?(arg1_type)
551
+ CallValidation.report_error(
552
+ method_sig,
553
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
554
+ 'Parameter',
555
+ method_sig.arg_types[1][0],
556
+ arg1_type,
557
+ arg1,
558
+ caller_offset: -1
559
+ )
560
+ end
561
+
562
+ unless arg2.is_a?(arg2_type)
563
+ CallValidation.report_error(
564
+ method_sig,
565
+ method_sig.arg_types[2][1].error_message_for_obj(arg2),
566
+ 'Parameter',
567
+ method_sig.arg_types[2][0],
568
+ arg2_type,
569
+ arg2,
570
+ caller_offset: -1
571
+ )
572
+ end
573
+
574
+ unless arg3.is_a?(arg3_type)
575
+ CallValidation.report_error(
576
+ method_sig,
577
+ method_sig.arg_types[3][1].error_message_for_obj(arg3),
578
+ 'Parameter',
579
+ method_sig.arg_types[3][0],
580
+ arg3_type,
581
+ arg3,
582
+ caller_offset: -1
583
+ )
584
+ end
585
+
586
+ # The following line breaks are intentional to show nice pry message
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+ # PRY note:
598
+ # this code is sig validation code.
599
+ # Please issue `finish` to step out of it
600
+
601
+ original_method.bind_call(self, arg0, arg1, arg2, arg3, &blk)
602
+ end
603
+ end
604
+
346
605
  def self.create_validator_procedure_fast(mod, original_method, method_sig, original_visibility)
347
606
  # trampoline to reduce stack frame size
348
607
  arg_types = method_sig.arg_types
@@ -944,6 +1203,265 @@ module T::Private::Methods::CallValidation
944
1203
  end
945
1204
  end
946
1205
 
1206
+ def self.create_validator_method_skip_return_medium(mod, original_method, method_sig, original_visibility)
1207
+ # trampoline to reduce stack frame size
1208
+ arg_types = method_sig.arg_types
1209
+ case arg_types.length
1210
+ when 0
1211
+ create_validator_method_skip_return_medium0(mod, original_method, method_sig, original_visibility)
1212
+ when 1
1213
+ create_validator_method_skip_return_medium1(mod, original_method, method_sig, original_visibility,
1214
+ arg_types[0][1])
1215
+ when 2
1216
+ create_validator_method_skip_return_medium2(mod, original_method, method_sig, original_visibility,
1217
+ arg_types[0][1],
1218
+ arg_types[1][1])
1219
+ when 3
1220
+ create_validator_method_skip_return_medium3(mod, original_method, method_sig, original_visibility,
1221
+ arg_types[0][1],
1222
+ arg_types[1][1],
1223
+ arg_types[2][1])
1224
+ when 4
1225
+ create_validator_method_skip_return_medium4(mod, original_method, method_sig, original_visibility,
1226
+ arg_types[0][1],
1227
+ arg_types[1][1],
1228
+ arg_types[2][1],
1229
+ arg_types[3][1])
1230
+ else
1231
+ raise 'should not happen'
1232
+ end
1233
+ end
1234
+
1235
+ def self.create_validator_method_skip_return_medium0(mod, original_method, method_sig, original_visibility)
1236
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |&blk|
1237
+ # This method is a manually sped-up version of more general code in `validate_call`
1238
+ # The following line breaks are intentional to show nice pry message
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+ # PRY note:
1250
+ # this code is sig validation code.
1251
+ # Please issue `finish` to step out of it
1252
+
1253
+ original_method.bind_call(self, &blk)
1254
+ end
1255
+ end
1256
+
1257
+ def self.create_validator_method_skip_return_medium1(mod, original_method, method_sig, original_visibility, arg0_type)
1258
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, &blk|
1259
+ # This method is a manually sped-up version of more general code in `validate_call`
1260
+ unless arg0_type.valid?(arg0)
1261
+ CallValidation.report_error(
1262
+ method_sig,
1263
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
1264
+ 'Parameter',
1265
+ method_sig.arg_types[0][0],
1266
+ arg0_type,
1267
+ arg0,
1268
+ caller_offset: -1
1269
+ )
1270
+ end
1271
+
1272
+ # The following line breaks are intentional to show nice pry message
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+ # PRY note:
1284
+ # this code is sig validation code.
1285
+ # Please issue `finish` to step out of it
1286
+
1287
+ original_method.bind_call(self, arg0, &blk)
1288
+ end
1289
+ end
1290
+
1291
+ def self.create_validator_method_skip_return_medium2(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type)
1292
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, &blk|
1293
+ # This method is a manually sped-up version of more general code in `validate_call`
1294
+ unless arg0_type.valid?(arg0)
1295
+ CallValidation.report_error(
1296
+ method_sig,
1297
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
1298
+ 'Parameter',
1299
+ method_sig.arg_types[0][0],
1300
+ arg0_type,
1301
+ arg0,
1302
+ caller_offset: -1
1303
+ )
1304
+ end
1305
+
1306
+ unless arg1_type.valid?(arg1)
1307
+ CallValidation.report_error(
1308
+ method_sig,
1309
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
1310
+ 'Parameter',
1311
+ method_sig.arg_types[1][0],
1312
+ arg1_type,
1313
+ arg1,
1314
+ caller_offset: -1
1315
+ )
1316
+ end
1317
+
1318
+ # The following line breaks are intentional to show nice pry message
1319
+
1320
+
1321
+
1322
+
1323
+
1324
+
1325
+
1326
+
1327
+
1328
+
1329
+ # PRY note:
1330
+ # this code is sig validation code.
1331
+ # Please issue `finish` to step out of it
1332
+
1333
+ original_method.bind_call(self, arg0, arg1, &blk)
1334
+ end
1335
+ end
1336
+
1337
+ def self.create_validator_method_skip_return_medium3(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type, arg2_type)
1338
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, arg2, &blk|
1339
+ # This method is a manually sped-up version of more general code in `validate_call`
1340
+ unless arg0_type.valid?(arg0)
1341
+ CallValidation.report_error(
1342
+ method_sig,
1343
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
1344
+ 'Parameter',
1345
+ method_sig.arg_types[0][0],
1346
+ arg0_type,
1347
+ arg0,
1348
+ caller_offset: -1
1349
+ )
1350
+ end
1351
+
1352
+ unless arg1_type.valid?(arg1)
1353
+ CallValidation.report_error(
1354
+ method_sig,
1355
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
1356
+ 'Parameter',
1357
+ method_sig.arg_types[1][0],
1358
+ arg1_type,
1359
+ arg1,
1360
+ caller_offset: -1
1361
+ )
1362
+ end
1363
+
1364
+ unless arg2_type.valid?(arg2)
1365
+ CallValidation.report_error(
1366
+ method_sig,
1367
+ method_sig.arg_types[2][1].error_message_for_obj(arg2),
1368
+ 'Parameter',
1369
+ method_sig.arg_types[2][0],
1370
+ arg2_type,
1371
+ arg2,
1372
+ caller_offset: -1
1373
+ )
1374
+ end
1375
+
1376
+ # The following line breaks are intentional to show nice pry message
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+ # PRY note:
1388
+ # this code is sig validation code.
1389
+ # Please issue `finish` to step out of it
1390
+
1391
+ original_method.bind_call(self, arg0, arg1, arg2, &blk)
1392
+ end
1393
+ end
1394
+
1395
+ def self.create_validator_method_skip_return_medium4(mod, original_method, method_sig, original_visibility, arg0_type, arg1_type, arg2_type, arg3_type)
1396
+ T::Private::ClassUtils.def_with_visibility(mod, method_sig.method_name, original_visibility) do |arg0, arg1, arg2, arg3, &blk|
1397
+ # This method is a manually sped-up version of more general code in `validate_call`
1398
+ unless arg0_type.valid?(arg0)
1399
+ CallValidation.report_error(
1400
+ method_sig,
1401
+ method_sig.arg_types[0][1].error_message_for_obj(arg0),
1402
+ 'Parameter',
1403
+ method_sig.arg_types[0][0],
1404
+ arg0_type,
1405
+ arg0,
1406
+ caller_offset: -1
1407
+ )
1408
+ end
1409
+
1410
+ unless arg1_type.valid?(arg1)
1411
+ CallValidation.report_error(
1412
+ method_sig,
1413
+ method_sig.arg_types[1][1].error_message_for_obj(arg1),
1414
+ 'Parameter',
1415
+ method_sig.arg_types[1][0],
1416
+ arg1_type,
1417
+ arg1,
1418
+ caller_offset: -1
1419
+ )
1420
+ end
1421
+
1422
+ unless arg2_type.valid?(arg2)
1423
+ CallValidation.report_error(
1424
+ method_sig,
1425
+ method_sig.arg_types[2][1].error_message_for_obj(arg2),
1426
+ 'Parameter',
1427
+ method_sig.arg_types[2][0],
1428
+ arg2_type,
1429
+ arg2,
1430
+ caller_offset: -1
1431
+ )
1432
+ end
1433
+
1434
+ unless arg3_type.valid?(arg3)
1435
+ CallValidation.report_error(
1436
+ method_sig,
1437
+ method_sig.arg_types[3][1].error_message_for_obj(arg3),
1438
+ 'Parameter',
1439
+ method_sig.arg_types[3][0],
1440
+ arg3_type,
1441
+ arg3,
1442
+ caller_offset: -1
1443
+ )
1444
+ end
1445
+
1446
+ # The following line breaks are intentional to show nice pry message
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+ # PRY note:
1458
+ # this code is sig validation code.
1459
+ # Please issue `finish` to step out of it
1460
+
1461
+ original_method.bind_call(self, arg0, arg1, arg2, arg3, &blk)
1462
+ end
1463
+ end
1464
+
947
1465
  def self.create_validator_procedure_medium(mod, original_method, method_sig, original_visibility)
948
1466
  # trampoline to reduce stack frame size
949
1467
  arg_types = method_sig.arg_types
@@ -183,7 +183,7 @@ module T::Private::Methods
183
183
  self
184
184
  end
185
185
 
186
- # Declares valid type paramaters which can be used with `T.type_parameter` in
186
+ # Declares valid type parameters which can be used with `T.type_parameter` in
187
187
  # this `sig`.
188
188
  #
189
189
  # This is used for generic methods. Example usage:
@@ -73,8 +73,7 @@ class T::Private::Methods::Signature
73
73
  param_names = parameters.map {|_, name| name}
74
74
  missing_names = param_names - raw_arg_types.keys
75
75
  raise "The declaration for `#{method.name}` is missing parameter(s): #{missing_names.join(', ')}"
76
- elsif parameters.length == raw_arg_types.size
77
- else
76
+ elsif parameters.length != raw_arg_types.size
78
77
  param_names = parameters.map {|_, name| name}
79
78
  has_extra_names = parameters.count {|_, name| raw_arg_types.key?(name)} < raw_arg_types.size
80
79
  if has_extra_names
@@ -245,6 +244,15 @@ class T::Private::Methods::Signature
245
244
  "#{@method} at #{loc}"
246
245
  end
247
246
 
247
+ def force_type_init
248
+ @arg_types.each {|_, type| type.build_type}
249
+ @kwarg_types.each {|_, type| type.build_type}
250
+ @block_type&.build_type
251
+ @rest_type&.build_type
252
+ @keyrest_type&.build_type
253
+ @return_type.build_type
254
+ end
255
+
248
256
  EMPTY_LIST = [].freeze
249
257
  EMPTY_HASH = {}.freeze
250
258
  end
@@ -59,10 +59,9 @@ module T::Private::Methods::SignatureValidation
59
59
  # `{ new(): AbstractClass }`. We may want to consider building some
60
60
  # analogue to `T.class_of` in the future that works like this `{new():
61
61
  # ...}` type.
62
- if signature.method_name == :initialize && signature.method.owner.is_a?(Class)
63
- if signature.mode == Modes.standard
64
- return
65
- end
62
+ if signature.method_name == :initialize && signature.method.owner.is_a?(Class) &&
63
+ signature.mode == Modes.standard
64
+ return
66
65
  end
67
66
 
68
67
  super_method = signature.method.super_method
@@ -151,7 +150,7 @@ module T::Private::Methods::SignatureValidation
151
150
  # This is a one-off hack, and we should think carefully before adding more methods here.
152
151
  nil
153
152
  else
154
- raise "You marked `#{signature.method_name}` as #{pretty_mode(signature)}, but that method doesn't already exist in this class/module to be overriden.\n" \
153
+ raise "You marked `#{signature.method_name}` as #{pretty_mode(signature)}, but that method doesn't already exist in this class/module to be overridden.\n" \
155
154
  " Either check for typos and for missing includes or super classes to make the parent method shows up\n" \
156
155
  " ... or remove #{pretty_mode(signature)} here: #{method_loc_str(signature.method)}\n"
157
156
  end
@@ -262,7 +261,14 @@ module T::Private::Methods::SignatureValidation
262
261
  end
263
262
 
264
263
  # return types must be covariant
265
- if !signature.return_type.subtype_of?(super_signature.return_type)
264
+ super_signature_return_type = super_signature.return_type
265
+
266
+ if super_signature_return_type == T::Private::Types::Void::Private::INSTANCE
267
+ # Treat `.void` as `T.anything` (see corresponding comment in definition_valitor for more)
268
+ super_signature_return_type = T::Types::Anything::Private::INSTANCE
269
+ end
270
+
271
+ if !signature.return_type.subtype_of?(super_signature_return_type)
266
272
  raise "Incompatible return type in signature for #{mode_noun} of method `#{signature.method_name}`:\n" \
267
273
  "* Base: `#{super_signature.return_type}` (in #{method_loc_str(super_signature.method)})\n" \
268
274
  "* #{mode_noun.capitalize}: `#{signature.return_type}` (in #{method_loc_str(signature.method)})\n" \
@@ -5,8 +5,8 @@ module T::Private::Sealed
5
5
  module NoInherit
6
6
  def inherited(child)
7
7
  super
8
- this_line = Kernel.caller.find {|line| !line.match(/in `inherited'$/)}
9
- T::Private::Sealed.validate_inheritance(this_line, self, child, 'inherited')
8
+ caller_loc = T::Private::CallerUtils.find_caller {|loc| !loc.to_s.match(/in `inherited'$/)}
9
+ T::Private::Sealed.validate_inheritance(caller_loc&.to_s, self, child, 'inherited')
10
10
  @sorbet_sealed_module_all_subclasses << child
11
11
  end
12
12
 
@@ -22,15 +22,15 @@ module T::Private::Sealed
22
22
  module NoIncludeExtend
23
23
  def included(child)
24
24
  super
25
- this_line = Kernel.caller.find {|line| !line.match(/in `included'$/)}
26
- T::Private::Sealed.validate_inheritance(this_line, self, child, 'included')
25
+ caller_loc = T::Private::CallerUtils.find_caller {|loc| !loc.to_s.match(/in `included'$/)}
26
+ T::Private::Sealed.validate_inheritance(caller_loc&.to_s, self, child, 'included')
27
27
  @sorbet_sealed_module_all_subclasses << child
28
28
  end
29
29
 
30
30
  def extended(child)
31
31
  super
32
- this_line = Kernel.caller.find {|line| !line.match(/in `extended'$/)}
33
- T::Private::Sealed.validate_inheritance(this_line, self, child, 'extended')
32
+ caller_loc = T::Private::CallerUtils.find_caller {|loc| !loc.to_s.match(/in `extended'$/)}
33
+ T::Private::Sealed.validate_inheritance(caller_loc&.to_s, self, child, 'extended')
34
34
  @sorbet_sealed_module_all_subclasses << child
35
35
  end
36
36
 
@@ -6,6 +6,10 @@
6
6
  class T::Private::Types::NotTyped < T::Types::Base
7
7
  ERROR_MESSAGE = "Validation is being done on a `NotTyped`. Please report this bug at https://github.com/sorbet/sorbet/issues"
8
8
 
9
+ def build_type
10
+ nil
11
+ end
12
+
9
13
  # overrides Base
10
14
  def name
11
15
  "<NOT-TYPED>"
@@ -9,6 +9,10 @@ class T::Private::Types::StringHolder < T::Types::Base
9
9
  @string = string
10
10
  end
11
11
 
12
+ def build_type
13
+ nil
14
+ end
15
+
12
16
  # overrides Base
13
17
  def name
14
18
  string
@@ -9,6 +9,10 @@ module T::Private::Types
9
9
  @callable = callable
10
10
  end
11
11
 
12
+ def build_type
13
+ nil
14
+ end
15
+
12
16
  def aliased_type
13
17
  @aliased_type ||= T::Utils.coerce(@callable.call)
14
18
  end
@@ -18,6 +18,10 @@ module T::Private::Types
18
18
  freeze
19
19
  end
20
20
 
21
+ def build_type
22
+ nil
23
+ end
24
+
21
25
  # overrides Base
22
26
  def name
23
27
  "<VOID>"
@@ -139,9 +139,9 @@ module T::Props
139
139
  end
140
140
 
141
141
  if cls_or_args.is_a?(Hash)
142
- self.prop(name, **cls_or_args.merge(immutable: true))
142
+ self.prop(name, cls_or_args.merge(immutable: true))
143
143
  else
144
- self.prop(name, cls_or_args, **args.merge(immutable: true))
144
+ self.prop(name, cls_or_args, args.merge(immutable: true))
145
145
  end
146
146
  end
147
147