// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_CLOSURE_TOP | %FileCheck %s -check-prefix=IN_CLOSURE_TOP // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_CLOSURE_NONTOP | %FileCheck %s -check-prefix=IN_CLOSURE_TOP // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_CLOSURE_COLOR_CONTEXT | %FileCheck %s -check-prefix=IN_CLOSURE_COLOR_CONTEXT struct Tagged { let tag: Tag let entity: Entity static func fo } protocol Taggable { } extension Taggable { func tag(_ tag: Tag) -> Tagged { return Tagged(tag: tag, entity: self) } } extension Int: Taggable { } extension String: Taggable { } @_functionBuilder struct TaggedBuilder { static func buildBlock() -> () { } static func buildBlock(_ t1: Tagged) -> Tagged { return t1 } static func buildBlock(_ t1: Tagged, _ t2: Tagged) -> (Tagged, Tagged) { return (t1, t2) } static func buildBlock(_ t1: Tagged, _ t2: Tagged, _ t2: Tagged) -> (Tagged, Tagged, Tagged) { return (t1, t2, t3) } } enum Color { case red, green, blue } func acceptColorTagged(@TaggedBuilder body: (Color) -> Result) { print(body(.blue)) } var globalIntVal: Int = 1 let globalStringVal: String = "" func testAcceptColorTagged(paramIntVal: Int, paramStringVal: String) { let taggedValue = paramIntVal.tag(Color.red) acceptColorTagged { color in #^IN_CLOSURE_TOP^# // IN_CLOSURE_TOP_CONTEXT: Begin completions // IN_CLOSURE_TOP-DAG: Decl[LocalVar]/Local{{.*}}: taggedValue[#Tagged#]; name=taggedValue // IN_CLOSURE_TOP-DAG: Decl[GlobalVar]/CurrModule: globalIntVal[#Int#]; name=globalIntVal // IN_CLOSURE_TOP-DAG: Decl[GlobalVar]/CurrModule: globalStringVal[#String#]; name=globalStringVal // IN_CLOSURE_TOP-DAG: Decl[LocalVar]/Local: color{{.*}}; name=color // IN_CLOSURE_TOP-DAG: Decl[LocalVar]/Local: paramIntVal[#Int#]; name=paramIntVal // IN_CLOSURE_TOP-DAG: Decl[LocalVar]/Local: paramStringVal[#String#]; name=paramStringVal // IN_CLOSURE_TOP: End completions } acceptColorTagged { color in paramIntVal.tag(.red) #^IN_CLOSURE_NONTOP^# // Same as IN_CLOSURE_TOP. } acceptColorTagged { color in paramIntVal.tag(#^IN_CLOSURE_COLOR_CONTEXT^#) // IN_CLOSURE_COLOR_CONTEXT: Begin completions // IN_CLOSURE_COLOR_CONTEXT-DAG: Decl[LocalVar]/Local: color; name=color // IN_CLOSURE_COLOR_CONTEXT-DAG: Decl[LocalVar]/Local: taggedValue[#Tagged#]; name=taggedValue // IN_CLOSURE_COLOR_CONTEXT-DAG: Decl[LocalVar]/Local: paramIntVal[#Int#]; name=paramIntVal // IN_CLOSURE_COLOR_CONTEXT-DAG: Decl[LocalVar]/Local: paramStringVal[#String#]; name=paramStringVal // IN_CLOSURE_COLOR_CONTEXT: End completions } } enum MyEnum { case east, west case north, south } @_functionBuilder struct EnumToVoidBuilder { static func buildBlock() {} static func buildBlock(_ :MyEnum) {} static func buildBlock(_ :MyEnum, _: MyEnum) {} static func buildBlock(_ :MyEnum, _: MyEnum, _: MyEnum) {} } func acceptBuilder(@EnumToVoidBuilder body: () -> Void) {}