// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GLOBAL_EXPR | %FileCheck %s --check-prefix=GLOBAL_EXPR // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GLOBAL_EXPR | %FileCheck %s --check-prefix=GLOBAL_EXPR // NOTE: To GLOBAL_EXPR twice to test completion from the cache. // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GLOBAL_TYPE | %FileCheck %s --check-prefix=GLOBAL_TYPE // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_MEMBER | %FileCheck %s --check-prefix=EXPR_MEMBER // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_POSTFIX | %FileCheck %s --check-prefix=EXPR_POSTFIX // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=EXPR_IMPLICITMEMBER | %FileCheck %s --check-prefix=EXPR_IMPLICITMEMBER // RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=CALLARG | %FileCheck %s --check-prefix=CALLARG struct MyStruct { init(x: Int) {} var propNormal: Int { fatalError() } var propFunction: () -> MyStruct { fatalError() } func labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows {} func labelName(label: (@autoclosure () -> Int) -> Int) {} func sameName(label label: inout Int) {} func paramName(_ param: Int) {} subscript(param: Int) -> Int { 1 } subscript(label param: Int) -> Int { 1 } static func +(lhs: MyStruct, rhs: MyStruct) -> MyStruct { fatalError() } static var instance: MyStruct { fatalError() } static func create(x: Int) -> MyStruct { fatalError() } } func testGlobal() { #^GLOBAL_EXPR^# } // GLOBAL_EXPR: Begin completions // GLOBAL_EXPR-DAG: Decl[Struct]/CurrModule: MyStruct; name=MyStruct // GLOBAL_EXPR-DAG: Keyword[class]/None: class; name=class // GLOBAL_EXPR-DAG: Keyword[enum]/None: enum; name=enum // GLOBAL_EXPR-DAG: Keyword[if]/None: if; name=if // GLOBAL_EXPR-DAG: Keyword[guard]/None: guard; name=guard // GLOBAL_EXPR-DAG: Keyword[try]/None: try; name=try // GLOBAL_EXPR-DAG: Keyword[try]/None: try!; name=try! // GLOBAL_EXPR-DAG: Keyword/None: Any; name=Any // GLOBAL_EXPR-DAG: Literal[Integer]/None: 0; name=0 // GLOBAL_EXPR-DAG: Literal[Boolean]/None: true; name=true // GLOBAL_EXPR-DAG: Literal[Boolean]/None: false; name=false // GLOBAL_EXPR-DAG: Literal[Nil]/None: nil; name=nil // GLOBAL_EXPR-DAG: Literal[String]/None: "abc"; name="abc" // GLOBAL_EXPR-DAG: Literal[Array]/None: [values]; name=[values] // GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [key: value]; name=[key: value] // GLOBAL_EXPR-DAG: Literal[_Color]/None: #colorLiteral(red: Float, green: Float, blue: Float, alpha: Float); name=#colorLiteral(red: Float, green: Float, blue: Float, alpha: Float) // GLOBAL_EXPR-DAG: Literal[_Image]/None: #imageLiteral(resourceName: String); name=#imageLiteral(resourceName: String) // GLOBAL_EXPR-DAG: Literal[Tuple]/None: (values); name=(values) // GLOBAL_EXPR-DAG: Keyword[#function]/None: #function; name=#function // GLOBAL_EXPR-DAG: Decl[Module]/None: Swift; name=Swift // GLOBAL_EXPR-DAG: Decl[Struct]/OtherModule[Swift]: Int; name=Int // GLOBAL_EXPR-DAG: Decl[FreeFunction]/OtherModule[Swift]: print(_ items: Any..., to output: &TextOutputStream); name=print(items: Any..., to: &TextOutputStream) // GLOBAL_EXPR: End completions func testType(value: #^GLOBAL_TYPE^#) {} // GLOBAL_TYPE: Begin completions // GLOBAL_TYPE-DAG: Keyword/None: Any; name=Any // GLOBAL_TYPE-DAG: Decl[Struct]/CurrModule: MyStruct; name=MyStruct // GLOBAL_TYPE-DAG: Decl[Module]/None: swift_ide_test; name=swift_ide_test // GLOBAL_TYPE-DAG: Decl[Module]/None: Swift; name=Swift // GLOBAL_TYPE-DAG: Decl[Struct]/OtherModule[Swift]: Int; name=Int // GLOBAL_TYPE: End completions func testMember(value: MyStruct) { value.#^EXPR_MEMBER^# } // EXPR_MEMBER: Begin completions, 7 items // EXPR_MEMBER-DAG: Keyword[self]/CurrNominal: self; name=self // EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propNormal; name=propNormal // EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propFunction; name=propFunction // EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows // EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); name=labelName(label: (@autoclosure () -> Int) -> Int) // EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); name=sameName(label: &Int) // EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); name=paramName(param: Int) // EXPR_MEMBER: End completions func testPostfix(value: MyStruct) { value #^EXPR_POSTFIX^# } // EXPR_POSTFIX: Begin completions, 10 items // EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propNormal; name=propNormal // EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propFunction; name=propFunction // EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; name=labelNameParamName(label: (inout Int) throws -> MyStruct) rethrows // EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); name=labelName(label: (@autoclosure () -> Int) -> Int) // EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); name=sameName(label: &Int) // EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); name=paramName(param: Int) // EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [_ param: Int]; name=[param: Int] // EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [label param: Int]; name=[label: Int] // EXPR_POSTFIX-DAG: Keyword[self]/CurrNominal: self; name=self // EXPR_POSTFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: +; name=+ MyStruct // EXPR_POSTFIX: End completions func testImplicitMember() -> MyStruct { return .#^EXPR_IMPLICITMEMBER^# } // EXPR_IMPLICITMEMBER: Begin completions, 3 items // EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init(x: Int); name=init(x: Int) // EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/CurrNominal/TypeRelation[Identical]: instance; name=instance // EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/CurrNominal/TypeRelation[Identical]: create(x: Int); name=create(x: Int) // EXPR_IMPLICITMEMBER: End completions func testArgument() -> MyStruct { func foo(x: Int, y: Int) {} foo(x: 1, #^CALLARG^# } // CALLARG: Begin completions, 1 items // CALLARG-DAG: Pattern/ExprSpecific: y: Int; name=y: Int // CALLARG: End completions