Files
SwiftLint/Source/SwiftLintFramework/Rules/RuleConfigurations/UnusedDeclarationConfiguration.swift
T
JP Simard e63e8cad0f Add UnusedDeclarationRule (#2814)
This PR adds a new `unused_declaration` analyzer rule to lint for unused declarations.
By default, detects unused `fileprivate`, `private` and `internal` declarations.
Configure the rule with `include_public_and_open: true` to also detect unused `public` and `open` declarations.

Completely remove the `unused_private_declaration` rule.

This is built on the work enabling collecting rule infrastructure in https://github.com/realm/SwiftLint/pull/2714.
2019-07-18 18:23:43 -07:00

44 lines
1.6 KiB
Swift

private enum ConfigurationKey: String {
case severity = "severity"
case includePublicAndOpen = "include_public_and_open"
}
public struct UnusedDeclarationConfiguration: RuleConfiguration, Equatable {
private(set) var includePublicAndOpen: Bool
private(set) var severity: ViolationSeverity
public var consoleDescription: String {
return "\(ConfigurationKey.severity.rawValue): \(severity.rawValue), " +
"\(ConfigurationKey.includePublicAndOpen.rawValue): \(includePublicAndOpen)"
}
public init(severity: ViolationSeverity, includePublicAndOpen: Bool) {
self.includePublicAndOpen = includePublicAndOpen
self.severity = severity
}
public mutating func apply(configuration: Any) throws {
guard let configDict = configuration as? [String: Any], !configDict.isEmpty else {
throw ConfigurationError.unknownConfiguration
}
for (string, value) in configDict {
guard let key = ConfigurationKey(rawValue: string) else {
throw ConfigurationError.unknownConfiguration
}
switch (key, value) {
case (.severity, let stringValue as String):
if let severityValue = ViolationSeverity(rawValue: stringValue) {
severity = severityValue
} else {
throw ConfigurationError.unknownConfiguration
}
case (.includePublicAndOpen, let boolValue as Bool):
includePublicAndOpen = boolValue
default:
throw ConfigurationError.unknownConfiguration
}
}
}
}