mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
332 lines
14 KiB
Swift
332 lines
14 KiB
Swift
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_CLOSURE_PARAM_1 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_CLOSURE_PARAM_2 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_1 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_2 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_3 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_4 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_5 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_PARENT_PARAM_6 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RETURN_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_2 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_3 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_4 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_5 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_6 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_7 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_8 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_9 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DELAYED_10 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS_AND_LOCAL1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_2 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_3 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_4 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_5 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_6 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_7 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_8 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_9 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_10 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_11 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_12 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_13 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_14 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_15 | FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_16 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_17 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_18 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_TRAILING_CLOSURE_19 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_INHERITANCE_IN_CLOSURE_0 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLASS_INHERITANCE_IN_CLOSURE_0 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARGUMENT_TYPE_IN_CLOSURE_0 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_INHERITANCE_IN_CLOSURE_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLASS_INHERITANCE_IN_CLOSURE_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARGUMENT_TYPE_IN_CLOSURE_1 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_INHERITANCE_IN_CLOSURE_2 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLASS_INHERITANCE_IN_CLOSURE_2 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARGUMENT_TYPE_IN_CLOSURE_2 | FileCheck %s -check-prefix=WITH_GLOBAL_DECLS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLOSURE_PARAM_1 | FileCheck %s -check-prefix=CLOSURE_PARAM_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLOSURE_PARAM_2 | FileCheck %s -check-prefix=CLOSURE_PARAM_2
|
|
|
|
// ERROR_COMMON: found code completion token
|
|
// ERROR_COMMON-NOT: Begin completions
|
|
|
|
//===--- Helper types that are used in this test
|
|
|
|
struct FooStruct {
|
|
var instanceVar : Int
|
|
|
|
func instanceFunc0() {}
|
|
}
|
|
|
|
// FOO_OBJECT_DOT: Begin completions
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: End completions
|
|
|
|
// WITH_GLOBAL_DECLS: Begin completions
|
|
// WITH_GLOBAL_DECLS: Decl[Struct]/CurrModule: FooStruct[#FooStruct#]{{; name=.+$}}
|
|
// WITH_GLOBAL_DECLS: End completions
|
|
|
|
//===--- Check that we can resolve closure parameters.
|
|
|
|
func testResolveClosureParam1() {
|
|
var x = { (fs: FooStruct) in fs.#^RESOLVE_CLOSURE_PARAM_1^# }
|
|
}
|
|
|
|
func testResolveClosureParam2() {
|
|
{ (fs: FooStruct) in fs.#^RESOLVE_CLOSURE_PARAM_2^# }
|
|
}
|
|
|
|
//===--- Check that we can resolve parent function parameters.
|
|
|
|
func testResolveParentParam1(fs: FooStruct) {
|
|
{ (a: Int) in fs.#^RESOLVE_PARENT_PARAM_1^# }
|
|
}
|
|
|
|
func testResolveParentParam2(fs: FooStruct) {
|
|
{ fs.#^RESOLVE_PARENT_PARAM_2^# }
|
|
}
|
|
|
|
class TestResolveParentParam3 {
|
|
func testResolveParentParam3a(fs: FooStruct) {
|
|
{ (a: Int) in fs.#^RESOLVE_PARENT_PARAM_3^# }
|
|
}
|
|
}
|
|
|
|
class TestResolveParentParam4 {
|
|
func testResolveParentParam4a(fs: FooStruct) {
|
|
{ fs.#^RESOLVE_PARENT_PARAM_4^# }
|
|
}
|
|
}
|
|
|
|
func testResolveParentParam5(fs: FooStruct) {
|
|
func testResolveParentParam5a() {
|
|
{ fs.#^RESOLVE_PARENT_PARAM_5^# }
|
|
}
|
|
}
|
|
|
|
func testResolveParentParam6() {
|
|
func testResolveParentParam6a(fs: FooStruct) {
|
|
{ fs.#^RESOLVE_PARENT_PARAM_6^# }
|
|
}
|
|
}
|
|
|
|
//===--- Test completion in various statements in closures.
|
|
|
|
func testReturnInClosure1() {
|
|
var f = { () -> Int in
|
|
return #^RETURN_1^#
|
|
}
|
|
}
|
|
|
|
//===--- Test that we do delayed parsing of closures.
|
|
|
|
var topLevelClosure1 = { #^DELAYED_1^# }
|
|
|
|
var topLevelClosure2 = { func f() { #^DELAYED_2^# } }
|
|
|
|
var topLevelClosure3 = { class C { func f() { #^DELAYED_3^# } } }
|
|
|
|
class ClassWithClosureMember1 {
|
|
var c1 = { #^DELAYED_4^# }
|
|
lazy var c2 = { #^DELAYED_5^# }
|
|
var c3 = ({ #^DELAYED_6^# })()
|
|
lazy var c4 = ({ #^DELAYED_7^# })()
|
|
}
|
|
|
|
struct NestedStructWithClosureMember1 {
|
|
struct Nested {
|
|
var c1 = { #^DELAYED_8^# }
|
|
lazy var c2 = { #^DELAYED_9^# }
|
|
}
|
|
}
|
|
|
|
// WITH_GLOBAL_DECLS_AND_LOCAL1: Begin completions
|
|
// WITH_GLOBAL_DECLS_AND_LOCAL1: Decl[LocalVar]/Local: x[#Int#]
|
|
// WITH_GLOBAL_DECLS_AND_LOCAL1: Decl[Struct]/CurrModule: FooStruct[#FooStruct#]{{; name=.+$}}
|
|
// WITH_GLOBAL_DECLS_AND_LOCAL1: End completions
|
|
|
|
struct StructWithClosureMemberAndLocal {
|
|
var c = {
|
|
var x = 0
|
|
#^DELAYED_10^#
|
|
}
|
|
}
|
|
|
|
func acceptsTrailingClosureFooVoid(code: (FooStruct) -> Void) {}
|
|
|
|
acceptsTrailingClosureFooVoid {
|
|
#^IN_TRAILING_CLOSURE_1^#
|
|
}
|
|
|
|
acceptsTrailingClosureFooVoid {
|
|
$0.#^IN_TRAILING_CLOSURE_2^#
|
|
}
|
|
|
|
acceptsTrailingClosureFooVoid {
|
|
item in #^IN_TRAILING_CLOSURE_3^#
|
|
}
|
|
|
|
acceptsTrailingClosureFooVoid {
|
|
item in item.#^IN_TRAILING_CLOSURE_4^#
|
|
}
|
|
|
|
acceptsTrailingClosureFooVoid {
|
|
item in
|
|
item.instanceFunc0()
|
|
item.#^IN_TRAILING_CLOSURE_5^#
|
|
}
|
|
|
|
func acceptsListAndTrailingClosureFooVoid(
|
|
list: [FooStruct], code: (FooStruct) -> Void) {
|
|
}
|
|
|
|
acceptsListAndTrailingClosureFooVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
#^IN_TRAILING_CLOSURE_6^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureFooVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
$0.#^IN_TRAILING_CLOSURE_7^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureFooVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in #^IN_TRAILING_CLOSURE_8^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureFooVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in item.#^IN_TRAILING_CLOSURE_9^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureFooVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in
|
|
item.instanceFunc0()
|
|
item.#^IN_TRAILING_CLOSURE_10^#
|
|
}
|
|
|
|
func acceptsListAndTrailingClosureTVoid<T>(list: [T], code: (T) -> Void) {}
|
|
|
|
acceptsListAndTrailingClosureTVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
#^IN_TRAILING_CLOSURE_11^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureTVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
$0.#^IN_TRAILING_CLOSURE_12^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureTVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in #^IN_TRAILING_CLOSURE_13^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureTVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in item.#^IN_TRAILING_CLOSURE_14^#
|
|
}
|
|
|
|
acceptsListAndTrailingClosureTVoid(
|
|
[ FooStruct(instanceVar: 0), FooStruct(instanceVar: 0) ]) {
|
|
item in
|
|
item.instanceFunc0()
|
|
item.#^IN_TRAILING_CLOSURE_15^#
|
|
}
|
|
|
|
func getInt() -> Int? { return 0 }
|
|
func testAcceptsTrailingClosureInt1() {
|
|
acceptsTrailingClosureFooVoid { #^IN_TRAILING_CLOSURE_16^# in
|
|
if let myvar = getInt() {
|
|
}
|
|
}
|
|
}
|
|
func testAcceptsTrailingClosureInt2() {
|
|
acceptsTrailingClosureFooVoid {
|
|
#^IN_TRAILING_CLOSURE_17^#
|
|
if let myvar = getInt() {
|
|
}
|
|
}
|
|
}
|
|
func testAcceptsTrailingClosureInt3() {
|
|
acceptsTrailingClosureFooVoid {
|
|
if let myvar = getInt() {
|
|
}
|
|
#^IN_TRAILING_CLOSURE_18^#
|
|
}
|
|
}
|
|
func testAcceptsTrailingClosureInt4() {
|
|
acceptsTrailingClosureFooVoid {
|
|
if let myvar = getInt() {
|
|
#^IN_TRAILING_CLOSURE_19^#
|
|
}
|
|
}
|
|
}
|
|
|
|
func testTypeInClosure1() {
|
|
acceptsTrailingClosureFooVoid {
|
|
struct S : #^STRUCT_INHERITANCE_IN_CLOSURE_0^#
|
|
}
|
|
}
|
|
func testTypeInClosure2() {
|
|
acceptsTrailingClosureFooVoid {
|
|
class S : #^CLASS_INHERITANCE_IN_CLOSURE_0^#
|
|
}
|
|
}
|
|
func testTypeInClosure3() {
|
|
acceptsTrailingClosureFooVoid {
|
|
func test(x: #^ARGUMENT_TYPE_IN_CLOSURE_0^#
|
|
}
|
|
}
|
|
acceptsTrailingClosureFooVoid {
|
|
struct S : #^STRUCT_INHERITANCE_IN_CLOSURE_1^#
|
|
}
|
|
acceptsTrailingClosureFooVoid {
|
|
class S : #^CLASS_INHERITANCE_IN_CLOSURE_1^#
|
|
}
|
|
acceptsTrailingClosureFooVoid {
|
|
func test(x: #^ARGUMENT_TYPE_IN_CLOSURE_1^#
|
|
}
|
|
|
|
struct LazyVar1 {
|
|
lazy var x: Int = {
|
|
struct S : #^STRUCT_INHERITANCE_IN_CLOSURE_2^#
|
|
}()
|
|
}
|
|
struct LazyVar2 {
|
|
lazy var x: Int = {
|
|
class S : #^CLASS_INHERITANCE_IN_CLOSURE_2^#
|
|
}()
|
|
}
|
|
struct LazyVar3 {
|
|
lazy var x: Int = {
|
|
func test(x: #^ARGUMENT_TYPE_IN_CLOSURE_2^#
|
|
}()
|
|
}
|
|
|
|
func closureTaker(theFunc:(theValue:Int) -> ()) {}
|
|
func closureTaker2(theFunc: (Value1:Int, Value2:Int) -> ()) {}
|
|
func testClosureParam1() {
|
|
closureTaker { (theValue) -> () in
|
|
#^CLOSURE_PARAM_1^#
|
|
}
|
|
}
|
|
// CLOSURE_PARAM_1: Begin completions
|
|
// CLOSURE_PARAM_1-DAG: Decl[LocalVar]/Local: theValue[#(Int)#]{{; name=.+$}}
|
|
func testClosureParam2() {
|
|
closureTaker2 { (Value1, Value2) -> () in
|
|
#^CLOSURE_PARAM_2^#
|
|
}
|
|
}
|
|
// CLOSURE_PARAM_2: Begin completions
|
|
// CLOSURE_PARAM_2-DAG: Decl[LocalVar]/Local: Value1[#Int#]{{; name=.+$}}
|
|
// CLOSURE_PARAM_2-DAG: Decl[LocalVar]/Local: Value2[#Int#]{{; name=.+$}}
|