// 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#kw> <#id>os#id>(<#id>macOS#id>)
// 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: