@@ -419,7 +419,7 @@ final class InitDeinitTests: XCTestCase {
419
419
func testInitDeinit28( ) {
420
420
assertParse (
421
421
"""
422
- init(_ foo: T) 1️⃣-> Int where T: Comparable {}
422
+ init(_ foo: T) 1️⃣-> Int where T: Comparable {}
423
423
""" ,
424
424
diagnostics: [
425
425
DiagnosticSpec ( message: " initializers cannot have a result type " )
@@ -438,34 +438,26 @@ final class InitDeinitTests: XCTestCase {
438
438
substructure: Syntax ( DeinitializerDeclSyntax ( ) )
439
439
)
440
440
}
441
-
442
- func testDeinitAsyncThrows ( ) {
441
+
442
+ func testDeinitAsync ( ) {
443
443
assertParse (
444
444
"""
445
445
class FooClassDeinitializerA {
446
- deinit async 1️⃣throws {}
446
+ deinit async {}
447
447
}
448
- """ ,
449
- diagnostics: [
450
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws' " ] )
451
- ] ,
452
- fixedSource: """
453
- class FooClassDeinitializerA {
454
- deinit async {}
455
- }
456
- """
448
+ """
457
449
)
458
450
}
459
-
460
- func testDeinitThrowsAsync ( ) {
451
+
452
+ func testDeinitAwait ( ) {
461
453
assertParse (
462
454
"""
463
455
class FooClassDeinitializerA {
464
- deinit 1️⃣throws async {}
456
+ deinit 1️⃣await {}
465
457
}
466
458
""" ,
467
459
diagnostics: [
468
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws '" ] )
460
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected async specifier; did you mean 'async'? " , fixIts: [ " replace 'await' with 'async '" ] )
469
461
] ,
470
462
fixedSource: """
471
463
class FooClassDeinitializerA {
@@ -475,15 +467,15 @@ final class InitDeinitTests: XCTestCase {
475
467
)
476
468
}
477
469
478
- func testDeinitThrowsAsyncRethrows ( ) {
470
+ func testDeinitReasync ( ) {
479
471
assertParse (
480
472
"""
481
473
class FooClassDeinitializerA {
482
- deinit 1️⃣throws async rethrows {}
474
+ deinit 1️⃣reasync {}
483
475
}
484
476
""" ,
485
477
diagnostics: [
486
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws' and 'rethrows '" ] )
478
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected async specifier; did you mean 'async'? " , fixIts: [ " replace 'reasync' with 'async '" ] )
487
479
] ,
488
480
fixedSource: """
489
481
class FooClassDeinitializerA {
@@ -493,42 +485,65 @@ final class InitDeinitTests: XCTestCase {
493
485
)
494
486
}
495
487
496
- func testDeinitReasync ( ) {
488
+ func testDeinitThrows ( ) {
497
489
assertParse (
498
490
"""
499
491
class FooClassDeinitializerA {
500
- deinit 1️⃣reasync {}
492
+ deinit 1️⃣throws {}
501
493
}
502
494
""" ,
503
495
diagnostics: [
504
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected async specifier; did you mean 'async'? " , fixIts: [ " replace 'reasync' with 'async '" ] )
496
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws '" ] )
505
497
] ,
506
498
fixedSource: """
507
499
class FooClassDeinitializerA {
508
- deinit async {}
500
+ deinit {}
509
501
}
510
502
"""
511
503
)
512
504
}
513
505
514
- func testDeinitAwait ( ) {
506
+ func testDeinitRethrows ( ) {
515
507
assertParse (
516
508
"""
517
509
class FooClassDeinitializerA {
518
- deinit 1️⃣await {}
510
+ deinit 1️⃣rethrows {}
519
511
}
520
512
""" ,
521
513
diagnostics: [
522
- DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " expected async specifier; did you mean 'async'? " , fixIts: [ " replace 'await' with 'async '" ] )
514
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'rethrows '" ] )
523
515
] ,
524
516
fixedSource: """
525
517
class FooClassDeinitializerA {
526
- deinit async {}
518
+ deinit {}
527
519
}
528
520
"""
529
521
)
530
522
}
531
523
524
+ func testDeinitAsyncAsync( ) {
525
+ assertParse (
526
+ """
527
+ class FooClassDeinitializerA {
528
+ deinit ℹ️async 1️⃣async {}
529
+ }
530
+ """ ,
531
+ diagnostics: [
532
+ DiagnosticSpec (
533
+ locationMarker: " 1️⃣ " ,
534
+ message: " 'async' has already been specified " ,
535
+ notes: [ NoteSpec ( message: " 'async' declared here " ) ] ,
536
+ fixIts: [ " remove redundant 'async' " ]
537
+ )
538
+ ] ,
539
+ fixedSource: """
540
+ class FooClassDeinitializerA {
541
+ deinit async {}
542
+ }
543
+ """
544
+ )
545
+ }
546
+
532
547
func testDeinitAsyncAwait( ) {
533
548
assertParse (
534
549
"""
@@ -574,6 +589,60 @@ final class InitDeinitTests: XCTestCase {
574
589
)
575
590
}
576
591
592
+ func testDeinitAsyncThrows( ) {
593
+ assertParse (
594
+ """
595
+ class FooClassDeinitializerA {
596
+ deinit async 1️⃣throws {}
597
+ }
598
+ """ ,
599
+ diagnostics: [
600
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws' " ] )
601
+ ] ,
602
+ fixedSource: """
603
+ class FooClassDeinitializerA {
604
+ deinit async {}
605
+ }
606
+ """
607
+ )
608
+ }
609
+
610
+ func testDeinitThrowsAsync( ) {
611
+ assertParse (
612
+ """
613
+ class FooClassDeinitializerA {
614
+ deinit 1️⃣throws async {}
615
+ }
616
+ """ ,
617
+ diagnostics: [
618
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws' " ] )
619
+ ] ,
620
+ fixedSource: """
621
+ class FooClassDeinitializerA {
622
+ deinit async {}
623
+ }
624
+ """
625
+ )
626
+ }
627
+
628
+ func testDeinitThrowsAsyncRethrows( ) {
629
+ assertParse (
630
+ """
631
+ class FooClassDeinitializerA {
632
+ deinit 1️⃣throws async rethrows {}
633
+ }
634
+ """ ,
635
+ diagnostics: [
636
+ DiagnosticSpec ( locationMarker: " 1️⃣ " , message: " deinitializers cannot throw " , fixIts: [ " remove 'throws' and 'rethrows' " ] )
637
+ ] ,
638
+ fixedSource: """
639
+ class FooClassDeinitializerA {
640
+ deinit async {}
641
+ }
642
+ """
643
+ )
644
+ }
645
+
577
646
func testDeinitNameAwait( ) {
578
647
assertParse (
579
648
"""
@@ -696,4 +765,15 @@ final class InitDeinitTests: XCTestCase {
696
765
"""
697
766
)
698
767
}
768
+
769
+ func testAsyncDeinit( ) {
770
+ // TODO: Investigate why this produces no diagnostics
771
+ assertParse (
772
+ """
773
+ class FooClassDeinitializerA {
774
+ async deinit {}
775
+ }
776
+ """
777
+ )
778
+ }
699
779
}
0 commit comments