                     noClassMocking: Bool,
                     debugMode: Bool,
                     globEnabled: Bool,
+                    regex: String,
                     files: [String]) {
 
             self.output = output

import SourceKittenFramework
import FileKit
import CuckooGeneratorFramework

private func curry<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, R>
    (_ f: @escaping (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) -> R)
    -> (P1) -> (P2) -> (P3) -> (P4) -> (P5) -> (P6) -> (P7) -> (P8) -> (P9) -> (P10) -> (P11) -> R {
        return { p1 in { p2 in { p3 in { p4 in { p5 in { p6 in { p7 in { p8 in { p9 in { p10 in { p11 in
            f(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
        } } } } } } } } } } }
}

public struct GenerateMocksCommand: CommandProtocol {

    }

    private func removeClassesAndProtocols(from files: [FileRepresentation], in excluded: [String]) -> [FileRepresentation] {
        return removeClassesAndProtocols(from: files, filter: { token in
            guard let token = token as? ContainerToken else {
                return true
            }
            return !excluded.contains(token.name)
        })
    }

    private func removeClassesAndProtocols(from files: [FileRepresentation], using pattern: String) -> [FileRepresentation] {
        guard !pattern.isEmpty else { return files }

        let regex: NSRegularExpression
        do {
            regex = try NSRegularExpression(pattern: pattern, options: [])
        } catch let error as NSError {
            fatalError("Invalid regular expression:" + error.description)
        }

        return removeClassesAndProtocols(from: files, filter: { token in
            guard let token = token as? ContainerToken else {
                return true
            }
            return regex.firstMatch(in: token.name, options: [], range: NSMakeRange(0, token.name.count)) != nil
        })
    }

    private func removeClassesAndProtocols(from files: [FileRepresentation], filter: (Token) -> Bool) -> [FileRepresentation] {
        return files.map {
            FileRepresentation(sourceFile: $0.sourceFile, declarations: $0.declarations.filter(filter))
        }
    }


    public struct Options: OptionsProtocol {
        let files: [String]
