From 054c031f5daa58f3ba15015001e1dbab97329b02 Mon Sep 17 00:00:00 2001 From: Michalis Karagiorgos Date: Wed, 4 Mar 2026 20:16:08 +0200 Subject: [PATCH 1/3] Add excludeAllSPMTestTargets configuration option - Add excludeAllSPMTestTargets boolean property to Configurations struct - Update PackagesParser to skip all test targets when flag is true - Update mock() function in ConfigFactoryTests - Update README.md with documentation for new feature Made-with: Cursor --- README.md | 2 ++ Sources/Configuration/Configuration.swift | 6 ++++++ Sources/SPMParsing/PackagesParser.swift | 3 +++ .../Configuration/ConfigFactoryTests.swift | 3 ++- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 54cf793..c9adc87 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ For example, if you need to: - exclude `.build` and `.github` paths from scanning - exclude target `SomeTarget` from scanning - exclude package `SomePackage` from scanning +- exclude all SPM test targets from scanning - exclude `someInternalPath` only for `SICDemoApp` target from scanning - exclude `SomeImport` import statements only for `SICDemoApp` target from scanning - throw error when scan finds `STLT` import statement only for `SICDemoApp` target @@ -56,6 +57,7 @@ excludedTargets: - SomeTarget excludedPackages: - SomePackage +excludeAllSPMTestTargets: false diagrams: regular: layers: diff --git a/Sources/Configuration/Configuration.swift b/Sources/Configuration/Configuration.swift index 99ab94c..c21d96b 100644 --- a/Sources/Configuration/Configuration.swift +++ b/Sources/Configuration/Configuration.swift @@ -13,6 +13,7 @@ struct Configurations: Codable, Equatable { let excludedPaths: [String] let excludedTargets: [String] let excludedPackages: [String] + let excludeAllSPMTestTargets: Bool let diagrams: DiagramsConfiguration? init( @@ -20,12 +21,14 @@ struct Configurations: Codable, Equatable { excludedTargets: [String] = [], excludedPaths: [String] = [], excludedPackages: [String] = [], + excludeAllSPMTestTargets: Bool = false, diagrams: DiagramsConfiguration? = nil ) { self.configurations = configurations self.excludedTargets = excludedTargets self.excludedPaths = excludedPaths self.excludedPackages = excludedPackages + self.excludeAllSPMTestTargets = excludeAllSPMTestTargets self.diagrams = diagrams } @@ -34,6 +37,7 @@ struct Configurations: Codable, Equatable { case excludedPaths case excludedPackages case excludedTargets + case excludeAllSPMTestTargets case diagrams } @@ -43,10 +47,12 @@ struct Configurations: Codable, Equatable { let excludedTargets = try? container.decode([String].self, forKey: .excludedTargets) let excludedPackages = try? container.decode([String].self, forKey: .excludedPackages) let excludedPaths = try? container.decode([String].self, forKey: .excludedPaths) + let excludeAllSPMTestTargets = try? container.decode(Bool.self, forKey: .excludeAllSPMTestTargets) self.diagrams = try? container.decode(DiagramsConfiguration.self, forKey: .diagrams) self.excludedTargets = excludedTargets ?? [] self.excludedPackages = excludedPackages ?? [] self.excludedPaths = excludedPaths ?? [] + self.excludeAllSPMTestTargets = excludeAllSPMTestTargets ?? false self.configurations = configurations ?? [:] } } diff --git a/Sources/SPMParsing/PackagesParser.swift b/Sources/SPMParsing/PackagesParser.swift index ed2be27..6e45175 100644 --- a/Sources/SPMParsing/PackagesParser.swift +++ b/Sources/SPMParsing/PackagesParser.swift @@ -40,6 +40,9 @@ final class PackagesParser { diagramBuilder.append(package: package) let targets = package.targets for target in targets { + if configs.excludeAllSPMTestTargets && target.type == .test { + continue + } let config = configs.configurations[target.name] ?? .default print("Package: \(package.name) Target: \(target.name) - Type: \(target.type.rawValue)") guard target.duplicateDependencies.isEmpty else { diff --git a/Tests/SwiftImportChecksTests/Configuration/ConfigFactoryTests.swift b/Tests/SwiftImportChecksTests/Configuration/ConfigFactoryTests.swift index b7a1ef4..a8d5c28 100644 --- a/Tests/SwiftImportChecksTests/Configuration/ConfigFactoryTests.swift +++ b/Tests/SwiftImportChecksTests/Configuration/ConfigFactoryTests.swift @@ -98,7 +98,8 @@ extension Configurations { ) ], excludedTargets: ["Tests"], - excludedPackages: ["PackageTest"] + excludedPackages: ["PackageTest"], + excludeAllSPMTestTargets: false ) } } From e99ff982760ea57233b7082fc945a252acc060e8 Mon Sep 17 00:00:00 2001 From: Michalis Karagiorgos Date: Wed, 4 Mar 2026 20:20:34 +0200 Subject: [PATCH 2/3] Add .build/ directory to .gitignore Made-with: Cursor --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0a0f233..f17d500 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ DerivedData/ .swiftpm/configuration/registries.json .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata .netrc +.build/ From d3158bcba2973811dd1d06f35de56dd32d2b570e Mon Sep 17 00:00:00 2001 From: Michalis Karagiorgos Date: Wed, 4 Mar 2026 20:21:32 +0200 Subject: [PATCH 3/3] update packages.html --- packages.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages.html b/packages.html index 471a37c..7eb1cc0 100644 --- a/packages.html +++ b/packages.html @@ -7,9 +7,7 @@ group framework(vscode-icons:file-type-swift)[Framework] junction _framework in framework %% Foundation - service examplemodule(vscode-icons:file-type-package)[ExampleModule] in foundation - %% Framework - service othermodule(vscode-icons:file-type-package)[OtherModule] in framework + service testtarget(vscode-icons:file-type-package)[TestTarget] in foundation _framework:B -- T:_foundation - + \ No newline at end of file