// RUN: %target-swift-ide-test -syntax-coloring -source-filename %s | %FileCheck %s // RUN: %target-swift-ide-test -syntax-coloring -typecheck -source-filename %s | %FileCheck %s enum List { case Nil // rdar://21927124 // CHECK: indirect case Cons(T, List) indirect case Cons(T, List) } // CHECK: struct S { struct S { // CHECK: var x : Int var x : Int // CHECK: var y : Int.Int var y : Int.Int // CHECK: var a, b : Int var a, b : Int } enum EnumWithDerivedEquatableConformance : Int { // CHECK-LABEL: enum EnumWithDerivedEquatableConformance : {{()}}Int{{()?}} { case CaseA // CHECK-NEXT: case CaseA case CaseB, CaseC // CHECK-NEXT: case CaseB, CaseC case CaseD = 30, CaseE // CHECK-NEXT: case CaseD = 30, CaseE } // CHECK-NEXT: } // CHECK: class MyCls { class MyCls { // CHECK: var www : Int var www : Int // CHECK: func foo(x: Int) {} func foo(x: Int) {} // CHECK: var aaa : Int { var aaa : Int { // CHECK: get {} get {} // CHECK: set {} set {} } // CHECK: var bbb : Int { var bbb : Int { // CHECK: set { set { // CHECK: var tmp : Int var tmp : Int } // CHECK: get { get { // CHECK: var tmp : Int var tmp : Int } } // CHECK: subscript (i : Int, j : Int) -> Int { subscript (i : Int, j : Int) -> Int { // CHECK: get { get { // CHECK: return i + j return i + j } // CHECK: set(v) { set(v) { // CHECK: v + i - j v + i - j } } // CHECK: func multi(_ name: Int, otherpart x: Int) {} func multi(_ name: Int, otherpart x: Int) {} } // CHECK-LABEL: class Attributes { class Attributes { // CHECK: @IBOutlet var v0: Int @IBOutlet var v0: Int // CHECK: @IBOutlet @IBOutlet var v1: String @IBOutlet @IBOutlet var v1: String // CHECK: @objc @IBOutlet var v2: String @objc @IBOutlet var v2: String // CHECK: @IBOutlet @objc var v3: String @IBOutlet @objc var v3: String // CHECK: @available(*, unavailable) func f1() {} @available(*, unavailable) func f1() {} // CHECK: @available(*, unavailable) @IBAction func f2() {} @available(*, unavailable) @IBAction func f2() {} // CHECK: @IBAction @available(*, unavailable) func f3() {} @IBAction @available(*, unavailable) func f3() {} // CHECK: mutating func func_mutating_1() {} mutating func func_mutating_1() {} // CHECK: nonmutating func func_mutating_2() {} nonmutating func func_mutating_2() {} } func stringLikeLiterals() { // CHECK: var us1: UnicodeScalar = "a" var us1: UnicodeScalar = "a" // CHECK: var us2: UnicodeScalar = "ы" var us2: UnicodeScalar = "ы" // CHECK: var ch1: Character = "a" var ch1: Character = "a" // CHECK: var ch2: Character = "あ" var ch2: Character = "あ" // CHECK: var s1 = "abc абвгд あいうえお" var s1 = "abc абвгд あいうえお" } // CHECK: var globComp : Int var globComp : Int { // CHECK: get { get { // CHECK: return 0 return 0 } } // CHECK: func foo(n: Float) -> Int { func foo(n: Float) -> Int { // CHECK: var fnComp : Int var fnComp : Int { // CHECK: get { get { // CHECK: var a: Int // CHECK: return 0 var a: Int return 0 } } // CHECK: var q = {{()?}}MyCls{{()?}}() var q = MyCls() // CHECK: var ee = "yoo"; var ee = "yoo"; // CHECK: return 100009 return 100009 } // CHECK: protocol Prot protocol Prot { // CHECK: typealias Blarg typealias Blarg // CHECK: func protMeth(x: Int) func protMeth(x: Int) // CHECK: var protocolProperty1: Int { get } var protocolProperty1: Int { get } // CHECK: var protocolProperty2: Int { get set } var protocolProperty2: Int { get set } } // CHECK: infix operator *-* : FunnyPrecedence{{$}} infix operator *-* : FunnyPrecedence // CHECK: precedencegroup FunnyPrecedence // CHECK-NEXT: associativity: left{{$}} // CHECK-NEXT: higherThan: MultiplicationPrecedence precedencegroup FunnyPrecedence { associativity: left higherThan: MultiplicationPrecedence } // CHECK: func *-*(l: Int, r: Int) -> Int { return l }{{$}} func *-*(l: Int, r: Int) -> Int { return l } // CHECK: infix operator *-+* : FunnyPrecedence infix operator *-+* : FunnyPrecedence // CHECK: func *-+*(l: Int, r: Int) -> Int { return l }{{$}} func *-+*(l: Int, r: Int) -> Int { return l } // CHECK: infix operator *--*{{$}} infix operator *--* // CHECK: func *--*(l: Int, r: Int) -> Int { return l }{{$}} func *--*(l: Int, r: Int) -> Int { return l } // CHECK: protocol Prot2 : Prot {} protocol Prot2 : Prot {} // CHECK: class SubCls : MyCls, Prot {} class SubCls : MyCls, Prot {} // CHECK: func genFnProt where T.Blarg : Prot2>(_: T) -> Int {}{{$}} func genFn(_: T) -> Int {} func f(x: Int) -> Int { // CHECK: #"This is a raw string"# #"This is a raw string"# // CHECK: ##"This is also a raw string"## ##"This is also a raw string"## // CHECK: ###"This is an unterminated raw string" ###"This is an unterminated raw string" // CHECK: #"""This is a multiline raw string"""# #"""This is a multiline raw string"""# // CHECK: #"This is an \#(interpolated) raw string"# #"This is an \#(interpolated) raw string"# // CHECK: #"This is a raw string with an invalid \##() interpolation"# #"This is a raw string with an invalid \##() interpolation"# // CHECK: "This is string \(genFn({(a:Int -> Int) in a})) interpolation" "This is string \(genFn({(a:Int -> Int) in a})) interpolation" // CHECK: "This is unterminated "This is unterminated // CHECK: "This is unterminated with ignored \(interpolation) in it "This is unterminated with ignored \(interpolation) in it // CHECK: "This is terminated with invalid \(interpolation" + "in it" "This is terminated with invalid \(interpolation" + "in it" // CHECK: """ // CHECK-NEXT: This is a multiline string. // CHECK-NEXT: """ """ This is a multiline string. """ // CHECK: """ // CHECK-NEXT: This is a multiline\( "interpolated" )string // CHECK-NEXT: \( // CHECK-NEXT: """ // CHECK-NEXT: inner // CHECK-NEXT: """ // CHECK-NEXT: ) // CHECK-NEXT: """ """ This is a multiline\( "interpolated" )string \( """ inner """ ) """ // CHECK: "\(1)\(1)" "\(1)\(1)" } // CHECK: func bar(x: Int) -> (Int, Float) { func bar(x: Int) -> (Int, Float) { // CHECK: foo({{()?}}Float{{()?}}()) foo(Float()) } // CHECK: #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) class GenC {} func test() { // CHECK: {{()?}}GenC{{()?}}<Int, Float>() var x = GenC() } // CHECK: typealias MyInt = Int typealias MyInt = Int func test2(x: Int) { // CHECK: "\(x)" "\(x)" } // CHECK: #colorLiteral #colorLiteral // CHECK: class Observers { class Observers { // CHECK: var p1 : Int { var p1 : Int { // CHECK: willSet(newValue) {} willSet(newValue) {} // CHECK: didSet {} didSet {} } // CHECK: var p2 : Int { var p2 : Int { // CHECK: didSet {} didSet {} // CHECK: willSet {} willSet {} } } // CHECK: func test3(o: AnyObject) { func test3(o: AnyObject) { // CHECK: _ = o is MyCls ? o as MyCls : o as! MyCls as MyCls + 1 _ = o is MyCls ? o as MyCls : o as! MyCls as MyCls + 1 } // CHECK: class MySubClass : MyCls { class MySubClass : MyCls { // CHECK: override func foo(x: Int) {} override func foo(x: Int) {} // CHECK: convenience init(a: Int) {} convenience init(a: Int) {} } // CHECK: var g1 = { (x: Int) -> Int in return 0 } var g1 = { (x: Int) -> Int in return 0 } // CHECK: infix operator ~~ { infix operator ~~ {} // CHECK: prefix operator *~~ { prefix operator *~~ {} // CHECK: postfix operator ~~* { postfix operator ~~* {} func test_defer() { defer { // CHECK: let x : Int = 0 let x : Int = 0 } } func test6(x: T) {} // CHECK: func test6Prot>(x: T) {}{{$}} // CHECK: func <#test1#> () {} func <#test1#> () {} func funcTakingFor(for internalName: Int) {} // CHECK: func funcTakingFor(for internalName: Int) {} func funcTakingIn(in internalName: Int) {} // CHECK: func funcTakingIn(in internalName: Int) {} _ = 123 // CHECK: 123 _ = -123 // CHECK: -123 _ = -1 // CHECK: -1 _ = -0x123 // CHECK: -0x123 _ = -3.1e-5 // CHECK: -3.1e-5 "--\"\(x) --" // CHECK: "--\"\(x) --" func keywordAsLabel1(in: Int) {} // CHECK: func keywordAsLabel1(in: Int) {} func keywordAsLabel2(for: Int) {} // CHECK: func keywordAsLabel2(for: Int) {} func keywordAsLabel3(if: Int, for: Int) {} // CHECK: func keywordAsLabel3(if: Int, for: Int) {} func keywordAsLabel4(_: Int) {} // CHECK: func keywordAsLabel4(_: Int) {} func keywordAsLabel5(_: Int, for: Int) {} // CHECK: func keywordAsLabel5(_: Int, for: Int) {} func keywordAsLabel6(if func: Int) {} // CHECK: func keywordAsLabel6(if func: Int) {} func foo1() { // CHECK: func foo1() { keywordAsLabel1(in: 1) // CHECK: keywordAsLabel1(in: 1) keywordAsLabel2(for: 1) // CHECK: keywordAsLabel2(for: 1) keywordAsLabel3(if: 1, for: 2) // CHECK: keywordAsLabel3(if: 1, for: 2) keywordAsLabel5(1, for: 2) // CHECK: keywordAsLabel5(1, for: 2) _ = (if: 0, for: 2) // CHECK: _ = (if: 0, for: 2) _ = (_: 0, _: 2) // CHECK: _ = (_: 0, _: 2) } func foo2(O1 : Int?, O2: Int?, O3: Int?) { guard let _ = O1, var _ = O2, let _ = O3 else { } // CHECK: guard let _ = O1, var _ = O2, let _ = O3 else { } if let _ = O1, var _ = O2, let _ = O3 {} // CHECK: if let _ = O1, var _ = O2, let _ = O3 {} } func keywordInCaseAndLocalArgLabel(_ for: Int, for in: Int, class _: Int) { // CHECK: func keywordInCaseAndLocalArgLabel(_ for: Int, for in: Int, class _: Int) { switch(`for`, `in`) { case (let x, let y): // CHECK: case (let x, let y): print(x, y) @unknown default: // CHECK: @unknown default: () } } // CHECK: class Ownership { class Ownership { // CHECK: weak var w weak var w // CHECK: unowned var u unowned var u // CHECK: unowned(unsafe) var uu unowned(unsafe) var uu } // CHECK: let closure = { [weak x=bindtox, unowned y=bindtoy, unowned(unsafe) z=bindtoz] in } let closure = { [weak x=bindtox, unowned y=bindtoy, unowned(unsafe) z=bindtoz] in } protocol FakeClassRestrictedProtocol : `class` {} // CHECK: protocol FakeClassRestrictedProtocol : `class` {} // FIXME: rdar://42801404: OLD and NEW should be the same '`class`'. // CHECK: func foo() -> some P {} func foo() -> some P {} // CHECK: func foo() -> some P & Q {} func foo() -> some P & Q {}