blob: dd0e77cc53474abef07b08bcf86cd16fc4c8add0 [file] [log] [blame]
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=OVERRIDE_1 | %FileCheck %s -check-prefix=OVERRIDE_1
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=OVERRIDE_2 | %FileCheck %s -check-prefix=OVERRIDE_2
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=OVERRIDE_3 | %FileCheck %s -check-prefix=OVERRIDE_3
struct Generic<T> {}
protocol MyProtocol {
associatedtype Result
typealias Arg1 = Generic<Self>
typealias Arg2<X> = Generic<X>
typealias Func = () -> Int
func foo<U>(arg1: Arg1, arg2: Arg2<U>, arg3: Arg2<Int>, arg4: [Arg1], arg5: Arg2<U>? arg6: Generic<Arg2<Generic<Arg2<Int>>>>) -> Result
func bar() -> Result
func baz(arg: @escaping Func)
}
struct MyStruct1 : MyProtocol {
// No 'Result' witness.
func #^OVERRIDE_1^#
}
struct MyStruct2 : MyProtocol {
// Explicit 'Result' witness by 'typealias'.
typealias Result = String
func #^OVERRIDE_2^#
}
struct MyStruct3 : MyProtocol {
// Implicit 'Result' witness by inference.
func bar() -> String
func #^OVERRIDE_3^#
}
// OVERRIDE_1: Begin completions, 3 items
// OVERRIDE_1-DAG: Decl[InstanceMethod]/Super: foo<U>(arg1: Arg1, arg2: Arg2<U>, arg3: Arg2<Int>, arg4: [Arg1], arg5: Arg2<U>?, arg6: Generic<Arg2<Generic<Arg2<Int>>>>) -> Result {|};
// OVERRIDE_1-DAG: Decl[InstanceMethod]/Super: bar() -> Result {|};
// OVERRIDE_1-DAG: Decl[InstanceMethod]/Super: baz(arg: @escaping Func) {|};
// OVERRIDE_1: End completions
// OVERRIDE_2: Begin completions, 3 items
// OVERRIDE_2-DAG: Decl[InstanceMethod]/Super: foo<U>(arg1: Arg1, arg2: Arg2<U>, arg3: Arg2<Int>, arg4: [Arg1], arg5: Arg2<U>?, arg6: Generic<Arg2<Generic<Arg2<Int>>>>) -> String {|};
// OVERRIDE_2-DAG: Decl[InstanceMethod]/Super: bar() -> String {|};
// OVERRIDE_2-DAG: Decl[InstanceMethod]/Super: baz(arg: @escaping Func) {|};
// OVERRIDE_2: End completions
// OVERRIDE_3-DAG: Begin completions, 2 items
// OVERRIDE_3-DAG: Decl[InstanceMethod]/Super: foo<U>(arg1: Arg1, arg2: Arg2<U>, arg3: Arg2<Int>, arg4: [Arg1], arg5: Arg2<U>?, arg6: Generic<Arg2<Generic<Arg2<Int>>>>) -> String {|};
// OVERRIDE_3-DAG: Decl[InstanceMethod]/Super: baz(arg: @escaping Func) {|};
// OVERRIDE_3-DAG: End completions