41 lines
1.3 KiB
Swift
41 lines
1.3 KiB
Swift
//
|
|
// NSFileManager+SwiftLint.swift
|
|
// SwiftLint
|
|
//
|
|
// Created by JP Simard on 5/28/15.
|
|
// Copyright © 2015 Realm. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public protocol LintableFileManager {
|
|
func filesToLint(inPath: String, rootDirectory: String?) -> [String]
|
|
func modifiedDate(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 enumerator(atPath: absolutePath)?.flatMap { element in
|
|
if let element = element as? String, element.bridge().isSwiftFile() {
|
|
return absolutePath.bridge().appendingPathComponent(element)
|
|
}
|
|
return nil
|
|
} ?? []
|
|
}
|
|
|
|
public func modifiedDate(forFileAtPath path: String) -> Date? {
|
|
// swiftlint:disable:next force_cast
|
|
return try? attributesOfItem(atPath: path)[.modificationDate] as! Date
|
|
}
|
|
}
|