@@ -229,6 +229,7 @@ final class CallHierarchyTests: XCTestCase {
229
229
}
230
230
231
231
func testIncomingCallHierarchyShowsSurroundingFunctionCall( ) async throws {
232
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
232
233
// We used to show `myVar` as the caller here
233
234
let project = try await IndexedSingleSwiftFileTestProject (
234
235
"""
@@ -255,7 +256,6 @@ final class CallHierarchyTests: XCTestCase {
255
256
name: " testFunc(x:) " ,
256
257
kind: . function,
257
258
tags: nil ,
258
- detail: nil ,
259
259
uri: project. fileURI,
260
260
range: Range ( project. positions [ " 2️⃣ " ] ) ,
261
261
selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
@@ -271,6 +271,7 @@ final class CallHierarchyTests: XCTestCase {
271
271
}
272
272
273
273
func testIncomingCallHierarchyFromComputedProperty( ) async throws {
274
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
274
275
let project = try await IndexedSingleSwiftFileTestProject (
275
276
"""
276
277
func 1️⃣foo() {}
@@ -303,7 +304,6 @@ final class CallHierarchyTests: XCTestCase {
303
304
name: " getter:testVar " ,
304
305
kind: . function,
305
306
tags: nil ,
306
- detail: nil ,
307
307
uri: project. fileURI,
308
308
range: Range ( project. positions [ " 2️⃣ " ] ) ,
309
309
selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
@@ -328,7 +328,6 @@ final class CallHierarchyTests: XCTestCase {
328
328
name: " testFunc() " ,
329
329
kind: . function,
330
330
tags: nil ,
331
- detail: nil ,
332
331
uri: project. fileURI,
333
332
range: Range ( project. positions [ " 4️⃣ " ] ) ,
334
333
selectionRange: Range ( project. positions [ " 4️⃣ " ] ) ,
@@ -370,7 +369,6 @@ final class CallHierarchyTests: XCTestCase {
370
369
name: " testFunc() " ,
371
370
kind: . function,
372
371
tags: nil ,
373
- detail: nil ,
374
372
uri: project. fileURI,
375
373
range: Range ( project. positions [ " 2️⃣ " ] ) ,
376
374
selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
@@ -411,7 +409,6 @@ final class CallHierarchyTests: XCTestCase {
411
409
name: " getter:foo " ,
412
410
kind: . function,
413
411
tags: nil ,
414
- detail: nil ,
415
412
uri: project. fileURI,
416
413
range: Range ( project. positions [ " 1️⃣ " ] ) ,
417
414
selectionRange: Range ( project. positions [ " 1️⃣ " ] ) ,
@@ -451,7 +448,6 @@ final class CallHierarchyTests: XCTestCase {
451
448
name: " testFunc() " ,
452
449
kind: . function,
453
450
tags: nil ,
454
- detail: nil ,
455
451
uri: project. fileURI,
456
452
range: Range ( project. positions [ " 1️⃣ " ] ) ,
457
453
selectionRange: Range ( project. positions [ " 1️⃣ " ] ) ,
@@ -500,7 +496,6 @@ final class CallHierarchyTests: XCTestCase {
500
496
name: " test(proto:) " ,
501
497
kind: . function,
502
498
tags: nil ,
503
- detail: nil ,
504
499
uri: project. fileURI,
505
500
range: Range ( project. positions [ " 2️⃣ " ] ) ,
506
501
selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
@@ -549,7 +544,6 @@ final class CallHierarchyTests: XCTestCase {
549
544
name: " test(base:) " ,
550
545
kind: . function,
551
546
tags: nil ,
552
- detail: nil ,
553
547
uri: project. fileURI,
554
548
range: Range ( project. positions [ " 2️⃣ " ] ) ,
555
549
selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
@@ -606,4 +600,168 @@ final class CallHierarchyTests: XCTestCase {
606
600
]
607
601
)
608
602
}
603
+
604
+ func testUnappliedFunctionReferenceInIncomingCallHierarchy( ) async throws {
605
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
606
+ let project = try await IndexedSingleSwiftFileTestProject (
607
+ """
608
+ func 1️⃣foo() {}
609
+
610
+ func 2️⃣testFunc(x: String) {
611
+ let myVar = 3️⃣foo
612
+ }
613
+ """
614
+ )
615
+ let prepare = try await project. testClient. send (
616
+ CallHierarchyPrepareRequest (
617
+ textDocument: TextDocumentIdentifier ( project. fileURI) ,
618
+ position: project. positions [ " 1️⃣ " ]
619
+ )
620
+ )
621
+ let initialItem = try XCTUnwrap ( prepare? . only)
622
+ let calls = try await project. testClient. send ( CallHierarchyIncomingCallsRequest ( item: initialItem) )
623
+ XCTAssertEqual (
624
+ calls,
625
+ [
626
+ CallHierarchyIncomingCall (
627
+ from: CallHierarchyItem (
628
+ name: " testFunc(x:) " ,
629
+ kind: . function,
630
+ tags: nil ,
631
+ uri: project. fileURI,
632
+ range: Range ( project. positions [ " 2️⃣ " ] ) ,
633
+ selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
634
+ data: . dictionary( [
635
+ " usr " : . string( " s:4test0A4Func1xySS_tF " ) ,
636
+ " uri " : . string( project. fileURI. stringValue) ,
637
+ ] )
638
+ ) ,
639
+ fromRanges: [ Range ( project. positions [ " 3️⃣ " ] ) ]
640
+ )
641
+ ]
642
+ )
643
+ }
644
+
645
+ func testUnappliedFunctionReferenceInOutgoingCallHierarchy( ) async throws {
646
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
647
+ let project = try await IndexedSingleSwiftFileTestProject (
648
+ """
649
+ func 1️⃣foo() {}
650
+
651
+ func 2️⃣testFunc(x: String) {
652
+ let myVar = 3️⃣foo
653
+ }
654
+ """
655
+ )
656
+ let prepare = try await project. testClient. send (
657
+ CallHierarchyPrepareRequest (
658
+ textDocument: TextDocumentIdentifier ( project. fileURI) ,
659
+ position: project. positions [ " 2️⃣ " ]
660
+ )
661
+ )
662
+ let initialItem = try XCTUnwrap ( prepare? . only)
663
+ let calls = try await project. testClient. send ( CallHierarchyOutgoingCallsRequest ( item: initialItem) )
664
+ XCTAssertEqual (
665
+ calls,
666
+ [
667
+ CallHierarchyOutgoingCall (
668
+ to: CallHierarchyItem (
669
+ name: " foo() " ,
670
+ kind: . function,
671
+ tags: nil ,
672
+ uri: project. fileURI,
673
+ range: Range ( project. positions [ " 1️⃣ " ] ) ,
674
+ selectionRange: Range ( project. positions [ " 1️⃣ " ] ) ,
675
+ data: . dictionary( [
676
+ " usr " : . string( " s:4test3fooyyF " ) ,
677
+ " uri " : . string( project. fileURI. stringValue) ,
678
+ ] )
679
+ ) ,
680
+ fromRanges: [ Range ( project. positions [ " 3️⃣ " ] ) ]
681
+ )
682
+ ]
683
+ )
684
+ }
685
+
686
+ func testIncomingCallHierarchyForPropertyInitializedWithClosure( ) async throws {
687
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
688
+ let project = try await IndexedSingleSwiftFileTestProject (
689
+ """
690
+ func 1️⃣foo() -> Int {}
691
+
692
+ let 2️⃣myVar: Int = {
693
+ 3️⃣foo()
694
+ }()
695
+ """
696
+ )
697
+ let prepare = try await project. testClient. send (
698
+ CallHierarchyPrepareRequest (
699
+ textDocument: TextDocumentIdentifier ( project. fileURI) ,
700
+ position: project. positions [ " 1️⃣ " ]
701
+ )
702
+ )
703
+ let initialItem = try XCTUnwrap ( prepare? . only)
704
+ let calls = try await project. testClient. send ( CallHierarchyIncomingCallsRequest ( item: initialItem) )
705
+ XCTAssertEqual (
706
+ calls,
707
+ [
708
+ CallHierarchyIncomingCall (
709
+ from: CallHierarchyItem (
710
+ name: " myVar " ,
711
+ kind: . variable,
712
+ tags: nil ,
713
+ uri: project. fileURI,
714
+ range: Range ( project. positions [ " 2️⃣ " ] ) ,
715
+ selectionRange: Range ( project. positions [ " 2️⃣ " ] ) ,
716
+ data: . dictionary( [
717
+ " usr " : . string( " s:4test5myVarSivp " ) ,
718
+ " uri " : . string( project. fileURI. stringValue) ,
719
+ ] )
720
+ ) ,
721
+ fromRanges: [ Range ( project. positions [ " 3️⃣ " ] ) ]
722
+ )
723
+ ]
724
+ )
725
+ }
726
+
727
+ func testOutgoingCallHierarchyForPropertyInitializedWithClosure( ) async throws {
728
+ try await SkipUnless . indexOnlyHasContainedByRelationsToIndexedDecls ( )
729
+ let project = try await IndexedSingleSwiftFileTestProject (
730
+ """
731
+ func 1️⃣foo() -> Int {}
732
+
733
+ let 2️⃣myVar: Int = {
734
+ 3️⃣foo()
735
+ }()
736
+ """
737
+ )
738
+ let prepare = try await project. testClient. send (
739
+ CallHierarchyPrepareRequest (
740
+ textDocument: TextDocumentIdentifier ( project. fileURI) ,
741
+ position: project. positions [ " 2️⃣ " ]
742
+ )
743
+ )
744
+ let initialItem = try XCTUnwrap ( prepare? . only)
745
+ let calls = try await project. testClient. send ( CallHierarchyOutgoingCallsRequest ( item: initialItem) )
746
+ XCTAssertEqual (
747
+ calls,
748
+ [
749
+ CallHierarchyOutgoingCall (
750
+ to: CallHierarchyItem (
751
+ name: " foo() " ,
752
+ kind: . function,
753
+ tags: nil ,
754
+ uri: project. fileURI,
755
+ range: Range ( project. positions [ " 1️⃣ " ] ) ,
756
+ selectionRange: Range ( project. positions [ " 1️⃣ " ] ) ,
757
+ data: . dictionary( [
758
+ " usr " : . string( " s:4test3fooSiyF " ) ,
759
+ " uri " : . string( project. fileURI. stringValue) ,
760
+ ] )
761
+ ) ,
762
+ fromRanges: [ Range ( project. positions [ " 3️⃣ " ] ) ]
763
+ )
764
+ ]
765
+ )
766
+ }
609
767
}
0 commit comments