@@ -83,7 +83,7 @@ extension ModuleError: CustomStringConvertible {
83
83
let packages = packages. joined ( separator: " ', ' " )
84
84
return " multiple targets named ' \( name) ' in: ' \( packages) ' "
85
85
case . moduleNotFound( let target, let type) :
86
- let folderName = type == . test ? " Tests " : " Sources "
86
+ let folderName = ( type == . test) ? " Tests " : ( type == . plugin ) ? " Plugins " : " Sources "
87
87
return " Source files for target \( target) should be located under ' \( folderName) / \( target) ', or a custom sources path can be set with the 'path' property in Package.swift "
88
88
case . artifactNotFound( let target) :
89
89
return " artifact not found for target ' \( target) ' "
@@ -535,9 +535,12 @@ public final class PackageBuilder {
535
535
536
536
/// Predefined test directories, in order of preference.
537
537
public static let predefinedTestDirectories = [ " Tests " , " Sources " , " Source " , " src " , " srcs " ]
538
+
539
+ /// Predefined plugin directories, in order of preference.
540
+ public static let predefinedPluginDirectories = [ " Plugins " ]
538
541
539
- /// Finds the predefined directories for regular and test targets.
540
- private func findPredefinedTargetDirectory( ) -> ( targetDir: String , testTargetDir: String ) {
542
+ /// Finds the predefined directories for regular targets, test targets, and plugin targets.
543
+ private func findPredefinedTargetDirectory( ) -> ( targetDir: String , testTargetDir: String , pluginTargetDir : String ) {
541
544
let targetDir = PackageBuilder . predefinedSourceDirectories. first ( where: {
542
545
fileSystem. isDirectory ( packagePath. appending ( component: $0) )
543
546
} ) ?? PackageBuilder . predefinedSourceDirectories [ 0 ]
@@ -546,7 +549,11 @@ public final class PackageBuilder {
546
549
fileSystem. isDirectory ( packagePath. appending ( component: $0) )
547
550
} ) ?? PackageBuilder . predefinedTestDirectories [ 0 ]
548
551
549
- return ( targetDir, testTargetDir)
552
+ let pluginTargetDir = PackageBuilder . predefinedPluginDirectories. first ( where: {
553
+ fileSystem. isDirectory ( packagePath. appending ( component: $0) )
554
+ } ) ?? PackageBuilder . predefinedPluginDirectories [ 0 ]
555
+
556
+ return ( targetDir, testTargetDir, pluginTargetDir)
550
557
}
551
558
552
559
struct PredefinedTargetDirectory {
@@ -566,6 +573,7 @@ public final class PackageBuilder {
566
573
567
574
let predefinedTargetDirectory = PredefinedTargetDirectory ( fs: fileSystem, path: packagePath. appending ( component: predefinedDirs. targetDir) )
568
575
let predefinedTestTargetDirectory = PredefinedTargetDirectory ( fs: fileSystem, path: packagePath. appending ( component: predefinedDirs. testTargetDir) )
576
+ let predefinedPluginTargetDirectory = PredefinedTargetDirectory ( fs: fileSystem, path: packagePath. appending ( component: predefinedDirs. pluginTargetDir) )
569
577
570
578
/// Returns the path of the given target.
571
579
func findPath( for target: TargetDescription ) throws -> AbsolutePath {
@@ -598,7 +606,15 @@ public final class PackageBuilder {
598
606
}
599
607
600
608
// Check if target is present in the predefined directory.
601
- let predefinedDir = target. isTest ? predefinedTestTargetDirectory : predefinedTargetDirectory
609
+ let predefinedDir : PredefinedTargetDirectory
610
+ switch target. type {
611
+ case . test:
612
+ predefinedDir = predefinedTestTargetDirectory
613
+ case . plugin:
614
+ predefinedDir = predefinedPluginTargetDirectory
615
+ default :
616
+ predefinedDir = predefinedTargetDirectory
617
+ }
602
618
let path = predefinedDir. path. appending ( component: target. name)
603
619
604
620
// Return the path if the predefined directory contains it.
0 commit comments