mirror of
https://github.com/realm/SwiftLint.git
synced 2026-06-06 20:18:40 +00:00
ffb2f4f76d
* Require Swift 5.0 to build * Update CI * Stop testing with Swift 4.x & Xcode 10.0/10.1 * Use official Swift docker image instead of norionomura's * Use Xcode 10.3 as latest stable version * Update READMEs * Fixup xcodeproj * Fixup CI Swift container image tag * Fixup changelog
31 lines
1.2 KiB
Swift
31 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
public protocol LintableFileManager {
|
|
func filesToLint(inPath: String, rootDirectory: String?) -> [String]
|
|
func modificationDate(forFileAtPath: String) -> Date?
|
|
}
|
|
|
|
extension FileManager: LintableFileManager {
|
|
public func filesToLint(inPath path: String, rootDirectory: String? = nil) -> [String] {
|
|
let rootPath = rootDirectory ?? currentDirectoryPath
|
|
let absolutePath = path.bridge()
|
|
.absolutePathRepresentation(rootDirectory: rootPath).bridge()
|
|
.standardizingPath
|
|
|
|
// if path is a file, it won't be returned in `enumerator(atPath:)`
|
|
if absolutePath.bridge().isSwiftFile() && absolutePath.isFile {
|
|
return [absolutePath]
|
|
}
|
|
|
|
return subpaths(atPath: absolutePath)?.parallelCompactMap { element -> String? in
|
|
guard element.bridge().isSwiftFile() else { return nil }
|
|
let absoluteElementPath = absolutePath.bridge().appendingPathComponent(element)
|
|
return absoluteElementPath.isFile ? absoluteElementPath : nil
|
|
} ?? []
|
|
}
|
|
|
|
public func modificationDate(forFileAtPath path: String) -> Date? {
|
|
return (try? attributesOfItem(atPath: path))?[.modificationDate] as? Date
|
|
}
|
|
}
|