Skip to content

Commit c1cdab2

Browse files
committed
Added skipsHiddenFiles
1 parent 4e4cb9c commit c1cdab2

File tree

4 files changed

+19
-11
lines changed

4 files changed

+19
-11
lines changed

Sources/SwiftDocCoverage/Coverage.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extension String : LocalizedError {
2828
public var errorDescription: String? { self }
2929
}
3030

31-
fileprivate func findFiles(path: String, ext: String) throws -> [URL] {
31+
fileprivate func findFiles(path: String, ext: String, skipsHiddenFiles: Bool) throws -> [URL] {
3232
var isDirectory: ObjCBool = false
3333
guard FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory) else {
3434
throw "Path not found."
@@ -38,7 +38,8 @@ fileprivate func findFiles(path: String, ext: String) throws -> [URL] {
3838
var urls = [URL]()
3939
let url = URL(fileURLWithPath: path)
4040
let resourceKeys = Set<URLResourceKey>([.nameKey, .isDirectoryKey])
41-
if let enumerator = FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.isDirectoryKey]) {
41+
let options: FileManager.DirectoryEnumerationOptions = skipsHiddenFiles ? [.skipsHiddenFiles] : []
42+
if let enumerator = FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.isDirectoryKey, .isHiddenKey], options: options) {
4243
for case let fileURL as URL in enumerator {
4344
guard let resourceValues = try? fileURL.resourceValues(forKeys: resourceKeys),
4445
let isDirectory = resourceValues.isDirectory, !isDirectory,
@@ -73,8 +74,8 @@ public struct Coverage {
7374
return formatter
7475
}()
7576

76-
public init(paths: [String], minAccessLevel: AccessLevel, output: Output = TerminalOutput()) throws {
77-
self.urls = try paths.flatMap { try findFiles(path: $0, ext: ".swift") }
77+
public init(paths: [String], skipsHiddenFiles: Bool = true, minAccessLevel: AccessLevel = .public, output: Output = TerminalOutput()) throws {
78+
self.urls = try paths.flatMap { try findFiles(path: $0, ext: ".swift", skipsHiddenFiles: skipsHiddenFiles) }
7879
guard urls.count > 0 else {
7980
throw "Swift files not found."
8081
}

Sources/swift-doc-coverage/main.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ struct SwiftDocCoverage: ParsableCommand {
5656
@Argument(help: "One or more paths to a directory containing Swift files.")
5757
var inputs: [String]
5858

59+
@Option(name: .shortAndLong, help: "An option to skip hidden files.")
60+
var skipsHiddenFiles: Bool = true
61+
5962
@Option(name: .shortAndLong, help: "The minimum access level of the symbols considered for coverage statistics: \(AccessLevelArgument.open), \(AccessLevelArgument.public), \(AccessLevelArgument.internal), \(AccessLevelArgument.fileprivate), \(AccessLevelArgument.private).")
6063
var minimumAccessLevel: AccessLevelArgument = .public
6164

@@ -71,7 +74,7 @@ struct SwiftDocCoverage: ParsableCommand {
7174
out = try FileOutput(path: path)
7275
}
7376

74-
let coverage = try Coverage(paths: inputs, minAccessLevel: minimumAccessLevel.accessLevel, output: out)
77+
let coverage = try Coverage(paths: inputs, skipsHiddenFiles: skipsHiddenFiles, minAccessLevel: minimumAccessLevel.accessLevel, output: out)
7578

7679
switch report {
7780
case .statistics:

Tests/SwiftDocCoverageTests/SwiftDocCoverageTests.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -413,13 +413,13 @@ final class FileTests: XCTestCase {
413413
}
414414

415415
func test_not_found() throws {
416-
XCTAssertThrowsError(try Coverage(paths: [Self.directoryURL.appendingPathComponent("NotFound").path], minAccessLevel: .public)) { error in
416+
XCTAssertThrowsError(try Coverage(paths: [Self.directoryURL.appendingPathComponent("NotFound").path])) { error in
417417
XCTAssert(error.localizedDescription == "Path not found.")
418418
}
419419
}
420420

421421
func test_not_swift_file() throws {
422-
XCTAssertThrowsError(try Coverage(paths: [Self.readmeURL.path], minAccessLevel: .public)) { error in
422+
XCTAssertThrowsError(try Coverage(paths: [Self.readmeURL.path])) { error in
423423
XCTAssert(error.localizedDescription == "Not swift file.")
424424
}
425425
}
@@ -432,7 +432,7 @@ final class FileTests: XCTestCase {
432432
}
433433

434434
func test_report() throws {
435-
let coverage = try Coverage(paths: [Self.fileURL.path], minAccessLevel: .public)
435+
let coverage = try Coverage(paths: [Self.fileURL.path])
436436
let report = try coverage.report()
437437

438438
XCTAssert(report.totalCount == 4)
@@ -446,13 +446,13 @@ final class FileTests: XCTestCase {
446446
let tempDirectory = tempDirectory()
447447
defer { try? FileManager.default.removeItem(at: tempDirectory) }
448448

449-
XCTAssertThrowsError(try Coverage(paths: [tempDirectory.path], minAccessLevel: .public)) { error in
449+
XCTAssertThrowsError(try Coverage(paths: [tempDirectory.path])) { error in
450450
XCTAssert(error.localizedDescription == "Swift files not found.")
451451
}
452452
}
453453

454454
func test_directory() throws {
455-
let coverage = try Coverage(paths: [Self.directoryURL.path], minAccessLevel: .public)
455+
let coverage = try Coverage(paths: [Self.directoryURL.path])
456456
let report = try coverage.report()
457457

458458
XCTAssert(report.totalCount == 4)
@@ -461,11 +461,13 @@ final class FileTests: XCTestCase {
461461
}
462462

463463
func test_warnings() throws {
464-
let coverage = try Coverage(paths: [Self.fileURL.path], minAccessLevel: .public)
464+
let coverage = try Coverage(paths: [Self.fileURL.path])
465465
try coverage.reportWarnings()
466466
}
467467
}
468468

469+
#if !os(watchOS)
470+
469471
extension Process {
470472

471473
func run(_ executableURL: URL, arguments: [String]? = nil) throws -> String {
@@ -552,3 +554,5 @@ final class ToolTests: XCTestCase {
552554
XCTAssert(text.contains("Total: 50%"))
553555
}
554556
}
557+
558+
#endif

swift-doc-coverage.png

-2 KB
Binary file not shown.

0 commit comments

Comments
 (0)