import Foundation internal struct DiscouragedOptionalCollectionExamples { static let nonTriggeringExamples = [ // Global variable "var foo: [Int]", "var foo: [String: Int]", "var foo: Set", "var foo: [String: [String: Int]]", "let foo: [Int] = []", "let foo: [String: Int] = [:]", "let foo: Set = []", "let foo: [String: [String: Int]] = [:]", // Computed get variable "var foo: [Int] { return [] }", // Free function return "func foo() -> [Int] {}", "func foo() -> [String: String] {}", "func foo() -> Set {}", "func foo() -> ([Int]) -> String {}", // Free function parameter "func foo(input: [String] = []) {}", "func foo(input: [String: String] = [:]) {}", "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 "↓var foo: [Int]?", "↓var foo: [String: Int]?", "↓var foo: Set?", "↓let foo: [Int]? = nil", "↓let foo: [String: Int]? = nil", "↓let foo: Set? = nil", // Computed Get Variable "↓var foo: [Int]? { return nil }", "↓let foo: [Int]? { return nil }()", // Free function return "func ↓foo() -> [T]? {}", "func ↓foo() -> [String: String]? {}", "func ↓foo() -> [String: [String: String]]? {}", "func ↓foo() -> [String: [String: String]?] {}", "func ↓foo() -> Set? {}", "static func ↓foo() -> [T]? {}", "static func ↓foo() -> [String: String]? {}", "static func ↓foo() -> [String: [String: String]]? {}", "static func ↓foo() -> [String: [String: String]?] {}", "static func ↓foo() -> Set? {}", "func ↓foo() -> ([Int]?) -> String {}", "func ↓foo() -> ([Int]) -> [String]? {}", // Free function parameter "func foo(↓input: [String: String]?) {}", "func foo(↓input: [String: [String: String]]?) {}", "func foo(↓input: [String: [String: String]?]) {}", "func foo(↓↓input: [String: [String: String]?]?) {}", "func foo(_ dict1: [K: V], ↓_ dict2: [K: V]?) -> [K: V]", "func foo(dict1: [K: V], ↓dict2: [K: V]?) -> [K: V]", "static func foo(↓input: [String: String]?) {}", "static func foo(↓input: [String: [String: String]]?) {}", "static func foo(↓input: [String: [String: String]?]) {}", "static func foo(↓↓input: [String: [String: String]?]?) {}", "static func foo(_ dict1: [K: V], ↓_ dict2: [K: V]?) -> [K: V]", "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) -> String { return "\(type) Foo {\n\t\(test)\n}" }