// RUN: %swift-ide-test -structure -source-filename %s | %FileCheck %s // CHECK: class MyCls : OtherClass { // CHECK: var bar : Int // CHECK: var anotherBar : Int = 42 // CHECK: class var cbar : Int = 0 class MyCls : OtherClass { var bar : Int var anotherBar : Int = 42 class var cbar : Int = 0 // CHECK: func foo(_ arg1: Int, name: String, param par: String) { // CHECK: var abc // CHECK: if 1 { // CHECK: foo(1, name:"test", param:"test2") // CHECK: } // CHECK: } func foo(_ arg1: Int, name: String, param par: String) { var abc if 1 { foo(1, name:"test", param:"test2") } } // CHECK: init (x: Int) init (x: Int) // CHECK: class func cfoo() class func cfoo() // CHECK: } } // CHECK: struct MyStruct { // CHECK: var myVar: Int // CHECK: static var sbar : Int = 0 // CHECK: static func cfoo() // CHECK: } struct MyStruct { var myVar: Int static var sbar : Int = 0 static func cfoo() } enum MyError: Error { case x } // CHECK: protocol MyProt { // CHECK: func foo() // CHECK: func foo2() throws // CHECK: func foo3() throws -> Int // FIXME: The end of the source range needs to be advanced past the ')' here! // CHECK: func foo4() throws(MyError) // CHECK: func foo5<T>() where T: MyProt // CHECK: init() // CHECK: init(a: Int) throws // CHECK: init<T>(a: T) where T: MyProt // CHECK: } protocol MyProt { func foo() func foo2() throws func foo3() throws -> Int func foo4() throws(MyError) func foo5() where T: MyProt init() init(a: Int) throws init(a: T) where T: MyProt } // CHECK: extension MyStruct { // CHECK: func foo() { // CHECK: } // CHECK: } extension MyStruct { func foo() { } } // CHECK: var gvar : Int = 0 var gvar : Int = 0 // CHECK: func ffoo() {} func ffoo() {} // CHECK: for i in 0...5 {} for i in 0...5 {} // CHECK: for var (i, j) in array {} for var (i, j) in array {} // CHECK: while var v = o, z = o where v > z {} while var v = o, z = o where v > z {} // CHECK: while v == 0 {} while v == 0 {} // CHECK: repeat {} while v == 0 repeat {} while v == 0 // CHECK: if var v = o, z = o where v > z {} if var v = o, z = o where v > z {} // CHECK: switch v { // CHECK: case 1: break; // CHECK: case 2, 3: break; // CHECK: case Foo(var x, var y) where x < y: break; // CHECK: case 2 where foo(), 3 where bar(): break; // CHECK: default: break; // CHECK: } switch v { case 1: break; case 2, 3: break; case Foo(var x, var y) where x < y: break; case 2 where foo(), 3 where bar(): break; default: break; } // CHECK: let myArray = [1, 2, 3] let myArray = [1, 2, 3] // CHECK: let myDict = [1:1, 2:2, 3:3] let myDict = [1:1, 2:2, 3:3] // CHECK: let myArray2 = [1] let myArray2 = [1] // CHECK: let myDict2 = [1:1] let myDict2 = [1:1] // CHECK: for {} for {} // CHECK: class <#MyCls#> : <#OtherClass#> {} class <#MyCls#> : <#OtherClass#> {} // CHECK: func <#test1#> () { // CHECK: for <#name#> in <#items#> {} // CHECK: } func <#test1#> () { for <#name#> in <#items#> {} } // CHECK: let myArray = [<#item1#>, <#item2#>] let myArray = [<#item1#>, <#item2#>] // CHECK: func test1() { // CHECK: dispatch_async(dispatch_get_main_queue(), {}) // CHECK: dispatch_async(dispatch_get_main_queue()) {} // CHECK: } func test1() { dispatch_async(dispatch_get_main_queue(), {}) dispatch_async(dispatch_get_main_queue()) {} } // CHECK: enum SomeEnum { // CHECK: case North // CHECK: case South, East // CHECK: case QRCode(String) // CHECK: case // CHECK: } enum SomeEnum { case North case South, East case QRCode(String) case } // CHECK: enum Rawness : Int { // CHECK: case One = 1 // CHECK: case Two = 2, Three = 3 // CHECK: } enum Rawness : Int { case One = 1 case Two = 2, Three = 3 } // CHECK: func rethrowFunc(_ f: () throws -> () = {}) rethrows {} func rethrowFunc(_ f: () throws -> () = {}) rethrows {} class NestedPoundIf{ func foo1() { #if os(macOS) var a = 1 #if USE_METAL var b = 2 #if os(iOS) var c = 3 #else var c = 3 #endif #else var b = 2 #endif #else var a = 1 #endif } func foo2() {} func foo3() {} } // CHECK: func foo2() {} // CHECK: func foo3() {} class A { func foo(_ i : Int, animations: () -> ()) {} func perform() {foo(5, animations: {})} // CHECK: func perform() {foo(5, animations: {})} } // CHECK: typealias OtherA = A typealias OtherA = A // CHECK: typealias EqBox<Boxed> = Box where Boxed: Equatable typealias EqBox = Box where Boxed: Equatable class SubscriptTest { subscript(index: Int) -> Int { return 0 } // CHECK: subscript(index: Int) -> Int { // CHECK: return 0 // CHECK: } subscript(string: String) -> Int { get { return 0 } set(value) { print(value) } } // CHECK: subscript(string: String) -> Int { // CHECK: get { // CHECK: return 0 // CHECK: } // CHECK: set(value) { // CHECK: print(value) // CHECK: } } class ReturnType { func foo() -> Int { return 0 } // CHECK: func foo() -> Int { // CHECK: return 0 // CHECK: } func foo2() -> T {} // CHECK: func foo2<T>() -> T {} func foo3() -> () -> Int {} // CHECK: func foo3() -> () -> Int {} } protocol FooProtocol { associatedtype Bar // CHECK: associatedtype Bar associatedtype Baz: Equatable // CHECK: associatedtype Baz: Equatable associatedtype Qux where Qux: Equatable // CHECK: associatedtype Qux where Qux: Equatable associatedtype Bar2 = Int // CHECK: associatedtype Bar2 = Int associatedtype Baz2: Equatable = Int // CHECK: associatedtype Baz2: Equatable = Int associatedtype Qux2 = Int where Qux2: Equatable // CHECK: associatedtype Qux2 = Int where Qux2: Equatable } // CHECK: struct Generic<T: Comparable, X> { // CHECK: subscript<U>(generic: U) -> Int { return 0 } // CHECK: typealias Foo<Y> = Bar // CHECK: } struct Generic { subscript(generic: U) -> Int { return 0 } typealias Foo = Bar } a.b(c: d?.e?.f, g: h) // CHECK: a.b(c: d?.e?.f, g: h) struct Tuples { var foo: (Int, String) { return (1, "test") // CHECK: (1, "test") } func foo2() { foo3(x: (1, 20)) // CHECK: foo3(x: (1, 20)) let y = (x, foo4(a: 0)) // CHECK: let y = (x, foo4(a: 0)) let z = (name1: 1, name2: 2) // CHECK: let z = (name1: 1, name2: 2) } } completion(a: 1) { (x: Any, y: Int) -> Int in return x as! Int + y } // CHECK: completion(a: 1) { (x: Any, y: Int) -> Int in // CHECK: return x as! Int + y // CHECK: } myFunc(foo: 0, bar: baz == 0) // CHECK: myFunc(foo: 0, // CHECK: bar: baz == 0) enum FooEnum { // CHECK: enum FooEnum { case blah(x: () -> () = { // CHECK: case blah(x: () -> () = { @Tuples func foo(x: MyStruct) {} // CHECK: @Tuples func foo(x: MyStruct) {} }) // CHECK: }) } // CHECK: } firstCall("\(1)", 1) // CHECK: firstCall("\(1)", 1) secondCall("\(a: {struct Foo {let x = 10}; return Foo().x}())", 1) // CHECK: secondCall("\(a: {struct Foo {let x = 10}; return Foo().x}())", 1) thirdCall(""" \(""" \({ return a() }()) """) """) // CHECK: thirdCall(""" // CHECK-NEXT: \(""" // CHECK-NEXT: \({ // CHECK-NEXT: return a() // CHECK-NEXT: }()) // CHECK-NEXT: """) // CHECK-NEXT: """) fourthCall(a: @escaping () -> Int) // CHECK: fourthCall(a: @escaping () -> Int) // CHECK: foo { [unowned self, x] in _ } foo { [unowned self, x] in _ }