// 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 _ }