Skip to content

Commit a842f06

Browse files
committed
Eliminate duplicate code in subproject discovery
1 parent b40200e commit a842f06

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

project/project.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,27 +96,35 @@ func findProjectsUnderPath(targetPath *paths.Path, projectType projecttype.Type,
9696
// findSubprojects finds subprojects of the given project.
9797
// For example, the subprojects of a library are its example sketches.
9898
func findSubprojects(superproject Type, apexSuperprojectType projecttype.Type) []Type {
99-
var immediateSubprojects []Type
99+
subprojectFolderNames := []string{}
100+
var subProjectType projecttype.Type
101+
var searchPathsRecursively bool
100102

103+
// Determine possible subproject paths
101104
switch superproject.ProjectType {
102105
case projecttype.Sketch:
103106
// Sketches don't have subprojects
104107
return nil
105108
case projecttype.Library:
106-
for _, subprojectFolderName := range library.ExamplesFolderSupportedNames() {
107-
subprojectPath := superproject.Path.Join(subprojectFolderName)
108-
immediateSubprojects = append(immediateSubprojects, findProjectsUnderPath(subprojectPath, projecttype.Sketch, true)...)
109-
}
109+
subprojectFolderNames = append(subprojectFolderNames, library.ExamplesFolderSupportedNames()...)
110+
subProjectType = projecttype.Sketch
111+
searchPathsRecursively = true // Examples sketches can be under nested subfolders
110112
case projecttype.Platform:
111-
for _, subprojectFolderName := range platform.BundledLibrariesFolderNames() {
112-
subprojectPath := superproject.Path.Join(subprojectFolderName)
113-
immediateSubprojects = append(immediateSubprojects, findProjectsUnderPath(subprojectPath, projecttype.Library, false)...)
114-
}
113+
subprojectFolderNames = append(subprojectFolderNames, platform.BundledLibrariesFolderNames()...)
114+
subProjectType = projecttype.Library
115+
searchPathsRecursively = false // Bundled libraries must be in the root of the libraries folder
115116
case projecttype.PackageIndex:
116117
// Platform indexes don't have subprojects
117118
return nil
118119
}
119120

121+
// Search the subproject paths for projects
122+
var immediateSubprojects []Type
123+
for _, subprojectFolderName := range subprojectFolderNames {
124+
subprojectPath := superproject.Path.Join(subprojectFolderName)
125+
immediateSubprojects = append(immediateSubprojects, findProjectsUnderPath(subprojectPath, subProjectType, searchPathsRecursively)...)
126+
}
127+
120128
var allSubprojects []Type
121129
// Subprojects may have their own subprojects.
122130
for _, immediateSubproject := range immediateSubprojects {

0 commit comments

Comments
 (0)