internal struct DiscouragedOptionalCollectionExamples { static let nonTriggeringExamples = [ // Global variable Example("var foo: [Int]"), Example("var foo: [String: Int]"), Example("var foo: Set"), Example("var foo: [String: [String: Int]]"), Example("let foo: [Int] = []"), Example("let foo: [String: Int] = [:]"), Example("let foo: Set = []"), Example("let foo: [String: [String: Int]] = [:]"), // Computed get variable Example("var foo: [Int] { return [] }"), // Free function return Example("func foo() -> [Int] {}"), Example("func foo() -> [String: String] {}"), Example("func foo() -> Set {}"), Example("func foo() -> ([Int]) -> String {}"), // Free function parameter Example("func foo(input: [String] = []) {}"), Example("func foo(input: [String: String] = [:]) {}"), Example("func foo(input: Set = []) {}"), // Method return wrapExample("class", "func foo() -> [Int] {}"), wrapExample("class", "func foo() -> [String: String] {}"), wrapExample("class", "func foo() -> Set {}"), wrapExample("class", "func foo() -> ([Int]) -> String {}"), wrapExample("struct", "func foo() -> [Int] {}"), wrapExample("struct", "func foo() -> [String: String] {}"), wrapExample("struct", "func foo() -> Set {}"), wrapExample("struct", "func foo() -> ([Int]) -> String {}"), wrapExample("enum", "func foo() -> [Int] {}"), wrapExample("enum", "func foo() -> [String: String] {}"), wrapExample("enum", "func foo() -> Set {}"), wrapExample("enum", "func foo() -> ([Int]) -> String {}"), // Method parameter wrapExample("class", "func foo(input: [String] = []) {}"), wrapExample("class", "func foo(input: [String: String] = [:]) {}"), wrapExample("class", "func foo(input: Set = []) {}"), wrapExample("struct", "func foo(input: [String] = []) {}"), wrapExample("struct", "func foo(input: [String: String] = [:]) {}"), wrapExample("struct", "func foo(input: Set = []) {}"), wrapExample("enum", "func foo(input: [String] = []) {}"), wrapExample("enum", "func foo(input: [String: String] = [:]) {}"), wrapExample("enum", "func foo(input: Set = []) {}"), ] static let triggeringExamples = [ // Global variable Example("var foo: ↓[Int]?"), Example("var foo: ↓[String: Int]?"), Example("var foo: ↓Set?"), Example("let foo: ↓[Int]? = nil"), Example("let foo: ↓[String: Int]? = nil"), Example("let foo: ↓Set? = nil"), // Computed Get Variable Example("var foo: ↓[Int]? { return nil }"), Example("let foo: ↓[Int]? { return nil }()"), // Free function return Example("func foo() -> ↓[T]? {}"), Example("func foo() -> ↓[String: String]? {}"), Example("func foo() -> ↓[String: [String: String]]? {}"), Example("func foo() -> [String: ↓[String: String]?] {}"), Example("func foo() -> ↓Set? {}"), Example("static func foo() -> ↓[T]? {}"), Example("static func foo() -> ↓[String: String]? {}"), Example("static func foo() -> ↓[String: [String: String]]? {}"), Example("static func foo() -> [String: ↓[String: String]?] {}"), Example("static func foo() -> ↓Set? {}"), Example("func foo() -> (↓[Int]?) -> String {}"), Example("func foo() -> ([Int]) -> ↓[String]? {}"), // Free function parameter Example("func foo(input: ↓[String: String]?) {}"), Example("func foo(input: ↓[String: [String: String]]?) {}"), Example("func foo(input: [String: ↓[String: String]?]) {}"), Example("func foo(input: ↓[String: ↓[String: String]?]?) {}"), Example("func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), Example("func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), Example("static func foo(input: ↓[String: String]?) {}"), Example("static func foo(input: ↓[String: [String: String]]?) {}"), Example("static func foo(input: [String: ↓[String: String]?]) {}"), Example("static func foo(input: ↓[String: ↓[String: String]?]?) {}"), Example("static func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), Example("static func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), // Instance variable wrapExample("class", "var foo: ↓[Int]?"), wrapExample("class", "var foo: ↓[String: Int]?"), wrapExample("class", "var foo: ↓Set?"), wrapExample("class", "let foo: ↓[Int]? = nil"), wrapExample("class", "let foo: ↓[String: Int]? = nil"), wrapExample("class", "let foo: ↓Set? = nil"), wrapExample("struct", "var foo: ↓[Int]?"), wrapExample("struct", "var foo: ↓[String: Int]?"), wrapExample("struct", "var foo: ↓Set?"), wrapExample("struct", "let foo: ↓[Int]? = nil"), wrapExample("struct", "let foo: ↓[String: Int]? = nil"), wrapExample("struct", "let foo: ↓Set? = nil"), // Instance computed variable wrapExample("class", "var foo: ↓[Int]? { return nil }"), wrapExample("class", "let foo: ↓[Int]? { return nil }()"), wrapExample("class", "var foo: ↓Set? { return nil }"), wrapExample("class", "let foo: ↓Set? { return nil }()"), wrapExample("struct", "var foo: ↓[Int]? { return nil }"), wrapExample("struct", "let foo: ↓[Int]? { return nil }()"), wrapExample("struct", "var foo: ↓Set? { return nil }"), wrapExample("struct", "let foo: ↓Set? { return nil }()"), wrapExample("enum", "var foo: ↓[Int]? { return nil }"), wrapExample("enum", "let foo: ↓[Int]? { return nil }()"), wrapExample("enum", "var foo: ↓Set? { return nil }"), wrapExample("enum", "let foo: ↓Set? { return nil }()"), // Method return wrapExample("class", "func foo() -> [T]? {}"), wrapExample("class", "func foo() -> ↓[String: String]? {}"), wrapExample("class", "func foo() -> [String: [String: String]]? {}"), wrapExample("class", "func foo() -> [String: ↓[String: String]?] {}"), wrapExample("class", "func foo() -> Set? {}"), wrapExample("class", "static func foo() -> [T]? {}"), wrapExample("class", "static func foo() -> ↓[String: String]? {}"), wrapExample("class", "static func foo() -> [String: [String: String]]? {}"), wrapExample("class", "static func foo() -> [String: ↓[String: String]?] {}"), wrapExample("class", "static func foo() -> Set? {}"), wrapExample("class", "func foo() -> ([Int]?) -> String {}"), wrapExample("class", "func foo() -> ([Int]) -> [String]? {}"), wrapExample("struct", "func foo() -> [T]? {}"), wrapExample("struct", "func foo() -> ↓[String: String]? {}"), wrapExample("struct", "func foo() -> [String: [String: String]]? {}"), wrapExample("struct", "func foo() -> [String: ↓[String: String]?] {}"), wrapExample("struct", "func foo() -> Set? {}"), wrapExample("struct", "static func foo() -> [T]? {}"), wrapExample("struct", "static func foo() -> ↓[String: String]? {}"), wrapExample("struct", "static func foo() -> [String: [String: String]]? {}"), wrapExample("struct", "static func foo() -> [String: ↓[String: String]?] {}"), wrapExample("struct", "static func foo() -> Set? {}"), wrapExample("struct", "func foo() -> ([Int]?) -> String {}"), wrapExample("struct", "func foo() -> ([Int]) -> [String]? {}"), wrapExample("enum", "func foo() -> [T]? {}"), wrapExample("enum", "func foo() -> ↓[String: String]? {}"), wrapExample("enum", "func foo() -> [String: [String: String]]? {}"), wrapExample("enum", "func foo() -> [String: ↓[String: String]?] {}"), wrapExample("enum", "func foo() -> Set? {}"), wrapExample("enum", "static func foo() -> [T]? {}"), wrapExample("enum", "static func foo() -> ↓[String: String]? {}"), wrapExample("enum", "static func foo() -> [String: [String: String]]? {}"), wrapExample("enum", "static func foo() -> [String: ↓[String: String]?] {}"), wrapExample("enum", "static func foo() -> Set? {}"), wrapExample("enum", "func foo() -> ([Int]?) -> String {}"), wrapExample("enum", "func foo() -> ([Int]) -> [String]? {}"), // Method parameter wrapExample("class", "func foo(input: ↓[String: String]?) {}"), wrapExample("class", "func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("class", "func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("class", "func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("class", "func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("class", "func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), wrapExample("class", "static func foo(input: ↓[String: String]?) {}"), wrapExample("class", "static func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("class", "static func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("class", "static func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("class", "static func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("class", "static func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), wrapExample("struct", "func foo(input: ↓[String: String]?) {}"), wrapExample("struct", "func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("struct", "func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("struct", "func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("struct", "func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("struct", "func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), wrapExample("struct", "static func foo(input: ↓[String: String]?) {}"), wrapExample("struct", "static func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("struct", "static func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("struct", "static func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("struct", "static func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("struct", "static func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), wrapExample("enum", "func foo(input: ↓[String: String]?) {}"), wrapExample("enum", "func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("enum", "func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("enum", "func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("enum", "func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("enum", "func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), wrapExample("enum", "static func foo(input: ↓[String: String]?) {}"), wrapExample("enum", "static func foo(input: ↓[String: [String: String]]?) {}"), wrapExample("enum", "static func foo(input: [String: ↓[String: String]?]) {}"), wrapExample("enum", "static func foo(input: ↓[String: ↓[String: String]?]?) {}"), wrapExample("enum", "static func foo(_ dict1: [K: V], _ dict2: ↓[K: V]?) -> [K: V]"), wrapExample("enum", "static func foo(dict1: [K: V], dict2: ↓[K: V]?) -> [K: V]"), ] } // MARK: - Private private func wrapExample(_ type: String, _ test: String, file: StaticString = #filePath, line: UInt = #line) -> Example { Example(""" \(type) Foo { \(test) } """, file: file, line: line) }