mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
With the binding of configurations to their associated rule types "unknown configuration" errors can be made more specific mentioning also the rule's identifier in the printed message.
59 lines
2.7 KiB
Swift
59 lines
2.7 KiB
Swift
/// The configuration payload mapping an imported module to a set of modules that are allowed to be
|
|
/// transitively imported.
|
|
struct TransitiveModuleConfiguration<Parent: Rule>: Equatable {
|
|
/// The module imported in a source file.
|
|
let importedModule: String
|
|
/// The set of modules that can be transitively imported by `importedModule`.
|
|
let transitivelyImportedModules: [String]
|
|
|
|
init(configuration: Any) throws {
|
|
guard let configurationDict = configuration as? [String: Any],
|
|
Set(configurationDict.keys) == ["module", "allowed_transitive_imports"],
|
|
let importedModule = configurationDict["module"] as? String,
|
|
let transitivelyImportedModules = configurationDict["allowed_transitive_imports"] as? [String]
|
|
else {
|
|
throw Issue.unknownConfiguration(ruleID: Parent.identifier)
|
|
}
|
|
self.importedModule = importedModule
|
|
self.transitivelyImportedModules = transitivelyImportedModules
|
|
}
|
|
}
|
|
|
|
struct UnusedImportConfiguration: SeverityBasedRuleConfiguration, Equatable {
|
|
typealias Parent = UnusedImportRule
|
|
|
|
var consoleDescription: String {
|
|
return [
|
|
"severity: \(severityConfiguration.consoleDescription)",
|
|
"require_explicit_imports: \(requireExplicitImports)",
|
|
"allowed_transitive_imports: \(allowedTransitiveImports)",
|
|
"always_keep_imports: \(alwaysKeepImports)"
|
|
].joined(separator: ", ")
|
|
}
|
|
|
|
private(set) var severityConfiguration = SeverityConfiguration<Parent>.warning
|
|
private(set) var requireExplicitImports = false
|
|
private(set) var allowedTransitiveImports = [TransitiveModuleConfiguration<Parent>]()
|
|
/// A set of modules to never remove the imports of.
|
|
private(set) var alwaysKeepImports = [String]()
|
|
|
|
mutating func apply(configuration: Any) throws {
|
|
guard let configurationDict = configuration as? [String: Any] else {
|
|
throw Issue.unknownConfiguration(ruleID: Parent.identifier)
|
|
}
|
|
|
|
if let severity = configurationDict["severity"] {
|
|
try severityConfiguration.apply(configuration: severity)
|
|
}
|
|
if let requireExplicitImports = configurationDict["require_explicit_imports"] as? Bool {
|
|
self.requireExplicitImports = requireExplicitImports
|
|
}
|
|
if let allowedTransitiveImports = configurationDict["allowed_transitive_imports"] as? [Any] {
|
|
self.allowedTransitiveImports = try allowedTransitiveImports.map(TransitiveModuleConfiguration.init)
|
|
}
|
|
if let alwaysKeepImports = configurationDict["always_keep_imports"] as? [String] {
|
|
self.alwaysKeepImports = alwaysKeepImports
|
|
}
|
|
}
|
|
}
|