// 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
// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=GENERIC | %FileCheck %s --check-prefix=GENERIC
// RUN: %swift-ide-test -code-completion -code-completion-annotate-results -source-filename %s -code-completion-token=WHERE | %FileCheck %s --check-prefix=WHERE
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; typename=MyStruct;
// GLOBAL_EXPR-DAG: Keyword[class]/None: class; typename=;
// GLOBAL_EXPR-DAG: Keyword[enum]/None: enum; typename=;
// GLOBAL_EXPR-DAG: Keyword[if]/None: if; typename=;
// GLOBAL_EXPR-DAG: Keyword[guard]/None: guard; typename=;
// GLOBAL_EXPR-DAG: Keyword[try]/None: try; typename=;
// GLOBAL_EXPR-DAG: Keyword[try]/None: try!; typename=;
// GLOBAL_EXPR-DAG: Keyword/None: Any; typename=Any;
// GLOBAL_EXPR-DAG: Literal[Integer]/None: 0; typename=Int;
// GLOBAL_EXPR-DAG: Literal[Boolean]/None: true; typename=Bool;
// GLOBAL_EXPR-DAG: Literal[Boolean]/None: false; typename=Bool;
// GLOBAL_EXPR-DAG: Literal[Nil]/None: nil; typename=;
// GLOBAL_EXPR-DAG: Literal[String]/None: "abc"; typename=String;
// GLOBAL_EXPR-DAG: Literal[Array]/None: [values]; typename=Array;
// GLOBAL_EXPR-DAG: Literal[Dictionary]/None: [key: value]; typename=Dictionary;
// GLOBAL_EXPR-DAG: Literal[_Color]/None: #colorLiteral(red: Float, green: Float, blue: Float, alpha: Float); typename=;
// GLOBAL_EXPR-DAG: Literal[_Image]/None: #imageLiteral(resourceName: String); typename=;
// GLOBAL_EXPR-DAG: Literal[Tuple]/None: (values); typename=;
// GLOBAL_EXPR-DAG: Keyword[#function]/None: #function; typename=String;
// GLOBAL_EXPR-DAG: Decl[Module]/None/IsSystem: Swift; typename=Module;
// GLOBAL_EXPR-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int; typename=Int;
// GLOBAL_EXPR-DAG: Decl[FreeFunction]/OtherModule[Swift]/IsSystem: print(_ items: Any..., to output: &TextOutputStream); typename=Void;
// GLOBAL_EXPR: End completions
func testType(value: #^GLOBAL_TYPE^#) {}
// GLOBAL_TYPE: Begin completions
// GLOBAL_TYPE-DAG: Keyword/None: Any; typename=Any;
// GLOBAL_TYPE-DAG: Decl[Struct]/CurrModule: MyStruct; typename=MyStruct;
// GLOBAL_TYPE-DAG: Decl[Module]/None: swift_ide_test; typename=Module;
// GLOBAL_TYPE-DAG: Decl[Module]/None/IsSystem: Swift; typename=Module;
// GLOBAL_TYPE-DAG: Decl[Struct]/OtherModule[Swift]/IsSystem: Int; typename=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; typename=MyStruct;
// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propNormal; typename=Int;
// EXPR_MEMBER-DAG: Decl[InstanceVar]/CurrNominal: propFunction; typename=() -> MyStruct;
// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; typename=Void;
// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); typename=Void;
// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); typename=Void;
// EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); typename=Void;
// EXPR_MEMBER: End completions
func testPostfix(value: MyStruct) {
value #^EXPR_POSTFIX^#
}
// EXPR_POSTFIX: Begin completions, 10 items
// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propNormal; typename=Int;
// EXPR_POSTFIX-DAG: Decl[InstanceVar]/CurrNominal: propFunction; typename=() -> MyStruct;
// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelNameParamName(label param: (inout Int) throws -> MyStruct) rethrows; typename=Void;
// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: labelName(label: (@autoclosure () -> Int) -> Int); typename=Void;
// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: sameName(label: &Int); typename=Void;
// EXPR_POSTFIX-DAG: Decl[InstanceMethod]/CurrNominal: paramName(_ param: Int); typename=Void;
// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [_ param: Int]; typename=Int;
// EXPR_POSTFIX-DAG: Decl[Subscript]/CurrNominal: [label param: Int]; typename=Int;
// EXPR_POSTFIX-DAG: Keyword[self]/CurrNominal: self; typename=MyStruct;
// EXPR_POSTFIX-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]/IsSystem: +; typename=MyStruct;
// EXPR_POSTFIX: End completions
func testImplicitMember() -> MyStruct {
return .#^EXPR_IMPLICITMEMBER^#
}
// EXPR_IMPLICITMEMBER: Begin completions, 7 items
// EXPR_IMPLICITMEMBER-DAG: Decl[Constructor]/CurrNominal/TypeRelation[Identical]: init(x: Int); typename=MyStruct;
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticVar]/ExprSpecific/TypeRelation[Identical]: instance; typename=MyStruct;
// EXPR_IMPLICITMEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: labelNameParamName(_ self: MyStruct); typename=(label: (inout Int) throws -> MyStruct) -> Void;
// EXPR_IMPLICITMEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: labelName(_ self: MyStruct); typename=(label: (@autoclosure () -> Int) -> Int) -> Void;
// EXPR_IMPLICITMEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: sameName(_ self: MyStruct); typename=(label: inout Int) -> Void;
// EXPR_IMPLICITMEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Invalid]: paramName(_ self: MyStruct); typename=(Int) -> Void;
// EXPR_IMPLICITMEMBER-DAG: Decl[StaticMethod]/ExprSpecific/TypeRelation[Identical]: create(x: Int); typename=MyStruct;
// 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; typename=Int
// CALLARG: End completions
struct TestArchetypeAnnotations {
func foo1(u: U, t: T) {}
func foo2(s: S, elt: S.Element) {}
}
func testArchetypeAnnotations(arg: TestArchetypeAnnotations) {
arg.#^GENERIC^#
}
// GENERIC: Begin completions, 3 items
// GENERIC-DAG: Keyword[self]/CurrNominal: self; typename=TestArchetypeAnnotations<T>; name=self
// GENERIC-DAG: Decl[InstanceMethod]/CurrNominal: foo1(u: U, t: T); typename=Void; name=foo1(u: U, t: T)
// GENERIC-DAG: Decl[InstanceMethod]/CurrNominal: foo2(s: Sequence, elt: Sequence.Element); typename=Void; name=foo2(s: Sequence, elt: Sequence.Element)
// GENERIC: End completions
struct TestGenericParamAnnotations {
func foo1(u: U) where #^WHERE^#
}
// WHERE: Begin completions, 2 items
// WHERE-NEXT: Decl[GenericTypeParam]/Local: T; typename=T; name=T
// WHERE-NEXT: Decl[GenericTypeParam]/Local: U; typename=U; name=U
// WHERE: End completions