         self.init(enableAllRules: enableAllRules, cachePath: cachePath)!
         setCached(atPath: fullPath)
     }
+
+    // MARK: Equatable
+
+    public static func == (lhs: Configuration, rhs: Configuration) -> Bool {
+        return (lhs.excluded == rhs.excluded) &&
+            (lhs.included == rhs.included) &&
+            (lhs.reporter == rhs.reporter) &&
+            (lhs.configurationPath == rhs.configurationPath) &&
+            (lhs.rootPath == lhs.rootPath) &&
+            (lhs.rules == rhs.rules)
+    }
 }
 
 // MARK: Identifier Validation

import SourceKittenFramework

public struct Configuration: Equatable {
    public static let fileName = ".swiftlint.yml"
    public let included: [String]             // included
    public let excluded: [String]             // excluded
    public let reporter: String               // reporter (xcode, json, csv, checkstyle)
    public var warningThreshold: Int?         // warning threshold
    public let rules: [Rule]
    public var rootPath: String?              // the root path to search for nested configurations
    public var configurationPath: String?     // if successfully loaded from a path
    public let cachePath: String?

    public init?(disabledRules: [String] = [],
                 optInRules: [String] = [],

    }.joined(separator: "\n"))
    return true
}
