1
0
Fork 0

Add re-export umbrella module generation with transitive import analysis

This commit is contained in:
Brendan Szymanski 2026-07-01 20:22:12 -04:00
parent b32bc595ac
commit 2956b23b58

View file

@ -288,6 +288,32 @@ public struct CodeGenerator {
return allOutputs
}
/// Generates re-export umbrella Swift files for each module in the monorepo.
///
/// Each umbrella file (e.g., `"Sources/Gtk/Gtk.swift"`) contains
/// `@_exported import` statements for all transitive dependencies,
/// so that importing a higher-level module (e.g. `import Gtk`)
/// exposes the full type lattice.
///
/// - Parameter analysis: The resolved multi-package analysis.
/// - Returns: A dictionary mapping relative file paths (e.g.
/// `"Sources/Gtk/Gtk.swift"`) to file content.
public static func generateReexportUmbrellas(analysis: MultiPackageAnalysis) -> [String: String] {
var umbrellas: [String: String] = [:]
for (moduleName, _) in analysis.repositories {
let transitive = analysis.transitiveDependencies[moduleName] ?? []
var content = "// Generated by SwiftGtkGen. DO NOT EDIT.\n\n"
for dep in transitive.sorted() {
content += "@_exported import \(dep)\n"
}
content += "\n"
umbrellas["Sources/\(moduleName)/\(moduleName).swift"] = content
}
return umbrellas
}
/// Generates the standard file header for monorepo source files.
private func fileHeader(moduleName: String, directImports: Set<String>) -> String {
var imports = "import C\(moduleName)\nimport Foundation\n"