internal struct MultilineParametersRuleExamples {
    static let nonTriggeringExamples: [Example] = [
        Example("func foo() { }"),
        Example("func foo(param1: Int) { }"),
        Example("func foo(param1: Int, param2: Bool) { }"),
        Example("func foo(param1: Int, param2: Bool, param3: [String]) { }"),
        Example("""
        func foo(param1: Int,
                 param2: Bool,
                 param3: [String]) { }
        """),
        Example("""
        func foo(_ param1: Int, param2: Int, param3: Int) -> (Int) -> Int {
           return { x in x + param1 + param2 + param3 }
        }
        """),
        Example("static func foo() { }"),
        Example("static func foo(param1: Int) { }"),
        Example("static func foo(param1: Int, param2: Bool) { }"),
        Example("static func foo(param1: Int, param2: Bool, param3: [String]) { }"),
        Example("""
        static func foo(param1: Int,
                        param2: Bool,
                        param3: [String]) { }
        """),
        Example("protocol Foo {\n\tfunc foo() { }\n}"),
        Example("protocol Foo {\n\tfunc foo(param1: Int) { }\n}"),
        Example("protocol Foo {\n\tfunc foo(param1: Int, param2: Bool) { }\n}"),
        Example("protocol Foo {\n\tfunc foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        protocol Foo {
           func foo(param1: Int,
                    param2: Bool,
                    param3: [String]) { }
        }
        """),
        Example("protocol Foo {\n\tstatic func foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        protocol Foo {
           static func foo(param1: Int,
                           param2: Bool,
                           param3: [String]) { }
        }
        """),
        Example("protocol Foo {\n\tclass func foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        protocol Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: [String]) { }
        }
        """),
        Example("enum Foo {\n\tfunc foo() { }\n}"),
        Example("enum Foo {\n\tfunc foo(param1: Int) { }\n}"),
        Example("enum Foo {\n\tfunc foo(param1: Int, param2: Bool) { }\n}"),
        Example("enum Foo {\n\tfunc foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        enum Foo {
           func foo(param1: Int,
                    param2: Bool,
                    param3: [String]) { }
        }
        """),
        Example("enum Foo {\n\tstatic func foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        enum Foo {
           static func foo(param1: Int,
                           param2: Bool,
                           param3: [String]) { }
        }
        """),
        Example("struct Foo {\n\tfunc foo() { }\n}"),
        Example("struct Foo {\n\tfunc foo(param1: Int) { }\n}"),
        Example("struct Foo {\n\tfunc foo(param1: Int, param2: Bool) { }\n}"),
        Example("struct Foo {\n\tfunc foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        struct Foo {
           func foo(param1: Int,
                    param2: Bool,
                    param3: [String]) { }
        }
        """),
        Example("struct Foo {\n\tstatic func foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        struct Foo {
           static func foo(param1: Int,
                           param2: Bool,
                           param3: [String]) { }
        }
        """),
        Example("class Foo {\n\tfunc foo() { }\n}"),
        Example("class Foo {\n\tfunc foo(param1: Int) { }\n}"),
        Example("class Foo {\n\tfunc foo(param1: Int, param2: Bool) { }\n}"),
        Example("class Foo {\n\tfunc foo(param1: Int, param2: Bool, param3: [String]) { }\n\t}"),
        Example("""
        class Foo {
           func foo(param1: Int,
                    param2: Bool,
                    param3: [String]) { }
        }
        """),
        Example("class Foo {\n\tclass func foo(param1: Int, param2: Bool, param3: [String]) { }\n}"),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping (Int) -> Void = { _ in }) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping ((Int) -> Void)? = nil) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping ((Int) -> Void)? = { _ in }) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: @escaping ((Int) -> Void)? = { _ in },
                          param3: Bool) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: @escaping ((Int) -> Void)? = { _ in },
                          param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping (Int) -> Void = { (x: Int) in }) { }
        }
        """),
        Example("""
        class Foo {
           class func foo(param1: Int,
                          param2: Bool,
                          param3: @escaping (Int, (Int) -> Void) -> Void = { (x: Int, f: (Int) -> Void) in }) { }
        }
        """),
        Example("""
        class Foo {
           init(param1: Int,
                param2: Bool,
                param3: @escaping ((Int) -> Void)? = { _ in }) { }
        }
        """),
        Example("func foo() { }",
                configuration: ["allows_single_line": false]),
        Example("func foo(param1: Int) { }",
                configuration: ["allows_single_line": false]),
        Example("""
        protocol Foo {
            func foo(param1: Int,
                     param2: Bool,
                     param3: [String]) { }
        }
        """, configuration: ["allows_single_line": false]),
        Example("""
        protocol Foo {
            func foo(
                param1: Int
            ) { }
        }
        """, configuration: ["allows_single_line": false]),
        Example("""
        protocol Foo {
            func foo(
                param1: Int,
                param2: Bool,
                param3: [String]
            ) { }
        }
        """, configuration: ["allows_single_line": false]),
        Example("func foo(param1: Int, param2: Bool, param3: [String]) { }",
                configuration: ["max_number_of_single_line_parameters": 3]),
        Example("func foo(param1: Int, param2: Bool) { }",
                configuration: ["max_number_of_single_line_parameters": 2]),
        Example("""
        func foo(param1: Int,
                 param2: Bool,
                 param3: [String]) { }
        """, configuration: ["max_number_of_single_line_parameters": 3]),
        Example("""
        func foo(
            param1: Int,
            param2: Bool,
            param3: [String]
        ) { }
        """, configuration: ["max_number_of_single_line_parameters": 2]),
    ]

    static let triggeringExamples: [Example] = [
        Example("""
        func ↓foo(_ param1: Int,
                  param2: Int, param3: Int) -> (Int) -> Int {
           return { x in x + param1 + param2 + param3 }
        }
        """),
        Example("""
        protocol Foo {
           func ↓foo(param1: Int,
                     param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        protocol Foo {
           func ↓foo(param1: Int, param2: Bool,
                     param3: [String]) { }
        }
        """),
        Example("""
        protocol Foo {
           static func ↓foo(param1: Int,
                            param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        protocol Foo {
           static func ↓foo(param1: Int, param2: Bool,
                            param3: [String]) { }
        }
        """),
        Example("""
        protocol Foo {
           class func ↓foo(param1: Int,
                           param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        protocol Foo {
           class func ↓foo(param1: Int, param2: Bool,
                           param3: [String]) { }
        }
        """),
        Example("""
        enum Foo {
           func ↓foo(param1: Int,
                     param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        enum Foo {
           func ↓foo(param1: Int, param2: Bool,
                     param3: [String]) { }
        }
        """),
        Example("""
        enum Foo {
           static func ↓foo(param1: Int,
                            param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        enum Foo {
           static func ↓foo(param1: Int, param2: Bool,
                            param3: [String]) { }
        }
        """),
        Example("""
        struct Foo {
           func ↓foo(param1: Int,
                     param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        struct Foo {
           func ↓foo(param1: Int, param2: Bool,
                     param3: [String]) { }
        }
        """),
        Example("""
        struct Foo {
           static func ↓foo(param1: Int,
                            param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        struct Foo {
           static func ↓foo(param1: Int, param2: Bool,
                            param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           func ↓foo(param1: Int,
                     param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           func ↓foo(param1: Int, param2: Bool,
                     param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           class func ↓foo(param1: Int,
                           param2: Bool, param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           class func ↓foo(param1: Int, param2: Bool,
                           param3: [String]) { }
        }
        """),
        Example("""
        class Foo {
           class func ↓foo(param1: Int,
                          param2: Bool, param3: @escaping (Int, Int) -> Void = { _, _ in }) { }
        }
        """),
        Example("""
        class Foo {
           class func ↓foo(param1: Int,
                          param2: Bool, param3: @escaping (Int) -> Void = { (x: Int) in }) { }
        }
        """),
        Example("""
        class Foo {
          ↓init(param1: Int, param2: Bool,
                param3: @escaping ((Int) -> Void)? = { _ in }) { }
        }
        """),
        Example("func ↓foo(param1: Int, param2: Bool) { }",
                configuration: ["allows_single_line": false]),
        Example("func ↓foo(param1: Int, param2: Bool, param3: [String]) { }",
                configuration: ["allows_single_line": false]),
        Example("func ↓foo(param1: Int, param2: Bool, param3: [String]) { }",
                configuration: ["max_number_of_single_line_parameters": 2]),
        Example("""
        func ↓foo(param1: Int,
                  param2: Bool, param3: [String]) { }
       """, configuration: ["max_number_of_single_line_parameters": 3]),
        Example("""
        func ↓foo(param1: Int, param2: Bool, param3: [String]) { }
        """, configuration: ["max_number_of_single_line_parameters": 2]),
    ]
}
