// 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 // XFAIL: broken_std_regex #line 17 "abc.swift" // CHECK: #line 17 "abc.swift" @available(iOS 8.0, OSX 10.10, *) // CHECK: @available(iOS 8.0, OSX 10.10, *) func foo() { // CHECK: if #available (OSX 10.10, iOS 8.01, *) {let _ = "iOS"} if #available (OSX 10.10, iOS 8.01, *) {let _ = "iOS"} } 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: /* foo is the best */ /* foo is the best */ // 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 } ///- returns: single-line, no space // CHECK: ///- returns: single-line, no space /// - returns: single-line, 1 space // CHECK: /// - returns: single-line, 1 space /// - returns: single-line, 2 spaces // CHECK: /// - returns: single-line, 2 spaces /// - returns: single-line, more spaces // CHECK: /// - returns: single-line, more spaces // 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: // string interpolation is the best // string interpolation is the best // 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()) } 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: 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: let x = o as! MyCls let x = o as! MyCls } // CHECK: func test4(inout a: Int) {{{$}} func test4(inout a: Int) { // CHECK: if #available (OSX >= 10.10, iOS >= 8.01) {let OSX = "iOS"}}{{$}} if #available (OSX >= 10.10, iOS >= 8.01) {let OSX = "iOS"}} // CHECK: func test4b(a: inout Int) {{{$}} func test4b(a: inout Int) { } // 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 } } // FIXME: blah. // FIXME: blah blah // Something something, FIXME: blah // CHECK: // FIXME: blah. // CHECK: // FIXME: blah blah // CHECK: // Something something, FIXME: blah /* FIXME: blah*/ // CHECK: /* FIXME: blah*/ /* * FIXME: blah * Blah, blah. */ // CHECK: /* // CHECK: * FIXME: blah // CHECK: * Blah, blah. // CHECK: */ // TODO: blah. // TTODO: blah. // MARK: blah. // CHECK: // TODO: blah. // CHECK: // TTODO: blah. // CHECK: // MARK: blah. // CHECK: func test5() -> Int { func test5() -> Int { // CHECK: // TODO: something, something. // TODO: something, something. // CHECK: return 0 return 0 } func test6(x: T) {} // CHECK: func test6Prot>(x: T) {}{{$}} // http://whatever.com?ee=2&yy=1 and radar://123456 /* http://whatever.com FIXME: see in http://whatever.com/fixme http://whatever.com */ // CHECK: // http://whatever.com?ee=2&yy=1 and radar://123456 // CHECK: /* http://whatever.com FIXME: see in http://whatever.com/fixme // CHECK: http://whatever.com */ // CHECK: // http://whatever.com/what-ever // http://whatever.com/what-ever // CHECK: func <#test1#> () {} func <#test1#> () {} /// Brief. /// /// Simple case. /// /// - parameter x: A number /// - parameter y: Another number /// - PaRamEteR z-hyphen-q: Another number /// - parameter : A strange number... /// - parameternope1: Another number /// - parameter nope2 /// - parameter: nope3 /// -parameter nope4: Another number /// * parameter nope5: Another number /// - parameter nope6: Another number /// - Parameters: nope7 /// - seealso: yes /// - seealso: yes /// - seealso: /// -seealso: nope /// - seealso : nope /// - seealso nope /// - returns: `x + y` func foo(x: Int, y: Int) -> Int { return x + y } // CHECK: /// Brief. // CHECK: /// // CHECK: /// Simple case. // CHECK: /// // CHECK: /// - parameter x: A number // CHECK: /// - parameter y: Another number // CHECK: /// - PaRamEteR z-hyphen-q: Another number // CHECK: /// - parameter : A strange number... // CHECK: /// - parameternope1: Another number // CHECK: /// - parameter nope2 // CHECK: /// - parameter: nope3 // CHECK: /// -parameter nope4: Another number // CHECK: /// * parameter nope5: Another number // CHECK: /// - parameter nope6: Another number // CHECK: /// - Parameters: nope7 // CHECK: /// - seealso: yes // CHECK: /// - seealso: yes // CHECK: /// - seealso: // CHECK: /// -seealso: nope // CHECK: /// - seealso : nope // CHECK: /// - seealso nope // CHECK: /// - returns: `x + y` // CHECK: func foo(x: Int, y: Int) -> Int { return x + y } /// Brief. /// /// Simple case. /// /// - Parameters: /// - x: A number /// - y: Another number /// ///- note: NOTE1 /// /// - NOTE: NOTE2 /// - note: Not a Note field (not at top level) /// - returns: `x + y` func bar(x: Int, y: Int) -> Int { return x + y } // CHECK: /// Brief. // CHECK: /// // CHECK: /// Simple case. // CHECK: /// // CHECK: /// - Parameters: // CHECK: /// - x: A number // CHECK: /// - y: Another number // CHECK: /// - returns: `x + y` // CHECK: func bar(x: Int, y: Int) -> Int { return x + y } /** Does pretty much nothing. Not a parameter list: improper indentation. - Parameters: sdfadsf - WARNING: - WARNING: Should only have one field - $$$: Not a field. Empty field, OK: */ func baz() {} // CHECK: /** // CHECK: Does pretty much nothing. // CHECK: Not a parameter list: improper indentation. // CHECK: - Parameters: sdfadsf // CHECK: - WARNING: - WARNING: Should only have one field // CHECK: - $$$: Not a field. // CHECK: Empty field, OK: // CHECK: */ // CHECK: func baz() {} /***/ func emptyDocBlockComment() {} // CHECK: /***/ // CHECK: func emptyDocBlockComment() {} /** */ func emptyDocBlockComment2() {} // CHECK: /** // CHECK: */ // CHECK: func emptyDocBlockComment2() {} /** */ func emptyDocBlockComment3() {} // CHECK: /** */ // CHECK: func emptyDocBlockComment3() {} /**/ func malformedBlockComment(f : () throws -> ()) rethrows {} // CHECK: /**/ // CHECK: func malformedBlockComment(f : () throws -> ()) rethrows {} //: playground doc comment line func playgroundCommentLine(f : () throws -> ()) rethrows {} // CHECK: //: playground doc comment line /*: playground doc comment multi-line */ func playgroundCommentMultiLine(f : () throws -> ()) rethrows {} // CHECK: /*: // CHECK: playground doc comment multi-line // CHECK: */ /// [strict weak ordering](http://en.wikipedia.org/wiki/Strict_weak_order#Strict_weak_orderings) // CHECK: /// [strict weak ordering](http://en.wikipedia.org/wiki/Strict_weak_order#Strict_weak_orderings 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 /** aaa - returns: something */ // CHECK: - returns: something let filename = #file // CHECK: let filename = #file let line = #line // CHECK: let line = #line let column = #column // CHECK: let column = #column let function = #function // CHECK: let function = #function let image = #imageLiteral(resourceName: "cloud.png") // CHECK: let image = #imageLiteral(resourceName: "cloud.png") let file = #fileLiteral(resourceName: "cloud.png") // CHECK: let file = #fileLiteral(resourceName: "cloud.png") let black = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1) // CHECK: let black = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1) let rgb = [#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1), #colorLiteral(red: 0, green: 1, blue: 0, alpha: 1), #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)] // CHECK: let rgb = [#colorLiteral(red: 1, green: 0, blue: 0, alpha: 1), // CHECK: #colorLiteral(red: 0, green: 1, blue: 0, alpha: 1), // CHECK: #colorLiteral(red: 0, green: 0, blue: 1, alpha: 1)] "--\"\(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 let: Int) {} // CHECK: func keywordAsLabel6(if let: 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) } } #if os(macOS) #endif // CHECK: <#kw>#if <#id>os(<#id>macOS) // Keep this as the last test /** Trailing off ... func unterminatedBlockComment() {} // CHECK: // Keep this as the last test // CHECK: /** // CHECK: Trailing off ... // CHECK: func unterminatedBlockComment() {} // CHECK: