Rules

February 15, 2018 · View on GitHub


Array Init

IdentifierEnabled by defaultSupports autocorrectionKind
array_initDisabledNolint

Prefer using Array(seq) than seq.map { $0 } to convert a sequence into an Array.

Examples

Non Triggering Examples
Array(foo)

foo.map { \$0.0 }

foo.map { \$1 }

foo.map { \$0() }

foo.map { ((), \$0) }

foo.map { \$0! }

foo.map { \$0! /* force unwrap */ }

foo.something { RouteMapper.map(\$0) }

Triggering Examples
↓foo.map({ \$0 })

↓foo.map { \$0 }

↓foo.map { return \$0 }

↓foo.map { elem in
   elem
}

↓foo.map { elem in
   return elem
}

↓foo.map { (elem: String) in
   elem
}

↓foo.map { elem -> String in
   elem
}

↓foo.map { \$0 /* a comment */ }

Attributes

IdentifierEnabled by defaultSupports autocorrectionKind
attributesDisabledNostyle

Attributes should be on their own lines in functions and types, but on the same line as variables and imports.

Examples

Non Triggering Examples
@objc var x: String
@objc private var x: String
@nonobjc var x: String
@IBOutlet private var label: UILabel
@IBOutlet @objc private var label: UILabel
@NSCopying var name: NSString
@NSManaged var name: String?
@IBInspectable var cornerRadius: CGFloat
@available(iOS 9.0, *)
 let stackView: UIStackView
@NSManaged func addSomeObject(book: SomeObject)
@IBAction func buttonPressed(button: UIButton)
@objc
 @IBAction func buttonPressed(button: UIButton)
@available(iOS 9.0, *)
 func animate(view: UIStackView)
@available(iOS 9.0, *, message="A message")
 func animate(view: UIStackView)
@nonobjc
 final class X
@available(iOS 9.0, *)
 class UIStackView
@NSApplicationMain
 class AppDelegate: NSObject, NSApplicationDelegate
@UIApplicationMain
 class AppDelegate: NSObject, UIApplicationDelegate
@IBDesignable
 class MyCustomView: UIView
@testable import SourceKittenFramework
@objc(foo_x)
 var x: String
@available(iOS 9.0, *)
@objc(abc_stackView)
 let stackView: UIStackView
@objc(abc_addSomeObject:)
 @NSManaged func addSomeObject(book: SomeObject)
@objc(ABCThing)
 @available(iOS 9.0, *)
 class Thing
class Foo: NSObject {
 override var description: String { return "" }
}
class Foo: NSObject {

 override func setUp() {}
}
@objc
class ⽺ {}

extension Property {

 @available(*, unavailable, renamed: "isOptional")
public var optional: Bool { fatalError() }
}
@GKInspectable var maxSpeed: Float
@discardableResult
 func a() -> Int
@objc
 @discardableResult
 func a() -> Int
func increase(f: @autoclosure () -> Int) -> Int
func foo(completionHandler: @escaping () -> Void)
Triggering Examples
@objc
 ↓var x: String
@objc

 ↓var x: String
@objc
 private ↓var x: String
@nonobjc
 ↓var x: String
@IBOutlet
 private ↓var label: UILabel
@IBOutlet

 private ↓var label: UILabel
@NSCopying
 ↓var name: NSString
@NSManaged
 ↓var name: String?
@IBInspectable
 ↓var cornerRadius: CGFloat
@available(iOS 9.0, *) ↓let stackView: UIStackView
@NSManaged
 ↓func addSomeObject(book: SomeObject)
@IBAction
 ↓func buttonPressed(button: UIButton)
@IBAction
 @objc
 ↓func buttonPressed(button: UIButton)
@available(iOS 9.0, *) ↓func animate(view: UIStackView)
@nonobjc final ↓class X
@available(iOS 9.0, *) ↓class UIStackView
@available(iOS 9.0, *)
 @objc ↓class UIStackView
@available(iOS 9.0, *) @objc
 ↓class UIStackView
@available(iOS 9.0, *)

 ↓class UIStackView
@UIApplicationMain ↓class AppDelegate: NSObject, UIApplicationDelegate
@IBDesignable ↓class MyCustomView: UIView
@testable
↓import SourceKittenFramework
@testable


↓import SourceKittenFramework
@objc(foo_x) ↓var x: String
@available(iOS 9.0, *) @objc(abc_stackView)
 ↓let stackView: UIStackView
@objc(abc_addSomeObject:) @NSManaged
 ↓func addSomeObject(book: SomeObject)
@objc(abc_addSomeObject:)
 @NSManaged
 ↓func addSomeObject(book: SomeObject)
@available(iOS 9.0, *)
 @objc(ABCThing) ↓class Thing
@GKInspectable
 ↓var maxSpeed: Float
@discardableResult ↓func a() -> Int
@objc
 @discardableResult ↓func a() -> Int
@objc

 @discardableResult
 ↓func a() -> Int

Block Based KVO

IdentifierEnabled by defaultSupports autocorrectionKind
block_based_kvoEnabledNoidiomatic

Prefer the new block based KVO API with keypaths when using Swift 3.2 or later.

Examples

Non Triggering Examples
let observer = foo.observe(\.value, options: [.new]) { (foo, change) in
   print(change.newValue)
}
Triggering Examples
class Foo: NSObject {
   override ↓func observeValue(forKeyPath keyPath: String?, of object: Any?,
                               change: [NSKeyValueChangeKey : Any]?,
                               context: UnsafeMutableRawPointer?) {}
}
class Foo: NSObject {
   override ↓func observeValue(forKeyPath keyPath: String?, of object: Any?,
                               change: Dictionary<NSKeyValueChangeKey, Any>?,
                               context: UnsafeMutableRawPointer?) {}
}

Class Delegate Protocol

IdentifierEnabled by defaultSupports autocorrectionKind
class_delegate_protocolEnabledNolint

Delegate protocols should be class-only so they can be weakly referenced.

Examples

Non Triggering Examples
protocol FooDelegate: class {}

protocol FooDelegate: class, BarDelegate {}

protocol Foo {}

class FooDelegate {}

@objc protocol FooDelegate {}

@objc(MyFooDelegate)
 protocol FooDelegate {}

protocol FooDelegate: BarDelegate {}

protocol FooDelegate: AnyObject {}

protocol FooDelegate: NSObjectProtocol {}

Triggering Examples
↓protocol FooDelegate {}

↓protocol FooDelegate: Bar {}

Closing Brace Spacing

IdentifierEnabled by defaultSupports autocorrectionKind
closing_braceEnabledYesstyle

Closing brace with closing parenthesis should not have any whitespaces in the middle.

Examples

Non Triggering Examples
[].map({ })
[].map(
  { }
)
Triggering Examples
[].map({ ↓} )
[].map({ ↓}	)

Closure End Indentation

IdentifierEnabled by defaultSupports autocorrectionKind
closure_end_indentationDisabledNostyle

Closure end should have the same indentation as the line that started it.

Examples

Non Triggering Examples
SignalProducer(values: [1, 2, 3])
   .startWithNext { number in
       print(number)
   }

[1, 2].map { \$0 + 1 }

return match(pattern: pattern, with: [.comment]).flatMap { range in
   return Command(string: contents, range: range)
}.flatMap { command in
   return command.expand()
}

foo(foo: bar,
    options: baz) { _ in }

someReallyLongProperty.chainingWithAnotherProperty
   .foo { _ in }
foo(abc, 123)
{ _ in }

Triggering Examples
SignalProducer(values: [1, 2, 3])
   .startWithNext { number in
       print(number)
↓}

return match(pattern: pattern, with: [.comment]).flatMap { range in
   return Command(string: contents, range: range)
   ↓}.flatMap { command in
   return command.expand()
↓}

Closure Parameter Position

IdentifierEnabled by defaultSupports autocorrectionKind
closure_parameter_positionEnabledNostyle

Closure parameters should be on the same line as opening brace.

Examples

Non Triggering Examples
[1, 2].map { \$0 + 1 }

[1, 2].map({ \$0 + 1 })

[1, 2].map { number in
 number + 1 
}

[1, 2].map { number -> Int in
 number + 1 
}

[1, 2].map { (number: Int) -> Int in
 number + 1 
}

[1, 2].map { [weak self] number in
 number + 1 
}

[1, 2].something(closure: { number in
 number + 1 
})

let isEmpty = [1, 2].isEmpty()

rlmConfiguration.migrationBlock.map { rlmMigration in
return { migration, schemaVersion in
rlmMigration(migration.rlmMigration, schemaVersion)
}
}
let mediaView: UIView = { [weak self] index in
   return UIView()
}(index)

Triggering Examples
[1, 2].map {
 ↓number in
 number + 1 
}

[1, 2].map {
 ↓number -> Int in
 number + 1 
}

[1, 2].map {
 (↓number: Int) -> Int in
 number + 1 
}

[1, 2].map {
 [weak self] ↓number in
 number + 1 
}

[1, 2].map { [weak self]
 ↓number in
 number + 1 
}

[1, 2].map({
 ↓number in
 number + 1 
})

[1, 2].something(closure: {
 ↓number in
 number + 1 
})

[1, 2].reduce(0) {
 ↓sum, ↓number in
 number + sum 
}

Closure Spacing

IdentifierEnabled by defaultSupports autocorrectionKind
closure_spacingDisabledYesstyle

Closure expressions should have a single space inside each brace.

Examples

Non Triggering Examples
[].map ({ \$0.description })
[].filter { \$0.contains(location) }
extension UITableViewCell: ReusableView { }
extension UITableViewCell: ReusableView {}
Triggering Examples
[].filter(↓{\$0.contains(location)})
[].map(↓{\$0})
(↓{each in return result.contains(where: ↓{e in return e}) }).count
filter ↓{ sorted ↓{ \$0 < \$1}}

Colon

IdentifierEnabled by defaultSupports autocorrectionKind
colonEnabledYesstyle

Colons should be next to the identifier when specifying a type and next to the key in dictionary literals.

Examples

Non Triggering Examples
let abc: Void

let abc: [Void: Void]

let abc: (Void, Void)

let abc: ([Void], String, Int)

let abc: [([Void], String, Int)]

let abc: String="def"

let abc: Int=0

let abc: Enum=Enum.Value

func abc(def: Void) {}

func abc(def: Void, ghi: Void) {}

// 周斌佳年周斌佳
let abc: String = "abc:"
let abc = [Void: Void]()

let abc = [1: [3: 2], 3: 4]

let abc = ["string": "string"]

let abc = ["string:string": "string"]

let abc: [String: Int]

func foo(bar: [String: Int]) {}

func foo() -> [String: Int] { return [:] }

let abc: Any

let abc: [Any: Int]

let abc: [String: Any]

class Foo: Bar {}

class Foo<T: Equatable> {}

switch foo {
case .bar:
    _ = something()
}

object.method(x: 5, y: "string")

object.method(x: 5, y:
              "string")
object.method(5, y: "string")

func abc() { def(ghi: jkl) }
func abc(def: Void) { ghi(jkl: mno) }
class ABC { let def = ghi(jkl: mno) } }
func foo() { let dict = [1: 1] }
Triggering Examples
let ↓abc:Void

let ↓abc:  Void

let ↓abc :Void

let ↓abc : Void

let ↓abc : [Void: Void]

let ↓abc : (Void, String, Int)

let ↓abc : ([Void], String, Int)

let ↓abc : [([Void], String, Int)]

let ↓abc:  (Void, String, Int)

let ↓abc:  ([Void], String, Int)

let ↓abc:  [([Void], String, Int)]

let ↓abc :String="def"

let ↓abc :Int=0

let ↓abc :Int = 0

let ↓abc:Int=0

let ↓abc:Int = 0

let ↓abc:Enum=Enum.Value

func abc(↓def:Void) {}

func abc(↓def:  Void) {}

func abc(↓def :Void) {}

func abc(↓def : Void) {}

func abc(def: Void, ↓ghi :Void) {}

let abc = [Void↓:Void]()

let abc = [Void↓ : Void]()

let abc = [Void↓:  Void]()

let abc = [Void↓ :  Void]()

let abc = [1: [3↓ : 2], 3: 4]

let abc = [1: [3↓ : 2], 3↓:  4]

let abc: [↓String : Int]

let abc: [↓String:Int]

func foo(bar: [↓String : Int]) {}

func foo(bar: [↓String:Int]) {}

func foo() -> [↓String : Int] { return [:] }

func foo() -> [↓String:Int] { return [:] }

let ↓abc : Any

let abc: [↓Any : Int]

let abc: [↓String : Any]

class ↓Foo : Bar {}

class ↓Foo:Bar {}

class Foo<↓T:Equatable> {}

class Foo<↓T : Equatable> {}

object.method(x: 5, y↓ : "string")

object.method(x↓:5, y: "string")

object.method(x↓:  5, y: "string")

func abc() { def(ghi↓:jkl) }
func abc(def: Void) { ghi(jkl↓:mno) }
class ABC { let def = ghi(jkl↓:mno) } }
func foo() { let dict = [1↓ : 1] }

Comma Spacing

IdentifierEnabled by defaultSupports autocorrectionKind
commaEnabledYesstyle

There should be no space before and one after any comma.

Examples

Non Triggering Examples
func abc(a: String, b: String) { }
abc(a: "string", b: "string"
enum a { case a, b, c }
func abc(
  a: String,  // comment
  bcd: String // comment
) {
}

func abc(
  a: String,
  bcd: String
) {
}

Triggering Examples
func abc(a: String↓ ,b: String) { }
func abc(a: String↓ ,b: String↓ ,c: String↓ ,d: String) { }
abc(a: "string"↓,b: "string"
enum a { case a↓ ,b }
let result = plus(
    first: 3↓ , // #683
    second: 4
)

Compiler Protocol Init

IdentifierEnabled by defaultSupports autocorrectionKind
compiler_protocol_initEnabledNolint

The initializers declared in compiler protocols such as ExpressibleByArrayLiteral shouldn't be called directly.

Examples

Non Triggering Examples
let set: Set<Int> = [1, 2]

let set = Set(array)

Triggering Examples
let set = ↓Set(arrayLiteral: 1, 2)

let set = ↓Set.init(arrayLiteral: 1, 2)

Conditional Returns on Newline

IdentifierEnabled by defaultSupports autocorrectionKind
conditional_returns_on_newlineDisabledNostyle

Conditional statements should always return on the next line

Examples

Non Triggering Examples
guard true else {
 return true
}
guard true,
 let x = true else {
 return true
}
if true else {
 return true
}
if true,
 let x = true else {
 return true
}
if textField.returnKeyType == .Next {
if true { // return }
/*if true { */ return }
Triggering Examples
↓guard true else { return }
↓if true { return }
↓if true { break } else { return }
↓if true { break } else {       return }
↓if true { return "YES" } else { return "NO" }

Contains over first not nil

IdentifierEnabled by defaultSupports autocorrectionKind
contains_over_first_not_nilDisabledNoperformance

Prefer contains over first(where:) != nil

Examples

Non Triggering Examples
let first = myList.first(where: { \$0 % 2 == 0 })

let first = myList.first { \$0 % 2 == 0 }

Triggering Examples
↓myList.first { \$0 % 2 == 0 } != nil

↓myList.first(where: { \$0 % 2 == 0 }) != nil

↓myList.map { \$0 + 1 }.first(where: { \$0 % 2 == 0 }) != nil

↓myList.first(where: someFunction) != nil

↓myList.map { \$0 + 1 }.first { \$0 % 2 == 0 } != nil

(↓myList.first { \$0 % 2 == 0 }) != nil

Control Statement

IdentifierEnabled by defaultSupports autocorrectionKind
control_statementEnabledNostyle

if,for,while,do,catch statements shouldn't wrap their conditionals or arguments in parentheses.

Examples

Non Triggering Examples
if condition {

if (a, b) == (0, 1) {

if (a || b) && (c || d) {

if (min...max).contains(value) {

if renderGif(data) {

renderGif(data)

for item in collection {

for (key, value) in dictionary {

for (index, value) in enumerate(array) {

for var index = 0; index < 42; index++ {

guard condition else {

while condition {

} while condition {

do { ; } while condition {

switch foo {

do {
} catch let error as NSError {
}
foo().catch(all: true) {}
Triggering Examples
↓if (condition) {

↓if(condition) {

↓if ((a || b) && (c || d)) {

↓if ((min...max).contains(value)) {

↓for (item in collection) {

↓for (var index = 0; index < 42; index++) {

↓for(item in collection) {

↓for(var index = 0; index < 42; index++) {

↓guard (condition) else {

↓while (condition) {

↓while(condition) {

} ↓while (condition) {

} ↓while(condition) {

do { ; } ↓while(condition) {

do { ; } ↓while (condition) {

↓switch (foo) {

do {
} ↓catch(let error as NSError) {
}

Custom Rules

IdentifierEnabled by defaultSupports autocorrectionKind
custom_rulesEnabledNostyle

Create custom rules by providing a regex string. Optionally specify what syntax kinds to match against, the severity level, and what message to display.

Cyclomatic Complexity

IdentifierEnabled by defaultSupports autocorrectionKind
cyclomatic_complexityEnabledNometrics

Complexity of function bodies should be limited.

Examples

Non Triggering Examples
func f1() {
if true {
for _ in 1..5 { } }
if false { }
}
func f(code: Int) -> Int {switch code {
 case 0: fallthrough
case 0: return 1
case 0: return 1
case 0: return 1
case 0: return 1
case 0: return 1
case 0: return 1
case 0: return 1
case 0: return 1
default: return 1}}
func f1() {if true {}; if true {}; if true {}; if true {}; if true {}; if true {}
func f2() {
if true {}; if true {}; if true {}; if true {}; if true {}
}}
Triggering Examples
↓func f1() {
  if true {
    if true {
      if false {}
    }
  }
  if false {}
  let i = 0

  switch i {
  case 1: break
  case 2: break
  case 3: break
  case 4: break
 default: break
  }
  for _ in 1...5 {
    guard true else {
      return
    }
  }
}

Discarded Notification Center Observer

IdentifierEnabled by defaultSupports autocorrectionKind
discarded_notification_center_observerEnabledNolint

When registering for a notification using a block, the opaque observer that is returned should be stored so it can be removed later.

Examples

Non Triggering Examples
let foo = nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil) { }

let foo = nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil, using: { })

func foo() -> Any {
   return nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil, using: { })
}

Triggering Examples
↓nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil) { }

↓nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil, using: { })

@discardableResult func foo() -> Any {
   return ↓nc.addObserver(forName: .NSSystemTimeZoneDidChange, object: nil, queue: nil, using: { })
}

Discouraged Direct Initialization

IdentifierEnabled by defaultSupports autocorrectionKind
discouraged_direct_initEnabledNolint

Discouraged direct initialization of types that can be harmful.

Examples

Non Triggering Examples
let foo = UIDevice.current
let foo = Bundle.main
let foo = Bundle(path: "bar")
let foo = Bundle(identifier: "bar")
let foo = Bundle.init(path: "bar")
let foo = Bundle.init(identifier: "bar")
Triggering Examples
↓UIDevice()
↓Bundle()
let foo = ↓UIDevice()
let foo = ↓Bundle()
let foo = bar(bundle: ↓Bundle(), device: ↓UIDevice())
↓UIDevice.init()
↓Bundle.init()
let foo = ↓UIDevice.init()
let foo = ↓Bundle.init()
let foo = bar(bundle: ↓Bundle.init(), device: ↓UIDevice.init())

Discouraged Object Literal

IdentifierEnabled by defaultSupports autocorrectionKind
discouraged_object_literalDisabledNoidiomatic

Prefer initializers over object literals.

Examples

Non Triggering Examples
let image = UIImage(named: aVariable)
let image = UIImage(named: "interpolated \(variable)")
let color = UIColor(red: value, green: value, blue: value, alpha: 1)
let image = NSImage(named: aVariable)
let image = NSImage(named: "interpolated \(variable)")
let color = NSColor(red: value, green: value, blue: value, alpha: 1)
Triggering Examples
let image = ↓#imageLiteral(resourceName: "image.jpg")
let color = ↓#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)

Discouraged Optional Boolean

IdentifierEnabled by defaultSupports autocorrectionKind
discouraged_optional_booleanDisabledNoidiomatic

Prefer non-optional booleans over optional booleans.

Examples

Non Triggering Examples
var foo: Bool
var foo: [String: Bool]
var foo: [Bool]
let foo: Bool = true
let foo: Bool = false
let foo: [String: Bool] = [:]
let foo: [Bool] = []
var foo: Bool { return true }
let foo: Bool { return false }()
func foo() -> Bool {}
func foo() -> [String: Bool] {}
func foo() -> ([Bool]) -> String {}
func foo(input: Bool = true) {}
func foo(input: [String: Bool] = [:]) {}
func foo(input: [Bool] = []) {}
class Foo {
	func foo() -> Bool {}
}
class Foo {
	func foo() -> [String: Bool] {}
}
class Foo {
	func foo() -> ([Bool]) -> String {}
}
struct Foo {
	func foo() -> Bool {}
}
struct Foo {
	func foo() -> [String: Bool] {}
}
struct Foo {
	func foo() -> ([Bool]) -> String {}
}
enum Foo {
	func foo() -> Bool {}
}
enum Foo {
	func foo() -> [String: Bool] {}
}
enum Foo {
	func foo() -> ([Bool]) -> String {}
}
class Foo {
	func foo(input: Bool = true) {}
}
class Foo {
	func foo(input: [String: Bool] = [:]) {}
}
class Foo {
	func foo(input: [Bool] = []) {}
}
struct Foo {
	func foo(input: Bool = true) {}
}
struct Foo {
	func foo(input: [String: Bool] = [:]) {}
}
struct Foo {
	func foo(input: [Bool] = []) {}
}
enum Foo {
	func foo(input: Bool = true) {}
}
enum Foo {
	func foo(input: [String: Bool] = [:]) {}
}
enum Foo {
	func foo(input: [Bool] = []) {}
}
Triggering Examples
var foo: ↓Bool?
var foo: [String: ↓Bool?]
var foo: [↓Bool?]
let foo: ↓Bool? = nil
let foo: [String: ↓Bool?] = [:]
let foo: [↓Bool?] = []
let foo = ↓Optional.some(false)
let foo = ↓Optional.some(true)
var foo: ↓Bool? { return nil }
let foo: ↓Bool? { return nil }()
func foo() -> ↓Bool? {}
func foo() -> [String: ↓Bool?] {}
func foo() -> [↓Bool?] {}
static func foo() -> ↓Bool? {}
static func foo() -> [String: ↓Bool?] {}
static func foo() -> [↓Bool?] {}
func foo() -> (↓Bool?) -> String {}
func foo() -> ([Int]) -> ↓Bool? {}
func foo(input: ↓Bool?) {}
func foo(input: [String: ↓Bool?]) {}
func foo(input: [↓Bool?]) {}
static func foo(input: ↓Bool?) {}
static func foo(input: [String: ↓Bool?]) {}
static func foo(input: [↓Bool?]) {}
class Foo {
	var foo: ↓Bool?
}
class Foo {
	var foo: [String: ↓Bool?]
}
class Foo {
	let foo: ↓Bool? = nil
}
class Foo {
	let foo: [String: ↓Bool?] = [:]
}
class Foo {
	let foo: [↓Bool?] = []
}
struct Foo {
	var foo: ↓Bool?
}
struct Foo {
	var foo: [String: ↓Bool?]
}
struct Foo {
	let foo: ↓Bool? = nil
}
struct Foo {
	let foo: [String: ↓Bool?] = [:]
}
struct Foo {
	let foo: [↓Bool?] = []
}
class Foo {
	var foo: ↓Bool? { return nil }
}
class Foo {
	let foo: ↓Bool? { return nil }()
}
struct Foo {
	var foo: ↓Bool? { return nil }
}
struct Foo {
	let foo: ↓Bool? { return nil }()
}
enum Foo {
	var foo: ↓Bool? { return nil }
}
enum Foo {
	let foo: ↓Bool? { return nil }()
}
class Foo {
	func foo() -> ↓Bool? {}
}
class Foo {
	func foo() -> [String: ↓Bool?] {}
}
class Foo {
	func foo() -> [↓Bool?] {}
}
class Foo {
	static func foo() -> ↓Bool? {}
}
class Foo {
	static func foo() -> [String: ↓Bool?] {}
}
class Foo {
	static func foo() -> [↓Bool?] {}
}
class Foo {
	func foo() -> (↓Bool?) -> String {}
}
class Foo {
	func foo() -> ([Int]) -> ↓Bool? {}
}
struct Foo {
	func foo() -> ↓Bool? {}
}
struct Foo {
	func foo() -> [String: ↓Bool?] {}
}
struct Foo {
	func foo() -> [↓Bool?] {}
}
struct Foo {
	static func foo() -> ↓Bool? {}
}
struct Foo {
	static func foo() -> [String: ↓Bool?] {}
}
struct Foo {
	static func foo() -> [↓Bool?] {}
}
struct Foo {
	func foo() -> (↓Bool?) -> String {}
}
struct Foo {
	func foo() -> ([Int]) -> ↓Bool? {}
}
enum Foo {
	func foo() -> ↓Bool? {}
}
enum Foo {
	func foo() -> [String: ↓Bool?] {}
}
enum Foo {
	func foo() -> [↓Bool?] {}
}
enum Foo {
	static func foo() -> ↓Bool? {}
}
enum Foo {
	static func foo() -> [String: ↓Bool?] {}
}
enum Foo {
	static func foo() -> [↓Bool?] {}
}
enum Foo {
	func foo() -> (↓Bool?) -> String {}
}
enum Foo {
	func foo() -> ([Int]) -> ↓Bool? {}
}
class Foo {
	func foo(input: ↓Bool?) {}
}
class Foo {
	func foo(input: [String: ↓Bool?]) {}
}
class Foo {
	func foo(input: [↓Bool?]) {}
}
class Foo {
	static func foo(input: ↓Bool?) {}
}
class Foo {
	static func foo(input: [String: ↓Bool?]) {}
}
class Foo {
	static func foo(input: [↓Bool?]) {}
}
struct Foo {
	func foo(input: ↓Bool?) {}
}
struct Foo {
	func foo(input: [String: ↓Bool?]) {}
}
struct Foo {
	func foo(input: [↓Bool?]) {}
}
struct Foo {
	static func foo(input: ↓Bool?) {}
}
struct Foo {
	static func foo(input: [String: ↓Bool?]) {}
}
struct Foo {
	static func foo(input: [↓Bool?]) {}
}
enum Foo {
	func foo(input: ↓Bool?) {}
}
enum Foo {
	func foo(input: [String: ↓Bool?]) {}
}
enum Foo {
	func foo(input: [↓Bool?]) {}
}
enum Foo {
	static func foo(input: ↓Bool?) {}
}
enum Foo {
	static func foo(input: [String: ↓Bool?]) {}
}
enum Foo {
	static func foo(input: [↓Bool?]) {}
}

Dynamic Inline

IdentifierEnabled by defaultSupports autocorrectionKind
dynamic_inlineEnabledNolint

Avoid using 'dynamic' and '@inline(__always)' together.

Examples

Non Triggering Examples
class C {
dynamic func f() {}}
class C {
@inline(__always) func f() {}}
class C {
@inline(never) dynamic func f() {}}
Triggering Examples
class C {
@inline(__always) dynamic ↓func f() {}
}
class C {
@inline(__always) public dynamic ↓func f() {}
}
class C {
@inline(__always) dynamic internal ↓func f() {}
}
class C {
@inline(__always)
dynamic ↓func f() {}
}
class C {
@inline(__always)
dynamic
↓func f() {}
}

Empty Count

IdentifierEnabled by defaultSupports autocorrectionKind
empty_countDisabledNoperformance

Prefer checking isEmpty over comparing count to zero.

Examples

Non Triggering Examples
var count = 0

[Int]().isEmpty

[Int]().count > 1

[Int]().count == 1

discount == 0

order.discount == 0

Triggering Examples
[Int]().↓count == 0

[Int]().↓count > 0

[Int]().↓count != 0

↓count == 0

Empty Enum Arguments

IdentifierEnabled by defaultSupports autocorrectionKind
empty_enum_argumentsEnabledYesstyle

Arguments can be omitted when matching enums with associated types if they are not used.

Examples

Non Triggering Examples
switch foo {
    case .bar: break
}
switch foo {
    case .bar(let x): break
}
switch foo {
    case let .bar(x): break
}
switch (foo, bar) {
    case (_, _): break
}
switch foo {
    case "bar".uppercased(): break
}
switch (foo, bar) {
    case (_, _) where !something: break
}
switch foo {
    case (let f as () -> String)?: break
}
switch foo {
    default: break
}
Triggering Examples
switch foo {
    case .bar↓(_): break
}
switch foo {
    case .bar↓(): break
}
switch foo {
    case .bar↓(_), .bar2↓(_): break
}
switch foo {
    case .bar↓() where method() > 2: break
}

Empty Parameters

IdentifierEnabled by defaultSupports autocorrectionKind
empty_parametersEnabledYesstyle

Prefer () -> over Void -> .

Examples

Non Triggering Examples
let abc: () -> Void = {}

func foo(completion: () -> Void)

func foo(completion: () thows -> Void)

let foo: (ConfigurationTests) -> Void throws -> Void)

let foo: (ConfigurationTests) ->   Void throws -> Void)

let foo: (ConfigurationTests) ->Void throws -> Void)

Triggering Examples
let abc: ↓(Void) -> Void = {}

func foo(completion: ↓(Void) -> Void)

func foo(completion: ↓(Void) throws -> Void)

let foo: ↓(Void) -> () throws -> Void)

Empty Parentheses with Trailing Closure

IdentifierEnabled by defaultSupports autocorrectionKind
empty_parentheses_with_trailing_closureEnabledYesstyle

When using trailing closures, empty parentheses should be avoided after the method call.

Examples

Non Triggering Examples
[1, 2].map { \$0 + 1 }

[1, 2].map({ \$0 + 1 })

[1, 2].reduce(0) { \$0 + \$1 }
[1, 2].map { number in
 number + 1 
}

let isEmpty = [1, 2].isEmpty()

UIView.animateWithDuration(0.3, animations: {
   self.disableInteractionRightView.alpha = 0
}, completion: { _ in
   ()
})
Triggering Examples
[1, 2].map↓() { \$0 + 1 }

[1, 2].map↓( ) { \$0 + 1 }

[1, 2].map↓() { number in
 number + 1 
}

[1, 2].map↓(  ) { number in
 number + 1 
}

Explicit ACL

IdentifierEnabled by defaultSupports autocorrectionKind
explicit_aclDisabledNoidiomatic

All declarations should specify Access Control Level keywords explicitly.

Examples

Non Triggering Examples
internal enum A {}

public final class B {}

private struct C {}

internal enum A {
 internal enum B {}
}
internal final class Foo {}
internal
class Foo {  private let bar = 5 }
internal func a() { let a =  }

private func a() { func innerFunction() { } }
private enum Foo { enum Bar { } }
private struct C { let d = 5 }
internal protocol A {
    func b()
}
internal protocol A {
    var b: Int
}
internal class A { deinit {} }
Triggering Examples
enum A {}

final class B {}

internal struct C { let d = 5 }

public struct C { let d = 5 }

func a() {}

internal let a = 0
func b() {}

Explicit Enum Raw Value

IdentifierEnabled by defaultSupports autocorrectionKind
explicit_enum_raw_valueDisabledNoidiomatic

Enums should be explicitly assigned their raw values.

Examples

Non Triggering Examples
enum Numbers {
 case int(Int)
 case short(Int16)
}

enum Numbers: Int {
 case one = 1
 case two = 2
}

enum Numbers: Double {
 case one = 1.1
 case two = 2.2
}

enum Numbers: String {
 case one = "one"
 case two = "two"
}

protocol Algebra {}
enum Numbers: Algebra {
 case one
}

Triggering Examples
enum Numbers: Int {
 case one = 10, ↓two, three = 30
}

enum Numbers: NSInteger {
 case ↓one
}

enum Numbers: String {
 case ↓one
 case ↓two
}

enum Numbers: String {
 case ↓one, two = "two"
}

enum Numbers: Decimal {
 case ↓one, ↓two
}

Explicit Init

IdentifierEnabled by defaultSupports autocorrectionKind
explicit_initDisabledYesidiomatic

Explicitly calling .init() should be avoided.

Examples

Non Triggering Examples
import Foundation; class C: NSObject { override init() { super.init() }}
struct S { let n: Int }; extension S { init() { self.init(n: 1) } }
[1].flatMap(String.init)
[String.self].map { \$0.init(1) }
[String.self].map { type in type.init(1) }
Triggering Examples
[1].flatMap{String↓.init(\$0)}
[String.self].map { Type in Type↓.init(1) }

Explicit Top Level ACL

IdentifierEnabled by defaultSupports autocorrectionKind
explicit_top_level_aclDisabledNoidiomatic

Top-level declarations should specify Access Control Level keywords explicitly.

Examples

Non Triggering Examples
internal enum A {}

public final class B {}

private struct C {}

internal enum A {
 enum B {}
}
internal final class Foo {}
internal
class Foo {}
internal func a() {}

Triggering Examples
enum A {}

final class B {}

struct C {}

func a() {}

internal let a = 0
func b() {}

Explicit Type Interface

IdentifierEnabled by defaultSupports autocorrectionKind
explicit_type_interfaceDisabledNoidiomatic

Properties should have a type interface

Examples

Non Triggering Examples
class Foo {
  var myVar: Int? = 0
}

class Foo {
  let myVar: Int? = 0
}

class Foo {
  static var myVar: Int? = 0
}

class Foo {
  class var myVar: Int? = 0
}

Triggering Examples
class Foo {
  ↓var myVar = 0

}

class Foo {
  ↓let mylet = 0

}

class Foo {
  ↓static var myStaticVar = 0
}

class Foo {
  ↓class var myClassVar = 0
}

Extension Access Modifier

IdentifierEnabled by defaultSupports autocorrectionKind
extension_access_modifierDisabledNoidiomatic

Prefer to use extension access modifiers

Examples

Non Triggering Examples
extension Foo: SomeProtocol {
   public var bar: Int { return 1 }
}
extension Foo {
   private var bar: Int { return 1 }
   public var baz: Int { return 1 }
}
extension Foo {
   private var bar: Int { return 1 }
   public func baz() {}
}
extension Foo {
   var bar: Int { return 1 }
   var baz: Int { return 1 }
}
public extension Foo {
   var bar: Int { return 1 }
   var baz: Int { return 1 }
}
extension Foo {
   private bar: Int { return 1 }
   private baz: Int { return 1 }
}
extension Foo {
   open bar: Int { return 1 }
   open baz: Int { return 1 }
}
Triggering Examples
↓extension Foo {
   public var bar: Int { return 1 }
   public var baz: Int { return 1 }
}
↓extension Foo {
   public var bar: Int { return 1 }
   public func baz() {}
}
public extension Foo {
   public ↓func bar() {}
   public ↓func baz() {}
}

Fallthrough

IdentifierEnabled by defaultSupports autocorrectionKind
fallthroughEnabledNoidiomatic

Fallthrough should be avoided.

Examples

Non Triggering Examples
switch foo {
case .bar, .bar2, .bar3:
    something()
}
Triggering Examples
switch foo {
case .bar:
    ↓fallthrough
case .bar2:
    something()
}

Fatal Error Message

IdentifierEnabled by defaultSupports autocorrectionKind
fatal_error_messageDisabledNoidiomatic

A fatalError call should have a message.

Examples

Non Triggering Examples
func foo() {
  fatalError("Foo")
}

func foo() {
  fatalError(x)
}

Triggering Examples
func foo() {
  ↓fatalError("")
}

func foo() {
  ↓fatalError()
}

File Header

IdentifierEnabled by defaultSupports autocorrectionKind
file_headerDisabledNostyle

Header comments should be consistent with project patterns.

Examples

Non Triggering Examples
let foo = "Copyright"
let foo = 2 // Copyright
let foo = 2
 // Copyright
Triggering Examples
// ↓Copyright

//
// ↓Copyright
//
//  FileHeaderRule.swift
//  SwiftLint
//
//  Created by Marcelo Fabri on 27/11/16.
//  ↓Copyright © 2016 Realm. All rights reserved.
//

File Line Length

IdentifierEnabled by defaultSupports autocorrectionKind
file_lengthEnabledNometrics

Files should not span too many lines.

Examples

Non Triggering Examples
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")

Triggering Examples
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")

print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
print("swiftlint")
//

First Where

IdentifierEnabled by defaultSupports autocorrectionKind
first_whereDisabledNoperformance

Prefer using .first(where:) over .filter { }.first in collections.

Examples

Non Triggering Examples
kinds.filter(excludingKinds.contains).isEmpty && kinds.first == .identifier

myList.first(where: { \$0 % 2 == 0 })

match(pattern: pattern).filter { \$0.first == .identifier }

(myList.filter { \$0 == 1 }.suffix(2)).first

Triggering Examples
↓myList.filter { \$0 % 2 == 0 }.first

↓myList.filter({ \$0 % 2 == 0 }).first

↓myList.map { \$0 + 1 }.filter({ \$0 % 2 == 0 }).first

↓myList.map { \$0 + 1 }.filter({ \$0 % 2 == 0 }).first?.something()

↓myList.filter(someFunction).first

↓myList.filter({ \$0 % 2 == 0 })
.first

(↓myList.filter { \$0 == 1 }).first

For Where

IdentifierEnabled by defaultSupports autocorrectionKind
for_whereEnabledNoidiomatic

where clauses are preferred over a single if inside a for.

Examples

Non Triggering Examples
for user in users where user.id == 1 { }

for user in users {
   if let id = user.id { }
}

for user in users {
   if var id = user.id { }
}

for user in users {
   if user.id == 1 { } else { }
}

for user in users {
   if user.id == 1 {
} else if user.id == 2 { }
}

for user in users {
   if user.id == 1 { }
   print(user)
}

for user in users {
   let id = user.id
   if id == 1 { }
}

for user in users {
   if user.id == 1 { }
   return true
}

for user in users {
   if user.id == 1 && user.age > 18 { }
}

for (index, value) in array.enumerated() {
   if case .valueB(_) = value {
       return index
   }
}

Triggering Examples
for user in users {
   ↓if user.id == 1 { return true }
}

Force Cast

IdentifierEnabled by defaultSupports autocorrectionKind
force_castEnabledNoidiomatic

Force casts should be avoided.

Examples

Non Triggering Examples
NSNumber() as? Int

Triggering Examples
NSNumber() ↓as! Int

Force Try

IdentifierEnabled by defaultSupports autocorrectionKind
force_tryEnabledNoidiomatic

Force tries should be avoided.

Examples

Non Triggering Examples
func a() throws {}; do { try a() } catch {}
Triggering Examples
func a() throws {}; ↓try! a()

Force Unwrapping

IdentifierEnabled by defaultSupports autocorrectionKind
force_unwrappingDisabledNoidiomatic

Force unwrapping should be avoided.

Examples

Non Triggering Examples
if let url = NSURL(string: query)
navigationController?.pushViewController(viewController, animated: true)
let s as! Test
try! canThrowErrors()
let object: Any!
@IBOutlet var constraints: [NSLayoutConstraint]!
setEditing(!editing, animated: true)
navigationController.setNavigationBarHidden(!navigationController.navigationBarHidden, animated: true)
if addedToPlaylist && (!self.selectedFilters.isEmpty || self.searchBar?.text?.isEmpty == false) {}
print("\(xVar)!")
var test = (!bar)
var a: [Int]!
private var myProperty: (Void -> Void)!
func foo(_ options: [AnyHashable: Any]!) {
func foo() -> [Int]!
func foo() -> [AnyHashable: Any]!
func foo() -> [Int]! { return [] }
Triggering Examples
let url = NSURL(string: query)↓!
navigationController↓!.pushViewController(viewController, animated: true)
let unwrapped = optional↓!
return cell↓!
let url = NSURL(string: "http://www.google.com")↓!
let dict = ["Boooo": "👻"]func bla() -> String { return dict["Boooo"]↓! }
let dict = ["Boooo": "👻"]func bla() -> String { return dict["Boooo"]↓!.contains("B") }
let a = dict["abc"]↓!.contains("B")
dict["abc"]↓!.bar("B")
if dict["a"]↓!!!! {
var foo: [Bool]! = dict["abc"]↓!
context("abc") {
  var foo: [Bool]! = dict["abc"]↓!
}
open var computed: String { return foo.bar↓! }

Function Body Length

IdentifierEnabled by defaultSupports autocorrectionKind
function_body_lengthEnabledNometrics

Functions bodies should not span too many lines.

Function Parameter Count

IdentifierEnabled by defaultSupports autocorrectionKind
function_parameter_countEnabledNometrics

Number of function parameters should be low.

Examples

Non Triggering Examples
init(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
init (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
`init`(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
init?(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
init?<T>(a: T, b: Int, c: Int, d: Int, e: Int, f: Int) {}
init?<T: String>(a: T, b: Int, c: Int, d: Int, e: Int, f: Int) {}
func f2(p1: Int, p2: Int) { }
func f(a: Int, b: Int, c: Int, d: Int, x: Int = 42) {}
func f(a: [Int], b: Int, c: Int, d: Int, f: Int) -> [Int] {
let s = a.flatMap { \$0 as? [String: Int] } ?? []}}
override func f(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
Triggering Examples
↓func f(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
↓func initialValue(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
↓func f(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int = 2, g: Int) {}
struct Foo {
init(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}
↓func bar(a: Int, b: Int, c: Int, d: Int, e: Int, f: Int) {}}

Generic Type Name

IdentifierEnabled by defaultSupports autocorrectionKind
generic_type_nameEnabledNoidiomatic

Generic type name should only contain alphanumeric characters, start with an uppercase character and span between 1 and 20 characters in length.

Examples

Non Triggering Examples
func foo<T>() {}

func foo<T>() -> T {}

func foo<T, U>(param: U) -> T {}

func foo<T: Hashable, U: Rule>(param: U) -> T {}

struct Foo<T> {}

class Foo<T> {}

enum Foo<T> {}

func run(_ options: NoOptions<CommandantError<()>>) {}

func foo(_ options: Set<type>) {}

func < <T: Comparable>(lhs: T?, rhs: T?) -> Bool

func configureWith(data: Either<MessageThread, (project: Project, backing: Backing)>)

typealias StringDictionary<T> = Dictionary<String, T>

typealias BackwardTriple<T1, T2, T3> = (T3, T2, T1)

typealias DictionaryOfStrings<T : Hashable> = Dictionary<T, String>

Triggering Examples
func foo<↓T_Foo>() {}

func foo<T, ↓U_Foo>(param: U_Foo) -> T {}

func foo<↓TTTTTTTTTTTTTTTTTTTTT>() {}

func foo<↓type>() {}

typealias StringDictionary<↓T_Foo> = Dictionary<String, T_Foo>

typealias BackwardTriple<T1, ↓T2_Bar, T3> = (T3, T2_Bar, T1)

typealias DictionaryOfStrings<↓T_Foo: Hashable> = Dictionary<T, String>

class Foo<↓T_Foo> {}

class Foo<T, ↓U_Foo> {}

class Foo<↓T_Foo, ↓U_Foo> {}

class Foo<↓TTTTTTTTTTTTTTTTTTTTT> {}

class Foo<↓type> {}

struct Foo<↓T_Foo> {}

struct Foo<T, ↓U_Foo> {}

struct Foo<↓T_Foo, ↓U_Foo> {}

struct Foo<↓TTTTTTTTTTTTTTTTTTTTT> {}

struct Foo<↓type> {}

enum Foo<↓T_Foo> {}

enum Foo<T, ↓U_Foo> {}

enum Foo<↓T_Foo, ↓U_Foo> {}

enum Foo<↓TTTTTTTTTTTTTTTTTTTTT> {}

enum Foo<↓type> {}

Identifier Name

IdentifierEnabled by defaultSupports autocorrectionKind
identifier_nameEnabledNostyle

Identifier names should only contain alphanumeric characters and start with a lowercase character or should only contain capital letters. In an exception to the above, variable names may start with a capital letter when they are declared static and immutable. Variable names should not be too long or too short.

Examples

Non Triggering Examples
let myLet = 0
var myVar = 0
private let _myLet = 0
class Abc { static let MyLet = 0 }
let URL: NSURL? = nil
let XMLString: String? = nil
override var i = 0
enum Foo { case myEnum }
func isOperator(name: String) -> Bool
func typeForKind(_ kind: SwiftDeclarationKind) -> String
func == (lhs: SyntaxToken, rhs: SyntaxToken) -> Bool
override func IsOperator(name: String) -> Bool
Triggering Examples
↓let MyLet = 0
↓let _myLet = 0
private ↓let myLet_ = 0
↓let myExtremelyVeryVeryVeryVeryVeryVeryLongLet = 0
↓var myExtremelyVeryVeryVeryVeryVeryVeryLongVar = 0
private ↓let _myExtremelyVeryVeryVeryVeryVeryVeryLongLet = 0
↓let i = 0
↓var id = 0
private ↓let _i = 0
↓func IsOperator(name: String) -> Bool
enum Foo { case ↓MyEnum }

Implicit Getter

IdentifierEnabled by defaultSupports autocorrectionKind
implicit_getterEnabledNostyle

Computed read-only properties should avoid using the get keyword.

Examples

Non Triggering Examples
class Foo {
  var foo: Int {
 get {
 return 3
}
 set {
 _abc = newValue 
}
}
}

class Foo {
  var foo: Int {
 return 20 
} 
}
}

class Foo {
  static var foo: Int {
 return 20 
} 
}
}

class Foo {
  static foo: Int {
 get {
 return 3
}
 set {
 _abc = newValue 
}
}
}

class Foo {
  var foo: Int
}

class Foo {
  var foo: Int {
 return getValueFromDisk() 
} 
}
}

class Foo {
  var foo: String {
 return "get" 
} 
}
}

protocol Foo {
 var foo: Int { get }

protocol Foo {
 var foo: Int { get set }

class Foo {
  var foo: Int {
    struct Bar {
      var bar: Int {
        get { return 1 }
        set { _ = newValue }
      }
    }
    return Bar().bar
  }
}

var _objCTaggedPointerBits: UInt {
   @inline(__always) get { return 0 }
}

var next: Int? {
   mutating get {
       defer { self.count += 1 }
       return self.count
   }
}

Triggering Examples
class Foo {
  var foo: Int {
 ↓get {
 return 20 
} 
} 
}
}

class Foo {
  var foo: Int {
 ↓get{
 return 20 
} 
} 
}
}

class Foo {
  static var foo: Int {
 ↓get {
 return 20 
} 
} 
}
}

var foo: Int {
 ↓get {
 return 20 
} 
} 
}
class Foo {
  @objc func bar() { }
var foo: Int {
 ↓get {
 return 20 
} 
} 
}
}

Implicit Return

IdentifierEnabled by defaultSupports autocorrectionKind
implicit_returnDisabledYesstyle

Prefer implicit returns in closures.

Examples

Non Triggering Examples
foo.map { \$0 + 1 }
foo.map({ \$0 + 1 })
foo.map { value in value + 1 }
func foo() -> Int {
  return 0
}
if foo {
  return 0
}
var foo: Bool { return true }
Triggering Examples
foo.map { value in
  ↓return value + 1
}
foo.map {
  ↓return \$0 + 1
}

Implicitly Unwrapped Optional

IdentifierEnabled by defaultSupports autocorrectionKind
implicitly_unwrapped_optionalDisabledNoidiomatic

Implicitly unwrapped optionals should be avoided when possible.

Examples

Non Triggering Examples
@IBOutlet private var label: UILabel!
@IBOutlet var label: UILabel!
@IBOutlet var label: [UILabel!]
if !boolean {}
let int: Int? = 42
let int: Int? = nil
Triggering Examples
let label: UILabel!
let IBOutlet: UILabel!
let labels: [UILabel!]
var ints: [Int!] = [42, nil, 42]
let label: IBOutlet!
let int: Int! = 42
let int: Int! = nil
var int: Int! = 42
let int: ImplicitlyUnwrappedOptional<Int>
let collection: AnyCollection<Int!>
func foo(int: Int!) {}

Is Disjoint

IdentifierEnabled by defaultSupports autocorrectionKind
is_disjointEnabledNoidiomatic

Prefer using Set.isDisjoint(with:) over Set.intersection(_:).isEmpty.

Examples

Non Triggering Examples
_ = Set(syntaxKinds).isDisjoint(with: commentAndStringKindsSet)
let isObjc = !objcAttributes.isDisjoint(with: dictionary.enclosedSwiftAttributes)
_ = Set(syntaxKinds).intersection(commentAndStringKindsSet)
_ = !objcAttributes.intersection(dictionary.enclosedSwiftAttributes)
Triggering Examples
_ = Set(syntaxKinds).↓intersection(commentAndStringKindsSet).isEmpty
let isObjc = !objcAttributes.↓intersection(dictionary.enclosedSwiftAttributes).isEmpty

Joined Default Parameter

IdentifierEnabled by defaultSupports autocorrectionKind
joined_default_parameterDisabledYesidiomatic

Discouraged explicit usage of the default separator.

Examples

Non Triggering Examples
let foo = bar.joined()
let foo = bar.joined(separator: ",")
let foo = bar.joined(separator: toto)
Triggering Examples
let foo = bar.joined(↓separator: "")
let foo = bar.filter(toto)
             .joined(↓separator: "")

Large Tuple

IdentifierEnabled by defaultSupports autocorrectionKind
large_tupleEnabledNometrics

Tuples shouldn't have too many members. Create a custom type instead.

Examples

Non Triggering Examples
let foo: (Int, Int)

let foo: (start: Int, end: Int)

let foo: (Int, (Int, String))

func foo() -> (Int, Int)

func foo() -> (Int, Int) {}

func foo(bar: String) -> (Int, Int)

func foo(bar: String) -> (Int, Int) {}

func foo() throws -> (Int, Int)

func foo() throws -> (Int, Int) {}

let foo: (Int, Int, Int) -> Void

let foo: (Int, Int, Int) throws -> Void

func foo(bar: (Int, String, Float) -> Void)

func foo(bar: (Int, String, Float) throws -> Void)

var completionHandler: ((_ data: Data?, _ resp: URLResponse?, _ e: NSError?) -> Void)!

func getDictionaryAndInt() -> (Dictionary<Int, String>, Int)?

func getGenericTypeAndInt() -> (Type<Int, String, Float>, Int)?

Triggering Examples
↓let foo: (Int, Int, Int)

↓let foo: (start: Int, end: Int, value: String)

↓let foo: (Int, (Int, Int, Int))

func foo(↓bar: (Int, Int, Int))

func foo() -> ↓(Int, Int, Int)

func foo() -> ↓(Int, Int, Int) {}

func foo(bar: String) -> ↓(Int, Int, Int)

func foo(bar: String) -> ↓(Int, Int, Int) {}

func foo() throws -> ↓(Int, Int, Int)

func foo() throws -> ↓(Int, Int, Int) {}

func foo() throws -> ↓(Int, ↓(String, String, String), Int) {}

func getDictionaryAndInt() -> (Dictionary<Int, ↓(String, String, String)>, Int)?

Leading Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
leading_whitespaceEnabledYesstyle

Files should not contain leading whitespace.

Examples

Non Triggering Examples
//

Triggering Examples


 //

Legacy CGGeometry Functions

IdentifierEnabled by defaultSupports autocorrectionKind
legacy_cggeometry_functionsEnabledYesidiomatic

Struct extension properties and methods are preferred over legacy functions

Examples

Non Triggering Examples
rect.width
rect.height
rect.minX
rect.midX
rect.maxX
rect.minY
rect.midY
rect.maxY
rect.isNull
rect.isEmpty
rect.isInfinite
rect.standardized
rect.integral
rect.insetBy(dx: 5.0, dy: -7.0)
rect.offsetBy(dx: 5.0, dy: -7.0)
rect1.union(rect2)
rect1.intersect(rect2)
rect1.contains(rect2)
rect.contains(point)
rect1.intersects(rect2)
Triggering Examples
↓CGRectGetWidth(rect)
↓CGRectGetHeight(rect)
↓CGRectGetMinX(rect)
↓CGRectGetMidX(rect)
↓CGRectGetMaxX(rect)
↓CGRectGetMinY(rect)
↓CGRectGetMidY(rect)
↓CGRectGetMaxY(rect)
↓CGRectIsNull(rect)
↓CGRectIsEmpty(rect)
↓CGRectIsInfinite(rect)
↓CGRectStandardize(rect)
↓CGRectIntegral(rect)
↓CGRectInset(rect, 10, 5)
↓CGRectOffset(rect, -2, 8.3)
↓CGRectUnion(rect1, rect2)
↓CGRectIntersection(rect1, rect2)
↓CGRectContainsRect(rect1, rect2)
↓CGRectContainsPoint(rect, point)
↓CGRectIntersectsRect(rect1, rect2)

Legacy Constant

IdentifierEnabled by defaultSupports autocorrectionKind
legacy_constantEnabledYesidiomatic

Struct-scoped constants are preferred over legacy global constants.

Examples

Non Triggering Examples
CGRect.infinite
CGPoint.zero
CGRect.zero
CGSize.zero
NSPoint.zero
NSRect.zero
NSSize.zero
CGRect.null
CGFloat.pi
Float.pi
Triggering Examples
↓CGRectInfinite
↓CGPointZero
↓CGRectZero
↓CGSizeZero
↓NSZeroPoint
↓NSZeroRect
↓NSZeroSize
↓CGRectNull
↓CGFloat(M_PI)
↓Float(M_PI)

Legacy Constructor

IdentifierEnabled by defaultSupports autocorrectionKind
legacy_constructorEnabledYesidiomatic

Swift constructors are preferred over legacy convenience functions.

Examples

Non Triggering Examples
CGPoint(x: 10, y: 10)
CGPoint(x: xValue, y: yValue)
CGSize(width: 10, height: 10)
CGSize(width: aWidth, height: aHeight)
CGRect(x: 0, y: 0, width: 10, height: 10)
CGRect(x: xVal, y: yVal, width: aWidth, height: aHeight)
CGVector(dx: 10, dy: 10)
CGVector(dx: deltaX, dy: deltaY)
NSPoint(x: 10, y: 10)
NSPoint(x: xValue, y: yValue)
NSSize(width: 10, height: 10)
NSSize(width: aWidth, height: aHeight)
NSRect(x: 0, y: 0, width: 10, height: 10)
NSRect(x: xVal, y: yVal, width: aWidth, height: aHeight)
NSRange(location: 10, length: 1)
NSRange(location: loc, length: len)
UIEdgeInsets(top: 0, left: 0, bottom: 10, right: 10)
UIEdgeInsets(top: aTop, left: aLeft, bottom: aBottom, right: aRight)
NSEdgeInsets(top: 0, left: 0, bottom: 10, right: 10)
NSEdgeInsets(top: aTop, left: aLeft, bottom: aBottom, right: aRight)
Triggering Examples
↓CGPointMake(10, 10)
↓CGPointMake(xVal, yVal)
↓CGSizeMake(10, 10)
↓CGSizeMake(aWidth, aHeight)
↓CGRectMake(0, 0, 10, 10)
↓CGRectMake(xVal, yVal, width, height)
↓CGVectorMake(10, 10)
↓CGVectorMake(deltaX, deltaY)
↓NSMakePoint(10, 10)
↓NSMakePoint(xVal, yVal)
↓NSMakeSize(10, 10)
↓NSMakeSize(aWidth, aHeight)
↓NSMakeRect(0, 0, 10, 10)
↓NSMakeRect(xVal, yVal, width, height)
↓NSMakeRange(10, 1)
↓NSMakeRange(loc, len)
↓UIEdgeInsetsMake(0, 0, 10, 10)
↓UIEdgeInsetsMake(top, left, bottom, right)
↓NSEdgeInsetsMake(0, 0, 10, 10)
↓NSEdgeInsetsMake(top, left, bottom, right)

Legacy NSGeometry Functions

IdentifierEnabled by defaultSupports autocorrectionKind
legacy_nsgeometry_functionsEnabledYesidiomatic

Struct extension properties and methods are preferred over legacy functions

Examples

Non Triggering Examples
rect.width
rect.height
rect.minX
rect.midX
rect.maxX
rect.minY
rect.midY
rect.maxY
rect.isEmpty
rect.integral
rect.insetBy(dx: 5.0, dy: -7.0)
rect.offsetBy(dx: 5.0, dy: -7.0)
rect1.union(rect2)
rect1.intersect(rect2)
rect1.contains(rect2)
rect.contains(point)
rect1.intersects(rect2)
Triggering Examples
↓NSWidth(rect)
↓NSHeight(rect)
↓NSMinX(rect)
↓NSMidX(rect)
↓NSMaxX(rect)
↓NSMinY(rect)
↓NSMidY(rect)
↓NSMaxY(rect)
↓NSEqualRects(rect1, rect2)
↓NSEqualSizes(size1, size2)
↓NSEqualPoints(point1, point2)
↓NSEdgeInsetsEqual(insets2, insets2)
↓NSIsEmptyRect(rect)
↓NSIntegralRect(rect)
↓NSInsetRect(rect, 10, 5)
↓NSOffsetRect(rect, -2, 8.3)
↓NSUnionRect(rect1, rect2)
↓NSIntersectionRect(rect1, rect2)
↓NSContainsRect(rect1, rect2)
↓NSPointInRect(rect, point)
↓NSIntersectsRect(rect1, rect2)

Variable Declaration Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
let_var_whitespaceDisabledNostyle

Let and var should be separated from other statements by a blank line.

Examples

Non Triggering Examples
let a = 0
var x = 1

x = 2

a = 5

var x = 1

struct X {
	var a = 0
}

let a = 1 +
	2
let b = 5

var x: Int {
	return 0
}

var x: Int {
	let a = 0

	return a
}

#if os(macOS)
let a = 0
#endif

@available(swift 4)
let a = 0

class C {
	@objc
	var s: String = ""
}
class C {
	@objc
	func a() {}
}
class C {
	var x = 0
	lazy
	var y = 0
}

@available(OSX, introduced: 10.6)
@available(*, deprecated)
var x = 0

// swiftlint:disable superfluous_disable_command
// swiftlint:disable force_cast

let x = bar as! Bar
var x: Int {
	let a = 0
	return a
}

Triggering Examples
var x = 1
↓x = 2


a = 5
↓var x = 1

struct X {
	let a
	↓func x() {}
}

var x = 0
↓@objc func f() {}

var x = 0
↓@objc
	func f() {}

@objc func f() {
}
↓var x = 0

Line Length

IdentifierEnabled by defaultSupports autocorrectionKind
line_lengthEnabledNometrics

Lines should not span too many characters.

Examples

Non Triggering Examples
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)

#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")

Triggering Examples
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)#colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)

#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")#imageLiteral(resourceName: "image.jpg")

Literal Expression End Indentation

IdentifierEnabled by defaultSupports autocorrectionKind
literal_expression_end_indentationDisabledNostyle

Array and dictionary literal end should have the same indentation as the line that started it.

Examples

Non Triggering Examples
[1, 2, 3]
[1,
 2
]
[
   1,
   2
]
[
   1,
   2]

   let x = [
       1,
       2
   ]
[key: 2, key2: 3]
[key: 1,
 key2: 2
]
[
   key: 0,
   key2: 20
]
Triggering Examples
let x = [
   1,
   2
   ↓]
   let x = [
       1,
       2
↓]
let x = [
   key: value
   ↓]

Mark

IdentifierEnabled by defaultSupports autocorrectionKind
markEnabledYeslint

MARK comment should be in valid format. e.g. '// MARK: ...' or '// MARK: - ...'

Examples

Non Triggering Examples
// MARK: good

// MARK: - good

// MARK: -

// BOOKMARK
//BOOKMARK
// BOOKMARKS
Triggering Examples
↓//MARK: bad
↓// MARK:bad
↓//MARK:bad
↓//  MARK: bad
↓// MARK:  bad
↓// MARK: -bad
↓// MARK:- bad
↓// MARK:-bad
↓//MARK: - bad
↓//MARK:- bad
↓//MARK: -bad
↓//MARK:-bad
↓//Mark: bad
↓// Mark: bad
↓// MARK bad
↓//MARK bad
↓// MARK - bad
↓//MARK:- Top-Level bad mark
↓//MARK:- Another bad mark
struct MarkTest {}
↓// MARK:- Bad mark
extension MarkTest {}

Multiline Arguments

IdentifierEnabled by defaultSupports autocorrectionKind
multiline_argumentsDisabledNostyle

Arguments should be either on the same line, or one per line.

Examples

Non Triggering Examples
foo()
foo(
    
)
foo { }
foo {
    
}
foo(0)
foo(0, 1)
foo(0, 1) { }
foo(0, param1: 1)
foo(0, param1: 1) { }
foo(param1: 1)
foo(param1: 1) { }
foo(param1: 1, param2: true) { }
foo(param1: 1, param2: true, param3: [3]) { }
foo(param1: 1, param2: true, param3: [3]) {
    bar()
}
foo(param1: 1,
    param2: true,
    param3: [3])
foo(
    param1: 1, param2: true, param3: [3]
)
foo(
    param1: 1,
    param2: true,
    param3: [3]
)
Triggering Examples
foo(0,
    param1: 1, ↓param2: true, ↓param3: [3])
foo(0, ↓param1: 1,
    param2: true, ↓param3: [3])
foo(0, ↓param1: 1, ↓param2: true,
    param3: [3])
foo(
    0, ↓param1: 1,
    param2: true, ↓param3: [3]
)

Multiline Parameters

IdentifierEnabled by defaultSupports autocorrectionKind
multiline_parametersDisabledNostyle

Functions and methods parameters should be either on the same line, or one per line.

Examples

Non Triggering Examples
func foo() { }
func foo(param1: Int) { }
func foo(param1: Int, param2: Bool) { }
func foo(param1: Int, param2: Bool, param3: [String]) { }
func foo(param1: Int,
         param2: Bool,
         param3: [String]) { }
func foo(_ param1: Int, param2: Int, param3: Int) -> (Int) -> Int {
   return { x in x + param1 + param2 + param3 }
}
static func foo() { }
static func foo(param1: Int) { }
static func foo(param1: Int, param2: Bool) { }
static func foo(param1: Int, param2: Bool, param3: [String]) { }
static func foo(param1: Int,
                param2: Bool,
                param3: [String]) { }
protocol Foo {
	func foo() { }
}
protocol Foo {
	func foo(param1: Int) { }
}
protocol Foo {
	func foo(param1: Int, param2: Bool) { }
}
protocol Foo {
	func foo(param1: Int, param2: Bool, param3: [String]) { }
}
protocol Foo {
   func foo(param1: Int,
            param2: Bool,
            param3: [String]) { }
}
protocol Foo {
	static func foo(param1: Int, param2: Bool, param3: [String]) { }
}
protocol Foo {
   static func foo(param1: Int,
                   param2: Bool,
                   param3: [String]) { }
}
protocol Foo {
	class func foo(param1: Int, param2: Bool, param3: [String]) { }
}
protocol Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: [String]) { }
}
enum Foo {
	func foo() { }
}
enum Foo {
	func foo(param1: Int) { }
}
enum Foo {
	func foo(param1: Int, param2: Bool) { }
}
enum Foo {
	func foo(param1: Int, param2: Bool, param3: [String]) { }
}
enum Foo {
   func foo(param1: Int,
            param2: Bool,
            param3: [String]) { }
}
enum Foo {
	static func foo(param1: Int, param2: Bool, param3: [String]) { }
}
enum Foo {
   static func foo(param1: Int,
                   param2: Bool,
                   param3: [String]) { }
}
struct Foo {
	func foo() { }
}
struct Foo {
	func foo(param1: Int) { }
}
struct Foo {
	func foo(param1: Int, param2: Bool) { }
}
struct Foo {
	func foo(param1: Int, param2: Bool, param3: [String]) { }
}
struct Foo {
   func foo(param1: Int,
            param2: Bool,
            param3: [String]) { }
}
struct Foo {
	static func foo(param1: Int, param2: Bool, param3: [String]) { }
}
struct Foo {
   static func foo(param1: Int,
                   param2: Bool,
                   param3: [String]) { }
}
class Foo {
	func foo() { }
}
class Foo {
	func foo(param1: Int) { }
}
class Foo {
	func foo(param1: Int, param2: Bool) { }
}
class Foo {
	func foo(param1: Int, param2: Bool, param3: [String]) { }
	}
class Foo {
   func foo(param1: Int,
            param2: Bool,
            param3: [String]) { }
}
class Foo {
	class func foo(param1: Int, param2: Bool, param3: [String]) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: [String]) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping (Int) -> Void = { _ in }) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping ((Int) -> Void)? = nil) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping ((Int) -> Void)? = { _ in }) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: @escaping ((Int) -> Void)? = { _ in },
                  param3: Bool) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: @escaping ((Int) -> Void)? = { _ in },
                  param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping (Int) -> Void = { (x: Int) in }) { }
}
class Foo {
   class func foo(param1: Int,
                  param2: Bool,
                  param3: @escaping (Int, (Int) -> Void) -> Void = { (x: Int, f: (Int) -> Void) in }) { }
}
Triggering Examples
func ↓foo(_ param1: Int,
          param2: Int, param3: Int) -> (Int) -> Int {
   return { x in x + param1 + param2 + param3 }
}
protocol Foo {
   func ↓foo(param1: Int,
             param2: Bool, param3: [String]) { }
}
protocol Foo {
   func ↓foo(param1: Int, param2: Bool,
             param3: [String]) { }
}
protocol Foo {
   static func ↓foo(param1: Int,
                    param2: Bool, param3: [String]) { }
}
protocol Foo {
   static func ↓foo(param1: Int, param2: Bool,
                    param3: [String]) { }
}
protocol Foo {
   class func ↓foo(param1: Int,
                   param2: Bool, param3: [String]) { }
}
protocol Foo {
   class func ↓foo(param1: Int, param2: Bool,
                   param3: [String]) { }
}
enum Foo {
   func ↓foo(param1: Int,
             param2: Bool, param3: [String]) { }
}
enum Foo {
   func ↓foo(param1: Int, param2: Bool,
             param3: [String]) { }
}
enum Foo {
   static func ↓foo(param1: Int,
                    param2: Bool, param3: [String]) { }
}
enum Foo {
   static func ↓foo(param1: Int, param2: Bool,
                    param3: [String]) { }
}
struct Foo {
   func ↓foo(param1: Int,
             param2: Bool, param3: [String]) { }
}
struct Foo {
   func ↓foo(param1: Int, param2: Bool,
             param3: [String]) { }
}
struct Foo {
   static func ↓foo(param1: Int,
                    param2: Bool, param3: [String]) { }
}
struct Foo {
   static func ↓foo(param1: Int, param2: Bool,
                    param3: [String]) { }
}
class Foo {
   func ↓foo(param1: Int,
             param2: Bool, param3: [String]) { }
}
class Foo {
   func ↓foo(param1: Int, param2: Bool,
             param3: [String]) { }
}
class Foo {
   class func ↓foo(param1: Int,
                   param2: Bool, param3: [String]) { }
}
class Foo {
   class func ↓foo(param1: Int, param2: Bool,
                   param3: [String]) { }
}
class Foo {
   class func ↓foo(param1: Int,
                  param2: Bool, param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
}
class Foo {
   class func ↓foo(param1: Int,
                  param2: Bool, param3: @escaping (Int) -> Void = { (x: Int) in }) { }
}

Multiple Closures with Trailing Closure

IdentifierEnabled by defaultSupports autocorrectionKind
multiple_closures_with_trailing_closureEnabledNostyle

Trailing closure syntax should not be used when passing more than one closure argument.

Examples

Non Triggering Examples
foo.map { \$0 + 1 }

foo.reduce(0) { \$0 + \$1 }

if let foo = bar.map({ \$0 + 1 }) {

}

foo.something(param1: { \$0 }, param2: { \$0 + 1 })

UIView.animate(withDuration: 1.0) {
    someView.alpha = 0.0
}
Triggering Examples
foo.something(param1: { \$0 }) ↓{ \$0 + 1 }
UIView.animate(withDuration: 1.0, animations: {
    someView.alpha = 0.0
}) ↓{ _ in
    someView.removeFromSuperview()
}

Nesting

IdentifierEnabled by defaultSupports autocorrectionKind
nestingEnabledNometrics

Types should be nested at most 1 level deep, and statements should be nested at most 5 levels deep.

Examples

Non Triggering Examples
class Class0 { class Class1 {} }

func func0() {
func func1() {
func func2() {
func func3() {
func func4() { func func5() {
}
}
}
}
}
}

struct Class0 { struct Class1 {} }

func func0() {
func func1() {
func func2() {
func func3() {
func func4() { func func5() {
}
}
}
}
}
}

enum Class0 { enum Class1 {} }

func func0() {
func func1() {
func func2() {
func func3() {
func func4() { func func5() {
}
}
}
}
}
}

enum Enum0 { enum Enum1 { case Case } }
Triggering Examples
class A { class B { ↓class C {} } }

struct A { struct B { ↓struct C {} } }

enum A { enum B { ↓enum C {} } }

func func0() {
func func1() {
func func2() {
func func3() {
func func4() { func func5() {
↓func func6() {
}
}
}
}
}
}
}

Nimble Operator

IdentifierEnabled by defaultSupports autocorrectionKind
nimble_operatorDisabledYesidiomatic

Prefer Nimble operator overloads over free matcher functions.

Examples

Non Triggering Examples
expect(seagull.squawk) != "Hi!"

expect("Hi!") == "Hi!"

expect(10) > 2

expect(10) >= 10

expect(10) < 11

expect(10) <= 10

expect(x) === x
expect(10) == 10
expect(object.asyncFunction()).toEventually(equal(1))

expect(actual).to(haveCount(expected))

Triggering Examples
↓expect(seagull.squawk).toNot(equal("Hi"))

↓expect(12).toNot(equal(10))

↓expect(10).to(equal(10))

↓expect(10).to(beGreaterThan(8))

↓expect(10).to(beGreaterThanOrEqualTo(10))

↓expect(10).to(beLessThan(11))

↓expect(10).to(beLessThanOrEqualTo(10))

↓expect(x).to(beIdenticalTo(x))

expect(10) > 2
 ↓expect(10).to(beGreaterThan(2))

No Extension Access Modifier

IdentifierEnabled by defaultSupports autocorrectionKind
no_extension_access_modifierDisabledNoidiomatic

Prefer not to use extension access modifiers

Examples

Non Triggering Examples
extension String {}


 extension String {}
Triggering Examples
↓private extension String {}
↓public 
 extension String {}
↓open extension String {}
↓internal extension String {}
↓fileprivate extension String {}

No Grouping Extension

IdentifierEnabled by defaultSupports autocorrectionKind
no_grouping_extensionDisabledNoidiomatic

Extensions shouldn't be used to group code within the same source file.

Examples

Non Triggering Examples
protocol Food {}
extension Food {}

class Apples {}
extension Oranges {}

Triggering Examples
enum Fruit {}
↓extension Fruit {}

↓extension Tea: Error {}
struct Tea {}

class Ham { class Spam {}}
↓extension Ham.Spam {}

extension External { struct Gotcha {}}
↓extension External.Gotcha {}

Notification Center Detachment

IdentifierEnabled by defaultSupports autocorrectionKind
notification_center_detachmentEnabledNolint

An object should only remove itself as an observer in deinit.

Examples

Non Triggering Examples
class Foo { 
   deinit {
       NotificationCenter.default.removeObserver(self)
   }
}

class Foo { 
   func bar() {
       NotificationCenter.default.removeObserver(otherObject)
   }
}

Triggering Examples
class Foo { 
   func bar() {
       ↓NotificationCenter.default.removeObserver(self)
   }
}

Number Separator

IdentifierEnabled by defaultSupports autocorrectionKind
number_separatorDisabledYesstyle

Underscores should be used as thousand separator in large decimal numbers.

Examples

Non Triggering Examples
let foo = -100
let foo = -1_000
let foo = -1_000_000
let foo = -1.000_1
let foo = -1_000_000.000_000_1
let binary = -0b10000
let binary = -0b1000_0001
let hex = -0xA
let hex = -0xAA_BB
let octal = -0o21
let octal = -0o21_1
let exp = -1_000_000.000_000e2
let foo = +100
let foo = +1_000
let foo = +1_000_000
let foo = +1.000_1
let foo = +1_000_000.000_000_1
let binary = +0b10000
let binary = +0b1000_0001
let hex = +0xA
let hex = +0xAA_BB
let octal = +0o21
let octal = +0o21_1
let exp = +1_000_000.000_000e2
let foo = 100
let foo = 1_000
let foo = 1_000_000
let foo = 1.000_1
let foo = 1_000_000.000_000_1
let binary = 0b10000
let binary = 0b1000_0001
let hex = 0xA
let hex = 0xAA_BB
let octal = 0o21
let octal = 0o21_1
let exp = 1_000_000.000_000e2
Triggering Examples
let foo = ↓-10_0
let foo = ↓-1000
let foo = ↓-1000e2
let foo = ↓-1000E2
let foo = ↓-1__000
let foo = ↓-1.0001
let foo = ↓-1_000_000.000000_1
let foo = ↓-1000000.000000_1
let foo = +↓10_0
let foo = +↓1000
let foo = +↓1000e2
let foo = +↓1000E2
let foo = +↓1__000
let foo = +↓1.0001
let foo = +↓1_000_000.000000_1
let foo = +↓1000000.000000_1
let foo = ↓10_0
let foo = ↓1000
let foo = ↓1000e2
let foo = ↓1000E2
let foo = ↓1__000
let foo = ↓1.0001
let foo = ↓1_000_000.000000_1
let foo = ↓1000000.000000_1

Object Literal

IdentifierEnabled by defaultSupports autocorrectionKind
object_literalDisabledNoidiomatic

Prefer object literals over image and color inits.

Examples

Non Triggering Examples
let image = #imageLiteral(resourceName: "image.jpg")
let color = #colorLiteral(red: 0.9607843161, green: 0.7058823705, blue: 0.200000003, alpha: 1)
let image = UIImage(named: aVariable)
let image = UIImage(named: "interpolated \(variable)")
let color = UIColor(red: value, green: value, blue: value, alpha: 1)
let image = NSImage(named: aVariable)
let image = NSImage(named: "interpolated \(variable)")
let color = NSColor(red: value, green: value, blue: value, alpha: 1)
Triggering Examples
let image = ↓UIImage(named: "foo")
let color = ↓UIColor(red: 0.3, green: 0.3, blue: 0.3, alpha: 1)
let color = ↓UIColor(red: 100 / 255.0, green: 50 / 255.0, blue: 0, alpha: 1)
let color = ↓UIColor(white: 0.5, alpha: 1)
let image = ↓NSImage(named: "foo")
let color = ↓NSColor(red: 0.3, green: 0.3, blue: 0.3, alpha: 1)
let color = ↓NSColor(red: 100 / 255.0, green: 50 / 255.0, blue: 0, alpha: 1)
let color = ↓NSColor(white: 0.5, alpha: 1)
let image = ↓UIImage.init(named: "foo")
let color = ↓UIColor.init(red: 0.3, green: 0.3, blue: 0.3, alpha: 1)
let color = ↓UIColor.init(red: 100 / 255.0, green: 50 / 255.0, blue: 0, alpha: 1)
let color = ↓UIColor.init(white: 0.5, alpha: 1)
let image = ↓NSImage.init(named: "foo")
let color = ↓NSColor.init(red: 0.3, green: 0.3, blue: 0.3, alpha: 1)
let color = ↓NSColor.init(red: 100 / 255.0, green: 50 / 255.0, blue: 0, alpha: 1)
let color = ↓NSColor.init(white: 0.5, alpha: 1)

Opening Brace Spacing

IdentifierEnabled by defaultSupports autocorrectionKind
opening_braceEnabledYesstyle

Opening braces should be preceded by a single space and on the same line as the declaration.

Examples

Non Triggering Examples
func abc() {
}
[].map() { \$0 }
[].map({ })
if let a = b { }
while a == b { }
guard let a = b else { }
if
	let a = b,
	let c = d
	where a == c
{ }
while
	let a = b,
	let c = d
	where a == c
{ }
guard
	let a = b,
	let c = d
	where a == c else
{ }
struct Rule {}

struct Parent {
	struct Child {
		let foo: Int
	}
}

Triggering Examples
func abc()↓{
}
func abc()
	↓{ }
[].map()↓{ \$0 }
[].map( ↓{ } )
if let a = b↓{ }
while a == b↓{ }
guard let a = b else↓{ }
if
	let a = b,
	let c = d
	where a == c↓{ }
while
	let a = b,
	let c = d
	where a == c↓{ }
guard
	let a = b,
	let c = d
	where a == c else↓{ }
struct Rule↓{}

struct Rule
↓{
}

struct Rule

	↓{
}

struct Parent {
	struct Child
	↓{
		let foo: Int
	}
}

Operator Usage Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
operator_usage_whitespaceDisabledYesstyle

Operators should be surrounded by a single whitespace when they are being used.

Examples

Non Triggering Examples
let foo = 1 + 2

let foo = 1 > 2

let foo = !false

let foo: Int?

let foo: Array<String>

let foo: [String]

let foo = 1 + 
  2

let range = 1...3

let range = 1 ... 3

let range = 1..<3

#if swift(>=3.0)
    foo()
#endif

array.removeAtIndex(-200)

let name = "image-1"

button.setImage(#imageLiteral(resourceName: "image-1"), for: .normal)

let doubleValue = -9e-11

Triggering Examples
let foo = 1↓+2

let foo = 1↓   + 2

let foo = 1↓   +    2

let foo = 1↓ +    2

let foo↓=1↓+2

let foo↓=1 + 2

let foo↓=bar

let range = 1↓ ..<  3

let foo = bar↓   ?? 0

let foo = bar↓??0

let foo = bar↓ !=  0

let foo = bar↓ !==  bar2

let v8 = Int8(1)↓  << 6

let v8 = 1↓ <<  (6)

let v8 = 1↓ <<  (6)
 let foo = 1 > 2

Operator Function Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
operator_whitespaceEnabledNostyle

Operators should be surrounded by a single whitespace when defining them.

Examples

Non Triggering Examples
func <| (lhs: Int, rhs: Int) -> Int {}

func <|< <A>(lhs: A, rhs: A) -> A {}

func abc(lhs: Int, rhs: Int) -> Int {}

Triggering Examples
↓func <|(lhs: Int, rhs: Int) -> Int {}

↓func <|<<A>(lhs: A, rhs: A) -> A {}

↓func <|  (lhs: Int, rhs: Int) -> Int {}

↓func <|<  <A>(lhs: A, rhs: A) -> A {}

↓func  <| (lhs: Int, rhs: Int) -> Int {}

↓func  <|< <A>(lhs: A, rhs: A) -> A {}

Overridden methods call super

IdentifierEnabled by defaultSupports autocorrectionKind
overridden_super_callDisabledNolint

Some overridden methods should always call super

Examples

Non Triggering Examples
class VC: UIViewController {
	override func viewWillAppear(_ animated: Bool) {
		super.viewWillAppear(animated)
	}
}

class VC: UIViewController {
	override func viewWillAppear(_ animated: Bool) {
		self.method1()
		super.viewWillAppear(animated)
		self.method2()
	}
}

class VC: UIViewController {
	override func loadView() {
	}
}

class Some {
	func viewWillAppear(_ animated: Bool) {
	}
}

class VC: UIViewController {
	override func viewDidLoad() {
		defer {
			super.viewDidLoad()
		}
	}
}

Triggering Examples
class VC: UIViewController {
	override func viewWillAppear(_ animated: Bool) {↓
		//Not calling to super
		self.method()
	}
}

class VC: UIViewController {
	override func viewWillAppear(_ animated: Bool) {↓
		super.viewWillAppear(animated)
		//Other code
		super.viewWillAppear(animated)
	}
}

class VC: UIViewController {
	override func didReceiveMemoryWarning() {↓
	}
}

Override in Extension

IdentifierEnabled by defaultSupports autocorrectionKind
override_in_extensionDisabledNolint

Extensions shouldn't override declarations.

Examples

Non Triggering Examples
extension Person {
  var age: Int { return 42 }
}

extension Person {
  func celebrateBirthday() {}
}

class Employee: Person {
  override func celebrateBirthday() {}
}

class Foo: NSObject {}
extension Foo {
    override var description: String { return "" }
}

struct Foo {
    class Bar: NSObject {}
}
extension Foo.Bar {
    override var description: String { return "" }
}

Triggering Examples
extension Person {
  override ↓var age: Int { return 42 }
}

extension Person {
  override ↓func celebrateBirthday() {}
}

Pattern Matching Keywords

IdentifierEnabled by defaultSupports autocorrectionKind
pattern_matching_keywordsDisabledNoidiomatic

Combine multiple pattern matching bindings by moving keywords out of tuples.

Examples

Non Triggering Examples
switch foo {
    default: break
}
switch foo {
    case 1: break
}
switch foo {
    case bar: break
}
switch foo {
    case let (x, y): break
}
switch foo {
    case .foo(let x): break
}
switch foo {
    case let .foo(x, y): break
}
switch foo {
    case .foo(let x), .bar(let x): break
}
switch foo {
    case .foo(let x, var y): break
}
switch foo {
    case var (x, y): break
}
switch foo {
    case .foo(var x): break
}
switch foo {
    case var .foo(x, y): break
}
Triggering Examples
switch foo {
    case (↓let x,  ↓let y): break
}
switch foo {
    case .foo(↓let x, ↓let y): break
}
switch foo {
    case (.yamlParsing(↓let x), .yamlParsing(↓let y)): break
}
switch foo {
    case (↓var x,  ↓var y): break
}
switch foo {
    case .foo(↓var x, ↓var y): break
}
switch foo {
    case (.yamlParsing(↓var x), .yamlParsing(↓var y)): break
}

Prefixed Top-Level Constant

IdentifierEnabled by defaultSupports autocorrectionKind
prefixed_toplevel_constantDisabledNostyle

Top-level constants should be prefixed by k.

Examples

Non Triggering Examples
private let kFoo = 20.0
public let kFoo = false
internal let kFoo = "Foo"
let kFoo = true
struct Foo {
   let bar = 20.0
}
private var foo = 20.0
public var foo = false
internal var foo = "Foo"
var foo = true
var foo = true, bar = true
var foo = true, let kFoo = true
let
   kFoo = true
var foo: Int {
   return a + b
}
let kFoo = {
   return a + b
}()
Triggering Examples
private let ↓Foo = 20.0
public let ↓Foo = false
internal let ↓Foo = "Foo"
let ↓Foo = true
let ↓foo = 2, ↓bar = true
var foo = true, let ↓Foo = true
let
    ↓foo = true
let ↓foo = {
   return a + b
}()

Private Actions

IdentifierEnabled by defaultSupports autocorrectionKind
private_actionDisabledNolint

IBActions should be private.

Examples

Non Triggering Examples
class Foo {
	@IBAction private func barButtonTapped(_ sender: UIButton) {}
}

struct Foo {
	@IBAction private func barButtonTapped(_ sender: UIButton) {}
}

class Foo {
	@IBAction fileprivate func barButtonTapped(_ sender: UIButton) {}
}

struct Foo {
	@IBAction fileprivate func barButtonTapped(_ sender: UIButton) {}
}

private extension Foo {
	@IBAction func barButtonTapped(_ sender: UIButton) {}
}

fileprivate extension Foo {
	@IBAction func barButtonTapped(_ sender: UIButton) {}
}

Triggering Examples
class Foo {
	@IBAction ↓func barButtonTapped(_ sender: UIButton) {}
}

struct Foo {
	@IBAction ↓func barButtonTapped(_ sender: UIButton) {}
}

class Foo {
	@IBAction public ↓func barButtonTapped(_ sender: UIButton) {}
}

struct Foo {
	@IBAction public ↓func barButtonTapped(_ sender: UIButton) {}
}

class Foo {
	@IBAction internal ↓func barButtonTapped(_ sender: UIButton) {}
}

struct Foo {
	@IBAction internal ↓func barButtonTapped(_ sender: UIButton) {}
}

extension Foo {
	@IBAction ↓func barButtonTapped(_ sender: UIButton) {}
}

extension Foo {
	@IBAction public ↓func barButtonTapped(_ sender: UIButton) {}
}

extension Foo {
	@IBAction internal ↓func barButtonTapped(_ sender: UIButton) {}
}

public extension Foo {
	@IBAction ↓func barButtonTapped(_ sender: UIButton) {}
}

internal extension Foo {
	@IBAction ↓func barButtonTapped(_ sender: UIButton) {}
}

Private Outlets

IdentifierEnabled by defaultSupports autocorrectionKind
private_outletDisabledNolint

IBOutlets should be private to avoid leaking UIKit to higher layers.

Examples

Non Triggering Examples
class Foo {
  @IBOutlet private var label: UILabel?
}

class Foo {
  @IBOutlet private var label: UILabel!
}

class Foo {
  var notAnOutlet: UILabel
}

class Foo {
  @IBOutlet weak private var label: UILabel?
}

class Foo {
  @IBOutlet private weak var label: UILabel?
}

Triggering Examples
class Foo {
  @IBOutlet ↓var label: UILabel?
}

class Foo {
  @IBOutlet ↓var label: UILabel!
}

Private over fileprivate

IdentifierEnabled by defaultSupports autocorrectionKind
private_over_fileprivateEnabledYesidiomatic

Prefer private over fileprivate declarations.

Examples

Non Triggering Examples
extension String {}
private extension String {}
public 
 enum MyEnum {}
open extension 
 String {}
internal extension String {}
extension String {
fileprivate func Something(){}
}
class MyClass {
fileprivate let myInt = 4
}
class MyClass {
fileprivate(set) var myInt = 4
}
struct Outter {
struct Inter {
fileprivate struct Inner {}
}
}
Triggering Examples
↓fileprivate enum MyEnum {}
↓fileprivate class MyClass {
fileprivate(set) var myInt = 4
}

Private Unit Test

IdentifierEnabled by defaultSupports autocorrectionKind
private_unit_testEnabledNolint

Unit tests marked private are silently skipped.

Examples

Non Triggering Examples
class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 }
internal class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 }
public class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 }
private class Foo: NSObject { func test1() {}
 internal func test2() {}
 public func test3() {}
 }
private class Foo { func test1() {}
 internal func test2() {}
 public func test3() {}
 }
public class FooTest: XCTestCase { func test1(param: Int) {}
 }
Triggering Examples
private ↓class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 private func test4() {}
 }
class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 private ↓func test4() {}
 }
internal class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 private ↓func test4() {}
 }
public class FooTest: XCTestCase { func test1() {}
 internal func test2() {}
 public func test3() {}
 private ↓func test4() {}
 }

Prohibited calls to super

IdentifierEnabled by defaultSupports autocorrectionKind
prohibited_super_callDisabledNolint

Some methods should not call super

Examples

Non Triggering Examples
class VC: UIViewController {
	override func loadView() {
	}
}

class NSView {
	func updateLayer() {
		self.method1()	}
}

Triggering Examples
class VC: UIViewController {
	override func loadView() {↓
		super.loadView()
	}
}

class VC: NSFileProviderExtension {
	override func providePlaceholder(at url: URL,completionHandler: @escaping (Error?) -> Void) {↓
		self.method1()
		super.providePlaceholder(at:url, completionHandler: completionHandler)
	}
}

class VC: NSView {
	override func updateLayer() {↓
		self.method1()
		super.updateLayer()
		self.method2()
	}
}

class VC: NSView {
	override func updateLayer() {↓
		defer {
			super.updateLayer()
		}
	}
}

Protocol Property Accessors Order

IdentifierEnabled by defaultSupports autocorrectionKind
protocol_property_accessors_orderEnabledYesstyle

When declaring properties in protocols, the order of accessors should be get set.

Examples

Non Triggering Examples
protocol Foo {
 var bar: String { get set }
 }
protocol Foo {
 var bar: String { get }
 }
protocol Foo {
 var bar: String { set }
 }
Triggering Examples
protocol Foo {
 var bar: String { ↓set get }
 }

Quick Discouraged Call

IdentifierEnabled by defaultSupports autocorrectionKind
quick_discouraged_callDisabledNolint

Discouraged call inside 'describe' and/or 'context' block.

Examples

Non Triggering Examples
class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           beforeEach {
               let foo = Foo()
               foo.toto()
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           beforeEach {
               let foo = Foo()
               foo.toto()
           }
           afterEach {
               let foo = Foo()
               foo.toto()
           }
           describe("bar") {
           }
           context("bar") {
           }
           it("bar") {
               let foo = Foo()
               foo.toto()
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
          itBehavesLike("bar")
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           it("does something") {
               let foo = Foo()
               foo.toto()
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       context("foo") {
           afterEach { toto.append(foo) }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       xcontext("foo") {
           afterEach { toto.append(foo) }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       xdescribe("foo") {
           afterEach { toto.append(foo) }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           xit("does something") {
               let foo = Foo()
               foo.toto()
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       fcontext("foo") {
           afterEach { toto.append(foo) }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       fdescribe("foo") {
           afterEach { toto.append(foo) }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           fit("does something") {
               let foo = Foo()
               foo.toto()
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       fitBehavesLike("foo")
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       xitBehavesLike("foo")
   }
}

Triggering Examples
class TotoTests {
   override func spec() {
       describe("foo") {
           let foo = Foo()
       }
   }
}
class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           let foo = ↓Foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           let foo = ↓Foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           context("foo") {
               let foo = ↓Foo()
           }
           context("bar") {
               let foo = ↓Foo()
               ↓foo.bar()
               it("does something") {
                   let foo = Foo()
                   foo.toto()
               }
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           context("foo") {
               context("foo") {
                   beforeEach {
                       let foo = Foo()
                       foo.toto()
                   }
                   it("bar") {
                   }
                   context("foo") {
                       let foo = ↓Foo()
                   }
               }
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       context("foo") {
           let foo = ↓Foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       sharedExamples("foo") {
           let foo = ↓Foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           ↓foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       context("foo") {
           ↓foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       sharedExamples("foo") {
           ↓foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       xdescribe("foo") {
           let foo = ↓Foo()
       }
       fdescribe("foo") {
           let foo = ↓Foo()
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       xcontext("foo") {
           let foo = ↓Foo()
       }
       fcontext("foo") {
           let foo = ↓Foo()
       }
   }
}

Quick Discouraged Focused Test

IdentifierEnabled by defaultSupports autocorrectionKind
quick_discouraged_focused_testDisabledNolint

Discouraged focused test. Other tests won't run while this one is focused.

Examples

Non Triggering Examples
class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           describe("bar") { } 
           context("bar") {
               it("bar") { }
           }
           it("bar") { }
           itBehavesLike("bar")
       }
   }
}

Triggering Examples
class TotoTests: QuickSpec {
   override func spec() {
       ↓fdescribe("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓fcontext("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓fit("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           ↓fit("bar") { }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       context("foo") {
           ↓fit("bar") { }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           context("bar") {
               ↓fit("toto") { }
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓fitBehavesLike("foo")
   }
}

Quick Discouraged Pending Test

IdentifierEnabled by defaultSupports autocorrectionKind
quick_discouraged_pending_testDisabledNolint

Discouraged pending test. This test won't run while it's marked as pending.

Examples

Non Triggering Examples
class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           describe("bar") { } 
           context("bar") {
               it("bar") { }
           }
           it("bar") { }
           itBehavesLike("bar")
       }
   }
}

Triggering Examples
class TotoTests: QuickSpec {
   override func spec() {
       ↓xdescribe("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓xcontext("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓xit("foo") { }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           ↓xit("bar") { }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       context("foo") {
           ↓xit("bar") { }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       describe("foo") {
           context("bar") {
               ↓xit("toto") { }
           }
       }
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓pending("foo")
   }
}

class TotoTests: QuickSpec {
   override func spec() {
       ↓xitBehavesLike("foo")
   }
}

Redundant Discardable Let

IdentifierEnabled by defaultSupports autocorrectionKind
redundant_discardable_letEnabledYesstyle

Prefer _ = foo() over let _ = foo() when discarding a result from a function.

Examples

Non Triggering Examples
_ = foo()

if let _ = foo() { }

guard let _ = foo() else { return }

let _: ExplicitType = foo()
while let _ = SplashStyle(rawValue: maxValue) { maxValue += 1 }

Triggering Examples
↓let _ = foo()

if _ = foo() { ↓let _ = bar() }

Redundant Nil Coalescing

IdentifierEnabled by defaultSupports autocorrectionKind
redundant_nil_coalescingDisabledYesidiomatic

nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant

Examples

Non Triggering Examples
var myVar: Int?; myVar ?? 0

Triggering Examples
var myVar: Int? = nil; myVar↓ ?? nil

var myVar: Int? = nil; myVar↓??nil

Redundant Optional Initialization

IdentifierEnabled by defaultSupports autocorrectionKind
redundant_optional_initializationEnabledYesidiomatic

Initializing an optional variable with nil is redundant.

Examples

Non Triggering Examples
var myVar: Int?

let myVar: Int? = nil

var myVar: Int? = 0

func foo(bar: Int? = 0) { }

var myVar: Optional<Int>

let myVar: Optional<Int> = nil

var myVar: Optional<Int> = 0

var foo: Int? {
   if bar != nil { }
   return 0
}

var foo: Int? = {
   if bar != nil { }
   return 0
}()

lazy var test: Int? = nil
Triggering Examples
var myVar: Int?↓ = nil

var myVar: Optional<Int>↓ = nil

var myVar: Int?↓=nil

var myVar: Optional<Int>↓=nil

Redundant String Enum Value

IdentifierEnabled by defaultSupports autocorrectionKind
redundant_string_enum_valueEnabledNoidiomatic

String enum values can be omitted when they are equal to the enumcase name.

Examples

Non Triggering Examples
enum Numbers: String {
 case one
 case two
}

enum Numbers: Int {
 case one = 1
 case two = 2
}

enum Numbers: String {
 case one = "ONE"
 case two = "TWO"
}

enum Numbers: String {
 case one = "ONE"
 case two = "two"
}

enum Numbers: String {
 case one, two
}

Triggering Examples
enum Numbers: String {
 case one = ↓"one"
 case two = ↓"two"
}

enum Numbers: String {
 case one = ↓"one", two = ↓"two"
}

enum Numbers: String {
 case one, two = ↓"two"
}

Redundant Void Return

IdentifierEnabled by defaultSupports autocorrectionKind
redundant_void_returnEnabledYesidiomatic

Returning Void in a function declaration is redundant.

Examples

Non Triggering Examples
func foo() {}

func foo() -> Int {}

func foo() -> Int -> Void {}

func foo() -> VoidResponse

let foo: Int -> Void

func foo() -> Int -> () {}

let foo: Int -> ()

func foo() -> ()?

func foo() -> ()!

func foo() -> Void?

func foo() -> Void!

Triggering Examples
func foo()↓ -> Void {}

protocol Foo {
 func foo()↓ -> Void
}

func foo()↓ -> () {}

protocol Foo {
 func foo()↓ -> ()
}

Required Enum Case

IdentifierEnabled by defaultSupports autocorrectionKind
required_enum_caseDisabledNolint

Enums conforming to a specified protocol must implement a specific case(s).

Examples

Non Triggering Examples
enum MyNetworkResponse: String, NetworkResponsable {
    case success, error, notConnected 
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success, error, notConnected(error: Error) 
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success
    case error
    case notConnected
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success
    case error
    case notConnected(error: Error)
}
Triggering Examples
enum MyNetworkResponse: String, NetworkResponsable {
    case success, error 
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success, error 
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success
    case error
}
enum MyNetworkResponse: String, NetworkResponsable {
    case success
    case error
}

Returning Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
return_arrow_whitespaceEnabledYesstyle

Return arrow and return type should be separated by a single space or on a separate line.

Examples

Non Triggering Examples
func abc() -> Int {}

func abc() -> [Int] {}

func abc() -> (Int, Int) {}

var abc = {(param: Int) -> Void in }

func abc() ->
    Int {}

func abc()
    -> Int {}

Triggering Examples
func abc()↓->Int {}

func abc()↓->[Int] {}

func abc()↓->(Int, Int) {}

func abc()↓-> Int {}

func abc()↓ ->Int {}

func abc()↓  ->  Int {}

var abc = {(param: Int)↓ ->Bool in }

var abc = {(param: Int)↓->Bool in }

Shorthand Operator

IdentifierEnabled by defaultSupports autocorrectionKind
shorthand_operatorEnabledNostyle

Prefer shorthand operators (+=, -=, *=, /=) over doing the operation and assigning.

Examples

Non Triggering Examples
foo -= 1
foo -= variable
foo -= bar.method()
self.foo = foo - 1
foo = self.foo - 1
page = ceilf(currentOffset - pageWidth)
foo = aMethod(foo - bar)
foo = aMethod(bar - foo)
foo /= 1
foo /= variable
foo /= bar.method()
self.foo = foo / 1
foo = self.foo / 1
page = ceilf(currentOffset / pageWidth)
foo = aMethod(foo / bar)
foo = aMethod(bar / foo)
foo += 1
foo += variable
foo += bar.method()
self.foo = foo + 1
foo = self.foo + 1
page = ceilf(currentOffset + pageWidth)
foo = aMethod(foo + bar)
foo = aMethod(bar + foo)
foo *= 1
foo *= variable
foo *= bar.method()
self.foo = foo * 1
foo = self.foo * 1
page = ceilf(currentOffset * pageWidth)
foo = aMethod(foo * bar)
foo = aMethod(bar * foo)
var helloWorld = "world!"
 helloWorld = "Hello, " + helloWorld
angle = someCheck ? angle : -angle
seconds = seconds * 60 + value
Triggering Examples
↓foo = foo - 1

↓foo = foo - aVariable

↓foo = foo - bar.method()

↓foo.aProperty = foo.aProperty - 1

↓self.aProperty = self.aProperty - 1

↓foo = foo / 1

↓foo = foo / aVariable

↓foo = foo / bar.method()

↓foo.aProperty = foo.aProperty / 1

↓self.aProperty = self.aProperty / 1

↓foo = foo + 1

↓foo = foo + aVariable

↓foo = foo + bar.method()

↓foo.aProperty = foo.aProperty + 1

↓self.aProperty = self.aProperty + 1

↓foo = foo * 1

↓foo = foo * aVariable

↓foo = foo * bar.method()

↓foo.aProperty = foo.aProperty * 1

↓self.aProperty = self.aProperty * 1

n = n + i / outputLength
n = n - i / outputLength

Single Test Class

IdentifierEnabled by defaultSupports autocorrectionKind
single_test_classDisabledNostyle

Test files should contain a single QuickSpec or XCTestCase class.

Examples

Non Triggering Examples
class FooTests {  }

class FooTests: QuickSpec {  }

class FooTests: XCTestCase {  }

Triggering Examples
↓class FooTests: QuickSpec {  }
↓class BarTests: QuickSpec {  }

↓class FooTests: QuickSpec {  }
↓class BarTests: QuickSpec {  }
↓class TotoTests: QuickSpec {  }

↓class FooTests: XCTestCase {  }
↓class BarTests: XCTestCase {  }

↓class FooTests: XCTestCase {  }
↓class BarTests: XCTestCase {  }
↓class TotoTests: XCTestCase {  }

↓class FooTests: QuickSpec {  }
↓class BarTests: XCTestCase {  }

↓class FooTests: QuickSpec {  }
↓class BarTests: XCTestCase {  }
class TotoTests {  }

Min or Max over Sorted First or Last

IdentifierEnabled by defaultSupports autocorrectionKind
sorted_first_lastDisabledNoperformance

Prefer using min() or max() over sorted().first or sorted().last

Examples

Non Triggering Examples
let min = myList.min()

let min = myList.min(by: { \$0 < \$1 })

let min = myList.min(by: >)

let min = myList.max()

let min = myList.max(by: { \$0 < \$1 })

Triggering Examples
↓myList.sorted().first

↓myList.sorted(by: { \$0.description < \$1.description }).first

↓myList.sorted(by: >).first

↓myList.map { \$0 + 1 }.sorted().first

↓myList.sorted(by: someFunction).first

↓myList.map { \$0 + 1 }.sorted { \$0.description < \$1.description }.first

↓myList.sorted().last

↓myList.sorted().last?.something()

↓myList.sorted(by: { \$0.description < \$1.description }).last

↓myList.map { \$0 + 1 }.sorted().last

↓myList.sorted(by: someFunction).last

↓myList.map { \$0 + 1 }.sorted { \$0.description < \$1.description }.last

↓myList.map { \$0 + 1 }.sorted { \$0.first < \$1.first }.last

Sorted Imports

IdentifierEnabled by defaultSupports autocorrectionKind
sorted_importsDisabledYesstyle

Imports should be sorted.

Examples

Non Triggering Examples
import AAA
import BBB
import CCC
import DDD
import Alamofire
import API
import labc
import Ldef
import BBB
// comment
import AAA
import CCC
@testable import AAA
import   CCC
import AAA
@testable import   CCC
import EEE.A
import FFF.B
#if os(Linux)
import DDD.A
import EEE.B
#else
import CCC
import DDD.B
#endif
import AAA
import BBB
Triggering Examples
import AAA
import ZZZ
import ↓BBB
import CCC
import DDD
// comment
import CCC
import ↓AAA
@testable import CCC
import   ↓AAA
import CCC
@testable import   ↓AAA
import FFF.B
import ↓EEE.A
#if os(Linux)
import DDD.A
import EEE.B
#else
import DDD.B
import ↓CCC
#endif
import AAA
import BBB

Statement Position

IdentifierEnabled by defaultSupports autocorrectionKind
statement_positionEnabledYesstyle

Else and catch should be on the same line, one space after the previous declaration.

Examples

Non Triggering Examples
} else if {
} else {
} catch {
"}else{"
struct A { let catchphrase: Int }
let a = A(
 catchphrase: 0
)
struct A { let `catch`: Int }
let a = A(
 `catch`: 0
)
Triggering Examples
↓}else if {
↓}  else {
↓}
catch {
↓}
	  catch {

Strict fileprivate

IdentifierEnabled by defaultSupports autocorrectionKind
strict_fileprivateDisabledNoidiomatic

fileprivate should be avoided.

Examples

Non Triggering Examples
extension String {}
private extension String {}
public 
 extension String {}
open extension 
 String {}
internal extension String {}
Triggering Examples
↓fileprivate extension String {}
↓fileprivate 
 extension String {}
↓fileprivate extension 
 String {}
extension String {
↓fileprivate func Something(){}
}
class MyClass {
↓fileprivate let myInt = 4
}
class MyClass {
↓fileprivate(set) var myInt = 4
}
struct Outter {
struct Inter {
↓fileprivate struct Inner {}
}
}

Superfluous Disable Command

IdentifierEnabled by defaultSupports autocorrectionKind
superfluous_disable_commandEnabledNolint

SwiftLint 'disable' commands are superfluous when the disabled rule would not have triggered a violation in the disabled region.

Switch and Case Statement Alignment

IdentifierEnabled by defaultSupports autocorrectionKind
switch_case_alignmentEnabledNostyle

Case statements should vertically align with the enclosing switch statement.

Examples

Non Triggering Examples
switch someBool {
case true: // case 1
    print('red')
case false:
    /*
    case 2
    */
    if case let .someEnum(val) = someFunc() {
        print('blue')
    }
}
enum SomeEnum {
    case innocent
}
if aBool {
    switch someBool {
    case true:
        print('red')
    case false:
        print('blue')
    }
}
switch someInt {
// comments ignored
case 0:
    // zero case
    print('Zero')
case 1:
    print('One')
default:
    print('Some other number')
}
Triggering Examples
switch someBool {
    ↓case true:
         print('red')
    ↓case false:
         print('blue')
}
if aBool {
    switch someBool {
        ↓case true:
            print('red')
    case false:
        print('blue')
    }
}
switch someInt {
    ↓case 0:
    print('Zero')
case 1:
    print('One')
    ↓default:
    print('Some other number')
}

Switch Case on Newline

IdentifierEnabled by defaultSupports autocorrectionKind
switch_case_on_newlineDisabledNostyle

Cases inside a switch should always be on a newline

Examples

Non Triggering Examples
/*case 1: */return true
//case 1:
 return true
let x = [caseKey: value]
let x = [key: .default]
if case let .someEnum(value) = aFunction([key: 2]) { }
guard case let .someEnum(value) = aFunction([key: 2]) { }
for case let .someEnum(value) = aFunction([key: 2]) { }
enum Environment {
 case development
}
enum Environment {
 case development(url: URL)
}
enum Environment {
 case development(url: URL) // staging
}
switch foo {
  case 1:
 return true
}

switch foo {
  default:
 return true
}

switch foo {
  case let value:
 return true
}

switch foo {
  case .myCase: // error from network
 return true
}

switch foo {
  case let .myCase(value) where value > 10:
 return false
}

switch foo {
  case let .myCase(value)
 where value > 10:
 return false
}

switch foo {
  case let .myCase(code: lhsErrorCode, description: _)
 where lhsErrorCode > 10:
 return false
}

switch foo {
  case #selector(aFunction(_:)):
 return false

}

Triggering Examples
switch foo {
  ↓case 1: return true
}

switch foo {
  ↓case let value: return true
}

switch foo {
  ↓default: return true
}

switch foo {
  ↓case "a string": return false
}

switch foo {
  ↓case .myCase: return false // error from network
}

switch foo {
  ↓case let .myCase(value) where value > 10: return false
}

switch foo {
  ↓case #selector(aFunction(_:)): return false

}

switch foo {
  ↓case let .myCase(value)
 where value > 10: return false
}

switch foo {
  ↓case .first,
 .second: return false
}

Syntactic Sugar

IdentifierEnabled by defaultSupports autocorrectionKind
syntactic_sugarEnabledNoidiomatic

Shorthand syntactic sugar should be used, i.e. [Int] instead of Array.

Examples

Non Triggering Examples
let x: [Int]
let x: [Int: String]
let x: Int?
func x(a: [Int], b: Int) -> [Int: Any]
let x: Int!
extension Array { 
 func x() { } 
 }
extension Dictionary { 
 func x() { } 
 }
let x: CustomArray<String>
var currentIndex: Array<OnboardingPage>.Index?
func x(a: [Int], b: Int) -> Array<Int>.Index
unsafeBitCast(nonOptionalT, to: Optional<T>.self)
type is Optional<String>.Type
let x: Foo.Optional<String>
Triggering Examples
let x: ↓Array<String>
let x: ↓Dictionary<Int, String>
let x: ↓Optional<Int>
let x: ↓ImplicitlyUnwrappedOptional<Int>
func x(a: ↓Array<Int>, b: Int) -> [Int: Any]
func x(a: [Int], b: Int) -> ↓Dictionary<Int, String>
func x(a: ↓Array<Int>, b: Int) -> ↓Dictionary<Int, String>
let x = ↓Array<String>.array(of: object)
let x: ↓Swift.Optional<String>

Todo

IdentifierEnabled by defaultSupports autocorrectionKind
todoEnabledNolint

TODOs and FIXMEs should be avoided.

Examples

Non Triggering Examples
// notaTODO:

// notaFIXME:

Triggering Examples
// ↓TODO:

// ↓FIXME:

// ↓TODO(note)

// ↓FIXME(note)

/* ↓FIXME: */

/* ↓TODO: */

/** ↓FIXME: */

/** ↓TODO: */

Trailing Closure

IdentifierEnabled by defaultSupports autocorrectionKind
trailing_closureDisabledNostyle

Trailing closure syntax should be used whenever possible.

Examples

Non Triggering Examples
foo.map { \$0 + 1 }

foo.bar()

foo.reduce(0) { \$0 + 1 }

if let foo = bar.map({ \$0 + 1 }) { }

foo.something(param1: { \$0 }, param2: { \$0 + 1 })

offsets.sorted { \$0.offset < \$1.offset }

Triggering Examples
↓foo.map({ \$0 + 1 })

↓foo.reduce(0, combine: { \$0 + 1 })

↓offsets.sorted(by: { \$0.offset < \$1.offset })

↓foo.something(0, { \$0 + 1 })

Trailing Comma

IdentifierEnabled by defaultSupports autocorrectionKind
trailing_commaEnabledYesstyle

Trailing commas in arrays and dictionaries should be avoided/enforced.

Examples

Non Triggering Examples
let foo = [1, 2, 3]

let foo = []

let foo = [:]

let foo = [1: 2, 2: 3]

let foo = [Void]()

let example = [ 1,
 2
 // 3,
]
foo([1: "\(error)"])

Triggering Examples
let foo = [1, 2, 3↓,]

let foo = [1, 2, 3↓, ]

let foo = [1, 2, 3   ↓,]

let foo = [1: 2, 2: 3↓, ]

struct Bar {
 let foo = [1: 2, 2: 3↓, ]
}

let foo = [1, 2, 3↓,] + [4, 5, 6↓,]

let example = [ 1,
2↓,
 // 3,
]
let foo = ["אבג", "αβγ", "🇺🇸"↓,]

Trailing Newline

IdentifierEnabled by defaultSupports autocorrectionKind
trailing_newlineEnabledYesstyle

Files should have a single trailing newline.

Examples

Non Triggering Examples
let a = 0

Triggering Examples
let a = 0
let a = 0


Trailing Semicolon

IdentifierEnabled by defaultSupports autocorrectionKind
trailing_semicolonEnabledYesidiomatic

Lines should not have trailing semicolons.

Examples

Non Triggering Examples
let a = 0

Triggering Examples
let a = 0↓;

let a = 0↓;
let b = 1

let a = 0↓;;

let a = 0↓;    ;;

let a = 0↓; ; ;

Trailing Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
trailing_whitespaceEnabledYesstyle

Lines should not have trailing whitespace.

Examples

Non Triggering Examples
let name: String

//

// 

let name: String //

let name: String // 

Triggering Examples
let name: String 

/* */ let name: String 

Type Body Length

IdentifierEnabled by defaultSupports autocorrectionKind
type_body_lengthEnabledNometrics

Type bodies should not span too many lines.

Examples

Non Triggering Examples
class Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

class Abc {









































































































































































































}

class Abc {
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
}

class Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0

/* this is
a multiline comment
*/
}

struct Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

struct Abc {









































































































































































































}

struct Abc {
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
}

struct Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0

/* this is
a multiline comment
*/
}

enum Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

enum Abc {









































































































































































































}

enum Abc {
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
// this is a comment
}

enum Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0

/* this is
a multiline comment
*/
}

Triggering Examples
↓class Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

↓struct Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

↓enum Abc {
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
let abc = 0
}

Type Name

IdentifierEnabled by defaultSupports autocorrectionKind
type_nameEnabledNoidiomatic

Type name should only contain alphanumeric characters, start with an uppercase character and span between 3 and 40 characters in length.

Examples

Non Triggering Examples
class MyType {}
private class _MyType {}
class AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
struct MyType {}
private struct _MyType {}
struct AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
enum MyType {}
private enum _MyType {}
enum AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
typealias Foo = Void
private typealias Foo = Void
protocol Foo {
 associatedtype Bar
 }
protocol Foo {
 associatedtype Bar: Equatable
 }
enum MyType {
case value
}
Triggering Examples
class ↓myType {}
class ↓_MyType {}
private class ↓MyType_ {}
class ↓My {}
class ↓AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
struct ↓myType {}
struct ↓_MyType {}
private struct ↓MyType_ {}
struct ↓My {}
struct ↓AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
enum ↓myType {}
enum ↓_MyType {}
private enum ↓MyType_ {}
enum ↓My {}
enum ↓AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA {}
typealias ↓X = Void
private typealias ↓Foo_Bar = Void
private typealias ↓foo = Void
typealias ↓AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = Void
protocol Foo {
 associatedtype ↓X
 }
protocol Foo {
 associatedtype ↓Foo_Bar: Equatable
 }
protocol Foo {
 associatedtype ↓AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 }

Unneeded Break in Switch

IdentifierEnabled by defaultSupports autocorrectionKind
unneeded_break_in_switchEnabledNoidiomatic

Avoid using unneeded break statements.

Examples

Non Triggering Examples
switch foo {
case .bar:
    break
}
switch foo {
default:
    break
}
switch foo {
case .bar:
    for i in [0, 1, 2] { break }
}
switch foo {
case .bar:
    if true { break }
}
switch foo {
case .bar:
    something()
}
Triggering Examples
switch foo {
case .bar:
    something()
    ↓break
}
switch foo {
case .bar:
    something()
    ↓break // comment
}
switch foo {
default:
    something()
    ↓break
}
switch foo {
case .foo, .foo2 where condition:
    something()
    ↓break
}

Unneeded Parentheses in Closure Argument

IdentifierEnabled by defaultSupports autocorrectionKind
unneeded_parentheses_in_closure_argumentDisabledYesstyle

Parentheses are not needed when declaring closure arguments.

Examples

Non Triggering Examples
let foo = { (bar: Int) in }

let foo = { bar, _  in }

let foo = { bar in }

let foo = { bar -> Bool in return true }

Triggering Examples
call(arg: { ↓(bar) in })

call(arg: { ↓(bar, _) in })

let foo = { ↓(bar) -> Bool in return true }

foo.map { (\$0, \$0) }.forEach { ↓(x, y) in }
foo.bar { [weak self] ↓(x, y) in }

Unused Closure Parameter

IdentifierEnabled by defaultSupports autocorrectionKind
unused_closure_parameterEnabledYeslint

Unused parameter in a closure should be replaced with _.

Examples

Non Triggering Examples
[1, 2].map { \$0 + 1 }

[1, 2].map({ \$0 + 1 })

[1, 2].map { number in
 number + 1 
}

[1, 2].map { _ in
 3 
}

[1, 2].something { number, idx in
 return number * idx
}

let isEmpty = [1, 2].isEmpty()

violations.sorted(by: { lhs, rhs in 
 return lhs.location > rhs.location
})

rlmConfiguration.migrationBlock.map { rlmMigration in
return { migration, schemaVersion in
rlmMigration(migration.rlmMigration, schemaVersion)
}
}
genericsFunc { (a: Type, b) in
a + b
}

var label: UILabel = { (lbl: UILabel) -> UILabel in
   lbl.backgroundColor = .red
   return lbl
}(UILabel())

hoge(arg: num) { num in
  return num
}

({ (manager: FileManager) in
  print(manager)
})(FileManager.default)
Triggering Examples
[1, 2].map { ↓number in
 return 3
}

[1, 2].map { ↓number in
 return numberWithSuffix
}

[1, 2].map { ↓number in
 return 3 // number
}

[1, 2].map { ↓number in
 return 3 "number"
}

[1, 2].something { number, ↓idx in
 return number
}

genericsFunc { (↓number: TypeA, idx: TypeB) in return idx
}

hoge(arg: num) { ↓num in
}

fooFunc { ↓아 in
 }

Unused Enumerated

IdentifierEnabled by defaultSupports autocorrectionKind
unused_enumeratedEnabledNoidiomatic

When the index or the item is not used, .enumerated() can be removed.

Examples

Non Triggering Examples
for (idx, foo) in bar.enumerated() { }

for (_, foo) in bar.enumerated().something() { }

for (_, foo) in bar.something() { }

for foo in bar.enumerated() { }

for foo in bar { }

for (idx, _) in bar.enumerated().something() { }

for (idx, _) in bar.something() { }

for idx in bar.indices { }

for (section, (event, _)) in data.enumerated() {}

Triggering Examples
for (↓_, foo) in bar.enumerated() { }

for (↓_, foo) in abc.bar.enumerated() { }

for (↓_, foo) in abc.something().enumerated() { }

for (idx, ↓_) in bar.enumerated() { }

Unused Optional Binding

IdentifierEnabled by defaultSupports autocorrectionKind
unused_optional_bindingEnabledNostyle

Prefer != nil over let _ =

Examples

Non Triggering Examples
if let bar = Foo.optionalValue {
}

if let (_, second) = getOptionalTuple() {
}

if let (_, asd, _) = getOptionalTuple(), let bar = Foo.optionalValue {
}

if foo() { let _ = bar() }

if foo() { _ = bar() }

if case .some(_) = self {}
if let point = state.find({ _ in true }) {}
Triggering Examples
if let ↓_ = Foo.optionalValue {
}

if let a = Foo.optionalValue, let ↓_ = Foo.optionalValue2 {
}

guard let a = Foo.optionalValue, let ↓_ = Foo.optionalValue2 {
}

if let (first, second) = getOptionalTuple(), let ↓_ = Foo.optionalValue {
}

if let (first, _) = getOptionalTuple(), let ↓_ = Foo.optionalValue {
}

if let (_, second) = getOptionalTuple(), let ↓_ = Foo.optionalValue {
}

if let ↓(_, _, _) = getOptionalTuple(), let bar = Foo.optionalValue {
}

func foo() {
if let ↓_ = bar {
}

if case .some(let ↓_) = self {}

Valid IBInspectable

IdentifierEnabled by defaultSupports autocorrectionKind
valid_ibinspectableEnabledNolint

@IBInspectable should be applied to variables only, have its type explicit and be of a supported type

Examples

Non Triggering Examples
class Foo {
  @IBInspectable private var x: Int
}

class Foo {
  @IBInspectable private var x: String?
}

class Foo {
  @IBInspectable private var x: String!
}

class Foo {
  @IBInspectable private var count: Int = 0
}

class Foo {
  private var notInspectable = 0
}

class Foo {
  private let notInspectable: Int
}

class Foo {
  private let notInspectable: UInt8
}

Triggering Examples
class Foo {
  @IBInspectable private ↓let count: Int
}

class Foo {
  @IBInspectable private ↓var insets: UIEdgeInsets
}

class Foo {
  @IBInspectable private ↓var count = 0
}

class Foo {
  @IBInspectable private ↓var count: Int?
}

class Foo {
  @IBInspectable private ↓var count: Int!
}

class Foo {
  @IBInspectable private ↓var x: ImplicitlyUnwrappedOptional<Int>
}

class Foo {
  @IBInspectable private ↓var count: Optional<Int>
}

class Foo {
  @IBInspectable private ↓var x: Optional<String>
}

class Foo {
  @IBInspectable private ↓var x: ImplicitlyUnwrappedOptional<String>
}

Vertical Parameter Alignment

IdentifierEnabled by defaultSupports autocorrectionKind
vertical_parameter_alignmentEnabledNostyle

Function parameters should be aligned vertically if they're in multiple lines in a declaration.

Examples

Non Triggering Examples
func validateFunction(_ file: File, kind: SwiftDeclarationKind,
                      dictionary: [String: SourceKitRepresentable]) { }

func validateFunction(_ file: File, kind: SwiftDeclarationKind,
                      dictionary: [String: SourceKitRepresentable]) -> [StyleViolation]

func foo(bar: Int)

func foo(bar: Int) -> String 

func validateFunction(_ file: File, kind: SwiftDeclarationKind,
                      dictionary: [String: SourceKitRepresentable])
                      -> [StyleViolation]

func validateFunction(
   _ file: File, kind: SwiftDeclarationKind,
   dictionary: [String: SourceKitRepresentable]) -> [StyleViolation]

func validateFunction(
   _ file: File, kind: SwiftDeclarationKind,
   dictionary: [String: SourceKitRepresentable]
) -> [StyleViolation]

func regex(_ pattern: String,
           options: NSRegularExpression.Options = [.anchorsMatchLines,
                                                   .dotMatchesLineSeparators]) -> NSRegularExpression

func foo(a: Void,
         b: [String: String] =
           [:]) {
}

func foo(data: (size: CGSize,
                identifier: String)) {}
Triggering Examples
func validateFunction(_ file: File, kind: SwiftDeclarationKind,
                  ↓dictionary: [String: SourceKitRepresentable]) { }

func validateFunction(_ file: File, kind: SwiftDeclarationKind,
                       ↓dictionary: [String: SourceKitRepresentable]) { }

func validateFunction(_ file: File,
                  ↓kind: SwiftDeclarationKind,
                  ↓dictionary: [String: SourceKitRepresentable]) { }

Vertical Parameter Alignment On Call

IdentifierEnabled by defaultSupports autocorrectionKind
vertical_parameter_alignment_on_callDisabledNostyle

Function parameters should be aligned vertically if they're in multiple lines in a method call.

Examples

Non Triggering Examples
foo(param1: 1, param2: bar
    param3: false, param4: true)
foo(param1: 1, param2: bar)
foo(param1: 1, param2: bar
    param3: false,
    param4: true)
foo(
   param1: 1
) { _ in }
UIView.animate(withDuration: 0.4, animations: {
    blurredImageView.alpha = 1
}, completion: { _ in
    self.hideLoading()
})
UIView.animate(withDuration: 0.4, animations: {
    blurredImageView.alpha = 1
},
completion: { _ in
    self.hideLoading()
})
foo(param1: 1, param2: { _ in },
    param3: false, param4: true)
foo({ _ in
       bar()
   },
   completion: { _ in
       baz()
   }
)
foo(param1: 1, param2: [
   0,
   1
], param3: 0)
Triggering Examples
foo(param1: 1, param2: bar
                ↓param3: false, param4: true)
foo(param1: 1, param2: bar
 ↓param3: false, param4: true)
foo(param1: 1, param2: bar
       ↓param3: false,
       ↓param4: true)
foo(param1: 1,
       ↓param2: { _ in })
foo(param1: 1,
    param2: { _ in
}, param3: 2,
 ↓param4: 0)
foo(param1: 1, param2: { _ in },
       ↓param3: false, param4: true)

Vertical Whitespace

IdentifierEnabled by defaultSupports autocorrectionKind
vertical_whitespaceEnabledYesstyle

Limit vertical whitespace to a single empty line.

Examples

Non Triggering Examples
let abc = 0

let abc = 0


/* bcs 



*/
// bca 


Triggering Examples
let aaaa = 0



struct AAAA {}




class BBBB {}



Void Return

IdentifierEnabled by defaultSupports autocorrectionKind
void_returnEnabledYesstyle

Prefer -> Void over -> ().

Examples

Non Triggering Examples
let abc: () -> Void = {}

let abc: () -> (VoidVoid) = {}

func foo(completion: () -> Void)

let foo: (ConfigurationTests) -> () throws -> Void)

let foo: (ConfigurationTests) ->   () throws -> Void)

let foo: (ConfigurationTests) ->() throws -> Void)

let foo: (ConfigurationTests) -> () -> Void)

Triggering Examples
let abc: () -> ↓() = {}

let abc: () -> ↓(Void) = {}

let abc: () -> ↓(   Void ) = {}

func foo(completion: () -> ↓())

func foo(completion: () -> ↓(   ))

func foo(completion: () -> ↓(Void))

let foo: (ConfigurationTests) -> () throws -> ↓())

Weak Delegate

IdentifierEnabled by defaultSupports autocorrectionKind
weak_delegateEnabledNolint

Delegates should be weak to avoid reference cycles.

Examples

Non Triggering Examples
class Foo {
  weak var delegate: SomeProtocol?
}

class Foo {
  weak var someDelegate: SomeDelegateProtocol?
}

class Foo {
  weak var delegateScroll: ScrollDelegate?
}

class Foo {
  var scrollHandler: ScrollDelegate?
}

func foo() {
  var delegate: SomeDelegate
}

class Foo {
  var delegateNotified: Bool?
}

protocol P {
 var delegate: AnyObject? { get set }
}

class Foo {
 protocol P {
 var delegate: AnyObject? { get set }
}
}

class Foo {
 var computedDelegate: ComputedDelegate {
 return bar() 
} 
}
Triggering Examples
class Foo {
  ↓var delegate: SomeProtocol?
}

class Foo {
  ↓var scrollDelegate: ScrollDelegate?
}

XCTFail Message

IdentifierEnabled by defaultSupports autocorrectionKind
xctfail_messageEnabledNoidiomatic

An XCTFail call should include a description of the assertion.

Examples

Non Triggering Examples
func testFoo() {
    XCTFail("bar")
}
func testFoo() {
    XCTFail(bar)
}
Triggering Examples
func testFoo() {
    ↓XCTFail()
}
func testFoo() {
    ↓XCTFail("")
}

Yoda condition rule

IdentifierEnabled by defaultSupports autocorrectionKind
yoda_conditionDisabledNolint

The variable should be placed on the left, the constant on the right of a comparison operator.

Examples

Non Triggering Examples
if foo == 42 {}

if foo <= 42.42 {}

guard foo >= 42 else { return }

guard foo != "str str" else { return }
while foo < 10 { }

while foo > 1 { }

while foo + 1 == 2
if optionalValue?.property ?? 0 == 2
if foo == nil
Triggering Examples
↓if 42 == foo {}

↓if 42.42 >= foo {}

↓guard 42 <= foo else { return }

↓guard "str str" != foo else { return }
↓while 10 > foo { }
↓while 1 < foo { }
↓if nil == foo