// RUN: %sourcekitd-test -req=expand-placeholder %s | %FileCheck %s

withMulti1Labeled(a: <#T##() -> ()#>, b: <#T##() -> ()#>)
// CHECK:      withMulti1Labeled {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

withMulti2UnlabeledFirst(<#T##() -> ()#>, b: <#T##() -> ()#>)
// CHECK:      withMulti2UnlabeledFirst {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

withMulti2UnlabeledFirst(_: <#T##() -> ()#>, b: <#T##() -> ()#>)
// CHECK:      withMulti2UnlabeledFirst {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

// FIXME: we may ban second argument unlabeled.
withMulti2Unlabeled(_: <#T##() -> ()#>, _: <#T##() -> ()#>)
// CHECK:      withMulti2Unlabeled {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } _: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

// FIXME: we may ban second argument unlabeled.
withMulti2Unlabeled(<#T##() -> ()#>, <#T##() -> ()#>)
// CHECK:      withMulti2Unlabeled {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } _: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

withMulti3SecondArg(a: <#T##__skip__##() -> ()#>, b: <#T##() -> ()#>)
// CHECK:      withMulti3SecondArg {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

withMulti4MiddleArg(a: <#T##() -> ()#>, b: <#T##__skip__##() -> ()#>, c: <#T##() -> ()#>)
// CHECK:      withMulti4MiddleArg {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } c: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

singleAlreadyExpand(a: { print("hi") }, b: <#T##() -> ()#>)
// CHECK:      singleAlreadyExpand(a: { print("hi") }) { 
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

nonTrailing1(a: <#T##() -> ()#>, b: { print("hi") })
// CHECK:      nonTrailing1(a: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }, b: { print("hi") })

nonTrailingAndTrailing1(a: <#T##() -> ()#>, b: { print("hi") }, c: <#T##() -> ()#>)
// CHECK:      nonTrailingAndTrailing1(a: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }, b: { print("hi") }) {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

singleNonClosure(a: <#T##Int#>, b: <#T##() -> ()#>)
// CHECK:      singleNonClosure(a: Int) { 
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

nonTrailing2(a: <#T##() -> ()#>, b: <#T##Int#>)
// CHECK:      nonTrailing2(a: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }, b: Int)

nonTrailingAndTrailing2(a: <#T##() -> ()#>, b: <#T##Int#> c: <#T##() -> ()#>)
// CHECK:      nonTrailingAndTrailing2(a: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }, b: Int) {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }


withTypesAndLabels1(a: <#T##(_ booly: Bool, inty: Int) -> ()#>, b: <#T##(solo: Xyz) -> ()#>)
// CHECK:      withTypesAndLabels1 { booly, inty in
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: { solo in
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

func reset_parser1() {}

withTypes1(a: <#T##(Bool, Int) -> ()#>, b: <#T##() -> Int#>)
// CHECK:      withTypes1 { <#Bool#>, <#Int#> in
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } b: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

func reset_parser2() {}

mixedFull1(arg1: <#T##Something#>, arg2: <#T##Other#>, callback1: <#T##() -> Void#>, callback2: <#T##() -> Void#>)
// CHECK:      mixedFull1(arg1: Something, arg2: Other) {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } callback2: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }

mixedFull2(arg1: 1, arg2: "2"/*comment*/, callback1: <#T##() -> Void#>, callback2: <#T##() -> Void#>)
// CHECK:      mixedFull2(arg1: 1, arg2: "2") {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: } callback2: {
// CHECK-NEXT: <#code#>
// CHECK-NEXT: }
