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.
65 lines
2.3 KiB
Swift
65 lines
2.3 KiB
Swift
private enum ConfigurationKey: String {
|
|
case severity
|
|
case additionalTerms = "additional_terms"
|
|
case overrideTerms = "override_terms"
|
|
case overrideAllowedTerms = "override_allowed_terms"
|
|
}
|
|
|
|
struct InclusiveLanguageConfiguration: SeverityBasedRuleConfiguration, Equatable {
|
|
typealias Parent = InclusiveLanguageRule
|
|
|
|
var severityConfiguration = SeverityConfiguration<Parent>(.warning)
|
|
private var additionalTerms: Set<String>?
|
|
private var overrideTerms: Set<String>?
|
|
private var overrideAllowedTerms: Set<String>?
|
|
private(set) var allTerms: [String]
|
|
private(set) var allAllowedTerms: Set<String>
|
|
|
|
var consoleDescription: String {
|
|
"severity: \(severityConfiguration.consoleDescription)"
|
|
+ ", additional_terms: \(additionalTerms?.sorted() ?? [])"
|
|
+ ", override_terms: \(overrideTerms?.sorted() ?? [])"
|
|
+ ", override_allowed_terms: \(overrideAllowedTerms?.sorted() ?? [])"
|
|
}
|
|
|
|
private let defaultTerms: Set<String> = [
|
|
"whitelist",
|
|
"blacklist",
|
|
"master",
|
|
"slave"
|
|
]
|
|
|
|
private let defaultAllowedTerms: Set<String> = [
|
|
"mastercard"
|
|
]
|
|
|
|
init() {
|
|
self.allTerms = defaultTerms.sorted()
|
|
self.allAllowedTerms = defaultAllowedTerms
|
|
}
|
|
|
|
mutating func apply(configuration: Any) throws {
|
|
guard let configuration = configuration as? [String: Any] else {
|
|
throw Issue.unknownConfiguration(ruleID: Parent.identifier)
|
|
}
|
|
|
|
if let severityString = configuration[ConfigurationKey.severity.rawValue] {
|
|
try severityConfiguration.apply(configuration: severityString)
|
|
}
|
|
|
|
additionalTerms = lowercasedSet(for: .additionalTerms, from: configuration)
|
|
overrideTerms = lowercasedSet(for: .overrideTerms, from: configuration)
|
|
overrideAllowedTerms = lowercasedSet(for: .overrideAllowedTerms, from: configuration)
|
|
|
|
var allTerms = overrideTerms ?? defaultTerms
|
|
allTerms.formUnion(additionalTerms ?? [])
|
|
self.allTerms = allTerms.sorted()
|
|
allAllowedTerms = overrideAllowedTerms ?? defaultAllowedTerms
|
|
}
|
|
|
|
private func lowercasedSet(for key: ConfigurationKey, from config: [String: Any]) -> Set<String>? {
|
|
guard let list = config[key.rawValue] as? [String] else { return nil }
|
|
return Set(list.map { $0.lowercased() })
|
|
}
|
|
}
|