mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
87 lines
3.2 KiB
Swift
87 lines
3.2 KiB
Swift
//
|
|
// FileHeaderConfiguration.swift
|
|
// SwiftLint
|
|
//
|
|
// Created by Marcelo Fabri on 01/12/16.
|
|
// Copyright © 2016 Realm. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public struct FileHeaderConfiguration: RuleConfiguration, Equatable {
|
|
private(set) var severityConfiguration = SeverityConfiguration(.warning)
|
|
private var requiredString: String?
|
|
private var requiredPattern: String?
|
|
private var forbiddenString: String?
|
|
private var forbiddenPattern: String?
|
|
|
|
private var _forbiddenRegex: NSRegularExpression?
|
|
|
|
private(set) var requiredRegex: NSRegularExpression?
|
|
private(set) var forbiddenRegex: NSRegularExpression? {
|
|
get {
|
|
if _forbiddenRegex != nil {
|
|
return _forbiddenRegex
|
|
}
|
|
|
|
if requiredRegex == nil {
|
|
return FileHeaderConfiguration.defaultRegex
|
|
}
|
|
|
|
return nil
|
|
}
|
|
set {
|
|
_forbiddenRegex = newValue
|
|
}
|
|
}
|
|
|
|
private static let defaultRegex = regex("\\bCopyright\\b", options: [.caseInsensitive])
|
|
|
|
public var consoleDescription: String {
|
|
let requiredStringDescription = requiredString ?? "None"
|
|
let requiredPatternDescription = requiredPattern ?? "None"
|
|
let forbiddenStringDescription = forbiddenString ?? "None"
|
|
let forbiddenPatternDescription = forbiddenPattern ?? "None"
|
|
return severityConfiguration.consoleDescription +
|
|
", required_string: \(requiredStringDescription)" +
|
|
", required_pattern: \(requiredPatternDescription)" +
|
|
", forbidden_string: \(forbiddenStringDescription)" +
|
|
", forbidden_pattern: \(forbiddenPatternDescription)"
|
|
}
|
|
|
|
public init() {}
|
|
|
|
public mutating func apply(configuration: Any) throws {
|
|
guard let configuration = configuration as? [String: String] else {
|
|
throw ConfigurationError.unknownConfiguration
|
|
}
|
|
|
|
if let requiredString = configuration["required_string"] {
|
|
self.requiredString = requiredString
|
|
requiredRegex = try NSRegularExpression(pattern: requiredString,
|
|
options: [.ignoreMetacharacters])
|
|
} else if let requiredPattern = configuration["required_pattern"] {
|
|
self.requiredPattern = requiredPattern
|
|
requiredRegex = try .cached(pattern: requiredPattern)
|
|
}
|
|
|
|
if let forbiddenString = configuration["forbidden_string"] {
|
|
self.forbiddenString = forbiddenString
|
|
forbiddenRegex = try NSRegularExpression(pattern: forbiddenString,
|
|
options: [.ignoreMetacharacters])
|
|
} else if let forbiddenPattern = configuration["forbidden_pattern"] {
|
|
self.forbiddenPattern = forbiddenPattern
|
|
forbiddenRegex = try .cached(pattern: forbiddenPattern)
|
|
}
|
|
|
|
if let severityString = configuration["severity"] {
|
|
try severityConfiguration.apply(configuration: severityString)
|
|
}
|
|
}
|
|
}
|
|
|
|
public func == (lhs: FileHeaderConfiguration,
|
|
rhs: FileHeaderConfiguration) -> Bool {
|
|
return lhs.severityConfiguration == rhs.severityConfiguration
|
|
}
|