[SourceKit] Handle macro arguments in placeholder expansion

Allow macro argument placeholders to expand into trailing closures.

rdar://150550747
This commit is contained in:
Hamish Knight
2025-05-21 18:06:54 +01:00
parent 63a436ec04
commit 5823154444
2 changed files with 92 additions and 23 deletions

View File

@@ -25,6 +25,10 @@ await foo(x: <#T##() -> Void#>)
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
foo(bar(<#T##() -> Void#>))
// CHECK: foo(bar({
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }))
anArr.indexOfObjectPassingTest(<#T##predicate: ((AnyObject!, Int, UnsafePointer<ObjCBool>) -> Bool)?##((AnyObject!, Int, UnsafePointer<ObjCBool>) -> Bool)?#>)
// CHECK: anArr.indexOfObjectPassingTest { <#AnyObject!#>, <#Int#>, <#UnsafePointer<ObjCBool>#> in
@@ -273,3 +277,41 @@ expandClosureWithInternalParameterNames {
// CHECK: withtrail { a, b in
// CHECK-NEXT: <#code#>
}
// CHECK-LABEL: func expandMacro()
func expandMacro() {
#foo(<#T##() -> Int#>)
// CHECK: #foo {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
#foo(bar: <#T##() -> ()#>)
// CHECK: #foo {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
#foo(bar: <#T##() -> Int#>, baz: <#T##() -> ()#>)
// CHECK: #foo {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } baz: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
}
// CHECK-LABEL: struct ExpandDeclMacro
struct ExpandDeclMacro {
#foo(<#T##() -> ()#>)
// CHECK: #foo {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
#foo(bar(<#T##() -> ()#>))
// CHECK: #foo(bar({
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }))
#foo(#bar(<#T##() -> ()#>))
// CHECK: #foo(#bar({
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }))
}